PubMed Custom Connector MCP Server
Provides tools to search and fetch articles from the PubMed biomedical literature database.
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., "@PubMed Custom Connector MCP Serverfind recent trials on CRISPR for sickle cell disease"
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.
PubMed custom federated connector for Microsoft 365 Copilot
A Model Context Protocol (MCP) server that brings the public PubMed biomedical literature database into Microsoft 365 Copilot as a custom federated connector.
Users can ask Copilot natural-language questions ("find recent trials on CRISPR for sickle cell disease") and Copilot calls this server in real time to search and read PubMed articles.
What's in the box
Path | Purpose |
| MCP server exposing the read-only |
| Async client for the NCBI E-utilities API (with rate-limit handling) |
| Microsoft Entra ID bearer-token validation (ASGI middleware) |
| Environment-driven configuration |
| ASGI entrypoint (Uvicorn) |
| Container image |
|
|
| End-to-end MCP client test |
| Step-by-step tenant configuration + validation guide |
Related MCP server: PubMed MCP Server
Architecture
Microsoft 365 Copilot
│ (1) user prompt
▼
Copilot orchestrator ──(2) bearer token from Microsoft enterprise token store──┐
│ │
│ (3) MCP search / fetch over HTTPS │
▼ │
Azure Container Apps ──(4) validate Entra JWT (issuer, audience, client app)──┘
│
│ (5) NCBI E-utilities (esearch / esummary / efetch)
▼
PubMed (public)MCP tools
search(query, max_results)→{ "results": [ { id, title, url, snippet } ] }whereidis the PubMed PMID.fetch(id)→{ id, title, text, url, metadata }wheretextis the article abstract andmetadataincludes journal, authors, publication date, and DOI.
Both tools are read-only.
Quick start (local)
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
# Run without auth for local testing
$env:AUTH_REQUIRED = "false"
$env:NCBI_EMAIL = "you@example.com" # recommended by NCBI
python -m src.main
# In another terminal: end-to-end test
python scripts\smoke_test.pyThen point MCP Inspector at
http://localhost:8000/mcp (transport: Streamable HTTP) to explore the tools interactively:
npx @modelcontextprotocol/inspectorConfiguration
All configuration is via environment variables (see .env.example):
Variable | Required | Description |
| no (default | Enforce Entra bearer-token validation. |
| when auth on | Your Microsoft Entra tenant ID. |
| when auth on | Accepted token audience = the Application ID URI from the Teams Developer Portal SSO registration. Comma-separated list allowed. |
| no | Allowed calling client app IDs. Defaults to the Microsoft enterprise token store |
| no | NCBI API key for higher PubMed rate limits (10/sec vs 3/sec). |
| no | Contact email reported to NCBI (recommended). |
| no (default | Path of the MCP streamable-HTTP endpoint. |
| no (default | Hosts allowed by the MCP transport-security (DNS-rebinding) check. |
| no (default | Origins allowed by the DNS-rebinding check. |
| no (default | Listen port. |
Deploy to Azure
azd auth login
azd env new pubmed-connector
azd env set AUTH_REQUIRED false # first deploy: get the URL, then lock down
azd upFull deployment, Entra SSO setup, M365 admin center registration, and validation steps are in docs/tenant-setup-guide.md.
Security notes
The connector exposes only public PubMed data, but the transport is still authenticated: every
/mcprequest must carry a valid Entra token whose audience matches your Application ID URI and whose calling app is the Microsoft enterprise token store./healthis intentionally unauthenticated for container liveness probes.The server is read-only and performs no writes to any system.
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
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/madsd/m365-custom-connector'
If you have feedback or need assistance with the MCP directory API, please join our Discord server