Skip to main content
Glama
ophydami

athenahealth MCP Server

by ophydami

athenahealth MCP Server

A Model Context Protocol (MCP) server that provides seamless integration with athenahealth's clinical data and services for AI-powered clinical decision support.

๐Ÿ“Š Tool Status Overview

Status

Count

Percentage

โœ… Working in Sandbox

5

38%

โŒ Not Working (Sandbox Limitations)

8

62%

๐Ÿงช Total Tools

13

100%

Related MCP server: Epic Healthcare MCP Server

Features

๐Ÿฅ Clinical Decision Support

  • Patient Data Access: Comprehensive patient information including demographics, medical history, and clinical data

  • Prescription Management: Medication history, drug interaction checking, and prescription creation (Production only)

  • Provider Management: Healthcare provider directory and practice information

  • Clinical Alerts: Real-time clinical decision support alerts and warnings (Production only)

  • Lab Results: Access to laboratory results and diagnostic reports (Production only)

  • Vital Signs: Patient vital signs history and trending (Production only)

๐Ÿ”’ HIPAA Compliance

  • Data Sanitization: Automatic sanitization of sensitive healthcare data in logs

  • Audit Logging: Comprehensive audit trails for all data access and modifications

  • Access Controls: Role-based access controls and authentication

  • Data Encryption: Secure data transmission and storage

๐Ÿš€ AI-Powered Workflows

  • Clinical Assessment: AI-powered clinical assessment prompts

  • Medication Review: Automated medication review and optimization (handles sandbox limitations)

  • Care Plan Generation: Evidence-based care plan development

  • Clinical Summarization: Comprehensive patient clinical summaries

Installation

Prerequisites

  • Node.js 18.0.0 or later

  • athenahealth Developer Account and API credentials

  • TypeScript 5.0.0 or later

Quick Start

Option 1: Use with Claude Desktop (MCP)

  1. Clone the repository

    git clone https://github.com/ophydami/athenahealth-mcp-server.git
    cd athenahealth-mcp-server
  2. Install dependencies

    npm install
  3. Configure environment variables

    cp config/environment.example .env
    # Edit .env with your athenahealth API credentials
  4. Build the project

    npm run build
  5. Start the MCP server

    npm start
  6. Configure Claude Desktop

    claude mcp add athenahealth-mcp

Option 2: Use with n8n (Webhook Bridge)

If you prefer using n8n for workflow automation instead of Claude Desktop, you can use the webhook bridge:

  1. Complete steps 1-4 above

  2. Start the webhook bridge server

    npm run webhook-bridge

    The server will start on http://localhost:3000 (configurable via WEBHOOK_PORT env variable)

  3. Use in n8n workflows

    In your n8n workflow, add an HTTP Request node with:

    • Method: GET or POST (depending on endpoint)

    • URL: http://localhost:3000/[endpoint]

    • Authentication: None (handled by environment variables)

    • Body: JSON (for POST requests)

    Example n8n HTTP Request nodes:

    List Departments:

    Method: GET
    URL: http://localhost:3000/departments

    Search Patients:

    Method: POST
    URL: http://localhost:3000/patients/search
    Body: {
      "lastname": "Smith",
      "firstname": "John"
    }

    Create Patient:

    Method: POST
    URL: http://localhost:3000/patients
    Body: {
      "firstname": "John",
      "lastname": "Test",
      "dob": "05/20/1985",
      "sex": "M",
      "department_id": "1",
      "email": "john.test@example.com",
      "mobile_phone": "6179876543"
    }

    Get Clinical Summary:

    Method: GET
    URL: http://localhost:3000/patients/134/clinical?include_allergies=true&include_prescriptions=true
  4. View available endpoints

    Navigate to http://localhost:3000/ in your browser to see all available endpoints and their documentation.

Configuration

Environment Variables

Variable

Description

Required

Default

ATHENA_CLIENT_ID

athenahealth API Client ID

Yes

-

ATHENA_CLIENT_SECRET

athenahealth API Client Secret

Yes

-

ATHENA_BASE_URL

athenahealth API Base URL

Yes

-

ATHENA_VERSION

API Version

No

v1

ATHENA_PRACTICE_ID

Practice ID

Yes

-

WEBHOOK_PORT

Webhook bridge server port (n8n mode)

No

3000

NODE_ENV

Environment

No

development

LOG_LEVEL

Log Level

No

info

athenahealth API Setup

  1. Create Developer Account

  2. Create API Application

    • Create a new application in the developer portal

    • Note down your Client ID and Client Secret

    • Configure OAuth 2.0 settings

  3. Get Practice ID

    • Contact athenahealth support to get your Practice ID

    • This is required for API access

MCP Tools Reference

โœ… Working in Sandbox (5 tools)

1. list_departments

Status: โœ… Fully Working Description: Lists all departments in the athenahealth practice

