canvas-medical
Server Details
Search and read a patient chart over the Canvas FHIR R4 API. Read-only.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- Repository
- m190/usefulapi-mcp
- GitHub Stars
- 0
TDQS
Scored across 4 tools
The four tools have broadly distinct roles: metadata lookup, whole-patient bundle, single-resource fetch, and parameterized search. The only mild overlap is between canvas_read and canvas_search (both retrieve resources) and between canvas_get_patient_everything and canvas_search, but the descriptions clearly steer agents to the right choice.
All tools share the canvas_ prefix and use snake_case, giving a predictable pattern. The verb is slightly inconsistent (get_capability_statement/get_patient_everything vs read/search), though all are clearly read-oriented verbs.
Four tools is on the thin side, but the surface is intentionally a compact, generic FHIR read layer where each tool earns its place. It is well-scoped rather than padded.
The read side is well covered (metadata, patient bundle, single read, generic search), but there are no write/create/update operations for any resource, so an agent cannot modify the chart. This is a notable gap if write access is expected of the domain.
Available Tools
4 toolscanvas_get_capability_statementGet the FHIR capability statementARead-onlyInspect
Fetch the server's FHIR CapabilityStatement — exactly which resources, interactions and search parameters this Canvas instance supports. Read it when a search is rejected and you want to know what the instance actually accepts. Canvas: GET /metadata.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered. The description adds meaningful behavior beyond that: the data domain returned (resources, interactions, search parameters), the identity of the underlying endpoint (GET /metadata), and its intended role as a recovery/introspection call after a rejected search. It does not mention response size, caching, or auth requirements, but the read-only annotation makes those less critical.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: what it returns, when to use it, and the raw endpoint path. The most decision-relevant information (what the document contains) is front-loaded, and no sentence is redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only introspection tool with annotations covering the safety profile and no output schema, the description supplies everything needed: content, use condition, and endpoint. An agent can decide to call this and understand what comes back without further documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
This is a zero-parameter tool, so the baseline of 4 applies. The description correctly implies no inputs are required by describing a pure retrieval of instance metadata, and there is no parameter surface left undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch the server's FHIR CapabilityStatement') and enumerates exactly what the document contains — resources, interactions, search parameters supported by this instance. This is clearly distinguishable from siblings like canvas_search and canvas_read, which operate on clinical data rather than server metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit positive trigger: 'Read it when a search is rejected and you want to know what the instance actually accepts.' This is actionable context an agent can match against a failure state. It stops short of a full 5 because it names no alternatives or when-not conditions, though the tool's purpose is unique enough among its siblings that routing ambiguity is low.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
canvas_get_patient_everythingGet everything for one patientARead-onlyInspect
Fetch a patient's full record in one FHIR bundle — conditions, medications, observations, encounters and more. The fastest way to answer a broad question about one person, but it can return a large document, so prefer canvas_search when you know which resource you need. Canvas: GET /Patient/{id}/$everything.
| Name | Required | Description | Default |
|---|---|---|---|
| _count | No | Page size, 1-100. | |
| patient_id | Yes | The Patient resource id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered; the description adds meaningful context beyond that, warning that the call can return a large document and listing what the bundle contains. It stops short of stating pagination behavior or auth requirements, so not a full 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with what it does before the size caution and the routing alternative. No filler, and the Canvas endpoint is appended compactly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so by naming the bundle contents and flagging size. Combined with the readOnly annotation and routing guidance, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% – both patient_id and _count are documented in the schema (including the 1-100 page-size bound). The description adds no syntax or format detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Fetch') and resource ('a patient's full record in one FHIR bundle') and enumerates the contained resource types. It directly contrasts with the sibling canvas_search, so an agent can distinguish the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names when to use it ('fastest way to answer a broad question about one person') and when not to ('prefer canvas_search when you know which resource you need'), plus the reason (large document). The alternative and its selecting condition are both given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
canvas_readRead one FHIR resourceARead-onlyInspect
Fetch a single FHIR resource by type and id. Canvas: GET /{resource}/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The resource's id. | |
| resource | Yes | Which FHIR resource type to read. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already covers the safety profile. The description adds the HTTP endpoint mapping GET /{resource}/{id}, but does not describe error behavior, return payload, or any special read constraints. This is modest added context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences: the first states the action and scope, the second adds the endpoint mapping. No filler; front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only lookup with a fully documented schema and no output schema, the definition supplies the essential operation and endpoint. It leaves some niceties unstated, such as error handling and routing to siblings, but is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents both parameters, including the resource enum and id field. The description only restates 'by type and id' and adds no syntax or constraint detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description names the verb 'Fetch', the resource 'single FHIR resource', the lookup keys 'by type and id', and the underlying endpoint. It distinguishes a direct single-resource read from sibling search and bundle operations such as canvas_search and canvas_get_patient_everything.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when/when-not guidance or named alternative. The 'single' and 'by type and id' phrasing implies it is for direct lookup when both identifiers are known, but the agent must infer that canvas_search is for broader queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
canvas_searchSearch a FHIR resourceARead-onlyInspect
Search any supported FHIR R4 resource in the chart. Pick resource, then narrow with the standard FHIR search parameters. Nearly every clinical question starts here: Condition or Observation for a problem list and results, MedicationRequest for prescriptions, Appointment or Encounter for visits, DocumentReference for notes. Canvas: GET /{resource}.
| Name | Required | Description | Default |
|---|---|---|---|
| _id | No | Fetch by resource id through search. | |
| date | No | FHIR date filter, e.g. "ge2026-08-01" or "lt2026-09-01". Prefixes: eq, ne, gt, lt, ge, le. | |
| name | No | Name search, for Patient and Practitioner. | |
| _sort | No | Sort field, e.g. -date for newest first. | |
| _count | No | Page size, 1-100. | |
| status | No | FHIR status filter, e.g. active, completed, cancelled. | |
| _offset | No | Offset for paging through results. | |
| patient | No | Restrict to one patient, by Patient id. The usual first filter. | |
| resource | Yes | Which FHIR resource type to search. | |
| identifier | No | Search by business identifier, e.g. an MRN. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares this a safe read, and the description's 'GET /{resource}' is consistent with that. It adds useful scoping ('in the chart') but says nothing about result shapes, pagination behavior, rate limits, or auth needs beyond what the annotations and schema imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the core action and resource selection before the motivating examples, and every sentence carries information. The enumeration of resource-to-question mappings is slightly long but earns its place as selection guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter search tool with no output schema, the definition covers purpose, resource choice, and the endpoint. The main gap is the return shape and how paging works in practice, which an agent would otherwise have to infer from _count/_offset.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 10 parameters are already documented. The description adds only framing ('pick resource, then narrow with the standard FHIR search parameters') and does not supply format or syntax detail beyond what the schema provides, which is the baseline-3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (search) and resource (any supported FHIR R4 resource in the chart), plus the underlying endpoint GET /{resource}. It distinguishes itself from siblings like canvas_read by framing itself as the broad entry point for clinical questions rather than a single-record fetch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context ('Nearly every clinical question starts here') and a concrete heuristic for choosing the resource type (Condition/Observation for problem lists, MedicationRequest for prescriptions, etc.). It stops short of stating when NOT to use it or naming the sibling alternative (e.g. canvas_read for a single known record).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- First observed
canvas_get_capability_statement - First observed
canvas_get_patient_everything - First observed
canvas_read - First observed
canvas_search
Related MCP Connectors
Read patient-authorized EHR records: medications, labs, conditions, allergies. Consent-bounded.
Query Health Gorilla FHIR patients, conditions, medications and lab results.
161Query Particle Health patient records across connected clinical networks.
1
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables read-only FHIR access to Practice Fusion EHR to search patients, appointments, conditions, medications, and lab results.135 npm3MIT
- AlicenseNot gradedqualityDmaintenanceEnables interaction with FHIR R4 healthcare data through SHARP-on-MCP tools, including search, read, and clinical context aggregation, with built-in Chart.js dashboards for visualizing lab trends, vitals, and patient data.3 npm3MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI assistants to securely read and organize a patient's own health records from Epic MyChart via the FHIR API, including labs, documents, appointments, and attachments, using OAuth-based authorization.-
- AlicenseNot gradedqualityBmaintenanceEnables read-only access to Chinese FHIR electronic health records, including patient summaries, medication review context, record queries, and attachment reading, along with controlled CSV import and status tools.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.