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
claude mcp add --transport http stormy https://stormy.ai/mcp \
--header "Authorization: Bearer $STORMY_API_KEY"Codex
[mcp_servers.stormy]
url = "https://stormy.ai/mcp"
bearer_token_env_var = "STORMY_API_KEY"Claude Agent SDK
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 · freshDiscover people or public posts from a plain-language query.
lookup_profiletarget · platform · fresh · include_postsResolve 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_emailQuote 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