Skip to main content
Glama

Get commute

get_commute
Read-onlyIdempotent

Door-to-door minutes from one neighbourhood to the user's places on a weekday morning, by public transport (R5 on TfL timetables), bike (at the speed Santander Cycles riders reach; checked against TfL), car (typical morning traffic, no parking) and walking, each with a range. Places within 1.5 km of a commute hub (King's Cross, Bank, Canary Wharf, Oxford Circus…) are routed through it; others in Greater London get a straight-line estimate (estimate: true); places outside Greater London, and every place from a neighbourhood outside London (the routing is London only), get straight-line estimates in every mode, long trips at a main-line speed (estimate: true, reason 'outside-routing'). A neighbourhood served by National Rail only also gets a rail estimate (modes.rail, estimate: true). Example routes start at the neighbourhood's MSOA centre (origin); one far from the headline minutes is representative: false and lists its lines only. Journeys over 120 minutes are not timed (minutes null, capped: true). A place takes latitude/longitude or center [longitude, latitude] from search_places; quote estimate minutes as estimates. Each mode's confidence: 'timetable' (TfL), 'routed' (London streets) or 'approximate' (straight-line estimates). googleMapsUrl opens Google Maps' own route for the user to check: its time, leaving now, not ours.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "area_id": "<area_id>",
      "places": "<places>"
    },
    "name": "get_commute"
  }
}

Input Schema

