Agents

Connect as an MCP server

The remote Streamable HTTP MCP server exposes the same contract as the REST API — search, profiles, emails, price estimates, account status, and durable jobs — so any MCP-capable agent can use Stormy as a tool.

Claude Code

terminal
claude mcp add --transport http stormy https://stormy.ai/mcp \
  --header "Authorization: Bearer $STORMY_API_KEY"

Codex

~/.codex/config.toml
[mcp_servers.stormy]
url = "https://stormy.ai/mcp"
bearer_token_env_var = "STORMY_API_KEY"

Claude Agent SDK

Python
from claude_agent_sdk import ClaudeAgentOptions, ClaudeSDKClient
import os

options = ClaudeAgentOptions(
    mcp_servers={
        "stormy": {
            "type": "http",
            "url": "https://stormy.ai/mcp",
            "headers": {"Authorization": f"Bearer {os.environ['STORMY_API_KEY']}"},
        }
    },
)

async with ClaudeSDKClient(options=options) as agent:
    await agent.query("Find 25 cached YouTube roofing creators.")
    async for message in agent.receive_response():
        print(message)

Tools

search_peopleplatform · query · limit · fresh

Discover people or public posts from a plain-language query.

lookup_profiletarget · platform · fresh · include_posts

Resolve a URL, handle, or channel ID into one normalized profile.

find_emailsplatform · targets[1..25]

Verified email enrichment. Bills only successful finds.

estimate_pricequantity · include_email

Quote the exact rate card before a large call.

account_status

Entitlements, remaining prepaid usage, and top-up URL.

Agent execution policy

Small ordinary request → cached direct tool. Fresh, bulk, or email request → estimate when needed, start one durable job with a stable idempotency key, then honor poll_after_seconds. Split email targets into batches of 25. Never infer contacts from search results, and never resubmit a nonterminal job.

Machine-readable contract: capabilities JSON · OpenAPI · llms.txt