Skip to main content
Glama
rkirkendall

Medplum MCP Server

by rkirkendall

Medplum MCP Server

๐Ÿš€ Project Description

This project implements a complete Model Context Protocol (MCP) server designed to seamlessly interact with a Medplum FHIR server. The MCP server provides a standardized interface, enabling Large Language Models (LLMs) to perform Create, Read, Update, and Search (CRUDS) operations on various FHIR resources through a comprehensive suite of tools. This empowers users to manage healthcare data stored in Medplum using natural language commands through any MCP-compatible client (Claude Desktop, VS Code MCP extensions, etc.).

The server implements the full MCP protocol specification, providing 33 comprehensive FHIR resource management tools that can be discovered and executed by any MCP client. Users can intuitively manage patient information, practitioners, organizations, encounters, observations, and more by conversing with an LLM that leverages the MCP tools to execute requests against the FHIR server.

Related MCP server: Smart EHR MCP Server

โœจ Current Status

๐ŸŽ‰ MCP Server Implementation Complete! ๐ŸŽ‰

What's Implemented:

  • โœ… Core FHIR resource management tools (Patient, Practitioner, Organization, Encounter, Observation, Medication, etc.)

  • โœ… MCP Server Protocol Implementation - Full Model Context Protocol server with stdio transport

  • โœ… Comprehensive tool schemas for LLM interaction (33 FHIR tools)

  • โœ… Interactive Chat Harness - Full MCP client with natural language interface

  • โœ… Jest integration tests for all tools

  • โœ… Medplum FHIR server connectivity and authentication

  • โœ… MCP Inspector testing and validation

  • โœ… Claude Desktop integration configuration

Ready for Use:

  • ๐Ÿ”„ The MCP server is fully functional and ready for integration with MCP clients

  • โœ… All 33 FHIR tools are properly registered and working

  • ๐Ÿ”„ Server successfully authenticates with Medplum and executes FHIR operations

  • ๐Ÿ”„ Interactive chat harness available - Test all tools with natural language

  • ๐Ÿ”„ Tested with MCP Inspector - all tools discoverable and executable

  • ๐Ÿ”„ Claude Desktop configuration provided for immediate use

Current Capabilities:

  • Full CRUD operations on FHIR resources through natural language

  • Interactive chat interface for testing and development

  • Seamless integration with any MCP-compatible client (Claude Desktop, VS Code MCP extensions, etc.)

  • Comprehensive error handling and logging

  • Production-ready MCP protocol implementation

๐ŸŒŸ Features Implemented

The MCP server currently supports a comprehensive set of 33 tools for managing various FHIR resources:

๐Ÿ‘ฅ Patient Management (4 tools) - src/tools/patientUtils.ts

  • createPatient: Create new patient records with demographics, identifiers, and contact information.

  • getPatientById: Retrieve complete patient details by their unique ID.

  • updatePatient: Modify existing patient information including demographics and contact details.

  • searchPatients: Find patients based on name, birthdate, identifier, or other criteria.

๐Ÿ‘ฉโ€โš•๏ธ Practitioner Management (5 tools) - src/tools/practitionerUtils.ts

  • createPractitioner: Register new healthcare practitioners with their professional details.

  • getPractitionerById: Fetch complete practitioner details by their unique ID.

  • updatePractitioner: Update practitioner information including qualifications and contact details.

  • searchPractitionersByName: Search for practitioners using their first or last name.

  • searchPractitioners: Conduct advanced searches for practitioners based on multiple criteria.

๐Ÿฅ Organization Management (4 tools) - src/tools/organizationUtils.ts

  • createOrganization: Add new healthcare organizations (hospitals, clinics, departments).

  • getOrganizationById: Retrieve complete organization details by their unique ID.

  • updateOrganization: Update organization information including contact details and addresses.

  • searchOrganizations: Search for organizations by name, type, or other attributes.

๐Ÿฅ Encounter Management (4 tools) - src/tools/encounterUtils.ts

  • createEncounter: Create new patient encounters (visits, appointments, hospital stays).

  • getEncounterById: Retrieve complete encounter details by their unique ID.

  • updateEncounter: Update encounter information including status, class, and participants.

  • searchEncounters: Search for encounters by patient, practitioner, date, status, or class.

๐Ÿ”ฌ Observation Management (4 tools) - src/tools/observationUtils.ts

  • createObservation: Record new observations (lab results, vital signs, diagnostic findings).

  • getObservationById: Retrieve complete observation details by their unique ID.

  • updateObservation: Modify existing observations including values, status, and interpretations.

  • searchObservations: Search for observations by patient, code, date, or encounter.

๐Ÿ’Š Medication Request Management (4 tools) - src/tools/medicationRequestUtils.ts

  • createMedicationRequest: Create new medication requests (prescriptions) with dosage and instructions.

  • getMedicationRequestById: Retrieve complete medication request details by their unique ID.

  • updateMedicationRequest: Update prescription information including status, dosage, and instructions.

  • searchMedicationRequests: Search for medication requests by patient, medication, or prescriber.

๐Ÿ’‰ Medication Management (3 tools) - src/tools/medicationUtils.ts

  • createMedication: Create new medication resources with codes, names, and formulations.

  • getMedicationById: Retrieve complete medication details by their unique ID.

  • searchMedications: Search for medications by code, name, or ingredient.

๐Ÿ“‹ Episode of Care Management (4 tools) - src/tools/episodeOfCareUtils.ts

  • createEpisodeOfCare: Create new episodes of care for managing patient care over time.

  • getEpisodeOfCareById: Retrieve complete episode of care details by their unique ID.

  • updateEpisodeOfCare: Update episode information including status, period, and managing organization.

  • searchEpisodesOfCare: Search for episodes of care by patient, status, or managing organization.

๐Ÿ” General FHIR Operations (1 tool)

  • generalFhirSearch: Generic FHIR search with custom parameters for any resource type, enabling advanced queries across all FHIR resources.

Each tool is exposed to the LLM via a well-defined JSON schema and is callable through a dedicated test harness (src/llm-test-harness.ts), facilitating robust testing and integration.

๐Ÿ› ๏ธ Technology Stack

  • Runtime: Node.js

  • Language: TypeScript

  • FHIR Server Interaction: @medplum/core, @medplum/fhirtypes

  • LLM Integration: OpenAI API (specifically gpt-4o in the test harness)

  • Testing: Jest (for integration tests), Manual E2E via test harness

  • Linting & Formatting: ESLint, Prettier

  • Environment Management: dotenv

  • HTTP Client (for Medplum SDK): node-fetch

๐Ÿ“ Project Structure

medplum-mcp/
โ”œโ”€โ”€ src/                  # Source code
โ”‚   โ”œโ”€โ”€ config/           # Medplum client configuration (medplumClient.ts)
โ”‚   โ”œโ”€โ”€ tools/            # FHIR resource utility functions (patientUtils.ts, etc.)
โ”‚   โ”œโ”€โ”€ lib/              # Shared libraries (currently unused)
โ”‚   โ”œโ”€โ”€ index.ts          # Main application entry point
โ”‚   โ”œโ”€โ”€ llm-test-harness.ts # Script for testing LLM tool calling
โ”‚   โ””โ”€โ”€ test-connection.ts  # Script for basic Medplum connection test
โ”œโ”€โ”€ tests/                # Test suites
โ”‚   โ””โ”€โ”€ integration/      # Jest integration tests for tools
โ”œโ”€โ”€ .eslintrc.js
โ”œโ”€โ”€ .gitignore
โ”œโ”€โ”€ .prettierrc.js
โ”œโ”€โ”€ .prettierignore
โ”œโ”€โ”€ package.json
โ”œโ”€โ”€ tsconfig.json
โ””โ”€โ”€ README.md

