Skip to main content
Glama

Rank schools

rank_schools
Read-onlyIdempotent

Moved: use query(kind: "school"). Answers until 2026-11-30.

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": {
      "criteria": "<criteria>"
    },
    "name": "rank_schools"
  }
}

Input Schema

NameRequiredDescriptionDefault
latNo[scope] near pool: latitude.
lngNo[scope] near pool: longitude.
poolNo[scope] near | council | region | england.region
limitNo[paging] Ranked schools returned, 1-200.
phaseNo[filter: exact] primary | secondary | all.all
filterNo[filter: exact] Schools filter text as the map's ?schools= (on = every school), e.g. t.s_o.out.goodon
intentNo[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.
regionNo[scope] region pool: region code (London E12000007).E12000007
area_idNo[id] A neighbourhood (LSOA) from find_areas, e.g. uk:lsoa:E01000951: every school gets metres from it; the near pool centres on it without lat/lng.
councilNo[scope] council pool: the local authority's whole name, any case, e.g. Ealing.
criteriaYes[rank weight] 1-8 weighted criteria.
radius_kmNo[scope] near pool: radius, 0.2-5 km.
min_cohortNo[filter: range] Cohort minimum for results, 10-100.
rate_previousNo[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.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed24 schema fields changed
    • changedInput schema / $defs / CriterionInput / properties / direction / description
      Previous value: -"'higher' or 'lower' is better; blank takes the measure's default."New value: +"[rank weight] 'higher' or 'lower' is better; blank takes the measure's default."
    • changedInput schema / $defs / CriterionInput / properties / measure / description
      Previous value: -"Measure id from list_school_measures, e.g. ks4-attainment8 (find_areas' spellings such as ks2RwmExpected work too)."New value: +"[id] Measure id from list_school_measures, e.g. ks4-attainment8 (find_areas' spellings such as ks2RwmExpected work too)."
    • changedInput schema / $defs / CriterionInput / properties / must_max / description
      Previous value: -"Must be at most this (a filter, no weight)."New value: +"[filter: range] Must be at most this (a filter, no weight)."
    • changedInput schema / $defs / CriterionInput / properties / must_min / description
      Previous value: -"Must be at least this (a filter, no weight)."New value: +"[filter: range] Must be at least this (a filter, no weight)."
    • changedInput schema / $defs / CriterionInput / properties / weight / description
      Previous value: -"Importance 1-5."New value: +"[rank weight] Importance 1-5."
    • 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 / properties / area_id / description
      Previous value: -"A neighbourhood (LSOA) from find_areas, e.g. uk:lsoa:E01000951: every school gets metres from it; the near pool centres on it without lat/lng."New value: +"[id] A neighbourhood (LSOA) from find_areas, e.g. uk:lsoa:E01000951: every school gets metres from it; the near pool centres on it without lat/lng."
    • changedInput schema / properties / council / description
      Previous value: -"council pool: the local authority's name, e.g. Ealing."New value: +"[scope] council pool: the local authority's whole name, any case, e.g. Ealing."
    • changedInput schema / properties / criteria / description
      Previous value: -"1-8 weighted criteria."New value: +"[rank weight] 1-8 weighted criteria."
    • changedInput schema / properties / filter / description
      Previous value: -"Schools filter text as the map's ?schools= (on = every school), e.g. t.s_o.out.good"New value: +"[filter: exact] Schools filter text as the map's ?schools= (on = every school), e.g. t.s_o.out.good"
    • 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 / lat / description
      Previous value: -"near pool: latitude."New value: +"[scope] near pool: latitude."
    • changedInput schema / properties / limit / description
      Previous value: -"Ranked schools returned, 1-200."New value: +"[paging] Ranked schools returned, 1-200."
    • changedInput schema / properties / lng / description
      Previous value: -"near pool: longitude."New value: +"[scope] near pool: longitude."
    • changedInput schema / properties / min_cohort / description
      Previous value: -"Cohort minimum for results, 10-100."New value: +"[filter: range] Cohort minimum for results, 10-100."
    • changedInput schema / properties / phase / description
      Previous value: -"primary | secondary | all."New value: +"[filter: exact] primary | secondary | all."
    • changedInput schema / properties / pool / description
      Previous value: -"near | council | region | england."New value: +"[scope] near | council | region | england."
    • changedInput schema / properties / radius_km / description
      Previous value: -"near pool: radius, 0.2-5 km."New value: +"[scope] near pool: radius, 0.2-5 km."
    • 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."
    • changedInput schema / properties / region / description
      Previous value: -"region pool: region code (London E12000007)."New value: +"[scope] region pool: region code (London E12000007)."
  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. Changed2 schema fields changed
    • changedInput schema / $defs / CriterionInput / properties / measure / description
      Previous value: -"Measure id from list_school_measures, e.g. ks4-attainment8."New value: +"Measure id from list_school_measures, e.g. ks4-attainment8 (find_areas' spellings such as ks2RwmExpected work too)."
    • addedInput schema / properties / area_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "pattern": "^uk:lsoa:E\\d{8}$",
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "A neighbourhood (LSOA) from find_areas, e.g. uk:lsoa:E01000951: every school gets metres from it; the near pool centres on it without lat/lng.",
      +  "title": "Area Id"
      +}
  4. Added

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description's added value is lifecycle context (superseded, usable until 2026-11-30), but it omits what happens after that date, whether calls will error or silently degrade, and nothing about how ranking behaves given 14 parameters.

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 sentences with zero filler, and the routing instruction is front-loaded ahead of the sunset date. It is efficiently sized for a deprecation notice, though the terse 'Answers until...' phrasing is ambiguous about what is being promised.

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?

Judged against its apparent job, this is complete: it tells the agent to go elsewhere and until when, and the output schema plus full parameter descriptions carry the rest. What is missing is only the fate of the tool after the cutoff, which matters if an agent encounters it later.

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%, so every one of the 14 parameters, including nested criterion fields, is already documented with weights, ranges and ids; baseline 3 applies. The description adds no parameter meaning of its own, and the only argument it mentions (kind: "school") belongs to the sibling tool, not this one.

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

Purpose2/5

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

The description never states what rank_schools does; it only announces a move and a destination, leaving the verb 'rank' and the school-ranking resource to be inferred from the name and title. For an agent that has not already read the schema, this is a redirect rather than a purpose statement.

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?

It names the exact alternative to use instead, including the argument to pass (query(kind: "school")), which is unusually actionable routing. The gap is the reverse condition: it does not say when, if ever, the agent should still call rank_schools during the stated window, so the choice is only half specified.

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.