MCP server for PubMed literature search with MeSH, PICO, and intelligent query expansion
Project description
PubMed Search MCP
Professional Literature Research Assistant for AI Agents - More than just an API wrapper
A Domain-Driven Design (DDD) based MCP server that serves as an intelligent research assistant for AI agents, providing task-oriented literature search and analysis capabilities.
โจ What's Included:
- ๐ง 34 MCP Tools - Streamlined PubMed, Europe PMC, CORE, and NCBI database access
- ๐ 22 Claude Skills - Ready-to-use workflow guides for AI agents (Claude Code-specific)
- ๐ Copilot Instructions - VS Code GitHub Copilot integration guide
๐ Language: English | ็น้ซไธญๆ
๐ Quick Install
Via uv
uv add pubmed-search-mcp
Via uvx (Zero Install)
uvx pubmed-search-mcp
โ๏ธ Configuration
This MCP server works with any MCP-compatible AI tool. Choose your preferred client:
VS Code / Cursor (.vscode/mcp.json)
{
"servers": {
"pubmed-search": {
"type": "stdio",
"command": "uvx",
"args": ["pubmed-search-mcp"],
"env": {
"NCBI_EMAIL": "your@email.com"
}
}
}
}
Cline (cline_mcp_settings.json)
{
"mcpServers": {
"pubmed-search": {
"command": "uvx",
"args": ["pubmed-search-mcp"],
"env": {
"NCBI_EMAIL": "your@email.com"
},
"alwaysAllow": [],
"disabled": false
}
}
}
Tip: In Cline, click "MCP Servers" โ "Configure" โ "Configure MCP Servers" to edit this file.
Antigravity / Other MCP Clients
Any MCP-compatible client can use this server via stdio transport:
# Command
uvx pubmed-search-mcp
Note:
NCBI_EMAILis required by NCBI API policy. Optionally setNCBI_API_KEYfor higher rate limits.
๐ฏ Design Philosophy
Core Positioning: The intelligent middleware between AI Agents and academic search engines.
Why This Server?
Other tools give you raw API access. We give you vocabulary translation + intelligent routing:
| Challenge | Our Solution |
|---|---|
| Agent uses ICD codes, PubMed needs MeSH | โ Auto ICDโMeSH conversion |
| Multiple databases, different APIs | โ Unified Search single entry point |
| Clinical questions need structured search | โ PICO parser with Boolean builder |
| Typos in medical terms | โ ESpell auto-correction |
| Too many results from one source | โ Parallel multi-source with dedup |
Key Differentiators
- Vocabulary Translation Layer - Agent speaks naturally, we translate to each database's terminology (MeSH, ICD-10, text-mined entities)
- Unified Search Gateway - One
unified_search()call, auto-dispatch to PubMed/Europe PMC/CORE/OpenAlex - PICO-Aware - Parse clinical questions into structured (P)opulation/(I)ntervention/(C)omparison/(O)utcome
- Agent-First Design - Output optimized for machine decision-making, not human reading
๐ก External APIs & Data Sources
This MCP server integrates with multiple academic databases and APIs:
Core Data Sources
| Source | Coverage | Vocabulary | Auto-Convert | Description |
|---|---|---|---|---|
| NCBI PubMed | 36M+ articles | MeSH | โ Native | Primary biomedical literature |
| NCBI Entrez | Multi-DB | MeSH | โ Native | Gene, PubChem, ClinVar |
| Europe PMC | 33M+ | Text-mined | โ Extraction | Full text XML access |
| CORE | 200M+ | None | โก๏ธ Free-text | Open access aggregator |
| Semantic Scholar | 200M+ | S2 Fields | โก๏ธ Free-text | AI-powered recommendations |
| OpenAlex | 250M+ | Concepts | โก๏ธ Free-text | Open scholarly metadata |
| NIH iCite | PubMed | N/A | N/A | Citation metrics (RCR) |
๐ Key: โ = Full vocabulary support | โก๏ธ = Query pass-through (no controlled vocabulary)
ICD Codes: Auto-detected and converted to MeSH before PubMed search
Environment Variables
# Required
NCBI_EMAIL=your@email.com # Required by NCBI policy
# Optional - For higher rate limits
NCBI_API_KEY=your_ncbi_api_key # Get from: https://www.ncbi.nlm.nih.gov/account/settings/
CORE_API_KEY=your_core_api_key # Get from: https://core.ac.uk/services/api
S2_API_KEY=your_s2_api_key # Get from: https://www.semanticscholar.org/product/api
# Optional - Network settings
HTTP_PROXY=http://proxy:8080 # HTTP proxy for API requests
HTTPS_PROXY=https://proxy:8080 # HTTPS proxy for API requests
๐ How It Works: The Middleware Architecture
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ AI AGENT โ
โ โ
โ "Find papers about I10 hypertension treatment in diabetic patients" โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๐ PUBMED SEARCH MCP (MIDDLEWARE) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ 1๏ธโฃ VOCABULARY TRANSLATION โโ
โ โ โข ICD-10 "I10" โ MeSH "Hypertension" โโ
โ โ โข "diabetic" โ MeSH "Diabetes Mellitus" โโ
โ โ โข ESpell: "hypertention" โ "hypertension" โโ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ 2๏ธโฃ INTELLIGENT ROUTING โโ
โ โ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โโ
โ โ โ PubMed โ โEurope PMCโ โ CORE โ โ OpenAlex โ โโ
โ โ โ 36M+ โ โ 33M+ โ โ 200M+ โ โ 250M+ โ โโ
โ โ โ (MeSH) โ โ(fulltext)โ โ (OA) โ โ(metadata)โ โโ
โ โ โโโโโโฌโโโโโโ โโโโโโฌโโโโโโ โโโโโโฌโโโโโโ โโโโโโฌโโโโโโ โโ
โ โ โโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโ โโ
โ โ โผ โโ
โ โ 3๏ธโฃ RESULT AGGREGATION: Dedupe + Rank + Enrich โโ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ UNIFIED RESULTS โ
โ โข 150 unique papers (deduplicated from 4 sources) โ
โ โข Ranked by relevance + citation impact (RCR) โ
โ โข Full text links enriched from Europe PMC โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ ๏ธ MCP Tools Overview
๐ Search Tools
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ SEARCH ENTRY POINTS โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ unified_search() โ ๐ RECOMMENDED: Auto-routing โ
โ โ โ
โ โโโ Quick search โ Direct multi-source query โ
โ โโโ PICO mode โ Clinical question decomposition โ
โ โโโ Systematic mode โ MeSH expansion + parallel search โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ SPECIALIZED SEARCH (when you need specific source) โ
โ โ
โ search_literature() โ PubMed only (MeSH support) โ
โ search_europe_pmc() โ Europe PMC (fulltext/OA filters) โ
โ search_core() โ CORE 200M+ open access โ
โ search_gene() โ NCBI Gene database โ
โ search_compound() โ PubChem compounds โ
โ search_clinvar() โ ClinVar variants โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ฌ Discovery Tools (After Finding Key Papers)
Found important paper (PMID)
โ
โโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ โ
โผ โผ โผ
โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ
โ BACKWARD โ โ SIMILAR โ โ FORWARD โ
โ โโโโโโโ โ โ โโโโโโ โ โ โโโโโโโถ โ
โ โ โ โ โ โ
โ get_article โ โfind_related โ โfind_citing โ
โ _references โ โ _articles โ โ _articles โ
โ โ โ โ โ โ
โ Foundation โ โ Similar โ โ Follow-up โ
โ papers โ โ topic โ โ research โ
โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ
build_citation_tree() โ Full network visualization (6 formats)
๐ Full Text & Export
| Category | Tools |
|---|---|
| Full Text | get_fulltext (Europe PMC), get_core_fulltext (CORE), get_fulltext_xml |
| Text Mining | get_text_mined_terms โ Extract genes, diseases, chemicals |
| Export | prepare_export โ RIS/BibTeX/CSV/MEDLINE/JSON |
| Metrics | get_citation_metrics โ iCite RCR, citation percentile |
๐ Agent Usage Examples
1๏ธโฃ Quick Search (Simplest)
# Agent just asks naturally - middleware handles everything
unified_search(query="remimazolam ICU sedation", limit=20)
# Or with clinical codes - auto-converted to MeSH
unified_search(query="I10 treatment in E11.9 patients")
# โ ICD-10 โ ICD-10
# Hypertension Type 2 Diabetes
2๏ธโฃ PICO Clinical Question
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ "Is remimazolam better than propofol for ICU sedation?" โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ parse_pico() โ
โ โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโ โ
โ โ P โ โ I โ โ C โ โ O โ โ
โ โ ICU โ โremimaz- โ โpropofol โ โsedation โ โ
โ โpatients โ โ olam โ โ โ โoutcomes โ โ
โ โโโโโโฌโโโโโ โโโโโโฌโโโโโ โโโโโโฌโโโโโ โโโโโโฌโโโโโ โ
โโโโโโโโโผโโโโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ โ โ
โผ โผ โผ โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ generate_search_queries() ร 4 (parallel) โ
โ โ
โ P โ "Intensive Care Units"[MeSH] โ
โ I โ "remimazolam" [Supplementary Concept], "CNS 7056" โ
โ C โ "Propofol"[MeSH], "Diprivan" โ
โ O โ "Conscious Sedation"[MeSH], "Deep Sedation"[MeSH] โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Agent combines with Boolean logic โ
โ โ
โ (P) AND (I) AND (C) AND (O) โ High precision โ
โ (P) AND (I OR C) AND (O) โ High recall โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ unified_search() ร N (parallel multi-source) โ
โ โ
โ PubMed โโโฌโโ Europe PMC โโโฌโโ CORE โโโบ merge_search_results() โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# Step 1: Parse clinical question
parse_pico("Is remimazolam better than propofol for ICU sedation?")
# Returns: P=ICU patients, I=remimazolam, C=propofol, O=sedation outcomes
# Step 2: Get MeSH for each element (parallel!)
generate_search_queries(topic="ICU patients") # P
generate_search_queries(topic="remimazolam") # I
generate_search_queries(topic="propofol") # C
generate_search_queries(topic="sedation") # O
# Step 3: Agent combines with Boolean
query = '("Intensive Care Units"[MeSH]) AND (remimazolam OR "CNS 7056") AND propofol AND sedation'
# Step 4: Search and merge
unified_search(query=query, sources=["pubmed", "europe_pmc", "core"])
3๏ธโฃ Explore from Key Paper
# Found landmark paper PMID: 33475315
find_related_articles(pmid="33475315") # Similar methodology
find_citing_articles(pmid="33475315") # Who built on this?
get_article_references(pmid="33475315") # What's the foundation?
# Build complete research map
build_citation_tree(pmid="33475315", depth=2, output_format="mermaid")
4๏ธโฃ Gene/Drug Research
# Research a gene
search_gene(query="BRCA1", organism="human")
get_gene_literature(gene_id="672", limit=20)
# Research a drug compound
search_compound(query="propofol")
get_compound_literature(cid="4943", limit=20)
5๏ธโฃ Export Results
# Export last search results
prepare_export(pmids="last", format="ris") # โ EndNote/Zotero
prepare_export(pmids="last", format="bibtex") # โ LaTeX
# Check open access availability
analyze_fulltext_access(pmids="last")
๐ Search Mode Comparison
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ SEARCH MODE DECISION TREE โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ "What kind of search do I need?" โ
โ โ โ
โ โโโ Know exactly what to search? โ
โ โ โโโ unified_search(query="topic keywords") โ
โ โ โ Quick, auto-routing to best sources โ
โ โ โ
โ โโโ Have a clinical question (A vs B)? โ
โ โ โโโ parse_pico() โ unified_search(mode="pico") โ
โ โ โ Structured P/I/C/O search with Boolean โ
โ โ โ
โ โโโ Need comprehensive systematic coverage? โ
โ โ โโโ generate_search_queries() โ parallel search โ
โ โ โ MeSH expansion, multiple strategies, merge โ
โ โ โ
โ โโโ Exploring from a key paper? โ
โ โโโ find_related/citing/references โ build_citation_tree โ
โ โ Citation network, research context โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
| Mode | Entry Point | Best For | Auto-Features |
|---|---|---|---|
| Quick | unified_search() |
Fast topic search | ICDโMeSH, multi-source, dedup |
| PICO | parse_pico() |
Clinical questions | P/I/C/O decomposition, Boolean |
| Systematic | generate_search_queries() |
Literature reviews | MeSH expansion, synonyms |
| Exploration | find_*_articles() |
From key paper | Citation network, related |
๐ค Claude Skills (AI Agent Workflows)
Pre-built workflow guides in .claude/skills/:
| Skill | Description |
|---|---|
pubmed-quick-search |
Basic search with filters |
pubmed-systematic-search |
MeSH expansion, comprehensive |
pubmed-pico-search |
Clinical question decomposition |
pubmed-paper-exploration |
Citation tree, related articles |
pubmed-gene-drug-research |
Gene/PubChem/ClinVar |
pubmed-fulltext-access |
Europe PMC, CORE full text |
pubmed-export-citations |
RIS/BibTeX/CSV export |
๐ Location:
.claude/skills/*/SKILL.md(Claude Code-specific)
๐๏ธ Architecture (DDD)
This project uses Domain-Driven Design (DDD) architecture, with literature research domain knowledge as the core model.
src/pubmed_search/
โโโ domain/ # Core business logic
โ โโโ entities/article.py # UnifiedArticle, Author, etc.
โโโ application/ # Use cases
โ โโโ search/ # QueryAnalyzer, ResultAggregator
โ โโโ export/ # Citation export (RIS, BibTeX...)
โ โโโ session/ # SessionManager
โโโ infrastructure/ # External systems
โ โโโ ncbi/ # Entrez, iCite, Citation Exporter
โ โโโ sources/ # Europe PMC, CORE, CrossRef...
โ โโโ http/ # HTTP clients
โโโ presentation/ # User interfaces
โ โโโ mcp_server/ # MCP tools, prompts, resources
โ โ โโโ tools/ # discovery, strategy, pico, export...
โ โโโ api/ # REST API (Copilot Studio)
โโโ shared/ # Cross-cutting concerns
โโโ exceptions.py # Unified error handling
โโโ async_utils.py # Rate limiter, retry, circuit breaker
Internal Mechanisms (Transparent to Agent)
| Mechanism | Description |
|---|---|
| Session | Auto-create, auto-switch |
| Cache | Auto-cache search results, avoid duplicate API calls |
| Rate Limit | Auto-comply with NCBI API limits (0.34s/0.1s) |
| MeSH Lookup | generate_search_queries() auto-queries NCBI MeSH database |
| ESpell | Auto spelling correction (remifentanyl โ remifentanil) |
| Query Analysis | Each suggested query shows how PubMed actually interprets it |
Vocabulary Translation Layer (Key Feature)
Our Core Value: We are the intelligent middleware between Agent and Search Engines, automatically handling vocabulary standardization so Agent doesn't need to know each database's terminology.
Different data sources use different controlled vocabulary systems. This server provides automatic conversion:
| API / Database | Vocabulary System | Auto-Conversion |
|---|---|---|
| PubMed / NCBI | MeSH (Medical Subject Headings) | โ
Full support via expand_with_mesh() |
| ICD Codes | ICD-10-CM / ICD-9-CM | โ Auto-detect & convert to MeSH |
| Europe PMC | Text-mined entities (Gene, Disease, Chemical) | โ
get_text_mined_terms() extraction |
| OpenAlex | OpenAlex Concepts (deprecated) | โ Free-text only |
| Semantic Scholar | S2 Field of Study | โ Free-text only |
| CORE | None | โ Free-text only |
| CrossRef | None | โ Free-text only |
Automatic ICD โ MeSH Conversion
When searching with ICD codes (e.g., I10 for Hypertension), unified_search() automatically:
- Detects ICD-10/ICD-9 patterns via
detect_and_expand_icd_codes() - Looks up corresponding MeSH terms from internal mapping (
ICD10_TO_MESH,ICD9_TO_MESH) - Expands query with MeSH synonyms for comprehensive search
# Agent calls unified_search with clinical terminology
unified_search(query="I10 treatment outcomes")
# Server auto-expands to PubMed-compatible query
"(I10 OR Hypertension[MeSH]) treatment outcomes"
๐ Full architecture documentation: ARCHITECTURE.md
MeSH Auto-Expansion + Query Analysis
When calling generate_search_queries("remimazolam sedation"), internally it:
- ESpell Correction - Fix spelling errors
- MeSH Query -
Entrez.esearch(db="mesh")to get standard vocabulary - Synonym Extraction - Get synonyms from MeSH Entry Terms
- Query Analysis - Analyze how PubMed interprets each query
{
"mesh_terms": [
{
"input": "remimazolam",
"preferred": "remimazolam [Supplementary Concept]",
"synonyms": ["CNS 7056", "ONO 2745"]
}
],
"all_synonyms": ["CNS 7056", "ONO 2745", ...],
"suggested_queries": [
{
"id": "q1_title",
"query": "(remimazolam sedation)[Title]",
"purpose": "Exact title match - highest precision",
"estimated_count": 8,
"pubmed_translation": "\"remimazolam sedation\"[Title]"
},
{
"id": "q3_and",
"query": "(remimazolam AND sedation)",
"purpose": "All keywords required",
"estimated_count": 561,
"pubmed_translation": "(\"remimazolam\"[Supplementary Concept] OR \"remimazolam\"[All Fields]) AND (\"sedate\"[All Fields] OR ...)"
}
]
}
Value of Query Analysis: Agent thinks
remimazolam AND sedationonly searches these two words, but PubMed actually expands to Supplementary Concept + synonyms, results go from 8 to 561. This helps Agent understand the difference between intent and actual search.
๐ HTTPS Deployment
Enable HTTPS secure communication for production environments.
Quick Start
# Step 1: Generate SSL certificates
./scripts/generate-ssl-certs.sh
# Step 2: Start HTTPS service (Docker)
./scripts/start-https-docker.sh up
# Verify deployment
curl -k https://localhost/
HTTPS Endpoints
| Service | URL | Description |
|---|---|---|
| MCP SSE | https://localhost/sse |
SSE connection (MCP) |
| Messages | https://localhost/messages |
MCP POST |
| Health | https://localhost/health |
Health check |
Claude Desktop Configuration
{
"mcpServers": {
"pubmed-search": {
"url": "https://localhost/sse"
}
}
}
๐ข Microsoft Copilot Studio Integration
Integrate PubMed Search MCP with Microsoft 365 Copilot (Word, Teams, Outlook)!
Quick Start
# Start with Streamable HTTP transport (required by Copilot Studio)
python run_server.py --transport streamable-http --port 8765
# Or use the dedicated script with ngrok
./scripts/start-copilot-studio.sh --with-ngrok
Copilot Studio Configuration
| Field | Value |
|---|---|
| Server name | PubMed Search |
| Server URL | https://your-server.com/mcp |
| Authentication | None (or API Key) |
๐ Full documentation: copilot-studio/README.md
โ ๏ธ Note: SSE transport deprecated since Aug 2025. Use
streamable-http.
๐ More documentation:
- Architecture โ ARCHITECTURE.md
- Deployment guide โ DEPLOYMENT.md
- Copilot Studio โ copilot-studio/README.md
๐ Security
Security Features
| Layer | Feature | Description |
|---|---|---|
| HTTPS | TLS 1.2/1.3 encryption | All traffic encrypted via Nginx |
| Rate Limiting | 30 req/s | Nginx level protection |
| Security Headers | XSS/CSRF protection | X-Frame-Options, X-Content-Type-Options |
| SSE Optimization | 24h timeout | Long-lived connections for real-time |
| No Database | Stateless | No SQL injection risk |
| No Secrets | In-memory only | No credentials stored |
See [DEPLOYMENT.md](DEPLOYMENT.md) for detailed deployment instructions.
---
## ๐ค Export Formats
Export your search results in formats compatible with major reference managers:
| Format | Compatible With | Use Case |
|--------|-----------------|----------|
| **RIS** | EndNote, Zotero, Mendeley | Universal import |
| **BibTeX** | LaTeX, Overleaf, JabRef | Academic writing |
| **CSV** | Excel, Google Sheets | Data analysis |
| **MEDLINE** | PubMed native format | Archiving |
| **JSON** | Programmatic access | Custom processing |
### Exported Fields
- **Core**: PMID, Title, Authors, Journal, Year, Volume, Issue, Pages
- **Identifiers**: DOI, PMC ID, ISSN
- **Content**: Abstract (HTML tags cleaned)
- **Metadata**: Language, Publication Type, Keywords
- **Access**: DOI URL, PMC URL, Full-text availability
### Special Character Handling
- BibTeX exports use **pylatexenc** for proper LaTeX encoding
- Nordic characters (รธ, รฆ, รฅ), umlauts (รผ, รถ, รค), and accents are correctly converted
- Example: `Sรธren Hansen` โ `S{\o}ren Hansen`
---
## ๐ License
Apache License 2.0 - see [LICENSE](LICENSE)
---
## ๏ฟฝ๐ Links
- [GitHub Repository](https://github.com/u9401066/pubmed-search-mcp)
- [PyPI Package](https://pypi.org/project/pubmed-search/)
- [NCBI Entrez Programming Utilities](https://www.ncbi.nlm.nih.gov/books/NBK25497/)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pubmed_search_mcp-0.2.7.tar.gz.
File metadata
- Download URL: pubmed_search_mcp-0.2.7.tar.gz
- Upload date:
- Size: 215.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c700496eb4d3a6e691edbc8090d338739358b1c47984540dd49f29dc6378f702
|
|
| MD5 |
8aa36d05b60b282357839426bd65d4fa
|
|
| BLAKE2b-256 |
98fbe3cf9d91d4e4808c0e5a923a7b4fa84c24e9790765a58836b2f03a280e28
|
Provenance
The following attestation bundles were made for pubmed_search_mcp-0.2.7.tar.gz:
Publisher:
publish.yml on u9401066/pubmed-search-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pubmed_search_mcp-0.2.7.tar.gz -
Subject digest:
c700496eb4d3a6e691edbc8090d338739358b1c47984540dd49f29dc6378f702 - Sigstore transparency entry: 867143737
- Sigstore integration time:
-
Permalink:
u9401066/pubmed-search-mcp@8d2f249d3ae7aa6f3ef2278cd9635ba90a513a2d -
Branch / Tag:
refs/tags/v0.2.7 - Owner: https://github.com/u9401066
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8d2f249d3ae7aa6f3ef2278cd9635ba90a513a2d -
Trigger Event:
push
-
Statement type:
File details
Details for the file pubmed_search_mcp-0.2.7-py3-none-any.whl.
File metadata
- Download URL: pubmed_search_mcp-0.2.7-py3-none-any.whl
- Upload date:
- Size: 251.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f6a8bab49f5df0ef424179332d82d2e961d0abdc5ab23e799afae4adcf9266d2
|
|
| MD5 |
9407266c39e5bdc00c4a4c958fd0bc96
|
|
| BLAKE2b-256 |
6e7a4a18503a6fa414b0fbc1c2277ecdb223d5fd1d6d56d7e7d9ce5f8b00c58d
|
Provenance
The following attestation bundles were made for pubmed_search_mcp-0.2.7-py3-none-any.whl:
Publisher:
publish.yml on u9401066/pubmed-search-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pubmed_search_mcp-0.2.7-py3-none-any.whl -
Subject digest:
f6a8bab49f5df0ef424179332d82d2e961d0abdc5ab23e799afae4adcf9266d2 - Sigstore transparency entry: 867143767
- Sigstore integration time:
-
Permalink:
u9401066/pubmed-search-mcp@8d2f249d3ae7aa6f3ef2278cd9635ba90a513a2d -
Branch / Tag:
refs/tags/v0.2.7 - Owner: https://github.com/u9401066
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8d2f249d3ae7aa6f3ef2278cd9635ba90a513a2d -
Trigger Event:
push
-
Statement type: