MCP Server
Ignixa includes an experimental Model Context Protocol (MCP) server that enables AI assistants like Claude to interact with FHIR data directly.
MCP support is experimental and may change in future releases.
Overview
The MCP server exposes FHIR operations as tools that AI assistants can invoke. This enables natural language interactions like:
- "Find all patients named Smith"
- "Show me the latest observations for patient 123"
- "Update the patient's phone number"
- "Install the US Core implementation guide"
Configuration
Enable MCP in appsettings.json:
{
"Experimental": {
"Enabled": true,
"Features": {
"Mcp": {
"Enabled": true,
"Transport": "http"
}
}
}
}
Default: Enabled (when Experimental:Enabled is true)
Endpoint
The MCP server is accessible at:
POST /mcp
This endpoint uses MCP Streamable HTTP transport for bidirectional streaming with AI clients like Claude.
Available Tools
FHIR Operations
search_fhir_resources
Search for FHIR resources with LLM-optimized response sizes.
{
"name": "search_fhir_resources",
"arguments": {
"resourceType": "Patient",
"searchParams": {"name": "Smith", "birthdate": "gt2000"},
"count": 10,
"elements": "id,name,birthDate",
"summary": "true"
}
}
| Parameter | Description |
|---|---|
resourceType | Resource type (Patient, Observation, etc.) |
searchParams | Search parameters as key-value pairs |
count | Max results (default: 10, max: 50) |
elements | Comma-separated fields to include |
summary | Summary mode: true, data, text, count |
total | Total count: accurate, estimate, none |
tenantId | Optional tenant ID |
get_fhir_resource
Retrieve a single resource by ID.
{
"name": "get_fhir_resource",
"arguments": {
"resourceType": "Patient",
"id": "123"
}
}
patch_resource_field
Update a single field in a resource. Simple interface for common updates.
{
"name": "patch_resource_field",
"arguments": {
"resourceType": "Patient",
"resourceId": "123",
"fieldPath": "active",
"value": true,
"operation": "set"
}
}
| Parameter | Description |
|---|---|
fieldPath | FHIRPath to field (e.g., active, name[0].given) |
value | New value (string, number, boolean, or JSON) |
operation | set, delete, add, or remove |
patch_fhir_resource
Apply multiple FHIRPath Patch operations to a resource.
{
"name": "patch_fhir_resource",
"arguments": {
"resourceType": "Patient",
"resourceId": "123",
"operationsJson": "[{\"type\":\"replace\",\"path\":\"Patient.active\",\"value\":true}]"
}
}
Operations format:
[
{"type": "replace", "path": "Patient.active", "value": true},
{"type": "add", "path": "Patient.telecom", "value": {"system": "phone", "value": "555-1234"}},
{"type": "delete", "path": "Patient.photo"}
]
get_resource_history
Get version history for a resource.
{
"name": "get_resource_history",
"arguments": {
"resourceType": "Patient",
"id": "123",
"count": 10
}
}
Package Management
search_fhir_packages
Search for FHIR packages in the NPM registry with fuzzy matching.
{
"name": "search_fhir_packages",
"arguments": {
"query": "us core",
"maxResults": 10
}
}
get_fhir_package_details
Get detailed information about a package including all versions.
{
"name": "get_fhir_package_details",
"arguments": {
"packageId": "hl7.fhir.us.core"
}
}
install_fhir_package
Install a FHIR package from the NPM registry.
{
"name": "install_fhir_package",
"arguments": {
"packageId": "hl7.fhir.us.core",
"version": "6.1.0"
}
}
list_fhir_packages
List installed packages for a tenant.
{
"name": "list_fhir_packages",
"arguments": {
"tenantId": 1
}
}
uninstall_fhir_package
Uninstall a package from a tenant.
{
"name": "uninstall_fhir_package",
"arguments": {
"packageId": "hl7.fhir.us.core",
"version": "6.1.0"
}
}
Job Management
start_export_job
Start a bulk export job.
{
"name": "start_export_job",
"arguments": {
"resourceTypes": ["Patient", "Observation"],
"since": "2024-01-01T00:00:00Z"
}
}
start_import_job
Start a bulk import job.
{
"name": "start_import_job",
"arguments": {
"sourceUrl": "https://storage.example.com/import/",
"resourceTypes": ["Patient", "Observation"]
}
}
get_job_status
Check the status of an import/export job.
{
"name": "get_job_status",
"arguments": {
"jobId": "abc123",
"jobType": "Export"
}
}
list_jobs
List recent import/export jobs.
{
"name": "list_jobs",
"arguments": {
"jobType": "Export",
"maxResults": 10
}
}
Tenant Management
list_tenants_info
List all available tenants with their configuration.
{
"name": "list_tenants_info",
"arguments": {}
}
Returns tenant IDs, names, FHIR versions, and validation settings.
Authorization
MCP tools respect the same authorization rules as the REST API. Configure MCP-enabled roles:
{
"Authorization": {
"McpEnabledRoles": ["Admin", "SystemAdmin", "Mcp", "Contributor"]
}
}
| Role | MCP Access | Description |
|---|---|---|
Admin | Full | All operations |
SystemAdmin | Full | Cross-tenant access |
Mcp | Limited | Read, create, update, delete, search |
Contributor | Full | All FHIR and MCP operations |
Clinician | None | No MCP access by default |
ReadOnly | None | No MCP access |
Multi-Tenancy
MCP tools are tenant-aware. When multiple tenants exist:
- Use
list_tenants_infoto discover available tenants - Pass
tenantIdparameter to tools - If omitted and only one tenant exists, it's auto-selected
Response Size Optimization
MCP responses are optimized for LLM context windows:
- Default count: 10 results (max 50)
- Use
elements: Request only needed fields - Use
summary: Core fields only (true) or exclude narratives (data) - Use
total=none: Skip expensive count queries
Example optimized search:
{
"resourceType": "Observation",
"searchParams": {"patient": "123", "code": "http://loinc.org|85354-9"},
"count": 5,
"elements": "id,code,valueQuantity,effectiveDateTime",
"summary": "data"
}
Connecting Claude Desktop
Add to your Claude Desktop configuration (claude_desktop_config.json):
{
"mcpServers": {
"ignixa-fhir": {
"url": "http://localhost:5027/mcp",
"transport": "sse"
}
}
}
Note: Replace localhost:5000 with your server's actual URL. The MCP server uses HTTP streaming (Streamable HTTP) for bidirectional communication with Claude.
Related Documentation
- Configuration - Enable experimental features
- Authorization - Configure MCP roles
- Bulk Operations - Export/import details