NameRequiredDescriptionDefault
placesYes[input value] Pinned places to reach: latitude/longitude, or center [longitude, latitude] from search_places.
area_idYes[id] The neighbourhood (LSOA) to travel from.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • removedInput schema / $defs / RatePrevious
      Removed value: -{
      -  "properties": {
      -    "bad": {
      -      "anyOf": [
      -        {
      -          "type": "string"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "description": "[input value] What was wrong, missing or confusing.",
      -      "title": "Bad"
      -    },
      -    "call_id": {
      -      "anyOf": [
      -        {
      -          "type": "string"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "description": "[id] The callId of the answer you are rating; leave it out when answers carry none.",
      -      "title": "Call Id"
      -    },
      -    "fix": {
      -      "anyOf": [
      -        {
      -          "type": "string"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "description": "[input value] The change to the tool or its answer you would want.",
      -      "title": "Fix"
      -    },
      -    "good": {
      -      "anyOf": [
      -        {
      -          "type": "string"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "description": "[input value] What was useful in the answer.",
      -      "title": "Good"
      -    },
      -    "rating": {
      -      "description": "[input value] 1 = useless or wrong, 3 = usable with gaps, 5 = exactly what was needed.",
      -      "title": "Rating",
      -      "type": "integer"
      -    }
      -  },
      -  "required": [
      -    "rating"
      -  ],
      -  "title": "RatePrevious",
      -  "type": "object"
      -}
    • removedInput schema / properties / intent
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "[input value] Optional, one to three sentences you write: what the user is looking for with this call and the criteria that matter, e.g. '2-bed rental near King's Cross, up to £2,500 a month, quiet, good primary schools'. Close Knit reads these to improve its answers. Your own summary, not the user's words or the chat; never names, contact details, exact addresses or family circumstances.",
      -  "title": "Intent"
      -}
    • removedInput schema / properties / rate_previous
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "$ref": "#/$defs/RatePrevious"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "[input value] Optional: your rating of an earlier Close Knit answer, by the callId it carried (none: the last answer). Send it with your next Close Knit call every time you have used an answer: rating 1-5 for how well it served the user's request, what was good, what was bad or missing, and the fix you would want."
      -}
  2. Changed3 schema fields changed
    • addedInput schema / $defs / PlaceInput / properties / school_gender
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "mixed",
      +        "girls",
      +        "boys"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "[filter: exact] With top_school: only this intake.",
      +  "title": "School Gender"
      +}
    • addedInput schema / $defs / PlaceInput / properties / school_selective
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "[filter: exact] With top_school: false leaves grammars out, true keeps only them; N counts those.",
      +  "title": "School Selective"
      +}
    • changedInput schema / $defs / PlaceInput / properties / top_school / description
      Previous value: -"[input value] Instead of a point or category: near one of the region's top N state schools (by published results), e.g. 10. Living nearby never guarantees a place: say so."New value: +"[input value] Instead of a point or category: near one of the region's top N state schools (by published results), e.g. 10. Top lists hold grammars and single-sex schools; a family starts with good-primaries. Living nearby never guarantees a place: say so."
  3. Changed39 schema fields changed
    • changedInput schema / $defs / AnyOfPointInput / properties / label / description
      Previous value: -"What the point is, e.g. 'Crystal Palace NSC'."New value: +"[input value] What the point is, e.g. 'Crystal Palace NSC'."
    • changedInput schema / $defs / AnyOfPointInput / properties / latitude / description
      Previous value: -"The point's latitude (from search_places)."New value: +"[input value] The point's latitude (from search_places)."
    • changedInput schema / $defs / AnyOfPointInput / properties / longitude / description
      Previous value: -"The point's longitude."New value: +"[input value] The point's longitude."
    • changedInput schema / $defs / PlaceInput / properties / any_of / description
      Previous value: -"Near either of 2-3 pinned points ('either pool', 'either office'): each area counts the quickest one."New value: +"[input value] Near either of 2-3 pinned points ('either pool', 'either office'): each area counts the quickest one."
    • changedInput schema / $defs / PlaceInput / properties / brand / description
      Previous value: -"With a category: only this brand, e.g. 'M&S', 'Waitrose', 'Lidl' (supermarket) or 'PureGym' (gym)."New value: +"[search: prefix] With a category: brands starting with this, any case, e.g. 'M&S', 'Waitrose' (supermarket), 'PureGym' (gym); 'A or B' for either."
    • changedInput schema / $defs / PlaceInput / properties / category / description
      Previous value: -"Instead of a point: the nearest place of this kind (pool = public pool; step_free_station = a station TfL lists with lift access, or any DLR station or tram stop)."New value: +"[filter: exact] Instead of a point: the nearest place of this kind (pool = public pool; step_free_station = a station TfL lists with lift access, or any DLR station or tram stop)."
    • changedInput schema / $defs / PlaceInput / properties / center / description
      Previous value: -"Instead of latitude/longitude: [longitude, latitude], the `center` search_places returns."New value: +"[input value] Instead of latitude/longitude: [longitude, latitude], the `center` search_places returns."
    • changedInput schema / $defs / PlaceInput / properties / importance / description
      Previous value: -"1 nice to have … 5 essential. A daily trip (work, the school run) goes right after their top priority, never last: lower in the order its weight is small."New value: +"[rank weight] 1 nice to have … 5 essential. A daily trip (work, the school run) goes right after their top priority, never last: lower in the order its weight is small."
    • changedInput schema / $defs / PlaceInput / properties / label / description
      Previous value: -"What the place is, e.g. 'Office', 'PureGym Angel', 'Any park' (name reads as label, lat/lng as latitude/longitude)."New value: +"[input value] What the place is, e.g. 'Office', 'PureGym Angel', 'Any park' (name reads as label, lat/lng as latitude/longitude)."
    • changedInput schema / $defs / PlaceInput / properties / latitude / description
      Previous value: -"A pinned place: its latitude (from search_places). For an address, `center` is its area's centre unless `centerPrecision` is `uprn`; never pin an LSOA centroid as the home."New value: +"[input value] A pinned place: its latitude (from search_places). For an address, `center` is its area's centre unless `centerPrecision` is `uprn`; never pin an LSOA centroid as the home."
    • changedInput schema / $defs / PlaceInput / properties / longitude / description
      Previous value: -"A pinned place: its longitude."New value: +"[input value] A pinned place: its longitude."
    • changedInput schema / $defs / PlaceInput / properties / max_minutes / description
      Previous value: -"The longest trip they accept."New value: +"[rank weight] The longest trip they accept."
    • changedInput schema / $defs / PlaceInput / properties / mode / description
      Previous value: -"How they get there (default transit for a pin, walk for a kind). car = typical weekday-morning traffic, no parking or charges: say so."New value: +"[option] How they get there (default transit for a pin, walk for a kind). car = typical weekday-morning traffic, no parking or charges: say so."
    • changedInput schema / $defs / PlaceInput / properties / must / description
      Previous value: -"True when an area beyond max_minutes is out of the question."New value: +"[option] True when an area beyond max_minutes is out of the question."
    • changedInput schema / $defs / PlaceInput / properties / school / description
      Previous value: -"Instead of top_school: the nearest school matching a filter (phase, Ofsted, type, intake, faith, one results measure ≥ a threshold), optionally within N metres; max_minutes still sets the trip."New value: +"[filter: exact] Instead of top_school: the nearest school matching a filter (phase, Ofsted, type, intake, faith, one results measure ≥ a threshold), optionally within N metres; max_minutes still sets the trip."
    • changedInput schema / $defs / PlaceInput / properties / school_phase / description
      Previous value: -"With top_school."New value: +"[filter: exact] With top_school."
    • changedInput schema / $defs / PlaceInput / properties / school_rank_by / description
      Previous value: -"With top_school: rank by published results (default) or by Progress 8 (secondary only: progress pupils make from their primary results, latest published year 2023/24)."New value: +"[option] With top_school: rank by published results (default) or by Progress 8 (secondary only: progress pupils make from their primary results, latest published year 2023/24)."
    • changedInput schema / $defs / PlaceInput / properties / sport / description
      Previous value: -"With sports_club: the sport, e.g. 'tennis', 'football'."New value: +"[search: contains] With sports_club: the sport, e.g. 'tennis', 'football'."
    • changedInput schema / $defs / PlaceInput / properties / top_school / description
      Previous value: -"Instead of a point or category: near one of the region's top N state schools (by published results), e.g. 10. Living nearby never guarantees a place: say so."New value: +"[input value] Instead of a point or category: near one of the region's top N state schools (by published results), e.g. 10. Living nearby never guarantees a place: say so."
    • changedInput schema / $defs / RatePrevious / properties / bad / description
      Previous value: -"What was wrong, missing or confusing."New value: +"[input value] What was wrong, missing or confusing."
    • changedInput schema / $defs / RatePrevious / properties / call_id / description
      Previous value: -"The callId of the answer you are rating; leave it out when answers carry none."New value: +"[id] The callId of the answer you are rating; leave it out when answers carry none."
    • changedInput schema / $defs / RatePrevious / properties / fix / description
      Previous value: -"The change to the tool or its answer you would want."New value: +"[input value] The change to the tool or its answer you would want."
    • changedInput schema / $defs / RatePrevious / properties / good / description
      Previous value: -"What was useful in the answer."New value: +"[input value] What was useful in the answer."
    • changedInput schema / $defs / RatePrevious / properties / rating / description
      Previous value: -"1 = useless or wrong, 3 = usable with gaps, 5 = exactly what was needed."New value: +"[input value] 1 = useless or wrong, 3 = usable with gaps, 5 = exactly what was needed."
    • changedInput schema / $defs / SchoolFilterInput / properties / a_level_only / description
      Previous value: -"Only sixth forms with a combined A-level rank."New value: +"[filter: exact] Only sixth forms with a combined A-level rank."
    • changedInput schema / $defs / SchoolFilterInput / properties / establishments / description
      Previous value: -"Type of establishment (absent = any)."New value: +"[filter: exact] Type of establishment (absent = any)."
    • changedInput schema / $defs / SchoolFilterInput / properties / faith / description
      Previous value: -"Faith school or not (absent = any)."New value: +"[filter: exact] Faith school or not (absent = any)."
    • changedInput schema / $defs / SchoolFilterInput / properties / gender / description
      Previous value: -"Intake (absent = any)."New value: +"[filter: exact] Intake (absent = any)."
    • changedInput schema / $defs / SchoolFilterInput / properties / measure / description
      Previous value: -"One results measure and its threshold."New value: +"[filter: range] One results measure and its threshold."
    • changedInput schema / $defs / SchoolFilterInput / properties / ofsted / description
      Previous value: -"Ofsted standing kept, state schools only (absent = any)."New value: +"[filter: exact] Ofsted standing kept, state schools only (absent = any)."
    • changedInput schema / $defs / SchoolFilterInput / properties / phases / description
      Previous value: -"Phases kept (absent = all)."New value: +"[filter: exact] Phases kept (absent = all)."
    • changedInput schema / $defs / SchoolMeasureInput / properties / id / description
      Previous value: -"englandTopPercent = England top % (lower is better: at most the threshold); progress8, attainment8, grade5EngMaths (%), ks2RwmExpected (%) = at least the threshold; fsm6Share = free school meals % (at most). Latest published year per school; cohorts under 30 and suppressed cells have no value and never pass."New value: +"[id] englandTopPercent = England top % (lower is better: at most the threshold); progress8, attainment8, grade5EngMaths (%), ks2RwmExpected (%) = at least the threshold; fsm6Share = free school meals % (at most). Latest published year per school; cohorts under 30 and suppressed cells have no value and never pass."
    • changedInput schema / $defs / SchoolMeasureInput / properties / threshold / description
      Previous value: -"The threshold in the measure's own unit, e.g. 75 for KS2 RWM 75%."New value: +"[filter: range] The threshold in the measure's own unit, e.g. 75 for KS2 RWM 75%."
    • changedInput schema / $defs / SchoolPlaceInput / properties / filter / description
      Previous value: -"Which schools count (the same filter as the map's Schools filter)."New value: +"[filter: exact] Which schools count (the same filter as the map's Schools filter)."
    • changedInput schema / $defs / SchoolPlaceInput / properties / within / description
      Previous value: -"Metres: only a matching school this close counts (straight line); beyond it the area has none."New value: +"[filter: range] Metres: only a matching school this close counts (straight line); beyond it the area has none."
    • changedInput schema / properties / area_id / description
      Previous value: -"The neighbourhood (LSOA) to travel from."New value: +"[id] The neighbourhood (LSOA) to travel from."
    • changedInput schema / properties / intent / description
      Previous value: -"Optional, one to three sentences you write: what the user is looking for with this call and the criteria that matter, e.g. '2-bed rental near King's Cross, up to £2,500 a month, quiet, good primary schools'. Close Knit reads these to improve its answers. Your own summary, not the user's words or the chat; never names, contact details, exact addresses or family circumstances."New value: +"[input value] Optional, one to three sentences you write: what the user is looking for with this call and the criteria that matter, e.g. '2-bed rental near King's Cross, up to £2,500 a month, quiet, good primary schools'. Close Knit reads these to improve its answers. Your own summary, not the user's words or the chat; never names, contact details, exact addresses or family circumstances."
    • changedInput schema / properties / places / description
      Previous value: -"Pinned places to reach: latitude/longitude, or center [longitude, latitude] from search_places."New value: +"[input value] Pinned places to reach: latitude/longitude, or center [longitude, latitude] from search_places."
    • changedInput schema / properties / rate_previous / description
      Previous value: -"Optional: your rating of an earlier Close Knit answer, by the callId it carried (none: the last answer). Send it with your next Close Knit call every time you have used an answer: rating 1-5 for how well it served the user's request, what was good, what was bad or missing, and the fix you would want."New value: +"[input value] Optional: your rating of an earlier Close Knit answer, by the callId it carried (none: the last answer). Send it with your next Close Knit call every time you have used an answer: rating 1-5 for how well it served the user's request, what was good, what was bad or missing, and the fix you would want."
  4. Changed1 schema field changed
    • changedInput schema / $defs / PlaceInput / properties / label / description
      Previous value: -"What the place is, e.g. 'Office', 'PureGym Angel', 'Any park'."New value: +"What the place is, e.g. 'Office', 'PureGym Angel', 'Any park' (name reads as label, lat/lng as latitude/longitude)."
  5. Changed1 schema field changed
    • changedInput schema / $defs / PlaceInput / properties / importance / description
      Previous value: -"1 nice to have … 5 essential."New value: +"1 nice to have … 5 essential. A daily trip (work, the school run) goes right after their top priority, never last: lower in the order its weight is small."
  6. Changed6 schema fields changed
    • addedInput schema / $defs / RatePrevious / properties / call_id / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / $defs / RatePrevious / properties / call_id / default
      Added value: +null
    • changedInput schema / $defs / RatePrevious / properties / call_id / description
      Previous value: -"The callId of the answer you are rating."New value: +"The callId of the answer you are rating; leave it out when answers carry none."
    • removedInput schema / $defs / RatePrevious / properties / call_id / type
      Removed value: -"string"
    • changedInput schema / $defs / RatePrevious / required
      Previous value: -[
      -  "call_id",
      -  "rating"
      -]New value: +[
      +  "rating"
      +]
    • changedInput schema / properties / rate_previous / description
      Previous value: -"Optional: your rating of an earlier Close Knit answer, by the callId it carried. Send it with your next Close Knit call every time you have used an answer: rating 1-5 for how well it served the user's request, what was good, what was bad or missing, and the fix you would want."New value: +"Optional: your rating of an earlier Close Knit answer, by the callId it carried (none: the last answer). Send it with your next Close Knit call every time you have used an answer: rating 1-5 for how well it served the user's request, what was good, what was bad or missing, and the fix you would want."
  7. Changed1 schema field changed
    • changedInput schema / $defs / PlaceInput / properties / top_school / description
      Previous value: -"Instead of a point or category: near one of London's top N state schools (by published results), e.g. 10. Living nearby never guarantees a place: say so."New value: +"Instead of a point or category: near one of the region's top N state schools (by published results), e.g. 10. Living nearby never guarantees a place: say so."
  8. Changed4 schema fields changed
    • addedInput schema / $defs / AnyOfPointInput
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "label": {
      +      "anyOf": [
      +        {
      +          "maxLength": 60,
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "What the point is, e.g. 'Crystal Palace NSC'.",
      +      "title": "Label"
      +    },
      +    "latitude": {
      +      "description": "The point's latitude (from search_places).",
      +      "maximum": 90,
      +      "minimum": -90,
      +      "title": "Latitude",
      +      "type": "number"
      +    },
      +    "longitude": {
      +      "description": "The point's longitude.",
      +      "maximum": 180,
      +      "minimum": -180,
      +      "title": "Longitude",
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "latitude",
      +    "longitude"
      +  ],
      +  "title": "AnyOfPointInput",
      +  "type": "object"
      +}
    • addedInput schema / $defs / PlaceInput / properties / any_of
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "$ref": "#/$defs/AnyOfPointInput"
      +      },
      +      "maxItems": 3,
      +      "minItems": 2,
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Near either of 2-3 pinned points ('either pool', 'either office'): each area counts the quickest one.",
      +  "title": "Any Of"
      +}
    • addedInput schema / $defs / PlaceInput / properties / center
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "number"
      +      },
      +      "maxItems": 2,
      +      "minItems": 2,
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Instead of latitude/longitude: [longitude, latitude], the `center` search_places returns.",
      +  "title": "Center"
      +}
    • changedInput schema / properties / places / description
      Previous value: -"Pinned places (latitude/longitude) to reach."New value: +"Pinned places to reach: latitude/longitude, or center [longitude, latitude] from search_places."
  9. Changed3 schema fields changed
    • addedInput schema / $defs / RatePrevious
      Added value: +{
      +  "properties": {
      +    "bad": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "What was wrong, missing or confusing.",
      +      "title": "Bad"
      +    },
      +    "call_id": {
      +      "description": "The callId of the answer you are rating.",
      +      "title": "Call Id",
      +      "type": "string"
      +    },
      +    "fix": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "The change to the tool or its answer you would want.",
      +      "title": "Fix"
      +    },
      +    "good": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "What was useful in the answer.",
      +      "title": "Good"
      +    },
      +    "rating": {
      +      "description": "1 = useless or wrong, 3 = usable with gaps, 5 = exactly what was needed.",
      +      "title": "Rating",
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "call_id",
      +    "rating"
      +  ],
      +  "title": "RatePrevious",
      +  "type": "object"
      +}
    • addedInput schema / properties / intent
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Optional, one to three sentences you write: what the user is looking for with this call and the criteria that matter, e.g. '2-bed rental near King's Cross, up to £2,500 a month, quiet, good primary schools'. Close Knit reads these to improve its answers. Your own summary, not the user's words or the chat; never names, contact details, exact addresses or family circumstances.",
      +  "title": "Intent"
      +}
    • addedInput schema / properties / rate_previous
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/RatePrevious"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Optional: your rating of an earlier Close Knit answer, by the callId it carried. Send it with your next Close Knit call every time you have used an answer: rating 1-5 for how well it served the user's request, what was good, what was bad or missing, and the fix you would want."
      +}
  10. First observed

