@cyanheads/arxiv-mcp-server

v1.2.13

Search arXiv, fetch paper metadata, and read full-text content via MCP. STDIO or Streamable HTTP.

@cyanheads/arxiv-mcp-server
claude mcp add --transport http arxiv-mcp-server https://arxiv.caseyjhand.com/mcp
codex mcp add arxiv-mcp-server --url https://arxiv.caseyjhand.com/mcp
{
  "mcpServers": {
    "arxiv-mcp-server": {
      "url": "https://arxiv.caseyjhand.com/mcp"
    }
  }
}
gemini mcp add --transport http arxiv-mcp-server https://arxiv.caseyjhand.com/mcp
{
  "mcpServers": {
    "arxiv-mcp-server": {
      "command": "bunx",
      "args": [
        "@cyanheads/arxiv-mcp-server@latest"
      ]
    }
  }
}
{
  "mcpServers": {
    "arxiv-mcp-server": {
      "type": "http",
      "url": "https://arxiv.caseyjhand.com/mcp"
    }
  }
}
curl -X POST https://arxiv.caseyjhand.com/mcp \
  -H "Content-Type: application/json" \
  -H "MCP-Protocol-Version: 2025-11-25" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"curl","version":"1.0.0"}}}'

Tools

4

arxiv_get_metadata

Get full metadata for one or more arXiv papers by ID. Use when you have known IDs from citations, prior search results, or memory.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "arxiv_get_metadata",
    "arguments": {
      "paper_ids": "<paper_ids>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "paper_ids": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1,
          "description": "Single arXiv paper ID (e.g., \"2401.12345\" or \"2401.12345v2\")."
        },
        {
          "minItems": 1,
          "maxItems": 10,
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          },
          "description": "Array of up to 10 arXiv paper IDs for batch lookup."
        }
      ],
      "description": "arXiv paper ID or array of up to 10 IDs. Format: \"2401.12345\" or \"2401.12345v2\" (with version). Also accepts legacy IDs like \"hep-th/9901001\"."
    }
  },
  "required": [
    "paper_ids"
  ],
  "additionalProperties": false
}
view source ↗

arxiv_read_paper

Fetch the full text of an arXiv paper as HTML. Tries arxiv.org/html first; falls back to ar5iv.labs.arxiv.org when the native render is unavailable. PDF-only papers (no HTML render on either source) return an html_unavailable error with the pdf_url for direct download. Page through long papers with the start and max_characters parameters.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "arxiv_read_paper",
    "arguments": {
      "paper_id": "<paper_id>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "paper_id": {
      "type": "string",
      "minLength": 1,
      "description": "arXiv paper ID (e.g., \"2401.12345\" or \"2401.12345v2\")."
    },
    "max_characters": {
      "default": 100000,
      "description": "Maximum characters of paper body content to return. Defaults to 100,000. HTML head/boilerplate is stripped before counting. When truncated, a notice and total character count are included.",
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "start": {
      "default": 0,
      "description": "Character offset into the cleaned body to begin reading from. Defaults to 0. Use with max_characters to page through long papers — e.g., start=100000 with max_characters=100000 returns chars 100,000–199,999. The total length is reported as body_characters in the response.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "paper_id",
    "max_characters",
    "start"
  ],
  "additionalProperties": false
}
view source ↗

arxiv_list_categories

List arXiv category codes and names. Useful for discovering valid category filters for arxiv_search.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "arxiv_list_categories",
    "arguments": {}
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "group": {
      "description": "Filter by top-level group (e.g., \"cs\", \"math\", \"physics\"). Returns all categories if omitted.",
      "type": "string",
      "enum": [
        "cs",
        "econ",
        "eess",
        "math",
        "physics",
        "q-bio",
        "q-fin",
        "stat"
      ]
    }
  },
  "additionalProperties": false
}
view source ↗

Resources

2