protogrid

Search / io.github.cyanheads/arxiv-mcp-server

arxiv-mcp-server

R0· no sign-in

Search arXiv, fetch paper metadata, and read full-text content.

v1.6.1 · active · repository · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality84good
Trust94of 100
Uptime, 30 days99%
Latency p50168 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "arxiv-mcp-server": {
      "type": "http",
      "url": "https://arxiv.caseyjhand.com/mcp"
    }
  }
}
claude mcp add --transport http arxiv-mcp-server https://arxiv.caseyjhand.com/mcp
[mcp_servers.arxiv-mcp-server]
url = "https://arxiv.caseyjhand.com/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "arxiv-mcp-server": {
      "type": "remote",
      "url": "https://arxiv.caseyjhand.com/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "arxiv-mcp-server": {
      "type": "http",
      "url": "https://arxiv.caseyjhand.com/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=arxiv-mcp-server&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vYXJ4aXYuY2FzZXlqaGFuZC5jb20vbWNwIn0%3D"
}
{
  "servers": {
    "arxiv-mcp-server": {
      "type": "http",
      "url": "https://arxiv.caseyjhand.com/mcp"
    }
  }
}
{
  "mcpServers": {
    "arxiv-mcp-server": {
      "httpUrl": "https://arxiv.caseyjhand.com/mcp"
    }
  }
}
extensions:
  "arxiv-mcp-server":
    enabled: true
    name: "arxiv-mcp-server"
    type: streamable_http
    uri: "https://arxiv.caseyjhand.com/mcp"
    timeout: 300

Quality 84 / 100good

protocol88 · weight 25
  • pass
    protocol.modernsupports 2026-07-28 (server/discover)
  • pass
    protocol.statelessanswers without a session
  • pass
    protocol.transportstreamable HTTP
  • warn
    protocol.list_ttltools/list declares ttlMs 0, so clients re-fetch it on every use
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene86 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • pass
    tools.description_lengthdescriptions are concise
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations4 of 4 tools declare readOnlyHint or destructiveHint
  • fail
    tools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: arxiv_search_papers (destructiveHint, idempotentHint, openWorldHint); arxiv_get_metadata (destructiveHint, idempotentHint, openWorldHint); arxiv_read_paper (destructiveHint, idempotentHint, openWorldHint); …
  • pass
    tools.token_costabout 1,812 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability75 · weight 15
  • warn
    stability.changes7 tool changes in 30 days
  • pass
    stability.rug_pullno tool changed its meaning under the same name
dependenciesn/a · weight 15

4 tools, about 1,812 tokens to load them all · tool set 1a02710a8923 · tools last changed 2026-10-19 · checked 2026-10-20 14:54 UTC

Tool changes

  • arxiv_read_paperchangedoutput schema
  • arxiv_get_metadatachangedoutput schema
  • arxiv_searchremoved

    Search arXiv papers by query with category and sort filters. Returns paper metadata including title, authors, abstract, categories, and links.

  • arxiv_list_categorieschangeddescription
    before

    List arXiv category codes and names. Useful for discovering valid category filters for arxiv_search. Lists subject classes only; arxiv_search also accepts a bare archive code (the part before the dot, e.g. "astro-ph" or "cs") to search a whole archive at once.

    after · 97% of words in common

    List arXiv category codes and names. Useful for discovering valid category filters for arxiv_search_papers. Lists subject classes only; arxiv_search_papers also accepts a bare archive code (the part before the dot, e.g. "astro-ph" or "cs") to search a whole archive at once.

  • arxiv_read_paperchangeddescription, input schema, output schema
    before

    Fetch the full text of an arXiv paper. Tries arxiv.org/html first, falls back to ar5iv.labs.arxiv.org, and falls back again to text extracted from the PDF when neither has an HTML render — check the source field to know which one answered. Page through long papers with start and max_characters, or pass max_characters null to get the entire body in one call.

    after · 88% of words in common

    Fetch the full text of an arXiv paper. Tries arxiv.org/html first, falls back to ar5iv.labs.arxiv.org, and falls back again to text extracted from the PDF when neither has an HTML render — check the source field to know which one answered. Page through long papers with start and max_characters, or pass max_characters null to get the entire body in one call. To read one section, take the outline from the first page (start 0) and pass an entry's start.

  • arxiv_get_metadatachangeddescription, input schema, output schema
    before

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

    after · 64% of words in common

    Get full metadata for one or more arXiv papers by ID. Use when you have known IDs from citations, prior search results, or memory. Looks up 10 IDs per call; any further IDs come back in remaining_ids for the next call.

  • arxiv_search_papersadded

    Search arXiv papers by query with category and sort filters. Returns paper metadata including title, authors, abstract, categories, and links.

Full history: list_changes · trend: quality JSON.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 94 / 100

provenance80
liveness100
freshness100
hygiene100

+repository +namespace-matches-repo +reachable +uptime-99% +updated-2d-ago

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Dependencies

@cyanheads/[email protected] npmthis version is not known to the dependency resolver

@cyanheads/[email protected] npmthis version is not known to the dependency resolver

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0. The graph is what a clean install of this version resolves today; nothing was installed or run. How it is checked.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://arxiv.caseyjhand.com/mcp streamable-httpnoneyes99%168 ms2026-07-282026-10-20
packageregistryversionruntimesecrets
@cyanheads/arxiv-mcp-servernpm1.6.1npx
@cyanheads/arxiv-mcp-servernpm1.6.1npx

