Skip to main content
Glama
the-momentum

FHIR MCP Server

by the-momentum

Server Quality Checklist

67%
Profile completionA complete profile improves this server's visibility in search results.
  • Latest release: v0.1.0

  • Disambiguation4/5

    The request_*_resource tools are clearly separated by FHIR resource type, and request_generic_resource is explicitly a fallback for resources without a dedicated tool. However, the similar structure and the note in request_observation_resource referencing a non-existent 'get_loinc_code' tool could cause slight confusion.

    Naming Consistency4/5

    The CRUD tools follow a strong request_<resource>_resource pattern, making the set predictable. The utility tools (get_loinc_codes, add_document_to_pinecone, search_pinecone) diverge in style but are still verb-first and understandable.

    Tool Count5/5

    13 tools is well within the ideal range for a FHIR server covering multiple resource types. The number is neither bloated nor thin, given the broad scope of FHIR.

    Completeness4/5

    The set covers CRUD for the most common FHIR resources plus a generic fallback for all others, and adds LOINC lookup and document search. Minor gaps like a dedicated search/query tool or terminology service exist, but the generic resource tool covers most needs.

  • Average 4.4/5 across 13 of 13 tools scored. Lowest: 3.9/5.

    See the Tool Scores section below for per-tool breakdowns.

    • 0 of 2 community issues answered or closed in the last 6 months
    • 0 commits in the last 12 weeks
    • Last stable release on
    • No critical vulnerability alerts
    • No high-severity vulnerability alerts
    • No code scanning findings
    • CI is passing
  • This repository is licensed under MIT License.

  • This repository includes a README.md file.

  • No tool usage detected in the last 30 days. Usage tracking helps demonstrate server value.

    Tip: use the "Try in Browser" feature on the server page to seed initial usage.

  • Add a glama.json file to provide metadata about your server.

  • If you are the author, simply .

    If the server belongs to an organization, first add glama.json to the root of your repository:

    {
      "$schema": "https://glama.ai/mcp/schemas/server.json",
      "maintainers": [
        "your-github-username"
      ]
    }

    Then . Browse examples.

  • Add related servers to improve discoverability.

How to sync the server with GitHub?

Servers are automatically synced at least once per day, but you can also sync manually at any time to instantly update the server profile.

To manually sync the server, click the "Sync Server" button in the MCP server admin interface.

How is the quality score calculated?

The overall quality score combines two components: Tool Definition Quality (70%) and Server Coherence (30%).

Tool Definition Quality measures how well each tool describes itself to AI agents. Every tool is scored 1–5 across six dimensions: Purpose Clarity (25%), Usage Guidelines (20%), Behavioral Transparency (20%), Parameter Semantics (15%), Conciseness & Structure (10%), and Contextual Completeness (10%). The server-level definition quality score is calculated as 60% mean TDQS + 40% minimum TDQS, so a single poorly described tool pulls the score down.

Server Coherence evaluates how well the tools work together as a set, scoring four dimensions equally: Disambiguation (can agents tell tools apart?), Naming Consistency, Tool Count Appropriateness, and Completeness (are there gaps in the tool surface?).

Tiers are derived from the overall score: A (≥3.5), B (≥3.0), C (≥2.0), D (≥1.0), F (<1.0). B and above is considered passing.

