tweetfeed-mcp
Model Context Protocol (MCP) server for tweetfeed.live.
Exposes the public IOC feed (URLs, domains, IPs, SHA256/MD5 hashes shared by the infosec community on Twitter/X) as MCP tools so AI agents can query threat intel programmatically.
- Endpoint:
https://mcp.tweetfeed.live/(HTTP JSON-RPC 2.0, POST) - Protocol version: 2025-11-25 (negotiated; older clients fall back automatically)
- Auth: none (all IOC data is CC0)
- License (data): CC0-1.0 · License (code): MIT
Tools
Resources
Besides the 14 tools, the server exposes the feed as MCP resources (resources/list, resources/templates/list, resources/read): 7 static documents plus 2 URI templates, each returning the raw JSON of the matching api.tweetfeed.live document. Tools are the filtered, size-bounded path; resources are for clients that want a whole document (a status panel, a whole-window blocklist sync).
An unknown URI or an expired campaign id returns JSON-RPC error -32002 "Resource not found".
Prompts
Besides the 14 tools and the resources above, the server also speaks MCP prompts (prompts/list, prompts/get, params name and arguments as strings): ready-made recipes that chain several tool calls into one instruction sequence for the model to run and report back on. Where tools are chosen by the model and resources are raw documents, prompts are recipes the user invokes directly - they show up as slash commands in Claude Desktop and Claude Code.
Use with Claude Desktop / Claude.ai / other MCP clients
{
"mcpServers": {
"tweetfeed": {
"url": "https://mcp.tweetfeed.live/"
}
}
}
Or from the Claude Code CLI:
claude mcp add tweetfeed https://mcp.tweetfeed.live/
Use as a ChatGPT connector
ChatGPT (Settings > Connectors > Create, or a Deep research custom connector)
accepts https://mcp.tweetfeed.live/ with no authentication. The server
exposes the required search and fetch tools alongside the others, and
every result carries a tweetfeed.live URL so ChatGPT can cite it.
Quick test
curl -sX POST https://mcp.tweetfeed.live/ \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}' | jq .
# Example tool call:
curl -sX POST https://mcp.tweetfeed.live/ \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","method":"tools/call","id":2,
"params":{"name":"query_iocs",
"arguments":{"time":"today","tag":"phishing","type":"url","limit":5}}}' | jq .
# Example resource read:
curl -sX POST https://mcp.tweetfeed.live/ \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","method":"resources/read","id":3,
"params":{"uri":"tweetfeed://status"}}' | jq .
# Example prompt call:
curl -sX POST https://mcp.tweetfeed.live/ \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","method":"prompts/get","id":4,
"params":{"name":"triage_ioc","arguments":{"ioc":"example.com"}}}' | jq .
Develop
npm install
npm run dev # wrangler dev on http://localhost:8787
MCP_URL=http://localhost:8787 npm test
Deploy
npm run deploy # wrangler deploy (routes mcp.tweetfeed.live/*)
MCP_URL=https://mcp.tweetfeed.live npm test