Skip to main content
Glama
chrismannina

PubMed MCP Server

by chrismannina

PubMed MCP Server

CI

A comprehensive Model Context Protocol (MCP) server for PubMed literature search and management. This server provides advanced search capabilities, citation formatting, and research analysis tools through the MCP protocol.

Features

  • Advanced PubMed Search: Search with complex filters including date ranges, article types, authors, journals, and MeSH terms

  • Article Details: Retrieve detailed information for specific PMIDs including abstracts, authors, and metadata

  • Citation Export: Export citations in multiple formats (BibTeX, APA, MLA, Chicago, Vancouver, EndNote, RIS)

  • Author Search: Find articles by specific authors with co-author information

  • Related Articles: Discover articles related to a specific PMID

  • MeSH Term Search: Search and explore Medical Subject Headings

  • Journal Analysis: Get metrics and recent articles from specific journals

  • Research Trends: Analyze publication trends over time

  • Article Comparison: Compare multiple articles side by side

  • Caching: Built-in caching for improved performance

  • Rate Limiting: Respectful API usage with configurable rate limits

Related MCP server: NIH RePORTER MCP

Installation

Prerequisites

  • Python 3.8 or higher

  • NCBI API key (free registration required)

  • Valid email address for NCBI API identification

Quick Start

  1. Clone the repository:

    git clone https://github.com/your-org/pubmed-mcp.git
    cd pubmed-mcp
  2. Install dependencies:

    pip install -r requirements.txt
  3. Set up environment variables:

    cp env.example .env
    # Edit .env with your NCBI API key and email
  4. Run the server:

    python -m src.main

Development Installation

For development with additional tools:

make install-dev

Or manually:

pip install -r requirements.txt
pip install -e .
pip install black isort mypy flake8

Configuration

Create a .env file in the project root with the following variables:

# Required
PUBMED_API_KEY=your_ncbi_api_key_here
PUBMED_EMAIL=your.email@example.com

# Optional
CACHE_TTL=300
CACHE_MAX_SIZE=1000
RATE_LIMIT=3.0
LOG_LEVEL=info

Getting an NCBI API Key

  1. Visit NCBI Account Settings

  2. Sign in or create an account

  3. Navigate to "API Key Management"

  4. Create a new API key

  5. Copy the key to your .env file

Usage

Available Tools

The server provides the following MCP tools:

1. search_pubmed

Search PubMed with advanced filtering options.

{
  "query": "machine learning healthcare",
  "max_results": 20,
  "date_range": "5y",
  "article_types": ["Journal Article", "Review"],
  "has_abstract": true
}

2. get_article_details

Get detailed information for specific PMIDs.

{
  "pmids": ["12345678", "87654321"],
  "include_abstracts": true,
  "include_citations": false
}

3. search_by_author

Search for articles by a specific author.

{
  "author_name": "Smith J",
  "max_results": 10,
  "include_coauthors": true
}

4. export_citations

Export citations in various formats.

{
  "pmids": ["12345678"],
  "format": "bibtex",
  "include_abstracts": false
}

5. find_related_articles

Find articles related to a specific PMID.

{
  "pmid": "12345678",
  "max_results": 10
}

6. search_mesh_terms

Search using MeSH terms.

{
  "term": "Machine Learning",
  "max_results": 20
}

7. analyze_research_trends

Analyze publication trends over time.

{
  "topic": "artificial intelligence",
  "years_back": 5,
  "include_subtopics": false
}

Example Usage with MCP Client

import asyncio
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client

async def main():
    server_params = StdioServerParameters(
        command="python",
        args=["-m", "src.main"]
    )

    async with stdio_client(server_params) as (read, write):
        async with ClientSession(read, write) as session:
            # Initialize the session
            await session.initialize()

            # Search PubMed
            result = await session.call_tool(
                "search_pubmed",
                {
                    "query": "COVID-19 vaccines",
                    "max_results": 5,
                    "date_range": "1y"
                }
            )

            print(result.content[0].text)

if __name__ == "__main__":
    asyncio.run(main())

Development

Running Tests

# Run all tests
make test

# Run with coverage
make test-coverage

# Run specific test types
python run_tests.py unit
python run_tests.py integration
python run_tests.py coverage

Code Quality

# Format code
make format

# Run linting
make lint

# Type checking
mypy src/

Project Structure