โš™๏ธ Setup and Configuration

  1. Prerequisites:

    • Node.js (refer to package.json for engine specifics; LTS versions recommended)

    • A running Medplum server instance (e.g., local Dockerized instance at http://localhost:8103/)

    • Medplum client credentials (Client ID and Client Secret)

  2. Installation:

    git clone https://github.com/rkirkendall/medplum-mcp.git
    cd medplum-mcp
    npm install
  3. Environment Variables: Create a .env file in the project root with your specific Medplum server details and API keys:

    MEDPLUM_BASE_URL=http://your-medplum-server-url/
    MEDPLUM_CLIENT_ID=your_client_id
    MEDPLUM_CLIENT_SECRET=your_client_secret
    OPENAI_API_KEY=your_openai_api_key # Required for llm-test-harness.ts

๐Ÿš€ Usage

The most user-friendly way to test your MCP server is through the interactive chat interface:

# Build and run the chat harness
npm run chat

# Or in development mode
npx ts-node src/llm-test-harness.ts

Features:

  • ๐Ÿ—ฃ๏ธ Natural language interaction with all 33 FHIR tools

  • ๐Ÿ”ง Automatic tool discovery and execution

  • ๐Ÿ“‹ Built-in help and examples

  • ๐Ÿ”„ Conversation context maintenance

  • โšก Real-time tool execution and results

Example Session:

๐Ÿฅ You: Create a new patient Jane Smith born 1985-03-20
๐Ÿค– Assistant: I'll create a new patient record for Jane Smith...

๐Ÿฅ You: Find all doctors named Stevens
๐Ÿค– Assistant: I found 2 practitioners with the name Stevens...

See CHAT_HARNESS_USAGE.md for detailed usage instructions and IMPLEMENTATION_PLAN.md for development details.

โ–ถ๏ธ Running the MCP Server Directly

npm start # Runs the MCP server with stdio transport
npm run dev # Development mode with live reloading

๐Ÿงช Alternative Testing Methods

# MCP Inspector (web-based tool testing)
npx @modelcontextprotocol/inspector node dist/index.js

# Legacy OpenAI integration (deprecated)
npm run test:harness

โœ… Testing

๐Ÿ”— Integration Tests

Integration tests use Jest and interact with a live Medplum instance (configured via .env).

To run all integration tests:

npx jest tests/integration

To run specific integration test files:

npx jest tests/integration/patient.integration.test.ts
npx jest tests/integration/practitioner.integration.test.ts
npx jest tests/integration/organization.integration.test.ts
# Add other specific test files as needed

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

Available Tools

37 tools
createConditionC

Creates a new condition or diagnosis for a patient. Requires a patient ID and a condition code.

ParametersJSON Schema
NameRequiredDescriptionDefault
clinicalStatusNoThe clinical status of the condition. For example: "active", "inactive", "resolved".
codeYesThe code representing the condition. Must include a coding system, code, and display text.
onsetStringNoEstimated date, state, or age when the condition began (e.g., "about 3 years ago"). Optional.
patientIdYesThe ID of the patient for whom the condition is being created.
recordedDateNoThe date the condition was recorded, in YYYY-MM-DD format. Optional.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden for behavioral disclosure. While 'Creates' implies a write/mutation operation, the description doesn't address important behavioral aspects: whether this requires specific permissions/authorization, what happens on success/failure, whether the creation is reversible, or any rate limits/constraints. For a healthcare data mutation tool with zero annotation coverage, this represents a significant transparency gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately concise with two sentences that efficiently state the purpose and prerequisites. There's no unnecessary verbiage, and the information is front-loaded. However, it could be slightly more structured by separating purpose from requirements more clearly, and the second sentence could be integrated more smoothly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given this is a mutation tool (creating patient conditions) with no annotations and no output schema, the description provides minimal but adequate context. It identifies the tool's purpose and basic requirements, but doesn't address the complexity implied by 5 parameters (including nested objects) or provide guidance on the clinical workflow. For a healthcare data creation tool, more context about validation, error handling, or integration with sibling tools would be beneficial.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already provides comprehensive parameter documentation. The description mentions 'patient ID and a condition code' which aligns with the two required parameters but doesn't add meaningful semantic context beyond what's already in the schema descriptions. The baseline score of 3 is appropriate when the schema does the heavy lifting, though the description could have explained the clinical significance of parameters like 'clinicalStatus' or 'onsetString'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Creates a new condition or diagnosis') and the target resource ('for a patient'), which provides specific verb+resource information. However, it doesn't explicitly differentiate this tool from sibling tools like 'createObservation' or 'createMedication' that also create clinical resources, missing the opportunity to clarify this is specifically for conditions/diagnoses rather than other FHIR resource types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions 'Requires a patient ID and a condition code' which indicates prerequisites but doesn't provide guidance on when to use this tool versus alternatives. With sibling tools like 'updateCondition' and 'searchConditions' available, there's no indication of when to create versus update or when to use this versus general search tools. The description lacks explicit when/when-not guidance or alternative recommendations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

createEncounterC

Creates a new encounter (patient visit). Requires patient ID and status.

ParametersJSON Schema
NameRequiredDescriptionDefault
classCodeYesThe classification of the encounter (e.g., AMB for ambulatory, IMP for inpatient, EMER for emergency).
organizationIdNoThe ID of the organization providing the encounter. Optional.
patientIdYesThe ID of the patient for this encounter.
practitionerIdNoThe ID of the practitioner involved in the encounter. Optional.
statusYesThe status of the encounter.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It states this is a creation operation but doesn't cover permissions needed, whether it's idempotent, what happens on failure, or the format of the response. For a write operation in a healthcare context, this leaves significant gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose. However, it could be slightly more structured by separating requirements from the action statement for better readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a creation tool with no annotations and no output schema in a complex healthcare domain, the description is insufficient. It doesn't explain what an 'encounter' entails beyond 'patient visit', doesn't mention relationships to sibling tools, and provides minimal behavioral context despite the critical nature of medical data creation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all 5 parameters. The description only mentions 'patient ID and status' as required, which adds minimal value beyond the schema's required array and parameter descriptions. Baseline 3 is appropriate when schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Creates') and resource ('new encounter (patient visit)'), making the purpose unambiguous. However, it doesn't explicitly differentiate this from sibling tools like 'createPatient' or 'createEpisodeOfCare' beyond mentioning 'encounter' specifically.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions 'Requires patient ID and status' which hints at prerequisites, but provides no guidance on when to use this tool versus alternatives like 'createEpisodeOfCare' or 'updateEncounter', nor does it specify exclusions or contextual triggers for usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

createEpisodeOfCareC

Creates a new episode of care for a patient. Requires patient ID and status.

ParametersJSON Schema
NameRequiredDescriptionDefault
managingOrganizationIdNoThe ID of the organization managing this episode. Optional.
patientIdYesThe ID of the patient this episode of care is for.
statusYesThe status of the episode of care.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states 'Creates a new episode of care,' implying a write operation, but does not cover critical aspects like authentication needs, error handling, rate limits, or what happens upon success (e.g., returns an ID). For a creation tool with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two sentences that directly address purpose and requirements. It is front-loaded with the main action. However, it could be slightly more structured by explicitly listing parameters or including usage context, but it avoids unnecessary verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (creation operation with 3 parameters), lack of annotations, and no output schema, the description is incomplete. It does not explain behavioral traits, return values, or error conditions. While the schema covers parameters well, the overall context for safe and effective use is insufficient, especially for a write tool in a FHIR environment.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all parameters (patientId, status, managingOrganizationId). The description adds minimal value by mentioning 'Requires patient ID and status,' which restates schema requirements without providing additional semantic context (e.g., format of IDs, meaning of statuses). Baseline 3 is appropriate as the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Creates a new episode of care for a patient.' It specifies the verb ('creates') and resource ('episode of care'), but does not explicitly differentiate it from sibling tools like 'createPatient' or 'createEncounter', which also create FHIR resources. The mention of 'patient' provides some context, but a more specific distinction would elevate this to a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides minimal guidance: 'Requires patient ID and status.' This indicates required parameters but does not explain when to use this tool versus alternatives like 'createEncounter' or 'updateEpisodeOfCare'. No context on prerequisites, exclusions, or typical workflows is given, leaving the agent with little direction on appropriate usage scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

createMedicationC

Creates a new medication resource. Requires medication code or identifier.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesThe code identifying the medication (e.g., RxNorm, SNOMED CT).
displayNoThe display name of the medication.
formNoThe form of the medication (e.g., tablet, capsule, liquid).

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but only states it 'Creates a new medication resource' and requires a code. It lacks details on permissions needed, whether this is a write operation (implied but not explicit), error handling, or response format. This is inadequate for a mutation tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two short sentences, front-loading the main action. However, it could be more structured by explicitly separating purpose from requirements, but it avoids unnecessary verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given this is a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't cover behavioral aspects like authentication needs, potential side effects, or what the response contains, leaving significant gaps for an AI agent to understand tool usage fully.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents parameters like 'code' and 'display'. The description adds minimal value by mentioning 'medication code or identifier,' which aligns with the schema but doesn't provide additional context or examples beyond what's already in the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Creates') and resource ('medication resource'), making the purpose understandable. However, it doesn't differentiate this tool from other 'create' siblings like createPatient or createObservation beyond the resource type, missing specific distinctions about what makes medication creation unique.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides minimal guidance with 'Requires medication code or identifier,' which hints at a prerequisite but doesn't explain when to use this tool versus alternatives like createMedicationRequest or generalFhirSearch. No explicit when/when-not scenarios or comparisons to sibling tools are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

