Morocco communes
Server Details
Morocco's régions, provinces and communes: HCP codes, names, census population and boundaries
- Status
- Healthy
- Uptime
- 100.0% over 24 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- zkousama/morocco-communes
- GitHub Stars
- 48
- Server Listing
- morocco-communes
TDQS
Scored across 12 tools
Most tools target clearly distinct purposes: spatial lookups (commune_at, communes_near), entity lookup (get_commune, get_unit, search, list_communes), and topic-specific statistics (get_economy, get_housing, get_indicators, get_douars, get_insights, get_neighbourhoods). The three stats tools share a similar retrieval shape but are separated by topic, and search vs get_neighbourhoods overlap slightly on neighbourhood lookup, though descriptions clarify the difference.
The dominant pattern is a clean snake_case verb_noun scheme (get_commune, list_communes, get_indicators, search). The two spatial tools break it with noun-first names (commune_at, communes_near), which is a minor deviation but still readable and semantically sensible.
12 tools is well-scoped for a rich geographic and census domain. Each tool covers a distinct resource or topic (lookup, listing, spatial, economy, housing, indicators, douars, insights, neighbourhoods) and earns its place without redundancy.
The surface covers the full lifecycle well: name/code search, unit and commune detail, sorted/filtered listing, spatial point and radius queries, and multiple statistical topics plus 2014 comparison. Minor gaps remain, such as no boundary/geometry export or explicit cross-unit comparison tool beyond list_communes level aggregation.
Available Tools
12 toolscommune_atCommune at a pointARead-onlyIdempotentInspect
The commune whose boundary contains a point, with its names, type, parents and population, and in Casablanca, Rabat, Fès, Marrakech, Salé and Tanger the arrondissement too. Use it to turn coordinates, from a map or a device, into a commune. Sidi Mohamed Benmansour has no boundary, and neither do about 88 km² between Ifrane and Boulemane.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | Latitude, in degrees. | |
| lng | Yes | Longitude, in degrees. |
Output Schema
| Name | Required | Description |
|---|---|---|
| commune | Yes | |
| arrondissement | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the description doesn't need to restate safety. It adds valuable behavioral context: the specific cities where arrondissements are included, and the known coverage gaps. This goes beyond the schema and helps an agent predict failures.
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 three sentences: the first defines purpose and output, the second gives a usage directive, and the third notes exceptions. It is efficient and front-loaded with the core definition. The third sentence is a useful aside but slightly tangential, so it isn't perfectly lean.
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 two well-documented parameters and an existing output schema, the description covers everything an agent needs: core function, intended use, and known data gaps. The mention of specific cities and exceptions makes it exceptionally 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?
Both parameters (lat, lng) are fully described in the schema with ranges and units ('Latitude, in degrees.'). The description only adds the generic term 'coordinates' and does not provide additional format details, bounds, or examples. With 100% schema coverage, 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 clearly states the tool returns the commune containing a point, with specific fields (names, type, parents, population) and even city-specific arrondissements. It also distinguishes from siblings like communes_near and get_commune by focusing on point-to-commune mapping.
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?
It gives an explicit use case: 'Use it to turn coordinates, from a map or a device, into a commune.' It also highlights known edge cases where no commune exists (Sidi Mohamed Benmansour, 88 km² between Ifrane and Boulemane), which is useful for setting expectations. However, it does not explicitly contrast with alternatives like communes_near, so it misses the 'when-not-to-use' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
communes_nearCommunes near a pointARead-onlyIdempotentInspect
Communes within a radius of a point, nearest first. Distance is measured to each commune's centroid, so the nearest commune isn't always the one that contains the point: commune_at gives that one.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | Latitude, in degrees. | |
| lng | Yes | Longitude, in degrees. | |
| limit | No | How many results. 10 when left out, at most 50. | |
| radius_km | No | Radius in km. 10 when left out, at most 100. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds valuable behavioral context: distance is measured to centroids, results are ordered nearest-first, and the nearest commune may not contain the point. This goes beyond the annotations and helps the agent interpret results correctly.
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 wasted words. The core behavior is front-loaded, and the caveat plus sibling alternative is packed into the second sentence. Every clause 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?
The tool has an output schema, so return values are documented elsewhere. The description covers the key behavioral nuance (centroid distance) and the sibling distinction. A small gap is that it doesn't mention the default radius/limit, but those are already in the input schema, so the description is complete enough for an agent 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?
Schema description coverage is 100%, so the schema already documents all four parameters (lat, lng, limit, radius_km) with types, bounds, and defaults. The description adds the centroid-distance semantics but doesn't need to repeat parameter details. Baseline 3 is appropriate because the schema carries the parameter documentation burden.
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 ('Communes within a radius of a point') and resource, and explicitly distinguishes itself from the sibling commune_at by explaining the centroid-distance behavior. This makes the tool's purpose unmistakable and differentiates it from the sibling that returns the commune containing the point.
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 explicitly says when to use this tool versus commune_at: use this for communes within a radius, and commune_at for the commune that contains the point. It also clarifies the nearest-first ordering and the centroid caveat, which is essential for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_communeGet one communeBRead-onlyIdempotentInspect
One commune's names, type, région, province and cercle, 2024 and 2014 population, the change between them, a point inside it, the communes it borders and how much boundary it shares with each, and in the 6 cities divided into them, its arrondissements with their population. Identify it by HCP code (01.511.01.0), the code as digits, or a slug (tanger).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | An HCP code, the code as digits, or a slug. |
Output Schema
| Name | Required | Description |
|---|---|---|
| commune | Yes | |
| neighbours | Yes | The communes this one borders, longest shared boundary first. Measured on the OpenStreetMap boundaries, so it is under ODbL. |
| arrondissements | Yes | Casablanca, Rabat, Fès, Marrakech, Salé and Tanger's arrondissements, most populous first; empty elsewhere. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, covering the safety profile. The description adds context about accepted ID formats and the scope of returned data, but it does not disclose error behavior, rate limits, or dependency on external factors. This is adequate but not beyond what 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence enumerating all the returned data, followed by a clear identifier instruction. Every phrase adds information, and it is front-loaded with the core content. It is long but not verbose, though it could be broken into two sentences for easier scanning.
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 an output schema exists and annotations cover read-only/idempotent behavior, the description is sufficient for an agent to know what it returns and how to call it. It does not mention failure modes or edge cases (e.g., codes not found), but the presence of an output schema fills in the return structure. Overall, the description is complete enough for correct invocation in the common case.
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 coverage is 100% with a short description of the 'id' parameter. The tool description adds concrete examples ('01.511.01.0' and 'tanger') that clarify the accepted formats, providing extra value beyond the schema's generic wording. This nudges it above the baseline 3.
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 a wide array of data for a single commune (names, type, populations, borders, arrondissements), and specifies the identifier types. It is unambiguous about the resource and scope, but it does not explicitly name sibling tools or contrast with them, so it falls 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?
The description explains how to identify the commune (HCP code, digits, or slug) but gives no guidance on when to use this tool versus alternatives like list_communes, commune_at, or get_unit. There is no mention of use cases, prerequisites, or exclusions, so the agent is left to infer situational appropriateness from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_douarsA rural commune's douarsARead-onlyIdempotentInspect
The douars of a rural commune from HCP's 2024 census, the villages and hamlets it's made of, grouped in its fractions (mashyakha), named in Arabic only. Each has its kind (grouped, split into sub-douars, or dispersed), its households and its people. A douar has its name in Latin where a source writes one, and its point where GeoNames or OpenStreetMap maps it. With figures, a douar of 30 households or more also has the nationality, sex, age, civil registration and marital status of its people, the kind of dwelling its households live in, and the average distance in km from its dwellings to a paved road, an unpaved road a car can drive on, a primary school, a collège, a lycée and a health centre. HCP withholds those for a smaller douar, and says null. A town has no douars, though 21 communes counted as urban have some in their rural part.
| Name | Required | Description | Default |
|---|---|---|---|
| unit | Yes | A commune, by code or slug. | |
| figures | No | Include each douar's figures. Left out, a douar is its name, kind, households and people. | |
| fraction | No | Only the douars of this fraction, by its 10-digit code. |
Output Schema
| Name | Required | Description |
|---|---|---|
| unit | Yes | |
| total | Yes | How many douars are returned. |
| douars | Yes | |
| message | No | Present when the commune has no douars. |
| fractions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare it a safe, idempotent read; the description goes well beyond that by disclosing data-availability rules (figures only for douars of 30+ households, HCP withholds and returns null), naming conventions (Arabic only, Latin only when a source writes one), and coordinate provenance (GeoNames/OpenStreetMap). These are exactly the gotchas an agent needs before calling.
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?
Dense but information-bearing; every clause carries a distinct fact and the identity/scoping sentence is front-loaded. It would read better split into short grouped sentences, but there is little removable waste.
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 present, return structure needn't be described, and the description still covers the domain model (fractions/mashyakha, douar kinds, conditional figures) and the town-vs-commune edge case. Nothing an agent needs to call this correctly is missing.
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 coverage is 100% and already documents all three params, so baseline is 3. The description adds real meaning on top: it explains what the response degrades to when 'figures' is left out (name, kind, households and people), which the schema only gestures at. It adds nothing beyond the schema for 'unit' or 'fraction'.
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 a specific verb and resource (the douars of a rural commune) plus its source scope (HCP 2024 census) and enumerates the fields each douar carries. An agent can tell this apart from get_commune or get_neighbourhoods without opening a schema, since it names the exact sub-unit and its contents.
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?
It gives a partial when-not rule ('A town has no douars, though 21 communes counted as urban have some in their rural part'), which helps scope selection. But it never names an alternative tool (e.g. get_commune, get_neighbourhoods) or states when another sibling is the better choice, so routing must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_economyEconomic establishmentsARead-onlyIdempotentInspect
HCP's 2024 count of economic establishments for Morocco or any région, province or préfecture, cercle, commune or arrondissement: how many establishments were mapped, how many are public services, how many are associations in premises of their own, how many are businesses, and how many permanent jobs those businesses hold. The businesses are split three ways, each covering all of them: by sector (industry, construction, commerce, services), by how many people work there (1, 2-3, 4-9, 10-49, 50 and over), and by when they were founded (before 1956 through 2020 and later). The weekly souks in use are counted beside them and are not part of the total.
Reading them: every figure is a count, taken during the census by field teams who mapped each establishment. Farming is out, the workbook counts every sector but agriculture, and the jobs are the permanent ones.
Ranking and comparing: to order communes by one of these, call list_communes with sort set to its path, such as economy.establishments.jobs, or by one of the 3 it works out from them: economy.per1000.establishments, economy.per1000.jobs, economy.perBusiness.jobs. To compare the régions, the provinces or the arrondissements, give level without a unit and get them all in one call.
Casablanca and the 5 other cities divided into arrondissements are counted by arrondissement, so their figures are the sum of those, marked basis: arrondissement_sum. Say so when you report one.
| Name | Required | Description | Default |
|---|---|---|---|
| unit | No | A région, province or préfecture, cercle, commune or arrondissement, by code or slug. Morocco as a whole when left out. | |
| level | No | With a unit, the level it's at, where a name is shared: Tiznit is a commune and a province, and a name alone means the commune. Without a unit, region, province or arrondissement gives every one of that level in one call. | |
| topics | No | Only these topics. Every topic when left out. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly and idempotent annotations, the description discloses important behaviors: souks are counted separately and excluded from the total, agriculture is excluded, jobs are permanent, and cities with arrondissements are reported as arrondissement sums with basis: arrondissement_sum. These are exactly the non-obvious behaviors an agent needs before invoking the tool.
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 long but every section earns its place: a clear inventory of counts, a 'Reading them' caveat block, a 'Ranking and comparing' routing block, and a specific arrondissement_sum warning. It is front-loaded with the core count definition and uses compact, structured paragraphs rather than 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 data retrieval tool with an output schema, the description covers all necessary context: granularity, exclusions, parameter behavior, comparison usage, and output semantics for arrondissement cities. An agent has enough information to select the tool, call it correctly, and interpret the result.
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 coverage is 100%, but the description still adds meaning: it explains that a bare name defaults to the commune (e.g., Tiznit), that level without a unit returns every unit of that level, and that business splits correspond to sector, size, and founding period. This exceeds the baseline for fully covered schema.
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 a precise verb and resource: 'HCP's 2024 count of economic establishments for Morocco or any région, province or préfecture, cercle, commune or arrondissement.' It names the exact metrics returned (establishments, public services, associations, businesses, permanent jobs) and clearly separates this from siblings like get_housing and list_communes.
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 routing guidance: 'To order communes by one of these, call list_communes with sort set to its path' and 'To compare the régions, the provinces or the arrondissements, give level without a unit and get them all in one call.' This tells the agent when to use an alternative tool and when to use this tool differently.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_housingUrban housing stockARead-onlyIdempotentInspect
HCP's 2024 count of urban dwellings for Morocco or any unit that has an urban area: how many there are, how many are occupied, vacant or second homes, what kind they are (villa, apartment, traditional or modern Moroccan house, slum, rural-type), how old they are, what their walls and roofs are made of, how many are on the public electricity, water and sewerage networks, and HCP's housing shortfall. Every figure but the count is a percentage of that unit's urban dwellings. This counts dwellings, not households: a vacant flat is here and in nobody's census record, and get_indicators describes the dwelling each household lives in, for the whole country rather than the towns. A unit with no urban area has nothing here. For the households with running water or electricity in any commune, rural ones included, use get_indicators' amenities topic, and its wastewater topic for a public sewer; list_communes can sort by either, as in amenities.runningWater.
| Name | Required | Description | Default |
|---|---|---|---|
| unit | No | A unit by code or slug. Morocco as a whole when left out. | |
| level | No | With a unit, the level it's at. Without one, region, province or arrondissement gives every one of that level. | |
| topics | No | Only these topics. Every topic when left out. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and closed-world, but the description adds substantive semantics: every figure except the count is a percentage, and the data counts dwellings rather than households (a vacant flat appears here but in no census record). It does not cover pagination or response shape, though an output schema exists.
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?
Purpose is front-loaded in the first sentence and nothing is padded with filler, but the remaining content is delivered as three very long, densely punctuated sentences that are harder to scan than they need to be.
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 handling return values and annotations covering the safety profile, the description covers everything else an agent needs: scope, exclusions, sibling routing, and the dwellings-vs-households caveat. Nothing material is missing.
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 coverage is 100%, so the baseline is 3, but the description adds real meaning: the unit must have an urban area to return data, the default is Morocco as a whole, and the topic list is described in prose (occupancy split, building materials, network hookups). This goes beyond restating the schema.
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 a specific resource (HCP's 2024 count of urban dwellings) and enumerates exactly what is measured – count, occupancy, type, age, walls, roofs, networks, shortfall. It explicitly separates itself from get_indicators, so an agent can distinguish the two without opening a schema.
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?
Names the alternatives and the conditions that select them: get_indicators' amenities topic for household-level water/electricity (rural included), its wastewater topic for public sewers, and list_communes for sorting. It also states the negative case – a unit with no urban area has nothing here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_indicatorsCensus indicatorsARead-onlyIdempotentInspect
HCP's census figures for Morocco or any région, province or préfecture, cercle, commune or arrondissement: age, marital status, fertility, disability, schooling, illiteracy, the languages people read and write and the local languages they use, education, work, employment status and how people get to work, and for households their size, dwelling, occupancy, amenities, wastewater, waste and cooking fuel.
Reading them: shares and rates are percentages from 0 to 100. Null means HCP publishes no figure there. Most come from the long questionnaire, which went to a random 20% of households in communes of 2,000 households or more, so there they're estimates.
Ranking and comparing: to order communes by one figure, call list_communes with sort set to its path, rather than this once per commune. To compare the régions, the provinces or the arrondissements, give level without a unit and get them all in one call.
The 2014 census is here too, under census. Age, education, local languages, illiteracy, fertility, disability, work, the ways of getting to work, dwellings, amenities, wastewater and waste ask what 2024 asks and can be read against it. Where people work and how children get to school are 2014 only. Five topics changed and can't be subtracted: marital status covered everyone rather than people aged 15 and over, schooling ages 7 to 12 rather than 6 to 11, reading and writing was asked as combinations of languages rather than one at a time, a household counted under every cooking fuel it used, and the employment shares took in unemployed people who had worked before. A unit the 2014 census didn't count has null there, Casablanca and the 5 other cities with arrondissements among them, since 2014 published those by arrondissement.
| Name | Required | Description | Default |
|---|---|---|---|
| sex | No | Everyone (all), men, women, or each of the three. all when left out. Household figures have no sex. | |
| area | No | The whole unit (total), its urban or rural part, or each of the three. total when left out. | |
| unit | No | A région, province or préfecture, cercle, commune or arrondissement, by code or slug. Morocco as a whole when left out. | |
| level | No | With a unit, the level it's at, where a name is shared: Tiznit is a commune and a province, and a name alone means the commune. Without a unit, region, province or arrondissement gives every one of that level in one call. | |
| census | No | Which census. 2024 when left out. both gives the two together, to see what changed. | |
| topics | No | Only these topics. Every topic when left out. Two are easy to confuse: labour holds the labour force, the activity rate and the unemployment rate, while employmentStatus is how the people in work are employed, as employees, self-employed or apprentices. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnly/idempotent/closed-world; the description adds far more: the 20% long-questionnaire sample and that results are estimates in communes of 2,000+ households, the meaning of null, and the five 2014 topics whose definitions changed and therefore cannot be subtracted. It even explains that 2014 units not counted (Casablanca and 5 other arrondissement cities) return null. That is exactly the behavioral context an agent cannot get from structured fields.
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?
Long but deliberately sectioned into purpose, reading rules, comparison guidance and 2014 comparability, which keeps it navigable. The prose topic enumeration in the first sentence largely duplicates the topics enum, which is the main source of waste. Front-loading is reasonable, though the core action is buried inside a long topic list.
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 values need no explanation. Between the comparability caveats, the sample-weight warning, the null semantics, the sibling routing and full parameter coverage, an agent has everything needed to call this correctly on the first attempt.
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 coverage is 100%, so most parameter meaning is already documented (the Tiznit name-collision note and the labour-vs-employmentStatus distinction appear in the schema itself). The description still adds value by linking parameters to behavior, e.g. passing level without a unit returns every unit of that level in one call, and by tying census=2014 to the null-unit caveat. Slight redundancy with the schema keeps it below 5.
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 opening sentence names the exact resource (HCP census figures) and the full set of geographic units it covers, then enumerates the topic space, so an agent knows precisely what data comes back. It earns differentiation by naming list_communes as the alternative for ordered comparisons. The only weakness is that the purpose is expressed as a headless noun phrase rather than an explicit verb+resource statement, but the intent is unmistakable.
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?
It gives explicit when-to-use-this-vs-siblings guidance: for ranking use list_communes with sort rather than calling this once per commune, and to compare régions/provinces/arrondissements pass level without a unit to get them all in one call. It also states usage for reading results (shares/rates are 0-100, null means unpublished) and when to add census=both. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_insightsFigures that stand out in a communeARead-onlyIdempotentInspect
For a commune, up to 3 of its 2024 census figures that stand out: among the highest or lowest communes, moved far more or less than other communes since 2014, or far from its province's figure. Each comes with its context as numbers, worked out from the census: the commune's other figures here, the communes it borders on the same figure (their median and the one furthest from it), and the same figure in 2014 beside Morocco's, where the two censuses can be compared. A commune with any figure the two censuses disagree on is left out, on its own page and as a neighbour. Figures they measure differently, shares by sex and likely errors in the data are left out too. An economy or housing figure on fewer than 100 businesses or urban dwellings is left out, since a handful of them can swing a share. A census figure in a commune of 2,000 households or more is marked sampled, since the long questionnaire went to a sample of households there. No language model writes or judges any of it. Only communes have these, and most have none.
| Name | Required | Description | Default |
|---|---|---|---|
| unit | Yes | A commune, by code or slug. | |
| level | No | The level, where a name is shared: Tiznit is a commune and a province, and a name alone means the commune. |
Output Schema
| Name | Required | Description |
|---|---|---|
| unit | Yes | |
| message | No | Present when no figures are published for this place. |
| findings | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld/idempotent annotations, the description discloses substantial behavioral traits: whole categories of exclusions (disagreeing censuses, sex-share figures, likely errors, economy/housing on <100 businesses or dwellings), a 'sampled' marking for communes of 2,000+ households, and the fact that nothing is model-generated. This is exactly the kind of context an agent cannot infer from annotations alone.
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 core output is front-loaded in the first sentence, and subsequent sentences each carry a distinct exclusion or caveat rather than filler. It is long for a two-parameter read tool and some of the return-content detail overlaps the output schema, but nothing is padding.
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 annotations covering the safety profile and an output schema present, the description need not explain return values; it nonetheless covers scope, exclusions, sampling caveats, and the commune-only limitation. An agent has everything needed to invoke it correctly and interpret empty or 'sampled' responses.
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% and both parameters are already documented with type, enum, and a name-collision note, so the baseline is 3. The description adds only a weak signal ('for a commune', 'only communes have these') that usefully implies which values of 'unit'/'level' actually yield results, but it does not deepen the parameter contract materially.
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 resource: up to 3 standout 2024 census figures for a commune, with the types of standout (highest/lowest, biggest change since 2014, far from province figure) spelled out. This is clearly distinguishable from data-listing siblings like get_indicators or get_commune, though it never names an alternative explicitly. Purpose is unambiguous, so 4 rather than 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?
'Only communes have these, and most have none' gives a real usage precondition and warns that empty results are common. However, no alternative tool is named for when a caller wants raw figures rather than outliers, and no explicit when-to-use guidance versus get_indicators/get_commune is offered. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_neighbourhoodsA commune's neighbourhoods and postcodesARead-onlyIdempotentInspect
The neighbourhoods OpenStreetMap and Poste Maroc name in a commune, a city's arrondissements included, with the arrondissement each was placed in where it has a point, where its name comes from, and the postcodes Poste Maroc lists under it; and the commune's postcodes. The census publishes nothing by neighbourhood: the figures are the commune's, or the arrondissement's. To find which commune a neighbourhood is in, call search with its name instead.
| Name | Required | Description | Default |
|---|---|---|---|
| unit | Yes | A commune, by code or slug. | |
| limit | No | How many neighbourhoods, in alphabetical order. 200 when left out; Casablanca has over 1,400. |
Output Schema
| Name | Required | Description |
|---|---|---|
| unit | Yes | |
| total | Yes | How many neighbourhoods the commune has, whatever the limit. |
| message | No | Present when the commune has no named neighbourhoods, whether or not it has postcodes. |
| postcodes | Yes | |
| neighbourhoods | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, so the safety profile is covered. The description usefully adds the data provenance (OSM + Poste Maroc) and the granularity limitation (census publishes nothing by neighbourhood), which is genuine added context. However it says nothing about the large result sets implied by the limit param (Casablanca has 1,400+), page behavior, or cost. Output schema covers the return shape, so this is a solid-but-not-rich 3-4; I settle at 3 given the behavioral gaps around bulk results.
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?
Every sentence carries information (sources, granularity caveat, reverse-lookup routing), but the first sentence is an overstuffed clause chain that buries the primary purpose. The key resource statement should be front-loaded as its own sentence rather than wrapped in subordinate clauses, so structure is adequate but not efficient.
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 structure needn't be explained, and annotations carry the safety profile. The description supplies provenance, the census granularity caveat, and reverse-lookup routing — enough for a 2-param read tool. Minor gap: no guidance on handling the very large result sets the limit parameter implies.
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%: `unit` is documented as a commune by code or slug, and `limit` documents its default (200) and max (2000) plus the ordering (alphabetical). The description adds no parameter-level detail beyond what the schema already provides, so baseline 3 applies.
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 a specific resource (neighbourhoods and postcodes of a commune) with named sources (OpenStreetMap, Poste Maroc) and included sub-entities (arrondissements, name origins). It distinguishes itself from the sibling `search` for the reverse lookup, though the dense run-on opening sentence makes the core purpose slower to extract than it should be.
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?
Explicitly routes the reverse case away: 'To find which commune a neighbourhood is in, call search with its name instead.' It also clarifies via the census note that figures are not available at neighbourhood granularity, implying when this data is and isn't the right source. No exclusion vs. commune_at/get_douars, but the primary alternative is named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_unitA région, province or cercleARead-onlyIdempotentInspect
One région, province, préfecture or cercle: its name in French and Arabic, its 2024 population and households, the units above it, how many units it holds, and the ones directly under it, named: a région's provinces, a province's cercles. This is the tool for a question about a unit above the commune, such as how many cercles a province has. For a commune or an arrondissement, call get_commune; to list a unit's communes, call list_communes with that unit.
| Name | Required | Description | Default |
|---|---|---|---|
| unit | Yes | A région, province, préfecture or cercle, by code or slug. | |
| level | No | The level, where a name is shared: Tiznit is a commune and a province, and a name alone means the commune. |
Output Schema
| Name | Required | Description |
|---|---|---|
| unit | Yes | |
| counts | Yes | How many units of each level this one holds. |
| children | Yes | The units directly under it. Empty for a cercle, whose communes come from list_communes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so safety is covered. The description adds useful behavioral context about hierarchical resolution, including which child units are returned for which level, and the shared-name disambiguation behavior involving level. It does not contradict 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 dense but efficient: it front-loads the return contents, then states when to use it, then names alternatives. Every sentence earns its place and no filler is present.
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 the rich schema, output schema, and read-only annotations, the description is largely complete for invocation and selection. It clearly explains what is returned and routes to siblings. A minor gap is that 'préfecture' is mentioned as a supported unit type but does not appear in the level enum, which could leave an agent uncertain how to disambiguate a préfecture when a name is shared.
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 coverage is 100% and the schema already explains code/slug usage and the shared-name level disambiguation. The description reinforces the unit hierarchy and maps it to typical questions, but it adds little parameter-level detail beyond what the schema already provides, so the baseline 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 names a specific resource type (région, province, préfecture, cercle) and enumerates exactly what is returned: names in French/Arabic, 2024 population, households, ancestors, and children. It also differentiates itself from sibling tools by naming get_commune for lower-level units and list_communes for listing communes.
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 explicitly states the tool's target: 'This is the tool for a question about a unit above the commune, such as how many cercles a province has.' It also gives clear alternatives: call get_commune for a commune or arrondissement, and list_communes to list a unit's communes. The routing 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_communesList communesARead-onlyIdempotentInspect
Which commune has the most or the least of something is one call here: sort by that figure, and every commune in the filter comes back in order with its value, with no need to look them up one by one. Communes filtered by région, province or préfecture, cercle, type or population, 50 to a page, in code order or sorted by name, population, change since 2014, density, area, any census indicator or any establishment count. Filters combine; each unit can be given by code or slug. With no filter it lists every commune, so sort: "-population" alone gives the largest in the country.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, from 1. | |
| sort | No | A field to order by: code, name, population, change, density, area, or a census indicator by its path, such as labour.unemploymentRate or amenities.runningWater, as get_indicators names them. Put 2014. before the path for the 2014 figure, or change. for how far it moved since, as in change.illiteracy.rate10Plus. An establishment count goes under economy., as in economy.establishments.jobs or economy.sector.commerce, as get_economy names them. A count on its own ranks the biggest places first, so 3 figures worked out from 2 counts rank by size of place rather than size: economy.per1000.establishments, economy.per1000.jobs and economy.perBusiness.jobs. A leading minus puts the largest first. Code order when left out. | |
| type | No | Urban or rural communes only. | |
| cercle | No | A cercle, by code or slug. | |
| region | No | A région, by code or slug. | |
| province | No | A province or préfecture, by code or slug. | |
| max_population | No | Only communes with at most this many people in 2024. | |
| min_population | No | Only communes with at least this many people in 2024. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| total | Yes | |
| communes | Yes | |
| total_pages | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, closed-world behavior, and the description adds genuinely new operational facts: page size of 50, code order as the default, that filters combine, and that identifiers may be codes or slugs. It does not mention total counts or a max-page cap, but the paging behavior is disclosed.
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 rhetorical opening ("Which commune has the most or the least of something is one call here") and the re-explanation of count-ranking rules consume space already spent in the schema's sort field. Reorganizing it into a short "what it does / how to filter / how to sort" structure would carry the same content in fewer sentences.
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 present, return values need no explanation, and the description covers what matters for correct invocation: filter dimensions, combinability, sort syntax, default ordering, and pagination. Only edge details (page bounds, total result handling) are absent, which is acceptable against the structured fields.
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% and the schema's own sort description already documents the minus prefix, 2014./change. prefixes, and the per1000 ranking subtlety, so the description's long sort passage is largely a restatement. The notes that filters combine and that code or slug is accepted are marginal additions over the schema, keeping this at the baseline.
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 makes the verb+resource concrete: it returns every commune matching a filter, ordered by any figure, and it frames the primary use case (finding the largest/smallest place in one call). It implicitly contrasts with one-by-one lookup (get_commune) but never names a sibling, so differentiation from search/get_unit is left to the agent.
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?
Clear context is given: use this to rank communes by any indicator or establishment count, and "With no filter it lists every commune, so sort: \"-population\" alone gives the largest in the country" supplies a concrete invocation pattern. It stops short of explicit when-not-to-use guidance or naming alternatives like search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearch Moroccan administrative unitsARead-onlyIdempotentInspect
Find régions, provinces and préfectures, cercles, communes and arrondissements of Morocco by name. Takes French or Arabic, a slug, or another name a place is known by: Fez finds Fès, Mogador finds Essaouira. A neighbourhood's name finds the arrondissement or commune it's in, with matched neighbourhood and the neighbourhood's names: Sidi Maârouf finds Aïn-Chock, in Casablanca. The census has no figures for a neighbourhood itself. A 5-digit postcode finds the commune it's in, with matched postcode: 20520 finds Casablanca. Returns codes; pass a commune's code to get_commune for its population and parents.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many results. 10 when left out, at most 50. | |
| query | Yes | The name to look for, in French, Arabic or as a slug, or a unit's code. | |
| levels | No | Only these levels. Every level when left out. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, closed-world, so the safety profile is covered. The description adds real behavioral context beyond that: alias/fuzzy matching (Mogador→Essaouira), the fact that a neighbourhood query resolves to its parent arrondissement/commune, and that results are codes rather than data.
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?
Dense but front-loaded: purpose first, then input forms, then edge cases and the handoff to get_commune. Every sentence carries information, though the run of worked examples is slightly long.
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 structure needn't be explained, yet the description still tells the agent that codes come back and how to use them. Combined with the alias/postcode/neighbourhood rules, nothing needed to call it correctly is missing.
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 coverage is 100%, so baseline is 3, but the description meaningfully enriches the query parameter beyond the schema's form list by documenting alias resolution and postcode lookup behavior, and by naming the returned codes as the input to get_commune.
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 a specific verb (find) and a precisely enumerated resource (régions, provinces/préfectures, cercles, communes, arrondissements of Morocco) with concrete examples (Fez→Fès). An agent can distinguish this from siblings like get_commune or list_communes immediately.
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?
Explicitly covers what inputs work (French, Arabic, slug, alias, postcode, neighbourhood name) and routes the agent onward: 'pass a commune's code to get_commune for its population and parents.' It also flags a boundary case — the census has no figures for a neighbourhood itself.
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.
1 tool update
- Changed
get_insights3 fields changed- added
Output schema / properties / findings / items / properties / line / descriptionAdded value: +"The figure in a sentence, in English, French and Arabic." - added
Output schema / properties / findings / items / properties / line / properties / arAdded value: +{ + "type": "string" +} - changed
Output schema / properties / findings / items / properties / line / requiredPrevious value: -[ - "en", - "fr" -]New value: +[ + "en", + "fr", + "ar" +]
2 tool updates
- Changed
get_douars4 fields changed- added
Output schema / properties / douars / items / properties / name_latinAdded value: +{ + "additionalProperties": false, + "description": "Its name in Latin letters where a source writes one: the Ministry of National Education's school lists, OpenStreetMap, GeoNames, or 2 visitors who suggested it on the site. HCP names douars in Arabic only.", + "properties": { + "name": { + "type": "string" + }, + "source": { + "enum": [ + "education", + "osm", + "geonames", + "visitors" + ], + "type": "string" + } + }, + "required": [ + "name", + "source" + ], + "type": "object" +} - added
Output schema / properties / douars / items / properties / placeAdded value: +{ + "additionalProperties": false, + "description": "Its point, where GeoNames or OpenStreetMap maps it in the same commune. Matched by name.", + "properties": { + "lat": { + "type": "number" + }, + "lng": { + "type": "number" + }, + "source": { + "enum": [ + "geonames", + "osm" + ], + "type": "string" + } + }, + "required": [ + "source", + "lat", + "lng" + ], + "type": "object" +} - added
Output schema / properties / fractions / items / properties / labelAdded value: +{ + "description": "HCP's label in place of a name: a fraction outside the commune, or a notional one.", + "enum": [ + "outside", + "notional" + ], + "type": "string" +} - added
Output schema / properties / fractions / items / properties / name_latinAdded value: +{ + "additionalProperties": false, + "description": "Where one of its douars has the same name and a source spells it.", + "properties": { + "name": { + "type": "string" + }, + "source": { + "enum": [ + "education", + "osm", + "geonames", + "visitors" + ], + "type": "string" + } + }, + "required": [ + "name", + "source" + ], + "type": "object" +}
- Changed
get_neighbourhoods1 field changed- changed
Output schema / properties / neighbourhoods / items / properties / source / enumPrevious value: -[ - "osm", - "poste", - "hand" -]New value: +[ + "osm", + "poste", + "hand", + "village" +]
3 tool updates
- Added
get_douars - Added
get_neighbourhoods - Changed
search4 fields changed- changed
Output schema / properties / results / items / properties / matched / enumPrevious value: -[ - "code", - "exact", - "alias", - "prefix", - "spelling", - "trigram" -]New value: +[ + "code", + "exact", + "alias", + "prefix", + "spelling", + "trigram", + "neighbourhood", + "postcode" +] - added
Output schema / properties / results / items / properties / neighbourhood_arAdded value: +{ + "type": "string" +} - added
Output schema / properties / results / items / properties / neighbourhood_frAdded value: +{ + "type": "string" +} - added
Output schema / properties / results / items / properties / postcodeAdded value: +{ + "type": "string" +}
1 tool update
- Changed
get_insights2 fields changed- added
Output schema / properties / findings / items / properties / sampledAdded value: +{ + "description": "True when the figure is a census figure in a commune of 2,000 households or more, where the long questionnaire went to a sample. False for an economy or housing figure, and for a smaller commune.", + "type": "boolean" +} - changed
Output schema / properties / findings / items / requiredPrevious value: -[ - "id", - "kind", - "measure", - "value", - "reference", - "direction", - "line", - "breakdown", - "context" -]New value: +[ + "id", + "kind", + "measure", + "value", + "reference", + "direction", + "sampled", + "line", + "breakdown", + "context" +]
1 tool update
- Added
get_insights
1 tool update
- Changed
search2 fields changed- changed
Input schema / properties / query / descriptionPrevious value: -"The name to look for, in French, Arabic or as a slug."New value: +"The name to look for, in French, Arabic or as a slug, or a unit's code." - changed
Output schema / properties / results / items / properties / matched / enumPrevious value: -[ - "exact", - "alias", - "prefix", - "spelling", - "trigram" -]New value: +[ + "code", + "exact", + "alias", + "prefix", + "spelling", + "trigram" +]
9 tool updates
- First observed
commune_at - First observed
communes_near - First observed
get_commune - First observed
get_economy - First observed
get_housing - First observed
get_indicators - First observed
get_unit - First observed
list_communes - First observed
search
Related MCP Connectors
Italian cadastral parcels, geocoding, OMI valuations, risk and demographic data. 85M parcels.
geoBoundaries MCP — open database of political administrative boundaries.
Humanitarian Data Exchange (HDX) MCP — data.humdata.org, the open
WorldPop 100 m gridded population estimates from the University of Southampton — total population…
Related MCP Servers
- FlicenseBqualityDmaintenanceProvides unified access to Moroccan government data, financial markets, geographic information, and more via natural language queries.281-
- AlicenseNot gradedqualityBmaintenanceINEGI DENUE MCP — Mexico's directory of economic units (~6M businesses).387 npmMIT
- AlicenseNot gradedqualityCmaintenanceMCP server for the Moroccan Open Data portal (data.gov.ma) enabling search and retrieval of datasets, resources, organizations, and groups via CKAN API.1MIT
- AlicenseNot gradedqualityCmaintenanceMono County GIS — Mono County & Mammoth Lakes, California open geospatial data (ArcGIS).19 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.