Apple Health AI Bridge MCP Server
This MCP server gives AI assistants read-only access to your locally stored Apple Health data, so they can query sleep, workouts, activity, and other metrics over date ranges.
Check bridge/receiver sync status and get redacted Markdown bridge context for local agents.
List supported timeseries types (optionally by category) and see which metrics have been synced, with provenance and missing-data caveats.
Retrieve time-series observations for chosen metric types over a UTC time window.
Get workouts, sleep-stage summaries, and daily summaries (with sum-safe totals and type-aware statistics) for a date range.
Explain data sources and sync cursors for provenance.
All operations are read-only, with no clinical interpretation and no token material exposed.
Provides read-only access to Apple Health data, including metrics, workouts, sleep summaries, and daily summaries, allowing AI agents to query health information from an iPhone.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Apple Health AI Bridge MCP ServerHow many steps did I take yesterday?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Apple Health AI Bridge connects Apple Health to MCP-compatible assistants. The iPhone app syncs the records you allow to your own computer, where your AI can query sleep, workouts, activity, and more.
Before we plan next week, what did my sleep and workouts actually look like?
Automatic sync brings new records into the same local history, without another export. Use it in the assistant you prefer or in your own agent workflows; your data isn't tied to a single AI provider.
Get started
You'll need an iPhone running iOS 18 or later, a macOS or Linux computer that can stay awake to receive records, and an AI assistant.
Install the app. Download the iPhone app from the App Store.
Set up the receiver. Install the published Receiver/CLI 1.1.5 using its tagged setup guide, including a private HTTPS route for sync away from home.
Pair your iPhone. Scan the pairing QR, review Apple's Health permissions, and enable Automatic Sync.
Connect your AI. Choose your client, then ask your first question.
For the Mac-only iCloud Mailbox Beta, use the same release's helper verification and installation guide. The maintenance release preserves 1.1.3 query behavior; newer features in main remain unreleased.
Related MCP server: MetricBridge (formerly Health Export AI)
Choose your AI
Find your assistant's setup guide below.
Supported data
Sleep, workouts, steps and energy, heart-rate measurements, weight, and body composition are supported. The full data catalog lists individual record types and their availability.
Privacy
Health access and MCP queries are read-only. The receiver stores your records on your computer, and you decide which clients can query them.
When you use a cloud model, the query results your client sends go to that model provider. Its privacy settings and policies apply.
Privacy policy · Security model · Remove local data
Join the community
Have a question or an idea you'd like to try? Join us on Discord for setup help, useful prompts, and conversations about using Apple Health with your AI.
You can also follow release news and see what we're working on next.
Documentation
Install and use: Setup and troubleshooting · Supported data · Support
Understand and build: Architecture · Compatibility · Batch protocol · SQLite schema · Brand guide
Contribute: Development setup · Contribution ideas · Build the iPhone app
License
Apple Health AI Bridge is an independent open-source project and is not affiliated with, endorsed by, or sponsored by Apple Inc.
Available Tools
9 toolsexplain_sourcesB
Read-only provenance summary for local sources and sync cursors with missing-data caveats; no clinical interpretation.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral load, and it does disclose that the operation is read-only, that results include 'missing-data caveats,' and that it does not offer clinical interpretation. However, it says nothing about the shape of the output or permission requirements, leaving real gaps for an annotation-free tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the most important qualifier (read-only provenance) comes first. It is dense to the point of mild opacity, but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description alone defines the contract. It conveys the topic of the return (source/sync provenance) and its caveats, but does not describe the structure or fields an agent would receive, leaving it only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4; there is no argument surface the description needs to explain.
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?
Names a specific verb ('explain') and resource ('provenance summary for local sources and sync cursors'), which clearly distinguishes it from the get_*/list_* siblings that return actual data. It is somewhat jargon-heavy ('sync cursors') but an agent can still tell what class of output to expect.
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?
There is no statement of when to reach for this tool versus alternatives such as get_bridge_status or the list_* tools. The phrase 'no clinical interpretation' is a scope boundary, not usage routing, so the agent must infer the trigger condition on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bridge_context_markdownA
Read-only redacted Markdown bridge context for local agents/wiki; omits sample values, cursor values, token material, and clinical interpretation.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure and does so well: read-only, redacted, and explicitly omits sample values, cursor values, token material, and clinical interpretation. It does not cover auth, rate limits, or response structure, but the safety profile is clearly stated.
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 a single front-loaded sentence that communicates the core operation, read-only status, output format, and redaction scope without wasted text.
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 getter with no output schema, the description is sufficiently complete: it identifies the returned format and the sensitive data omitted. It could do slightly more to explain what the bridge context contains, but no critical invocation detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there are no parameter semantics to explain. The baseline for zero-parameter tools is 4 when the schema is otherwise complete.
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 states a specific resource and result type: redacted Markdown bridge context. It also clarifies the read-only nature and sensitive exclusions, though it does not explicitly contrast with sibling tools such as get_bridge_status.
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 a clear usage context for local agents/wiki and implies this is the tool for context retrieval rather than status or timeseries data. It does not explicitly say when not to use it or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bridge_statusA
Read-only redacted bridge and receiver sync status for local agents; omits sample values, cursor values, and token material; no clinical interpretation.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it declares the operation read-only and enumerates what is deliberately withheld (sample values, cursor values, token material) plus the absence of clinical interpretation. It stops short of describing refresh behavior, error conditions, or what the status actually contains.
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?
A single dense sentence with the read-only nature and the redaction guarantees front-loaded and zero filler. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param, non-destructive status read with no output schema, the description covers the most important surprises (redactions, no clinical interpretation). The one gap is that, absent an output schema, it states only what is omitted and never what a status payload actually includes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. There is nothing for the description to disambiguate beyond confirming the absence of input.
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 the resource precisely as 'bridge and receiver sync status' and implies a read via 'Read-only'. It is distinguishable from most siblings (list_*, get_workouts, get_sleep_summary), but it never names or contrasts any sibling such as get_bridge_context_markdown, which is the closest analog.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for local agents' hints at the intended caller but gives no explicit when-to-use, when-not-to-use, or alternative-selection guidance. An agent must infer on its own why it would call this rather than get_bridge_context_markdown.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_daily_summaryB
Read-only daily observation summaries for a date range with source provenance, missing-data caveats, sum-safe sample_totals, and type-aware sample_statistics for non-summable metrics; no clinical interpretation.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | ||
| start_date | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it declares read-only behavior, discloses that output includes source provenance and missing-data caveats, and warns that metrics are split into sum-safe sample_totals versus type-aware sample_statistics for non-summable metrics. It omits auth requirements, pagination, and behavior on oversized ranges, which keeps it short of a 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?
A single front-loaded sentence that leads with the read-only scope and packs return-shape details into a clause list with no filler. The jargon ('sum-safe sample_totals', 'type-aware sample_statistics') is dense but each clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity two-date tool with no output schema and no annotations, the description covers what is returned and its caveats, which is the important part. It stops short of telling the agent how to choose this tool or how large a range is practical, so it is adequate but not complete.
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?
Two required date parameters with 0% schema description coverage, so the schema gives only format/pattern. The description's 'for a date range' implies the start/end pairing but adds no boundary semantics (inclusive vs exclusive, timezone, max span), leaving the schema to carry the parameter meaning.
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+resource ('Read-only daily observation summaries') with a scoping constraint ('for a date range'), which is clearly distinct from get_sleep_summary, get_timeseries, and get_workouts. It never names a sibling or draws an explicit contrast, so the differentiation is implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description never says when to reach for this tool versus get_timeseries, get_sleep_summary, or list_synced_metrics, nor does it state prerequisites. 'no clinical interpretation' is a scope caveat, not usage guidance, so the agent must infer selection from the resource name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sleep_summaryB
Read-only sleep-stage summary observations for a date range with source provenance and missing-data caveats; no clinical interpretation.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | ||
| start_date | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does real work: it declares read-only safety, discloses that responses include source provenance and missing-data caveats, and scopes the tool as non-clinical. It omits pagination, auth, and behavior for dates with no data, keeping it short of a 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?
A single front-loaded sentence with no filler; every clause (read-only, scope, provenance, caveats, non-clinical) carries information. Slightly dense nominal phrasing ('summary observations') costs it the top mark.
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 tool with no annotations and no output schema, the description covers purpose, output content, and data-quality caveats. The remaining gap is date-range semantics, which the description leaves implicit.
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 coverage is 0% and both required parameters are undocumented. The description confirms a start/end date range but adds no inclusivity rules, timezone handling, or maximum span, so it only marginally compensates for the schema gap (the schema's date format/pattern at least self-documents syntax).
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?
Names a specific resource ('sleep-stage summary observations') and scope ('for a date range'), which separates it from siblings like get_daily_summary, get_workouts, and get_timeseries. It stops short of an explicit verb ('retrieve/list') and never names a sibling, so it is clear but not maximally differentiated.
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?
There is no when-to-use guidance and no mention of alternatives such as get_daily_summary or get_timeseries, which likely also cover sleep data. The 'no clinical interpretation' clause constrains how to present results, not when to call the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_timeseriesA
Read-only time-series observations for selected metric types with source provenance and missing-data caveats; no clinical interpretation.
| Name | Required | Description | Default |
|---|---|---|---|
| end_time | Yes | Fixed-UTC RFC 3339 lexical form; runtime validation also rejects nonexistent calendar dates. | |
| start_time | Yes | Fixed-UTC RFC 3339 lexical form; runtime validation also rejects nonexistent calendar dates. | |
| type_codes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose read-only semantics plus two output traits (source provenance, missing-data caveats). It omits other operationally important behavior such as time-range limits, ordering, pagination, or permission requirements.
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?
A single front-loaded sentence that packs purpose, safety profile, and output caveats with zero filler. Every clause earns its place.
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 annotations and no output schema, the description must carry more weight than it does. It covers the read-only nature and hints at return contents, but leaves range semantics (inclusive/exclusive bounds, maximum span) and response shape unspecified.
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 coverage is 67%, with start_time and end_time thoroughly documented in the schema and type_codes left bare. The description adds semantic color by framing type_codes as 'metric types' and reinforcing the read-only observational nature, but contributes little beyond the structured fields.
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 states a specific verb ('Read-only ... observations') and resource ('time-series') scoped to 'selected metric types', which is a clear, non-tautological purpose. It does not, however, name or contrast with any sibling such as list_supported_timeseries_types or get_daily_summary, so an agent gets no explicit routing help.
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?
There is no explicit when-to-use/when-not guidance or named alternative. The clause 'no clinical interpretation' implies a boundary (raw observations vs. interpreted summaries), giving implied usage context only, which the agent must infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workoutsA
Read-only workout observations for a date range with source provenance and missing-data caveats; no clinical interpretation.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | ||
| start_date | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden well: it declares read-only access, warns about source provenance and missing-data caveats, and rules out clinical interpretation. It does not cover auth, rate limits, or output shape, but the behavioral caveats are substantive.
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?
A single front-loaded sentence with no wasted words. The semicolon-separated caveats are dense but purposeful, though the phrase could be split for easier parsing.
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 tool with no output schema and no annotations, the description covers the essential behavioral context: read-only nature, provenance, missing data, and scope limitation. It does not need to explain return values in detail, and the remaining gap is minor date-format guidance already present in the schema.
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 0% for two required date parameters. The description only says 'for a date range,' adding minimal semantic detail beyond the parameter names themselves; it does not clarify format, inclusiveness, or whether both bounds are required.
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 read-only verb and resource ('workout observations') scoped to a date range, making it clearly distinct from siblings like get_sleep_summary or get_timeseries. It does not explicitly name any sibling for comparison, but the resource noun is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The date-range scope implies when to use the tool, but there is no explicit when-to-use guidance, no exclusions, and no mention of alternative tools such as get_timeseries or get_daily_summary. Usage is inferable but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_supported_timeseries_typesB
Read-only supported timeseries type metadata; metadata only, no local health values, no cursor values, and no clinical interpretation.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No |
TDQS
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 read-only status plus the content boundaries (no health values, no cursor values, no clinical interpretation), which usefully sets expectations. However it says nothing about auth requirements, return format, caching, or how the category filter behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded clause with no filler. It is negation-heavy and slightly cryptic, but every phrase adds a boundary that constrains expectations.
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 one-optional-param metadata tool with no output schema, the description covers what the tool is and what it does not return. The undocumented category parameter and the absent return-shape hint leave a meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'category' parameter has 0% schema description coverage and is never mentioned in the description. The agent gets no guidance on what values it accepts or what filtering it performs, so the description fails to compensate for the schema gap.
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 phrase 'Read-only supported timeseries type metadata' combined with the tool name makes the resource (timeseries types) and operation (read-only listing) clear. The negative clauses distinguish it from value-returning siblings like get_timeseries or get_daily_summary, though no sibling is named.
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?
Usage is only implied: by stating 'no local health values, no cursor values, and no clinical interpretation' it hints that this is a metadata/discovery tool rather than a data-retrieval one. No explicit when-to-use, prerequisites, or named alternative tools are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_synced_metricsA
Read-only catalog observation listing synced metric types, provenance, and missing-data caveats; no clinical interpretation.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does substitute for readOnlyHint by stating "Read-only catalog observation." It also discloses what the response contains (metric types, provenance, missing-data caveats) and a scope limit (no clinical interpretation), which is strong for a zero-argument tool; it stops short of mentioning permissions, rate limits, or pagination.
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?
A single sentence that front-loads the operation type and packs purpose, return contents, and scope caveat without a wasted word. Nothing could be trimmed without losing meaning.
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 no-parameter, no-output-schema read-only listing, the description covers operation, safety profile, returned fields, and an interpretation caveat. It is nearly complete; only disambiguation from the near-identical sibling and any call prerequisites are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to document and the baseline is 4. The input schema confirms an empty object with additionalProperties false.
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?
"Listing synced metric types, provenance, and missing-data caveats" gives a specific verb plus a concrete resource and even names the payload. It is clear on its own, but it does not distinguish itself from the very similar sibling list_supported_timeseries_types, so an agent must guess which catalog to use.
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?
"Read-only catalog observation" and "no clinical interpretation" imply when the tool is appropriate (metadata inspection, not clinical analysis), which is genuine guidance. However there is no explicit when-to-use statement, no prerequisites, and no routing to alternatives such as list_supported_timeseries_types or get_timeseries.
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.
9 tool updates
v0.0.1- First observed
explain_sources - First observed
get_bridge_context_markdown - First observed
get_bridge_status - First observed
get_daily_summary - First observed
get_sleep_summary - First observed
get_timeseries - First observed
get_workouts - First observed
list_supported_timeseries_types - First observed
list_synced_metrics
TDQS
Scored across 9 tools
Most tools target clearly different resources or metadata layers, but get_bridge_status and explain_sources overlap on sync/provenance, and get_bridge_context_markdown is a composite view that can blur with bridge status. Descriptions do help separate them.
All tool names use consistent snake_case with a clear verb_noun pattern (get_, list_, explain_) throughout the set. No mixing of conventions or vague action names.
Nine tools is well-scoped for a read-only health-data bridge; each covers a distinct resource or metadata layer without obvious bloat. The count sits comfortably in the ideal 3-15 range.
The surface covers bridge status/context, supported and synced metric metadata, timeseries, workouts, sleep, daily summaries, and source provenance, which is strong for a read-only bridge. Minor gaps like sync-control or deeper per-activity detail exist, but no critical dead ends for the stated read-only purpose.
Maintenance
Related MCP Connectors
MCP server for Withings health data — sleep, activity, heart, and body metrics.
- SomviaOAuthapp.somvia
Apple Health training load, recovery, HRV and workout detail for Claude, ChatGPT and any MCP client.
Adaptive running coach MCP server — training data, plans, and recovery for AI assistants.
Read-only Apple Health data synced from your iPhone: sleep, heart rate, HRV, workouts and trends.
Related MCP Servers
- AlicenseAqualityCmaintenanceLocal-first MCP server that reads Apple Health export files (export.xml/zip) and exposes activity, sleep, HRV, and workout data to AI agents, keeping all data on your machine.1899 npm3MIT
- AlicenseAqualityAmaintenanceOpen-source MCP server for MetricBridge (formerly Health Export AI). 16 tools and 22 prompts let any MCP agent query 190 Apple Health metrics from files on your own machine. The server is read-only, has zero dependencies and makes zero network calls.181,320 npm10MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that gives AI read-only access to Apple Health data through shortcuts and Cloudflare, enabling queries of current stats, detailed records, and trends.MIT
- AlicenseNot gradedqualityDmaintenanceRead-only MCP server that exposes Garmin Connect health data from a local SQLite database to AI assistants, enabling queries for recent days, sleep, weekly trends, and a guarded SQL query surface.MIT