NIH RePORTER MCP Server
Allows finding PubMed publications linked to NIH-funded research projects, returning PMIDs that can be used with PubMed APIs for citation details.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@NIH RePORTER MCP Serverfind recent R01 grants on cancer immunotherapy"
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.
NIH RePORTER MCP Server
An MCP server that wraps the NIH RePORTER API v2, enabling AI agents to search and analyze NIH-funded research projects and their linked publications. No API key required.
Tools
Tool | Description |
| Search for NIH research projects by text, PI, organization, funding, and more |
| Get full details for a specific project by application ID or project number |
| Find PubMed publications linked to NIH grants |
nih_search_projects
Search the NIH RePORTER database for federally funded research projects. Multiple criteria are combined with AND logic; within list parameters, values use OR logic.
Parameters:
text(string, optional): Free-text search across titles, abstracts, and termstext_operator("and" | "or", default "and"): How multi-word queries are combinedtext_fields("all" | "title" | "abstract" | "terms", default "all"): Which fields to searchpi_name(string, optional): PI name, e.g. "Smith, John" or "Smith"organization(string, optional): Organization name (partial match)activity_codes(list of string, optional): e.g. ["R01", "R21"]agencies(list of string, optional): NIH IC abbreviations, e.g. ["NCI", "NIMH"]fiscal_years(list of int, optional): e.g. [2024, 2025]funding_mechanism(list of string, optional): e.g. ["RP", "SB"]spending_categories(list of int, optional): RCDC category IDsstates(list of string, optional): US state abbreviationsaward_amount_min/award_amount_max(int, optional): Dollar rangeproject_start_after/project_start_before(string, optional): YYYY-MM-DDexclude_subprojects(bool, default true): Exclude subprojectsinclude_active_only(bool, default false): Only active projectsdetail_level("summary" | "full", default "summary"): Summary returns key fields; full includes abstractssort_by("relevance" | "date" | "amount", default "relevance"): Sort orderlimit(int, default 10, max 50): Results per pageoffset(int, default 0): Pagination offsetsearch_id(string, optional): Reuse a prior search for pagination
Example:
{
"text": "machine learning",
"agencies": ["NIGMS"],
"activity_codes": ["R01"],
"fiscal_years": [2025],
"limit": 5
}nih_get_project
Get full details for a specific NIH-funded project. Use after finding a project of interest via nih_search_projects.
Parameters:
appl_id(int, optional): Application ID, e.g. 10878415project_num(string, optional): Full project number, e.g. "5R01CA123456-03"
One of appl_id or project_num is required.
Example:
{"appl_id": 10878415}nih_find_publications
Find PubMed publications linked to NIH-funded projects. Returns PMIDs that can be used with PubMed APIs for full citation details.
Parameters:
core_project_nums(list of string, optional): e.g. ["R01CA123456"]. Supports wildcard*.appl_ids(list of int, optional): Application IDspmids(list of int, optional): PubMed IDs (reverse lookup: which grants funded this paper?)limit(int, default 50, max 500): Results per pageoffset(int, default 0): Pagination offset
At least one of the search parameters is required.
Example:
{"core_project_nums": ["R01CA123456"]}Related MCP server: NIH Reporter MCP Server
Quick Start
Local Development
make install
make run-local
# Test with cmcp (in another terminal)
cmcp ".venv/bin/python -m src.main" tools/listDeploy to OpenShift
make deploy PROJECT=my-projectClient Configuration
STDIO (local):
{
"mcpServers": {
"nih-reporter": {
"command": ".venv/bin/python",
"args": ["-m", "src.main"]
}
}
}HTTP (remote):
{
"mcpServers": {
"nih-reporter": {
"url": "https://<route>/mcp/"
}
}
}Development
Running Tests
make test
# Or directly
.venv/bin/pytest tests/ -v
# Single test file
.venv/bin/pytest tests/tools/test_nih_search_projects.py -vAdding Tools
Create a Python file in src/tools/ using the @mcp.tool decorator:
from typing import Annotated
from pydantic import Field
from fastmcp import Context
from fastmcp.exceptions import ToolError
from src.core.app import mcp
@mcp.tool(
annotations={"readOnlyHint": True, "openWorldHint": True},
timeout=30.0,
)
async def my_tool(
param: Annotated[str, Field(description="Parameter description")],
ctx: Context = None,
) -> dict:
"""Tool description for the LLM."""
return {"result": param}Generate scaffolds with:
fips-agents generate tool my_tool --description "Tool description" --async --with-contextProject Structure
src/
├── core/
│ ├── app.py # Shared FastMCP instance
│ ├── server.py # Server bootstrap (load + run)
│ ├── loaders.py # Dynamic component discovery
│ ├── auth.py # Optional JWT authentication
│ └── logging.py # Logging configuration
├── tools/
│ ├── nih_client.py # Shared HTTP client with rate limiting
│ ├── nih_search_projects.py # Project search tool
│ ├── nih_get_project.py # Project detail tool
│ └── nih_find_publications.py # Publication search tool
├── resources/ # (none currently)
├── prompts/ # (none currently)
└── middleware/ # (none currently)
tests/
└── tools/
├── test_nih_search_projects.py # 55 tests
├── test_nih_get_project.py # 8 tests
└── test_nih_find_publications.py # 9 testsDependencies
fastmcp >= 2.11.3 -- MCP server framework
httpx >= 0.28.0 -- Async HTTP client for NIH API calls
Environment Variables
Variable | Default | Purpose |
|
| Transport: |
|
| HTTP bind address |
|
| HTTP port |
|
| HTTP endpoint path |
|
| Logging level |
|
| Enable hot-reload for development |
|
| Server name in MCP responses |
NIH API Notes
No authentication required. The API is publicly accessible.
Rate limit: 1 request per second (enforced by the shared client).
Result limit: The API can return at most 15,000 records per search. The tool warns when this limit is hit.
Documentation: api.reporter.nih.gov
License
This project is licensed under the MIT License.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/rdwj/nih-reporter-demo-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server