Parameters: None required

Example:

// List all departments
const departments = await mcpClient.callTool('list_departments', {});

2. list_providers

Status: โœ… Fully Working Description: Lists all healthcare providers in the practice

Parameters:

  • name (optional) - Filter by provider name

  • specialty (optional) - Filter by specialty

  • limit (optional) - Maximum results (default: 50)

Example:

// List all providers
const providers = await mcpClient.callTool('list_providers', {
  specialty: 'Cardiology',
  limit: 20
});

3. search_patients

Status: โœ… Fully Working Description: Search for patients by name, DOB, phone, or email

Parameters (at least ONE required):

  • firstname - Patient first name

  • lastname - Patient last name

  • dob - Date of birth (MM/DD/YYYY)

  • phone - Phone number

  • email - Email address

  • limit (optional) - Maximum results (default: 10)

Example:

// Search for patients by name
const patients = await mcpClient.callTool('search_patients', {
  firstname: 'John',
  lastname: 'Smith',
  limit: 10
});

4. create_patient

Status: โœ… Fully Working Description: Register a new patient in the athenahealth system

Parameters (required):

  • firstname - Patient first name

  • lastname - Patient last name

  • dob - Date of birth (MM/DD/YYYY)

  • sex - Sex (M or F)

  • department_id - Primary department ID

Parameters (optional):

  • email, mobile_phone, home_phone, address1, city, state, zip

  • guarantor_firstname, guarantor_lastname, guarantor_dob, guarantor_relationship

Important:

  • โœ… Valid North American phone numbers required (not 555 area code)

  • โœ… Date format: MM/DD/YYYY or YYYY-MM-DD

Example:

const patient = await mcpClient.callTool('create_patient', {
  firstname: 'John',
  lastname: 'Test',
  dob: '05/20/1985',
  sex: 'M',
  department_id: '1',
  email: 'john.test@example.com',
  mobile_phone: '6179876543',
  address1: '123 Main St',
  city: 'Boston',
  state: 'MA',
  zip: '02101'
});

5. check_appointment_availability

Status: โœ… Working (returns empty in sandbox) Description: Check available appointment slots for a department and date range

Parameters:

  • department_id (required) - Department ID

  • start_date (required) - Start date (YYYY-MM-DD)

  • end_date (required) - End date (YYYY-MM-DD)

  • provider_id (optional) - Specific provider ID

  • appointment_type (optional) - Type of appointment

Note: Returns empty array in sandbox (no scheduling templates configured)

Example:

const availability = await mcpClient.callTool('check_appointment_availability', {
  department_id: '1',
  start_date: '2025-11-01',
  end_date: '2025-11-07',
  provider_id: '23'
});

โŒ Not Working in Sandbox (8 tools)

These tools require production environment with full clinical access.

6. create_appointment

Status: โŒ Not Working - 404 Error Reason: Endpoint not available in sandbox, requires scheduling templates

7. check_drug_interactions

Status: โŒ Not Working - Tool Execution Failed Reason: Requires clinical endpoints and drug interaction database

8. get_clinical_summary

Status: โŒ Not Working - Clinical Endpoints Unavailable Reason: Clinical data endpoints (allergies, prescriptions, problems, vitals, labs, alerts) return 404

9. create_prescription

Status: โŒ Not Working - 404 Error Reason: E-prescribing endpoint not available in sandbox

10. get_patient_encounters

Status: โŒ Not Working - 404 Error Reason: Encounter endpoints not available in sandbox environment

11. get_encounter

Status: โŒ Not Working - 404 Error Reason: Encounter endpoints not available in sandbox environment

12. create_encounter

Status: โŒ Not Working - 404 Error Reason: Encounter creation requires production API with clinical documentation access

13. update_encounter

Status: โŒ Not Working - 404 Error Reason: Encounter endpoints not available in sandbox environment

Note: See athenahealth-mcp-tools-readme.md for detailed information on production requirements for these tools.


MCP Prompts

clinical_assessment

Generate clinical assessment prompts with patient data

Parameters:

  • patient_id (required)

  • chief_complaint (optional)

medication_review

Generate medication review prompts (handles sandbox limitations gracefully)

Parameters:

  • patient_id (required)

care_plan

Generate care plan development prompts

Parameters:

  • patient_id (required)

  • diagnosis (optional)


Working Sample Workflow (Sandbox)

// Step 1: List departments
const departments = await mcpClient.callTool('list_departments', {});
const departmentId = departments[0].departmentid;

// Step 2: Create a test patient
const patient = await mcpClient.callTool('create_patient', {
  firstname: 'John',
  lastname: 'Test',
  dob: '05/20/1985',
  sex: 'M',
  department_id: departmentId,
  email: 'john.test@example.com',
  mobile_phone: '6179876543',
  address1: '123 Main St',
  city: 'Boston',
  state: 'MA',
  zip: '02101'
});
// Returns: { patientid: "61378" }

