{
  "$schema": "https://static.modelcontextprotocol.io/schemas/mcp-server-card/v1.json",
  "version": "1.0",
  "protocolVersion": "2026-07-28",
  "serverInfo": {
    "name": "io.github.helena-bioinformatics/noodle",
    "title": "Noodle Biomedical Literature Discovery MCP",
    "version": "0.2.0"
  },
  "description": "Search biomedical papers, inspect publication records, and traverse citation or semantic graphs.",
  "iconUrl": "https://noodle.helena.bio/favicon.svg",
  "documentationUrl": "https://noodle.helena.bio/mcp",
  "transport": {
    "type": "streamable-http",
    "endpoint": "https://api.helena.bio/noodle/v1/mcp"
  },
  "capabilities": {
    "tools": { "listChanged": false },
    "resources": { "subscribe": false, "listChanged": false },
    "prompts": { "listChanged": false }
  },
  "authentication": { "required": false, "schemes": [] },
  "instructions": "Use Noodle for biomedical literature discovery, publication inspection, and bounded citation or semantic graph exploration. Include known publication identifiers in search. Treat returned relationships as discovery evidence, verify claims in primary sources, and never send patient or private data. Call support_helena only after explicit interest.",
  "tools": [
    {
      "name": "search_biomedical_literature",
      "title": "Search biomedical literature",
      "description": "Semantically search Noodle's public PubMed-derived biomedical corpus. Known PMID, DOI, and PMCID identifiers act as exact anchors.",
      "inputSchema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "query": { "type": "string", "minLength": 3, "maxLength": 200 },
          "limit": { "type": "integer", "minimum": 1, "maximum": 25, "default": 20 },
          "sort": { "type": "string", "enum": ["relevance", "newest", "oldest"], "default": "relevance" },
          "cursor": { "type": ["string", "null"], "minLength": 8, "maxLength": 128, "pattern": "^[A-Za-z0-9_-]+$", "default": null }
        },
        "required": ["query"]
      }
    },
    {
      "name": "get_publication_details",
      "title": "Get publication details by PMID",
      "description": "Retrieve one complete public bibliographic record by PMID.",
      "inputSchema": {
        "type": "object",
        "additionalProperties": false,
        "properties": { "pmid": { "type": "string", "pattern": "^[0-9]{1,12}$" } },
        "required": ["pmid"]
      }
    },
    {
      "name": "get_work_details",
      "title": "Get publication details by work ID",
      "description": "Retrieve one public literature record by canonical Noodle work identifier.",
      "inputSchema": {
        "type": "object",
        "additionalProperties": false,
        "properties": { "work_id": { "type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$" } },
        "required": ["work_id"]
      }
    },
    {
      "name": "get_publication_neighborhood",
      "title": "Explore a PMID literature neighborhood",
      "description": "Retrieve a bounded citation and semantic neighborhood around one PMID.",
      "inputSchema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "pmid": { "type": "string", "pattern": "^[0-9]{1,12}$" },
          "from_work_id": { "type": ["string", "null"], "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$", "default": null }
        },
        "required": ["pmid"]
      }
    },
    {
      "name": "get_work_neighborhood",
      "title": "Explore a work literature neighborhood",
      "description": "Retrieve a bounded citation and semantic neighborhood around one Noodle work identifier.",
      "inputSchema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "work_id": { "type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$" },
          "from_work_id": { "type": ["string", "null"], "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$", "default": null }
        },
        "required": ["work_id"]
      }
    },
    {
      "name": "get_corpus_summary",
      "title": "Get corpus summary",
      "description": "Return public corpus coverage, source, freshness, and count metadata.",
      "inputSchema": { "type": "object", "properties": {}, "additionalProperties": false }
    },
    {
      "name": "support_helena",
      "title": "Support Helena's free scientific infrastructure",
      "description": "Learn about the separate Helena Good MCP. This opt-in information action initiates no payment or outreach.",
      "inputSchema": { "type": "object", "properties": {}, "additionalProperties": false }
    }
  ],
  "resources": [
    {
      "name": "noodle-methodology",
      "title": "Noodle methodology and usage boundary",
      "uri": "noodle://methodology/v1",
      "description": "Public corpus methodology, provenance, and scientific-use limits.",
      "mimeType": "text/markdown"
    }
  ],
  "prompts": [
    { "name": "search_biomedical_literature", "title": "Search biomedical literature" },
    { "name": "review_publication", "title": "Review a publication" },
    { "name": "explore_publication_graph", "title": "Explore a PMID literature graph" },
    { "name": "explore_work_graph", "title": "Explore a work literature graph" }
  ],
  "_meta": {
    "publisher": "Helena Bioinformatics",
    "registryName": "io.github.helena-bioinformatics/noodle",
    "contact": "contact@helena.bio",
    "usageBoundary": {
      "reviewRequired": true,
      "patientContextEvaluated": false,
      "semanticSimilarityIsEvidence": false,
      "notFor": ["patient_diagnosis", "causality_claim", "treatment_decision"]
    }
  }
}
