Skip to main content
Glama
prtc
by prtc

NASA ADS MCP Server

A Model Context Protocol (MCP) server that provides seamless access to the NASA Astrophysics Data System (ADS) directly within Claude. Search papers, track citations, manage libraries, and export references — all through natural language conversation.

License: MIT

About this project

This MCP server is the result of an experiment on collaborating with Claude (Anthropic) to augment my literature search workflows. It leveraged the Skill mcp-builder provided by Anthropic. All code was generated by Claude based on requirements, domain knowledge, and iterative feedback provided by the human-in-the-loop. The MCP server is working well for me, but it is far from an extensively tested solution. Feel free to fork, contribute or suggest me things that need fixing or improvement.

Related MCP server: SciX Client

Features

This MCP server exposes 10 tools for interacting with NASA ADS:

Search & Discovery

  • search_papers - Search ADS with its full query syntax; results show journal, volume, page, DOI and arXiv ID, page through with offset, and can be limited to one collection

  • get_paper_details - Abstracts and full metadata for up to 20 papers at once, by bibcode, DOI or arXiv ID

  • get_author_papers - Find publications by an author, in the astronomy collection by default, optionally by ORCID, affiliation, author position ("papers where I'm second author"), team size or refereed status

Metrics & Analytics

  • get_paper_metrics - Track citations, reads, and impact for specific papers

  • get_author_metrics - Calculate h-index, citation statistics, and research impact, with the same options (e.g. refereed papers with at most 20 authors, for a CV)

Reference Management

  • export_bibtex - Export properly formatted BibTeX citations

  • list_libraries - View your personal ADS paper collections

  • get_library_papers - Access papers from specific libraries

  • create_library - Organize papers by topic or project

  • add_to_library - Build and maintain paper collections

Why This Tool?

The NASA ADS is the primary literature database for astronomy and astrophysics research, containing millions of papers, preprints, and citations. This MCP server makes ADS accessible through conversational AI, enabling:

  • Literature reviews without switching contexts

  • Citation tracking for your publications

  • BibTeX generation for LaTeX/Quarto manuscripts

  • Research organization through libraries

  • Impact analysis with comprehensive metrics

Perfect for astronomers, astrophysicists, and researchers who want their reference database integrated into their AI workflow.

Installation

Students and first-time users: follow the step-by-step guide, in English or Portuguese.

Prerequisites

  • uv, the Python package manager, which also fetches Python for you if needed (install instructions). On Linux and macOS:

    curl -LsSf https://astral.sh/uv/install.sh | sh
  • A NASA ADS API token, free with an ADS account (get yours here)

Where it works

The server runs on your own computer, so it works wherever Claude can start local programs:

Where you use Claude

Works?

How to install

Claude Code (terminal, IDE extensions, desktop app's Code tab), on Linux, macOS, or Windows

✅

Option 1: plugin

Claude Desktop chat (macOS, Windows, Linux beta)

✅

Option 2: one-click bundle

Cowork

Not yet: Cowork doesn't ask for the plugin's token setting

claude.ai on the web, mobile apps

❌ These can't run programs on your computer

If your organization's Claude plan already provides this plugin, it's installed for you: skip to step 3.

  1. Add this repository as a plugin marketplace (a catalog Claude Code can install from):

    claude plugin marketplace add prtc/nasa-ads-mcp
  2. Install the plugin:

    claude plugin install nasa-ads@nasa-ads-mcp
  3. Enter your ADS token when Claude Code asks for it. If it didn't ask, or to change it later, run this inside a Claude Code session:

    /plugin configure nasa-ads@nasa-ads-mcp

    The token goes into your system's secure credential store. Alternatively, save it in ~/.ads/dev_key (the file the ads Python package uses), and the server will find it there.

  4. Start a new Claude Code session and run /mcp: plugin:nasa-ads:nasa-ads should show as connected. The first start takes a few extra seconds while uv installs the server's dependencies.

Updating: claude plugin marketplace update nasa-ads-mcp, then claude plugin update nasa-ads@nasa-ads-mcp.

Already set it up by hand before? Remove the old entry so Claude doesn't see every tool twice: claude mcp remove nasa-ads.

Sharing with your research group

On a Claude Team or Enterprise plan, an Owner can install the plugin for every member. The organization's plugin sync reads a private marketplace repository, so create one for your group (for example, in your group's GitHub organization) with a single file, .claude-plugin/marketplace.json, that points at this repository:

