Skip to main content
Glama

pubmed-mcp

An MCP server for medical and biomedical literature research — 17 tools covering PubMed, Europe PMC, full-text retrieval, MeSH, citations, clinical trials, Semantic Scholar, OpenFDA and DrugBank.

One file, deps: FastMCP + httpx only. Works out of the box — all API keys are optional (they raise rate limits and enable a couple of extras). Read-only: it never writes to upstream services.

17 tools · optional API keys · read-only · works with any MCP client (Claude Desktop, Claude Code, Cursor, Windsurf, Hermes, ...).

The server itself is a single Python file: server.py — everything else in this repo is documentation, packaging and tests.

What it gives your assistant

#

Tool

Source

What it does

1

pubmed_search

PubMed

Search with year / free-fulltext / abstract filters

2

pubmed_fetch

PubMed

Full metadata by PMID (abstract, authors, DOI, grants)

3

pubmed_summary

PubMed

Fast summaries for many PMIDs at once

4

pubmed_find_related

PubMed

Similar / citing / reference articles

5

pubmed_citation_search

PubMed

Partial citation → PMID resolution

6

pubmed_europepmc_search

Europe PMC

Broader corpus: preprints, patents, Agricola

7

pubmed_spell_check

NCBI ESpell

Medical and biomedical query spell check

8

pubmed_lookup_mesh

MeSH

Medical Subject Headings vocabulary

9

pubmed_convert_ids

PMC ID Converter

DOI ↔ PMID ↔ PMCID conversion

10

pubmed_fetch_fulltext

PMC / Europe PMC / Unpaywall

Full text as structured sections

11

pubmed_format_citations

Local

APA, MLA, BibTeX, RIS, Vancouver

12

pubmed_clinical_trials

ClinicalTrials.gov

Search studies by condition / drug / status

13

pubmed_semantic_scholar

Semantic Scholar

Citation counts, influence, OA PDF links

14

openfda_adverse_events

FDA FAERS

Drug side-effect reports

15

openfda_drug_label

FDA labels

Indications, warnings, mechanism, PK

16

openfda_drug_enforcement

FDA

Recalls and market withdrawals

17

drugbank_search

DrugBank

Drug targets / interactions (needs free key)

Related MCP server: PubMed MCP Server

Quick start

No installation needed — run it straight from GitHub with uv:

uvx --from git+https://github.com/BerkayCelk/pubmed-mcp pubmed-mcp

or from a clone:

pip install -r requirements.txt
python server.py

Client setup

Claude Desktop — merge into claude_desktop_config.json:

{
  "mcpServers": {
    "pubmed": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/BerkayCelk/pubmed-mcp", "pubmed-mcp"]
    }
  }
}

Claude Code:

claude mcp add pubmed -- uvx --from git+https://github.com/BerkayCelk/pubmed-mcp pubmed-mcp

Cursor (~/.cursor/mcp.json) and Windsurf: same JSON shape as Claude Desktop. Hermes: add to your config.yaml under mcp_servers (see examples/hermes_config.yaml).

Ready-made config files live in examples/.

For AI agents (automated setup)

Written so an AI coding agent (Claude Code, Codex, Cursor, Hermes, ...) can install and verify this server on its own.

1. Install command (no clone needed):

uvx --from git+https://github.com/BerkayCelk/pubmed-mcp pubmed-mcp

2. Register with a client:

  • Claude Code:

    claude mcp add pubmed -- uvx --from git+https://github.com/BerkayCelk/pubmed-mcp pubmed-mcp
  • Claude Desktop — merge into claude_desktop_config.json (~/Library/Application Support/Claude/ on macOS, %APPDATA%\Claude\ on Windows, ~/.config/Claude/ on Linux):

    {"mcpServers": {"pubmed": {"command": "uvx", "args": ["--from", "git+https://github.com/BerkayCelk/pubmed-mcp", "pubmed-mcp"]}}}
  • Cursor — same JSON in ~/.cursor/mcp.json (project scope: .cursor/mcp.json).

  • Hermes — see examples/hermes_config.yaml.

  • Any other MCP client — register this stdio command: uvx --from git+https://github.com/BerkayCelk/pubmed-mcp pubmed-mcp

