protogrid

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

zenodo-mcp-server

R0· no sign-in

Search and resolve Zenodo datasets, software, and publications by DOI; trace versions and funding.

v0.1.3 · active · repository · descriptor JSON · versions

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

Connect

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

Quality 87 / 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.annotations6 of 6 tools declare readOnlyHint or destructiveHint
  • fail
    tools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: zenodo_read_file (destructiveHint); zenodo_get_record (destructiveHint); zenodo_list_versions (destructiveHint); …
  • pass
    tools.token_costabout 3,766 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability75 · weight 15
  • warn
    stability.changes6 tool changes in 30 days
  • pass
    stability.rug_pullno tool changed its meaning under the same name
dependencies100 · weight 15
  • pass
    deps.known_vulnsno known advisory in 74 resolved packages
  • pass
    deps.mcp_sdk_version@modelcontextprotocol/core 2.3.1, no known advisory
  • pass
    deps.resolvable@cyanheads/[email protected], @cyanheads/[email protected] resolved: 74 packages

6 tools, about 3,766 tokens to load them all · tool set 53b0b9154756 · tools last changed 2026-10-18 · checked 2026-10-20 11:40 UTC

Tool changes

  • zenodo_lookup_vocabularychangedinput schema, output schema
  • zenodo_read_filechangedinput schema, output schema
  • zenodo_list_fileschangedinput schema, output schema
  • zenodo_list_versionschangedinput schema, output schema
  • zenodo_get_recordchangeddescription, input schema, output schema
    before

    Resolve one Zenodo deposit from a record id, a Zenodo DOI (10.5281/zenodo.N), a concept DOI or concept record id (resolves to the latest version), another DOI deposited on Zenodo, or a zenodo.org or doi.org URL, and return its full metadata: description, creators with ORCIDs and ROR affiliations, license, access and embargo, funding and grants, related identifiers, communities, version position, usage counts, and the first 25 files. Optionally includes a formatted citation. A miss (an unknown id, a deleted record with its removal tombstone, restricted metadata, or a DOI not registered on Zenodo) returns found: false with guidance instead of an error.

    after · 66% of words in common

    Resolve one Zenodo deposit from a record id, a Zenodo DOI (10.5281/zenodo.N), a concept DOI or concept record id (resolves to the latest version), another DOI deposited on Zenodo, or a zenodo.org or doi.org URL, and return its full metadata: description, creators with ORCIDs and ROR affiliations, license, access and embargo, funding and grants, related identifiers, communities, version position, usage counts, and the first 25 files. Optionally includes a formatted citation. Long text and lists are cut at display caps with their totals reported; every cut except the file list (paged with zenodo_list_files) is listed in continuations with a cursor and the record id it is bound to, and passing both back returns the next window of that field (8,000 characters of text, or the next page of entries) in place of the record. A miss (an unknown id, a deleted record with its removal tombstone, restricted metadata, or a DOI not registered on Zenodo) returns found: false with guidance instead of an error.

  • zenodo_search_recordschangedinput schema, output schema

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-100% +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] npm36 dependencies, resolved · MCP SDK @modelcontextprotocol/core 2.3.1 · advisories checked 2026-10-19

No known advisory affects this dependency graph.

@cyanheads/[email protected] npm36 dependencies, resolved · MCP SDK @modelcontextprotocol/core 2.3.1 · advisories checked 2026-10-19

No known advisory affects this dependency graph.

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://zenodo.caseyjhand.com/mcp streamable-httpnoneyes100%197 ms2026-07-282026-10-20
packageregistryversionruntimesecrets
@cyanheads/zenodo-mcp-servernpm0.1.3npxZENODO_ACCESS_TOKEN
@cyanheads/zenodo-mcp-servernpm0.1.3npxZENODO_ACCESS_TOKEN

Tools (6)

