For developers. Updated every day.
An MCP server and a REST API for the medical literature
MedCP gives your agent 33.8 million MEDLINE/PubMed articles with their abstracts, 8.1 million full texts, more than 600,000 clinical trials, medicines and clinical guidelines, updated every day. More than 11 million open-access articles, every one searchable by meaning.
One key for MCP and REST. No account and no password: you only need an email address.
Connect over MCP
Streamable HTTP, stateless: every request carries your key, and there is no session to keep. The answers are JSON.
The endpoint
POST https://api.medcp.app/mcp Authorization: Bearer medos_…
Your key starts with medos_. It works for the MCP server and the REST API.
Claude Code
claude mcp add --transport http medcp https://api.medcp.app/mcp --header "Authorization: Bearer $MEDOS_API_KEY"
Claude API, MCP connector
import os
import anthropic
client = anthropic.Anthropic()
response = client.beta.messages.create(
model="claude-opus-5-5",
max_tokens=4096,
betas=["mcp-client-2025-11-20"],
mcp_servers=[{
"type": "url",
"url": "https://api.medcp.app/mcp",
"name": "medcp",
"authorization_token": os.environ["MEDOS_API_KEY"],
}],
tools=[{"type": "mcp_toolset", "mcp_server_name": "medcp"}],
messages=[{
"role": "user",
"content": "Does vitamin D supplementation prevent fractures in older adults? Cite PMIDs.",
}],
)
print("".join(b.text for b in response.content if b.type == "text"))OpenAI API, remote MCP tool
import os
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-6-astra",
tools=[{
"type": "mcp",
"server_label": "medcp",
"server_url": "https://api.medcp.app/mcp",
"authorization": os.environ["MEDOS_API_KEY"],
"require_approval": "never",
}],
input="Does vitamin D supplementation prevent fractures in older adults? Cite PMIDs.",
)
print(response.output_text)Other clients. Clients such as Cursor or VS Code take the same address and header in a streamable-HTTP server entry. The Claude desktop app reaches the server through a small bridge, mcp-remote: the key page shows how, for it and for Codex CLI. ChatGPT connectors and claude.ai in a browser need a sign-in method (OAuth) that MedCP does not offer yet.
The tools your agent can call
Each tool call counts as one request; initialize, tools/list and ping do not count.
search_pubmedFinds articles with their abstracts: by meaning and keywords together (hybrid, the default), by keywords only (bm25) or by meaning only (vector). Takes PubMed search syntax and filters on MeSH headings, publication types, dates, languages, journals, trial registry numbers, open access and full text; sorts by relevance, date or citations; can rerank the first ten.get_articlesReads up to 20 full records by PMID, or the full text of one article a page at a time, whole or by section, with its licence.get_figureReturns figures of a full text as images, such as forest plots and survival curves.lookup_meshFinds MeSH descriptors and publication types, with their identifiers, tree numbers and synonyms, to build precise filters.lookup_drugFinds a medicine in the data of the FDA and the EMA by name or code: substances, US applications, labels, products, shortages and recalls; EU medicines, shortages and safety communications.read_drug_labelReads a US label or an EU product information, section by section.
Every result says the date of the data it comes from and carries the attribution of its source. Trial records, citation counts and retraction flags come with the articles; retracted articles are left out unless your agent asks for them.
Or call the REST API
The same data and the same key, as JSON over HTTPS.
A search by meaning and keywords
curl -sG https://api.medcp.app/v1/search \ -H "Authorization: Bearer $MEDOS_API_KEY" \ --data-urlencode "q=does vitamin D supplementation prevent fractures in older adults" \ -d mode=hybrid -d limit=3 -d abstracts=true
The answer lists the hits with their PMID, title, journal, date, authors, DOI, publication types and abstract, then a meta block with the attribution and the date of the data. The headers X-Quota-Limit and X-Quota-Remaining give your count for the day.
GET /v1/search, POST /v1/searchThe search of search_pubmed, with the same filters. Its defaults differ: keywords only (bm25), 20 results, no abstracts; add mode=hybrid and abstracts=true.GET /v1/articles/{pmid}One record.GET /v1/articles?pmids=…, POST /v1/articles/batchUp to 200 records in one request.GET /v1/articles/{pmid}/fulltextThe full text, a page at a time, with its licence.GET /v1/articles/{pmid}/figures/{id}The image of one figure.GET /v1/drugsA medicine’s FDA and EMA data, by name or code.GET /v1/drugs/labelA US label or an EU product information, by section.GET /healthWithout a key: whether the service is up, and the date of its data.
Errors are JSON too: {"error": {"status", "code", "message"}}, and a 429 says when to try again in Retry-After. Call the API from your server or your scripts: browsers block calls from web pages on other sites.
The data
New articles and corrections are applied every day, as the National Library of Medicine publishes them.
33.8 million
Biomedical articles with their abstracts, MeSH headings and publication types. Count of 31 October 2026.
11 million+
Open-access articles, every one searchable by meaning: found even when they use other words than the question.
8.1 million
Full texts, with their figures for 4.7 million of them. Each one comes with its licence.
600,000+
Registered clinical trials, linked to the articles that report them.
Also: the medicine information published by the FDA and the EMA, with more than 262,000 US labels and the product information of more than 2,300 medicines authorized in the EU; more than 19,000 clinical guidelines that are not in PubMed, with their full text; for most articles, how often they are cited.
Usage limits
Per key. A REST request or an MCP tool call counts as one request; a request refused for a limit is not counted.
- 10,000
- Requests per day
- 60
- Requests per minute
- 100
- Reranked searches per day
- 1,000
- Pages of full text or figures per day
A page of full text holds up to 20,000 characters by default. The counters start again every day at midnight UTC.
Building something that needs more? Write to [email protected].
Good to know. You may build agents, applications and research on top of MedCP. Do not download the data in bulk or mirror it, resell access or offer it as your own API without our written agreement, or put personal data about identifiable people, such as patients, in queries. Keep the key on your server, not in a web page or public code. When you show results, keep the attribution that comes with them and the licence of each full text. MedCP gives no medical advice. Details in the Terms of use.
Check your email
We have sent a link to .
- Open the email from MedCP, subject “Your MedCP access key link”.
- Click Open the key page.
The link works once, for 30 minutes. No email after 5 minutes? Look in your spam or junk folder, or send the link again.
We have already sent you a link
We have sent several links to this email address, or from your network, in a short time.
Look in your inbox, and in your spam folder, for the latest email from us. Or try again later.
New keys are paused for today
We have reached today's limit of new keys. Please try again tomorrow, after midnight UTC.
In a hurry? Write to [email protected] and we will set you up.