{
  "name": "pleiad-astronomy",
  "description": "Claude plugins for the Pleiad Astronomy group",
  "owner": { "name": "Paula Coelho" },
  "plugins": [
    {
      "name": "nasa-ads",
      "source": { "source": "github", "repo": "prtc/nasa-ads-mcp" },
      "description": "Search NASA ADS: papers, metrics, BibTeX export, and your ADS libraries"
    }
  ]
}

Then, in claude.ai, go to Organization settings → Plugins & skills → Add → Sync from GitHub, choose that repository, and set Default access to Installed by default. Members get the plugin in Claude Code as nasa-ads@synced, and each one adds their own ADS token. See Anthropic's guide to syncing plugins from a repository.

Option 2: Claude Desktop (one-click bundle)

  1. Download nasa-ads.mcpb from the latest release.

  2. Double-click it, drag it into the Claude Desktop window, or go to Settings → Extensions → Advanced settings → Install Extension…

  3. Paste your ADS token when Claude Desktop asks for it.

If Claude Desktop reports that it can't find uv, install uv (see Prerequisites) and restart it.

Option 3: Manual setup (Claude Desktop or any MCP client)

  1. Clone this repository:

git clone https://github.com/prtc/nasa-ads-mcp.git
cd nasa-ads-mcp
  1. Install dependencies:

uv sync
  1. Configure your API token:

Create a .env file in the project root:

cp .env.example .env

Edit .env and add your NASA ADS API token:

ADS_API_TOKEN=your_token_here
  1. Add to Claude Desktop configuration:

Edit your Claude Desktop config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Add this entry to the mcpServers section:

{
  "mcpServers": {
    "nasa-ads": {
      "command": "uv",
      "args": [
        "--directory",
        "/absolute/path/to/nasa-ads-mcp",
        "run",
        "python",
        "src/nasa_ads_mcp/server.py"
      ]
    }
  }
}

Replace /absolute/path/to/nasa-ads-mcp with the actual path to where you cloned the repository.

  1. Restart Claude Desktop

Check that nasa-ads is listed under Settings > Developer.

Usage Examples

Once connected, you can interact with ADS through natural language in Claude:

Search & Discovery

"Search for recent papers on stellar populations in elliptical galaxies"
"Find papers by Coelho, Paula R. T. from 2020-2025"
"What are the most cited papers on galaxy formation?"

Metrics & Impact

"What's my current h-index and total citations?"
"Show me citation trends for bibcode 2005A&A...443..735C"
"Get metrics for my 2024 papers"

Reference Management

"Export BibTeX for these 5 papers: [bibcodes]"
"Show me what's in my 'Stellar Spectral Libraries' collection"
"Create a new library called 'Review Paper References'"
"Add these papers to my reading list"

API Coverage

This server implements:

  • ✅ Search API - Full query capabilities with field-specific searches

  • ✅ Metrics API - Author and paper-level metrics

  • ✅ Libraries API - Complete CRUD operations for collections

  • ✅ Export API - BibTeX citation generation

  • ⏳ Journals API - Future enhancement

Development

Project Structure

nasa-ads-mcp/
├── .github/workflows/         # Tests on every pull request; builds the .mcpb for each release
├── .claude-plugin/
│   ├── plugin.json            # Claude Code plugin: metadata, token setting, server command
│   └── marketplace.json       # Lets this repository act as a plugin marketplace
├── manifest.json              # Claude Desktop bundle (.mcpb) manifest
├── assets/                    # Icons (Pleiad logo by Ingrid Beloto; not MIT-licensed)
├── .mcpbignore                # Files left out of the bundle (never .env)
├── docs/                      # Student guides (English and Portuguese)
├── src/
│   └── nasa_ads_mcp/
│       ├── __init__.py
│       └── server.py          # Main MCP server implementation
├── tests/
│   └── test_server.py         # Automated tests (simulated ADS, no token needed)
├── test_connection.py         # Manual check against the real ADS API
├── .env.example               # Template for API token
├── .gitignore
├── pyproject.toml             # Project configuration
├── CHANGELOG.md
├── ROADMAP.md                 # Plans, known issues, and the release process
├── CITATION.cff               # How to cite this software
├── README.md
└── LICENSE

Testing

The automated tests simulate ADS responses, so they need no token or network. Run uv sync first: it installs pytest along with the other development tools (if uv run pytest says "No such file or directory", this step is missing, or uv needs updating with uv self update).

uv sync
uv run pytest

To check that your token works against the real ADS API (read-only calls):

uv run python test_connection.py

Contributing

Contributions are welcome! ROADMAP.md lists what's planned next, the known issues, and how releases work.

Technical Details

Built with:

  • MCP SDK (Python, 2.x) for the MCP protocol: each tool is a typed Python function, and its input schema comes from the type hints

  • httpx for asynchronous calls to the ADS API (search, export, metrics, libraries)

  • python-dotenv for secure token management

The server uses:

  • stdio transport to talk to Claude Desktop and Claude Code

  • The ADS export service for BibTeX, so entries match what ADS itself exports

  • Tool annotations that tell Claude which tools only read and which change your ADS libraries

  • Rate limiting handled by NASA ADS API (the server reports when the limit is reached)

Known Limitations

  • Rate limits: NASA ADS enforces rate limits. Monitor your usage for large queries.

  • Author name matching: author searches and metrics match every paper with that name, so common names can include other people's papers.

  • Author metrics: use at most the first 2000 papers found (the server says so when this happens).

Troubleshooting

Server won't start

  1. Verify Python 3.10+ is installed: python3 --version

  2. Check API token is in .env file

  3. Ensure uv sync completed successfully

  4. Check Claude Desktop logs in Settings > Developer

  5. To keep a log file of your own, set NASA_ADS_LOG_FILE=/path/to/nasa-ads-mcp.log in .env

API errors

  1. Verify your ADS API token is valid

  2. Check you haven't hit rate limits

  3. Confirm bibcodes are correctly formatted (19 characters, padded with dots). Lookups also accept DOIs, arXiv IDs and a paper's earlier bibcodes

Can't see tools in Claude

  1. Fully quit and restart Claude Desktop

  2. Check that nasa-ads is listed under Settings > Developer (Claude Desktop) or in /mcp (Claude Code)

  3. Verify config path is absolute, not relative

Data and Privacy

This server runs on your own computer. It sends your search queries, bibcodes, and library requests only to the NASA ADS API (api.adsabs.harvard.edu), authenticated with your own ADS token. It stores no data of its own and sends nothing anywhere else. Your token stays in your local .env file. What ADS does with API requests is covered by the ADS privacy policy.

Icon

The icon is the logo of the Pleiad Astronomy group, designed by Ingrid Beloto, in light- and dark-theme versions made in the group's visual-identity repository. The MIT license covers this project's code and documentation, not the logo: the files in assets/ belong to the Pleiad group.

Other MCP servers for ADS that we know of. Suggestions for this list are welcome.

  • scix-mcp: the official server from the ADS/SciX team (TypeScript, npx scix-mcp). Broad API coverage, including citation networks, 23 export formats, and library sharing and annotations. First released on npm on 2025-11-20.

  • mcp-server-ads by cbyrohl (Python, uvx). Includes object-name resolution, reference-string resolution, and citation/collaboration networks.

