{"id":"18258fbb-04e5-443e-9c59-8884ebae9329","slug":"medcp","kind":"mcp","name":"MedCP","summary":"An MCP server that integrates electronic health record databases and a large-scale heterogeneous knowledge graph for rapid clinical record query and fast biomedical knowledge inference.","owner":"BaranziniLab","repoUrl":"https://github.com/BaranziniLab/MedCP","license":"MIT","licenseTier":"permissive","trust":"community","stars":4,"match":null,"fewStars":true,"format":"mcp","createdAt":"2025-08-09T01:04:41.000Z","addedAt":"2026-10-21T15:42:06.627Z","logoUrl":"https://avatars.githubusercontent.com/u/84099967?v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["memory-knowledge","cloud-infra"],"tags":[],"runtime":"binary","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-26T19:36:40.765Z","sample":false,"url":"https://conduits.dev/tools/medcp","language":"Python","transports":["stdio"],"install":{},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"# MedCP: Medical Model Context Protocol <img src=\"assets/logo.png\" align=\"right\" alt=\"MedCP Logo\" width=\"100\"/>\n\n<br>\n\n**Website:** [baranzinilab.github.io/MedCP](https://baranzinilab.github.io/MedCP/) · [Documentation](https://baranzinilab.github.io/MedCP/docs/)\n\n**Contents:** [Overview](#overview) · [MCP compatibility](#mcp-compatibility) · [Integrations](#integrations) · [Installation](#installation) · [Configuration](#configuration) · [Usage](#usage-examples) · [Testing](#testing) · [Release build](#release-build) · [Troubleshooting](#troubleshooting) · [Legal](#data-privacy-and-legal-disclaimer)\n\n## Overview\n\n**MedCP** gives an AI agent read-only tools for electronic health records and\nbiomedical knowledge graphs. The MCP server runs on your machine; database\nqueries execute against the local file or remote database endpoints you\nconfigure, and tool results are returned to the host agent. One shared core is\npackaged for **Claude Code**, **Codex CLI**, **BioRouter**, and **Claude\nDesktop**. **BioRouter is the canonical orchestration harness for agent-driven\nanalyses and benchmark runs.** Results produced with retired harnesses are\nhistorical and should be rerun through BioRouter before they are treated as\ncurrent benchmark evidence.\n\n![MedCP architecture schematic](assets/schematics.png)\n\n### Key Features\n\n- **Local MCP server** - The tool process runs on your machine over stdio\n- **EHR Integration** - Query electronic health records with natural language\n- **Pluggable SQL backend** - Point MedCP at **SQL Server**, **MySQL/MariaDB**, or a **local SQLite** file\n- **Runs in your agent** - One shared core, packaged for **Claude Code**, **Codex CLI**, **BioRouter**, and **Claude Desktop**\n- **Biomedical Knowledge** - Access comprehensive drug-disease associations and protein interactions\n- **Real-time Analysis** - Instant clinical decision support\n- **Read-only guards** - SQLite is opened read-only, and SQL/Cypher mutation statements are rejected\n\n## MCP compatibility\n\nMedCP v0.10.0 uses the official Python SDK `mcp==2.0.0` and implements the\n[MCP 2026-07-28 revision](https://blog.modelcontextprotocol.io/posts/2026-07-28/).\nThe release supports:\n\n- sessionless modern requests with `server/discover`;\n- required modern request metadata and protocol-version validation;\n- `resultType` on complete modern results;\n- private five-minute cache hints on `server/discover` and `tools/list`;\n- snake-case tool annotations from the 2026 schema; and\n- the SDK's legacy initialization path for current hosts that still negotiate an\n  older MCP revision.\n\nThe production entry point is deliberately **stdio-only**. HTTP deployment of\nclinical-data tools requires a separate authentication, origin-validation, and\ndata-governance review. Optional 2026 capabilities such as tasks, elicitation,\nand extension-specific transports are not advertised.\n\nCurrent Codex and BioRouter releases may still use legacy `initialize` /\n`notifications/initialized`. Their host smoke tests therefore prove backward\ninteroperability; the modern sessionless path is covered separately by raw-wire\ntests that exercise `server/discover`, discovery metadata, caching fields, tool\ncalls, error codes, and stdout purity.\n\n### What changed in v0.10.0\n\n- Replaced the FastMCP compatibility layer with the official `MCPServer` API\n  from `mcp==2.0.0`.\n- Converted tool returns to typed `CallToolResult` / `TextContent` responses and\n  updated annotations to the 2026 snake-case schema.\n- Added modern discovery and caching metadata while retaining the SDK's\n  legacy-client path for currently released hosts.\n- Kept the deployable server stdio-only and removed dormant network-listener\n  arguments.\n- Added modern/legacy raw-wire tests, cross-platform CI, namespace validation,\n  version-consistency gates, a locked embedded runtime, reproducible MCPB\n  packaging, and full-patch release directories.\n- Added backend-specific MySQL and SQL Server benchmark variables so both AWS\n  fixtures can be validated in the same run.\n- Hardened clinical SQL validation against comments, stacked statements, and\n  read-prefixed write forms; MySQL calls also run in an explicit read-only\n  transaction and every remote connection is rolled back before close.\n- Changed AWS fixture provisioning to retain the RDS administrator only for\n  setup and load, create a dedicated SELECT-only reader for MedCP, and verify\n  effective reader permissions in the live backend gate.\n\n### Integrations\n\nThe MedCP server is exposed to several AI coding agents through thin, cleanly\nseparated layers in [`integrations/`](integrations/README.md) — all launching the\nsame shared core in [`src/medcp/`](src/medcp):\n\n| Agent | Integration | Prebuilt artifact |\n| --- | --- | --- |\n| **Claude Code** | [`integrations/claude-code`](integrations/claude-code) (plugin) | `medcp-claude-code-plugin.zip` |\n| **Codex CLI** | [`integrations/codex`](integrations/codex) (MCP server) | `medcp-codex.zip` |\n| **BioRouter** | [`integrations/biorouter`](integrations/biorouter) (`.brxt` extension) | `MedCP.brxt` |\n| **Claude Desktop** | root [`manifest.json`](manifest.json) (`.mcpb`) | `MedCP.mcpb` |\n\nBuilt artifacts and install steps live in the\n[current release directory](releases/MedCP%20v0.10.0). The\n[`releases/`](releases) index explains the current-tree retention policy.\nRebuild the Claude Code, Codex, BioRouter, and Claude Desktop artifacts with\n`python3 scripts/build_releases.py`.\n\n## Prerequisites\n\nRequirements depend on how you run MedCP.\n\n### For the Claude Desktop extension\n\n- **Claude Desktop** 1.0.0+ with MCPB extension support\n- **Operating system**: macOS on Apple silicon for the bundled v0.10.0 runtime\n- **Python**: included (standalone runtime bundled with the extension)\n- **Memory**: 8 GB RAM minimum, 16 GB recommended\n\nPython and all dependencies ship inside the extension. Windows, Linux, and\nIntel-macOS MCPB artifacts require separately built native runtimes; the v0.10.0\nbundle does not claim compatibility with those platforms.\n\n### For uvx and the agent integrations\n\n- **[uv](https://docs.astral.sh/uv/)** — provides `uvx`/`uv`, used to launch the shared core for [Option 2](#option-2-run-with-uvx-universal) and for the Claude Code, Codex CLI, and BioRouter [integrations](#integrations).\n\n## Installation\n\n### Option 1: Quick Install (Claude Desktop Extension)\n\n1. **Download the Extension**\n   - Go to the [current release directory](releases/MedCP%20v0.10.0)\n   - Download the latest `MedCP.mcpb` file\n\n2. **Install in Claude Desktop**\n   - Double-click the `MedCP.mcpb` file\n   - Claude Desktop will open the installation dialog\n   - Click **\"Install\"**\n\n3. **Configure MedCP**\n   - Complete the configuration wizard that appears\n   - Leave all database fields blank for the bundled read-only SPOKE graph, or\n     configure one EHR backend as described below\n\nThat's it!\n\n### Option 2: Run with uvx (Universal)\n\nRun MedCP from the pinned release using `uvx`. No configuration is required for\nknowledge-graph-only use because the bundled read-only SPOKE connection is the\ndefault.\n\n```bash\n# Knowledge graph only: no environment variables needed\nuvx --from git+https://github.com/BaranziniLab/MedCP@v0.10.0 medcp\n```\n\nTo add a local SQLite EHR:\n\n```bash\nexport CLINICAL_RECORDS_BACKEND=sqlite\nexport CLINICAL_RECORDS_SQLITE_PATH=/absolute/path/to/database.sqlite\nuvx --from git+https://github.com/BaranziniLab/MedCP@v0.10.0 medcp\n```\n\nFor MySQL or SQL Server, set `CLINICAL_RECORDS_BACKEND` to `mysql` or\n`mssql`, then provide the server, database, username, password, and optional\nport variables from the [configuration table](#electronic-health-records-optional).\n\nTool names are prefixed with `MEDCP_NAMESPACE` (default `MedCP`).\n\n- If only Knowledge Graph is configured, you'll have access to:\n  - `MedCP-get_knowledge_graph_schema` - List all biomedical entities and relationships\n  - `MedCP-query_knowledge_graph` - Query drug-disease associations, protein interactions, etc.\n\n- If only Clinical Records is configured, you'll have access to:\n  - `MedCP-list_clinical_tables` - List available EHR tables\n  - `MedCP-query_clinical_records` - Query patient records with SQL\n\n- If both are configured, you'll have access to all tools for integrated analysis\n\nOr run the exact locked environment from a local clone:\n\n```bash\ngit clone https://github.com/BaranziniLab/MedCP.git\ncd MedCP\nuv sync --locked\nuv run --locked medcp\n```\n\n\n## Configuration\n\nAfter installation, you'll need to configure your database connections in Claude Desktop:\n\n**Settings → Extensions → MedCP**\n\n### Biomedical Knowledge Graph (optional)\n\n**MedCP connects to the SPOKE knowledge graph by default — no credentials\nrequired.** SPOKE ([Morris et al., 2023](https://academic.oup.com/bioinformatics/article/39/2/btad080/7033465))\ncontains comprehensive biomedical relationships including drug-disease\nassociations, protein interactions, and biological pathways, and its read-only\nproduction connection ships built in. Leave every `KNOWLEDGE_GRAPH_*` variable\nunset to use it.\n\nTo use **your own** Neo4j / compatible knowledge graph instead, set the following\n(these credentials are for *your* graph, not SPOKE). To turn the knowledge graph\noff entirely, set `MEDCP_DISABLE_KNOWLEDGE_GRAPH=1`.\n\n| Parameter | Description | Example |\n|-----------|-------------|---------|\n| **`KNOWLEDGE_GRAPH_URI`** | Your Neo4j connection URI | `bolt://your-neo4j-server:7687` |\n| **`KNOWLEDGE_GRAPH_USERNAME`** | Your Neo4j username | `neo4j` |\n| **`KNOWLEDGE_GRAPH_PASSWORD`** | Your Neo4j password | `your_secure_password` |\n| **`KNOWLEDGE_GRAPH_DATABASE`** | Your Neo4j database name | `neo4j` |\n\n### Electronic Health Records (optional)\n\nConfiguring an EHR database is **optional** — omit every `CLINICAL_RECORDS_*`\nvariable and MedCP runs as a SPOKE-only knowledge-graph tool. To connect clinical\nrecords, MedCP supports three SQL backends, selected with\n**`CLINICAL_RECORDS_BACKEND`**. Fill in only the settings for the backend you\nchoose (the credentials below are for *your* database). For UCSF users, see the\n[UCSF Research Data](https://data.ucsf.edu/research/ucsf-data) portal for access\ninformation.\n\n**`mssql` (SQL Server, default) / `mysql` (MySQL / MariaDB):**\n\n| Parameter | Description | Example |\n|-----------|-------------|---------|\n| **`CLINICAL_RECORDS_BACKEND`** | `mssql` or `mysql` | `mssql` |\n| **`CLINICAL_RECORDS_SERVER`** | Database hostname | `your-ehr-server.hospital.org` |\n| **`CLINICAL_RECORDS_DATABASE`** | Clinical database name | `OMOP_DEID` |\n| **`CLINICAL_RECORDS_USERNAME`** | Database username | `clinical_user` |\n| **`CLINICAL_RECORDS_PASSWORD`** | Database password | `secure_clinical_password` |\n| **`CLINICAL_RECORDS_PORT`** | TCP port (optional) | `1433` / `3306` |\n\n**`sqlite` (local file):**\n\n| Parameter | Description | Example |\n|-----------|-------------|---------|\n| **`CLINICAL_RECORDS_BACKEND`** | `sqlite` | `sqlite` |\n| **`CLINICAL_RECORDS_SQLITE_PATH`** | Absolute path to the `.sqlite` file | `/data/omop.sqlite` |\n\nThe SQLite backend opens the file **read-only** and needs no server or\ncredentials — ideal for local testing (e.g. the OMOP dataset in\n[`benchmarks/sham-dataset`](benchmarks/sham-dataset)).\n\n### Optional Settings\n\n| Parameter | Description | Default |\n|-----------|-------------|---------|\n| **`MEDCP_DISABLE_KNOWLEDGE_GRAPH`** | Set to `1` for EHR-only mode | `0` |\n| **`MEDCP_NAMESPACE`** | Tool-name prefix | `MedCP` |\n| **`MEDCP_LOG_LEVEL`** | `DEBUG`, `INFO`, `WARNING`, or `ERROR` | `INFO` |\n\n### Credential handling\n\nCredential storage is controlled by the host, not by the MedCP server:\n\n- Claude Desktop stores manifest fields marked sensitive using its protected\n  configuration mechanism.\n- BioRouter can store values supplied with its secret-setting flow in its\n  configured keyring.\n- Codex, Claude Code, and direct shell launches pass configuration through the\n  process environment or host configuration. A `.env` file or TOML entry is\n  plaintext at rest unless you protect it separately.\n\nNever commit credentials, paste them into agent prompts, or include literal\npasswords in reusable shell commands. Restrict any local environment file to\nits owner (for example, `chmod 600 file`) and use institution-approved,\nleast-privilege, read-only database accounts.\n\n## Usage Examples\n\n### Query Patient Records\n```text\n\"Find all patients diagnosed with diabetes in the last 6 months and summarize their HbA1c trends\"\n```\n\n### Drug Interaction Analysis\n```text\n\"Check for interactions between metformin, lisinopril, and atorvastatin for a 65-year-old patient with CKD stage 3\"\n```\n\n### Clinical Guidelines\n```text\n\"What are the current evidence-based guidelines for treating community-acquired pneumonia in elderly patients?\"\n```\n\n### Biomedical Research\n```text\n\"Find protein targets associated with Alzheimer's disease and identify potential drug compounds that interact with these proteins\"\n```\n\n## Testing\n\nThe network-free protocol and SQLite suite covers modern and legacy MCP modes,\ntool discovery metadata, cache hints, version errors, namespace validation,\nread-only enforcement, real stdio framing, and stdout purity:\n\n```bash\nuv sync --locked\nuv run --locked pytest tests\n```\n\nA synthetic OMOP dataset and the live backend harness live in\n[`benchmarks/sham-dataset`](benchmarks/sham-dataset); they contain no real\npatient data. SQLite needs no setup:\n\n```bash\nuv run --locked python benchmarks/sham-dataset/test_backends.py\n```\n\nThe live harness expects 32 tables and 100 people, verifies that the MedCP\nvalidator rejects a forbidden statement, checks that hosted identities have\nSELECT but no write-capable database grants, and queries the default SPOKE\ngraph. It discovers hosted backends from backend-specific variables:\n\n| Backend | Variables |\n| --- | --- |\n| MySQL | `MYSQL_HOST`, `MYSQL_PORT`, `MYSQL_USER`, `MYSQL_PASSWORD`, `MYSQL_DATABASE` |\n| SQL Server | `MSSQL_HOST`, `MSSQL_PORT`, `MSSQL_USER`, `MSSQL_PASSWORD`, `MSSQL_DATABASE` |\n\nBackend-specific names take precedence over the deprecated shared `DB_*`\nfallbacks, so both hosted databases can be tested in one process:\n\n```bash\nsource benchmarks/sham-dataset/mysql/.dbenv\nsource benchmarks/sham-dataset/mssql/.dbenv\nuv run --locked python benchmarks/sham-dataset/test_backends.py\n```\n\nThe `mysql/` and `mssql/` directories include provisioning and teardown scripts\nfor disposable AWS RDS fixtures. Provisioning loads data with the administrator,\nthen creates a dedicated SELECT-only `medcpreader`. The git-ignored, mode-0600\n`.dbenv` contains only that reader's **plaintext** benchmark credential, never\nthe administrator password. Use short-lived test credentials, do not reuse\nproduction secrets, and delete fixtures you created when validation is\ncomplete:\n\n```bash\ncd benchmarks/sham-dataset/mysql\nread -rsp 'Temporary RDS admin password: ' DB_ADMIN_PASSWORD\nexport DB_ADMIN_PASSWORD\n./provision.sh\nunset DB_ADMIN_PASSWORD\nsource ./.dbenv\nuv run --directory ../../.. --locked python benchmarks/sham-dataset/test_backends.py\n./teardown.sh\n```\n\nDo not run a teardown script against a shared or pre-existing database. See the\n[benchmark README](benchmarks/sham-dataset/README.md) for the full AWS workflow.\n\n### Host MCP smoke tests\n\nUse a temporary registration name and namespace so validation does not replace\nan existing MedCP integration. Pass `CLINICAL_RECORDS_*`,\n`KNOWLEDGE_GRAPH_*`, and `MEDCP_NAMESPACE` explicitly through the host's MCP\nconfiguration or a mode-0700 launcher; do not assume the host forwards its\nparent shell environment.\n\nFor Codex, create the `medcp-next` checkout registration described in\n[`integrations/codex`](integrations/codex), then run an ephemeral, read-only\nturn:\n\n```bash\ncodex exec --ephemeral --json -C /absolute/path/to/MedCP -s read-only \\\n  'Use only medcp-next. List clinical tables, run SELECT COUNT(*) AS n FROM person, and query MATCH (d:Disease) RETURN count(d) AS n with empty parameters. Return exact tool names and raw outputs.'\n```\n\nFor BioRouter, follow the isolated-workflow canary in\n[`integrations/biorouter`](integrations/biorouter). BioRouter 1.88.6 can\notherwise route an ephemeral `medcp`-prefixed tool to an already enabled\n`medcp` extension even when the MCP namespaces differ.\n\nFor AWS MySQL or SQL Server, map the corresponding backend-specific values from\nthe protected `.dbenv` into `CLINICAL_RECORDS_*` before starting the host. Do\nnot put literal passwords in the command line or prompt.\n\n### Verified release matrix\n\nThe v0.10.0 release candidate was verified on 2026-07-29 with synthetic OMOP\ndata and aggregate read-only queries:\n\n| Client path | SQLite EHR | AWS MySQL EHR | AWS SQL Server EHR | SPOKE knowledge graph |\n| --- | --- | --- | --- | --- |\n| Direct MCP harness | 32 tables; 100 people; file and validator read-only | 32 tables; 100 people; validator and SELECT-only grants verified | 32 tables; 100 people; validator and SELECT-only grants verified | 117 schema entities; 12,275 Disease nodes |\n| Codex CLI 0.145.0 | 32 tables; 100 people | 32 tables; 100 people via SELECT-only reader | 32 tables; 100 people via SELECT-only reader | 12,275 Disease nodes |\n| BioRouter 1.88.6 | 32 tables; 100 people | 32 tables; 100 people via SELECT-only reader | 32 tables; 100 people via SELECT-only reader | 12,275 Disease nodes |\n\nCodex called `MedCPNext-list_clinical_tables`,\n`MedCPNext-query_clinical_records`, and\n`MedCPNext-query_knowledge_graph`. BioRouter called the same MCP tools through\nits `medcp__MedCPNext-*` host prefix. Both released hosts negotiated the legacy\nMCP initialization fallback; raw-stdio tests separately verified the modern\n2026-07-28 `server/discover` path.\n\nAfter the final release build, both hosts repeated the EHR and knowledge-graph\nqueries by launching the exact source and lock extracted from the generated\n`MedCP.brxt`, rather than an older installed extension.\n\nThe existing `medcp-mysql` and `medcp-mssql` fixtures were confirmed\n`available` in AWS `us-west-2`, migrated from administrator-bearing test\nconfiguration to generated SELECT-only readers, and reused for this validation.\nThey were not created or torn down by the release test.\n\n## Release build\n\nThe release builder verifies every version-bearing manifest, regenerates the\nstandalone server mirror, resolves BioRouter's lock, synchronizes the MCPB\nruntime from the root production lock, validates and inspects the MCPB, writes\nthe install guide, and hashes every artifact:\n\n```bash\npython3 scripts/build_releases.py\n```\n\nArtifacts are written to `releases/MedCP v0.10.0/`. The MCPB build requires\n`uv`, `mcpb`, and macOS on Apple silicon. Targeted rebuilds are available with\n`--only biorouter`, `--only claude-code`, `--only codex`, or `--only mcpb`;\nchecksums for existing artifacts are preserved during a targeted rebuild.\n\nBefore publishing a release, run:\n\n```bash\nuv run --locked pytest tests\nmcpb validate manifest.json\nmcpb info 'releases/MedCP v0.10.0/MedCP.mcpb'\n```\n\nThe repository CI repeats the network-free test suite on Python 3.11, 3.12, and\n3.13 across Linux, macOS, and Windows.\n\n## Troubleshooting\n\n### Extension Not Loading\n1. Verify Claude Desktop supports MCPB extensions\n2. Check that all required configuration fields are completed\n3. Restart Claude Desktop after configuration changes\n\n### Database Connection Issues\n1. Verify server URLs are accessible from your network\n2. Check that credentials are valid and not expired\n3. Ensure firewall allows database connections\n4. Test connectivity outside Claude Desktop if possible\n\n### Performance Issues\n1. Limit query result sizes for large datasets\n2. Use specific date ranges in clinical queries\n3. Check available system memory\n\n### Need Help?\n- **Documentation**: Check the configuration examples above\n- **Bug Reports**: [Create an issue](../../issues)\n- **Security Issues**: Contact the development team privately\n\n## Data Privacy and Legal Disclaimer\n\n**IMPORTANT NOTICE — DATA PRIVACY, COMPLIANCE, AND LIMITATION OF LIABILITY**\n\nMedCP is a software tool designed to facilitate access to electronic health records and biomedical data through local, institution-controlled infrastructure. By installing, configuring, or using MedCP in any capacity, you acknowledge and agree to the following:\n\n1. **Institutional Compliance Responsibility.** It is the sole responsibility of the user to ensure that all use of this tool complies with the data governance policies, privacy regulations, and data use agreements applicable to their institution, including but not limited to the Health Insurance Portability and Accountability Act (HIPAA), the General Data Protection Regulation (GDPR), the California Consumer Privacy Act (CCPA), and any other applicable federal, state, local, or international laws and regulations governing the collection, storage, access, and use of personal health information or sensitive data.\n\n2. **No Warranty of Regulatory Compliance.** MedCP is provided \"as is,\" without warranty of any kind, express or implied. The authors, developers, and affiliated institutions make no representations or warranties that the use of this tool will satisfy any specific regulatory, legal, or institutional data privacy requirement. Users are solely responsible for obtaining any necessary institutional review board (IRB) approvals, data use agreements, or other authorizations required before accessing or processing any patient data.\n\n3. **Limitation of Liability.** To the fullest extent permitted by applicable law, the authors, contributors, and affiliated institutions (including the Baranzini Lab and the University of California, San Francisco) shall not be liable for any direct, indirect, incidental, special, consequential, or punitive damages arising out of or related to the use, misuse, or inability to use this tool, including but not limited to any unauthorized access to or disclosure of protected health information, any violation of applicable privacy laws or institutional data use policies, or any other improper or unlawful use of this software or the data accessed through it.\n\n4. **User Accountability.** Any misuse, unauthorized sharing, or improper handling of data accessed through MedCP is the exclusive responsibility of the user. The authors disclaim all liability for actions taken by users that violate applicable laws, regulations, or institutional policies.\n\n5. **No Clinical Advice.** MedCP is intended solely as a research and informational tool. It does not constitute medical advice, clinical decision support approved for patient care, or a validated clinical diagnostic system. It must not be used as the sole basis for any clinical or medical decisions.\n\nBy using this software, you confirm that you have read, understood, and agreed to this disclaimer, and that you will use MedCP in full accordance with all applicable legal and institutional requirements.\n\n---\n\n## License\n\nMedCP is released under the [MIT License](LICENSE).\n\n## Authors and Maintainers\n\n**MedCP** is developed and maintained by the [Baranzini Lab](https://baranzinilab.ucsf.edu/) at UCSF.\n\n- **Wanjun Gu** - [wanjun.gu@ucsf.edu](mailto:wanjun.gu@ucsf.edu)\n- **Gianmarco Bellucci** - [gianmarco.bellucci@ucsf.edu](mailto:gianmarco.bellucci@ucsf.edu)\n\n## Acknowledgments\n\n- **SPOKE Knowledge Graph**: [Morris et al., 2023](https://academic.oup.com/bioinformatics/article/39/2/btad080/7033465)\n- **UCSF Clinical Data**: [UCSF Research Data Portal](https://data.ucsf.edu/research/ucsf-data)\n- **Desktop Extensions**: Built using Model Context Protocol Bundle (MCPB) format\n- **Model Context Protocol**: Enables secure local AI integration\n\n<div align=\"center\">\n  <p><a href=\"../../releases\">Download MedCP Extension</a> | <a href=\"../../issues\">Report Issues</a> | <a href=\"mailto:wanjun.gu@ucsf.edu\">Contact</a></p>\n</div>\n"}