createMedicationRequestC

Creates a new medication request (prescription). Requires patient ID, medication reference, and prescriber.

ParametersJSON Schema
NameRequiredDescriptionDefault
intentYesThe intent of the medication request.
medicationReferenceYesReference to the medication being prescribed.
patientIdYesThe ID of the patient this prescription is for.
practitionerIdYesThe ID of the practitioner prescribing the medication.
statusYesThe status of the medication request.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It states this is a creation operation but doesn't mention permissions needed, whether this is a draft or active prescription by default, side effects, or what happens on success/failure. For a write operation with medical implications, this is insufficient transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that states the core purpose and key requirements. It's appropriately brief given the comprehensive schema documentation, though it could be slightly more informative about the tool's role in the broader FHIR workflow.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a medication prescription creation tool with no annotations and no output schema, the description is inadequate. It doesn't explain what constitutes a successful creation, what data is returned, error conditions, or how this fits into clinical workflows. The schema handles parameter documentation well, but the description fails to provide necessary operational context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are well-documented in the schema. The description mentions three required parameters (patient ID, medication reference, prescriber) but omits 'intent' and 'status' which are also required. It adds minimal value beyond the schema's parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Creates a new medication request') and the resource ('prescription'), with specific required parameters mentioned. It distinguishes from sibling tools like 'createMedication' by focusing on prescriptions rather than medication definitions, but doesn't explicitly contrast with 'updateMedicationRequest' or search tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'updateMedicationRequest' or 'searchMedicationRequests'. It mentions required parameters but doesn't indicate prerequisites, constraints, or typical workflow contexts for creating prescriptions versus other operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

createObservationB

Creates a new observation (lab result, vital sign, etc.). Requires patient ID and code.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesThe code representing what was observed (LOINC, SNOMED CT, etc.).
encounterIdNoThe encounter this observation is associated with. Optional.
patientIdYesThe ID of the patient this observation is for.
statusYesThe status of the observation.
valueQuantityNoNumeric value of the observation. Optional.
valueStringNoString value of the observation. Optional.

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses that creation requires specific inputs ('patient ID and code'), but fails to describe behavioral traits such as permissions needed, whether the operation is idempotent, error handling, or what the response looks like. For a mutation tool with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized with two concise sentences: one stating the purpose with examples, and another specifying requirements. It's front-loaded with the core action and wastes no words, making it easy to scan and understand quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description provides basic purpose and requirements but lacks details on behavioral aspects, error cases, or return values. For a creation tool in a healthcare context with multiple parameters, it's minimally adequate but leaves gaps in understanding full usage and outcomes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 6 parameters thoroughly. The description adds minimal value by mentioning 'patient ID and code' as required, but doesn't provide additional context beyond what's in the schema. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('creates') and resource ('new observation') with helpful examples ('lab result, vital sign, etc.'). It distinguishes from sibling tools like 'updateObservation' by specifying creation rather than modification, though it doesn't explicitly contrast with other creation tools like 'createPatient' or 'createEncounter' beyond the resource type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context through 'Requires patient ID and code,' suggesting prerequisites, but doesn't explicitly state when to use this tool versus alternatives like 'updateObservation' or 'searchObservations.' It hints at mandatory parameters but lacks guidance on scenarios or exclusions compared to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

createOrganizationC

Creates a new organization (e.g., hospital, clinic). Requires organization name.

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasNoA list of aliases for the organization. Optional.
nameYesThe official name of the organization.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. While 'creates' implies a write/mutation operation, the description doesn't disclose important behavioral traits: whether this requires specific permissions, what happens on duplicate names, whether the operation is idempotent, what the return value contains, or any rate limits. It only mentions the name requirement, leaving significant gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately concise with two sentences that directly address the tool's purpose and a key requirement. It's front-loaded with the main purpose. However, the second sentence could be more efficiently integrated, and there's room for slightly more detail without sacrificing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a creation/mutation tool with no annotations and no output schema, the description is incomplete. It doesn't explain what happens after creation (what's returned, how to reference the new organization), doesn't mention error conditions, and provides minimal behavioral context. Given the complexity of creating a persistent resource in a FHIR system, more guidance is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents both parameters (name and alias). The description only mentions the 'name' parameter requirement, adding minimal value beyond what the schema provides. It doesn't explain the meaning or use cases for aliases, nor provide context about name constraints or formatting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('creates') and resource ('new organization'), and provides examples of organization types (hospital, clinic). It distinguishes from sibling tools by focusing on organization creation rather than other FHIR resources like patients or medications. However, it doesn't explicitly differentiate from 'updateOrganization' which modifies existing organizations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions that organization name is required, but provides no guidance on when to use this tool versus alternatives like 'updateOrganization' or 'searchOrganizations'. There's no mention of prerequisites, when this operation is appropriate, or what happens after creation. The context is implied but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

createPatientB

Creates a new patient resource. Requires first name, last name, and birth date.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthDateYesThe patient's birth date in YYYY-MM-DD format.
firstNameYesThe patient's first name.
genderNoThe patient's gender (male, female, other, unknown). Optional.
lastNameYesThe patient's last name.

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It states this is a creation operation, implying mutation, but doesn't address permissions, side effects, error handling, or response format. For a mutation tool with zero annotation coverage, this leaves significant behavioral gaps. The description doesn't contradict annotations (none exist), but it's insufficient for safe agent use.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely conciseโ€”two sentences that directly state the tool's function and requirements without any fluff. It's front-loaded with the core purpose and follows with essential parameter information. Every word earns its place, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't explain what happens after creation (e.g., returns a patient ID, confirmation message), error conditions, or system constraints. While the schema covers parameters well, the overall context for safe and effective use is lacking, especially given the tool's potential impact.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, providing complete parameter documentation in the schema itself. The description adds minimal value by listing three required parameters (firstName, lastName, birthDate) but doesn't explain the optional gender parameter or provide additional context beyond what's in the schema. This meets the baseline for high schema coverage, but doesn't enhance understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('creates') and resource ('new patient resource'), making the purpose immediately understandable. It distinguishes from sibling tools by specifying the patient resource type, though it doesn't explicitly contrast with other creation tools like createCondition or createEncounter. The description is specific enough to identify the tool's function without being tautological.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context by listing required parameters, suggesting when this tool is appropriate (when you have patient data to create). However, it doesn't provide explicit guidance on when to use this versus alternatives like updatePatient or searchPatients, nor does it mention prerequisites beyond the required fields. The guidance is functional but lacks comparative context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

createPractitionerC

Creates a new medical practitioner. Requires given name and family name.

ParametersJSON Schema
NameRequiredDescriptionDefault
familyNameYesThe practitioner's family (last) name.
givenNameYesThe practitioner's given (first) name.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but offers minimal behavioral insight. It states 'Creates' (implying a write operation) and mentions required parameters, but lacks details on permissions, side effects, error handling, or response format. This is inadequate for a mutation tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and front-loaded with the core purpose. Both sentences are relevant, though it could be more structured (e.g., separating purpose from requirements). There's no unnecessary verbiage, making it efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a creation tool with no annotations and no output schema, the description is incomplete. It doesn't explain what happens upon success (e.g., returns a practitioner ID), error conditions, or system constraints. Given the complexity of creating a medical practitioner, more context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description mentions 'Requires given name and family name,' which aligns with the two required parameters in the schema. Since schema description coverage is 100%, the baseline is 3, and the description adds no additional semantic context beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Creates') and resource ('new medical practitioner'), making the purpose immediately understandable. It distinguishes from sibling tools by specifying the practitioner resource type, though it doesn't explicitly contrast with other 'create' tools like createPatient or createOrganization.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (like authentication), differentiate from similar creation tools (e.g., createPatient), or indicate when not to use it (e.g., for updating existing practitioners).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generalFhirSearchC