Tools (4)

arxiv_get_metadataread-onlyGet full metadata for one or more arXiv papers by ID. Use when you have known IDs from citations, prior search results, or memory. Looks up 10 IDs per call; any further IDs come back in remaining_ids for the next call.
arxiv_list_categoriesread-onlyList arXiv category codes and names. Useful for discovering valid category filters for arxiv_search_papers. Lists subject classes only; arxiv_search_papers also accepts a bare archive code (the part before the dot, e.g. "astro-ph" or "cs") to search a whole archive at once.
arxiv_read_paperread-onlyFetch the full text of an arXiv paper. Tries arxiv.org/html first, falls back to ar5iv.labs.arxiv.org, and falls back again to text extracted from the PDF when neither has an HTML render — check the source field to know which one answered. Page through long papers with start and max_characters, or pass max_characters null to get the entire body in one call. To read one section, take the outline from the first page (start 0) and pass an entry's start.
arxiv_search_papersread-onlySearch arXiv papers by query with category and sort filters. Returns paper metadata including title, authors, abstract, categories, and links.

Schemas: list_tools.

Similar MCP servers

More from io.github.cyanheads

And 140 more from this publisher.

Official server.json
{
  "name": "io.github.cyanheads/arxiv-mcp-server",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://arxiv.caseyjhand.com/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "1.6.1",
  "packages": [
    {
      "version": "1.6.1",
      "transport": {
        "type": "stdio"
      },
      "identifier": "@cyanheads/arxiv-mcp-server",
      "runtimeHint": "npx",
      "registryType": "npm",
      "registryBaseUrl": "https://registry.npmjs.org",
      "environmentVariables": [
        {
          "name": "ARXIV_API_BASE_URL",
          "format": "string",
          "default": "https://export.arxiv.org/api",
          "description": "arXiv API base URL."
        },
        {
          "name": "ARXIV_REQUEST_DELAY_MS",
          "format": "string",
          "default": "3000",
          "description": "Minimum delay between arXiv API requests (ms)."
        },
        {
          "name": "ARXIV_CONTENT_TIMEOUT_MS",
          "format": "string",
          "default": "30000",
          "description": "Timeout for paper body fetches — HTML renders and PDF downloads (ms)."
        },
        {
          "name": "ARXIV_API_TIMEOUT_MS",
          "format": "string",
          "default": "15000",
          "description": "Timeout for API search/metadata requests (ms)."
        },
        {
          "name": "ARXIV_READ_TIMEOUT_MS",
          "format": "string",
          "default": "50000",
          "description": "Time budget for one arxiv_read_paper call — its metadata lookup and every content request and retry (ms)."
        },
        {
          "name": "MCP_LOG_LEVEL",
          "format": "string",
          "default": "info",
          "description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn')."
        }
      ]
    },
    {
      "version": "1.6.1",
      "transport": {
        "url": "http://localhost:3010/mcp",
        "type": "streamable-http"
      },
      "identifier": "@cyanheads/arxiv-mcp-server",
      "runtimeHint": "npx",
      "registryType": "npm",
      "registryBaseUrl": "https://registry.npmjs.org",
      "environmentVariables": [
        {
          "name": "MCP_TRANSPORT_TYPE",
          "value": "http",
          "format": "string",
          "description": "Selects the HTTP transport."
        },
        {
          "name": "ARXIV_API_BASE_URL",
          "format": "string",
          "default": "https://export.arxiv.org/api",
          "description": "arXiv API base URL."
        },
        {
          "name": "ARXIV_REQUEST_DELAY_MS",
          "format": "string",
          "default": "3000",
          "description": "Minimum delay between arXiv API requests (ms)."
        },
        {
          "name": "ARXIV_CONTENT_TIMEOUT_MS",
          "format": "string",
          "default": "30000",
          "description": "Timeout for paper body fetches — HTML renders and PDF downloads (ms)."
        },
        {
          "name": "ARXIV_API_TIMEOUT_MS",
          "format": "string",
          "default": "15000",
          "description": "Timeout for API search/metadata requests (ms)."
        },
        {
          "name": "ARXIV_READ_TIMEOUT_MS",
          "format": "string",
          "default": "50000",
          "description": "Time budget for one arxiv_read_paper call — its metadata lookup and every content request and retry (ms)."
        },
        {
          "name": "MCP_HTTP_HOST",
          "format": "string",
          "default": "127.0.0.1",
          "description": "The hostname for the HTTP server."
        },
        {
          "name": "MCP_HTTP_PORT",
          "format": "string",
          "default": "3010",
          "description": "The port to run the HTTP server on."
        },
        {
          "name": "MCP_HTTP_ENDPOINT_PATH",
          "format": "string",
          "default": "/mcp",
          "description": "The endpoint path for the MCP server."
        },
        {
          "name": "MCP_AUTH_MODE",
          "format": "string",
          "default": "none",
          "description": "Authentication mode to use: 'none', 'jwt', or 'oauth'."
        },
        {
          "name": "MCP_LOG_LEVEL",
          "format": "string",
          "default": "info",
          "description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn')."
        }
      ]
    }
  ],
  "repository": {
    "url": "https://github.com/cyanheads/arxiv-mcp-server",
    "source": "github"
  },
  "description": "Search arXiv, fetch paper metadata, and read full-text content."
}