pubmed-mcp/
├── src/
│   ├── __init__.py
│   ├── main.py              # Entry point
│   ├── server.py            # MCP server implementation
│   ├── models.py            # Pydantic models
│   ├── pubmed_client.py     # PubMed API client
│   ├── tool_handler.py      # Tool request handlers
│   ├── citation_formatter.py # Citation formatting
│   ├── tools.py             # Tool definitions
│   └── utils.py             # Utility functions
├── tests/                   # Test suite
├── requirements.txt         # Dependencies
├── setup.py                 # Package setup
├── pyproject.toml          # Modern Python config
├── Makefile                # Development commands
├── Dockerfile              # Container setup
└── README.md               # This file

Docker

Build and Run

# Build Docker image
make docker-build

# Run with environment variables
make docker-run PUBMED_API_KEY=your_key PUBMED_EMAIL=your_email

Docker Compose

version: '3.8'
services:
  pubmed-mcp:
    build: .
    environment:
      - PUBMED_API_KEY=your_key
      - PUBMED_EMAIL=your_email
      - LOG_LEVEL=info
    volumes:
      - ./data:/app/data

API Reference

Search Parameters

  • query: Search query using PubMed syntax

  • max_results: Maximum number of results (1-200)

  • sort_order: Sort order (relevance, pub_date, author, journal, title)

  • date_from/date_to: Date range filters

  • date_range: Predefined ranges (1y, 5y, 10y, all)

  • article_types: Filter by publication types

  • authors: Filter by author names

  • journals: Filter by journal names

  • mesh_terms: Filter by MeSH terms

  • language: Language filter (e.g., 'eng', 'fre')

  • has_abstract: Only articles with abstracts

  • has_full_text: Only articles with full text

  • humans_only: Only human studies

Citation Formats

  • bibtex: BibTeX format

  • apa: APA style

  • mla: MLA style

  • chicago: Chicago style

  • vancouver: Vancouver style

  • endnote: EndNote format

  • ris: RIS format

Contributing

  1. Fork the repository

  2. Create a feature branch

  3. Make your changes

  4. Add tests for new functionality

  5. Run the test suite

  6. Submit a pull request

Development Guidelines

  • Follow PEP 8 style guidelines

  • Add type hints to all functions

  • Write comprehensive tests

  • Update documentation for new features

  • Use conventional commit messages

License

This project is licensed under the MIT License - see the LICENSE file for details.

Support

Acknowledgments

Changelog

See CHANGELOG.md for a detailed history of changes.


Note: This server requires a valid NCBI API key and follows NCBI's usage guidelines. Please be respectful of API rate limits and terms of service.

Available Tools

12 tools
compare_articlesC

Compare multiple articles side by side

ParametersJSON Schema
NameRequiredDescriptionDefault
pmidsYesList of PMIDs to compare (2-5 articles)
comparison_fieldsNoFields to compare

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but offers minimal behavioral insight. It implies a read-only comparison operation but doesn't disclose output format, pagination, rate limits, authentication needs, or what 'side by side' means structurally (e.g., table, summary). This leaves significant gaps for agent understanding.

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, efficient sentence with zero wasted words. It's appropriately sized for the tool's complexity and front-loaded with the core action, making it easy to parse quickly.

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

Completeness2/5

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

Given no annotations and no output schema, the description is incomplete for a tool with 2 parameters and comparison functionality. It lacks details on return values, error handling, or practical use cases, leaving the agent under-informed about how to effectively invoke and interpret results.

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%, with clear parameter documentation in the schema itself. The description adds no additional meaning about parameters beyond implying multi-article comparison, so it meets the baseline of 3 where the schema does the heavy lifting without compensating value.

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 'Compare multiple articles side by side' clearly states the verb (compare) and resource (articles), specifying the multi-article scope. However, it doesn't distinguish this from potential sibling tools like 'find_related_articles' or 'analyze_research_trends' that might also involve article comparison, missing explicit differentiation.

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 guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing PMIDs), exclusions, or how it differs from siblings like 'get_article_details' for single articles or 'analyze_research_trends' for broader analysis.

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

export_citationsC

Export article citations in various formats

ParametersJSON Schema
NameRequiredDescriptionDefault
pmidsYesList of PubMed IDs to export
formatNoCitation formatbibtex
include_abstractsNoInclude abstracts in citations

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 burden of behavioral disclosure. It states what the tool does but lacks critical behavioral details: whether this is a read-only operation, if it requires authentication, rate limits, what the output looks like (e.g., file download or text), or error handling. For a 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, efficient sentence that front-loads the core purpose ('Export article citations') and adds essential context ('in various formats'). There is zero waste or redundancy, making it highly concise and well-structured for quick understanding.

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

