viral-mcp
MCP server that wraps the last30days research engine, enabling agents to run topic research across social/web sources with a synthesis contract.
README
viral-mcp
Team MCP server wrapping the last30days-skill research engine.
- One server, central API keys. All provider keys (ScrapeCreators, xAI, Brave, Gemini, …) live on the server. Teammates get a bearer token, never the keys.
- Any agent can use it — Claude Code, Cursor, Codex, or programmatically via the AI SDK — over Streamable HTTP MCP.
- The skill's instructions travel with the data. Every
last30days_researchresult is prefixed with the upstream SKILL.md synthesis contract (badge + LAWs), extracted live from the synced upstream, so the calling model writes the canonical brief. - Always up to date. Upstream is a git submodule. A daily GitHub Action bumps it;
POST /admin/syncpulls it into a running server with zero downtime. We hold no diffs against upstream, so sync can never conflict.
Architecture
agent (Claude Code / Cursor / AI SDK)
│ Streamable HTTP MCP + bearer token
▼
viral-mcp (Express + @modelcontextprotocol/sdk)
│ spawns per request
▼
upstream/skills/last30days/scripts/last30days.py ← git submodule, synced daily
│ server-side API keys (.env)
▼
Reddit · X · YouTube · TikTok · HN · Polymarket · GitHub · Bluesky · web
The tool returns synthesis contract + ranked evidence; the caller's model does the final synthesis. This mirrors how the skill works in Claude Code, where the host model is the synthesizer.
MCP surface
| Kind | Name | Purpose |
|---|---|---|
| tool | last30days_research |
Run the engine: topic, optional sources, depth, github_user, x_handle, subreddits, mock |
| tool | last30days_diagnose |
Per-source availability report (which keys/CLIs the server has) |
| resource | last30days://skill.md |
Full upstream SKILL.md |
| resource | last30days://synthesis-contract |
Extracted output contract |
| prompt | last30days-synthesis |
Same contract as a prompt |
Run it
cp .env.template .env # fill in keys + AUTH_TOKENS + ADMIN_TOKEN
docker compose up -d --build
curl localhost:3030/healthz
Local dev (needs Python ≥ 3.12 and Node ≥ 20):
npm install
git submodule update --init
PYTHON_BIN=python3.13 AUTH_TOKENS=me:dev npm run dev
Put a TLS reverse proxy (Caddy is two lines) in front of port 3030 in production.
Connect
Claude Code
claude mcp add --transport http last30days https://research.example.com/mcp \
--header "Authorization: Bearer <your-token>"
AI SDK — see examples/ai-sdk-client.ts:
import { createMCPClient } from "@ai-sdk/mcp";
const mcp = await createMCPClient({
transport: { type: "http", url: "https://research.example.com/mcp",
headers: { Authorization: "Bearer <token>" } },
});
const tools = await mcp.tools();
Upstream sync
- Daily:
.github/workflows/sync-upstream.ymlbumps the submodule, verifies the contract anchors still extract, smoke-tests the engine with--mock, commits. - One click:
curl -X POST https://research.example.com/admin/sync -H "Authorization: Bearer $ADMIN_TOKEN"— pulls upstream main and re-extracts the contract in-process. - Rule: never edit files under
upstream/. All adaptation happens at runtime insrc/instructions.ts. If upstream renames the# OUTPUT CONTRACTsection,/healthzreportscontractExtraction: "fallback"and the CI anchor check fails loudly.
Keys (.env)
See .env.template. Minimum useful set: one reasoning key (GOOGLE_API_KEY), one web-search key (BRAVE_API_KEY or PARALLEL_API_KEY), XAI_API_KEY for X, SCRAPECREATORS_API_KEY for TikTok/Instagram. Reddit, Hacker News, Polymarket and GitHub work with no keys.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.