Skip to main content
Glama

Rank areas by metric

rank_areas_by_metric
Read-onlyIdempotent

Moved: use query(saved: "metric:"). Answers until 2026-11-30.

Input Schema

NameRequiredDescriptionDefault
levelNoRank groups instead of the metric's own areas: msoa (neighbourhoods), lad (local authorities, London's boroughs) or region, each by the median of its areas. Each group row names its best area (best); up to 2 rows marked standout: true follow. Omitted or lsoa: the metric's own areas.
orderNodesc = highest value first.desc
top_nNoHow many areas to return (1-50).
intentNoOptional, 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.
periodYesMonth, YYYY-MM: defaultPeriod or one of periods in list_metrics detail=[metric_id].
regionNoOnly areas of one English region: its code (E12000001-E12000009) or name, e.g. 'North West', 'London'. Omitted: every area Close Knit covers.
metric_idYesMetric id from list_metrics.
rate_previousNoOptional: 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.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / level
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "lsoa",
      +        "msoa",
      +        "lad",
      +        "region"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Rank groups instead of the metric's own areas: msoa (neighbourhoods), lad (local authorities, London's boroughs) or region, each by the median of its areas. Each group row names its best area (best); up to 2 rows marked standout: true follow. Omitted or lsoa: the metric's own areas.",
      +  "title": "Level"
      +}
  2. 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."
  3. Changed3 schema fields changed
    • addedInput schema / $defs
      Added value: +{
      +  "RatePrevious": {
      +    "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."
      +}
  4. Changed1 schema field changed
    • changedInput schema / properties / period / description
      Previous value: -"Month, YYYY-MM."New value: +"Month, YYYY-MM: defaultPeriod or one of periods in list_metrics detail=[metric_id]."
  5. Changed1 schema field changed
    • addedInput schema / properties / region
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 40,
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Only areas of one English region: its code (E12000001-E12000009) or name, e.g. 'North West', 'London'. Omitted: every area Close Knit covers.",
      +  "title": "Region"
      +}
  6. First observed

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already carry readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds a sunset date, which is real lifecycle context, but it does not explain what happens at or after that date, nor what the call returns in the interim.

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

Conciseness4/5

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

Two short front-loaded fragments with no filler — sizing is appropriate for a deprecation notice. It loses a point because the second fragment is terse to the point of being unclear about current callability.

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

Completeness3/5

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

For an 8-parameter tool with an output schema, the description is complete only as a routing stub: it tells the agent where to go instead. It leaves unresolved whether the tool still functions now, and the pseudo-syntax 'query(saved: "metric:<id>")' is not a literal parameter example from the query schema.

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 description coverage is 100% and the schema itself documents metric_id, period, level, order, top_n, region and intent in detail. The description adds no parameter meaning whatsoever, so baseline 3 applies.

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

Purpose3/5

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

The description never states what the tool actually does (rank areas by a metric); it only announces a move. The purpose is recoverable from the name/title, and the redirect to query(saved: "metric:<id>") does signal the domain, so it is not misleading, but it is not a purpose statement either.

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?

It names an alternative (query with saved: "metric:<id>") which is genuine routing value. However, 'Moved' (past tense, done) sits in tension with 'Answers until 2026-11-30', leaving ambiguous whether calling it now is safe or returns stale/empty results.

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.