zenodo-mcp
Allows discovering, retrieving, citing, and evaluating scientific records from the Zenodo repository.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@zenodo-mcpsearch for open datasets on climate change"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Zenodo MCP Server
An official Model Context Protocol (MCP) server for discovering, retrieving, citing, and evaluating scientific records from the Zenodo repository. This server enables AI agents (like Claude, Cursor, GitHub Copilot, Windsurf) to find open science data, verify licensing, explore versions, construct citations, and reason over research bundles natively.
Quick Start
1. Guided Setup (Zero Install with uv)
The fastest way to get started is using uvx (the package runner from uv):
uvx zenodo-mcp --setupThe interactive wizard will automatically detect installed MCP clients (Claude Desktop, Cursor, OpenCode, VS Code, Windsurf, etc.), guide you through optional Zenodo API token setup, and write the necessary JSON configuration files for you.
2. Alternative Installation
If you don't have uv installed, you can install the package globally using pip:
# Install package
pip install zenodo-mcp
# Launch guided setup
zenodo-mcp --setupRelated MCP server: scholar-toolkit-mcp
Features & Available Tools
The server exposes 17 MCP tools categorized into Core, Advanced, and AI-Native:
Core Tools
search_records: Search Zenodo records using full Elasticsearch syntax.search_by_community: Filter and search records inside a specific community (e.g.cern).search_by_funder: Search for records funded by a grant agency (e.g.NSF,EC).get_record: Retrieve complete metadata, abstracts, statistics, and authors.list_files: List files associated with a record, returning direct download URLs (fully read-only, safe, no disk writes).related_records: Extract related record IDs grouped by connection type.resolve_doi: Resolve a DOI or DOI URL to its metadata record.cite_record: Generate standard citations (APA, MLA, Harvard, Chicago, BibTeX, RIS).export_metadata: Export metadata in JSON, YAML, BibTeX, or RIS formats.latest_version: Fetch the version timeline and latest edition of any record.
Advanced Tools
search_by_license: Search for records filtered by SPDX licenses (e.g.MIT,CC-BY-4.0).inspect_license: Retrieve permissions (commercial use, attribution, copyleft, modification) for a given license.compare_records: Perform a side-by-side comparison of two records' sizes, formats, metrics, and dates.recommend_dataset: Rank datasets matching a natural language prompt using metadata quality and downloads metrics.
AI-Native Stretch Tools (Research Helpers)
find_training_datasets: Recommend machine learning training datasets based on modality, license terms, and size constraints.generate_data_card: Synthesize an AI-friendly dataset summary card (similar to Hugging Face Data Cards).evaluate_reusability: Grade a dataset's reusability score (0-100) based on FAIR principles.build_research_bundle: Assemble linked paper, dataset, and code assets into a unified reproducibility package.
Configuration Reference
You can configure the server using environment variables or a .env file in the directory where the server is executed:
Environment Variable | Default | Description |
|
| API URL (use |
| None | Optional token for higher rate limits (100 vs 25 results/page) |
|
| Enables in-memory TTL cache |
|
| Transport protocol: |
|
| Bind address for SSE mode |
|
| Port for SSE mode |
|
| Network request timeout in seconds |
|
| Level of logging (outputs to |
Client Integration Guide
The setup wizard handles this for you, but if you prefer manual configuration, add the following to your client's config file:
Local stdio Mode (Default)
{
"mcpServers": {
"zenodo": {
"command": "zenodo-mcp"
}
}
}Network SSE Mode (e.g., Docker / Remote Host)
{
"mcpServers": {
"zenodo": {
"url": "http://localhost:8000/sse"
}
}
}File Locations:
Claude Desktop:
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.json
Cursor:
Global:
~/.cursor/mcp.jsonProject:
.cursor/mcp.json
OpenCode:
Global Config:
~/.opencode/mcp.jsonWindows Path:
%USERPROFILE%\.opencode\mcp.json
VS Code:
~/.vscode/mcp.json
Windsurf:
~/.windsurf/mcp.json
Continue.dev:
~/.continue/config.json(inside"mcpServers"block)
Docker Deployment
You can build and run the Zenodo MCP Server as a Docker container.
1. Build the image
docker build -t zenodo-mcp .2. Run in Local stdio Mode
docker run -i zenodo-mcp3. Run in SSE Network Mode
docker run -p 8000:8000 zenodo-mcp --transport sse --host 0.0.0.0 --port 8000Contributing & Development
We use uv for dependency management:
# Clone the repository
git clone https://github.com/Agostynah/Zenodo-mcp.git
cd Zenodo-mcp
# Initialize virtualenv and install dependencies
uv venv
uv pip install -e ".[dev]"
# Run tests
uv run pytest --cov=zenodo_mcp -v
# Run MCP Inspector for interactive debug
npx -y @modelcontextprotocol/inspector uv run zenodo-mcpLicense
This project is licensed under the MIT License — see the LICENSE file for details.
Available Tools
18 toolsbuild_research_bundleA
Assemble a reproducible bundle of related scientific items.
Traverses relationships to group the paper, dataset, source code, and citations into a unified reproducibility package.
Parameters
record_id : int The Zenodo record ID.
Returns
dict Research bundle metadata containing linked items, all citations, and a reproducibility score.
| Name | Required | Description | Default |
|---|---|---|---|
| record_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behaviors. It mentions traversing relationships and returning a dictionary, but does not clarify if the tool is read-only or modifies state, nor does it address auth needs or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively concise with a front-loaded purpose sentence, a brief process paragraph, and a parameter section. A minor reduction in verbosity could improve it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one parameter and no output schema, the description covers the input and return structure (dict with linked items, citations, reproducibility score). However, it lacks detail on error handling and prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description provides a docstring for 'record_id' identifying it as a Zenodo record ID, adding necessary meaning beyond the schema's generic 'Record Id' title.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'build' and resource 'research bundle', specifying it assembles related scientific items (paper, dataset, source code, citations). This differentiates it from sibling tools like 'cite_record' or 'compare_records'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for creating a reproducibility package but does not explicitly state when to use it versus alternatives, nor does it provide exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cite_recordA
Generate a citation for a Zenodo record in a given style.
Provide either record_id or doi (not both).
Parameters
record_id : int, optional The Zenodo record ID. doi : str, optional The DOI of the record. style : str Citation style: apa, bibtex, ris, mla, chicago, harvard (default: apa).
Returns
dict Citation text, style used, and DOI.
| Name | Required | Description | Default |
|---|---|---|---|
| doi | No | ||
| style | No | apa | |
| record_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full burden. It describes output as a dict with citation text, style, and DOI, and notes parameter constraints. It does not mention error handling or idempotency, but the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections for purpose, usage, parameters, and returns. It is relatively concise, though the 'Returns' section could be considered redundant since the output is simple. No wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 parameters and mutual exclusivity, the description covers the input constraints, output format, and style options. Lacks mention of validation or error cases, but overall sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%; the description compensates fully by explaining each parameter (record_id, doi, style) with types and constraints, including the mutual exclusivity rule and a list of style options. This is far beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Generate a citation for a Zenodo record in a given style', specifying the verb (generate), resource (citation for a Zenodo record), and style parameter. It is distinct from sibling tools like get_record (retrieves record) or export_metadata (exports metadata).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises 'Provide either record_id or doi (not both)', which clarifies mutual exclusivity. It also lists style options with a default. However, it does not guide when to use this tool versus alternatives, though the purpose is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_recordsA
Compare metadata, stats, and sizes of two Zenodo records side-by-side.
Parameters
record_id_a : int First record ID. record_id_b : int Second record ID.
Returns
dict Structured comparison of differences in resource type, license, date, size, stats, and file counts.
| Name | Required | Description | Default |
|---|---|---|---|
| record_id_a | Yes | ||
| record_id_b | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description implies a read-only operation but does not disclose side effects, permissions, rate limits, or other behaviors beyond the basic comparison.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the main action, parameter list with descriptions, and return value details. No unnecessary words, every sentence is relevant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple comparison tool with 2 parameters and no output schema, the description explains inputs and output fields thoroughly. Could mention constraints or error scenarios but adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage (only titles), but the description lists both parameters with clear types and semantics, adding significant meaning over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'compare' and the resource 'metadata, stats, and sizes of two Zenodo records side-by-side'. It distinguishes from sibling tools like get_record or search_records.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives like related_records or evaluate_reusability. No mention of when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evaluate_reusabilityB
Evaluate and score a Zenodo record's reusability.
Grades license quality, metadata completeness, documentation length, file format openness, and versioning.
Parameters
record_id : int The Zenodo record ID.
Returns
dict Reusability score (0-100), detailed breakdown, and recommendations.
| Name | Required | Description | Default |
|---|---|---|---|
| record_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must cover behavioral traits. It states the tool evaluates reusability and returns a dict, but does not disclose if it is read-only, requires authentication, or handles errors (e.g., missing record). No side effects mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose, bullet-pointed grading aspects, and parameter documentation. It is concise but could be slightly shorter without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers input and return structure but lacks details on error handling, score calculation, or what constitutes good reusability. For a tool with minimal schema and no output schema, it omits some necessary context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It adds 'The Zenodo record ID' for record_id, providing context beyond the schema's title. This is sufficient for a single parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool evaluates and scores a Zenodo record's reusability, listing specific aspects graded (license quality, metadata completeness, etc.). It distinguishes from sibling tools like inspect_license which focus on a single aspect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool over alternatives like generate_data_card or inspect_license. The description implies use for reusability evaluation but does not provide conditions, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_metadataA
Export record metadata in a structured format.
Parameters
record_id : int The Zenodo record ID. format : str Output format: json, yaml, bibtex, ris (default: json).
Returns
str Formatted metadata string.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | json | |
| record_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the burden. It describes the operation as exporting metadata, which implies read-only behavior, but does not explicitly state lack of side effects, permissions, or rate limits. Adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and well-structured, using a parameter list format. However, it could be more concise by integrating the parameter details into the description sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description need not detail return format, but it merely says 'Formatted metadata string.' It lacks details on potential errors, pagination, or large records. Adequate for a simple tool but could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema provides no descriptions for parameters, but the description explains each parameter (record_id as Zenodo record ID, format with allowed values and default). This adds significant value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool exports record metadata in a structured format. The verb 'export' and resource 'record metadata' are specific, and it distinguishes itself from sibling tools like get_record and cite_record.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus siblings such as get_record or cite_record. There is no mention of context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_training_datasetsA
Find and evaluate datasets suitable for training ML models.
Parameters
task : str Machine learning task description (e.g. "image classification", "ner"). modality : str, optional Filter by modality: image, text, audio, tabular, video. license_filter : str License requirements: permissive (MIT, Apache, CC-BY, CC0), copyleft (GPL, CC-BY-SA), any. min_size_mb : float, optional Minimum total file size. max_size_mb : float, optional Maximum total file size.
Returns
list[dict] Ranked dataset recommendations tailored for machine learning.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | ||
| modality | No | ||
| max_size_mb | No | ||
| min_size_mb | No | ||
| license_filter | No | any |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It explains the input and output but does not mention side effects, rate limits, authentication needs, or whether the tool is a read-only operation. Basic behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concisely structured with a clear first sentence, followed by a well-organized parameter list and return type. Every section serves a purpose without unnecessary words, making it efficient for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters and a specified output schema (list[dict]), the description covers all inputs and return format. However, it lacks details on the ranking or evaluation criteria, which would be helpful for understanding tool behavior. Since an output schema exists, the return type is adequately described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides detailed parameter explanations beyond the schema, including examples for 'license_filter' (e.g., 'permissive (MIT, Apache, CC-BY, CC0)') and clarifies that 'modality' and size filters are optional. This adds meaning beyond the schema's type definitions, even though schema description coverage is 0%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Find' and resource 'datasets' with a specific purpose 'suitable for training ML models'. It distinguishes from generic search tools like 'search_records' by specifying the ML training context, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for finding ML training datasets but does not explicitly state when to use this tool versus siblings like 'recommend_dataset' or 'search_records'. No exclusions or alternatives are mentioned, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_data_cardA
Produce a concise, structured AI-friendly summary ("data card") of a dataset.
Extracts modality, file formats, license, citations, intended use, and limitations.
Parameters
record_id : int The Zenodo record ID.
Returns
dict Structured data card.
| Name | Required | Description | Default |
|---|---|---|---|
| record_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the output (structured data card) and extracted details, but does not mention potential side effects, authentication needs, or idempotency. The transparency is adequate but not detailed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the main purpose, followed by a bullet list of extracted attributes and parameter/return sections. The structure is clear, though the 'Parameters' and 'Returns' headers are slightly redundant given the schema. Overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one integer parameter, no nested objects, no output schema), the description is complete enough. It explains the purpose, the input, and the output format. Slight lack of detail on the return dict structure is acceptable, as it's an AI-friendly summary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, requiring the description to compensate. The description provides a clear and sufficient description for the single parameter record_id ('The Zenodo record ID.'), fully covering its semantics. This exceeds the baseline expectation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it produces a concise, structured AI-friendly summary (data card) of a dataset, specifying verb (Produce), resource (data card of dataset), and extracted attributes (modality, file formats, etc.). This distinguishes it from sibling tools like get_record (full record) or evaluate_reusability (deeper analysis), earning a top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for obtaining a quick dataset summary, but lacks explicit guidance on when to use this tool versus alternatives such as evaluate_reusability or get_record. No exclusions or prerequisites are mentioned, so the guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recordB
Retrieve complete metadata for a Zenodo record.
Parameters
record_id : int The numeric Zenodo record ID.
Returns
dict Full record metadata including abstract, authors, keywords, license, funding, communities, files, related identifiers, and version info.
| Name | Required | Description | Default |
|---|---|---|---|
| record_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It explains the return value structure (dict with abstract, authors, etc.) but does not disclose error handling, authentication needs, rate limits, or side effects. Adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Parameters, Returns) and front-loaded with the main purpose. It is concise at two short paragraphs, though the parameter description could be integrated into the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema), the description provides sufficient context: it states the input and describes the output as a dict with key fields. It is mostly complete, though it lacks mention of potential errors.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, leaving the parameter undocumented. The description compensates by stating the single parameter is the numeric Zenodo record ID, adding semantic meaning beyond the schema's type and title.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves complete metadata for a Zenodo record. The verb 'retrieve' and resource 'metadata' are specific. However, it does not explicitly differentiate from sibling tools like search_records or related_records, which also deal with record data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. Sibling tools such as search_records, latest_version, or cite_record might be more appropriate for specific tasks, but the description offers no criteria for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_licenseA
Analyze the properties of a license.
Provide either record_id to inspect the record's license, or
license_id directly.
Parameters
record_id : int, optional Zenodo record ID to inspect. license_id : str, optional SPDX license identifier (e.g. "MIT").
Returns
dict License info properties (commercial use, open access, attribution, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| record_id | No | ||
| license_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It describes the return format but does not explicitly state read-only behavior or any side effects. For a read inspection tool, adding 'This operation does not modify any data' would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a one-line purpose, followed by parameter descriptions and return type. It is concise with no redundant information, earning its place efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately explains the return as a dict of license properties. The two input modes are fully covered. For a simple inspection tool, this is complete and sufficient for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description provides clear, detailed semantics for both parameters: record_id as an integer Zenodo ID and license_id as an SPDX identifier with an example. It also clarifies that only one should be provided, adding valuable context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Analyze the properties of a license' with a specific verb and resource. It distinguishes from sibling 'search_by_license' by focusing on inspecting properties of a known license rather than searching for records by license.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains two input modes (via record_id or license_id) but does not provide explicit guidance on when to use this tool versus alternatives like 'search_by_license'. Usage context is implied but no exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
latest_versionA
Get the latest version and full version timeline of a record.
Parameters
record_id : int Any version's record ID — the tool finds all versions automatically.
Returns
dict Latest version summary, list of all versions with dates and DOIs, and total version count.
| Name | Required | Description | Default |
|---|---|---|---|
| record_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses the return value structure (dict with latest version summary, list of all versions with dates and DOIs, and total count). There are no side effects or destructive actions, and the description accurately represents the read-only nature of the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear 'Parameters' and 'Returns' sections, and it is informative without being overly verbose. Minor redundancy could be trimmed, but the structure aids comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given only one required parameter and no output schema, the description covers input, output, and the tool's behavior adequately. It does not mention error handling or edge cases, but for a simple retrieval tool, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description provides a clear explanation of 'record_id' beyond its type: 'Any version's record ID — the tool finds all versions automatically.' This adds semantic meaning that helps the agent use the parameter correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool gets the latest version and full version timeline of a record, using a specific verb ('Get') and resource ('latest version and full version timeline'), which distinguishes it from siblings that focus on single records or searches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the parameter 'record_id' and that it can be any version's ID, implying the tool finds all versions. However, it does not provide explicit guidance on when to use this tool vs alternatives like 'get_record', nor does it mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_filesA
List all files in a Zenodo record with metadata and download URLs.
The agent receives URLs and can use them as needed. No files are written to disk by this tool.
Parameters
record_id : int The numeric Zenodo record ID.
Returns
list[dict] List of files with filename, size, type, checksum, and download URL.
| Name | Required | Description | Default |
|---|---|---|---|
| record_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states 'No files are written to disk by this tool,' which is a key behavioral detail not captured by annotations (none provided). It also mentions that the agent receives URLs and can use them as needed. This adds useful context about the tool's non-destructive, read-only nature. However, it does not address error handling or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, consisting of three sentences plus a structured parameter and returns section. It front-loads the purpose and key behavioral detail. The use of a docstring-like format is clear but could be slightly more streamlined. Overall, it is well-organized and informative without unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter) and the presence of an output schema, the description is sufficiently complete. It specifies the return format (list of dicts with fields: filename, size, type, checksum, download URL) and notes the non-destructive behavior. No critical information appears missing for standard usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter, record_id, with no description (0% coverage). The description adds a brief explanation: 'record_id : int, The numeric Zenodo record ID.' This clarifies the parameter's meaning beyond the bare schema. However, it does not provide additional constraints or examples, so it only partially compensates for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List all files in a Zenodo record with metadata and download URLs,' specifying the action (list) and the resource (files in a record). It distinguishes from sibling tools like get_record (which returns record metadata) and search_records (which searches records), though it does not explicitly mention alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus siblings. For example, it does not mention that for full record metadata one should use get_record, or that list_files is specifically for retrieving file listings. There is no context about prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recommend_datasetA
Provide ranked dataset recommendations for a natural language request.
Finds datasets, processes metadata details, and scores them on completeness, popularity, and documentation.
Parameters
query : str Natural language prompt (e.g. "I need an image dataset for object detection"). page : int Page of results. size : int Number of recommendations.
Returns
list[dict] List of dataset recommendations with matching reasons.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| size | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It explains the tool finds datasets, processes metadata, and scores on completeness, popularity, and documentation. However, it does not mention whether the tool is read-only, any destructive actions, or behavioral details like result ordering or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, with a clear first sentence stating the purpose, a brief explanation of functionality, and a neatly formatted parameter list. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is fairly complete for a recommendation tool with three simple parameters and an output schema. It mentions the return format (list of dict with matching reasons). However, it lacks edge-case handling or usage context relative to siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description compensates well by explaining each parameter: query as a natural language prompt with example, page as result page, size as number of recommendations. This adds significant meaning beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: providing ranked dataset recommendations based on a natural language request. It identifies the resource (datasets) and the action (recommend). While it is clear, it does not explicitly differentiate from siblings like find_training_datasets or search_records, missing a full 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, exclusions, or comparison with sibling tools, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_doiA
Resolve a DOI to its Zenodo record metadata.
Supports full DOIs (10.5281/zenodo.1234567), DOI URLs
(https://doi.org/10.5281/zenodo.1234567), and Zenodo-specific
DOI formats.
Parameters
doi : str The DOI to resolve.
Returns
dict Record summary with title, DOI, creators, date, type, license, and URL. Raises an error if the DOI is invalid or not found on Zenodo.
| Name | Required | Description | Default |
|---|---|---|---|
| doi | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses return structure (dict with specific fields) and error behavior ('Raises an error if invalid or not found'), which is sufficient for a read-only resolution tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured: one-line purpose, supported formats, parameter block, return block, error note. Every sentence adds value, and key info is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains return fields (title, DOI, creators, etc.) and error conditions. For a single-parameter tool, this is nearly complete, but lacks mention of prerequisites like authentication.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (no property description), so the description adds essential meaning: 'doi : str, The DOI to resolve' and enumerates accepted formats. This compensates well for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Resolve a DOI') and the resource ('Zenodo record metadata'), specifying supported input formats. It distinguishes from siblings like 'get_record' by focusing on DOI resolution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description details supported DOI formats (full DOIs, DOI URLs, Zenodo-specific) but does not explicitly contrast with sibling tools like 'get_record' or provide when-not-to-use scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_by_communityA
Search for records within a specific Zenodo community.
Parameters
community : str Community ID (e.g. "zenodo", "openaire", "cern"). query : str, optional Additional search query to filter within the community. sort : str Sort order: "bestmatch" or "mostrecent". page : int Page number. size : int Results per page.
Returns
list[dict] List of matching record summaries.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| size | No | ||
| sort | No | bestmatch | |
| query | No | ||
| community | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It describes the return value as a list of record summaries but does not mention that the operation is read-only, authentication requirements, rate limits, or error handling. The lack of explicit safety disclosure is a gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a purpose sentence followed by a parameter list. It is relatively concise but includes some repetition (e.g., listing defaults that are already in schema). Could be slightly tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description adequately covers input parameters and return summary. However, it could add context about valid community IDs, pagination limits, or relationship to sibling tools. Overall, it is sufficiently complete for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description carries full responsibility. It provides clear explanations for all 5 parameters: community (string), query (optional), sort (with examples 'bestmatch' or 'mostrecent'), page, and size. This adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search for records within a specific Zenodo community', specifying the verb (search), resource (records), and scope (within a community). This distinguishes it from sibling tools like search_records (general) and search_by_funder.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when targeting a specific community but does not explicitly state when to use this tool versus alternatives like search_records or search_by_funder. No guidance on prerequisites or exclusions is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_by_funderA
Search for records funded by a specific organization.
Parameters
funder : str Funder name (e.g. "NSF", "European Commission", "NIH"). query : str, optional Additional search query. sort : str Sort order. page : int Page number. size : int Results per page.
Returns
list[dict] List of matching record summaries.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| size | No | ||
| sort | No | bestmatch | |
| query | No | ||
| funder | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description covers parameters and return type but lacks details on constraints, rate limits, or side effects. For a read operation, it's minimally adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Structured with sections for Parameters and Returns, but the parameter list is verbose. Could be shortened without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so returns are sufficiently described as list of dicts. Input parameters are well-documented, making the tool usable for its intended purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Description adds examples for funder ('NSF', 'European Commission', 'NIH') and clarifies query as optional, going beyond the schema. Despite 0% schema coverage signal, it compensates well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Search for records funded by a specific organization' and distinguishes from siblings like search_by_community or search_by_license by focusing on the funder parameter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus other search tools. It's implied for funder-specific queries, but no exclusions or alternatives mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_by_licenseA
Find records under a specific license.
Parameters
license : str License identifier (e.g. "MIT", "Apache-2.0", "CC-BY-4.0", "cc0-1.0"). query : str, optional Additional search query parameters. sort : str Sort order. page : int Page number. size : int Results per page.
Returns
list[dict] List of matching record summaries.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| size | No | ||
| sort | No | bestmatch | |
| query | No | ||
| license | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states it returns 'List of matching record summaries,' indicating a read operation, but does not explicitly declare it non-destructive or disclose any side effects, permissions, or pagination behavior beyond parameter defaults.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a brief header followed by a parameter list in docstring format. It is concise and front-loaded, though the parameter section could be slightly more terse without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters (1 required) and an output schema exists, the description covers the essential information: purpose, parameter meanings, and return type. It lacks error scenarios or edge cases but is sufficient for basic use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description provides clear documentation for all 5 parameters, including the required 'license' with examples, optional 'query', and defaults for 'sort', 'page', and 'size'. This adds significant value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Find records under a specific license,' specifying the action (find) and resource (records) with a distinct filtering criterion (license). This differentiates it from sibling tools like 'search_records' (general search) and 'search_by_community'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly mentions the required 'license' parameter and provides examples, implying it should be used for license-based filtering. However, no guidance is given on when not to use this tool (e.g., for non-license queries) or explicit alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_recordsA
Search Zenodo records with rich filtering.
Parameters
query : str Free-text search query (supports Elasticsearch syntax). communities : str, optional Filter by community ID (e.g. "zenodo", "openaire"). creators : str, optional Filter by creator name. license : str, optional Filter by license (e.g. "MIT", "CC-BY-4.0"). keywords : str, optional Filter by keyword. resource_type : str, optional Filter by type: dataset, publication, software, image, video, lesson, poster, presentation. access_right : str, optional Filter by access: open, closed, embargoed, restricted. date_from : str, optional Start date (YYYY-MM-DD). date_to : str, optional End date (YYYY-MM-DD). sort : str Sort order: "bestmatch" (default) or "mostrecent". page : int Page number (default 1). size : int Results per page (default 10, max 100).
Returns
list[dict] List of record summaries with title, DOI, creators, date, type, license, and URL.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| size | No | ||
| sort | No | bestmatch | |
| query | Yes | ||
| date_to | No | ||
| license | No | ||
| creators | No | ||
| keywords | No | ||
| date_from | No | ||
| communities | No | ||
| access_right | No | ||
| resource_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so description must disclose behavioral traits. It states it returns a list of record summaries with specific fields, but lacks details on authentication, rate limits, pagination behavior beyond defaults, or error handling. Partially transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear title, parameter list, and return description. Each sentence adds value; no fluff. Front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, all 12 parameters, and return format. Lacks usage guidance and behavioral context, but for a search tool with no annotations, the description is largely complete. Missing minor details like alternative tool differentiation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Description adds parameter explanations that are completely missing in the input schema (coverage 0%). Provides meaning and acceptable values for each filter, e.g., resource_type lists possible types. Could be more specific for some string params (e.g., valid community IDs).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'Search' and specific resource 'Zenodo records' with 'rich filtering'. Distinguishes from sibling specialized search tools (e.g., search_by_community) by being the general-purpose search with many filter options.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives like search_by_community or search_by_funder. The description implies it is the general search but does not mention when to prefer sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools have clearly distinct purposes, but there is slight overlap between search_records and the specialized search_by_* tools, and between recommend_dataset and find_training_datasets. However, detailed parameters and descriptions mitigate confusion.
All tool names follow a consistent verb_noun pattern in snake_case, such as build_research_bundle, cite_record, or search_by_community. No mixing of conventions or irregular names.
18 tools is on the higher end but appropriate for the broad domain of Zenodo record analysis and discovery. Each tool serves a distinct function; the count does not feel excessive.
The tool surface covers search, retrieval, citation, comparison, and analysis, but lacks write operations (create, update, delete). For a purely analytical server this might be acceptable, but it limits full lifecycle support.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for Altmetric APIs - track research attention across news, policy, social media, and more
Auditable MCP server for PubMed, Europe PMC, ClinicalTrials.gov, and bioRxiv/medRxiv queries
OpenAIRE MCP — EU research outputs (publications, datasets, software, projects)
Academic research MCP server for paper search, citation checks, graphs, and deep research.
Related MCP Servers
- AlicenseAqualityCmaintenanceA comprehensive MCP server for interacting with Zenodo records, enabling search, retrieval, citation generation, and file downloads.56Apache 2.0
- AlicenseAqualityAmaintenanceComprehensive MCP server for academic research workflows, enabling paper searching across multiple sources, manuscript processing with citation placeholders, search caching, and citation export.11MIT
- AlicenseNot gradedqualityDmaintenanceA MCP server for academic literature retrieval, aggregating multiple data sources like arXiv, Crossref, OpenAlex, PubMed, and Semantic Scholar to provide search, details, citations, trends, and recommendations.4MIT
- AlicenseAqualityAmaintenanceAn MCP server for academic literature research that integrates Scopus, CrossRef, OpenAlex, and Unpaywall to search documents, get abstracts, author profiles, citing papers, and open-access PDF links.6MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Agostynah/Zenodo-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server