Medplum MCP Server
Used for managing environment variables that store Medplum server connection details and authentication credentials.
Provides linting for the MCP server codebase to ensure code quality.
Used for integration testing against a live Medplum instance to verify FHIR resource operations.
Serves as the runtime environment for the MCP server that interfaces with Medplum.
Used during development to automatically restart the server on code changes.
Used for package management and running scripts within the MCP server project.
Integrated with the test harness to process natural language queries into FHIR operations on the Medplum server.
Handles code formatting for the MCP server codebase.
Used as the implementation language for the MCP server's tools and configurations.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Medplum MCP Serversearch for patients named John Smith"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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/fhirtypesLLM Integration: OpenAI API (specifically
gpt-4oin the test harness)Testing: Jest (for integration tests), Manual E2E via test harness
Linting & Formatting: ESLint, Prettier
Environment Management:
dotenvHTTP 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
Prerequisites:
Node.js (refer to
package.jsonfor 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)
Installation:
git clone https://github.com/rkirkendall/medplum-mcp.git cd medplum-mcp npm installEnvironment Variables: Create a
.envfile 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
๐ฌ Interactive Chat Harness (Recommended)
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.tsFeatures:
๐ฃ๏ธ 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/integrationTo 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 toolscreateConditionC
Creates a new condition or diagnosis for a patient. Requires a patient ID and a condition code.
| Name | Required | Description | Default |
|---|---|---|---|
| clinicalStatus | No | The clinical status of the condition. For example: "active", "inactive", "resolved". | |
| code | Yes | The code representing the condition. Must include a coding system, code, and display text. | |
| onsetString | No | Estimated date, state, or age when the condition began (e.g., "about 3 years ago"). Optional. | |
| patientId | Yes | The ID of the patient for whom the condition is being created. | |
| recordedDate | No | The date the condition was recorded, in YYYY-MM-DD format. Optional. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| classCode | Yes | The classification of the encounter (e.g., AMB for ambulatory, IMP for inpatient, EMER for emergency). | |
| organizationId | No | The ID of the organization providing the encounter. Optional. | |
| patientId | Yes | The ID of the patient for this encounter. | |
| practitionerId | No | The ID of the practitioner involved in the encounter. Optional. | |
| status | Yes | The status of the encounter. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| managingOrganizationId | No | The ID of the organization managing this episode. Optional. | |
| patientId | Yes | The ID of the patient this episode of care is for. | |
| status | Yes | The status of the episode of care. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The code identifying the medication (e.g., RxNorm, SNOMED CT). | |
| display | No | The display name of the medication. | |
| form | No | The form of the medication (e.g., tablet, capsule, liquid). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| intent | Yes | The intent of the medication request. | |
| medicationReference | Yes | Reference to the medication being prescribed. | |
| patientId | Yes | The ID of the patient this prescription is for. | |
| practitionerId | Yes | The ID of the practitioner prescribing the medication. | |
| status | Yes | The status of the medication request. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The code representing what was observed (LOINC, SNOMED CT, etc.). | |
| encounterId | No | The encounter this observation is associated with. Optional. | |
| patientId | Yes | The ID of the patient this observation is for. | |
| status | Yes | The status of the observation. | |
| valueQuantity | No | Numeric value of the observation. Optional. | |
| valueString | No | String value of the observation. Optional. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| alias | No | A list of aliases for the organization. Optional. | |
| name | Yes | The official name of the organization. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| birthDate | Yes | The patient's birth date in YYYY-MM-DD format. | |
| firstName | Yes | The patient's first name. | |
| gender | No | The patient's gender (male, female, other, unknown). Optional. | |
| lastName | Yes | The patient's last name. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| familyName | Yes | The practitioner's family (last) name. | |
| givenName | Yes | The practitioner's given (first) name. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| queryParams | Yes | A record of query parameters, where keys are FHIR search parameters and values are their corresponding values. | |
| resourceType | Yes | The FHIR resource type to search for (e.g., 'Patient', 'Observation'). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| conditionId | Yes | The unique ID of the condition to retrieve. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| encounterId | Yes | The unique ID of the encounter to retrieve. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| episodeOfCareId | Yes | The unique ID of the episode of care to retrieve. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| medicationId | Yes | The unique ID of the medication to retrieve. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| medicationRequestId | Yes | The unique ID of the medication request to retrieve. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| observationId | Yes | The unique ID of the observation to retrieve. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| organizationId | Yes | The unique ID of the organization to retrieve. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| patientId | Yes | The unique ID of the patient to retrieve. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| practitionerId | Yes | The unique ID of the practitioner to retrieve. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Filter by category, e.g., "encounter-diagnosis" or "problem-list-item". | |
| clinical-status | No | Filter by clinical status. | |
| code | No | A code to filter by, e.g., "http://snomed.info/sct|44054006". Optional. | |
| patientId | Yes | The ID of the patient whose conditions are being searched. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| patientId | No | The patient ID to search encounters for. Optional. | |
| practitionerId | No | The practitioner ID to search encounters for. Optional. | |
| status | No | The encounter status to filter by. Optional. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| managingOrganizationId | No | The managing organization ID to filter by. Optional. | |
| patientId | No | The patient ID to search episodes for. Optional. | |
| status | No | The episode status to filter by. Optional. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| medicationReference | No | The medication reference to filter by. Optional. | |
| patientId | No | The patient ID to search medication requests for. Optional. | |
| practitionerId | No | The practitioner ID to search medication requests for. Optional. | |
| status | No | The medication request status to filter by. Optional. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | The medication code to search for. Optional. | |
| form | No | The medication form to filter by. Optional. | |
| name | No | Part of the medication name to search for. Optional. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | The observation code to filter by. Optional. | |
| encounterId | No | The encounter ID to search observations for. Optional. | |
| patientId | No | The patient ID to search observations for. Optional. | |
| status | No | The observation status to filter by. Optional. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| address | No | Part of the organization's address to search for. Optional. | |
| name | No | The name of the organization to search for. Optional. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| birthdate | No | The patient's birth date in YYYY-MM-DD format. | |
| family | No | The patient's family (last) name. | |
| gender | No | The patient's gender. | |
| given | No | The patient's given (first) name. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| family | No | The practitioner's family (last) name. | |
| given | No | The practitioner's given (first) name. | |
| identifier | No | An identifier for the practitioner (e.g., NPI value). | |
| name | No | A general name search string. | |
| specialty | No | The practitioner's specialty (e.g., cardiology). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| familyName | No | The practitioner's family (last) name. | |
| givenName | No | The practitioner's given (first) name. | |
| name | No | A general name search string for the practitioner. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| clinicalStatus | No | The new clinical status of the condition. | |
| conditionId | Yes | The unique ID of the condition to update. | |
| onsetString | No | Update the onset description. To remove this field, provide a `null` value. | |
| verificationStatus | No | The new verification status of the condition. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| encounterId | Yes | The unique ID of the encounter to update. | |
| status | No | New status for the encounter. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| episodeOfCareId | Yes | The unique ID of the episode of care to update. | |
| status | No | New status for the episode of care. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| medicationRequestId | Yes | The unique ID of the medication request to update. | |
| status | No | New status for the medication request. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| observationId | Yes | The unique ID of the observation to update. | |
| status | No | New status for the observation. | |
| valueQuantity | No | New numeric value of the observation. Optional. | |
| valueString | No | New string value of the observation. Optional. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| alias | No | An updated list of aliases. Optional. | |
| name | No | The new official name of the organization. Optional. | |
| organizationId | Yes | The unique ID of the organization to update. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| birthDate | No | New birth date in YYYY-MM-DD format. | |
| firstName | No | New first name for the patient. | |
| gender | No | New gender (male, female, other, unknown). | |
| lastName | No | New last name for the patient. | |
| patientId | Yes | The unique ID of the patient to update. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| active | No | Update active status. | |
| practitionerId | Yes | The unique ID of the practitioner to update. |
TDQS
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.
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.
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.
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.
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.
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.
37 tool updates
v1.0.0- First observed
createCondition - First observed
createEncounter - First observed
createEpisodeOfCare - First observed
createMedication - First observed
createMedicationRequest - First observed
createObservation - First observed
createOrganization - First observed
createPatient - First observed
createPractitioner - First observed
generalFhirSearch - First observed
getConditionById - First observed
getEncounterById - First observed
getEpisodeOfCareById - First observed
getMedicationById - First observed
getMedicationRequestById - First observed
getObservationById - First observed
getOrganizationById - First observed
getPatientById - First observed
getPractitionerById - First observed
searchConditions - First observed
searchEncounters - First observed
searchEpisodesOfCare - First observed
searchMedicationRequests - First observed
searchMedications - First observed
searchObservations - First observed
searchOrganizations - First observed
searchPatients - First observed
searchPractitioners - First observed
searchPractitionersByName - First observed
updateCondition - First observed
updateEncounter - First observed
updateEpisodeOfCare - First observed
updateMedicationRequest - First observed
updateObservation - First observed
updateOrganization - First observed
updatePatient - First observed
updatePractitioner
TDQS
Scored across 37 tools
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.
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.
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.
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
Related MCP Connectors
- mcpOAuthcom.medplum
Securely access and manage FHIR healthcare data stored in Medplum.
Hosted MCP server for AI-driven data ops. Create apps, manage schemas, and CRUD structured data.
Hosted MCP server exposing US hospital procedure cost data to AI assistants
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA 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
- AlicenseNot gradedqualityFmaintenanceA 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.86MIT
- FlicenseNot gradedqualityDmaintenanceA 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-
- AlicenseAqualityBmaintenanceA Model Context Protocol server that enables seamless interaction between LLM-based agents and Apple Health data, allowing users to query, analyze, and manage health records through natural language commands.7264MIT