3. Verify (no client needed):

printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"probe","version":"0"}}}' | uvx --from git+https://github.com/BerkayCelk/pubmed-mcp pubmed-mcp | head -c 400

Expect JSON containing "serverInfo":{"name":"PubMed".

4. Usage notes for agents:

  • Literature questions -> pubmed_search, then pubmed_fetch / pubmed_summary for the hits; use pubmed_europepmc_search for preprints and grey literature.

  • Full text -> pubmed_fetch_fulltext (chain: PMC → Europe PMC → Unpaywall; set UNPAYWALL_EMAIL to enable the last step).

  • Drug safety -> openfda_* tools (no key needed); drugbank_search requires a free DRUGBANK_API_KEY.

  • Batch PMIDs whenever possible (up to 50 per call) and don't remove the built-in throttles — these are shared public APIs.

5. Copy-paste prompt for users:

Set up the PubMed MCP server for me: register uvx --from git+https://github.com/BerkayCelk/pubmed-mcp pubmed-mcp as a stdio MCP server named pubmed in my client config, restart/reload the client, then verify by calling the pubmed_search tool with a small test query.

Optional API keys

Everything works without keys. Keys only raise rate limits or enable extras:

Env var

Effect

Where to get it

NCBI_API_KEY

3 → 10 requests/sec on NCBI

https://www.ncbi.nlm.nih.gov/account/settings/

UNPAYWALL_EMAIL

Enables the Unpaywall fallback in pubmed_fetch_fulltext (any email works)

—

S2_API_KEY

Relaxes Semantic Scholar rate limits

https://www.semanticscholar.org/product/api

EUROPEPMC_EMAIL

Polite-pool identifier for Europe PMC

—

DRUGBANK_API_KEY

Enables drugbank_search

https://go.drugbank.com

Full text chain & rate limits

pubmed_fetch_fulltext tries, in order: NCBI PMC → Europe PMC → Unpaywall, returning structured sections (Introduction, Methods, Results, ...) when available.

The server throttles itself: 0.35 s between NCBI calls (0.1 s with a key) and 3 s for Semantic Scholar. This wraps shared public APIs — please keep the throttles. Data sources: NCBI, Europe PMC, OpenFDA, ClinicalTrials.gov, Semantic Scholar, Unpaywall, DrugBank.

Development

  • Run from a clone: uv run --with fastmcp --with httpx python server.py

  • Smoke test (spawns the server over stdio, a few live calls — keep it gentle): uv run --with fastmcp --with httpx python smoke_test.py

  • Packaging check: uv build

Disclaimer

Unofficial community project — not affiliated with or endorsed by NCBI/NLM, Europe PMC, the FDA, ClinicalTrials.gov, Semantic Scholar, OurResearch, or DrugBank. For research assistance only; not medical advice.

License

MIT — see LICENSE.

Available Tools

17 tools
openfda_adverse_eventsOpenfda Adverse EventsB

Query FDA Adverse Event Reporting System (FAERS) for drug side effects.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results (1-100).
drug_nameYesDrug name (brand or generic, e.g., 'metformin', 'ozempic').

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It identifies the data source (FAERS) but omits important context such as spontaneous reporting limitations, lack of causality, or any access constraints. For a data retrieval tool with no annotations, this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the core purpose. Every word earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has low complexity (2 parameters, no nested objects) and an output schema, so return values need not be explained. The description is nearly complete for a simple query tool, though it could mention when to use this versus sibling FDA or DrugBank tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (drug_name and limit) are already documented in the schema. The description adds no parameter-specific detail beyond what the schema provides, which is the baseline case for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('Query') and a specific resource ('FDA Adverse Event Reporting System (FAERS) for drug side effects'). It distinguishes the tool from siblings such as openfda_drug_label and openfda_drug_enforcement by focusing on adverse events rather than labels or recalls.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit when-to-use guidance, no prerequisites, and no alternatives. It implies the tool is for drug side effects, but an agent must infer that openfda_drug_label or openfda_drug_enforcement are different use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

openfda_drug_enforcementOpenfda Drug EnforcementC

Query FDA enforcement reports (recalls, warnings, market withdrawals).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results (1-25).
drug_nameNoOptional drug name filter.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, yet it offers only a one-line purpose statement. It says nothing about authentication, rate limits, or pagination behavior for what is presumably a public API. The 'limit 1-25' cap lives in the schema but no corresponding behavioral caveat is surfaced.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler, and the parenthetical adds scoping value rather than bloat. It could be slightly richer without harming conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and the input schema is fully documented, so return values and parameters need no description coverage. However, for a tool sitting among several OpenFDA/PubMed siblings, the absence of any routing guidance leaves a real gap for correct tool selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the two parameters (limit range and optional drug_name filter) are fully documented in the schema. The description adds no parameter-level detail, which is acceptable given the high coverage, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Query') and resource ('FDA enforcement reports') and parenthetically enumerates the content types (recalls, warnings, market withdrawals). It does not differentiate itself from close siblings like openfda_adverse_events or openfda_drug_label, but the resource is unambiguous on its own.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no exclusions, and no reference to the sibling OpenFDA tools. An agent must infer from the resource name alone that this is for recall/enforcement data rather than adverse events or labeling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

openfda_drug_labelOpenfda Drug LabelC

Get FDA drug label information: indications, warnings, dosage, mechanism.

ParametersJSON Schema
NameRequiredDescriptionDefault
drug_nameYesDrug name (brand or generic, e.g., 'metformin', 'ozempic').

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. 'Get' weakly implies a read-only lookup, but there is no mention of rate limits, API key requirements, or whether results are paginated or truncated; the section list is the only extra context offered, and an output schema already exists to cover returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence with the core action front-loaded and no filler. It is appropriately sized for a one-parameter lookup, though the phrase 'information: indications, warnings, dosage, mechanism' is slightly list-heavy for a description whose return shape is governed by the output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-param lookup with a full output schema, the essentials of what is returned and what to pass are covered. What is missing is the guidance an agent actually needs to choose this tool over its FDA and drug siblings, which is the main open gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single drug_name parameter, including brand/generic and examples, so the schema does the heavy lifting. The description adds no format, casing, or synonym guidance beyond that, which is the expected baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and resource ('FDA drug label information') and enumerates the content covered (indications, warnings, dosage, mechanism). However, it never differentiates itself from close siblings like openfda_adverse_events, openfda_drug_enforcement, or drugbank_search, so an agent must infer which source fits the query.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no exclusions, and no routing to alternatives. With three other drug-related tools in the sibling list, the description leaves entirely to inference whether label data, adverse events, enforcement reports, or DrugBank should be called.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pubmed_clinical_trialsPubmed Clinical TrialsC

Search ClinicalTrials.gov for clinical studies.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoStudy status — 'recruiting', 'active', 'completed', 'terminated'. Empty = all statuses.
conditionNoMedical condition/disease (e.g., 'diabetes', 'breast cancer').
max_resultsNoMaximum results (1-100).
interventionNoTreatment/drug being studied (e.g., 'metformin', 'immunotherapy').

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden and does not meet it. It says nothing about pagination, result ordering, rate limits, or what the (existing) output schema returns, leaving only the bare fact that a search occurs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler. It is efficient, though the brevity reflects under-specification rather than disciplined trimming.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and all parameters are documented, so return values and inputs are covered elsewhere. What is missing is the routing context needed to place this tool among many similar search siblings, which a one-line description does not supply.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (status, condition, max_results, intervention) are already fully documented with defaults and examples. The description adds no syntax, format, or combination guidance beyond the schema, which is the expected baseline when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Search') and resource ('ClinicalTrials.gov ... clinical studies'), which distinguishes it from pubmed_search and europepmc siblings that target different corpora. It stops short of explicitly naming those alternatives, so an agent must infer the registry boundary from the name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of when to prefer this over pubmed_search or pubmed_europepmc_search, and no prerequisites. With 17 sibling tools in the same domain, routing is left entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pubmed_convert_idsPubmed Convert IdsA

Convert between DOI, PMID, and PMCID. Only resolves articles indexed in PubMed Central.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesList of IDs to convert (up to 50).
input_typeNo'pmid', 'pmcid', or 'doi'.pmid

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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 does disclose the meaningful PMC-indexing constraint, which is real behavioral information. However it says nothing about failure behavior for unmapped IDs, batch rate limits, or whether the PMC restriction applies equally to all three ID types.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, with the core operation stated first and the limiting condition immediately after.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the parameters are fully documented in the schema. Purpose and the key applicability constraint are both present; only edge-case behavior (unresolvable IDs, rate limits) is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (ids, input_type) are already documented in the schema, establishing a baseline of 3. The description restates the three convertible ID types, which loosely maps to input_type values, but adds no format or syntax detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb (Convert) plus the three exact resource types (DOI, PMID, PMCID), which is unambiguous and clearly distinct from every sibling, none of which perform identifier translation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It supplies an explicit scope condition – only articles indexed in PubMed Central can be resolved – which tells the agent when the tool will and won't succeed. It does not name exclusions relative to siblings, but no sibling overlaps this capability, so the routing risk is low.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pubmed_fetchPubmed FetchA

Fetch detailed article metadata by PubMed IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
pmidsYesList of PubMed IDs (up to 50 per request).
include_meshNoInclude MeSH terms in results.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It correctly signals a read-only fetch and the schema carries the 50-ID batch cap, but the description itself says nothing about rate limits, partial-result behavior, or what happens with invalid IDs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It is efficient, though arguably so terse that it omits routing context that would have earned its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is not required, and the schema fully documents both inputs. For a simple lookup tool this is close to complete; only the sibling-routing context is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters are documented in the schema, including the 50-ID limit and the include_mesh default. The description adds no syntax or format detail beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Fetch) and resource (article metadata) and the keying input (PubMed IDs). It is clearly distinguishable from pubmed_search and pubmed_find_related, but it never names a sibling or scoping condition to make the boundary explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"By PubMed IDs" implies the tool is used once IDs are already known, which is a reasonable usage signal. However, there is no explicit when-to-use versus pubmed_search/pubmed_summary routing and no note on what to do when PMIDs are unknown.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pubmed_fetch_fulltextPubmed Fetch FulltextB

