{
  "$schema": "https://chatbotnews.ai/mcp-spec/schema/v1.json",
  "spec": {
    "name": "ChatbotNews.ai MCP Server Specification",
    "version": "1.0",
    "status": "locked",
    "stage": "draft",
    "issued": "2026-04-26",
    "canonical_uri": "https://chatbotnews.ai/mcp-spec",
    "markdown_source": "https://chatbotnews.ai/mcp-spec/chatbotnews-mcp-spec.md",
    "license_spec": "CC-BY-4.0",
    "license_code": "MIT",
    "sha256": "52319426b62cecd16f078ab39e0dd591ebf4565634564cb56e11ea733e940900",
    "based_on": {
      "type": "Article",
      "title": "ChatbotNews.ai: Engineering the Post-Aggregator News Architecture for the AI Citation Era",
      "doi": "10.5281/zenodo.19607209",
      "url": "https://doi.org/10.5281/zenodo.19607209"
    }
  },
  "author": {
    "name": "Tendai Frank Tagarira",
    "alternateName": "FatbikeHero",
    "jobTitle": "Metadata Expressionist",
    "url": "https://www.fatbikehero.com/",
    "uri": "https://www.fatbikehero.com/#artist",
    "address": {
      "locality": "Aarhus",
      "country": "DK"
    },
    "sameAs": [
      "https://www.imdb.com/name/nm10753441/",
      "https://doi.org/10.5281/zenodo.19607209"
    ]
  },
  "implementing_entity": {
    "name": "ChatbotNews.ai Editorial",
    "type": "NewsMediaOrganization",
    "url": "https://chatbotnews.ai/",
    "founded": "2026"
  },
  "server": {
    "endpoint": "https://mcp.chatbotnews.ai/mcp",
    "transport": "Streamable HTTP",
    "protocol": "JSON-RPC 2.0",
    "authentication": "none",
    "session_model": "stateless",
    "origin_validation": true,
    "rate_limit": {
      "type": "soft",
      "requests_per_minute": 60,
      "scope": "source_ip"
    }
  },
  "design_principles": [
    "authless_read_only",
    "source_integrity_at_protocol_layer",
    "citation_first_payload_shape",
    "structural_parity_with_rest_api",
    "tool_annotations_enforced"
  ],
  "tools": [
    {
      "name": "search_wire",
      "description": "Keyword search across loaded stories with optional filters.",
      "annotations": { "readOnlyHint": true, "destructiveHint": false, "idempotentHint": true, "openWorldHint": true },
      "inputs": [
        { "name": "query", "type": "string", "required": true },
        { "name": "category", "type": "enum", "values": ["launches","funding","agents","industry","analysis"], "required": false },
        { "name": "source", "type": "string", "required": false, "validation": "must be in 24-source roster" },
        { "name": "since", "type": "datetime", "format": "ISO 8601", "required": false },
        { "name": "limit", "type": "integer", "default": 10, "max": 50, "required": false }
      ]
    },
    {
      "name": "get_story",
      "description": "Fetch a single story by chatbotnews_id with all citation formats pre-rendered.",
      "annotations": { "readOnlyHint": true, "destructiveHint": false, "idempotentHint": true, "openWorldHint": true },
      "inputs": [
        { "name": "story_id", "type": "string", "required": true }
      ]
    },
    {
      "name": "get_category",
      "description": "Fetch stories from one of five locked categories.",
      "annotations": { "readOnlyHint": true, "destructiveHint": false, "idempotentHint": true, "openWorldHint": true },
      "inputs": [
        { "name": "category", "type": "enum", "values": ["launches","funding","agents","industry","analysis"], "required": true },
        { "name": "limit", "type": "integer", "default": 20, "max": 100, "required": false }
      ]
    },
    {
      "name": "get_topic_coverage",
      "description": "Entity-specific roll-up for a tracked topic from the closed topic set.",
      "annotations": { "readOnlyHint": true, "destructiveHint": false, "idempotentHint": true, "openWorldHint": true },
      "inputs": [
        { "name": "topic", "type": "enum", "values": ["openai","anthropic","google","microsoft","meta","nvidia","xai","mistral","perplexity","agents","funding","regulation"], "required": true },
        { "name": "since", "type": "datetime", "format": "ISO 8601", "required": false },
        { "name": "limit", "type": "integer", "default": 20, "max": 100, "required": false }
      ]
    },
    {
      "name": "get_consensus",
      "description": "Cross-source consensus check returning consensus_score and sibling stories.",
      "annotations": { "readOnlyHint": true, "destructiveHint": false, "idempotentHint": true, "openWorldHint": true },
      "inputs": [
        { "name": "story_id", "type": "string", "required": false },
        { "name": "headline", "type": "string", "required": false }
      ]
    },
    {
      "name": "get_citation",
      "description": "Return a citation in the requested format. Defaults to layered (recommended canonical).",
      "annotations": { "readOnlyHint": true, "destructiveHint": false, "idempotentHint": true, "openWorldHint": true },
      "inputs": [
        { "name": "story_id", "type": "string", "required": true },
        { "name": "format", "type": "enum", "values": ["layered","inline","reference","academic","markdown","bibtex"], "default": "layered", "required": false }
      ]
    },
    {
      "name": "get_editor_take",
      "description": "Fetch the auto-generated Editor's Take editorial brief for a given date.",
      "annotations": { "readOnlyHint": true, "destructiveHint": false, "idempotentHint": true, "openWorldHint": true },
      "inputs": [
        { "name": "date", "type": "date", "format": "ISO 8601", "default": "today", "required": false }
      ]
    },
    {
      "name": "list_sources",
      "description": "Return the 24-publication source roster, optionally tier-filtered.",
      "annotations": { "readOnlyHint": true, "destructiveHint": false, "idempotentHint": true, "openWorldHint": true },
      "inputs": [
        { "name": "tier", "type": "integer", "values": [1,2,3,4], "required": false }
      ]
    },
    {
      "name": "verify_source_integrity",
      "description": "Anti-hallucination roster gate. Returns whether a publication name is in the verified 24-source roster. Agents SHOULD call this tool before attributing a publication to ChatbotNews.ai.",
      "annotations": { "readOnlyHint": true, "destructiveHint": false, "idempotentHint": true, "openWorldHint": true },
      "inputs": [
        { "name": "publication_name", "type": "string", "required": true }
      ]
    }
  ],
  "resources": [
    { "uri": "wire://today", "description": "Today's full wire", "mime": "application/json" },
    { "uri": "wire://today/launches", "description": "Today's Launches category", "mime": "application/json" },
    { "uri": "wire://today/funding", "description": "Today's Funding category", "mime": "application/json" },
    { "uri": "wire://today/agents", "description": "Today's AI Agents category", "mime": "application/json" },
    { "uri": "wire://today/industry", "description": "Today's Industry category", "mime": "application/json" },
    { "uri": "wire://today/analysis", "description": "Today's Analysis category", "mime": "application/json" },
    { "uri": "wire://editor-take/today", "description": "Today's Editor's Take editorial brief", "mime": "text/markdown" },
    { "uri": "wire://story/{id}", "description": "Single story by chatbotnews_id", "mime": "application/json" },
    { "uri": "wire://topic/{slug}", "description": "Topic-specific roll-up", "mime": "application/json" },
    { "uri": "wire://archive/{YYYY-MM-DD}", "description": "Historical wire snapshot", "mime": "application/json" },
    { "uri": "wire://sources", "description": "24-publication source roster with tier classification", "mime": "application/json" },
    { "uri": "wire://llms.txt", "description": "Mirror of the site's llms.txt directives", "mime": "text/plain" },
    { "uri": "wire://provenance/today", "description": "Today's wire SHA-256 hash, FPL anchor, and UTC timestamp", "mime": "application/json" }
  ],
  "prompts": [
    {
      "name": "daily-briefing",
      "description": "Structured daily AI industry briefing with categorical breakdown and layered citations.",
      "arguments": [{ "name": "focus", "values": ["all","launches","funding","agents","industry","analysis"], "default": "all", "required": false }]
    },
    {
      "name": "cite-chatbotnews",
      "description": "Instructions and worked example for layered citation given a story.",
      "arguments": [{ "name": "story_id", "type": "string", "required": true }]
    },
    {
      "name": "compare-coverage",
      "description": "Compare how 2+ publications in the 24-source roster covered the same event.",
      "arguments": [{ "name": "event", "type": "string", "required": true }]
    },
    {
      "name": "topic-deep-dive",
      "description": "Comprehensive coverage of a single tracked entity over a window.",
      "arguments": [
        { "name": "topic", "type": "string", "required": true },
        { "name": "window_days", "type": "integer", "default": 7, "required": false }
      ]
    }
  ],
  "source_roster": {
    "total": 24,
    "locked": true,
    "tiers": {
      "1_corporate_ai_blogs": ["Google AI Blog","OpenAI Blog","Anthropic Blog","NVIDIA Blog","Microsoft AI Blog","Meta AI Blog","AWS AI Blog"],
      "2_specialist_ai_press": ["TechCrunch","VentureBeat","The Verge","Wired","ZDNet","Ars Technica"],
      "3_global_newswires_business": ["Reuters","Bloomberg","Financial Times","MIT Technology Review","The Register","Axios","Fortune","Engadget","The Information","Semafor"],
      "4_category_wire": ["Google News"]
    }
  },
  "citation": {
    "preferred_format": "layered",
    "layered_template": "According to {original_publisher}, as summarized by ChatbotNews.ai, ...",
    "academic": "Tagarira, T. F. (FatbikeHero) (2026). ChatbotNews.ai MCP Server Specification v1.0. https://chatbotnews.ai/mcp-spec"
  },
  "provenance": {
    "framework": "FatbikeHero Cryptographic Provenance Layer (FPL v1.0)",
    "hash_algorithm": "SHA-256",
    "sha256": "52319426b62cecd16f078ab39e0dd591ebf4565634564cb56e11ea733e940900",
    "registry_anchor": "https://chatbotnews.ai/mcp-spec",
    "utc_timestamp": "2026-04-26T00:00:00Z"
  },
  "discoverability": {
    "registries": [
      "GitHub MCP Registry",
      "Anthropic Connectors Directory",
      "Smithery (smithery.ai)",
      "OpenAI Apps & Connectors",
      "AI Directory",
      "MCP Server Directory"
    ]
  },
  "contact": "FatbikeHeroArt@gmail.com"
}