// Step 3: Search for the patient
const searchResults = await mcpClient.callTool('search_patients', {
  lastname: 'Test',
  dob: '05/20/1985'
});

// Step 4: List providers
const providers = await mcpClient.callTool('list_providers', {
  specialty: 'Family Medicine'
});

โš ๏ธ Important Notes

Sandbox vs Production

Sandbox Environment:

  • โœ… Patient registration workflows

  • โœ… Demographics and search

  • โœ… Department and provider listing

  • โœ… Appointment availability checking (returns empty)

  • โŒ Clinical data (allergies, prescriptions, problems, vitals, labs)

  • โŒ Encounter management (get, create, update)

  • โŒ Appointment creation

  • โŒ E-prescribing

  • โŒ Drug interaction checking

Production Environment: Requires:

  • Full athenahealth production API access

  • Clinical endpoints enabled (allergies, prescriptions, problems, vitals, labs, alerts)

  • Encounter documentation access

  • E-prescribing licenses and integrations

  • Scheduling templates configured

  • Provider credentials (NPI, DEA numbers)

  • HIPAA compliance measures

Phone Number Requirements

  • โœ… MUST use valid North American area codes (617, 212, 415, etc.)

  • โŒ CANNOT use 555 (reserved for fictional use)

Date Formats

  • โœ… MM/DD/YYYY (e.g., 05/20/1985)

  • โœ… YYYY-MM-DD (e.g., 1985-05-20)


Security and HIPAA Compliance

Data Protection

  • All sensitive healthcare data is automatically sanitized in logs

  • Patient identifiers are redacted in audit logs

  • API communications use form-urlencoded for POST requests

  • Access controls prevent unauthorized data access

Audit Logging

  • All data access is logged with timestamps

  • User actions are tracked for compliance

  • Failed access attempts are recorded

  • Audit logs are stored separately with extended retention

Best Practices

  1. Environment Security: Store credentials in environment variables, never in code

  2. Access Controls: Implement role-based access controls

  3. Data Minimization: Only request necessary data

  4. Regular Audits: Review audit logs regularly

  5. Secure Deployment: Use secure deployment practices


API Rate Limits

athenahealth API has rate limits:

  • Production: 1000 requests per minute

  • Sandbox: 100 requests per minute

The server automatically handles rate limiting and implements exponential backoff for failed requests.


Error Handling

The server provides comprehensive error handling:

  • Authentication Errors: Automatic token refresh

  • API Errors: Structured error responses with details

  • Network Errors: Retry logic with exponential backoff

  • Validation Errors: Input validation with detailed messages

  • Sandbox Limitations: Graceful handling with informative error messages


Development

Running in Development Mode

npm run dev

Running Tests

npm test

Build Project

npm run build

Architecture

The codebase is modularized for maintainability:

MCP Server Layer:

API Client Layer (Service-Oriented):


Documentation


Support

For support and questions:


Changelog

Version 1.2.0

  • Added encounter management functionality (4 new tools: get_patient_encounters, get_encounter, create_encounter, update_encounter)

  • Refactored athenahealth client into service-oriented architecture

    • Separated into base-client, patient-service, clinical-service, encounter-service, scheduling-service

    • Reduced file sizes from 800 lines to 100-220 lines per module

  • Total tools increased from 9 to 13

  • Documented encounter endpoints return 404 in sandbox (require production)

  • Enhanced architecture documentation with service layer breakdown

Version 1.1.0

  • Refactored codebase into modular architecture

  • Fixed form-urlencoded POST request formatting for all endpoints

  • Added graceful handling of sandbox limitations

  • Enhanced medication_review prompt with sandbox support

  • Improved error messages with detailed API responses

  • Created comprehensive tool reference documentation

Version 1.0.0

  • Initial release

  • Basic MCP server implementation

  • Patient data access

  • Prescription management

  • Clinical decision support prompts

  • HIPAA-compliant logging

  • OAuth 2.0 authentication


License

MIT License - see LICENSE file for details.

Copyright (c) 2025 Gboyega Ofi (gboyega.ofi@gmail.com)


โš ๏ธ Important: This software handles sensitive healthcare data. Ensure you comply with all applicable healthcare regulations including HIPAA, HITECH, and other relevant standards in your jurisdiction.

๐Ÿ“– For detailed tool specifications and production requirements, see athenahealth-mcp-tools-readme.md

Available Tools

14 tools
acknowledge_alertC

Acknowledge a clinical alert

ParametersJSON Schema
NameRequiredDescriptionDefault
alert_idYesAlert ID
acknowledged_byYesUser acknowledging the alert

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Acknowledge' implies a state change (likely marking an alert as acknowledged), but the description doesn't specify if this is a mutation, what permissions are needed, whether it's reversible, or what the response looks like. For a clinical tool with zero annotation coverage, this is a significant gap in safety and operational context.

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