Fetch full-text articles via PMC → Europe PMC → Unpaywall chain.

ParametersJSON Schema
NameRequiredDescriptionDefault
pmidsYesList of PubMed IDs (up to 10).
max_sectionsNoMaximum sections per article (default 20).
sections_filterNoOnly return sections matching these names (case-insensitive, e.g. ['methods', 'results']).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It discloses the fallback retrieval chain (PMC, Europe PMC, Unpaywall), which is useful behavioral context, but omits permissions/auth needs, rate limits, failure behavior when full text is unavailable, and whether the chain stops at first success.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the action and mechanism. It is efficient and has no filler, though it may be too terse given the lack of usage and behavioral detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values need not be explained, and the input schema is fully documented. However, with no annotations and a sibling pubmed_fetch, the definition should at least clarify when to choose this tool and what limitations (e.g., paywalls, availability) exist.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents the PMID list (up to 10), max_sections (default 20), and sections_filter. The description adds no additional parameter meaning, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb 'Fetch' and resource 'full-text articles', and names the retrieval chain PMC → Europe PMC → Unpaywall. This distinguishes it from the sibling pubmed_fetch (which likely retrieves abstracts/metadata) without needing the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this over pubmed_fetch or other siblings. The description does not state conditions (e.g., 'use when you need full text and only have PMIDs') or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pubmed_format_citationsPubmed Format CitationsC