This project was first released on 2025-11-02. When we built it, we searched for an existing ADS MCP server and found none, so it was developed independently. We're glad the ADS team now offers an official one.

Acknowledgments

  • NASA Astrophysics Data System for providing the API

  • Anthropic for creating MCP and Claude

  • Astronomy community for maintaining the world's best literature database

How This Was Made

This server is a human–AI collaboration. Claude (Anthropic) wrote 100% of the code and documentation; Paula Coelho did not change a single comma of the code. Paula brought the idea, the astronomy and ADS knowledge, the requirements, the testing in real research, and every decision about what the tool should be. It would not exist without both: in Paula's words, it is not something she would have pursued alone.Credit is shared. Accountability is Paula's, she carries it in the name of the collaboration.

Contributions, using the CRediT roles:

  • Paula Coelho: Conceptualization, Methodology (astronomy and ADS knowledge), Validation, Supervision, Project administration

  • Claude (Anthropic): Software, Writing – original draft

The git history records Claude's part in each change through Co-Authored-By lines. "Claude (Anthropic)" is listed as a collective author, much as software papers credit "The Astropy Collaboration": several Claude instances and model versions contributed over time.

Citation

If you use this tool in your research workflow, you can cite it as below. GitHub's "Cite this repository" button reads the same information from CITATION.cff.