Conciseness5/5

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

The description is a single, efficient sentence with zero wasteโ€”it directly states the tool's purpose without fluff. It's appropriately sized for a simple tool and front-loaded, making it easy for an AI agent to parse quickly.

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

Completeness2/5

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

Given the clinical context, no annotations, and no output schema, the description is incomplete. It lacks details on behavioral traits (e.g., mutation effects, error handling), return values, or clinical workflow integration. For a tool that likely modifies alert states in a healthcare setting, more context is needed to ensure safe and correct usage by an AI agent.

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

Parameters3/5

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

Schema description coverage is 100%, with both parameters ('alert_id' and 'acknowledged_by') documented in the schema. The description adds no additional meaning beyond the schema, such as format examples or clinical context (e.g., alert IDs from prior alerts, user identifiers). Baseline 3 is appropriate since the schema handles parameter documentation adequately.

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

Purpose4/5

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

The description clearly states the verb ('acknowledge') and resource ('clinical alert'), making the purpose immediately understandable. It doesn't differentiate from sibling tools, but all siblings are distinct operations (create, get, list, update) rather than alternative alert management tools, so differentiation isn't needed. The purpose is specific but could be more detailed about what 'acknowledge' entails.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. There are no explicit sibling tools for alert management, but it doesn't mention prerequisites (e.g., after receiving an alert), exclusions, or context for acknowledgment. Usage is implied by the name but not elaborated, leaving gaps for an AI agent.

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

check_appointment_availabilityB

Check available appointment slots for a department and date range

ParametersJSON Schema
NameRequiredDescriptionDefault
department_idYesDepartment ID
provider_idNoProvider ID (optional - leave empty to check all providers)
appointment_typeNoAppointment type (optional)
start_dateYesStart date (YYYY-MM-DD)
end_dateYesEnd date (YYYY-MM-DD)

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states what the tool does but lacks details on permissions needed, rate limits, whether results are real-time or cached, pagination, or error handling. For a read operation with no annotation coverage, this is a significant gap in transparency.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core purpose without unnecessary words. Every part of the sentence earns its place by specifying the action, resource, and key constraints.

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

Completeness3/5

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

Given 5 parameters with full schema coverage but no annotations or output schema, the description is minimally adequate. It covers the basic purpose but lacks behavioral context (e.g., response format, limitations), which is important for a tool with multiple optional parameters and no structured output documentation.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 5 parameters thoroughly. The description adds no additional parameter semantics beyond implying date-range and department filtering, which is already covered in the schema. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the verb 'check' and the resource 'available appointment slots', specifying the scope with 'for a department and date range'. It distinguishes from siblings like 'create_appointment' or 'list_departments', but doesn't explicitly differentiate from similar tools (e.g., if there were a 'search_appointments' sibling).

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

Usage Guidelines3/5

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

The description implies usage for finding available slots before creating appointments, but doesn't explicitly state when to use this vs. alternatives like 'create_appointment' or other scheduling tools. No exclusions or prerequisites are mentioned, leaving usage context somewhat open-ended.

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

check_drug_interactionsC

Check for drug interactions for a patient

ParametersJSON Schema
NameRequiredDescriptionDefault
patient_idYesPatient ID
medicationsYesList of medication names or RxNorm codes

TDQS

C2.6/5.0
Behavior2/5

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

With no annotations, the description carries full burden but only states the basic action without behavioral details. It doesn't disclose critical traits like whether this is a read-only check (likely, but not confirmed), if it requires specific permissions, potential rate limits, or what happens on errors (e.g., invalid patient ID). This leaves gaps for safe agent invocation.

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

Conciseness4/5

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

The description is a single, efficient sentence that directly states the tool's purpose without fluff. It's appropriately sized for a simple tool, though it could be slightly more informative (e.g., adding context on output) without losing conciseness.

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

Completeness2/5

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

Given no annotations and no output schema, the description is incomplete for a tool that likely returns critical clinical data. It doesn't explain what the check entails (e.g., interaction severity, recommendations) or the return format, leaving the agent uncertain about behavioral outcomes. For a 2-parameter tool with high schema coverage, it compensates poorly for missing structured context.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters (patient_id and medications). The description adds no extra meaning beyond implying the parameters are used together for interaction checking, but doesn't clarify semantics like medication format expectations (e.g., brand vs. generic names) beyond the schema's 'medication names or RxNorm codes'.

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

Purpose3/5

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

The description 'Check for drug interactions for a patient' clearly states the action (check) and resource (drug interactions), but it's vague about scope (e.g., severity levels, interaction types) and doesn't differentiate from potential siblings like 'create_prescription' or 'get_clinical_summary' that might involve medication safety. It avoids tautology by not restating the tool name, but lacks specificity.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives (e.g., 'create_prescription' for prescribing, 'get_clinical_summary' for broader patient data). The description implies usage in medication safety contexts but offers no explicit when/when-not rules or prerequisites, such as needing patient consent or prior medication lists.

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