Generate formatted citations for articles.

ParametersJSON Schema
NameRequiredDescriptionDefault
pmidsYesList of PubMed IDs (up to 20).
styleNoCitation style — 'apa' (APA 7th), 'mla' (MLA 9th), 'bibtex', 'ris', or 'vancouver' (ICMJE/NLM).apa

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full behavioral burden. It implies a non-mutating citation-generation operation but does not disclose read-only status, authentication needs, rate limits, error behavior for invalid PMIDs or styles, or whether data is fetched live.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It is efficient, though it remains somewhat under-informative for a tool with sibling alternatives.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, and the input schema fully documents both parameters, so return values and parameter details need not be explained in the description. However, with no annotations and no usage guidance, the description leaves selection among sibling citation-related tools incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both parameters (pmids and style) are documented in the input schema. The description adds no additional parameter meaning, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Generate) and resource (formatted citations for articles), making the core purpose clear. However, it does not distinguish this tool from siblings like pubmed_citation_search or pubmed_fetch, nor does it mention the PMID-based input or citation styles.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit guidance on when to use this tool instead of alternatives such as pubmed_citation_search or pubmed_fetch. Usage is only implied by the name, with no preconditions, exclusions, or workflow context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pubmed_lookup_meshPubmed Lookup MeshB