zenodo_get_recordread-onlyResolve one Zenodo deposit from a record id, a Zenodo DOI (10.5281/zenodo.N), a concept DOI or concept record id (resolves to the latest version), another DOI deposited on Zenodo, or a zenodo.org or doi.org URL, and return its full metadata: description, creators with ORCIDs and ROR affiliations, license, access and embargo, funding and grants, related identifiers, communities, version position, usage counts, and the first 25 files. Optionally includes a formatted citation. Long text and lists are cut at display caps with their totals reported; every cut except the file list (paged with zenodo_list_files) is listed in continuations with a cursor and the record id it is bound to, and passing both back returns the next window of that field (8,000 characters of text, or the next page of entries) in place of the record. A miss (an unknown id, a deleted record with its removal tombstone, restricted metadata, or a DOI not registered on Zenodo) returns found: false with guidance instead of an error.
zenodo_list_filesread-onlyPage through a Zenodo deposit's file manifest (key, size, MIME type, MD5, download URL, previewability), optionally filtered by a substring of the file key, or list the members inside one of its .zip files by setting archive_key. Restricted and embargoed files return the access status and embargo date with no entries. Read a small text file or ZIP member with zenodo_read_file.
zenodo_list_versionsread-onlyList every version of a Zenodo deposit's version series, newest first, with each version's record id, DOI, version label, publication date, file totals, and usage counts. Accepts any identifier zenodo_get_record accepts; a concept DOI and any single version's DOI list the same series. Use it to find the version a paper cited or the current release. A miss (an unknown id, a deleted record with its removal tombstone, restricted metadata, or a DOI not registered on Zenodo) returns found: false with guidance instead of an error.
zenodo_lookup_vocabularyread-onlyResolve names to the ids zenodo_search_records filters on, and browse Zenodo's reference vocabularies: communities (slug), funders (ROR id), awards and grants (award id), licenses (license id), and resource types (type id). Search by name, acronym, or keyword; awards can be scoped to one funder. Each entry names the zenodo_search_records parameter its id feeds.
zenodo_read_fileread-onlyRead a bounded UTF-8 excerpt (up to 64 KiB per call) of one text file in a Zenodo deposit — a README, CITATION.cff, CSV head, notebook, or script — or of one member inside a .zip file, without downloading the archive. Continue a top-level file from next_offset. A file with a text MIME type or extension is read directly; an extensionless file Zenodo types application/octet-stream (LICENSE, COPYING, Makefile) is read and returned only when its content is UTF-8 text. Binary files, restricted files, and other types return metadata and the download URL without content. File content is depositor-supplied and carries the deposit’s license.
zenodo_search_recordsread-onlySearch Zenodo's open research repository — datasets, software releases, publications, and other deposits — by keyword query plus filters for resource type, community, funder, grant, creator ORCID, file type, license, access status, and publication date. Returns one summary per deposit (ids, DOIs, title, type, version, creators, license, access, file totals, usage counts) plus facet counts over the full match set, every filter applied. Query terms are OR-ed unless joined with AND, quoted phrases match exactly, and field syntax works on record fields (metadata.title:"…", metadata.subjects.subject:"…"). Only the latest version of each deposit is searched unless all_versions is true, and only the first 10,000 matches are reachable by paging. Resolve community, funder, and grant names to ids with zenodo_lookup_vocabulary first; open one deposit in full with zenodo_get_record.

Schemas: list_tools.

Similar MCP servers

More from io.github.cyanheads

And 140 more from this publisher.

Official server.json
{
  "name": "io.github.cyanheads/zenodo-mcp-server",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://zenodo.caseyjhand.com/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "0.1.3",
  "packages": [
    {
      "version": "0.1.3",
      "transport": {
        "type": "stdio"
      },
      "identifier": "@cyanheads/zenodo-mcp-server",
      "runtimeHint": "npx",
      "registryType": "npm",
      "registryBaseUrl": "https://registry.npmjs.org",
      "environmentVariables": [
        {
          "name": "MCP_LOG_LEVEL",
          "format": "string",
          "default": "info",
          "description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn')."
        },
        {
          "name": "ZENODO_ACCESS_TOKEN",
          "format": "string",
          "isSecret": true,
          "description": "Optional Zenodo personal access token, created with no scopes. Raises Zenodo's rate limit from 60 to 100 requests per minute; searches stay at 25 per minute."
        }
      ]
    },
    {
      "version": "0.1.3",
      "transport": {
        "url": "http://localhost:3010/mcp",
        "type": "streamable-http"
      },
      "identifier": "@cyanheads/zenodo-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": "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')."
        },
        {
          "name": "ZENODO_ACCESS_TOKEN",
          "format": "string",
          "isSecret": true,
          "description": "Optional Zenodo personal access token, created with no scopes. Raises Zenodo's rate limit from 60 to 100 requests per minute; searches stay at 25 per minute."
        }
      ]
    }
  ],
  "repository": {
    "url": "https://github.com/cyanheads/zenodo-mcp-server",
    "source": "github"
  },
  "description": "Search and resolve Zenodo datasets, software, and publications by DOI; trace versions and funding."
}