ORP MCP Server
Provides location-based discovery of physical activity facilities and places, using OpenStreetMap data for geocoding and proximity search.
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., "@ORP MCP ServerCreate a weekly fitness and meal plan using nearby places."
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.
Open Routine Protocol (ORP)
ORP is an open protocol, plus a reference MCP server, that lets any AI assistant build a personal, location-aware routine combining exercise and eating. It works from your own profile, real places near you (gyms, parks with outdoor fitness equipment, pools, sports centres, restaurants) and, if you want, your wearable data. Your profile, plans and logs stay on your machine. ORP reuses open standards (OpenActive, schema.org, OpenStreetMap, MCP) and adds only what is missing: a portable profile, a plan format, a provider discovery manifest and an MCP tool contract. It is non-commercial, Apache-2.0 licensed, and for general wellness only.
⚠️ Wellness, not medicine. ORP does not diagnose, treat or take medical conditions into account. See DISCLAIMER.md.
Contents
Related MCP server: fitness-agent-mcp
Why not just an app?
Your assistant already knows you. People plan their lives with AI assistants. A protocol lets any MCP-capable assistant (Claude, local models, others) plan routines, instead of locking the capability inside one app.
Data about places is scattered, and mostly open. Gyms publish sessions through OpenActive, OpenStreetMap maps outdoor fitness stations and restaurants, and Open Food Facts documents packaged food. An app would have to scrape or license all of that. A protocol lets providers publish once and be found by every assistant.
Plans should be portable. A profile or plan made with one tool should open in another. ORP documents are plain JSON with public schemas.
Safety and privacy belong in the standard. Readiness checks, intensity caps, attribution and "coarse location only" are protocol requirements, not features one app may or may not have.
Local-first is easier with a protocol. The server runs on your machine next to your data. Nobody needs to host your health information.
How it works
flowchart LR
subgraph You["Your device"]
P[(Profile<br/>plans · adherence log)]
C[AI client<br/>Claude Desktop / Claude Code / …]
S[ORP MCP server]
C <-->|MCP tools · resources · prompts| S
S <--> P
end
subgraph Open["Open data"]
OSM[OpenStreetMap<br/>Nominatim · Overpass]
OA[OpenActive<br/>RPDE feeds]
OFF[Open Food Facts]
end
subgraph Prov["Providers"]
G[Gym · sports centre<br/>/.well-known/orp.json]
R[Restaurant<br/>schema.org Menu]
end
W[Open Wearables<br/>self-hosted, optional]
S -->|coarse location + filters| OSM
S -->|public feed pages| OA
S -->|barcode / product name| OFF
S -->|public manifests| G & R
W -.->|aggregates| SThe language model composes the plan. The ORP server supplies data, validation and rules:
profile_get/profile_updateand the readiness gate (adult, disclaimer, generic screening);find_facilities,find_sessions,find_meals,food_lookup,geocode,wearable_summary;the model drafts a plan →
plan_validatechecks the schema and safety guardrails → the model fixes any errors →plan_save;log_adherence→adherence_summary→plan_suggest_adjustmentsproposes changes, which are saved only with your approval.
Full contract: spec/2026-09-16/mcp-tools.md.
5-minute quickstart
You need uv and Python 3.12 or newer (uv can install Python for you).
git clone https://github.com/neldroid/open-routine-protocol.git
cd open-routine-protocol
uv sync
uv run orp demo # offline, end-to-end walkthrough; no network neededOptionally create your profile from the terminal (or let the assistant do it in step 3):
uv run orp profile init --locale es-ES # or --locale enClaude Desktop
Add the server to your Claude Desktop configuration file. On macOS it is
~/Library/Application Support/Claude/claude_desktop_config.json; on Windows,
%APPDATA%\Claude\claude_desktop_config.json.
{
"mcpServers": {
"orp": {
"command": "uv",
"args": ["run", "--directory", "/ABSOLUTE/PATH/TO/open-routine-protocol", "orp", "serve"]
}
}
}Restart Claude Desktop. Pick the create_weekly_plan prompt from the attachment menu, or just ask: "Make me a routine for next week with ORP. I live in Chamberí, Madrid."
Claude Code
claude mcp add orp -- uv run --directory /ABSOLUTE/PATH/TO/open-routine-protocol orp serveThen run /mcp to confirm the connection, and use the /mcp__orp__create_weekly_plan prompt or ask in plain
language. More options (wearables, HTTP transport) are in
examples/clients/claude-code.md.
Other commands
uv run orp validate examples/plans/*.json # validate ORP documents (type auto-detected)
uv run orp serve --http --port 8765 # streamable HTTP on 127.0.0.1 (no auth: local only)Configuration
Variable | Purpose |
| Where the profile, plans and log live (default: platform config dir, e.g. |
| Public-data HTTP cache (default: platform cache dir) |
| Comma-separated OpenActive RPDE feed URLs (also |
| Your own Open Wearables instance (optional) |
| Use other instances (recommended for heavy use) |
ORP provider manifests are discovered through a local registry, $ORP_HOME/providers.json:
{"providers": ["https://gym.example.org"]}.
The privacy promise
Your profile, plans and logs never leave your machine through ORP. They are plain JSON files with owner-only permissions under
ORP_HOME, and you can export or delete them at any time.Outbound requests carry only coarse location (≤ 3 decimals, about 110 m), a radius and activity or diet filters. This is a protocol requirement, enforced by tests that inspect every outgoing request.
Wearables are opt-in, read-only, aggregates only, from an instance you host. They are never cached.
No telemetry, analytics or crash reporting.
Remember that your AI client sends tool results to its model provider under its own terms.
Details, a data-flow diagram and GDPR notes are in spec/2026-09-16/privacy.md.
Safety and the wellness disclaimer
ORP is a general wellness tool. It is not a medical device and not medical advice.
Plans are generated only for adults who have acknowledged the disclaimer.
A generic readiness screening (inspired by established questionnaires, not a copy of any) switches plans to low intensity and recommends consulting a professional when any answer suggests caution.
plan_validateenforces documented guardrails: intensity caps for beginners, at most 6 consecutive workout days, limits on week-over-week load increases, and no aggressive energy deficits. Guidance is portion-based by default; numbers appear only if you opt in.Every plan tells you to stop and seek urgent help on chest pain, fainting or similar warning signs.
Thresholds and their sources are in spec/2026-09-16/safety.md. Read DISCLAIMER.md.
How ORP relates to OpenActive, schema.org, MCP and Open Wearables
ORP is a complementary layer. It exists because these projects already did the hard work, and it tries hard not to duplicate any of it.
OpenActive publishes open opportunity data for physical activity: sessions, facility slots and the Activity List vocabulary, over RPDE feeds. ORP consumes those feeds as they are, uses the Activity List for preferences, and points provider manifests at existing RPDE feeds instead of inventing a session format. Booking will build on the Open Booking API. Thank you to the OpenActive community and to publishers such as Everyone Active, whose CC BY 4.0 data is used in our tests.
schema.org already describes restaurants, menus, nutrition, diets, organisations and opening hours. ORP provider manifests and menus are plain schema.org JSON-LD.
Model Context Protocol is how assistants use tools. ORP is a set of MCP tools, resources and prompts with a normative contract, so any MCP client can use any ORP server.
Open Wearables unifies wearable data behind a self-hosted API. ORP reads aggregates from it, with the user's opt-in, instead of integrating each device.
OpenStreetMap and Open Food Facts provide the places and packaged-food data (ODbL). ORP follows their usage policies (identifying User-Agent, rate limits, caching) and always carries attribution into plans.
What ORP adds is the agentic glue: a portable profile, a plan document with safety semantics, a discovery manifest, and a tool contract. If a future version of any of these projects covers part of that, ORP should adopt it.
Repository layout
spec/2026-09-16/ normative spec (RFC 2119) and JSON Schemas (source of truth)
spec/rfcs/ RFC template and accepted RFCs
examples/ personas (Madrid, Valencia, London), valid plans, providers, client configs
src/orp/ reference implementation: MCP server, adapters, safety, CLI, demo
tests/ offline test suite (recorded fixtures, respx, in-memory MCP client)Roadmap
Booking through the OpenActive Open Booking API (links only today).
Spanish municipal sports centre adapters, and more OpenActive-style open data outside the UK.
Weather-aware alternatives (for example with an open weather API).
An
orp.jsongenerator page for small providers.Client SDKs, starting with Kotlin/JVM.
Honour provider
Cache-Control, and support full RPDE feed replication with background harvesting.More
opening_hourssyntax, more languages, accessibility-aware venue filtering.Spec: a conformance test kit for third-party ORP servers.
Contributing and governance
Contributions are very welcome: code, adapters, translations, and especially spec reviews. Read CONTRIBUTING.md (including the RFC process), GOVERNANCE.md and the Code of Conduct. Report vulnerabilities as described in SECURITY.md.
License
Apache License 2.0 for both the specification and the code. See LICENSE.
Data in src/orp/demo/fixtures/ keeps its original licences (ODbL, CC BY 4.0), as listed in
its README.
Available Tools
16 toolsadherence_summaryBRead-only
7- and 28-day adherence metrics for the current plan.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | Yes | |
| plan_id | Yes | |
| counts_7d | Yes | |
| counts_28d | Yes | |
| adherence_7d | Yes | |
| adherence_28d | Yes | |
| avg_perceived_effort_7d | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds the specific scope (current plan) and time windows (7 and 28 days), which is useful context. It does not contradict annotations, and since the operation is read-only, no side effects need disclosure. However, it does not describe what happens if no plan exists or the interpretation of 'adherence,' but that is partially mitigated by the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no filler. The key information—time windows and scope—is front-loaded, making it easy for an agent to parse quickly. Every word contributes to 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 simple read-only tool with an output schema, the description is mostly adequate, but the missing parameter explanation leaves a gap. The tool depends on a 'current plan' concept that is not defined (likely from plan_get_current), and the description does not clarify this dependency. The output schema covers return values, so that is not an issue. Overall, it is minimally complete but could benefit from a brief note about the as_of parameter.
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%, and the description does not mention the 'as_of' parameter at all. The agent must infer that it specifies the reference date for metrics, and its nullability/default are only in the schema. Since the description should compensate for low schema coverage, this is a significant gap, though the parameter is optional and not critical to the core operation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns adherence metrics over 7- and 28-day windows for the current plan. It identifies the resource (adherence metrics) and the specific timeframes, making it distinct from sibling tools like log_adherence (which logs) and plan_get_current (which retrieves the plan). However, it lacks an explicit verb like 'retrieve' or 'get,' though the intent 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 description provides no guidance on when to use this tool versus alternatives. It does not mention that it is read-only (though annotations cover that) or contrast with log_adherence or plan_get_current. No conditions, exclusions, or prerequisites are stated, leaving the agent to infer usage from the tool name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_energyARead-only
Opt-in energy ESTIMATES: Mifflin-St Jeor resting energy and Compendium MET values. Refuses unless the profile enables show_energy_estimates. Never a prescription.
| Name | Required | Description | Default |
|---|---|---|---|
| workouts | No | Activities by MET-table key (e.g. 'walking_brisk'), Compendium code or OpenActive concept URI, with durations | |
| include_resting | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| method | Yes | |
| citation | Yes | |
| estimate | No | |
| workouts | Yes | |
| total_workout_kcal | Yes | |
| resting_kcal_per_day | Yes | |
| maintenance_kcal_per_day | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses two important behaviors: the tool refuses to operate unless show_energy_estimates is enabled, and the output is never a prescription. This adds meaningful behavioral context beyond the structured 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?
The description is compact and front-loaded: the first sentence names the purpose and methods, and the second adds the key behavioral constraints. Every sentence earns its place with no filler or repetition.
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 read-only estimation tool with an output schema, the description covers the essential behavioral and usage constraints: opt-in requirement, refusal condition, method basis, and non-prescription framing. It is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documents the 'workouts' parameter but leaves 'include_resting' mostly implicit. The description adds method context (Mifflin-St Jeor for resting, MET values for activities) that helps infer the parameter meanings, but it does not explicitly map parameters or describe all accepted activity key formats.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool computes energy estimates using Mifflin-St Jeor resting energy and Compendium MET values, naming the specific verb and resource. It does not explicitly contrast with sibling tools, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context on when to use the tool: it is opt-in, requires the profile's show_energy_estimates setting, and produces estimates rather than prescriptions. It does not name alternatives or explicitly say when not to use it, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_facilitiesARead-only
Gyms, sports centres, outdoor fitness stations, pools, tracks and parks from OpenStreetMap. Defaults to the profile home area and travel radius. Sends only coarse coordinates.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | ||
| lon | No | ||
| kinds | No | ||
| limit | No | ||
| radius_m | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| center | Yes | |
| sources | Yes | |
| radius_m | Yes | |
| facilities | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety and scope. The description adds two behavioral details beyond those: it defaults to profile home area and travel radius, and it 'Sends only coarse coordinates' – a privacy-relevant disclosure. These add value over the annotations, but it doesn't describe return behavior or error cases. Given the annotations cover the primary safety profile, a 4 is appropriate.
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 sentences with no filler. The first sentence front-loads the resource types, and the second covers defaults and privacy. Every word contributes to understanding the tool's scope and behavior. Excellent conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description leaves parameter usage largely unexplained. With 5 optional parameters and 0% schema coverage, the agent cannot determine how to filter by kinds, set limits, or interpret the radius. The description is too sparse for the tool's complexity, even though the output schema exists. It needs more detail on parameter semantics to be 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?
Schema description coverage is 0%, so the description must compensate for parameter explanations. It only vaguely references 'defaults to the profile home area and travel radius,' which hints at radius_m and lat/lon but does not explain kinds, limit, or the exact semantics of coordinates. An agent has no guidance on how to use the kinds enum or limit parameter. This is a significant gap for a 5-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as listing fitness-related facilities from OpenStreetMap, enumerating specific types (gyms, sports centres, outdoor fitness stations, pools, tracks, parks). It distinguishes itself from siblings like find_sessions or find_meals by focusing on physical locations. The phrase 'from OpenStreetMap' gives a specific data source, making 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states that it 'Defaults to the profile home area and travel radius,' which tells the agent when no coordinates are provided. It implies that providing lat/lon overrides defaults, but it does not explicitly say when to use this tool versus geocode or other siblings. It gives context but lacks explicit exclusions or alternative routing, so it earns a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_mealsCRead-only
Places to eat that fit the diet, from OpenStreetMap and ORP provider menus.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | ||
| lon | No | ||
| limit | No | ||
| cuisine | No | ||
| radius_m | No | ||
| diet_pattern | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | Yes | |
| center | Yes | |
| places | Yes | |
| sources | Yes | |
| radius_m | Yes | |
| diet_pattern | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and openWorldHint, so the description only needs to add context beyond those. It adds useful source provenance ('OpenStreetMap and ORP provider menus'), but does not disclose behavior such as how location defaults work, what happens with no results, or how 'fit the diet' is determined.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, short sentence with no filler and the core resource front-loaded. It is concise, though its brevity contributes to the lack of parameter and usage detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 optional parameters and only a vague noun phrase, the description leaves too much to inference. The output schema helps, but the description does not explain how to shape a query or what distinguishes this tool's behavior from related tools.
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%, and the description does not compensate. It mentions 'diet' vaguely but does not explain diet_pattern, cuisine, radius_m, limit, or how lat/lon are used. For a tool with 6 parameters, this is a significant 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 description identifies the resource ('places to eat') and the key constraint ('fit the diet'), which distinguishes it from siblings like find_facilities and food_lookup. It lacks an explicit verb like 'search' or 'find', but the tool name and noun-phrase description make the purpose reasonably clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when the user needs places to eat that match a dietary pattern. However, it provides no explicit guidance about when not to use it or how it compares to related tools like food_lookup or find_facilities.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_sessionsBRead-only
Classes and bookable facility slots from ORP provider manifests and OpenActive feeds.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | ||
| lon | No | ||
| limit | No | ||
| activity | No | OpenActive activity concept URI or label substring | |
| radius_m | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| feeds | Yes | |
| notes | Yes | |
| center | Yes | |
| sources | Yes | |
| radius_m | Yes | |
| sessions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already disclose that this is read-only and open-world, and the description adds source context. However, it does not describe behavioral details such as whether location parameters are filtering or required, whether results are live or cached, or how the OpenActive feeds are consumed. There is no contradiction with the 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?
The description is a single, scannable phrase with no filler and places the core resource type first. It is appropriately terse, though this terseness contributes to the lack of usage and parameter 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?
With an output schema, read-only and open-world annotations, and all optional parameters, the description does not need to explain return values. But it omits meaningful context such as default behavior without location, what ORP/OpenActive mean in practice, and how this differs from find_facilities, leaving a moderate 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?
Only the activity parameter has a schema description, giving 20% schema coverage, and the description adds no parameter guidance. The agent must rely on parameter names and constraint ranges, so the description does not compensate for the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as 'classes and bookable facility slots' and names specific sources ('ORP provider manifests and OpenActive feeds'). It is clear, but it relies on the tool name for the verb and does not explicitly contrast itself with the sibling find_facilities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use find_sessions versus alternatives such as find_facilities or geocode. The intended use must be inferred entirely from the resource type.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
food_lookupARead-only
Packaged-food information from Open Food Facts, by barcode or by name.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| barcode | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | No | |
| sources | Yes | |
| products | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint and openWorldHint, so the read-only and external-data behavior is covered. The description adds the useful context that data comes from Open Food Facts, but it does not explain barcode-versus-query precedence, no-result behavior, or result variability beyond what openWorldHint implies. There is no contradiction with the 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?
The description is a single front-loaded sentence with no filler. It states the scope, source, and lookup modes efficiently, which is appropriate for a small read-only lookup tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-optional-parameter read-only tool with an output schema, the core facts are present. But the description is terse about query-versus-barcode behavior and gives no explicit usage guidance, so an agent would mostly be relying on inference. It is adequate but not fully 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 schema has 0% description coverage, so the description must compensate. It does map 'barcode' to barcode lookup and 'query' to name search, which adds real meaning. However, it does not describe the limit parameter or how query and barcode interact when both are provided, leaving part of the semantics to inference.
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 identifies a concrete resource (packaged-food information), a specific source (Open Food Facts), and the two lookup modes (barcode or name), so an agent can infer what the tool does. It lacks an explicit verb, relying on the tool name 'food_lookup' to convey the retrieval action, and it does not explicitly differentiate it from siblings like find_meals.
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 context is implied: an agent should use this when it needs packaged-food details from Open Food Facts, with barcode or name as the search route. However, the description gives no explicit when-to-use or when-not-to-use guidance, and it does not mention alternatives among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
geocodeARead-only
Turn a place label into coarse coordinates (Nominatim). Sends only the label.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Neighbourhood or place name, e.g. 'Chamberí, Madrid' | |
| locale | No | Preferred result language |
Output Schema
| Name | Required | Description |
|---|---|---|
| lat | Yes | |
| lon | Yes | |
| label | Yes | |
| sources | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations readOnlyHint and openWorldHint already present, the description adds valuable context by naming the external service (Nominatim) and stating that only the label is sent. This clarifies the tool's external dependency and privacy-relevant behavior beyond the annotation hints.
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 short sentences, front-loaded with the core action and followed by the key behavioral note. Every word earns its place and no extraneous detail is included.
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?
The tool is simple, the output schema exists to define return values, and annotations cover side effects. The description supplies the essential external-service and privacy context, so an agent can invoke it correctly. Minor gaps remain around rate limits or exact coordinate precision, but these are not critical for a coarse-geocoding call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents both parameters with 100% coverage, so the baseline is 3. The description does not add meaningful parameter-specific detail, though the phrase 'Sends only the label' hints that the query is the main payload.
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 uses a specific verb ('Turn') and a clear resource ('a place label') to describe the outcome: coarse coordinates. It also names the provider (Nominatim), making the tool's role unambiguous and distinct from sibling tools like find_facilities or food_lookup.
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 use case is implied by the definition: if an agent needs coarse coordinates from a place label, this is the tool. However, there is no explicit guidance about when not to use it or how it compares to alternatives such as find_facilities or estimate_energy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_adherenceC
Append an entry to the adherence log (append-only).
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | ||
| status | Yes | ||
| timestamp | No | ||
| plan_item_id | Yes | ||
| perceived_effort | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| entry | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false (write operation) and destructiveHint=false (non-destructive). The description adds the behavioral trait 'append-only', which clarifies that entries cannot be modified or deleted, going slightly beyond the annotations. However, it does not disclose potential side effects, validation rules, or failure modes, and the output schema is not described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. The core action is front-loaded, and the append-only caveat is placed parenthetically, which is appropriate. It earns its place without unnecessary elaboration.
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 tool with 5 parameters (2 required), the description is inadequate. It does not explain the meaning or purpose of the parameters, any required preconditions (e.g., existing plan item), or how the tool interacts with other tools like adherence_summary. While an output schema exists, the description leaves the agent guessing about parameter semantics and usage context, making it incomplete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description provides no information about the parameters. The schema itself is somewhat self-explanatory (plan_item_id as string, status enum), but the description fails to add any domain meaning, such as what 'perceived_effort' represents or how 'timestamp' should be formatted. It does not compensate for the lack of schema coverage at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Append an entry') and the target resource ('the adherence log'). The phrase 'append-only' distinguishes it from potential modification or deletion tools. However, it doesn't explicitly contrast with the sibling adherence_summary, which presumably reads adherence data, leaving some ambiguity about when to use this tool versus reading the log.
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 guidance on when to use this tool, what conditions warrant logging an adherence entry, or any prerequisites (e.g., valid plan_item_id). It also doesn't mention alternatives like adherence_summary for reading. The description is purely declarative with no usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_get_currentARead-only
Return the current plan, or null.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| plan | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only nature is known. The description adds the behavioral detail that it may return null, which is useful. It does not contradict annotations, and the openWorldHint is not addressed, but that is a minor omission.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, front-loaded with the action and resource, and includes the null case without verbosity. Every word 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?
For a zero-parameter getter with an output schema, the description is complete: it states what is returned and the null condition. There is nothing else an agent needs to know 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?
There are zero parameters, and the schema coverage is 100% (since there are no parameters). The baseline for 0 parameters is 4, and the description correctly omits any parameter explanation, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Return') and resource ('current plan'), and explicitly mentions the null return case. It clearly distinguishes from siblings like plan_save (mutation), plan_validate (validation), and plan_suggest_adjustments (suggestion) by implying a simple getter of the active plan.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description is purely functional and gives no context about scenarios where this getter is preferred over plan_validate or other plan-related tools. It leaves usage entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_saveA
Validate again and store the plan as the current plan. Refuses invalid plans.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | A valid ORP plan |
Output Schema
| Name | Required | Description |
|---|---|---|
| plan_id | Yes | |
| saved_at | Yes | |
| validation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description discloses that the tool re-validates the plan and refuses invalid inputs. This adds useful behavioral context, though it could more explicitly state what happens to the existing current plan when a new one is saved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly written sentence with no filler. The core action ('store as current plan') is front-loaded, and the refusal behavior is added as a concise second clause.
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 single-parameter tool with an output schema, the description covers the essential behavior: validating, storing, and refusing invalid plans. The main gap is that the structure and provenance of an 'ORP plan' rely on domain knowledge, but this is a minor omission given the output schema and sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the 'plan' parameter described as 'A valid ORP plan'. The description adds no further parameter-level meaning beyond what is already in the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('store') and resource ('the plan as the current plan'), and immediately clarifies it rejects invalid plans. This distinguishes it from plan_validate, which presumably only validates without persisting, and from plan_get_current, which only reads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when a plan should be validated and persisted as the current plan. However, it does not explicitly state when to prefer this over sibling tools like plan_validate, nor does it mention any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_suggest_adjustmentsARead-only
Evaluate the current plan's adjustment_rules against adherence and wearable aggregates. Returns a proposal (JSON Patch + proposed plan). Never changes the stored plan: ask the user for approval, then call plan_save.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | ||
| use_wearables | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | Yes | |
| notes | Yes | |
| changes | Yes | |
| metrics | Yes | |
| validation | Yes | |
| fired_rules | Yes | |
| proposed_plan | Yes | |
| requires_user_approval | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description reinforces non-mutation ('Never changes the stored plan') and adds the approval-required behavior. It does not disclose potential external data pulls (openWorldHint) or rate limits, but given the annotation coverage, the added approval context is valuable. No contradiction with 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 sentences, front-loaded with the core purpose, followed by the critical non-mutation and approval requirement. No wasted words; every sentence 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?
An output schema exists, so return details are covered. The description covers the action, the non-mutating nature, and the follow-up step. It does not mention prerequisites (e.g., a plan must exist) or error conditions, but for a suggestion tool these are minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It mentions 'wearable aggregates' which hints that use_wearables toggles that, but it never explicitly describes as_of or how use_wearables behaves. The description does not compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Evaluate the current plan's adjustment_rules against adherence and wearable aggregates') and clearly defines the output ('proposal (JSON Patch + proposed plan)'). It also names the next step (plan_save), distinguishing it from the save tool. The purpose is unambiguous and distinct from siblings.
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 gives explicit usage guidance: it is a non-mutating tool that produces a proposal, and the user must be asked for approval before calling plan_save. It implies when to use it (before saving changes) but does not explicitly contrast with plan_validate or other analysis tools. Still, the workflow is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_validateBRead-only
Validate a plan against the schema, the readiness gate and the safety guardrails.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | An ORP plan document | |
| compare_with_current | No | Also check weekly load progression against the saved plan |
Output Schema
| Name | Required | Description |
|---|---|---|
| valid | Yes | |
| errors | Yes | |
| summary | No | |
| warnings | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds some context beyond annotations by naming the three validation criteria (schema, readiness gate, safety guardrails), but it does not explain what happens on failure, whether it returns pass/fail details, or any side effects. Since readOnlyHint is already true, the read-only nature is covered. The description is consistent with annotations, so no contradiction, but it stops short of fully disclosing validation outcomes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the action and scope. Every word contributes to the meaning, with no fluff or redundancy. It is appropriately sized for the tool's simplicity.
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?
Although an output schema exists, the description is incomplete for practical use. It does not explain when to invoke validation (e.g., before saving) or what the validation criteria entail (e.g., what the readiness gate or safety guardrails are). An agent may not understand the domain-specific terms or the tool's role in the workflow, leaving significant gaps for a tool with a nested plan object.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with both 'plan' and 'compare_with_current' already documented. The description itself does not add any additional meaning about the parameters, such as how the plan is structured or what the comparison entails. It relies entirely on the schema, which is adequate for a baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (validate) and the object (a plan), and specifies what it validates against: the schema, readiness gate, and safety guardrails. This distinguishes it from siblings like plan_save or plan_get_current, which perform different actions. The verb is precise and the resource 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 description provides no guidance on when to use this tool versus alternatives. It doesn't mention that it should be called before saving a plan, or that it complements plan_save or plan_suggest_adjustments. No exclusions or alternative tools are referenced, leaving the agent to infer its role.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
profile_getARead-only
Read the local ORP profile and the readiness gate status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| profile | Yes | |
| readiness | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only nature is known. The description adds 'local' and 'readiness gate status' as behavioral scope, which is useful but modest. It does not describe output format or side effects, though the output schema covers return values.
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 clear sentence that front-loads the verb and resource. Every word earns its place; there is no filler or redundancy.
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 tool with an output schema and readOnlyHint annotation, the description is complete. An agent knows what the tool does, that it is safe, and can rely on the output schema for return structure.
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 the description does not need to explain parameter behavior. Schema description coverage is 100%, and no parameter-level semantics 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 the verb 'Read' explicitly and names the exact resources: the local ORP profile and the readiness gate status. It is clearly distinguished from siblings like profile_update (which mutates) and readiness_questions (which asks questions rather than reading the gate 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?
No guidance is given on when to use this tool versus alternatives such as profile_update or readiness_questions. The description states what it reads but does not indicate the intended use context or mention any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
profile_updateA
Create or patch the local profile. Never include diagnoses, medications or conditions.
| Name | Required | Description | Default |
|---|---|---|---|
| patch | Yes | JSON Merge Patch (RFC 7386) applied to the profile. If no profile exists, it must be a complete profile; id, orp_version and timestamps are filled in. |
Output Schema
| Name | Required | Description |
|---|---|---|
| profile | Yes | |
| warnings | Yes | |
| readiness | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a readOnlyHint=false, destructiveHint=false operation, and the description confirms the write nature ('Create or patch') without contradicting them. It adds the 'local profile' scope and the prohibited-content guardrail, but does not disclose side effects such as overwrite behavior or persistence beyond what the schema's JSON Merge Patch detail implies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is two short sentences: one front-loaded with the action and resource, the second an imperative safety rule. There is no filler or redundant restatement of the schema.
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 one-parameter tool with a rich patch schema, an output schema, and safety annotations, the description plus schema provides what an agent needs to invoke it correctly. The main omission is explicit routing relative to profile_get, but that is a usage-guidance issue and does not leave the invocation ambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the single required parameter 'patch' at 100%, including the RFC 7386 merge-patch semantics and the complete-profile rule for new profiles. The tool definition itself adds no parameter-level meaning beyond 'Create or patch', which matches the baseline of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific verb phrase 'Create or patch' and names the 'local profile' as the resource, which makes the tool's mutating purpose clear. It does not explicitly name sibling profile_get as a read alternative, so it misses the top level of differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Never include diagnoses, medications or conditions' is an explicit content restriction and helps an agent avoid harmful payloads. However, the description gives no when-to-use guidance versus profile_get or other siblings, and the create-vs-patch condition is left to the schema's parameter description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
readiness_questionsBRead-only
Generic pre-activity screening items, the wellness disclaimer and the red-flag notice.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | 'en' or 'es-ES' |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| locale | Yes | |
| disclaimer | Yes | |
| further_reading | Yes | |
| red_flag_notice | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already communicates that this is a read-only operation, and the description adds useful content-level context by naming the screening items, wellness disclaimer, and red-flag notice. There is no contradiction between the description and 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?
The description is short and gets straight to the content of the tool with no filler. It is somewhat telegraphic because it is a noun phrase rather than a complete sentence, but it remains concise and scannable.
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?
The tool is simple, has full parameter documentation in the schema, has an output schema, and carries a readOnlyHint, so much of the needed context is already provided elsewhere. Still, the description does not explicitly state what action the tool performs or when it should be used, leaving a moderate 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 schema description coverage is 100% because the only parameter, locale, is already documented with the allowed values 'en' or 'es-ES'. The tool description adds nothing about parameters, which is acceptable given the schema already covers them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource: generic pre-activity screening items, the wellness disclaimer, and the red-flag notice. It lacks an explicit verb such as 'returns' or 'retrieves,' and it does not distinguish this tool from its siblings, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives. The name and description loosely imply pre-activity screening, but there is no explicit context, prerequisite, or exclusionary condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wearable_summaryARead-only
Aggregated sleep, resting heart rate, steps and workouts from the user's own Open Wearables instance. Opt-in; returns aggregates only.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | Yes | |
| period | Yes | |
| steps_avg | Yes | |
| steps_avg_7d | Yes | |
| resting_hr_avg | Yes | |
| workouts_count | Yes | |
| sleep_hours_avg | Yes | |
| sleep_hours_avg_3d | Yes | |
| sleep_hours_avg_7d | Yes | |
| resting_hr_delta_7d | Yes | |
| workout_minutes_total | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds meaningful behavioral context beyond that: data is opt-in, sourced from the user's own instance, and returned only as aggregates rather than raw records. This clarifies privacy and scope expectations without contradicting the 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?
The description is compact with data types front-loaded, and the second sentence adds a clarifying constraint. There is minor redundancy between 'Aggregated' and 'returns aggregates only', but overall every sentence earns its place and the tool is easy to scan.
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 read-only tool with an output schema, the description covers the source, privacy condition, and aggregate nature of the data well. The main gap is the undocumented 'days' parameter, which leaves the caller without full information about how the aggregation window is controlled. It remains callable with defaults, so this is a moderate rather than fatal omission.
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?
There is one parameter, 'days', and schema description coverage is 0%. The description does not mention or explain this parameter at all. The title 'Days' plus default/min/max give some hint that it controls the aggregation window, but the description was expected to compensate for low schema coverage and does not clarify whether it is a rolling window, calendar days, or something else.
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 identifies a specific resource ('the user's own Open Wearables instance') and enumerates the exact data domains covered: sleep, resting heart rate, steps, and workouts. 'Returns aggregates only' supplies the action and distinguishes it from sibling tools that handle profiles, plans, and adherence. It could be slightly more explicit about being a summary/retrieval operation, but the intent is clear.
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 gives clear context: this is appropriate when the agent needs aggregate wearable metrics from the user's own opted-in Open Wearables data. It also implies a limitation (only aggregates, no raw records) and a prerequisite (opt-in). It does not name alternatives or explicitly say when not to use it, but the context is sufficiently concrete.
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.
16 tool updates
v0.1.0- First observed
adherence_summary - First observed
estimate_energy - First observed
find_facilities - First observed
find_meals - First observed
find_sessions - First observed
food_lookup - First observed
geocode - First observed
log_adherence - First observed
plan_get_current - First observed
plan_save - First observed
plan_suggest_adjustments - First observed
plan_validate - First observed
profile_get - First observed
profile_update - First observed
readiness_questions - First observed
wearable_summary
TDQS
Scored across 16 tools
Each tool targets a distinct resource or action: profile get/update, facility/session/meal discovery, plan lifecycle, and adherence logging/summary. Minor overlap exists between plan_validate and plan_save (save re-validates) and between profile_get and readiness_questions, but the descriptions clarify the boundaries.
Most names follow a verb_noun pattern (find_facilities, estimate_energy, plan_save), but several are noun phrases (readiness_questions, wearable_summary, adherence_summary), one is a single verb (geocode), and food_lookup reverses the verb/object order. The snake_case convention is consistent, but the semantic pattern is mixed.
16 tools is slightly above the ideal 3-15 range, but the domain spans profile management, discovery, nutrition, wearables, plans, and adherence, and each tool has a distinct purpose. No tools feel redundant.
Core workflows are covered: profile get/update, plan validate/save/get, adherence log/summary, and location/nutrition discovery. Obvious gaps include no plan delete/history, no retrieval of raw adherence entries, and no booking action for discoverable sessions or facilities.
Maintenance
Related MCP Connectors
Connect your health, fitness, nutrition, sleep, and wearable data to your AI assistant.
Give any AI assistant real-time access to your phone's GPS and location history.
Access approved FITsociety clients, schedules, bookings and coaching data with AI assistants.
- freddyOAuthcoach.freddy
Connect your wearables, rings and training apps, then ask your AI about your own health data.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA comprehensive AI-powered fitness tracking application that enables AI tools to interact intelligently with user fitness data, providing personalized workout plans, nutrition tracking, and progress analysis through natural language.15MIT
- AlicenseNot gradedqualityDmaintenanceA universal fitness intelligence layer for AI assistants like Claude, ChatGPT, and Copilot, enabling user profiles, workout/diet plans, calendar scheduling, and gamification via MCP and REST APIs.5,766 npmMIT
- AlicenseNot gradedqualityBmaintenanceProvides MCP tools to read and update a local-first personal OS for goals, tasks, habits, food, workouts, and check-ins. Enables assistants to manage daily life data and interact with an evidence-grounded AI coach.MIT
- AlicenseNot gradedqualityCmaintenanceMCP server that turns any MCP-compatible LLM client into a wellness coach grounded in verified public data, offering nutrition, exercise, biometric, and preventive care tools with safety guardrails.MIT