Skip to main content
Glama
cenogram-mcp-server

cenogram-mcp-server

Official

get_infrastructure_signals

Read-only

Detect whether a Polish municipality is likely to build infrastructure by combining public tender activity, waste-water agglomeration membership, and planned capital expenditure.

Instructions

Signals that a Polish municipality is about to build infrastructure, from three public sources: tenders in the national procurement bulletin (rolling 12 months), membership in an agglomeration of the national urban waste-water programme, and the municipality's planned capital expenditure from its multi-year forecast. Address by location (city/county name → every municipality in the county) OR teryt (codes from list_locations; wins when both are given). State these limits when reporting: the bulletin has only contracts BELOW EU thresholds (from 2021), so the largest investments are invisible; a tender is attributed to the contracting authority's SEAT, not the works location, so the counters include municipal authorities only while the notice list shows every authority with a flag. Absence of tenders is NOT evidence that a municipality is not investing. Cost: 1 token.

Input Schema

NameRequiredDescriptionDefault
terytNoTERYT code: 6 or 7 digits = one municipality (e.g. 146501), 4 digits = a county aggregate (e.g. 1465). Wins over location.
locationNoCity, county, gmina or district name (e.g. 'Warszawa', 'Krotoszyn'): city/county → every municipality in the county, gmina → that gmina alone, a Warszawa district ('Mokotów') → that gmina, another city's delegatura ('Kraków-Podgórze') → its parent county. Shared name → candidates; pass one as teryt. Use this OR teryt.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.18.0
    • changedInput schema / properties / location / description
      Previous value: -"City, county, or district name (e.g. 'Warszawa', 'Krotoszyn'). A city/county name aggregates every municipality in the county; a Warszawa district name (e.g. 'Mokotów') narrows to that gmina, another city's delegatura (e.g. 'Kraków-Podgórze') resolves to its parent county. Use this OR teryt."New value: +"City, county, gmina or district name (e.g. 'Warszawa', 'Krotoszyn'): city/county → every municipality in the county, gmina → that gmina alone, a Warszawa district ('Mokotów') → that gmina, another city's delegatura ('Kraków-Podgórze') → its parent county. Shared name → candidates; pass one as teryt. Use this OR teryt."
  2. Changed1 schema field changedv0.12.0
    • changedInput schema / properties / location / description
      Previous value: -"City or county name (e.g. 'Warszawa', 'Krotoszyn'). Aggregates every municipality in the county. Use this OR teryt."New value: +"City, county, or district name (e.g. 'Warszawa', 'Krotoszyn'). A city/county name aggregates every municipality in the county; a Warszawa district name (e.g. 'Mokotów') narrows to that gmina, another city's delegatura (e.g. 'Kraków-Podgórze') resolves to its parent county. Use this OR teryt."
  3. First observedv0.5.0

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already mark this as read-only and non-destructive, and the description adds substantial context beyond them: the below-EU-threshold coverage gap since 2021, tender attribution to the authority's seat rather than works location, counters vs notice-list divergence, and the explicit warning that absence of tenders is not evidence of non-investment. The 1-token cost disclosure is also useful operational context.

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?

The purpose is front-loaded in the first sentence, with addressing rules and caveats following in a logical order. The caveat block is dense but each clause prevents a specific misinterpretation, so it earns its space; the cost note is a small appendage rather than noise.

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

Completeness4/5

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

For a read-only tool with no output schema, the description covers sources, addressing, and major interpretive pitfalls well. It only lightly characterizes the return shape (counters and a notice list with a flag), which is sufficient given the absence of an output schema but not exhaustive.

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% and both parameters are fully documented in the schema, including the 4/6/7-digit semantics and location resolution rules. The description restates the teryt-wins precedence and the county-expansion behavior, adding little beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource — signals that a Polish municipality is about to build infrastructure — and enumerates the three data sources (procurement bulletin, agglomeration membership, planned capital expenditure). This is clearly distinct from siblings like get_permits_in_area or get_transaction_permits, which concern existing permits/transactions rather than forward-looking municipal investment signals.

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?

Explains the two addressing modes (location vs teryt) and states teryt wins when both are given, plus how location names resolve to municipalities. It gives clear context for invocation but does not explicitly route the agent away from related siblings such as get_permits_in_area or get_transaction_permits.

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