Tool Scores

  • Behavior4/5

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

    With no annotations, the description carries the full burden. It discloses important behaviors: use only user-provided data, do not auto-fill, ask confirmation for delete, and provide app links rather than API links. These go beyond basic CRUD semantics and help the agent act safely.

    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?

    Well structured with an intro, bulleted rules, and Args/Returns sections. The content is relevant, though the Returns line is somewhat redundant with the intro. Overall, concise and easy to scan.

    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?

    Provides useful CRUD rules and examples, but misses key context like the base URL expectation, error handling, and the nested request wrapper. As a generic FHIR request tool with no output schema, more details about invocation structure and edge cases are needed.

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

    Parameters2/5

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

    The description lists method, path, and body, but the actual schema expects a single 'request' object wrapping these fields. This structural mismatch could cause incorrect invocation. Schema description coverage is 0%, so the description needed to clarify the wrapper but did not.

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

    Purpose5/5

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

    The description clearly states it makes HTTP requests to the FHIR server for CRUD operations specifically on the Condition resource, using a specific verb and resource. It distinguishes from sibling tools by restricting scope to Condition.

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

    Usage Guidelines4/5

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

    It explicitly says 'only on the FHIR Condition resource', providing a clear when-not-to-use for other resources. It also gives contextual rules for create/update/delete (e.g., confirmation for deletion). Does not name alternative tools explicitly, but the scope restriction is effective.

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

  • Behavior4/5

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

    With no annotations, the description carries the full burden and does disclose key behaviors: it performs mutating CRUD operations, requires confirmation for deletes, forbids auto-filling data, and mandates app links in the response. However, it lacks details on authentication, error handling, or permission requirements, so it's not fully transparent.

    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 reasonably concise and well-structured: a clear opening, a bulleted list of rules, and an Args/Returns section. The rules are valuable but add length, so it doesn't achieve a perfect 5.

    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?

    The description covers the essential CRUD operation flow and return type, and includes important deletion confirmation. However, it omits how to handle the nested 'request' parameter correctly and doesn't discuss error responses, status codes, or pagination, leaving gaps for a CRUD tool.

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

    Parameters3/5

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

    The description explains method, path, and body with an example path, adding some value beyond the schema. However, it presents these as top-level args while the schema wraps them in a single 'request' object, which could confuse an agent. This mismatch means the description only partially compensates for the schema's minimal descriptions.

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

    Purpose5/5

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

    The description clearly states it makes HTTP requests to the FHIR server and specifically targets the FHIR Immunization resource with CRUD operations. This separates it from sibling tools that handle other resource types, such as request_patient_resource or request_observation_resource.

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

    Usage Guidelines4/5

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

    It explicitly scopes usage to the Immunization resource and provides important behavioral rules: using only user-provided data, not guessing missing data, asking for confirmation before deletion, and providing app (not API) links. While it doesn't directly mention alternatives, the resource-specific scope makes the appropriate tool choice clear.

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

  • Behavior4/5

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

    With no annotations provided, the description carries the full burden. It discloses important behavioral rules: not guessing or auto-filling data, asking for confirmation before deletion, and providing app (not api) links in the final response. It also states the return value is a JSON response. However, it omits authentication, error handling, and row-level side effects, though the CRUD nature is clear.

    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 slightly long but well-structured into sections for purpose, rules, and args. Every sentence earns its place, including the important deletion confirmation rule and the no-guessing rule. It remains accessible despite the length.

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

    Completeness4/5

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

    Given the tool's simple structure (one parameter with a nested schema) and the presence of an output schema, the description covers the core needs: purpose, usage rules, and parameter details. It does not explain error handling or auth, but for a CRUD tool with clear rules and an output schema, this is reasonably complete.

    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 no description for the top-level 'request' parameter (0% coverage), so the description must compensate. It explains method, path, and body with examples, which adds meaning. However, it presents these as top-level arguments rather than nested within a 'request' object, creating a structural mismatch that could mislead an agent.

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

    Purpose5/5

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

    The description clearly states it makes HTTP requests to the FHIR server for the Patient resource only, using the verb 'perform CRUD operations'. It explicitly restricts usage to the Patient resource, distinguishing it from sibling tools like request_observation_resource or request_generic_resource.

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

    Usage Guidelines4/5

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

    The description says 'Use this tool to perform CRUD operations only on the FHIR Patient resource', providing clear context for when to use it. It does not explicitly name alternative tools for other resources, but the resource-specific restriction implies exclusions. Rules for creating/updating/deleting add valuable usage context.

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

  • Behavior4/5

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

    With no annotations provided, the description carries the full burden. It discloses that the embedding model may load into cache, that the index may take up to 1 minute to update, and that the return value can indicate 'added or already exists'. This provides meaningful behavioral context beyond a simple mutating action.

    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 structured with an important note, a purpose statement, rules, args, and returns. It is a bit longer than strictly necessary, but every section contributes useful information and the warning is front-loaded. Overall it is organized and readable.

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

    Completeness4/5

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

    The description covers purpose, behavior, latency, return values, and parameter semantics, which is sufficient for a straightforward ingest tool. It does not explain the nested 'document' object structure, but the input schema fills that gap. Given the lack of annotations and low schema description coverage, the description does a solid job.

    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?

    Schema description coverage is 0%, but the description explains all three core fields (url, fhir_document_id, format) in plain terms. It also adds the rule to pass format as None when unknown, which is a semantic nuance not present in the schema. However, it does not mention that the schema wraps these fields in a 'document' object, which is a minor structural gap.

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

    Purpose5/5

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

    The description clearly states 'Adds a document to the Pinecone vector index for the specified FHIR DocumentReference ID', which names the specific verb, resource, and scope. It also explicitly says 'This tool should be used to ingest new documents into the Pinecone index', distinguishing it from sibling tools like search_pinecone.

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

    Usage Guidelines4/5

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

    The description gives clear usage context ('should be used to ingest new documents') and includes important operational guidance, such as the need to inform the user about loading time and the up-to-1-minute index update delay. It does not explicitly exclude alternative tools, but the ingest-vs-search distinction is implicit from the sibling list.

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

  • Behavior4/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 does well by adding key constraints: using only user-provided data, requiring confirmation for delete, and providing app-specific links. It also describes the return as 'JSON response from the FHIR server.' While it does not mention authentication or side effects verbosely, the provided rules go beyond the schema and give meaningful behavioral context.

    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 well-structured: a one-sentence purpose statement, followed by a bulleted list of rules, then an Args section. Each sentence earns its place; there is no redundant filler. It is slightly long due to the rules, but they are essential for safe usage. Front-loaded purpose makes it easy to scan.

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

    Completeness4/5

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

    Given the tool's complexity as a CRUD wrapper with multiple methods, the description covers resource-specific constraints, argument details, and return format. Since an output schema exists, the description does not need to enumerate response fields. It provides sufficient context for an agent to select and use the tool correctly, though it could mention error handling or authentication without making it notably more complete.

    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?

    Although the schema describes method and path, the description's Args section adds practical meaning with examples (e.g., path format '/FamilyMemberHistory?patient=Patient/123') and clarifies body usage. Given that the context reports 0% schema description coverage, the description compensates effectively by explaining each parameter's role and providing examples, adding value beyond the schema.

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

    Purpose5/5

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

    The description clearly states the tool's function: 'Makes an HTTP request to the FHIR server' and specifically scopes it to 'CRUD operations only on the FHIR FamilyMemberHistory resource.' This distinguishes it from sibling tools for other FHIR resources and the generic resource tool. The verb 'perform CRUD operations' and the explicit resource name make the purpose unambiguous.

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

    Usage Guidelines4/5

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

    The description provides clear context by stating the tool should be used 'only on the FHIR FamilyMemberHistory resource,' which serves as an exclusionary guideline. It also includes operational rules, such as not guessing missing data and requiring user confirmation before deletion, which guide when specific actions are appropriate. However, it does not explicitly mention alternative tools by name, so there is no strong 'use X instead' guidance.

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

  • Behavior4/5

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

    With no annotations, the description carries full responsibility. It discloses CRUD behavior, data handling rules (no guessing/auto-filling), the need for deletion confirmation, and the requirement to return app links. It also states the response format (JSON).

    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 well-structured with a purpose statement, rules, Args, and Returns sections. It avoids unnecessary verbosity while including all critical information. A slight length increase is justified by the operational rules.

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

    Completeness4/5

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

    The tool has an output schema, and the description explains the JSON response. It covers essential behaviors like CRUD scope, deletion confirmation, and link requirements. It could mention authentication or error handling, but for a FHIR resource client this is sufficiently complete.

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

    Parameters5/5

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

    The description provides an Args section that clearly explains method, path, and body, including examples like '/Medication?code=aspirin'. Since schema description coverage is 0%, this is essential and adds meaningful context beyond the schema.

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

    Purpose5/5

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

    The description clearly states the tool performs HTTP requests for CRUD operations exclusively on the FHIR Medication resource. This differentiates it from sibling resource-specific tools like request_patient_resource and request_generic_resource.

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

    Usage Guidelines4/5

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

    It explicitly says to use this tool for CRUD operations only on the Medication resource, which provides clear scope. It also provides rules for creating/updating (use only user data) and deleting (ask confirmation). However, it does not explicitly mention alternatives for non-Medication resources.

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

  • Behavior5/5

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

    With no annotations, the description carries the full burden of behavioral disclosure and does so well. It explicitly states rules around data integrity (use only user-provided data, no guessing), requires confirmation before deletion, and mandates links to the app resource. These go beyond typical generic HTTP tool descriptions.

    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 well-organized with a clear opening, bulleted rules, and an Args section. It is somewhat verbose but each sentence contributes relevant information, making it appropriately sized for the tool's complexity.

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

    Completeness4/5

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

    Given the generic HTTP request pattern and nested schema, the description covers purpose, parameters, key behavioral rules, and return type. It lacks details on authentication or error handling, but those are minor in this context and the provided information is sufficient for an agent to invoke the tool correctly.

    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 description explains all three parameters (method, path, body) with examples and clarifies that body is optional for POST/PUT, supplementing the schema's descriptions. It adds practical path examples (`/AllergyIntolerance?patient=Patient/123`) that help the agent construct valid requests.

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

    Purpose5/5

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

    The description states the tool 'Makes an HTTP request to the FHIR server' and 'perform CRUD operations only on the FHIR AllergyIntolerance resource,' clearly identifying a specific verb and resource. It distinguishes itself from sibling resource-specific tools and generic_resource by limiting scope to AllergyIntolerance.

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

    Usage Guidelines4/5

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

    The description provides clear usage context: use this tool for CRUD operations specifically on AllergyIntolerance. It does not explicitly name alternatives or state when not to use it, but the resource-specific restriction makes the intended use unambiguous.

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

  • Behavior4/5

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

    With no annotations, the description carries the full burden and covers important behaviors: CRUD scope, data integrity rules, deletion confirmation, and return type. It lacks details on error handling or authentication, but the core behavioral traits are well disclosed.

    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 organized into clear sections (rules, args, returns) and contains no filler. It is slightly longer than necessary, but every sentence provides useful guidance or context.

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

    Completeness4/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 and lack of annotations, the description is fairly complete: it specifies the resource scope, CRUD operations, user-data constraints, deletion confirmation, and return format. It doesn't mention authentication or error responses, but with an output schema present these are not critical gaps.

    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 description includes an Args section that explains method, path, and body, with an example path for Encounter resources. Although the input schema also describes method and path, the description adds clarity on body optionality and the path format, compensating for the 0% schema description coverage of the outer 'request' parameter.

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

    Purpose5/5

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

    The description clearly states a specific verb and resource: 'Makes an HTTP request to the FHIR server' and 'perform CRUD operations only on the FHIR Encounter resource.' It effectively distinguishes itself from sibling tools like request_patient_resource and request_generic_resource by limiting its scope to encounters.

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

    Usage Guidelines5/5

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

    The description provides explicit usage rules: use only user-provided data for create/update, require confirmation for delete, and provide app links in responses. It also implicitly defines when not to use this tool (for non-Encounter resources), which is clear guidance against the sibling tools.

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

  • Behavior4/5

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

    With no annotations, the description carries the full burden of behavioral disclosure. It discloses important traits: do not guess data, require confirmation for deletions, and provide app links in responses. It lacks details on authentication, rate limits, or error handling, but the provided rules are substantial and relevant.

    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 well-structured with a clear purpose, bullet-point rules, and an Args list. It is not overly verbose; each section serves a purpose. The rules section is somewhat lengthy but all are relevant behavioral guidelines.

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

    Completeness4/5

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

    For a generic fallback tool with an output schema present, the description covers the core operations, safety rules, and return type. It does not explain error handling or path construction details, but given the availability of specialized sibling tools, the completeness is adequate for the intended role.

    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?

    Schema description coverage is 0% at the tool level, but the Args section adds meaning: 'method: HTTP method (GET, POST, PUT, DELETE)', 'path: Resource path', 'body: Optional JSON data for POST/PUT requests'. This compensates for the schema's lack of top-level description and clarifies parameter usage, though it could be more detailed (e.g., path format).

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

    Purpose5/5

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

    The description clearly states the verb and resource: 'Makes an HTTP request to the FHIR server' and 'perform CRUD operations on any FHIR resource'. It explicitly distinguishes from siblings with 'ONLY if the other tools are not applicable', making it a specific generic fallback tool.

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

    Usage Guidelines5/5

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

    The description gives explicit when-to-use guidance: 'Use this tool ... ONLY if the other tools are not applicable.' It also provides operational rules for create/update/delete (e.g., 'When deleting a resource, ask the user for confirmation') that clarify acceptable usage contexts.

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

  • Behavior4/5

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

    With no annotations, the description carries the full transparency burden. It discloses key behaviors: it performs CRUD, requires user-provided data without guessing, mandates confirmation before deletion, and returns JSON. It also notes the need to provide app links rather than API links. This goes beyond a simple 'makes HTTP request' statement and gives the agent actionable behavioral context, though it omits auth and error-handling details.

    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 longer than typical but well-structured with clear sections for the workflow, rules, args, and returns. It front-loads the core purpose and uses bullets for rules. Every section serves a purpose; however, the volume of text could be trimmed slightly without losing essential information, so it's not a perfect 5.

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

    Completeness5/5

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

    Given that this is a generic HTTP tool for a specific resource, the description is complete: it covers the operation, the resource scope, preconditions (LOINC workflow), safety rules, parameter semantics, and return format. The output schema exists, so return values need not be detailed further. Sibling differentiation is adequate through the resource-specific wording.

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

    Parameters5/5

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

    The schema has 0% description coverage for the top-level 'request' parameter, but the description's Args section explains each inner field with practical details: method enumerates HTTP verbs, path includes a concrete example with URL encoding, and body is described as optional JSON. This significantly adds meaning beyond the schema's terse descriptions and helps the agent construct valid requests.

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

    Purpose5/5

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

    The description clearly states the tool makes HTTP requests to the FHIR server and explicitly scopes it to 'CRUD operations only on the FHIR Observation resource.' This distinguishes it from sibling tools that handle other FHIR resources and from request_generic_resource. The verb 'request' combined with the resource name is specific and unambiguous.

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

    Usage Guidelines4/5

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

    The description provides clear usage guidance: use this tool only for Observation resource operations, and includes a specific workflow ('First use get_loinc_code() tool... Then use this tool') for LOINC-dependent observations. It also gives explicit rules for creation, update, delete (requiring confirmation), and response formatting. While it doesn't name alternative tools for other resources, the resource-specific scope effectively implies when to use this tool vs siblings.

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

  • Behavior5/5

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

    With no annotations provided, the description carries full burden. It discloses automatic behaviors (STATUS='ACTIVE' filter, COMMON_TEST_RANK sorting, popularity order) and error states ('Error' key, authentication failures, no active codes). This is exemplary transparency.

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

    Conciseness4/5

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

    The description is longer than average but well-structured with headings, bullet points, and numbered strategies. It front-loads the core purpose and automatic behaviors, then details a decision process. Some content (e.g., 'Your job is to...') is more agent instruction than tool description, but it remains organized and purposeful.

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

    Completeness5/5

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

    Given the output schema exists, the description does not need to explain return types. It covers all parameters, error handling, semantic selection strategy, and the balance between popularity and relevance. This makes it complete for a complex lookup tool with ambiguous result sets.

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

    Parameters5/5

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

    The input schema has zero parameter descriptions (0% coverage), so the description must compensate. It includes an 'Args' section defining all three parameters, including the distinction between max_codes and max_fetch, and the strategy section explains exactly how to tune them. This fully compensates for the missing schema documentation.

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

    Purpose5/5

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

    The description opens with a specific verb+resource: 'Get the most relevant LOINC codes for a given observation name.' This clearly distinguishes it from sibling tools that request FHIR resources (e.g., request_patient_resource) by focusing on terminology lookup.

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

    Usage Guidelines4/5

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

    The 'Strategy' section provides explicit guidance on when to adjust max_fetch and max_codes, and when to stop on authentication errors. It gives clear context for use, though it does not explicitly name alternative tools or exclusion scenarios. Still, it offers more usage direction than most tool descriptions.

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

  • Behavior5/5

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

    No annotations are provided, so the description carries the full burden. It discloses important behaviors: the delay due to embedding model loading, query language translation, strict grounding in indexed documents, and the automatic fallback to add_document_to_pinecone. This far exceeds minimal expectations.

    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 well-structured with an IMPORTANT callout, a concise purpose statement, a rules list, and clearly labeled Args/Returns sections. It is longer than necessary but every sentence contributes operational guidance without waste.

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

    Completeness5/5

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

    Given the tool's complexity and lack of annotations, the description is remarkably complete. It covers prerequisites, error handling, language translation, answer scope, ambiguity handling, and query modification. Output schema exists, so return details need no elaboration.

    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?

    Schema has 0% description coverage, but the Args section explains all three parameters. It clarifies fhir_document_id as 'the same as the FHIR ID of the document,' which adds valuable meaning. query and top_k are adequately described, though query is somewhat generic.

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

    Purpose5/5

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

    The description states a specific action: 'Searches the Pinecone vector index for information related to the given document by FHIR DocumentReference ID.' This clearly distinguishes it from sibling tools like add_document_to_pinecone and request_document_reference_resource.

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

    Usage Guidelines5/5

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

    Explicitly says 'Use this tool when the user requests information from the documents, notes, etc.' and provides detailed rules including prerequisites (prepare fhir_document_id), fallback (trigger add_document_to_pinecone on error), and handling of unrelated queries.

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

  • Behavior5/5

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

    With no annotations, the description fully discloses behavioral traits: the 'Rules' section explains data fidelity expectations, deletion confirmation, and link requirements. This goes well beyond basic CRUD semantics.

    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 well-organized with a clear opening line, a bulleted 'Rules' section, and a concise 'Args' list. Every sentence adds value, and the structure aids scannability.

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

    Completeness5/5

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

    The tool's complexity (CRUD, confirmation steps, resource-specific constraints) is fully addressed. The description covers operational rules, parameters, and return type, making it complete for an agent to invoke correctly.

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

    Parameters5/5

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

    Schema coverage is 0%, but the description explains all three args (method, path, body) with examples and context. The example path clarifies usage, and the body description explicitly ties it to POST/PUT methods, adding meaning beyond the schema.

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

    Purpose5/5

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

    The description clearly states 'Makes an HTTP request to the FHIR server' and specifically scopes to 'only on the FHIR DocumentReference resource.' This distinguishes it from sibling resource-specific tools with a clear verb-resource pairing.

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

    Usage Guidelines5/5

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

    Explicit rules define when to use this tool: CRUD operations on DocumentReference only. It also provides operation-specific guidance (e.g., delete requires user confirmation, don't invent data), effectively telling the agent when and how to use it.

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

GitHub Badge

Glama performs regular codebase and documentation scans to:

  • Confirm that the MCP server is working as expected.
  • Confirm that there are no obvious security issues.
  • Evaluate tool definition quality.

Our badge communicates server capabilities, safety, and installation instructions.

Card Badge

fhir-mcp-server MCP server

Copy to your README.md:

Score Badge

fhir-mcp-server MCP server

Copy to your README.md:

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/the-momentum/fhir-mcp-server'

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