Performs a generic FHIR search operation on any resource type with custom query parameters.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryParamsYesA record of query parameters, where keys are FHIR search parameters and values are their corresponding values.
resourceTypeYesThe FHIR resource type to search for (e.g., 'Patient', 'Observation').

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states it 'performs a generic FHIR search operation' but doesn't disclose behavioral traits like whether it's read-only (implied by 'search'), authentication needs, rate limits, pagination, error handling, or output format. For a search tool with no annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose without unnecessary words. Every part earns its place by defining the operation, scope, and key parameters concisely.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a generic FHIR search tool with no annotations, no output schema, and many sibling alternatives, the description is incomplete. It lacks details on behavior, usage context, and output, leaving the agent under-informed for effective tool selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with clear descriptions for both parameters (resourceType and queryParams). The description adds minimal value beyond the schema, mentioning 'custom query parameters' which aligns with the schema's 'queryParams' description. Baseline 3 is appropriate as the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool performs a 'generic FHIR search operation on any resource type with custom query parameters,' which specifies the verb ('performs search'), resource ('any FHIR resource type'), and scope ('generic'). It distinguishes itself from sibling tools like searchPatients or searchObservations by emphasizing its generic nature, though it doesn't explicitly contrast with them in the text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus the many specific search siblings (e.g., searchPatients, searchObservations). It mentions 'any resource type' but doesn't clarify if this is preferred for ad-hoc queries or when specific tools are unavailable, leaving the agent to guess based on context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getConditionByIdB

Retrieves a condition resource by its unique ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
conditionIdYesThe unique ID of the condition to retrieve.

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It states this is a retrieval operation, implying read-only behavior, but doesn't disclose any behavioral traits such as error handling (e.g., what happens if the ID doesn't exist), authentication needs, rate limits, or response format. For a tool with no annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose without any wasted words. It's appropriately sized for a simple retrieval tool, making it easy to parse and understand quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (single parameter, no nested objects) and high schema coverage, the description is minimally adequate. However, with no annotations and no output schema, it fails to provide complete contextโ€”missing details on return values, error cases, or behavioral expectations. It meets basic needs but leaves gaps for effective agent use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, with the single parameter 'conditionId' fully documented in the schema. The description adds no additional parameter semantics beyond what's in the schema (e.g., format examples or constraints). Baseline 3 is appropriate when the schema does the heavy lifting, but no extra value is provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('retrieves') and resource ('condition resource') with specificity about the identifier ('by its unique ID'). It distinguishes from sibling tools like 'searchConditions' by focusing on individual retrieval rather than search operations. However, it doesn't explicitly differentiate from other 'getById' tools (e.g., 'getPatientById'), though the resource type is implied.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you have a specific condition ID to retrieve, but doesn't explicitly state when to use this versus alternatives like 'searchConditions' or other 'getById' tools. There's no guidance on prerequisites or error conditions. The context is clear but lacks explicit comparison or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getEncounterByIdB

Retrieves an encounter by its unique ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
encounterIdYesThe unique ID of the encounter to retrieve.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states this is a retrieval operation, implying it's read-only, but doesn't cover other important aspects like error handling (e.g., what happens if the ID doesn't exist), authentication needs, rate limits, or response format, which are critical for safe invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence that efficiently conveys the core purpose without any unnecessary words. It's front-loaded and wastes no space, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (single parameter, no output schema) and high schema coverage, the description is minimally adequate. However, it lacks details on behavioral aspects like error cases or response structure, which could help the agent use it more effectively, keeping it at a baseline score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, with the parameter 'encounterId' fully documented in the schema. The description doesn't add any additional meaning or context beyond what's in the schema (e.g., format examples or constraints), so it meets the baseline score of 3 for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Retrieves') and resource ('an encounter'), making the purpose immediately understandable. However, it doesn't differentiate this tool from its sibling 'get' tools (like getPatientById, getObservationById) beyond specifying the resource type, which is why it doesn't reach a score of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose this over 'searchEncounters' for broader queries or other 'get' tools for different resources, leaving the agent to infer usage from context alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getEpisodeOfCareByIdB

Retrieves an episode of care by its unique ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
episodeOfCareIdYesThe unique ID of the episode of care to retrieve.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action ('Retrieves') but does not disclose any behavioral traits such as read-only nature, error handling, authentication needs, or rate limits. For a retrieval tool with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without any unnecessary words. It is appropriately sized and front-loaded, making it easy to understand quickly, with zero waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (single parameter, no output schema), the description is minimally adequate but lacks completeness. It does not explain return values or error cases, and with no annotations, it misses behavioral context. However, for a simple retrieval tool, it provides the basic purpose, though more detail would be beneficial.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with the parameter 'episodeOfCareId' clearly documented. The description adds no additional meaning beyond what the schema provides, such as format examples or constraints, so it meets the baseline score of 3 for high schema coverage without extra value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Retrieves') and resource ('an episode of care'), making the purpose unambiguous. However, it does not distinguish this tool from similar sibling tools like 'getConditionById' or 'getPatientById', which follow the same pattern but for different resources, so it lacks sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention when to use it over general search tools like 'searchEpisodesOfCare' or 'generalFhirSearch', nor does it specify prerequisites such as needing a known ID, leaving usage context implied but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getMedicationByIdC

Retrieves a medication by its unique ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
medicationIdYesThe unique ID of the medication to retrieve.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden for behavioral disclosure. It states this is a retrieval operation, implying read-only behavior, but doesn't mention error handling (e.g., what happens if the ID is invalid), authentication requirements, rate limits, or response format. For a tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose without unnecessary words. Every part of the sentence ('Retrieves a medication by its unique ID') contributes directly to understanding the tool's function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description is incomplete for a retrieval tool. It doesn't explain what data is returned (e.g., medication details in FHIR format), error scenarios, or how it fits into the broader context of sibling tools like 'createMedication' or 'searchMedications'. This leaves the agent with insufficient information to use the tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the single parameter 'medicationId' clearly documented in the schema as 'The unique ID of the medication to retrieve.' The description adds no additional meaning beyond this, such as ID format examples or constraints, but the schema provides adequate baseline documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Retrieves') and resource ('a medication by its unique ID'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'getMedicationRequestById' or 'searchMedications', which would require specifying this is for retrieving medication resources specifically rather than medication requests or search results.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'searchMedications' or 'getMedicationRequestById'. It doesn't mention prerequisites (e.g., needing a valid medication ID) or contextual factors (e.g., use this for direct lookup vs. search for filtering).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getMedicationRequestByIdC

Retrieves a medication request by its unique ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
medicationRequestIdYesThe unique ID of the medication request to retrieve.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It states this is a retrieval operation, implying read-only behavior, but doesn't mention potential error cases (e.g., invalid ID, permissions), response format, or whether it returns full FHIR resources. This leaves significant gaps for a tool that likely interacts with sensitive healthcare data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that states the core purpose without unnecessary words. It's appropriately sized for a simple lookup tool and front-loads the essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description is insufficiently complete. For a healthcare data retrieval tool with no structured output documentation, it should at minimum mention what kind of data is returned (e.g., FHIR MedicationRequest resource) and any important constraints or error conditions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the single parameter 'medicationRequestId' clearly documented in the schema. The description adds no additional parameter information beyond what's in the schema, so it meets the baseline for adequate coverage without adding value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Retrieves') and resource ('medication request by its unique ID'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'searchMedicationRequests' or other 'getXById' tools, which would require mentioning this is for single-record lookup by ID rather than search queries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose this over 'searchMedicationRequests' for broader queries or other 'getXById' tools for different resource types, nor does it specify prerequisites like needing a valid ID.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getObservationByIdC

Retrieves an observation by its unique ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
observationIdYesThe unique ID of the observation to retrieve.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action ('Retrieves') but doesn't cover important aspects like whether this is a read-only operation, error handling (e.g., for invalid IDs), authentication needs, or rate limits. This leaves significant gaps for a tool that likely interacts with a database or API.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's function without unnecessary words. It's front-loaded and wastes no space, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what an 'observation' entails in this context (e.g., medical data), the return format, or potential side effects. For a tool with no structured support, more detail is needed to guide effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the parameter 'observationId' clearly documented in the schema as 'The unique ID of the observation to retrieve.' The description doesn't add any extra meaning beyond this, such as format examples or constraints, but the schema provides adequate baseline information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Retrieves') and resource ('an observation'), making the purpose unambiguous. However, it doesn't explicitly differentiate this tool from other 'getById' siblings (e.g., getConditionById, getPatientById) beyond the resource type, which is implied but not stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. For example, it doesn't mention using searchObservations for broader queries or explain that this is for fetching a single known observation by ID. The description assumes the context without explicit instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getOrganizationByIdC

Retrieves an organization by its unique ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
organizationIdYesThe unique ID of the organization to retrieve.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the basic action ('Retrieves') without addressing critical aspects: whether this is a read-only operation, authentication requirements, error handling (e.g., for invalid IDs), rate limits, or the format of returned data. For a retrieval tool with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with zero wasted words. It's front-loaded with the core action and resource, making it easy to parse quickly. Every word earns its place by conveying essential information without redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of FHIR resources and the lack of annotations and output schema, the description is incomplete. It doesn't explain what an 'organization' entails in this context (e.g., FHIR Organization resource), what data is returned, or how errors are handled. For a tool interacting with a structured healthcare data standard, more context is needed to ensure proper use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description mentions retrieving by 'unique ID,' which aligns with the single parameter 'organizationId' in the schema. Since schema description coverage is 100% (the parameter is well-described in the schema), the description adds minimal value beyond restating the schema's purpose. This meets the baseline for high schema coverage but doesn't enhance understanding of the parameter's role or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Retrieves') and resource ('an organization'), making the purpose immediately understandable. However, it doesn't differentiate this tool from its sibling 'get' tools (like getPatientById, getConditionById) beyond the resource type, missing an opportunity to explain what makes retrieving an organization distinct from retrieving other FHIR resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to use getOrganizationById instead of searchOrganizations (e.g., for known IDs vs. queries), nor does it reference other sibling tools like createOrganization or updateOrganization for related operations. This leaves the agent without context for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getPatientByIdB

