viral-mcp

viral-mcp

MCP server that wraps the last30days research engine, enabling agents to run topic research across social/web sources with a synthesis contract.

Category
Visit Server

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_research result 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/sync pulls 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.yml bumps 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 in src/instructions.ts. If upstream renames the # OUTPUT CONTRACT section, /healthz reports contractExtraction: "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

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.

Official
Featured
TypeScript
Magic Component Platform (MCP)

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.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

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.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

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.

Official
Featured
TypeScript
Kagi MCP Server

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.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

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.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured