NASA ADS MCP Server
The NASA ADS MCP server lets you interact with the NASA Astrophysics Data System conversationally for literature search, citation tracking, and library management.
Search NASA ADS for papers using natural language or field-specific queries, with sorting and result limits.
Retrieve full details for a specific paper by bibcode.
Find all publications by a given author, sorted by date or citation count.
Get metrics for papers, including citation counts and reads.
Get author metrics such as h-index, total citations, and paper count.
Export BibTeX citations for one or more papers in ADS format.
List your personal ADS libraries.
View all papers in a specific library.
Create new libraries to organize papers.
Add papers to existing libraries without duplicating entries.
Provides access to the NASA Astrophysics Data System (ADS) for searching astronomical papers, tracking citations and metrics, managing paper libraries, and exporting BibTeX references.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@NASA ADS MCP Serversearch for recent papers on exoplanet atmospheres"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 collectionget_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 | shA 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 | ✅ | |
Claude Desktop chat (macOS, Windows, Linux beta) | ✅ | |
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 |
Option 1: Claude Code plugin (recommended)
If your organization's Claude plan already provides this plugin, it's installed for you: skip to step 3.
Add this repository as a plugin marketplace (a catalog Claude Code can install from):
claude plugin marketplace add prtc/nasa-ads-mcpInstall the plugin:
claude plugin install nasa-ads@nasa-ads-mcpEnter 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-mcpThe token goes into your system's secure credential store. Alternatively, save it in
~/.ads/dev_key(the file theadsPython package uses), and the server will find it there.Start a new Claude Code session and run
/mcp:plugin:nasa-ads:nasa-adsshould 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)
Download
nasa-ads.mcpbfrom the latest release.Double-click it, drag it into the Claude Desktop window, or go to Settings → Extensions → Advanced settings → Install Extension…
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)
Clone this repository:
git clone https://github.com/prtc/nasa-ads-mcp.git
cd nasa-ads-mcpInstall dependencies:
uv syncConfigure your API token:
Create a .env file in the project root:
cp .env.example .envEdit .env and add your NASA ADS API token:
ADS_API_TOKEN=your_token_hereAdd to Claude Desktop configuration:
Edit your Claude Desktop config file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%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.
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
└── LICENSETesting
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 pytestTo check that your token works against the real ADS API (read-only calls):
uv run python test_connection.pyContributing
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
Verify Python 3.10+ is installed:
python3 --versionCheck API token is in
.envfileEnsure
uv synccompleted successfullyCheck Claude Desktop logs in Settings > Developer
To keep a log file of your own, set
NASA_ADS_LOG_FILE=/path/to/nasa-ads-mcp.login.env
API errors
Verify your ADS API token is valid
Check you haven't hit rate limits
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
Fully quit and restart Claude Desktop
Check that
nasa-adsis listed under Settings > Developer (Claude Desktop) or in/mcp(Claude Code)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.
Related Projects
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 toolsadd_to_libraryAdd papers to libraryAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| bibcodes | Yes | List of bibcodes to add to the library | |
| library_id | Yes | Library ID (from list_libraries) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the library (e.g., 'Stellar Populations Review') | |
| public | No | Whether the library should be public (default: false) | |
| description | No | Description of the library |
TDQS
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.
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.
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.
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.
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.
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 BibTeXARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| bibcodes | Yes | List of ADS bibcodes to export |
TDQS
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.
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.
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.
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.
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.
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 metricsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| years | No | Optional year range (e.g., '2020-2025') | |
| author | Yes | Author name (e.g., 'Coelho, P.' or 'Coelho, Paula R. T.') |
TDQS
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.
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.
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.
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.
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.
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 papersBRead-onlyIdempotent
Find all papers by a specific author. Returns list of papers with citations and publication details.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort by 'date' or 'citation_count' | date |
| author | Yes | Author name (e.g., 'Coelho, P.' or 'Coelho, Paula') | |
| max_results | No | Maximum number of results (default: 20, max: 100) |
TDQS
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.
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.
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.
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.
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.
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 papersCRead-onlyIdempotent
Get all papers from a specific library. Returns paper details for papers in the specified collection.
| Name | Required | Description | Default |
|---|---|---|---|
| library_id | Yes | Library ID (from list_libraries) |
TDQS
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.
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.
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.
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.
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.
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 detailsARead-onlyIdempotent
Get detailed information about a specific paper using its bibcode. Returns full metadata including abstract, authors, citations, keywords, and more.
| Name | Required | Description | Default |
|---|---|---|---|
| bibcode | Yes | ADS bibcode (e.g., '2019ApJ...878...98S') |
TDQS
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.
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.
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.
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.
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.
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 metricsBRead-onlyIdempotent
Get detailed metrics for specific papers including citation count, reads, and impact indicators. Useful for tracking paper impact over time.
| Name | Required | Description | Default |
|---|---|---|---|
| bibcodes | Yes | List of ADS bibcodes (e.g., ['2019ApJ...878...98S']) |
TDQS
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.
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.
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.
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.
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.
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 librariesARead-onlyIdempotent
List all your personal paper libraries/collections in ADS. Shows library names, descriptions, and paper counts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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 papersARead-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'
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort order: 'date' (newest first), 'citation_count' (most cited), or 'relevance' | date |
| query | Yes | Search query (e.g., 'stellar populations in elliptical galaxies') | |
| max_results | No | Maximum number of results to return (default: 10, max: 50) |
TDQS
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.
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.
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.
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.
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.
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.
5 tool updates
v0.4.1- Changed
add_to_library1 field changed- added
Input schema / properties / bibcodes / minItemsAdded value: +1
- Changed
export_bibtex1 field changed- added
Input schema / properties / bibcodes / minItemsAdded value: +1
- Changed
get_author_papers2 fields changed- added
Input schema / properties / max_results / maximumAdded value: +100 - added
Input schema / properties / max_results / minimumAdded value: +1
- Changed
get_paper_metrics1 field changed- added
Input schema / properties / bibcodes / minItemsAdded value: +1
- Changed
search_papers2 fields changed- added
Input schema / properties / max_results / maximumAdded value: +50 - added
Input schema / properties / max_results / minimumAdded value: +1
10 tool updates
v1.0.0- First observed
add_to_library - First observed
create_library - First observed
export_bibtex - First observed
get_author_metrics - First observed
get_author_papers - First observed
get_library_papers - First observed
get_paper_details - First observed
get_paper_metrics - First observed
list_libraries - First observed
search_papers
TDQS
Scored across 10 tools
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.
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.
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.
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
Related MCP Connectors
Federated search of books and papers, BibTeX/RIS citations, open-access retrieval and reading.
Academic literature search, retrieval, and private library management on top of OpenAlex.
NASA ADS — the Astrophysics Data System, api.adsabs.harvard.edu.
Search INSPIRE-HEP papers, authors, experiments, HEPData records; get citation metrics and BibTeX.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn 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.116MIT
- AlicenseNot gradedqualityCmaintenanceEnables 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.2MIT
- FlicenseNot gradedqualityDmaintenanceMCP server for the NASA Astrophysics Data System (ADS) enabling searches, paper retrieval, citation tracking, metrics, and interactive literature review prompts.-
- AlicenseAqualityBmaintenanceEnables LLMs to search astronomical literature, retrieve paper metadata, analyze citation metrics, and export bibliographic data via the NASA Astrophysics Data System (SciX) API.2123 npm4MIT