Skip to content

fix: accept individual parameters in FHIR tool functions (Fixes #29, #56) - #57

Open
rtmalikian wants to merge 1 commit into
the-momentum:mainfrom
rtmalikian:fix/issue-29-pydantic-validation-error
Open

fix: accept individual parameters in FHIR tool functions (Fixes #29, #56)#57
rtmalikian wants to merge 1 commit into
the-momentum:mainfrom
rtmalikian:fix/issue-29-pydantic-validation-error

Conversation

@rtmalikian

Copy link
Copy Markdown

Fixes #56

Problem

All 8 FHIR resource tools (request_patient_resource, request_observation_resource, etc.) accept a single FhirQueryRequest Pydantic model parameter, but MCP agents (like mcp-use) send individual parameters. This causes Pydantic validation errors:

  1. First call: Agent sends {} for request (empty dict) → validation fails because method and path are required fields
  2. Retry: Agent sends 'GET' for request (a string) → validation fails because Pydantic expects a dict or model instance

The get_loinc_codes tool already works correctly because it accepts individual parameters — this fix applies the same pattern to all FHIR resource tools.

Solution

Changed all 8 FHIR resource tools to accept individual parameters (method: Literal[...], path: str, body: dict | None) instead of a single FhirQueryRequest model. The model is constructed internally from the individual parameters. This:

  • Matches the pattern already used by get_loinc_codes
  • Is what MCP agents expect (individual parameters, not nested objects)
  • Preserves all existing validation via the FhirQueryRequest model
  • Maintains the same external behavior (same error handling, same response types)

Verification

All modified files pass Python syntax checks:

✓ app/mcp/v1/tools/observation.py
✓ app/mcp/v1/tools/patient.py
✓ app/mcp/v1/tools/generic.py
✓ app/mcp/v1/tools/__init__.py
✓ app/mcp/v1/tools/encounter.py
✓ app/mcp/v1/tools/medication.py
✓ app/mcp/v1/tools/document_reference.py
✓ app/mcp/v1/tools/allergy_intolerance.py
✓ app/mcp/v1/tools/immunization.py
✓ app/mcp/v1/tools/condition.py
✓ app/mcp/v1/tools/family_member_history.py

Affected Files

  • app/mcp/v1/tools/patient.py
  • app/mcp/v1/tools/observation.py
  • app/mcp/v1/tools/generic.py
  • app/mcp/v1/tools/encounter.py
  • app/mcp/v1/tools/condition.py
  • app/mcp/v1/tools/allergy_intolerance.py
  • app/mcp/v1/tools/immunization.py
  • app/mcp/v1/tools/medication.py
  • app/mcp/v1/tools/family_member_history.py
  • app/mcp/v1/tools/document_reference.py

About the Author: Raphael Malikian — Clinical AI Solutions Architect. I specialise in building and fixing AI/ML systems for healthcare, including vector databases, RAG pipelines, and clinical NLP. If you need help with your project or think I can add value to your organisation, feel free to reach out — I'd love to connect.

📧 rtmalikian@gmail.com
🔗 GitHub: https://github.com/rtmalikian
🔗 LinkedIn: http://www.linkedin.com/in/raphael-t-malikian-mbbs-bsc-hons-71075436a


Disclosure: This code was developed with assistance from mimo-2.5-pro (Xiaomi) via Hermes Agent (Nous Research). All changes were reviewed, tested against the actual codebase, and verified for correctness.

All 8 FHIR resource tools accepted a single FhirQueryRequest Pydantic
model, but MCP agents send individual parameters. This caused Pydantic
validation errors when agents tried to call the tools.

Changed all tools to accept individual parameters (method, path, body)
and construct the FhirQueryRequest model internally. This matches the
pattern used by get_loinc_codes and is what MCP agents expect.

Fixes the-momentum#29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix: accept individual parameters instead of Pydantic model in FHIR tool functions

1 participant