@software{nasa_ads_mcp,
  author = {Coelho, Paula and {Claude (Anthropic)}},
  title = {NASA ADS MCP Server},
  note = {Human--AI collaboration; maintained by Paula Coelho},
  version = {0.2.0},
  year = {2025},
  url = {https://github.com/prtc/nasa-ads-mcp}
}

If you write about using this tool in a journal article, follow the journal's policy on AI: most don't accept AI as an author, so the collaboration belongs in the AI-use disclosure or acknowledgments.

License

MIT License - see LICENSE file for details.


Questions or Issues? Open an issue on GitHub or contact through the repository.

Want to learn more about MCP? Visit modelcontextprotocol.io

Available Tools

10 tools
add_to_libraryAdd papers to libraryA
Idempotent

Add papers to an existing library in the user's ADS account. Provide library ID and list of bibcodes to add. Papers already in the library are not duplicated.

ParametersJSON Schema
NameRequiredDescriptionDefault
bibcodesYesList of bibcodes to add to the library
library_idYesLibrary ID (from list_libraries)

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, openWorldHint=true, and destructiveHint=false. The description adds genuine value on top by disclosing deduplication behavior ('Papers already in the library are not duplicated'), which is the practical consequence of idempotency, though it says nothing about permissions or partial-failure behavior.

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?

Three short sentences, front-loaded with the action and scope, then the required inputs, then the dedupe caveat. No filler; every sentence 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 2-parameter, non-destructive mutation with full schema coverage and no output schema, the description covers purpose, inputs, and the dedupe side effect. It stops short of noting auth requirements or what happens with invalid library IDs, which are minor omissions rather than blocking 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% and the schema already documents both parameters, including that library_id comes from list_libraries. The description merely restates those parameters ('Provide library ID and list of bibcodes') without adding format, limits, or semantics beyond the schema, so the 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 ('Add') and resource ('papers to an existing library in the user's ADS account'), and the word 'existing' implicitly separates it from the sibling create_library. An agent can identify the operation without opening 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 Guidelines3/5

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

The description tells the agent what to provide (library ID and bibcodes) and that the library must already exist, which implies you need list_libraries first. However, it never explicitly states when to use this versus alternatives such as create_library or get_library_papers, so usage is only implied.

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

create_libraryCreate libraryB

Create a new paper library/collection in the user's ADS account. Useful for organizing papers by topic, project, or reading status.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName for the library (e.g., 'Stellar Populations Review')
publicNoWhether the library should be public (default: false)
descriptionNoDescription of the library

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, openWorldHint=true and destructiveHint=false, so the mutation/non-idempotent safety profile is covered. The description adds only account scoping ('in the user's ADS account') and nothing about permission needs, duplicate-name handling, or side effects, which is acceptable but thin given annotations carry most of the burden.

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 short sentences with no filler, and the core action is front-loaded before the use-case elaboration. Efficient, though the second sentence is more marketing than specification.

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?

With no output schema, the description could usefully state what a successful creation returns (e.g., a library identifier needed to chain into add_to_library), and it omits any visibility/permission caveats around the 'public' flag. It is adequate for a simple 3-param create but leaves a real chaining 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%, so all three parameters (name, public, description) are already documented with defaults and examples. The description adds no parameter-level meaning beyond the schema, which is the baseline-3 case.

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+resource ('Create a new paper library/collection') and scopes it to 'the user's ADS account', which is clearer than the bare title. It implicitly separates from siblings like add_to_library and list_libraries, but never names or contrasts them explicitly, so it stops short of a 5.

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 second sentence ('Useful for organizing papers by topic, project, or reading status') gives an implied usage context, but offers no when-to-use vs alternatives guidance and no prerequisites. It does not clarify the relationship to add_to_library (adding existing papers) versus creating a new container, which is the main ambiguity an agent would face.

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

export_bibtexExport BibTeXA
Read-onlyIdempotent

Export BibTeX citations for one or more papers, exactly as ADS formats them (journal macros, volume, pages, DOI, eprint). Useful for adding references to LaTeX/Quarto documents.

ParametersJSON Schema
NameRequiredDescriptionDefault
bibcodesYesList of ADS bibcodes to export

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuine value beyond them by disclosing the output fidelity (ADS-style journal macros, volume, pages, DOI, eprint) — meaningful since there is no output schema. It stops short of covering size limits or error behavior for invalid bibcodes.

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 tight sentences with zero filler; the core action and its format guarantee lead, and the use case follows. Nothing is repeated from the schema or annotations.

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 one-parameter, read-only export with no output schema, the description supplies both the format of the returned citations and a use case, which is nearly everything an agent needs. Only error/limit behavior for large or invalid bibcode lists 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 coverage is 100% and the single parameter is fully described there. The description's 'one or more papers' reinforces the array/multi-value semantics but adds no format, syntax, or validity detail beyond the schema. 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 (export) and resource (BibTeX citations for one or more papers), plus a distinguishing quality claim: 'exactly as ADS formats them (journal macros, volume, pages, DOI, eprint)'. No sibling is named or contrasted, but the operation is naturally unique among the search/get/library siblings, so the intent is unmistakable.

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 sentence 'Useful for adding references to LaTeX/Quarto documents' gives a downstream use context but no explicit when-to-use trigger, no prerequisites, and no alternatives (e.g., that bibcodes typically come from search_papers). Usage is implied rather than stated.

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

get_author_metricsGet author metricsA
Read-onlyIdempotent

Get comprehensive metrics for an author including h-index, total citations, paper count, and citation statistics. Useful for CV preparation and tracking research impact. Note: matches every paper with this author name, so common names may include other people's papers.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearsNoOptional year range (e.g., '2020-2025')
authorYesAuthor name (e.g., 'Coelho, P.' or 'Coelho, Paula R. T.')

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description then adds a genuinely useful behavioral caveat absent from structured data: name matching sweeps in every paper with that name, so common names may pull in other people's work. It does not describe return shape or how the years filter interacts with the aggregate.

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?

Three tight sentences with the core purpose and returned fields front-loaded, followed by usage context and the important caveat. Little waste, though the CV sentence is mild filler.

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?

No output schema exists, but the description compensates by naming the metric fields returned, and the annotations cover the safety profile. The ambiguity caveat addresses the main risk. Only minor gaps remain around how years filtering affects totals.

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 both author and years documented in the schema, so the baseline is 3. The description adds no syntax, format, or default guidance beyond what the schema already states.

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?

Names a specific verb (get), resource (author metrics) and enumerates the returned fields (h-index, total citations, paper count, citation statistics). It is clearly distinct from paper-oriented siblings like get_author_papers and search_papers, though it never explicitly contrasts itself with get_paper_metrics.

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?

Provides implied context ('useful for CV preparation and tracking research impact') but gives no explicit when-to-use condition, prerequisites, or routing to alternatives such as get_author_papers when the user wants the paper list rather than aggregate metrics.

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

get_author_papersGet author papersB
Read-onlyIdempotent

Find all papers by a specific author. Returns list of papers with citations and publication details.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoSort by 'date' or 'citation_count'date
authorYesAuthor name (e.g., 'Coelho, P.' or 'Coelho, Paula')
max_resultsNoMaximum number of results (default: 20, max: 100)

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered. The description adds the useful detail that results include citations and publication details, but says nothing about pagination, result truncation at max_results, or sorting behavior beyond what the schema states.

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 with the core action front-loaded and zero filler. Nothing is wasted or buried.

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?

With no output schema, the description helpfully identifies what comes back (papers with citations and publication details), and annotations cover safety. It could still note the meaning of max_results truncation or whether an empty author returns an error, but for a simple three-param read tool this is close to 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 all three parameters (author, sort, max_results) are already documented with defaults, limits and an enum. The description's mention of 'citations' loosely echoes the citation_count sort but adds no format or syntax meaning beyond the 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 states a specific verb and resource ('Find all papers by a specific author') and sketches the return payload. It is clear on its own, but it never names the obvious siblings (search_papers, get_paper_details) that an agent could confuse it with.

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: nothing tells the agent to prefer this over search_papers for author-scoped queries, nor any prerequisite on author name format (the schema shows examples but not the description). Usage is only implied by the tool name.

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

get_library_papersGet library papersC
Read-onlyIdempotent

Get all papers from a specific library. Returns paper details for papers in the specified collection.

ParametersJSON Schema
NameRequiredDescriptionDefault
library_idYesLibrary ID (from list_libraries)

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile is covered. The description adds nothing beyond that: it does not say whether results are paginated, how large a library listing can be, or what the returned 'paper details' include.

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

Conciseness3/5

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

Two short sentences with the core action front-loaded, but the second sentence largely restates the first ('returns paper details' vs 'get all papers'). Efficient but not fully earned.

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 single-parameter read tool with full annotation coverage and no output schema, the description is minimally adequate. It leaves the library-vs-collection wording ambiguous and gives no sense of result volume or ordering.

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 the schema already tells the agent the library_id comes from list_libraries. The description adds no syntax, format, or example beyond that, so the baseline of 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 and resource (get papers from a library) and clarifies it returns paper details, which distinguishes it from list_libraries and add_to_library. Minor wobble between 'library' and 'collection' in the second sentence slightly muddies the target resource.

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 versus siblings like search_papers, get_paper_details, or get_author_papers. The only routing hint is inherited from the schema's mention of list_libraries, not the description.

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

get_paper_detailsGet paper detailsA
Read-onlyIdempotent

Get detailed information about a specific paper using its bibcode. Returns full metadata including abstract, authors, citations, keywords, and more.

ParametersJSON Schema
NameRequiredDescriptionDefault
bibcodeYesADS bibcode (e.g., '2019ApJ...878...98S')

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds the useful detail that a rich metadata payload (abstract, authors, citations, keywords) is returned, but says nothing about failed lookups or rate limits, so it adds modest value beyond annotations.

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 tight sentences with zero filler, front-loaded on the action and identifier, then the return payload.

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?

With no output schema, the description correctly enumerates the returned fields ('abstract, authors, citations, keywords, and more'), which is the key missing piece. Minor gap: no statement on behavior when the bibcode is invalid or not found.

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 the single bibcode parameter is documented with a concrete example, so the schema carries the load. The description only reinforces that the bibcode is the lookup key without adding format or validation semantics.

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 detailed information') and resource ('a specific paper'), keyed on the bibcode identifier. It is clearly distinguishable from search_papers and the author/metrics siblings, though it does not explicitly name those alternatives.

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 'using its bibcode' phrasing implies the tool is for single-paper lookups once an identifier is known, but there is no explicit when-to-use/when-not guidance or pointer to search_papers for discovery scenarios.

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

get_paper_metricsGet paper metricsB
Read-onlyIdempotent

Get detailed metrics for specific papers including citation count, reads, and impact indicators. Useful for tracking paper impact over time.

ParametersJSON Schema
NameRequiredDescriptionDefault
bibcodesYesList of ADS bibcodes (e.g., ['2019ApJ...878...98S'])

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety and idempotency profile is covered. The description adds the metric categories a caller receives, but says nothing about rate limits, partial-failure behavior for invalid bibcodes, or cost of the open-world call.

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 purpose and followed by the metric contents; no filler or repetition. It is slightly short on routing information rather than verbose.

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?

With no output schema, the description does list the returned metric categories, which partially compensates. But it omits key details for a batch metrics call — behavior on unknown bibcodes, response shape per paper, and how to choose this over get_paper_details — leaving a small but real 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 coverage is 100% and the single bibcodes parameter already carries a format example and minItems=1. The description's 'specific papers' only loosely restates the bibcode-list input without adding batching or format constraints beyond the schema, so the baseline of 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 and resource ('Get detailed metrics for specific papers') and enumerates what is returned: citation count, reads, impact indicators. However, it never distinguishes itself from the close sibling get_paper_details or get_author_metrics, so an agent must infer the 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 Guidelines3/5

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

'Useful for tracking paper impact over time' implies a use case but names no alternative tools and gives no condition for choosing metrics over details. Usage is only implied, not directed.

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

list_librariesList librariesA
Read-onlyIdempotent

List all your personal paper libraries/collections in ADS. Shows library names, descriptions, and paper counts.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful return-content context (names, descriptions, paper counts) that the annotations cannot convey, though it omits pagination or auth details.

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 verb and resource, followed by the return contents. No filler.

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?

With no output schema, the description usefully enumerates what is returned (names, descriptions, paper counts). Only minor gaps remain, such as whether results are paginated or require authentication.

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

Parameters4/5

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

Zero parameters, so there is nothing to document; baseline 4 applies. The description correctly does not invent parameter guidance where none is needed.

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 ('List') and resource ('personal paper libraries/collections in ADS'), and the phrase 'your personal' scopes it distinctly from siblings like get_library_papers or create_library. An agent can identify the tool's purpose without opening 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 Guidelines3/5

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

Usage is implied — this is the natural discovery step before get_library_papers or add_to_library — but the description never says when to use it versus alternatives or states any preconditions. Adequate but with a clear gap.

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

search_papersSearch papersA
Read-onlyIdempotent

Search NASA ADS for astronomy/astrophysics papers. Returns bibcodes, titles, authors, years, and citation counts. Use natural language queries or specific field searches. Examples: 'stellar populations', 'author:Coelho', 'year:2020-2024'

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoSort order: 'date' (newest first), 'citation_count' (most cited), or 'relevance'date
queryYesSearch query (e.g., 'stellar populations in elliptical galaxies')
max_resultsNoMaximum number of results to return (default: 10, max: 50)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), so the bar is lower. The description adds genuine value the annotations don't: the shape of the returned records. It omits any note on rate limits, result-window behavior, or empty-result handling, which for an open-world search API would be useful.

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?

Three sentences, front-loaded with the verb and resource, followed by return shape and then query syntax. Every sentence earns its place with no filler or restatement of the name.

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

Completeness5/5

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

With no output schema, the description correctly compensates by listing returned fields. Combined with a fully documented 3-parameter schema and complete annotations, an agent has everything needed to invoke this tool correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description goes beyond the schema by showing field-search syntax ('author:Coelho', 'year:2020-2024'), which the schema's plain example does not teach. It adds nothing about sort or max_results, but those are fully documented in 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?

States a specific verb (Search) and resource (NASA ADS papers), names the domain, and enumerates what comes back (bibcodes, titles, authors, years, citation counts). This lets an agent distinguish it from get_paper_details, get_author_papers, and export_bibtex without opening any schema.

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?

Tells the agent how to formulate input ('natural language queries or specific field searches') and gives three concrete query examples, which is real usage guidance. It does not, however, say when to prefer a sibling (e.g., get_paper_details once you have a bibcode) 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.

Tool Schema Changelog

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

  1. 5 tool updatesv0.4.1
    • Changedadd_to_library1 field changed
      • addedInput schema / properties / bibcodes / minItems
        Added value: +1
    • Changedexport_bibtex1 field changed
      • addedInput schema / properties / bibcodes / minItems
        Added value: +1
    • Changedget_author_papers2 fields changed
      • addedInput schema / properties / max_results / maximum
        Added value: +100
      • addedInput schema / properties / max_results / minimum
        Added value: +1
    • Changedget_paper_metrics1 field changed
      • addedInput schema / properties / bibcodes / minItems
        Added value: +1
    • Changedsearch_papers2 fields changed
      • addedInput schema / properties / max_results / maximum
        Added value: +50
      • addedInput schema / properties / max_results / minimum
        Added value: +1
  2. 10 tool updatesv1.0.0
    • First observedadd_to_library
    • First observedcreate_library
    • First observedexport_bibtex
    • First observedget_author_metrics
    • First observedget_author_papers
    • First observedget_library_papers
    • First observedget_paper_details
    • First observedget_paper_metrics
    • First observedlist_libraries
    • First observedsearch_papers

TDQS

A3.7/5.0

Scored across 10 tools

Disambiguation4/5

Most tools clearly target distinct ADS resources or actions. Minor overlap exists between search_papers and get_author_papers, and between get_paper_details and get_paper_metrics, but the descriptions mostly clarify their different scopes.

Naming Consistency5/5

All tool names use consistent snake_case with a clear verb_noun pattern, such as search_papers, get_paper_details, list_libraries, and add_to_library. No mixed conventions or vague verb-only names appear.

Tool Count5/5

Ten tools is well-scoped for a NASA ADS server covering search, retrieval, metrics, export, and library management. Each tool has a plausible place in the set without excessive redundancy.

Completeness4/5

The paper search, details, metrics, BibTeX export, author lookup, and library creation/addition workflows are covered. Library management is incomplete because there are no tools to update, delete, or remove papers from libraries, but core research workflows remain usable.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    An MCP server for the NASA Astrophysics Data System (ADS) that enables searching, citation graph traversal, and bibliography management for astrophysics literature. It provides tools for computing citation metrics, resolving astronomical object names, and managing paper libraries through natural language.
    11
    6
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to interact with the SciX (formerly NASA ADS) API to search scientific literature, export citations, and analyze bibliometric data. It supports advanced tools for managing libraries, resolving astronomical object names, and exploring citation networks.
    2
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server for the NASA Astrophysics Data System (ADS) enabling searches, paper retrieval, citation tracking, metrics, and interactive literature review prompts.
    -
  • A
    license
    A
    quality
    B
    maintenance
    Enables LLMs to search astronomical literature, retrieve paper metadata, analyze citation metrics, and export bibliographic data via the NASA Astrophysics Data System (SciX) API.
    21
    23 npm
    4
    MIT