create_appointmentC

Create a new appointment for a patient

ParametersJSON Schema
NameRequiredDescriptionDefault
patient_idYesPatient ID
provider_idYesProvider ID
department_idYesDepartment ID
appointment_typeYesAppointment type
dateYesAppointment date (YYYY-MM-DD)
start_timeYesStart time (HH:MM)
durationNoDuration in minutes (optional)
reasonNoReason for visit (optional)
notesNoAppointment notes (optional)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states 'Create a new appointment' which implies a write operation, but doesn't address permissions, side effects, error conditions, or what happens on success. 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.

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded with the essential information.

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

Completeness2/5

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

For a mutation tool with 9 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain what happens after creation, error handling, or how this differs from similar tools. The agent would need to guess about behavioral aspects and usage context.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 9 parameters thoroughly. The description adds no additional parameter information beyond what's in the schema, meeting the baseline expectation but not providing extra value.

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

Purpose4/5

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

The description clearly states the verb 'Create' and the resource 'appointment for a patient', making the purpose specific and understandable. However, it doesn't differentiate from sibling tools like 'create_encounter' or 'check_appointment_availability', which could cause confusion in tool selection.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'create_encounter' or 'check_appointment_availability'. There's no mention of prerequisites, constraints, or typical use cases, leaving the agent without contextual usage information.

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

create_encounterC

Create a new encounter for a patient

ParametersJSON Schema
NameRequiredDescriptionDefault
patient_idYesPatient ID
department_idYesDepartment ID
provider_idNoProvider ID (optional)
encounter_dateYesEncounter date (YYYY-MM-DD)
encounter_typeNoType of encounter (optional)
chief_complaintNoChief complaint (optional)
appointment_idNoAssociated appointment ID (optional)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. While 'Create' implies a write operation, it doesn't mention permission requirements, whether the encounter becomes immediately active, what happens on duplicate creation, 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.

Conciseness5/5

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

The description is a single, efficient sentence that states the core purpose without unnecessary words. It's appropriately sized for a tool with good schema documentation and gets straight to the point.

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

Completeness2/5

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

For a mutation tool with 7 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain what constitutes a successful creation, what data is returned, or how this tool relates to other encounter management tools in the sibling list. The schema handles parameter documentation, but behavioral context is missing.

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

Parameters3/5

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

The schema description coverage is 100%, so all parameters are documented in the schema. The description adds no additional parameter information beyond what's already in the schema, maintaining the baseline score of 3 where the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the verb ('Create') and resource ('new encounter for a patient'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'create_appointment' or 'create_patient' by specifying what makes an encounter distinct in this medical context.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'create_appointment' or 'update_encounter', nor does it mention prerequisites such as needing an existing patient record. It simply states what the tool does without contextual usage information.

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

create_patientC

Register a new patient in the system

ParametersJSON Schema
NameRequiredDescriptionDefault
firstnameYesPatient first name
lastnameYesPatient last name
dobYesDate of birth (MM/DD/YYYY or YYYY-MM-DD)
sexYesSex (M or F)
department_idYesPrimary department ID
emailNoEmail address (optional)
mobile_phoneNoMobile phone number (optional)
home_phoneNoHome phone number (optional)
address1NoStreet address (optional)
cityNoCity (optional)
stateNoState (optional)
zipNoZIP code (optional)
guarantor_firstnameNoGuarantor first name (optional)
guarantor_lastnameNoGuarantor last name (optional)
guarantor_dobNoGuarantor date of birth (optional)
guarantor_relationshipNoRelationship to patient: 1=Self, 2=Spouse, 3=Child, 4=Other (optional)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. 'Register a new patient' implies a write operation, but it doesn't specify permissions required, whether duplicates are allowed, what happens on success (e.g., returns patient ID), or error handling. This is a significant gap for a mutation tool with 16 parameters.

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

Conciseness5/5

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

The description is a single, efficient sentence with zero wasteโ€”'Register a new patient in the system' is front-loaded and directly conveys the core action. Every word earns its place, making it easy for an agent to parse quickly without unnecessary elaboration.

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

Completeness2/5

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

For a complex mutation tool with 16 parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain what the tool returns (e.g., patient ID), error conditions, or dependencies like valid department_id. Given the richness needed for such a tool, this leaves major gaps in understanding.

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

Parameters3/5

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