Retrieves a patient resource by their unique ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
patientIdYesThe unique ID of the patient to retrieve.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It states retrieval but doesn't disclose behavioral traits like whether it's read-only, requires authentication, handles errors, or returns specific data formats. This leaves significant gaps for a tool with potential side effects or constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero wasteโ€”it directly states the tool's function without unnecessary details. It's appropriately sized and front-loaded, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (1 parameter, no output schema) and high schema coverage, the description is minimally adequate. However, without annotations or output schema, it should ideally cover more behavioral aspects like return values or error handling, but it's not severely lacking for a simple retrieval tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents the 'patientId' parameter fully. The description adds no additional meaning beyond implying retrieval by ID, which aligns with the schema. This meets the baseline of 3 when schema coverage is high.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Retrieves') and resource ('patient resource'), making the purpose evident. It specifies retrieval by 'unique ID', which distinguishes it from search tools but doesn't explicitly differentiate from other 'getById' siblings for different resource types, keeping it at 4 rather than 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'searchPatients' or 'createPatient'. It lacks context on prerequisites, such as needing a known patient ID, or exclusions, such as not being suitable for bulk retrieval.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getPractitionerByIdC

Retrieves a practitioner resource by their unique ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
practitionerIdYesThe unique ID of the practitioner to retrieve.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but only states it retrieves by ID without disclosing behavioral traits like error handling, permissions needed, or response format. It's vague and lacks essential operational details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no wasted words, clearly front-loading the core action. It's appropriately sized for a simple retrieval tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description is incomplete. It doesn't explain return values, error cases, or behavioral aspects, leaving gaps for a tool that might involve data retrieval complexities.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameter 'practitionerId' is well-documented in the schema. The description adds no additional meaning beyond what the schema provides, meeting the baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Retrieves') and resource ('practitioner resource'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'getPatientById' or 'getOrganizationById' beyond specifying the resource type, missing explicit distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as 'searchPractitioners' or 'searchPractitionersByName'. The description lacks context about prerequisites or specific use cases, offering minimal direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

searchConditionsB

Searches for conditions based on patient and other criteria. Requires a patient ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoFilter by category, e.g., "encounter-diagnosis" or "problem-list-item".
clinical-statusNoFilter by clinical status.
codeNoA code to filter by, e.g., "http://snomed.info/sct|44054006". Optional.
patientIdYesThe ID of the patient whose conditions are being searched.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It only mentions the patient ID requirement, missing critical details like whether this is a read-only operation (implied by 'searches' but not explicit), pagination behavior, error handling, or rate limits. For a search tool with zero annotation coverage, this leaves significant gaps in understanding how it behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences that are front-loaded with the core purpose. It avoids unnecessary words, though it could be slightly more structured by separating prerequisites from the main action. Overall, it's efficient with no wasted space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (search with 4 parameters), lack of annotations, and no output schema, the description is incomplete. It doesn't explain what the search returns (e.g., list of conditions, format), error cases, or behavioral constraints. For a search operation in a medical context, more detail is needed to ensure safe and effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all four parameters. The description adds minimal value beyond the schema by mentioning 'patient and other criteria' and the patient ID requirement, but doesn't provide additional context about parameter interactions or usage examples. This meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('searches') and resource ('conditions') with the scope 'based on patient and other criteria', making the purpose understandable. However, it doesn't explicitly differentiate from sibling tools like 'getConditionById' or 'generalFhirSearch', which would require more specific language about filtering capabilities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by stating 'Requires a patient ID' as a prerequisite, which provides some context for when to use it. However, it lacks explicit guidance on when to choose this tool over alternatives like 'getConditionById' (for single conditions) or 'generalFhirSearch' (for broader searches), and doesn't mention exclusions or complementary tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

searchEncountersC

Searches for encounters based on criteria like patient ID or status.

ParametersJSON Schema
NameRequiredDescriptionDefault
patientIdNoThe patient ID to search encounters for. Optional.
practitionerIdNoThe practitioner ID to search encounters for. Optional.
statusNoThe encounter status to filter by. Optional.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool searches based on criteria but doesn't cover key aspects like whether it's read-only, how results are returned (e.g., pagination, format), rate limits, or authentication needs. This leaves significant gaps for a search operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's function without unnecessary words. It's front-loaded and appropriately sized, though it could be slightly more informative without losing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (search with 3 optional parameters), no annotations, and no output schema, the description is incomplete. It covers the basic purpose but lacks details on behavior, output format, and usage context, making it adequate but with clear gaps for an agent to rely on.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description mentions criteria like patient ID or status, which aligns with some parameters, but the input schema has 100% coverage with detailed descriptions and an enum for status. Since the schema already documents all parameters well, the description adds minimal value beyond restating schema information, meeting the baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('searches') and resource ('encounters'), and mentions criteria like patient ID or status. However, it doesn't explicitly differentiate from sibling tools like 'getEncounterById' or 'generalFhirSearch', which also retrieve encounter data, so it doesn't reach the highest score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'getEncounterById' for single encounters or 'generalFhirSearch' for broader FHIR searches, nor does it specify prerequisites or exclusions, leaving the agent with minimal usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

searchEpisodesOfCareB

Searches for episodes of care based on criteria like patient ID or status.

ParametersJSON Schema
NameRequiredDescriptionDefault
managingOrganizationIdNoThe managing organization ID to filter by. Optional.
patientIdNoThe patient ID to search episodes for. Optional.
statusNoThe episode status to filter by. Optional.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool 'searches' but doesn't describe whether this is a read-only operation, how results are returned (e.g., pagination, format), or any limitations like rate limits or authentication needs. For a search tool with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's function without unnecessary words. It's front-loaded with the core purpose, making it easy to parse. Every part of the sentence earns its place by specifying the resource and key criteria.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (a search operation with 3 optional parameters), no annotations, and no output schema, the description is minimally adequate. It covers the basic purpose but lacks details on behavioral traits, usage context, and result handling. For a search tool in a FHIR context, more information on filtering logic or result structure would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters with descriptions and an enum for 'status'. The description adds minimal value by mentioning 'criteria like patient ID or status', which aligns with the schema but doesn't provide additional syntax, examples, or context beyond what's structured. Baseline 3 is appropriate when the schema handles most documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('searches') and resource ('episodes of care'), making the purpose understandable. It distinguishes from sibling tools like 'getEpisodeOfCareById' by indicating a search operation rather than a direct retrieval. However, it doesn't explicitly differentiate from other search tools like 'searchPatients' or 'generalFhirSearch', which slightly limits specificity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It mentions criteria like patient ID or status but doesn't specify prerequisites, exclusions, or compare to sibling tools such as 'generalFhirSearch' or 'getEpisodeOfCareById'. This lack of context leaves the agent without clear usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

searchMedicationRequestsC

Searches for medication requests based on criteria like patient ID or medication.

ParametersJSON Schema
NameRequiredDescriptionDefault
medicationReferenceNoThe medication reference to filter by. Optional.
patientIdNoThe patient ID to search medication requests for. Optional.
practitionerIdNoThe practitioner ID to search medication requests for. Optional.
statusNoThe medication request status to filter by. Optional.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool 'searches' but doesn't clarify if it's read-only, what permissions are needed, how results are returned (e.g., pagination, format), or any rate limits. For a search tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose without unnecessary details. It's appropriately sized for a search tool, though it could be slightly more structured by explicitly listing all criteria or usage scenarios.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a search tool with 4 parameters, no annotations, and no output schema, the description is incomplete. It lacks behavioral context (e.g., how results are handled), doesn't explain the relationship with sibling tools, and provides minimal guidance on parameter use. For a tool in this context, more comprehensive information is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so parameters are well-documented there. The description mentions 'criteria like patient ID or medication,' which loosely maps to 'patientId' and 'medicationReference' but doesn't add meaningful semantics beyond what the schema provides. Since schema coverage is high, the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Searches for medication requests based on criteria like patient ID or medication.' It specifies the verb ('searches'), resource ('medication requests'), and key criteria, making the intent unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'searchMedications' or 'getMedicationRequestById', which would be needed for a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It mentions criteria like patient ID or medication but doesn't compare it to siblings such as 'generalFhirSearch' (for broader searches) or 'getMedicationRequestById' (for specific IDs). Without this context, an agent might struggle to select the right tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

searchMedicationsB

Searches for medications based on criteria like code or name.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeNoThe medication code to search for. Optional.
formNoThe medication form to filter by. Optional.
nameNoPart of the medication name to search for. Optional.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It states it's a search operation but doesn't disclose behavioral traits like whether it's read-only (implied but not confirmed), pagination, rate limits, authentication needs, or what happens with multiple matches. For a search tool with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste. It's front-loaded with the core purpose and includes key criteria examples. Every word earns its place, making it highly concise and well-structured for quick understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (search with 3 optional parameters), no annotations, and no output schema, the description is minimally adequate. It covers the basic purpose but lacks details on behavior, output format, or usage context. It's complete enough to identify the tool but insufficient for optimal agent invocation without additional inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters (code, form, name) as optional with clear descriptions. The description adds minimal value by mentioning 'criteria like code or name' but doesn't provide additional syntax, examples, or interaction details beyond what the schema specifies. Baseline 3 is appropriate when schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Searches for') and resource ('medications'), and specifies search criteria ('based on criteria like code or name'). It distinguishes from sibling tools like 'getMedicationById' (retrieval by ID) and 'createMedication' (creation), but doesn't explicitly differentiate from 'generalFhirSearch' (a broader search tool) or other search tools like 'searchMedicationRequests' (different resource).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to prefer this over 'getMedicationById' (for known IDs) or 'generalFhirSearch' (for cross-resource searches), nor does it specify prerequisites or exclusions. Usage is implied by the search context but lacks explicit direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

searchObservationsC

Searches for observations based on criteria like patient ID or code.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeNoThe observation code to filter by. Optional.
encounterIdNoThe encounter ID to search observations for. Optional.
patientIdNoThe patient ID to search observations for. Optional.
statusNoThe observation status to filter by. Optional.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states it's a search operation but doesn't disclose behavioral traits like pagination, rate limits, authentication needs, or what happens with multiple criteria. The description is minimal and lacks essential context for a search tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no wasted words. It's front-loaded with the core purpose. However, it could be more structured by explicitly listing key use cases or constraints.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a search tool with 4 parameters, no annotations, and no output schema, the description is incomplete. It lacks details on behavior, output format, error handling, and usage context, leaving significant gaps for an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all parameters. The description adds minimal value by mentioning 'patient ID or code' as examples, but doesn't provide additional semantics beyond what's in the schema. Baseline 3 is appropriate as the schema handles parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('searches for') and resource ('observations'), and specifies criteria like patient ID or code. However, it doesn't explicitly distinguish this tool from sibling search tools (e.g., searchConditions, searchEncounters) beyond mentioning 'observations'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description mentions criteria but doesn't specify scenarios, prerequisites, or exclusions compared to other search tools or getObservationById.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

searchOrganizationsB

Searches for organizations based on criteria like name or address. Provide at least one criterion.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressNoPart of the organization's address to search for. Optional.
nameNoThe name of the organization to search for. Optional.

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It mentions the search action and a constraint ('Provide at least one criterion'), but lacks details on behavioral traits such as whether it's read-only (implied by 'Searches'), potential rate limits, authentication needs, or what the output looks like (no output schema). This leaves significant gaps for a tool with no annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose and followed by a key constraint. Every sentence earns its place with no wasted words, making it appropriately sized and efficient for understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (a search tool with 2 parameters), no annotations, and no output schema, the description is incomplete. It covers the basic purpose and a constraint but lacks details on output format, error handling, or behavioral context, which are crucial for effective use without structured data to compensate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters ('name' and 'address') as optional with clear descriptions. The description adds minimal value by listing examples ('like name or address') but doesn't provide additional semantics beyond what's in the schema, such as search behavior or format details, meeting the baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Searches for') and resource ('organizations'), and specifies the type of criteria ('based on criteria like name or address'). However, it doesn't explicitly differentiate from sibling search tools like 'searchPatients' or 'searchPractitioners' beyond the resource type, which is implied but not stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides some usage guidance with 'Provide at least one criterion,' which implies when to use it (when you have search criteria) and a constraint. However, it doesn't specify when to use this versus alternatives like 'getOrganizationById' for direct lookup or 'generalFhirSearch' for broader searches, leaving the context somewhat implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

