Skip to main content
Glama

Server Details

Heart-shaped GPS running routes in 200+ cities — charity, gift, memorial, anniversary.

Status
Healthy
Last Tested
Transport
Streamable HTTP
URL

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

Full call logging

Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.

Tool access control

Enable or disable individual tools per connector, so you decide what your agents can and cannot do.

Managed credentials

Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.

Usage analytics

See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.

100% free. Your data is private.
Tool DescriptionsA

Average 4.3/5 across 7 of 7 tools scored.

Server CoherenceA
Disambiguation3/5

Some tools have overlapping purposes: export_gpx and get_route_details both provide GPX download links, and generate_heart_route returns existing matches making it potentially confused with find_heart_route_in_city. However, the distinct use cases are described clearly enough for most scenarios.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (add, export, find, generate, get, list), with clear and descriptive verbs. No mixed conventions.

Tool Count5/5

Seven tools is within the ideal range for this domain, covering route discovery, generation, details, personalization, and export without unnecessary bloat.

Completeness3/5

The core workflow (list cities, find routes, get details, export GPX) is covered, but there are gaps: export_gpx duplicates functionality in get_route_details, and the personalization tools (add_cause, add_dedication) don't connect to a specific route, making it unclear how to personalize an existing found route. generate_heart_route partially covers this but is aimed at new generation.

Available Tools

7 tools
add_causeAInspect