TDQS

A3.9/5.0
Behavior5/5

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

Beyond the annotations (read-only, idempotent, non-destructive), the description discloses substantial behavior: the 1.5 km hub-routing rule, straight-line fallback with estimate:true and reason, the 120-minute cap with minutes null and capped:true, mode-specific confidence values, the rail-only case, and the caveat that googleMapsUrl shows Google's time rather than the tool's own. This is far more than the annotations provide.

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

Conciseness3/5

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

The opening sentence is front-loaded and defines the core return value. However, the rest is a single dense paragraph with many parenthetical caveats and routing rules packed together, making it harder to scan than a structured list would be. The content is largely relevant, but the presentation reduces clarity.

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 tool with complex mode-dependent routing, fallback estimates, caps, and confidence levels, the description covers the important behaviors an agent needs to interpret results. An output schema exists, so return-value field definitions need not be repeated, and the description still explains the key flags (estimate, reason, capped, confidence, googleMapsUrl) that affect how to present results.

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 detailed parameter descriptions in the input schema already carry the semantic burden. The description adds some useful context—places take latitude/longitude or center from search_places, and area_id represents a neighbourhood—but it does not meaningfully extend the meaning of the two top-level parameters beyond the schema.

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

Purpose4/5

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

The description clearly states it returns door-to-door commute minutes by multiple modes from a neighbourhood to the user's places, and explains the scope (London routing, estimates outside). It does not explicitly contrast with a sibling like search_places, but the resource and result are unmistakable.

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?

Usage is implied by the opening 'Door-to-door minutes from one neighbourhood to the user's places,' and it says to quote estimate minutes as estimates and that googleMapsUrl is for the user's own check. However, there is no explicit when-to-use guidance, no stated exclusions, and no named alternative tool for routing questions.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.