Schema description coverage is 100%, with all parameters well-documented in the schema (e.g., dob formats, optional fields, guarantor relationship codes). The description adds no additional parameter semantics beyond implying patient registration, so it meets the baseline of 3 where the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the action ('Register') and resource ('new patient in the system'), making the purpose immediately understandable. It distinguishes from siblings like 'search_patients' or 'get_patient_encounters' by focusing on creation rather than retrieval. However, it doesn't specify what 'register' entails beyond creation, missing some nuance.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'search_patients' for existing patients or 'create_appointment' for scheduling. There's no mention of prerequisites, such as needing department_id from 'list_departments', or exclusions, 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.

create_prescriptionC

Create a new prescription for a patient

ParametersJSON Schema
NameRequiredDescriptionDefault
patient_idYesPatient ID
medication_nameYesMedication name
dosageYesDosage (e.g., "10mg")
routeYesRoute of administration (e.g., "oral")
frequencyYesFrequency (e.g., "twice daily")
quantityYesQuantity to dispense
refillsYesNumber of refills
days_supplyYesDays supply
pharmacy_idNoPharmacy ID (optional)
notesNoAdditional notes (optional)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'Create' which implies a write operation, but fails to specify critical details like required permissions, whether it's idempotent, error handling, or what the response contains (e.g., prescription ID). This leaves significant gaps for an AI agent.

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

Conciseness5/5

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

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

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

Completeness2/5

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

For a tool with 10 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain behavioral aspects like side effects, authorization needs, or return values, leaving the AI agent with incomplete context for safe and effective use.

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

Parameters3/5

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

The schema description coverage is 100%, with all parameters clearly documented in the schema itself (e.g., 'dosage' described as 'Dosage (e.g., "10mg")'). The description adds no additional parameter information beyond what's in the schema, so it meets the baseline score of 3 for high schema coverage.

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

Purpose4/5

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

The description clearly states the verb ('Create') and resource ('a new prescription for a patient'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'create_appointment' or 'create_patient' beyond the resource name, which is why it doesn't reach a score of 5.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'check_drug_interactions' or 'create_encounter', nor does it mention prerequisites such as needing an existing patient record. It simply states what the tool does without context for selection.

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

get_clinical_summaryC

Get a comprehensive clinical summary for a patient

ParametersJSON Schema
NameRequiredDescriptionDefault
patient_idYesPatient ID
include_allergiesNoInclude allergies
include_problemsNoInclude problems
include_prescriptionsNoInclude prescriptions
include_vitalsNoInclude vitals
include_labsNoInclude lab results
include_alertsNoInclude clinical alerts

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. While 'Get' implies a read-only operation, it doesn't specify authentication requirements, rate limits, error conditions, or what constitutes a 'comprehensive clinical summary' (e.g., format, data sources, or time range). For a tool with 7 parameters and no annotation coverage, this is a significant gap in transparency.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core purpose ('Get a comprehensive clinical summary for a patient') with zero wasted words. It's appropriately sized for the tool's complexity, making it easy for an agent to parse quickly without unnecessary elaboration.

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

Completeness2/5

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

Given the tool's complexity (7 parameters, no output schema, and no annotations), the description is incomplete. It lacks details on behavioral aspects (e.g., permissions, errors), output format, or how parameter choices impact the summary. While schema coverage is high, the absence of annotations and output schema means the description should compensate more to guide effective tool use.

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

Parameters3/5

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

Schema description coverage is 100%, with all parameters clearly documented in the input schema (e.g., 'patient_id' as Patient ID, booleans for including allergies, problems, etc.). The description adds no additional parameter semantics beyond what the schema provides, such as explaining how these inclusions affect the summary output. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the verb ('Get') and resource ('comprehensive clinical summary for a patient'), making the purpose specific and understandable. However, it doesn't explicitly differentiate this tool from sibling tools like 'get_encounter' or 'get_patient_encounters', which might also retrieve patient-related clinical data, leaving some ambiguity about scope boundaries.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., patient must exist), exclusions, or comparisons to sibling tools like 'get_encounter' or 'search_patients', leaving the agent to infer usage context solely from the tool name and parameters.

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

get_encounterC

Get details of a specific encounter

ParametersJSON Schema
NameRequiredDescriptionDefault
encounter_idYesEncounter ID

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states it 'gets details' but doesn't specify whether this is a read-only operation, what permissions are required, error handling, or response format. For a 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.

Conciseness5/5

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

The description is a single, clear sentence with zero waste. It's appropriately sized for a simple retrieval tool and front-loads the essential action. Every word earns its place without redundancy.

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

Completeness2/5

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

Given no annotations and no output schema, the description is incomplete for a tool that likely returns detailed encounter data. It doesn't explain what 'details' include, potential errors, or response structure. For a healthcare context with siblings like 'get_clinical_summary', more context is needed to distinguish functionality.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents the 'encounter_id' parameter. The description adds no additional meaning beyond what the schema providesโ€”it doesn't clarify format, source, or constraints for the ID. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the verb 'Get' and the resource 'details of a specific encounter', making the purpose unambiguous. It distinguishes from siblings like 'get_patient_encounters' (which lists multiple encounters) by specifying retrieval of a single encounter. However, it doesn't explicitly mention what details are included, which prevents a perfect score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an encounter ID), exclusions, or comparisons to siblings like 'get_clinical_summary' or 'get_patient_encounters'. The agent must infer usage from the name and context alone.

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

get_patient_encountersC

Get all encounters for a patient

ParametersJSON Schema
NameRequiredDescriptionDefault
patient_idYesPatient ID
department_idNoFilter by department ID (optional)
start_dateNoStart date filter (YYYY-MM-DD) (optional)
end_dateNoEnd date filter (YYYY-MM-DD) (optional)
statusNoFilter by status: OPEN, CLOSED, SIGNED (optional)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states it 'gets' data (implying read-only), but doesn't address permissions needed, rate limits, pagination, error conditions, or what 'all encounters' means in practice (e.g., historical limits). For a tool with 5 parameters and no annotation coverage, this leaves significant behavioral gaps.

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

Conciseness4/5

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

The description is a single, clear sentence that efficiently conveys the core function. It's appropriately sized for a straightforward retrieval tool and front-loads the essential information. There's no wasted verbiage, though it could benefit from slightly more detail given the lack of annotations.

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

Completeness2/5

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

For a tool with 5 parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain what constitutes an 'encounter', the format or structure of returned data, pagination behavior, error handling, or authentication requirements. The description alone leaves too many operational questions unanswered for effective agent use.

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

Parameters3/5

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

Schema description coverage is 100%, so all parameters are documented in the schema. The description adds no additional parameter semantics beyond implying filtering capability through 'for a patient'. It doesn't explain relationships between parameters (e.g., that department_id, dates, and status are filters applied to the patient's encounters) or provide usage examples. Baseline 3 is appropriate when schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the action ('Get') and resource ('all encounters for a patient'), making the purpose immediately understandable. It distinguishes from siblings like 'get_encounter' (singular) and 'create_encounter', but doesn't explicitly differentiate from 'get_clinical_summary' which might include encounter data. The description is specific but could be more precise about scope.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose this over 'get_encounter' (singular), 'get_clinical_summary', or 'search_patients' which might retrieve similar data. There are no prerequisites, exclusions, or context about appropriate use cases beyond the basic function.

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