Completeness2/5

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

Given the tool's complexity (export functionality with 3 parameters) and lack of annotations and output schema, the description is incomplete. It doesn't address behavioral aspects like output format, permissions, or error handling, which are crucial for an export tool. The schema covers parameters well, but overall context is insufficient.

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 fully documents all three parameters (pmids, format, include_abstracts). The description adds no additional parameter semantics beyond what's in the schema (e.g., it doesn't explain format differences or pmid validation). Baseline 3 is appropriate 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 clearly states the tool's purpose with a specific verb ('Export') and resource ('article citations'), and specifies the output domain ('various formats'). It doesn't explicitly distinguish from sibling tools like 'get_article_details' or 'search_pubmed', but the export focus is clear. No tautology or misleading elements are present.

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 guidance on when to use this tool versus alternatives. With sibling tools like 'get_article_details' and 'search_pubmed' that might retrieve citation data, there's no indication of when export is preferred (e.g., for formatted outputs vs raw data). Usage is implied by the name but not explicitly stated.

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

get_article_detailsC

Get detailed information for specific articles by PMID

ParametersJSON Schema
NameRequiredDescriptionDefault
pmidsYesList of PubMed IDs
include_abstractsNoInclude abstracts in response
include_citationsNoInclude citation count and metrics

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. While 'Get' implies a read-only operation, it doesn't specify whether this requires authentication, has rate limits, returns structured data, or handles errors. For a tool with 3 parameters and no annotation coverage, this leaves significant behavioral questions unanswered.

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, efficient sentence that immediately conveys the core functionality. Every word earns its place - 'Get detailed information' establishes the action, 'for specific articles' defines scope, and 'by PMID' specifies the key identifier. No wasted words or unnecessary elaboration.

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

Completeness2/5

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

For a tool with 3 parameters, no annotations, and no output schema, the description is insufficiently complete. It doesn't explain what 'detailed information' includes beyond the parameter hints, doesn't describe the response format, and provides no context about PubMed integration or data freshness. The combination of missing behavioral context and output uncertainty creates significant gaps.

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 parameters are documented in the schema. The description adds no additional parameter information beyond what's in the schema - it doesn't explain PMID format, abstract inclusion implications, or citation metrics details. The baseline score of 3 reflects adequate but minimal value addition over the comprehensive schema.

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 clearly states the verb 'Get' and resource 'detailed information for specific articles by PMID', making the purpose immediately understandable. It distinguishes from siblings like 'search_by_author' or 'advanced_search' by focusing on retrieval of specific articles rather than searching or analysis. However, it doesn't explicitly differentiate from 'compare_articles' or 'find_related_articles' which might also work with PMIDs.

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 guidance on when to use this tool versus alternatives. It doesn't mention when to choose this over 'search_pubmed' for article retrieval, or when 'compare_articles' might be more appropriate for multi-article analysis. There's no discussion of prerequisites, limitations, or optimal use cases.

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

get_journal_metricsC

Get metrics and information about a specific journal

ParametersJSON Schema
NameRequiredDescriptionDefault
journal_nameYesJournal name or abbreviation
include_recent_articlesNoInclude recent notable articles

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 burden of behavioral disclosure. It states the tool retrieves metrics and information, implying a read-only operation, but lacks details on permissions, rate limits, error handling, or what specific metrics are returned. This is inadequate for a tool with no annotation coverage.

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, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded and wastes no space, making it highly concise and well-structured.

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

Completeness2/5

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

Given no annotations and no output schema, the description is incomplete. It doesn't explain what metrics are returned, how data is formatted, or any behavioral traits. For a tool that retrieves information, this leaves significant gaps in understanding its functionality and output.

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?