Search and explore MeSH (Medical Subject Headings) vocabulary.

ParametersJSON Schema
NameRequiredDescriptionDefault
termYesMeSH term or partial name to search.
max_resultsNoMaximum results.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full behavioral burden. 'Search and explore' implies a read-only lookup, but the description does not explicitly state safety, idempotency, rate limits, or authentication needs. It also omits pagination behavior, which is relevant for a search tool with a max_results parameter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with zero wasted words. It states the verb and resource immediately, making it easy for an agent to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter lookup with full schema coverage and an output schema, the description is minimally viable but has clear gaps. It does not explain when to use this tool over siblings or disclose any behavioral traits, leaving the agent to infer read-only safety and usage context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are fully documented in the input schema. The description adds no additional meaning beyond what the schema already provides, which matches the baseline of 3 for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Search and explore') and resource ('MeSH (Medical Subject Headings) vocabulary'), which clearly distinguishes it from sibling tools that search articles rather than the MeSH vocabulary. The word 'explore' is slightly vague, but the core purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives such as pubmed_search or other PubMed siblings. It does not state prerequisites, exclusions, or scenarios where MeSH lookup is preferred over direct article search.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pubmed_semantic_scholarPubmed Semantic ScholarA

Search or analyze papers via Semantic Scholar API (citations, influence, references).

Use search_mode='search' for keyword search, or 'paper' with paper_id (DOI, PMID prefixed with 'PMID:', or Semantic Scholar ID) for deep analysis.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoKeyword search query (for search_mode='search').
paper_idNoPaper identifier for search_mode='paper' — DOI (e.g., '10.1038/nature12373'), PMID:12345, or Semantic Scholar CorpusId.
max_resultsNoMaximum results (1-100).
search_modeNo'search' for keyword, 'paper' for single paper details.search

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full behavioral burden. It discloses the two operational modes and the kind of analysis available, but says nothing about rate limits, authentication, or pagination behavior, and 'deep analysis' is left vague.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core capability and followed by mode routing. No filler, though the second sentence mostly mirrors information already present in the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and all four parameters are schema-documented. The description covers both modes adequately; only the absence of any behavioral caveats keeps it from being fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents each parameter and its modes, establishing a baseline of 3. The description largely restates the schema's mode semantics and paper_id hints without adding new format or constraint detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Search or analyze papers via Semantic Scholar API') and names the analytical outputs (citations, influence, references). The Semantic Scholar branding implicitly distinguishes it from pubmed_search and pubmed_europepmc_search, but the description never explicitly contrasts with those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear mode-selection guidance: use search_mode='search' for keyword work and 'paper' with an identifier for deep analysis. It lacks any exclusion or routing advice relative to the many sibling search/analysis tools, so the agent must infer when this source is preferable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pubmed_spell_checkPubmed Spell CheckA