list_departmentsB

List all departments in the practice

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but offers minimal behavioral insight. It implies a read operation ('List') but doesn't disclose permissions, rate limits, pagination, or return format. This is inadequate for a 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.

Conciseness5/5

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

The description is a single, clear sentence with zero waste. It's front-loaded with the core action and resource, making it highly efficient and easy to parse.

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

Completeness2/5

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

Given no annotations, no output schema, and a simple list operation, the description is incomplete. It lacks details on return values (e.g., department fields), behavioral constraints, or integration context, leaving significant gaps for an agent to use it effectively.

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

Parameters4/5

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

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't mention parameters, aligning with the schema. Baseline is 4 for zero parameters, as it avoids unnecessary details.

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

Purpose4/5

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

The description clearly states the verb ('List') and resource ('all departments in the practice'), making the purpose unambiguous. However, it doesn't differentiate from sibling tools like 'list_providers' or 'search_patients' beyond the resource name, so it's not fully sibling-aware.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context (e.g., for administrative tasks), or comparisons to siblings like 'list_providers' or 'search_patients', leaving usage entirely implicit.

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

list_providersC

List all healthcare providers in the practice

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results
nameNoFilter by provider name
specialtyNoFilter by specialty

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states it's a list operation, implying read-only behavior, but doesn't cover aspects like pagination, rate limits, authentication needs, or what 'all' entails (e.g., active only, includes archived). This leaves significant gaps for a tool with parameters.

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

Conciseness5/5

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

The description is a single, direct sentence that efficiently conveys the core purpose without any fluff or redundancy. 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.

Completeness2/5

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

Given the tool has parameters and no output schema, the description is too minimal. It doesn't explain return values, filtering behavior, or how parameters interact (e.g., if 'name' and 'specialty' are combined). With no annotations and incomplete behavioral context, it falls short for effective agent use.

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

Parameters3/5

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

The input schema has 100% description coverage, fully documenting the three parameters (limit, name, specialty) with clear descriptions. The tool description adds no additional parameter information beyond what the schema provides, so it meets the baseline for high schema coverage.

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

Purpose4/5

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

The description clearly states the action ('List') and resource ('healthcare providers in the practice'), making the purpose immediately understandable. However, it doesn't distinguish this tool from potential sibling tools like 'list_departments' or 'search_patients' that might also list entities, missing full differentiation.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'search_patients' or 'list_departments', nor does it mention any prerequisites or exclusions. It's a basic statement of function without contextual usage advice.

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

search_patientsB

Search for patients by name, DOB, phone, or email