The input schema has 100% description coverage, clearly documenting both parameters. The description adds no additional meaning beyond what the schema provides, such as examples or context for 'journal_name' or 'include_recent_articles'. Baseline score of 3 is appropriate since 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 clearly states the action ('Get') and resource ('metrics and information about a specific journal'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'search_by_journal' or 'get_article_details', which could provide overlapping functionality, so it doesn't reach the highest score.

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 guidance on when to use this tool versus alternatives. With siblings like 'search_by_journal' and 'get_article_details' available, there's no indication of scenarios where this tool is preferred or excluded, leaving usage ambiguous.

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

search_by_authorC

Search for articles by a specific author

ParametersJSON Schema
NameRequiredDescriptionDefault
author_nameYesAuthor name to search for
max_resultsNoMaximum number of results
include_coauthorsNoInclude co-author information

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 burden of behavioral disclosure. It only states the basic action ('Search for articles') without adding context such as permissions needed, rate limits, pagination behavior, or what the search returns (e.g., list format, error handling). For a search tool with zero annotation coverage, this is a significant gap in transparency.

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, efficient sentence that directly states the tool's purpose without any wasted words. It is appropriately sized and front-loaded, making it easy for an agent to parse quickly. Every part of the sentence earns its place by conveying essential information.

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

Completeness2/5

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

Given the tool's complexity (a search function with 3 parameters), lack of annotations, and no output schema, the description is incomplete. It doesn't explain return values, error conditions, or behavioral traits, leaving gaps that could hinder an agent's ability to use the tool effectively. The description should provide more context to compensate for the missing structured data.

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%, meaning the input schema fully documents all parameters (author_name, max_results, include_coauthors). The description adds no additional meaning beyond what the schema provides, such as examples or usage tips. With high schema coverage, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.

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 clearly states the tool's purpose as 'Search for articles by a specific author,' which includes a specific verb ('Search') and resource ('articles') with a clear filter criterion ('by a specific author'). It distinguishes from general search tools but doesn't explicitly differentiate from sibling tools like 'search_by_journal' or 'advanced_search,' which might also involve article searches with different filters.

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 guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'advanced_search' or 'search_by_journal,' nor does it specify contexts, prerequisites, or exclusions for usage. This leaves the agent without explicit direction for tool selection.

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

search_by_journalC

Search articles from a specific journal

ParametersJSON Schema
NameRequiredDescriptionDefault
journal_nameYesJournal name or abbreviation
max_resultsNoMaximum number of results
date_fromNoStart date (YYYY/MM/DD)
date_toNoEnd date (YYYY/MM/DD)

TDQS

C2.9/5.0
Behavior2/5

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 states the action ('Search') but doesn't mention whether this is a read-only operation, potential rate limits, authentication requirements, or what the output format might be. For a search tool with zero annotation coverage, 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, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, earning a perfect score for conciseness.

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

Completeness2/5

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

Given the complexity of a search operation with 4 parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain what kind of results to expect, how they're formatted, or any behavioral constraints. The agent would need to guess about the tool's behavior beyond the basic purpose.

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 all four parameters thoroughly. The description adds no additional parameter information beyond what's in the schema, but since the schema does the heavy lifting, the baseline score 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?

The description clearly states the verb ('Search') and resource ('articles from a specific journal'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'search_by_author' or 'advanced_search', which limits its score to 4 rather than 5.

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 guidance on when to use this tool versus alternatives like 'search_by_author' or 'advanced_search'. It lacks context about use cases, prerequisites, or exclusions, leaving the agent to infer usage from the tool name alone.

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

search_mesh_termsB

Search and explore MeSH (Medical Subject Headings) terms

ParametersJSON Schema
NameRequiredDescriptionDefault
termYesMeSH term to search for
max_resultsNoMaximum number of results

TDQS

B3.1/5.0
Behavior2/5

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 mentions 'search and explore' but doesn't specify whether this is a read-only operation, if it requires authentication, what the response format looks like, or any rate limits. For a search tool with zero annotation coverage, this is a significant gap in transparency.

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, efficient sentence with zero wasted words. It's appropriately sized and front-loaded, clearly stating the core functionality without unnecessary elaboration.

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?

Given the tool's moderate complexity (search operation with 2 parameters), 100% schema coverage, but no annotations and no output schema, the description is minimally adequate. It states what the tool does but lacks details on behavior, output, or differentiation from siblings, leaving gaps for the agent to navigate.

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 input schema already fully documents both parameters ('term' and 'max_results'). The description adds no additional meaning beyond what's in the schema, such as explaining search semantics or result formatting. Baseline 3 is appropriate 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 clearly states the verb ('search and explore') and resource ('MeSH terms'), making the purpose immediately understandable. However, it doesn't explicitly differentiate this tool from sibling tools like 'search_pubmed' or 'advanced_search', which might also involve searching medical content, so it doesn't reach the highest score.

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 guidance on when to use this tool versus alternatives like 'search_pubmed' or 'advanced_search'. It lacks context about specific use cases, prerequisites, or exclusions, leaving the agent to infer usage from the tool name alone.

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

search_pubmedC

Search PubMed for articles with advanced filtering options

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query using PubMed syntax
max_resultsNoMaximum number of results to return
sort_orderNoSort order for resultsrelevance
date_fromNoStart date (YYYY/MM/DD, YYYY/MM, or YYYY)
date_toNoEnd date (YYYY/MM/DD, YYYY/MM, or YYYY)
date_rangeNoPredefined date range
article_typesNoFilter by article types
authorsNoFilter by author names
journalsNoFilter by journal names
mesh_termsNoFilter by MeSH terms
languageNoLanguage filter (e.g., 'eng', 'fre', 'ger')
has_abstractNoOnly include articles with abstracts
has_full_textNoOnly include articles with full text available
humans_onlyNoOnly include human studies

TDQS

C2.9/5.0
Behavior2/5

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 but offers minimal information. It mentions 'advanced filtering options' but doesn't describe critical behaviors such as rate limits, authentication needs, pagination, error handling, or what the output looks like (e.g., article metadata). This is inadequate for a tool with 14 parameters and no output schema.

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, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded and wastes no space, making it easy for an agent to parse quickly.

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

Completeness2/5

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

Given the complexity (14 parameters, no annotations, no output schema, multiple sibling tools), the description is incomplete. It doesn't explain the tool's behavior, output format, or usage context, leaving significant gaps for an agent to understand how to invoke it effectively compared to alternatives.

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?

The schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds no additional semantic context beyond implying filtering capabilities, which is already covered by the schema. This meets the baseline of 3 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 clearly states the tool's purpose as 'Search PubMed for articles with advanced filtering options,' which specifies the verb (search), resource (PubMed articles), and scope (advanced filtering). However, it doesn't explicitly differentiate from sibling tools like 'search_by_author' or 'search_by_journal,' which are more specific variants.

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 guidance on when to use this tool versus alternatives like 'advanced_search' or 'search_by_author.' It lacks context about use cases, prerequisites, or exclusions, leaving the agent to infer usage from the tool name and parameters alone.

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. 12 tool updatesv1.0.0
    • Addedadvanced_search
    • Addedanalyze_research_trends
    • Addedcompare_articles
    • Addedexport_citations
    • Addedfind_related_articles
    • Addedget_article_details
    • Addedget_journal_metrics
    • Addedget_trending_topics
    • Addedsearch_by_author
    • Addedsearch_by_journal
    • Addedsearch_mesh_terms
    • Addedsearch_pubmed

TDQS

B3.3/5.0

Scored across 12 tools

Disambiguation4/5

Most tools have clearly distinct purposes, such as get_article_details for specific articles versus search_pubmed for general queries. However, advanced_search and search_pubmed could potentially overlap in functionality, as both involve searching PubMed with filtering options, which might cause minor confusion for an agent.

Naming Consistency4/5

The naming follows a consistent verb_noun pattern throughout, like search_by_author and get_journal_metrics, with clear and descriptive terms. There are minor deviations, such as advanced_search using an adjective instead of a verb, but overall the pattern is predictable and readable.

Tool Count5/5

With 12 tools, this server is well-scoped for a PubMed interface, covering a range of functions from basic searches to advanced analyses. Each tool appears to earn its place by addressing specific aspects of PubMed interaction, such as searching, analyzing trends, and exporting data.

Completeness4/5

The tool set provides comprehensive coverage for PubMed operations, including search, analysis, and export functionalities. Minor gaps might exist, such as the lack of tools for user-specific features like saving articles or managing alerts, but core workflows for research and article retrieval are well-covered.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    A Model Context Protocol server that enhances language models with protein structure analysis capabilities, enabling detailed active site analysis and disease-related protein searches through established protein databases.
    2
    18
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    A specialized Model Context Protocol server that enhances AI-assisted medical learning by connecting Claude Desktop to PubMed, NCBI Bookshelf, and user documents for searching, retrieving, and analyzing medical education content.
    7
    MIT
  • A
    license
    C
    quality
    C
    maintenance
    A PubMed MCP server that enables LLMs to search, retrieve details, and download full-text articles from PubMed, with support for batch queries, cross-referencing, and EndNote export.
    13
    51 npm
    6
    Apache 2.0