Spell-check a biomedical query using NCBI's ESpell service. Useful for query refinement before searching.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It reveals the backing service (ESpell, an external NCBI call, hinting at network dependency), but says nothing about whether it returns corrections vs. suggestions, confidence levels, or failure behavior for non-biomedical input.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action, with no filler or redundancy. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be documented. For a one-parameter read-style lookup the description covers the essentials, though it could note input expectations or that it is non-mutating given the absence of annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single 'query' parameter. The description constrains the input as a 'biomedical query', which adds real meaning beyond the bare 'string' type, but gives no guidance on length, syntax, or how malformed queries are handled.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Spell-check a biomedical query') and names the underlying service (NCBI ESpell). It is clearly distinguishable from siblings like pubmed_search or pubmed_lookup_mesh, though it never explicitly frames itself against them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Useful for query refinement before searching' implies a workflow position but is soft guidance ('useful for') rather than an explicit when-to-use rule. No alternatives or exclusions are named, so the agent must infer the routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pubmed_summaryPubmed SummaryA

Get concise summaries of articles — faster than pubmed_fetch. Up to 50 PMIDs per request.

ParametersJSON Schema
NameRequiredDescriptionDefault
pmidsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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 discloses a useful operational constraint ('Up to 50 PMIDs per request') and a performance trait ('faster than pubmed_fetch'), but says nothing about read-only nature, authentication, or any other behavioral limits. The output schema covers return values, so that omission is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core purpose and the key constraint. No filler; every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter lookup tool with an output schema, the description covers the essential purpose, the main alternative, and the batch limit. It could be more complete by stating what a summary contains or whether it is purely read-only, but the output schema and simple schema reduce the burden.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds meaning by identifying the parameter as PMIDs and imposing a maximum of 50 per request, but it does not specify the string format, whether duplicates are allowed, or behavior on invalid IDs. Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource ('Get concise summaries of articles') and distinguishes itself from pubmed_fetch by speed. It does not specify what the summary contains, but the purpose is unambiguous and an agent can tell it apart from the named sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description names pubmed_fetch as an alternative and implies this tool should be used when speed matters, but it does not explicitly state when to choose one over the other or any prerequisites. Usage is inferable rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 17 tool updatesv1.0.3
    • First observeddrugbank_search
    • First observedopenfda_adverse_events
    • First observedopenfda_drug_enforcement
    • First observedopenfda_drug_label
    • First observedpubmed_citation_search
    • First observedpubmed_clinical_trials
    • First observedpubmed_convert_ids
    • First observedpubmed_europepmc_search
    • First observedpubmed_fetch
    • First observedpubmed_fetch_fulltext
    • First observedpubmed_find_related
    • First observedpubmed_format_citations
    • First observedpubmed_lookup_mesh
    • First observedpubmed_search
    • First observedpubmed_semantic_scholar
    • First observedpubmed_spell_check
    • First observedpubmed_summary

TDQS

A3.5/5.0

Scored across 17 tools

Disambiguation5/5

Each tool targets a distinct source, action, or resource: search vs. summary vs. fetch vs. full-text vs. citation matching vs. ID conversion, with separate tools for Europe PMC, ClinicalTrials.gov, Semantic Scholar, FDA, and DrugBank. Overlaps are minimal and well-clarified by descriptions.

Naming Consistency4/5

All names use snake_case with a source prefix (pubmed_, openfda_, drugbank_), which is predictable. However, the pubmed_ group mostly follows verb_noun while openfda_ tools use noun phrases, a minor deviation.

Tool Count4/5

17 tools is slightly above the ideal 3–15 range but reasonable for a broad biomedical literature and drug information server spanning multiple APIs and workflows. Each tool appears to earn its place.

Completeness5/5

The surface covers the full literature research lifecycle: query refinement, search across multiple databases, summaries, metadata, full text, citation resolution, ID conversion, formatting, related articles, MeSH lookup, clinical trials, and drug safety/label data. No obvious gaps for the stated domain.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables comprehensive biomedical literature research through PubMed database access with advanced search, full-text retrieval, citation analysis, and batch processing capabilities. Supports both local deployment and cloud hosting for seamless integration with AI assistants.
    1
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables searching PubMed's biomedical literature database and retrieving article metadata, abstracts, and full content through the E-utilities API. Supports advanced queries, batch operations, and multiple output formats with automatic rate limiting.
    2
    -