sharp-on-fhir-mcp
sharp-fhir-mcp
Чистый, соответствующий стандарту SHARP-on-MCP FHIR R4 MCP-сервер с интерактивными клиническими дашбордами MCP-UI.
Создан для хакатона Prompt Opinion "Build the Future of Healthcare AI" — это независимый от вендора MCP-сервер, к которому может подключиться любое приложение SMART-on-FHIR, агент или хост LLM без OAuth на стороне сервера, API-ключей или проприетарных потоков аутентификации.
Почему SHARP?
Спецификация SHARP (Standardised Healthcare Agent Remote Protocol) описывает контекстную модель на основе заголовков для MCP серверов в здравоохранении:
Заголовок | Назначение |
| Базовый URL FHIR R4 эндпоинта пациента |
| Bearer-токен, уже выпущенный хостом агента |
| Опциональный ID ресурса |
Согласно SHARP §3.2, MCP-сервер никогда не выполняет OAuth-процедуру самостоятельно. Хост агента (например, контейнер запуска SMART-on-FHIR) получает токен и пересылает его при каждом вызове. Это означает, что один экземпляр этого сервера работает с Epic, Cerner, MEDITECH, athenahealth, eClinicalWorks, ConnectEHR, HAPI или любым другим FHIR R4 эндпоинтом — здесь нет ничего специфичного для вендора.
Сервер объявляет capabilities.experimental.fhir_context_required = true
в каждом ответе инициализации, чтобы клиенты, поддерживающие SHARP, знали, что нужно автоматически пересылать эти заголовки.
Что включено
🩺 Клинические FHIR-инструменты
fhir_get_capability_statement— обнаружение подключенного FHIR-сервераfhir_get_patient,fhir_search,fhir_read,fhir_patient_everything— общий доступ к R4clinical_search_patients,clinical_get_patient_summaryclinical_get_appointments,clinical_get_encountersclinical_get_problems,clinical_get_medications,clinical_get_allergies,clinical_get_immunizationsclinical_get_health_record— консолидированная запись за один запросclinical_get_context— полный контекст визита (демография + аллергии + лекарства + проблемы + анализы + показатели жизнедеятельности + приемы + оповещения) параллельно
🔬 Лабораторные анализы, показатели жизнедеятельности и визуализация
lab_get_results,lab_get_vital_signs,lab_get_diagnostic_reportsimaging_get_documents— поиск DocumentReference
🧠 Опциональная постоянная память (SimpleMem)
Когда установлены SIMPLEMEM_API_URL и SIMPLEMEM_ACCESS_TOKEN:
memory_store_encounter— сохранение сводки визитаmemory_store_alert— пометка клинических проблем для следующего визитаmemory_search_history— семантический поиск по прошлым визитамmemory_get_patient_history— список всех сохраненных воспоминаний для текущего пациента
📊 Визуализации MCP-UI
visualize_lab_trend— линейный график Chart.js для одного анализа во времениvisualize_vitals— дашборд с несколькими графиками показателей жизнедеятельностиvisualize_patient_dashboard— полная HTML-страница пациента (демография, оповещения, аллергии, лекарства, проблемы, анализы, приемы, иммунизация + тренды Chart.js)
Все визуальные инструменты возвращают ресурсы MCP-UI ui://, которые хост отображает в своей панели инспектора.
Быстрый старт
1. Установка
git clone https://github.com/your-org/sharp-fhir-mcp.git
cd sharp-fhir-mcp
pip install -e .2. Запуск сервера
sharp-fhir-mcp # streamable-http on 0.0.0.0:8000
sharp-fhir-mcp --port 9000 # custom port
sharp-fhir-mcp --strict-context # 403 on non-handshake without FHIR headersMCP-эндпоинт: http://localhost:8000/mcp.
Примечание:
localhostздесь относится к локальному хосту машины, где вы запускаете сервер. Чтобы получить к нему удаленный доступ, разверните сервер (см. ниже) или пробросьте порт к вашему локальному экземпляру.
3. Подключение из любого MCP-клиента с поддержкой SHARP
Отправляйте эти заголовки при каждом JSON-RPC запросе:
X-FHIR-Server-URL: https://hapi.fhir.org/baseR4
X-FHIR-Access-Token: <bearer token from your SMART launch>
X-Patient-ID: 12345 # optional4. Попробуйте публичную песочницу без написания SMART-приложения
Публичная FHIR R4 песочница HAPI доступна только для чтения и не требует аутентификации — полезно для ознакомления:
curl -X POST http://localhost:8000/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H 'X-FHIR-Server-URL: https://hapi.fhir.org/baseR4' \
-H 'X-FHIR-Access-Token: anonymous' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'Развертывание
Vercel (Python serverless)
Этот сервер работает как stateless Streamable-HTTP эндпоинт, который отлично работает на Vercel «из коробки». Вы можете повторно использовать существующий Next.js MCP scaffold, либо:
Добавив Python ASGI-обработчик — поместите экземпляр
appStarlette вapi/index.py:# api/index.py from sharp_fhir_mcp.server import app # noqa: F401плюс минимальный
vercel.json:{ "builds": [{"src": "api/index.py", "use": "@vercel/python"}], "routes": [{"src": "/(.*)", "dest": "api/index.py"}] }Или запустив его как sidecar за вашим существующим фронтендом Vercel и настроив обратный прокси
/mcpна более долгоживущий хост (Fly.io, Railway, Render).
Сервер учитывает переменную окружения PORT, внедряемую Vercel.
Локальная разработка
cp .env.example .env # set FHIR_SERVER_URL etc. for fallbacks
sharp-fhir-mcp # http://localhost:8000/mcpDocker (опционально)
FROM python:3.12-slim
WORKDIR /app
COPY . .
RUN pip install -e .
EXPOSE 8000
CMD ["sharp-fhir-mcp", "--host", "0.0.0.0", "--port", "8000"]Архитектура
┌─────────────────────────────────────────────────────────────┐
│ MCP Client / Agent / LLM host (Claude, Cursor, custom) │
│ • Knows the patient's FHIR endpoint + access token │
│ • Sends X-FHIR-Server-URL, X-FHIR-Access-Token headers │
└────────────────────────┬────────────────────────────────────┘
│ Streamable HTTP (SHARP-on-MCP)
POST /mcp + JSON-RPC + SHARP headers
▼
┌─────────────────────────────────────────────────────────────┐
│ sharp-fhir-mcp │
│ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ SharpContextMiddleware │ │
│ │ • Parses X-FHIR-Server-URL / X-FHIR-Access-Token │ │
│ │ • Stores in ContextVar for the request scope │ │
│ └─────────────────────────┬──────────────────────────────┘ │
│ ▼ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ FastMCP tool registry │ │
│ │ ├─ fhir_* (generic R4 search/read) │ │
│ │ ├─ clinical_* (patient/encounter/medication/…) │ │
│ │ ├─ lab_* / imaging_*(observations, reports, docs) │ │
│ │ ├─ memory_* (optional SimpleMem) │ │
│ │ └─ visualize_* (MCP-UI Chart.js dashboards) │ │
│ └─────────────────────────┬──────────────────────────────┘ │
│ ▼ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ Vendor-neutral FHIR R4 client (httpx, async) │ │
│ └─────────────────────────┬──────────────────────────────┘ │
└────────────────────────────┼────────────────────────────────┘
▼
FHIR R4 server (Epic / Cerner / HAPI / …)См. CLAUDE.md для подробных заметок по модулям и контрольного списка соответствия SHARP.
Контрольный список соответствия SHARP
Требование | Статус |
Транспорт Streamable-HTTP (stdio не входит в область) | ✅ |
Чтение FHIR-эндпоинта из заголовка | ✅ |
Чтение bearer-токена из заголовка | ✅ |
Опциональный заголовок | ✅ |
Объявление | ✅ |
Отсутствие OAuth / хранения токенов на стороне сервера | ✅ |
Независимый от вендора FHIR R4 клиент | ✅ |
Структурированные ошибки | ✅ |
Опциональное строгое соблюдение 403 ( | ✅ |
Лицензия
MIT — см. LICENSE.
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted MCP server exposing US hospital procedure cost data to AI assistants
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
MCP Hub: AI service discovery, per-user OAuth, and multi-service workflow orchestration
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- 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/TerminallyLazy/featherless-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server