searchPatientsC

Searches for patients based on criteria like name or birth date.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthdateNoThe patient's birth date in YYYY-MM-DD format.
familyNoThe patient's family (last) name.
genderNoThe patient's gender.
givenNoThe patient's given (first) name.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool searches based on criteria but doesn't explain key behaviors like whether it returns partial matches, supports pagination, requires authentication, or has rate limits. For a search tool with no annotations, this leaves significant gaps in understanding how it operates.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence that efficiently conveys the core purpose without unnecessary details. It's front-loaded and wastes no words, though it could be slightly more informative to improve completeness without sacrificing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description is incomplete for a search tool. It doesn't explain the return format, error handling, or how multiple criteria interact (e.g., AND/OR logic). For a tool with 4 parameters and no structured behavioral hints, more context is needed to guide effective usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description mentions criteria like 'name or birth date', which loosely maps to parameters such as 'given', 'family', and 'birthdate'. However, with 100% schema description coverage, the schema already fully documents all 4 parameters, including their types and the 'gender' enum. The description adds minimal value beyond what's in the schema, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Searches') and resource ('patients'), and mentions criteria like name or birth date. However, it doesn't explicitly distinguish this from sibling tools like 'searchPractitionersByName' or 'generalFhirSearch', which might also search for patients or other resources, leaving some ambiguity about its unique role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. For example, it doesn't mention when to choose 'searchPatients' over 'getPatientById' for retrieving patient data, or how it differs from 'generalFhirSearch' in the context of FHIR searches. This lack of context makes it harder for an agent to select the right tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

searchPractitionersC

Searches for practitioners based on various criteria like name, specialty, or identifier.

ParametersJSON Schema
NameRequiredDescriptionDefault
familyNoThe practitioner's family (last) name.
givenNoThe practitioner's given (first) name.
identifierNoAn identifier for the practitioner (e.g., NPI value).
nameNoA general name search string.
specialtyNoThe practitioner's specialty (e.g., cardiology).

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions search functionality but fails to describe key behaviors: whether it returns a list or single result, pagination handling, error conditions, or performance characteristics like rate limits. This is inadequate for a search tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose without unnecessary details. It could be slightly improved by structuring to highlight key points, but it avoids redundancy and waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a search tool with 5 parameters, no annotations, and no output schema, the description is incomplete. It lacks information on return values, error handling, and behavioral traits, which are critical for effective tool use. The schema covers parameters well, but other aspects are underspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description lists example criteria ('name, specialty, or identifier'), which aligns with some parameters in the schema. However, with 100% schema description coverage, the schema already fully documents all 5 parameters. The description adds minimal value beyond the schema, meeting the baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('searches for') and resource ('practitioners'), and specifies search criteria ('based on various criteria like name, specialty, or identifier'). However, it does not explicitly differentiate from the sibling tool 'searchPractitionersByName', which appears to be a more specific version. This omission prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, such as the sibling 'searchPractitionersByName' or 'getPractitionerById'. It lacks context about use cases, prerequisites, or exclusions, leaving the agent without direction on tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

searchPractitionersByNameB

Searches for medical practitioners based on their given name, family name, or a general name string.