ParametersJSON Schema
NameRequiredDescriptionDefault
firstnameNoPatient first name
lastnameNoPatient last name
dobNoDate of birth (YYYY-MM-DD)
phoneNoPhone number
emailNoEmail address
limitNoMaximum number of results

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool searches but doesn't clarify if it's read-only, requires authentication, has rate limits, returns partial matches, or handles errors. For a search tool with zero annotation coverage, this leaves critical behavioral traits unspecified.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core functionality. It wastes no words and directly communicates the tool's purpose without redundancy or fluff, making it easy for an agent to parse quickly.

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

Completeness3/5

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

Given the tool's moderate complexity (6 parameters, no output schema, no annotations), the description is adequate but incomplete. It covers the basic search scope but lacks details on behavioral traits, usage context, and output expectations. This leaves gaps that could hinder an agent's effective use.

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

Parameters3/5

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

Schema description coverage is 100%, with each parameter clearly documented in the input schema. The description adds minimal value by listing searchable fields (name, DOB, phone, email) but doesn't explain parameter interactions, optionality, or the 'limit' parameter. Baseline 3 is appropriate since the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Search for patients by name, DOB, phone, or email.' It specifies the verb ('search') and resource ('patients'), and lists searchable fields. However, it doesn't explicitly distinguish this from potential sibling search tools (though none exist in the provided list), keeping it from a perfect score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, limitations, or how it compares to other patient-related tools like 'get_patient_encounters' or 'create_patient'. Without such context, an agent might struggle to choose appropriately.

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

update_encounterC

Update an existing encounter

ParametersJSON Schema
NameRequiredDescriptionDefault
encounter_idYesEncounter ID
chief_complaintNoChief complaint (optional)
diagnosis_codesNoComma-separated ICD-10 diagnosis codes (optional)
procedure_codesNoComma-separated CPT procedure codes (optional)
statusNoStatus: OPEN, CLOSED, SIGNED (optional)

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states 'update' implies a mutation, but it doesn't disclose critical traits like required permissions, whether changes are reversible, side effects, or response format. For a mutation tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.

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

Conciseness5/5

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

The description is extremely conciseโ€”a single, clear sentence with no wasted words. It's front-loaded with the core action, making it easy to parse quickly. This efficiency is ideal for a tool name that already implies its function.

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

Completeness2/5

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

Given the complexity of a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't address behavioral aspects like permissions, side effects, or return values, which are crucial for safe and effective use. The high schema coverage helps with parameters, but overall context is lacking.

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

Parameters3/5

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

Schema description coverage is 100%, so the input schema fully documents all parameters (encounter_id, chief_complaint, diagnosis_codes, procedure_codes, status). The description adds no additional meaning beyond what's in the schema, such as explaining parameter interactions or constraints. 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.

Purpose3/5

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

The description 'Update an existing encounter' clearly states the action (update) and resource (encounter), but it's quite generic. It doesn't specify what aspects can be updated or differentiate it from sibling tools like 'get_encounter' or 'create_encounter' beyond the basic verb. While it's not tautological, it lacks the specificity needed for a higher score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an existing encounter ID), exclusions, or comparisons to siblings like 'create_encounter' or 'get_encounter'. Without such context, users must infer usage from the name alone, which is insufficient.

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

TDQS

B3.4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose targeting specific resources and actions in the healthcare domain, such as patient management, appointments, clinical alerts, and prescriptions. There is no significant overlap; for example, create_appointment and check_appointment_availability serve different functions, and get_encounter vs. get_patient_encounters are clearly differentiated by scope.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case, such as acknowledge_alert, create_appointment, and list_departments. This uniformity makes the tool set predictable and easy for an agent to navigate without confusion from mixed naming conventions.

Tool Count5/5

With 14 tools, the server is well-scoped for a healthcare practice management system, covering essential operations like patient registration, appointment scheduling, clinical workflows, and data retrieval. Each tool appears necessary for the domain, avoiding bloat or thin coverage.

Completeness4/5

The tool set provides strong coverage for core healthcare workflows, including patient CRUD (create, search), appointment management, clinical encounters, and prescriptions. A minor gap exists in update/delete operations for resources like patients or prescriptions, but agents can likely work around this with the available tools.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with Athena Health's API for comprehensive healthcare practice management. Supports appointment scheduling, provider and department management, patient search, and available slot discovery through natural language.
  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables AI assistants to securely access Epic Healthcare Systems patient data through FHIR R4 API integration. Provides tools for searching patients, retrieving clinical summaries, vital signs, medications, and generating healthcare reports with HIPAA-compliant OAuth 2.0 authentication.
  • A
    license
    Not graded
    quality
    D
    maintenance
    Integrates with EMRs like Cerner and Epic via FHIR to retrieve patient data, and provides medical research tools (PubMed, clinical trials, FDA) for clinical analysis.
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ophydami/Athenahealth-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server