Compose a builder URL with a fundraising link pre-filled — the URL is embedded into the GPX metadata (description, filename) so it surfaces in the runner's Strava activity after they sync. CityHeart never collects the donation; the runner's donors click straight through to JustGiving / GoFundMe / Leetchi / etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoOptional city to also pre-fill.
fundraising_urlYesFully-qualified donation URL (https://www.justgiving.com/... / https://gofundme.com/... / https://leetchi.com/... / https://www.helloasso.com/...).
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It usefully explains that the URL is embedded into GPX metadata and that CityHeart never collects donations (donors go directly to third-party platforms). This adds meaningful context beyond the schema, clarifying the tool's side effects and donation flow.

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

Conciseness5/5

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

The description is concise and well-structured: two sentences, front-loaded with the core purpose, followed by a clarifying note on donation flow. Every sentence earns its place without redundancy or fluff.

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

Completeness4/5

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

Given the tool's simplicity (2 parameters, no output schema, no annotations), the description is fairly complete. It explains what the tool does and its behavioral nuance, though it does not explicitly state the return value (a builder URL) or error conditions. Minor gaps exist, but the overall context is adequate for an agent to invoke it correctly.

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

Parameters3/5

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

The schema already covers both parameters with detailed descriptions (100% coverage). The description adds context for fundraising_url by explaining its role in embedding into GPX metadata, but it does not significantly enhance understanding of the city parameter. Baseline 3 is appropriate since the schema does the heavy lifting and the description adds only moderate value.

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

Purpose5/5

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

The description clearly states the tool's function with a specific action ('Compose a builder URL') and the resource it affects (GPX metadata). It distinguishes itself from siblings by focusing on fundraising links, which is distinct from add_dedication or export_gpx. The purpose is unambiguous and specific.

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

Usage Guidelines3/5

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

The description implies the tool is for embedding a fundraising link into GPX metadata, but it does not explicitly state when to use it versus alternatives like add_dedication or export_gpx. No direct exclusions or alternative suggestions are provided, though the usage context is fairly clear.

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

add_dedicationAInspect

Compose a builder URL with a dedication pre-filled — the name shows on the runner's GPS watch and in the Strava activity title. Use after the user picks a route (find/generate) and decides who the heart is for. Pure URL builder, no server-side state.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoOptional city to also pre-fill in the builder (skips the "pick a city" step in the chat-to-product handoff).
nameYesDedication name (e.g. "Marie", "Dad", "Cancer Research UK").
in_memoryNoIf true, framed as "In memory of [name]". Default false.
Behavior4/5

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

With no annotations, the description carries the full responsibility. It discloses a key behavioral trait: 'Pure URL builder, no server-side state' – essential for an agent to avoid expecting persistence. It also explains the effect on the runner's watch and Strava title. This is valuable beyond a basic action statement, though it could mention more about errors or responses.

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

Conciseness5/5

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

The description is three concise sentences, each earning its place: purpose, usage timing, and a critical behavioral constraint. It is front-loaded with the primary action and contains no fluff or redundant information.

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

Completeness4/5

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

For a simple 3-parameter tool with no output schema, the description is sufficiently complete. It covers what it does, when to use it, and a key constraint. The return value (a URL) is implied but not explicitly stated, and edge cases are absent, but these are minor for a pure URL builder.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description adds some semantic context (e.g., the name appears on GPS/Strava), but this is largely redundant with the schema's own parameter descriptions. No additional syntax, formatting, or edge-case behavior is provided, so it stays at the baseline.

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

Purpose5/5

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

The description clearly states the tool's action: 'Compose a builder URL with a dedication pre-filled' – a specific verb+resource. It distinguishes from siblings by focusing on dedications, while siblings like add_cause, export_gpx, find_heart_route_in_city serve different purposes. The added context about the GPS watch and Strava title further clarifies the domain.

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

Usage Guidelines4/5

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

Provides explicit timing: 'Use after the user picks a route (find/generate) and decides who the heart is for.' This gives a clear workflow context. It doesn't name alternatives or when not to use it, but the 'Pure URL builder, no server-side state' phrase helps distinguish from stateful tools. Lacks explicit exclusions, so not a 5.

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

export_gpxAInspect

Return the GPX download / checkout URL for a specific public route. The download itself happens on cityheart.run after a one-time €4.99 payment (Stripe — CityHeart never charges through the chat). Use after the user has picked a final route (find / get_details) and confirms they want it.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesRoute slug, e.g. "paris-7-2-km-heart-for-marie".
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It meaningfully discloses that the tool only returns a URL and that the actual download and payment occur externally on cityheart.run after a one-time €4.99 payment. It also explicitly states 'CityHeart never charges through the chat,' which manages user expectations and clarifies the tool's non-payment role. However, it does not mention edge-case behaviors such as what happens if the route is not public or if the payment is already completed, so it falls slightly short of a perfect score.

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

Conciseness5/5

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

The description is concise and well-structured: two sentences that immediately state the core function, then provide essential usage and payment context. Every sentence earns its place, with no redundancy or filler.

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

Completeness4/5

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

Despite having no output schema, the description explains the return value ('GPX download / checkout URL') and provides the necessary context for when to use it, including the external payment flow. It lacks potential edge-case details (e.g., errors for non-public routes), but for a simple URL-returning tool, the information provided is sufficient for an agent to invoke it correctly.

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

Parameters3/5

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

The schema already provides 100% coverage for the single parameter 'slug' with a descriptive example. The description adds no additional meaning about the parameter beyond calling the route 'specific public route,' which reinforces but does not extend the schema. Baseline 3 is appropriate given high schema coverage.

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

Purpose5/5

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

The description clearly states the tool's function: 'Return the GPX download / checkout URL for a specific public route.' It uses a specific verb ('Return') and resource ('GPX download / checkout URL'), and explicitly scopes it to a specific public route. This distinguishes it from siblings like find_heart_route_in_city or generate_heart_route, which create or discover routes rather than export them.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: 'Use after the user has picked a final route (find / get_details) and confirms they want it.' This clearly places the tool in the workflow and implies it should not be used before route selection/confirmation. It does not explicitly name alternatives, but the context makes the usage timing unambiguous.

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

find_heart_route_in_cityAInspect

Find an existing heart-shaped running route in a given city. Returns up to 5 AI-validated routes matching the city (and optionally a target distance). Use this when a user mentions a city and wants a heart route — e.g. "find me a heart-shaped route in Paris" or "I want to run a heart in Tokyo for my mum's birthday".

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity name, e.g. "Paris", "Tokyo", "New York". Case-insensitive.
prefer_goldNoIf true, return only the highest AI-quality "gold" tier routes (ai_score >= 80). Default true.
max_distance_kmNoOptional max route length in kilometres. Filter to routes ≤ this distance. Common: 5, 10, 15, 21 (half-marathon).
Behavior3/5

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

The description discloses that it returns up to 5 AI-validated routes and allows optional distance filtering, providing some behavioral context. However, it does not mention the behavior of the prefer_gold parameter (e.g., default filtering to gold tier) or clarify that the tool has no side effects. Since no annotations are present, the description carries the full burden, leaving some behavioral aspects ambiguous.

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

Conciseness5/5

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

The description is concise, consisting of two sentences. The first sentence states the primary purpose and return characteristics, while the second gives practical usage examples. Every sentence adds value without redundancy, and the most critical information is front-loaded.

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

Completeness4/5

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

For a find tool with no output schema, the description adequately conveys the purpose, return count, and filtering criteria. However, it could mention edge cases (e.g., no routes found) or clarify that it returns route summaries rather than full details. The presence of sibling get_route_details for details mitigates the omission, making the description sufficiently complete.

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

Parameters3/5

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

The input schema already provides detailed descriptions for all three parameters (100% coverage). The description adds context about matching the city and optional target distance, but does not enhance understanding of prefer_gold beyond the schema's own description. With high schema coverage, a baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's function with a specific verb ('find') and resource ('existing heart-shaped running route in a given city'), distinguishes it from sibling generate_heart_route by specifying 'existing' and 'AI-validated'. The return limit of 5 routes is also mentioned, 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.

Usage Guidelines4/5

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

The description provides explicit usage guidance with concrete examples ('Use this when a user mentions a city and wants a heart route') and realistic user requests. It does not explicitly state when not to use it or compare with alternatives, but the context is clear enough to guide selection.

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

generate_heart_routeAInspect

Start a new heart-shaped route for a given city. Returns existing AI-validated matches from inventory PLUS a deep-link to the live builder for an on-demand fresh generation with the user's exact dedication and cause. Use when the user explicitly wants a NEW heart, or when an existing match is "close enough but not personal yet". Optional dedication / cause_url pre-fill the builder fields, so the URL deep-link arrives configured.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity name, e.g. "Paris", "Tokyo".
cause_urlNoOptional JustGiving / GoFundMe / Leetchi URL to embed in the GPX metadata. CityHeart never touches the money — the link is for the runner's Strava description to surface to donors.
in_memoryNoIf true, the dedication is framed as a memorial ("In memory of [name]"). Default false.
dedicationNoOptional person/cause name to bake into the heart (appears in the GPX, on Garmin Connect, and as the Strava activity title prefix).
distance_kmNoTarget route length in km (3–25). Default 7.
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses a non-obvious behavior: the tool returns existing matches as well as a deep-link to the builder, rather than immediately creating a route. It also states that optional parameters pre-fill the builder, making the effect transparent. However, it does not clarify whether this is a read-only operation or what happens if no existing matches are found, leaving minor gaps.

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

Conciseness5/5

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

The description is three sentences, front-loaded with the core action. Every sentence adds distinct value: purpose/behavior, usage guidance, and param pre-fill note. No filler or redundant phrasing.

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

Completeness4/5

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

For a tool with 5 parameters, no annotations, and no output schema, the description covers the main purpose, hybrid return behavior, usage trigger, and one param nuance. It does not detail the exact response structure (e.g., shape of the deep-link) or edge cases like missing inventory matches, but overall it provides enough context for an agent to invoke correctly.

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

Parameters4/5

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

Schema coverage is 100%, giving baseline 3. The description adds value by explaining that 'dedication / cause_url pre-fill the builder fields', connecting these parameters to their effect on the deep-link URL. This goes beyond the schema's descriptions (which focus on GPX/Strava metadata) and clarifies the configuration role of these params.

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

Purpose5/5

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

The description uses a specific verb+resource: 'Start a new heart-shaped route for a given city.' It clearly distinguishes from siblings by stating it returns both existing AI-validated matches and a deep-link to the live builder, differentiating it from find_heart_route_in_city. The phrase 'for a given city' ties directly to the required city parameter.

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

Usage Guidelines5/5

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

Explicit guidance is provided: 'Use when the user explicitly wants a NEW heart, or when an existing match is "close enough but not personal yet".' This gives clear when-to-use and implies when not to use (when an existing personalized match is already acceptable). It also explains the pre-fill behavior, adding context for optional parameters.

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

get_route_detailsAInspect

Get full details for a specific heart route by its slug. Use after find_heart_route_in_city when the user picks one. Returns: city, distance, image URL, share URL, dedication (if any), and the GPX download deep-link.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesRoute slug, e.g. "paris-7-2-km-heart-for-marie".
Behavior4/5

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

No annotations provided, so the description carries the burden. It discloses the exact return values (city, distance, image URL, share URL, dedication if any, GPX deep-link) and notes the conditional dedication field. It doesn't mention permissions or errors, but the read-only nature is implied by 'Get'.

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

Conciseness5/5

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

Two sentences that front-load purpose, provide usage context, and list return values. Every sentence earns its place with no redundant words.

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

Completeness5/5

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

For a simple one-parameter getter with no output schema, the description fully covers return values, usage sequence, and tool selection. It is complete and self-contained.

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

Parameters3/5

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

Schema coverage is 100% with a clear example for the slug parameter. The description adds no new semantic detail beyond restating 'by its slug', but the schema handles the parameter well, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'Get' and specific resource 'full details for a specific heart route by its slug', distinguishing it from siblings like find_heart_route_in_city and export_gpx. The scope is precise.

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

Usage Guidelines5/5

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

Explicitly instructs 'Use after find_heart_route_in_city when the user picks one', providing clear sequencing and when-to-use context. No alternatives named, but the guidance is unambiguous.

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

list_supported_citiesAInspect

List cities that have at least one heart route available. Use when the user asks "where can I run a heart?" or hasn't picked a city yet. Returns city names + route counts, sorted by inventory size.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax number of cities to return. Default 25, max 100.
Behavior4/5

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

With no annotations, the description carries the burden. It states the filtering logic (cities with at least one heart route), return format (city names + route counts), and sorting behavior (by inventory size). It implies a read-only operation, which is appropriate for a list tool. No contradictions.

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

Conciseness5/5

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

Two sentences cover purpose, usage, and output details with no wasted words. Information is front-loaded and efficiently structured.

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

Completeness5/5

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

For a simple list tool with one optional parameter and no output schema, the description provides all needed context: purpose, when to use, and return content. The schema handles the limit parameter, so the description is fully complementary.

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

Parameters3/5

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

Schema coverage is 100% for the only parameter (limit), with a clear description and bounds. The tool description adds no extra parameter-specific meaning, so the baseline of 3 applies.

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

Purpose5/5

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

The description clearly states the tool lists cities with available heart routes, using a specific verb and resource. It distinguishes itself from sibling tools like find_heart_route_in_city, which operate on a selected city.

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

Usage Guidelines4/5

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

Explicitly says to use when the user asks where to run a heart or hasn't picked a city. It doesn't explicitly mention when not to use it or name the alternative tool, but the context strongly implies the alternative for city-specific queries.

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

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Servers

View all MCP Servers

Try in Browser

Your Connectors

Sign in to create a connector for this server.

Resources