ParametersJSON Schema
NameRequiredDescriptionDefault
familyNameNoThe practitioner's family (last) name.
givenNameNoThe practitioner's given (first) name.
nameNoA general name search string for the practitioner.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It describes the search functionality but lacks critical details: it doesn't specify if this is a read-only operation, how results are returned (e.g., pagination, format), error conditions, or performance characteristics like rate limits. For a search tool with zero annotation coverage, this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's function without unnecessary words. It's front-loaded with the core purpose and uses clear terminology, making it easy to parse. Every part of the sentence earns its place by specifying the resource and search parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (search operation with 3 parameters), no annotations, and no output schema, the description is minimally adequate. It covers the basic purpose but lacks details on behavior, usage context, and output format. Without annotations or output schema, the agent must rely on incomplete information, making this description just sufficient for a simple search but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, meaning the input schema already fully documents the three parameters (familyName, givenName, name) with clear descriptions. The description adds minimal value by listing the search criteria but doesn't provide additional semantics beyond what's in the schema, such as search logic (e.g., partial matches, case sensitivity) or parameter interactions. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Searches for medical practitioners based on their given name, family name, or a general name string.' It specifies the verb ('searches'), resource ('medical practitioners'), and search criteria. However, it doesn't explicitly differentiate from sibling tools like 'searchPractitioners' or 'getPractitionerById', which is why it doesn't reach a score of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools such as 'searchPractitioners' (which might have broader search capabilities) or 'getPractitionerById' (for exact ID-based retrieval), nor does it specify prerequisites or exclusions. This lack of context leaves the agent to infer usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateConditionB

Updates an existing condition. Requires the condition ID and at least one field to update.

ParametersJSON Schema
NameRequiredDescriptionDefault
clinicalStatusNoThe new clinical status of the condition.
conditionIdYesThe unique ID of the condition to update.
onsetStringNoUpdate the onset description. To remove this field, provide a `null` value.
verificationStatusNoThe new verification status of the condition.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It mentions the requirement for condition ID and at least one field, which is useful, but fails to disclose critical behavioral traits such as authentication needs, error handling, whether updates are idempotent, or what happens to unspecified fields. For a mutation tool with zero annotation coverage, this leaves significant gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core action ('Updates an existing condition') and adds necessary constraints. There's no wasted text, making it appropriately concise for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity as a mutation operation with no annotations and no output schema, the description is incomplete. It lacks details on behavioral aspects like permissions, side effects, response format, or error cases, which are crucial for an AI agent to use it correctly in a healthcare context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds minimal value by implying that at least one field beyond 'conditionId' is needed, but doesn't provide additional semantics beyond what's in the schema. This meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Updates') and resource ('an existing condition'), making the purpose immediately understandable. It distinguishes from sibling 'createCondition' by specifying it's for existing conditions, though it doesn't explicitly differentiate from other update tools like 'updateEncounter' or 'updatePatient' beyond the resource type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides some usage context by stating 'Requires the condition ID and at least one field to update,' which implies prerequisites. However, it doesn't explicitly guide when to use this tool versus alternatives like 'getConditionById' for reading or 'createCondition' for new entries, nor does it mention when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateEncounterC

Updates an existing encounter. Requires the encounter ID and the fields to update.

ParametersJSON Schema
NameRequiredDescriptionDefault
encounterIdYesThe unique ID of the encounter to update.
statusNoNew status for the encounter.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It states this is an update operation (implying mutation) and requires an encounter ID, but doesn't disclose critical behavioral traits: whether this requires specific permissions, what happens to unspecified fields (partial vs full updates), if changes are reversible, rate limits, or what the response contains. For a mutation tool with zero annotation coverage, this leaves significant gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately concise with two sentences that directly state the tool's function and requirements. There's no unnecessary verbiage, and it's front-loaded with the core purpose. However, it could be slightly more structured by explicitly listing updatable fields or separating requirements from behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given this is a mutation tool with no annotations, no output schema, and 2 parameters, the description is incomplete. It doesn't explain what happens on success/failure, what data is returned, error conditions, or behavioral constraints. For an update operation in a healthcare context (encounters), more contextual information about permissions, validation, or side effects would be expected.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents both parameters (encounterId and status with enum values). The description adds minimal value beyond the schema: it mentions 'fields to update' which hints at the status parameter, but doesn't provide additional semantic context like valid status transitions or field dependencies. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Updates') and resource ('an existing encounter'), making the purpose unambiguous. It distinguishes from sibling tools like 'createEncounter' by specifying it updates existing records rather than creating new ones. However, it doesn't specify what fields can be updated beyond the general 'fields to update' phrase.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides minimal guidance: it mentions requiring encounter ID and fields to update, but offers no explicit when-to-use rules, no alternatives (like when to use updateCondition vs updateEncounter), and no prerequisites beyond the ID requirement. It doesn't help the agent choose between this and other update tools in the sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateEpisodeOfCareC

Updates an existing episode of care. Requires the episode ID and fields to update.

ParametersJSON Schema
NameRequiredDescriptionDefault
episodeOfCareIdYesThe unique ID of the episode of care to update.
statusNoNew status for the episode of care.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states this is an update operation, implying mutation, but doesn't cover permissions, side effects, error handling, or response format. For a mutation tool with zero annotation coverage, this leaves significant gaps in understanding how it behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose. It avoids redundancy but could be slightly more informative without losing conciseness, such as hinting at the 'status' field or other updatable aspects.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given this is a mutation tool with no annotations, no output schema, and incomplete behavioral details, the description is inadequate. It should cover more about the update process, potential impacts, and what to expect in response to be complete for agent use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents both parameters. The description adds minimal value by implying 'fields to update' but doesn't elaborate beyond what the schema provides (e.g., details on 'status' enum values). Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Updates') and resource ('existing episode of care'), distinguishing it from sibling tools like 'createEpisodeOfCare' and 'getEpisodeOfCareById'. However, it doesn't specify what fields can be updated beyond the implied 'status' from the schema, making it slightly less specific than a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions 'Requires the episode ID and fields to update', which provides basic prerequisites but no guidance on when to use this tool versus alternatives like 'updateCondition' or 'updateEncounter'. It lacks explicit when/when-not scenarios or comparisons to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateMedicationRequestC

Updates an existing medication request. Requires the medication request ID and fields to update.

ParametersJSON Schema
NameRequiredDescriptionDefault
medicationRequestIdYesThe unique ID of the medication request to update.
statusNoNew status for the medication request.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It states this is an update operation (implying mutation) and mentions the required ID, but doesn't disclose critical behavioral traits like permission requirements, whether changes are reversible, side effects on related resources, rate limits, or what the response contains. For a mutation tool with zero annotation coverage, this is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that gets straight to the point without unnecessary words. It's appropriately sized for a simple update operation, though it could potentially be more front-loaded with key behavioral information given the lack of annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't explain what happens during the update, what values can be changed beyond status, error conditions, or what the tool returns. Given the complexity of healthcare data updates and the lack of structured behavioral information, more context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both parameters well-documented in the schema. The description mentions 'medication request ID and fields to update' which aligns with the schema but adds no additional semantic context beyond what's already in the structured fields. The baseline of 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Updates') and resource ('an existing medication request'), making the purpose evident. It distinguishes from sibling 'createMedicationRequest' by specifying 'existing', but doesn't explicitly differentiate from other update tools like 'updateCondition' or 'updatePatient' beyond the resource type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites beyond requiring the ID, nor does it specify scenarios where this tool is appropriate compared to other update tools or create/delete operations. No explicit when/when-not statements are present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateObservationC

Updates an existing observation. Requires the observation ID and the fields to update.

ParametersJSON Schema
NameRequiredDescriptionDefault
observationIdYesThe unique ID of the observation to update.
statusNoNew status for the observation.
valueQuantityNoNew numeric value of the observation. Optional.
valueStringNoNew string value of the observation. Optional.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It states 'Requires the observation ID' which is already in the schema, and mentions 'fields to update' but doesn't disclose critical behavioral traits: whether this is a partial or full update, what permissions are needed, if changes are reversible, what happens to unspecified fields, or what the response contains. For a mutation tool with zero annotation coverage, this is inadequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately concise at two sentences, with the core purpose stated first. However, the second sentence ('Requires the observation ID and the fields to update') adds minimal value since this information is already in the schema, making it slightly redundant rather than purely efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an update/mutation tool with no annotations and no output schema, the description is incomplete. It doesn't explain what constitutes a successful update, what errors might occur, whether there are validation rules for field combinations, or what the tool returns. Given the complexity of updating medical observations and the lack of structured behavioral information, this leaves significant gaps for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents all 4 parameters with descriptions and enum values. The description adds no additional semantic meaning beyond what's in the schema - it merely restates that parameters include 'observation ID and the fields to update.' This meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Updates') and resource ('an existing observation'), making the purpose immediately understandable. It distinguishes from sibling 'createObservation' by specifying 'existing' observation, though it doesn't differentiate from other update tools like 'updateCondition' or 'updatePatient' beyond the resource type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (like needing an existing observation ID), when not to use it (e.g., for creating new observations), or how it differs from other update tools in the sibling list. The agent must infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateOrganizationC

Updates an existing organization. Requires the organization ID and the fields to update.

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasNoAn updated list of aliases. Optional.
nameNoThe new official name of the organization. Optional.
organizationIdYesThe unique ID of the organization to update.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. While 'Updates' implies mutation, it doesn't describe what happens to unspecified fields (partial vs. full update), whether changes are reversible, what permissions are required, error conditions, or response format. For a mutation tool with zero annotation coverage, this leaves critical behavioral aspects undocumented.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise - a single sentence that gets straight to the point with no wasted words. It's front-loaded with the core purpose and includes essential requirements. Every word serves a clear purpose, making it efficient for quick comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description is insufficient. It doesn't explain what the tool returns, error handling, permission requirements, or behavioral nuances. Given the complexity of updating organizational data and the lack of structured metadata, the description should provide more complete operational context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, providing complete parameter documentation. The description adds minimal value beyond schema - it mentions 'organization ID and the fields to update' but doesn't elaborate on parameter relationships, constraints, or usage patterns. With comprehensive schema coverage, baseline 3 is appropriate as the description doesn't significantly enhance parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Updates') and resource ('an existing organization'), making the purpose immediately understandable. It distinguishes from sibling 'createOrganization' by specifying 'existing' rather than new creation. However, it doesn't differentiate from other update tools like 'updateCondition' or 'updatePatient' beyond the resource type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides minimal guidance - only stating that it requires organization ID and fields to update. It doesn't specify when to use this vs. other update tools (like updateCondition), doesn't mention prerequisites or permissions needed, and offers no alternatives or exclusions. The guidance is basic and insufficient for informed tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updatePatientB

Updates an existing patient's information. Requires the patient's ID and the fields to update.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthDateNoNew birth date in YYYY-MM-DD format.
firstNameNoNew first name for the patient.
genderNoNew gender (male, female, other, unknown).
lastNameNoNew last name for the patient.
patientIdYesThe unique ID of the patient to update.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions that it 'Updates an existing patient's information,' which implies a mutation operation, but lacks details on permissions, side effects, error handling, or response format. For a mutation tool with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two sentences that front-load the purpose and key requirements. There is no wasted text, and it efficiently communicates the essential information without redundancy. However, it could be slightly more structured by explicitly listing key behavioral aspects.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a mutation tool with no annotations and no output schema, the description is incomplete. It lacks details on behavioral traits (e.g., what happens on partial updates, error conditions), and while the schema covers parameters well, the overall context for safe and effective use is insufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with detailed descriptions for all parameters (e.g., 'New birth date in YYYY-MM-DD format'). The description adds minimal value beyond the schema by mentioning 'Requires the patient's ID and the fields to update,' which aligns with the schema's required 'patientId' and optional fields. Baseline 3 is appropriate as the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Updates') and resource ('existing patient's information'), making the purpose evident. It distinguishes itself from sibling tools like 'createPatient' by specifying it updates existing records rather than creating new ones. However, it doesn't explicitly differentiate from other update tools (e.g., 'updateCondition') beyond the patient focus.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by stating it requires a patient ID and fields to update, suggesting it's for modifying existing patients. However, it doesn't provide explicit guidance on when to use this versus alternatives like 'createPatient' for new patients or 'getPatientById' for viewing, nor does it mention any prerequisites or exclusions beyond the required ID.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updatePractitionerC

Updates an existing practitioner's information. Requires the practitioner's ID and the fields to update.

ParametersJSON Schema
NameRequiredDescriptionDefault
activeNoUpdate active status.
practitionerIdYesThe unique ID of the practitioner to update.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions that it updates information and requires specific inputs, but fails to describe important behavioral aspects such as what happens if the practitioner ID doesn't exist, whether updates are partial or complete, permission requirements, or what the response contains. This leaves significant gaps for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately concise with two clear sentences that communicate the core functionality without unnecessary words. It's front-loaded with the main purpose, though it could be slightly more structured by separating requirements from the action description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that this is a mutation tool with no annotations and no output schema, the description is insufficiently complete. It doesn't explain what happens on success or failure, what fields can be updated beyond 'active' status, or how to handle errors. For a tool that modifies data, more contextual information is needed to use it effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description mentions that it requires 'the practitioner's ID and the fields to update,' which aligns with the two parameters in the schema. However, with 100% schema description coverage, the schema already fully documents both parameters, so the description adds minimal value beyond what's already structured. It doesn't provide additional context about parameter interactions or usage examples.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Updates') and resource ('an existing practitioner's information'), making the purpose immediately understandable. It distinguishes from sibling tools like 'createPractitioner' by specifying it updates existing records rather than creating new ones, though it doesn't explicitly differentiate from other update tools like 'updatePatient' or 'updateCondition'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides minimal guidance by stating it requires the practitioner's ID and fields to update, but offers no explicit advice on when to use this tool versus alternatives. It doesn't mention prerequisites, error conditions, or when to choose this over other update tools in the sibling list, leaving the agent without contextual usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 37 tool updatesv1.0.0
    • First observedcreateCondition
    • First observedcreateEncounter
    • First observedcreateEpisodeOfCare
    • First observedcreateMedication
    • First observedcreateMedicationRequest
    • First observedcreateObservation
    • First observedcreateOrganization
    • First observedcreatePatient
    • First observedcreatePractitioner
    • First observedgeneralFhirSearch
    • First observedgetConditionById
    • First observedgetEncounterById
    • First observedgetEpisodeOfCareById
    • First observedgetMedicationById
    • First observedgetMedicationRequestById
    • First observedgetObservationById
    • First observedgetOrganizationById
    • First observedgetPatientById
    • First observedgetPractitionerById
    • First observedsearchConditions
    • First observedsearchEncounters
    • First observedsearchEpisodesOfCare
    • First observedsearchMedicationRequests
    • First observedsearchMedications
    • First observedsearchObservations
    • First observedsearchOrganizations
    • First observedsearchPatients
    • First observedsearchPractitioners
    • First observedsearchPractitionersByName
    • First observedupdateCondition
    • First observedupdateEncounter
    • First observedupdateEpisodeOfCare
    • First observedupdateMedicationRequest
    • First observedupdateObservation
    • First observedupdateOrganization
    • First observedupdatePatient
    • First observedupdatePractitioner

TDQS

B3.4/5.0

Scored across 37 tools

Disambiguation5/5

Every tool has a clearly distinct purpose with no ambiguity. Each tool targets a specific FHIR resource type (e.g., Patient, Condition, Observation) combined with a specific operation (create, get, search, update), making it easy for an agent to select the correct tool. The descriptions reinforce this clarity by specifying required parameters and use cases.

Naming Consistency5/5

Tool names follow a highly consistent verb_noun pattern throughout, such as createPatient, getPatientById, searchPatients, updatePatient. This pattern is applied uniformly across all 37 tools, with no deviations in style or convention, making the set predictable and easy to navigate.

Tool Count3/5

With 37 tools, the count feels heavy for a typical MCP server, bordering on excessive. While the tools cover multiple FHIR resources comprehensively, such a large number might overwhelm agents or lead to inefficiencies in tool selection, despite the clear organization. A more streamlined set could improve usability without sacrificing functionality.

Completeness5/5

The tool surface is complete for the FHIR domain, offering full CRUD/lifecycle coverage (create, get, search, update) for key resources like Patient, Condition, Observation, and others. There are no obvious gaps; agents can perform all essential operations without dead ends, supported by the generalFhirSearch tool for custom queries.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that provides health data from the Senechal API to LLM applications, enabling AI assistants to access, analyze, and respond to personal health information.
    GPL 3.0
  • A
    license
    Not graded
    quality
    F
    maintenance
    A Model Context Protocol server that connects AI tools to Electronic Health Records using SMART on FHIR, allowing secure searching, querying, and analysis of patient data from compatible EHRs.
    86
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that enables querying FHIR healthcare data using natural language, allowing doctors to retrieve patient information, medications, observations, and other healthcare records.
    1
    -