Zoning Signal
Server Details
US municipal zoning intelligence — corridor analysis, place dossiers, named-pattern detection.
- Status
- Healthy
- Uptime
- 100.0% over 37 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 18 tools
Most tools map cleanly to distinct artifact types (describe_* and list_* for places, corridors, entities, meetings, patterns, watches). The main ambiguity is between list_meetings and meeting_index, which both return meeting readings with overlapping filters—agents may struggle to pick the right one. semantic_search, trace_connection, get_track_record, and submit_agent_feedback are clearly separate.
The describe_* and list_* prefixes form a strong, consistent verb_noun pattern across six content types. Deviations exist: meeting_index is a noun rather than list_meetings, semantic_search is not verb-first, and get_track_record uses get_ instead of describe_/list_. But the overall system is readable and predictable.
At 18 tools, the set is slightly over the ideal 3-15 range, but each tool earns its place given the six content types, search, trace, track record, and feedback. The redundancy of list_meetings/meeting_index adds one unnecessary tool, but the count is not bloated.
Every content type has both a list and a describe tool, covering discovery and deep citation. Search, connection tracing, track record, and feedback round out the surface. Minor gaps: no tool to fetch raw meeting minutes or to access a corridor's constituent places directly, but the described surfaces handle most workflows.
Available Tools
18 toolsdescribe_corridorDescribe CorridorARead-onlyIdempotentInspect
Return the dossier projection for a corridor, in the requested cognitive lens. Same lens enum and default as describe_place. Corridor projections surface cross-municipal dialectics and shared-infrastructure dynamics that no single place dossier captures.
| Name | Required | Description | Default |
|---|---|---|---|
| lens | No | The cognitive position to project. Defaults to "synthesis". Canonical lenses: developer, investor, broker, attorney, business, resident, civic-leader. Aliases route to canonical: legal/lawyer/counsel/regulator → attorney; realtor/intermediary → broker; civic/government → civic-leader; homeowner → resident; operator/site-selector → business; builder → developer. | synthesis |
| slug | Yes | The corridor slug (e.g., "us-27-south-lake"). Use list_corridors to discover available slugs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| lens | Yes | |
| slug | Yes | |
| type | Yes | |
| title | No | |
| claims | Yes | |
| freshness | Yes | |
| projection | Yes | |
| frontmatter | No | |
| record_status | No | |
| available_lenses | No | |
| lens_was_requested | No | |
| fell_back_to_synthesis | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as readOnly, idempotent, and non-destructive. The description adds useful behavioral context about the nature of the output (a 'dossier projection' with a cognitive lens) and the kinds of insights it surfaces (cross-municipal dialectics, shared-infrastructure dynamics). No contradictions with 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?
Two sentences with no filler. The first sentence states the core function, the second clarifies the lens system and differentiates from describe_place. Perfectly front-loaded and appropriately sized.
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 lookup tool with an output schema, the description fully covers purpose, the cognitive lens concept, the unique value vs. alternatives, and references the right sibling for slug discovery (list_corridors in the schema). Nothing essential is missing given the tool's simplicity.
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?
The input schema provides 100% coverage: both slug and lens have detailed descriptions, including an enum list and alias routing. The tool description adds only a cross-reference to describe_place's lens enum, which is redundant given the schema already lists the exact enum values. With high schema coverage, the description doesn't need to compensate.
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's action and resource: 'Return the dossier projection for a corridor, in the requested cognitive lens.' It distinguishes itself from sibling describe_place by noting that corridors surface 'cross-municipal dialectics and shared-infrastructure dynamics that no single place dossier captures.' This makes the tool's unique scope immediately clear.
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 implies when to use this tool via the alternative reference 'Same lens enum and default as describe_place' and the contrast with single-place dossiers. It doesn't explicitly say 'use describe_place for single places' or list exclusions, but the context effectively guides the agent to choose this tool for corridor-level cross-municipal analysis.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_entityDescribe EntityARead-onlyIdempotentInspect
Return the full structured dossier for a named entity — the canonical citable artifact for any actor, organization, ordinance, or project the corpus references. Returns: voxel_lead (134-167 word voxel-disciplined identity prose), canonical_role, the class-specific cluster (person.voting_record for board members; organization.type + jurisdiction; legislation.legal_status + effective_date + sunset_date + citation; creative_work.work_type + status + case_number), the bidirectional graph references (appears_in_meetings, appears_in_briefs, appears_in_watches, exhibits_patterns, related_entities, related_places, related_corridors), the provenance_chain, and the canonical surfaces (dossier URL, schema_id, decoder_index_hub). Each schema_id (/entities/{slug}#{class.toLowerCase()}) is the stable cross-page Schema.org reference — Person / Organization / Legislation / CreativeWork — that AI agents resolve to when citing the entity. Use when grounding a citation, when reasoning about an entity's full role across the corpus, or when traversing the entity graph from a single name. This dossier answers what one node touches; trace_connection answers what joins two of them and how specific that join is.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The entity slug (e.g., "sb-180", "hanover-land-company", "anita-geraci-carver"). Use list_entities to discover available slugs. The Decoder Index hub at /entities lists every entity grouped by class. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| slug | Yes | |
| person | No | |
| named_at | No | |
| schema_id | Yes | |
| voxel_lead | No | |
| last_active | No | |
| legislation | No | |
| display_name | Yes | |
| entity_class | Yes | |
| organization | No | |
| creative_work | No | |
| canonical_role | No | |
| related_places | No | |
| provenance_chain | No | |
| related_entities | No | |
| appears_in_briefs | No | |
| exhibits_patterns | No | |
| appears_in_watches | No | |
| appears_in_meetings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive, and the description adds meaningful behavioral context: it returns the stable canonical schema_id reference for citation and clearly scopes its answer to one node. It also discloses that it is not the tool for pair-wise graph relationships, which is useful beyond the structured hints.
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 front-loaded with the core purpose and organized into return contents, use cases, and a distinction from trace_connection. Every sentence carries substantive information, though the dense list of return fields could have been slightly condensed.
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 a single documented parameter, rich annotations, and an output schema, the description is complete for an agent: it explains what the tool returns, why the dossier is canonical, when to use it, and how it differs from the related traversal tool. Nothing needed for correct invocation 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?
The input schema already has 100% coverage of the single slug parameter, including examples and discovery guidance via list_entities and the /entities hub. The main description does not add much semantic detail about the parameter itself, so the baseline of 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?
The description opens with a specific verb and resource: 'Return the full structured dossier for a named entity,' and immediately identifies it as the canonical citable artifact. It distinguishes itself from siblings by naming trace_connection as the tool for relationships between two entities rather than one.
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 explicitly states when to use this tool: 'when grounding a citation, when reasoning about an entity's full role across the corpus, or when traversing the entity graph from a single name.' It also names the alternative trace_connection and explains the boundary: 'This dossier answers what one node touches; trace_connection answers what joins two of them.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_meetingDescribe MeetingARead-onlyIdempotentInspect
Return the full dossier projection for a meeting reading, in the requested cognitive lens. Same lens enum and default as describe_place / describe_corridor — eight total projections (seven stakeholder lenses — developer, investor, broker, attorney, business, resident, civic-leader — plus synthesis as the default). Returns the lens-projected body, full frontmatter (jurisdiction, board, meeting_date, document_type, key_signals, vote tallies), citation-stable claims[] (per the Phase 11 Citable Contract; populates as meeting claim scopes graduate), four-clock freshness, and the structured record_status block (record_type / meeting_status / outcome_status / minutes_available / vote_final) — the last prevents agents from summarizing agenda intent as completed action. Use to ground citations in a specific meeting's reading; pair with list_meetings or meeting_index for discovery.
| Name | Required | Description | Default |
|---|---|---|---|
| lens | No | Optional cognitive lens. Default: synthesis (the whole-picture multi-projection view). Canonical lenses: developer, investor, broker, attorney, business, resident, civic-leader. Aliases route to canonical (legal/lawyer/counsel/regulator → attorney; realtor/intermediary → broker; civic/government → civic-leader; homeowner → resident; operator/site-selector → business; builder → developer). When the requested lens is not present in the dossier body, the response falls back to synthesis with fell_back_to_synthesis: true. | |
| slug | Yes | The meeting slug (e.g., "leesburg-pc-2026-01"). Use list_meetings or meeting_index to discover available slugs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| lens | Yes | |
| slug | Yes | |
| type | Yes | |
| title | No | |
| claims | Yes | |
| freshness | Yes | |
| projection | Yes | |
| frontmatter | No | |
| record_status | Yes | |
| available_lenses | No | |
| lens_was_requested | No | |
| fell_back_to_synthesis | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive. The description adds substantial behavioral context: returns citation-stable claims, four-clock freshness, and a structured record_status block that 'prevents agents from summarizing agenda intent as completed action.' This goes beyond annotation and provides meaningful operational nuance.
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 and information-rich, front-loaded with the main purpose and packed with specific return fields and caveats. Every sentence contributes value without fluff, making it appropriately sized for the tool's complexity.
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 tool's complexity and the presence of an output schema, the description still covers return structure, semantic safeguards, and usage context. It is complete enough for an agent to select and invoke the tool correctly, including the crucial caveat about record_status preventing premature summarization.
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 schema fully documents both parameters, including lens aliases and fallback behavior. The description adds marginal context (mentioning the lens enum similarity and pairing with list_meetings) but does not substantially enrich parameter understanding beyond 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?
The description clearly states the tool returns 'the full dossier projection for a meeting reading' in a requested cognitive lens, which is a specific verb+resource. It distinguishes itself from siblings like describe_place and describe_corridor by explicitly referencing the shared lens enum and the meeting-specific context.
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 a clear use case ('Use to ground citations in a specific meeting's reading') and pairs with discovery tools (list_meetings or meeting_index). It lacks an explicit 'when not to use' but implies meeting-specific usage, which is enough given sibling context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_patternDescribe PatternARead-onlyIdempotentInspect
Return the full dossier for a named pattern: voxel_lead, signal_status (horizon/confidence), scope (spatial/temporal/topical/corridors), full exhibits inventory with detection metadata, defensive responses, provenance chain, related briefs, related places, related corridors, audiences, and the canonical surfaces (dossier URL, DefinedTerm @id, DefinedTermSet @id, atlas list URL). Use when an agent needs the structured pattern data to cite or analyze. Each pattern is a citable entity in the corpus's entity graph; the DefinedTerm canonical home gives AI agents a stable reference.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The pattern slug (e.g., "self-storage-canary"). Use current_named_patterns to discover available slugs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| name | Yes | |
| slug | Yes | |
| scope | No | |
| claims | Yes | |
| exhibits | No | |
| named_at | No | |
| surfaces | No | |
| audiences | No | |
| freshness | Yes | |
| voxel_lead | No | |
| signal_status | No | |
| related_briefs | No | |
| related_places | No | |
| lifecycle_stage | No | |
| provenance_chain | No | |
| related_corridors | No | |
| defensive_response | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable context: the pattern is a citable entity in the corpus's entity graph, and the DefinedTerm canonical home provides a stable reference for AI agents. It also explains the output nature (full dossier with many fields). No contradictions with annotations. The description adds enough behavioral color beyond the structured hints.
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 paragraph that is informative but somewhat dense, listing many fields in a run-on manner. It is front-loaded with the core action ('Return the full dossier'), but the enumeration of fields makes it longer than necessary. Every sentence earns its place, but the structure could be more concise (e.g., bullet points or shorter sentences). Not excessive, but could be improved.
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 tool returns a complex 'full dossier' and an output schema exists (though not shown), the description adequately covers what the dossier includes (exhibits, provenance, related entities, canonical surfaces) and the significance of the entity (citable, stable reference). It does not need to detail return values because the output schema handles that. The description is complete enough for an agent to decide when to call this tool, but it could mention the output schema's availability.
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 single parameter 'slug' that already has a descriptive comment ('The pattern slug... Use current_named_patterns to discover available slugs'). The tool description does not add any additional meaning or formatting details about the slug parameter beyond what the schema provides. The description focuses on the overall purpose rather than parameter semantics. With full schema coverage, the baseline is 3, and the description does not significantly raise it.
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 starts with 'Return the full dossier for a named pattern' which is a specific verb+resource combination. It enumerates the exact fields included (voxel_lead, signal_status, etc.) and clearly distinguishes from sibling tools like describe_corridor or describe_entity by focusing on pattern-specific data. The purpose is unambiguous and actionable.
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 provides a clear usage context: 'Use when an agent needs the structured pattern data to cite or analyze.' It also references the prerequisite tool current_named_patterns for discovering available slugs. However, it does not explicitly state when NOT to use this tool (e.g., if only a summary is needed) or name specific alternatives among the sibling tools, such as list_patterns for a listing. The guidance is good but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_placeDescribe PlaceARead-onlyIdempotentInspect
Return the dossier projection for a city, in the requested cognitive lens. Defaults to the synthesis projection (the multidimensional view that holds all lenses in superposition and names the dialectics). Pass a single-lens value to get the focused cognitive position — useful when the agent is acting on behalf of a user with a specific stake (developer underwriting, investor thesis, broker client argument, attorney precedent search, resident orientation, civic-leader regional coordination).
| Name | Required | Description | Default |
|---|---|---|---|
| lens | No | The cognitive position to project. Defaults to "synthesis". Canonical lenses: developer, investor, broker, attorney, business, resident, civic-leader. Aliases route to canonical: legal/lawyer/counsel/land-use-counsel/regulator → attorney; realtor/intermediary/real-estate-broker → broker; civic/government/official/governance → civic-leader; homeowner/citizen → resident; operator/site-selector/occupier → business; builder/land-developer → developer. | synthesis |
| slug | Yes | The place slug (e.g., "clermont-florida"). Use list_places to discover available slugs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| lens | Yes | |
| slug | Yes | |
| type | Yes | |
| title | No | |
| claims | Yes | |
| freshness | Yes | |
| projection | Yes | |
| frontmatter | No | |
| record_status | No | |
| available_lenses | No | |
| lens_was_requested | No | |
| fell_back_to_synthesis | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds valuable behavioral context about the default synthesis projection ("multidimensional view that holds all lenses in superposition") and how passing a single-lens value changes the output. No contradictions with 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 three sentences, each earning its place: the first states the core action, the second explains the default behavior, and the third provides usage guidance. It is front-loaded and free of redundant content, appropriately sized for the tool's complexity.
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 comprehensive input schema, output schema, and annotations, the description covers the essential aspects: the purpose, the default vs. single-lens behavior, and the stakeholder contexts. It does not need to explain return values (output schema exists) or provide more detail on discovery (the schema already references list_places). This is a complete picture for actionable use.
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?
The schema provides thorough documentation for both slug and lens, including the enum, default, and alias routing (100% coverage). The description goes beyond the schema by explaining the functional impact of the lens parameter in terms of user stakes (e.g., developer, investor), which helps an agent understand when to choose a specific lens.
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 specific verb and resource: "Return the dossier projection for a city, in the requested cognitive lens." This clearly identifies the tool's function and differentiates it from sibling describe tools by focusing on cities and the lens concept.
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 provides clear context for when to use the default synthesis projection versus a single-lens request, stating it is "useful when the agent is acting on behalf of a user with a specific stake" and listing examples. However, it does not explicitly name alternatives or state when not to use this tool relative to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_watchDescribe WatchARead-onlyIdempotentInspect
Return the full dossier for a watch item — the observatory's forward-looking observation primitive. Returns title, subtitle, scope (place / corridor / pattern / brief / region), trigger (type / date / condition), significance (horizon / confidence / why_it_matters_voxel), full body prose, four-clock freshness, and citation-stable claims[]. For RESOLVED watches, also returns the outcome cluster (outcome_type, outcome_summary, prediction_assessment with directional/horizon/significance assessments, lesson, citations) — and the lesson surfaces as a stable claim_id (per the Phase 11 Citable Contract × Phase 8 Resolution Bridge compound). Use to ground citations in a specific watch's prediction or resolution; pair with list_watch_items for discovery.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The watch slug (e.g., "lake-bright-council-mar-23"). Use list_watch_items to discover available slugs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| body | No | |
| slug | Yes | |
| type | Yes | |
| scope | No | |
| title | No | |
| claims | Yes | |
| outcome | Yes | |
| trigger | No | |
| subtitle | No | |
| freshness | Yes | |
| significance | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the tool is safe and idempotent. The description adds value by detailing exact fields returned and behavior for RESOLVED watches, which is beyond annotation scope. No contradictions exist.
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 front-loaded with the primary purpose. It contains some technical terminology that could be streamlined (e.g., 'Phase 11 Citable Contract × Phase 8 Resolution Bridge'), but each sentence provides useful context, so it earns its length.
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 single required parameter, full schema coverage, clear annotations, and an output schema (not shown but exists), the description is complete. It explains exactly what is returned, including conditional behavior for resolved watches, without needing to repeat output schema details.
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 documents the 'slug' parameter well. The description adds meaning by explaining its purpose ('ground citations') and how to discover valid slugs via list_watch_items, which the schema does not provide.
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 verb 'describe' and the resource 'watch item', and explicitly distinguishes from siblings by naming 'list_watch_items' for discovery. It enumerates specific data returned, making the tool's purpose precise and unambiguous.
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 pairs use of this tool with 'list_watch_items' for discovery, and states when to use it: 'ground citations in a specific watch's prediction or resolution'. The sibling list confirms no other tool returns the full watch dossier, providing clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_zoning_signalDescribe Zoning SignalARead-onlyIdempotentInspect
Return the canonical product description for Zoning Signal — what the observatory is, the four artifact types it publishes, the regional scope of current coverage, and the methodology. Call once per session to ground subsequent tool calls in canonical context.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| built_by | No | |
| surfaces | Yes | |
| description | Yes | |
| methodology | Yes | |
| artifact_types | Yes | |
| regional_scope | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description is consistent with those. It adds value by specifying what the canonical description contains and by recommending session-level caching behavior ('once per session'), which is not in the 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?
Single sentence front-loads the verb and resource, then enumerates the covered content in a compact clause. No filler or repetition; every phrase 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?
With zero parameters, an output schema present, and annotations covering safety, the description fully explains the tool's role and session-level usage. It is complete for the tool's simplicity and context.
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?
Tool accepts zero parameters, so the schema needs no elaboration. Baseline for zero params is 4; the description adds no contradictory or redundant parameter info.
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?
Description opens with a specific action ('Return the canonical product description') and names the exact resource (Zoning Signal), then spells out the content domains (observatory, artifact types, regional scope, methodology). This distinguishes it from sibling describe_* tools, which target different entities.
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 states 'Call once per session to ground subsequent tool calls in canonical context,' providing clear when-to-use advice. It does not mention when not to use it or name alternatives, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_track_recordGet Track RecordARead-onlyIdempotentInspect
Return the observatory's public calibration scorecard — the aggregate accuracy of past watch-item directional reads, horizon calls, and significance assessments across resolved watches. Returns: total_resolved, directional accuracy (aligned + 0.5 × mixed), horizon accuracy (within / total), significance accuracy (confirmed / total), per-confidence-pip stratification, recent resolutions, and per-jurisdiction breakdown. Optionally scope to a single jurisdiction or corridor's constituent set. Use when an agent or user wants to assess Zoning Signal's historical forecasting accuracy before citing a current prediction. Misreads are reported.
| Name | Required | Description | Default |
|---|---|---|---|
| brief | No | Optional: scope to a brief slug (e.g., "six-month-board-flip"). Returns the track record for watches linked to a specific named-pattern brief. | |
| corridor | No | Optional: scope to a corridor slug (e.g., "us-27-south-lake"). Returns the aggregate track record across the corridor's constituent places. | |
| jurisdiction | No | Optional: scope to a single place slug (e.g., "leesburg-florida") for that city's track record only. Use list_cities to discover available slugs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| scope | No | |
| recent | No | |
| horizon | No | |
| pending | No | |
| obsolete | No | |
| surfaces | No | |
| directional | No | |
| significance | No | |
| by_confidence | No | |
| total_resolved | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and destructiveHint as safe. The description adds substantial value beyond this by listing in detail what metrics are returned (directional accuracy, horizon accuracy, etc.) and importantly discloses that 'Misreads are reported,' setting expectations that the data includes errors. This is rich behavioral context.
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 front-loaded with the core purpose, then enumerates return fields, then gives usage guidance, and ends with a caveat. Every sentence adds value, and it is appropriately sized for the tool's complexity—informative without being verbose.
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 and 100% schema parameter coverage, yet the description still enriches the context by explaining the return structure and strategic usage. It fully covers the 'what', 'when', and 'what to expect' aspects for an agent, making it self-contained.
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%, with each parameter (brief, corridor, jurisdiction) already described with examples. The description adds minimal extra semantic meaning beyond restating that scoping is optional. The baseline of 3 applies because the schema carries the heavy lifting for parameter explanation.
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's function: 'Return the observatory's public calibration scorecard' with specific aggregate accuracy metrics. It distinguishes itself from sibling tools like describe_watch or list_watch_items by focusing on historical forecasting performance rather than individual entities or simple listings.
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 provides a clear usage context: 'Use when an agent or user wants to assess Zoning Signal's historical forecasting accuracy before citing a current prediction.' It does not explicitly name alternatives or exclusion scenarios, but the context is strong and implies when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_corridorsList CorridorsARead-onlyIdempotentInspect
List every published corridor page. A corridor is the cross-municipal economic-topology view — the cross-jurisdiction read on a shared infrastructure spine, aquifer, or commercial gravity field. Returns name, slug, constituent cities, primary axis, and URL.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| corridors | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safe read-only, idempotent, non-destructive profile. The description adds behavioral context by specifying 'every published' (excluding drafts) and listing the exact fields returned, which goes beyond the annotations. It doesn't discuss pagination or size, but that's less critical given the zero-parameter nature.
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 two sentences: the first front-loads the action, the second defines the domain concept and lists return fields. Every sentence earns its place with no redundancy or wasted words.
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 parameterless list tool with an output schema, the description is complete: it gives purpose, scope, domain definition, and return fields. The agent can confidently invoke this tool without additional context. The only minor gap is lack of explicit alternative references, but that's not necessary for completeness given the simplicity.
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?
The tool has zero parameters, so the schema fully covers parameter semantics (vacuously). The description doesn't need to explain parameters, and the baseline for 0-param tools is 4. It adds no parameter-specific info, but none is needed.
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 action ('List every published corridor page'), specifies the resource (corridor pages), and distinguishes itself from sibling tools by defining corridor as a cross-municipal economic-topology view. It also lists return fields, making the purpose unambiguous.
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 provides clear context: use this tool to get all published corridor pages. It doesn't explicitly mention when not to use it or name alternatives like describe_corridor, but the definition and list of return fields imply the appropriate use case. No exclusions are stated, so this isn't quite a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_entitiesList EntitiesARead-onlyIdempotentInspect
List every named entity in the Decoder Index — the smallest citable unit of authority in the corpus. Returns the four-class taxonomy (Person / Organization / Legislation / CreativeWork) with class-specific summary fields (jobTitle for Person; jurisdiction for Organization / Legislation / Project; legal_status for Legislation; case_number + work_status for Project) plus cross-reference counts (meetings_count, briefs_count, watches_count, patterns_count) for each entity. Filter by entity_class, place (jurisdiction), or search substring. Use as the discovery surface for the entity graph; pair with describe_entity for full structured detail. Each entity's schema_id is a stable cross-page reference (/entities/{slug}#{class.toLowerCase()}) that resolves to the canonical Schema.org node — Person / Organization / Legislation / CreativeWork — for AI-citation grounding.
| Name | Required | Description | Default |
|---|---|---|---|
| place | No | Optional: filter to entities scoped to a specific place (e.g., "leesburg-florida"). Matches entities whose related_places, organization.jurisdiction, legislation.jurisdiction, or creative_work.jurisdiction includes the place slug. | |
| search | No | Optional case-insensitive substring search across display_name, canonical_role, voxel_lead, and slug. Use for natural-language entity discovery (e.g., "denial bloc", "intersection mitigation", "form-based code"). | |
| entity_class | No | Filter by entity class. "Person" = board members, attorneys, applicants (individuals), elected officials. "Organization" = developer firms, law firms, agencies, HOAs, planning consultancies. "Legislation" = state statutes, city ordinances, code sections, design standards. "CreativeWork" = specific projects, case numbers, master plans, infrastructure programs. Omit to return all classes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| filters | No | |
| by_class | No | |
| entities | No | |
| surfaces | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring readOnly/idempotent, the description adds rich behavioral context: it specifies the four-class taxonomy, class-specific summary fields, cross-reference counts, and the stable schema_id format for citation. This goes far beyond what the annotations provide and gives the agent a precise mental model of the output.
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 organized into five purposeful sentences, each serving a distinct function: purpose, return taxonomy, filters, usage clue, and schema_id semantics. It front-loads the most decision-relevant information and every sentence 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?
Given the output schema and complete parameter schemas, the description fully covers the remaining contextual gaps: the domain concept, cross-reference counts, and the schema_id grounding. It also addresses sibling differentiation by explicitly directing users to describe_entity for full detail, making it complete for selection and invocation.
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?
The input schema already provides 100% coverage with detailed descriptions and examples for all three parameters. The description's mention of filters is a restatement of the schema without introducing new meaning, so 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 lists every named entity in the Decoder Index, defining the resource precisely. It distinguishes itself from siblings by describing it as the 'discovery surface' for the entity graph and contrasting with describe_entity.
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 instructs 'Use as the discovery surface for the entity graph; pair with describe_entity for full structured detail,' giving a direct when-to-use directive and naming the alternative. It also enumerates the filter options, making the intents clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_meetingsList MeetingsARead-onlyIdempotentInspect
Return meeting readings across all cities, optionally filtered by date range or jurisdiction substring. Same response shape as meeting_index but with no required parameters — call with no args to get the full corpus, or pass a jurisdiction substring (e.g., "minneola") to filter by city without requiring an exact match. Use when you need to enumerate the full meeting record or scan across cities by date range.
| Name | Required | Description | Default |
|---|---|---|---|
| to_date | No | Inclusive upper bound (ISO 8601 date). Omit for the latest reading. | |
| from_date | No | Inclusive lower bound (ISO 8601 date). Omit to span back to the earliest reading. | |
| jurisdiction | No | Optional case-insensitive substring to filter by city (e.g., "minneola"). Omit for all cities. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| filters | No | |
| meetings | No |
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 behavioral context by explaining that calling with no args returns the full corpus, jurisdiction filtering uses substring matching, and the response shape matches meeting_index. This goes beyond the annotations but doesn't describe pagination or output details, which are covered by the output schema.
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 two sentences, front-loaded with the core action, and every phrase adds value (purpose, alternatives, usage scenarios). No redundancy or fluff.
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 list tool with 3 optional params, an output schema, and strong annotations, the description covers the essential behavioral aspects, usage guidance, and relationship to siblings. It doesn't need to explain return values given the output schema, and the usage context is fully addressed.
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?
All three parameters have thorough descriptions in the schema (100% coverage), including examples and inclusive date semantics. The description primarily restates this information ('optionally filtered by date range or jurisdiction substring') and adds the usage pattern of no-args invocation. Since the schema does the heavy lifting, the description adds minimal new param meaning, so 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 clearly states the tool's purpose: 'Return meeting readings across all cities' and explicitly differentiates from sibling tool meeting_index by noting it has the same response shape but no required parameters. It also specifies its filtering capabilities (date range, jurisdiction substring), making it distinct from other list tools.
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 provides explicit when-to-use guidance: 'Use when you need to enumerate the full meeting record or scan across cities by date range.' It also contrasts with meeting_index, implying when this tool is preferable (when no required parameters are needed). This meets the criterion of explicit usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_patternsList PatternsARead-onlyIdempotentInspect
List every named pattern in the Pattern Atlas. A named pattern is a coined recurring structure observed across multiple jurisdictions or multiple meetings (e.g., "The Quiet Revolution"). Returns slug, display name, canonical pattern URL (/patterns/{slug}, the DefinedTerm canonical home as of Phase 9), lifecycle stage, horizon, confidence, exhibits count, spatial scope, related briefs, and the voxel_lead. Use as the discovery surface for the Pattern Atlas; pair with describe_pattern for full dossier detail. Phase 12 — renamed from current_named_patterns to align with the canonical content-type vocabulary (loader: getAllContent("pattern"); URLs: /patterns/{slug}; describe tool: describe_pattern).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| patterns | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint, idempotentHint, destructiveHint, so the main behavioral expectation is that this is a safe, read-only operation. The description adds helpful context about the return fields and version tracking (Phase 12), though it doesn't detail any empty-state behavior or rate-limiting implications.
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 detailed yet efficient, with front-loaded purpose and usage context. It could trim the explicit version note and schema loader comment, but overall each sentence adds value and no word is wasted.
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 zero parameters, a complete output schema, and comprehensive annotations, the description covers all needed aspects: purpose, usage context, return fields, and pairing advice. It leaves no gaps for an agent to guess.
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?
The input schema has no parameters and schema description coverage is 100%, so there is nothing left to clarify. The description adds no parameter information because none exist. 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 it lists all named patterns in the Pattern Atlas, distinguishing it from sibling tools like describe_pattern (which provides details on a single pattern) and list_* siblings. It specifies the tool returns a defined set of fields, making the resource and action unambiguous.
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 calls this the 'discovery surface' for the Pattern Atlas and suggests pairing with describe_pattern for full details, giving agents a clear when-to-use guide. It also notes it was renamed from current_named_patterns, which helps avoid confusion with legacy terminology.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_placesList PlacesARead-onlyIdempotentInspect
List every place dossier (per-jurisdiction reading) the observatory publishes. Optionally filter by state. Returns city, state, slug, signal strength, signal direction, and the dossier URL. Use to discover the available place-level coverage before calling describe_place. Phase 12 — renamed from list_cities to align with the canonical content-type vocabulary (the loader function is getAllContent("place"); URLs are /places/{slug}; the describe tool is describe_place).
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | Optional US state name (e.g., "Florida") to filter the result set. Omit for all places across all states. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| cities | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is clear. The description adds transparency about what the tool returns (specific fields, URL) and the option to filter by state, going beyond the annotations to disclose behavioral details such as the absence of user/workspace filtering. No contradictions exist.
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 concise at four sentences, each serving a distinct purpose: main function, optional filter, field listing, and usage guidance. The front-loaded first sentence immediately states the core action and scope, making it efficient for an agent to parse.
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 tool's simplicity (0 required params, output schema present) and rich annotations, the description is largely complete. It covers purpose, filter, output fields, and usage context. The only minor gap is that it doesn't mention pagination or rate limits, but for a straightforward list tool with one parameter, this is adequate.
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 schema already fully documents the single parameter (state) with a clear description. The description reinforces this by mentioning the optional state filter, adding context about its purpose (discovering coverage) but not adding new syntax or format details beyond the schema. Given maximum schema coverage, a score of 4 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 lists every place dossier the observatory publishes, differentiating it from siblings like describe_place which drills into a specific place. It specifies the exact fields returned (city, state, slug, etc.) and mentions the optional filter by state, leaving no ambiguity about what the tool does.
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 advises using this tool before calling describe_place to discover available place-level coverage, providing a clear usage sequence. It also includes a history note (renamed from list_cities) that helps an agent understand consistency with the content-type vocabulary, though it doesn't explicitly state when not to use it or list alternatives with exclusions—the purpose is sufficiently narrow that no further guidance is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_watch_itemsList Watch ItemsARead-onlyIdempotentInspect
Return The Watch — the field's forward calendar of pending events, scheduled hearings, regulatory sunsets, and condition-triggered milestones the observatory is tracking. Filter by status (pending / resolved / obsolete), horizon (imminent / near-term / structural), or scope (place / corridor / brief). Use to surface what the field is watching from any cognitive position.
| Name | Required | Description | Default |
|---|---|---|---|
| brief | No | Optional: filter to items linked to a specific named-pattern brief. | |
| place | No | Optional: filter to items scoped to a specific place dossier (e.g., "leesburg-florida"). | |
| status | No | Filter by lifecycle status. Defaults to 'pending' (active watch items only); pass 'all' for the full corpus including resolved + obsolete entries. | |
| horizon | No | Optional: filter to items in the named horizon band. Imminent = ≤14 days; near-term = ≤90 days; structural = >90 days or condition-triggered. | |
| corridor | No | Optional: filter to items scoped to a specific corridor (e.g., "us-27-south-lake"). |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| status | No | |
| watch_items | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is explicit. The description adds context about the nature of items (forward calendar, condition-triggered milestones) but does not disclose additional behavioral traits like defaults, pagination, or response format. 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 two sentences and front-loads the core purpose. It is concise, but the phrase 'from any cognitive position' is abstract and adds little practical value. Overall, it is efficient and easy to scan.
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 five optional parameters, an output schema, and strong annotations (read-only, idempotent), the description covers the essential aspects: what is returned, what filters are available, and the intended use. It does not need to explain return structure (output schema exists) or safety (annotations cover it). A little more detail about default status behavior would make it fully complete, but for a list tool this is sufficient.
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?
The input schema has 100% coverage, with descriptions for every parameter (status, horizon, place, corridor, brief). The description repeats the filter categories at a high level ('status (pending / resolved / obsolete), horizon (imminent / near-term / structural), or scope (place / corridor / brief)') but adds no new syntax or format details beyond the schema. 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 states a specific verb and resource: 'Return The Watch — the field's forward calendar of pending events, scheduled hearings, regulatory sunsets, and condition-triggered milestones.' This makes clear what the tool does and distinguishes it from sibling describe_* and list_* tools by focusing on tracking items rather than describing a place or entity.
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 says 'Use to surface what the field is watching from any cognitive position,' providing clear context for when to invoke the tool. It does not explicitly name alternatives or exclusions, but the use case is evident. A named alternative or exclusion would strengthen it, but the guidance is sufficient for an agent to choose this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meeting_indexMeeting IndexARead-onlyIdempotentInspect
Return meeting readings for a specific city across an optional date range. A meeting reading is a plain-English read of one harvested planning-board, council, or commission meeting, with signal extraction and entity mapping. Use to drill from a city or corridor into the temporal record.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | City name (e.g., "Clermont"). Case-insensitive. | |
| to_date | No | Inclusive upper bound (ISO 8601 date). Omit for the latest reading. | |
| from_date | No | Inclusive lower bound (ISO 8601 date). Omit to span back to the earliest reading. |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | No | |
| count | No | |
| to_date | No | |
| meetings | No | |
| from_date | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description enhances this by explaining the output's nature (plain-English, signal extraction, entity mapping) and the temporal scoping, adding context beyond structured 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?
Three sentences, each earns its place: function, definition of key term, and usage context. Front-loaded and free of redundant wording.
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 filtered tool with full schema and output schema, the description is complete. It covers purpose, semantic meaning, temporal scope, and usage, with annotations covering safety and idempotency.
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 city, to_date, and from_date fully documented. The description adds no new parameter-level detail beyond restating the optional date range, providing only marginal added value over 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?
The description clearly states the tool returns meeting readings for a specific city with an optional date range, and defines 'meeting reading' as a plain-English read with signal extraction and entity mapping. This distinguishes it from siblings like list_meetings or describe_meeting by scope and depth.
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 final sentence provides an explicit use case: 'Use to drill from a city or corridor into the temporal record.' While it lacks explicit exclusions or named alternatives, the context is clear enough to guide selection among sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_searchSemantic SearchARead-onlyIdempotentInspect
Semantic search across the full corpus — every place dossier, corridor signal, meeting reading, and named-pattern brief. Returns results ranked by cosine similarity in a 1024-dimensional embedding space (Voyage AI 4 + Supabase pgvector). Use when the agent does not know the canonical entity slug or named-pattern title in advance — the search returns the readings whose semantic structure best matches the natural-language query, with type, title, similarity, and resolved URL per hit. Threshold 0.55, top 12.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | The natural-language query. A phrase, an entity name, or a thematic concept all work. Asymmetric query-time embedding handles short queries cleanly. Maximum 500 characters. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hits | No | |
| count | No | |
| query | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive. The description adds substantive behavioral context: cosine similarity ranking, the 1024-dimensional embedding space (Voyage AI 4 + pgvector), result count limit (top 12), similarity threshold (0.55), and resolved URL per hit. This goes well beyond the annotations and sets clear expectations for the agent.
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 and every sentence delivers distinct value: corpus scope, embedding/ranking details, usage guidance, and output shape. It is slightly long but not wasteful; the density is appropriate for a complex semantic search tool.
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, the description still covers return fields (type, title, similarity, resolved URL), result limit, threshold, and coverage. Given a single-parameter tool with rich annotations and an output schema, the description is fully complete for an agent to invoke and interpret results 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?
Although schema coverage is 100%, the description adds practical meaning to the 'q' param: it accepts a phrase, entity name, or thematic concept, and explains that asymmetric query-time embedding handles short queries cleanly. This enriches the schema's description and gives the agent actionable guidance on crafting queries.
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 'Semantic search across the full corpus' and enumerates the exact sources (place dossiers, corridor signals, meeting readings, named-pattern briefs). It distinguishes itself from sibling describe/list tools by explicitly stating it is for when the agent does not know the canonical slug or title in advance. This is a specific verb+resource+scope with clear differentiation.
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 states when to use: 'Use when the agent does not know the canonical entity slug or named-pattern title in advance.' This also implies when not to use (when you do know, use describe/list tools). It further clarifies what the tool returns (type, title, similarity, URL) and the technical constraints (threshold 0.55, top 12), giving the agent sufficient context to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_agent_feedbackSubmit Agent FeedbackAInspect
Submit feedback to the observatory's operators about the MCP tool surface. The active counterpart to the passive invocation log. Categories: 'gap' (a capability you expected and didn't find), 'error' (an unexpected failure or wrong result), 'praise' (a tool or surface that did exactly what you needed), 'suggestion' (a refinement you'd recommend), 'citation_request' (a claim or fact you want surfaced with a stable @id you can cite). The submission auto-attaches the prior 10 invocations from your MCP-Session-Id, so operators read your feedback annotated with the call sequence that produced it — no need to repeat what you tried. Operators triage every submission and surface notable feedback at /agent-observatory. This is how the observatory evolves toward what agents actually need.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | The feedback prose itself. Be specific. What were you trying to accomplish? What was missing or wrong? Voice that survives compression. Operators read every submission. | |
| category | Yes | Bounded categorization. 'gap' = expected capability is missing. 'error' = tool returned wrong/unexpected/malformed result. 'praise' = a surface or tool that worked exceptionally well. 'suggestion' = a refinement (better tool description, additional argument, alternative output shape). 'citation_request' = a claim or fact you want surfaced with a stable citation @id. | |
| about_url | No | Optional: a URL on the observatory this feedback references (e.g., "https://zoningsignal.com/corridors/us-27-south-lake"). | |
| about_tool | No | Optional: the tool name this feedback is about (e.g., "describe_corridor"). Lets operators rollup feedback per tool. | |
| agent_context | No | Optional: brief description of what the agent was trying to do — the user task that led to this surface. Helps operators understand intent without seeing only the failure point. | |
| suggested_resolution | No | Optional: if you have a concrete proposal — a new tool, a renamed parameter, a missing field on a response — name it here. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | True when the feedback was accepted and stored. |
| message | No | Human-readable acknowledgement. |
| category | No | The category the feedback was filed under. |
| feedback_id | Yes | Stable id for the stored feedback record. |
| received_at | No | ISO-8601 timestamp the feedback was recorded. |
| attached_invocation_count | No | How many prior invocations (from your MCP-Session-Id) were auto-attached for operator context. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide no safety hints (all false), so the description carries the burden of disclosing behavior. It does so richly: submissions auto-attach the prior 10 invocations, operators triage and surface notable feedback at /agent-observatory, and categories are explained. This goes beyond the binary annotation flags and gives the agent a clear model of side effects.
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 front-loaded with the core action, then lists categories, auto-attachment behavior, triage process, and rationale. It is slightly longer than necessary (repeating category definitions from the schema) but every sentence adds context about process or intent, making it efficient and well-structured.
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 complexity of a feedback tool with six parameters and an output schema, the description covers the essential context: what feedback is for, what categories exist, how the submission is augmented (auto-attach), and what happens afterward. The output schema handles return-value documentation, so no gap exists.
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 itself already explains each parameter thoroughly. The description adds the context that 'no need to repeat what you tried' due to auto-attached invocations, and it elaborates category meanings, but these are largely redundant with the schema. 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 opens with a specific verb+resource pair: 'Submit feedback to the observatory's operators about the MCP tool surface.' It clearly distinguishes from sibling tools (which are all describe/list/search operations) by being the only submission tool. The 'active counterpart to the passive invocation log' further differentiates its purpose.
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 provides clear context for when to use this tool ('when you encounter a gap, error, praise, suggestion, or citation request') and contrasts it with the passive log ('no need to repeat what you tried'). It lacks an explicit alternative not-to-use statement, but the sibling tool set contains no other feedback pathway, so this is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trace_connectionTrace ConnectionARead-onlyIdempotentInspect
Trace how two named things in the planning record connect, and report how specific that connection is. Give from and to for the shortest route between them; give from alone to rank what one actor connects to; give neither to rank the corpus's most specific connections. Endpoints are entity, meeting, or named-pattern slugs — list_entities, list_meetings and list_patterns discover them.
Routes run over the three layers where a shared node is a specific claim: meeting attendance transcribed from agendas and minutes (250 references across 78 meeting records; a meeting record holds a median of 3 entities and at most 12), peer claims authored on an entity dossier (169 links, 47 of them stated on both dossiers), and shared named patterns (60 references across 15 patterns; a pattern holds a median of 2 entities and at most 10). That substrate is 162 nodes and 479 links over 69 entities, in one connected component. Place, corridor, brief and watch links serve here as filters and citations rather than as routes: the us-27-south-lake node alone carries 118 links, so a route through it would hold for nearly every pair in the corpus.
Hop count is a result here rather than an input. Across the full frontmatter graph, 94.5% of entity pairs already sit within two steps and a three-step expansion reaches a median of 235 of 243 nodes, so depth returns the corpus rather than an answer. What discriminates is the degree of the WIDEST node a route passes through, and the ranking leads on it: a route is only as specific as its least specific waypoint. Two more measured properties travel with every row — how many equally-short routes exist (uniqueness runs 64% at two hops, 41% at three, 16% at four), and whether the two endpoints are minuted in disjoint jurisdictions, which 15 of 69 entities are positioned to be. interior_degrees carries every degree on the chain so you can re-rank on any of them, and provenance says whether the whole join rests on the meeting record, on a curator’s hand, or on both.
Filter with evidence to choose which layers may carry a hop, crossing to keep only pairs minuted in different jurisdictions, and exclude_published to keep only pairs the observatory’s own briefs have not already put together. Every response reports how many of the 2,346 possible entity pairs the filters matched, splits them by provenance, and accounts for the rest — so a query that discriminated nothing says so in its own output. Note one interaction the response also states: two entities minuted in one room share that room’s jurisdiction, so crossing: "jurisdiction" holds no two-hop minuted route, and the minuted routes that satisfy it run three hops or more.
What it leaves undetermined, stated on every call: vote outcomes and dispositions, which live in meeting prose and item tables; direction and sequence, since a route is co-occurrence in a record; and the 298 of 376 meeting records not yet linked to an entity, where what the tool covers is what has been curated. In from and sweep modes, rows that share a chain of intermediaries collapse to one finding, which names the rest of its roster in route_also_joins. Pair with describe_entity for a node’s full dossier, describe_meeting for the room itself, and semantic_search for prose.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | The other endpoint, drawn from the same three vocabularies as `from`. Supplying `to` without `from` is accepted and read as `from`, because the graph is undirected; the response echoes that as query.normalized_as. | |
| from | No | One endpoint slug, resolved in order against entities, meetings, then named patterns — the three vocabularies in which a shared node is a specific claim. No slug is shared between them on the deployed corpus, so a bare slug resolves unambiguously and needs no type prefix (e.g., "tara-tedrow", "minneola-pz-2025-01", "self-storage-canary"). Omit both endpoints to rank the whole corpus. | |
| limit | No | How many connections to return. It caps connections; routes within one connection are shown five at a time in pair mode and one at a time in from and sweep modes, and `routes_shown` beside the exact `shortest_path_count` names how many. A value outside 1–25 is refused rather than clamped, so selectivity.returned always agrees with what you asked for. | |
| crossing | No | "any" ranks every matching pair. "jurisdiction" keeps only pairs whose record-backed jurisdiction footprints are disjoint and both present — computed from the jurisdiction on each minuted meeting rather than from an authored place list. | any |
| evidence | No | Which layers may carry a hop. "minuted" = attendance transcribed from an agenda or minutes; "authored" = a peer claim stated on an entity dossier; "named_pattern" = two entities listed as exhibits of one named pattern. This is the substrate choice and the largest single lever on the answer: a restricted set fragments the graph (minuted alone is 6 components), and the response reports substrate.components and a fragmentation note rather than returning a bare no_path. | |
| exclude_published | No | true keeps only the pairs the observatory's own briefs have yet to put together — tested against the union of an entity's appears_in_briefs and the briefs that name it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| limits | Yes | Assembled per call. The coverage line is always first: absence in this tool is absence of curation. |
| no_path | No | Pair mode only, when the endpoints are unreachable on the chosen layers. Null everywhere else, including in pair mode when a route exists. |
| ranking | Yes | The sort rule, verbatim, labelled a judgement call. Every integer behind it is in each row. |
| coverage | Yes | What the corpus covers, plus what the graph covers: meetings linked to entities against meetings in corpus, jurisdictions linked against jurisdictions in corpus, and the per-jurisdiction breakdown. |
| tie_note | No | A sentence, present when the cut at `limit` lands inside a band of connections that tie on widest-node degree, hop count and path count — naming the band, its size, and that order within it falls back to slug. |
| substrate | Yes | The graph the routes ran over, for the evidence layers this call selected. |
| calibration | Yes | Measured background rates for the chosen evidence layers — what to read a row against. |
| connections | Yes | |
| selectivity | Yes | How much of the population the filters kept — the tool grading its own discrimination. |
| declared_direct | No | From and sweep modes: one-hop authored pairs, unscored, as slug pairs — describe_entity already returns each one in its dossier context. |
| declared_direct_note | No | Present whenever declared_direct carries a row: the call that reads any of them in full. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds substantial behavioral context beyond annotations: hop count is a result not an input, ranking leads on the widest node's degree, uniqueness rates at different hop counts, the crossing:jurisdiction interaction (two entities minuted in one room share jurisdiction, so no two-hop minuted route), and the collapse of shared-intermediary rows in from/sweep modes. It also discloses what the tool leaves undetermined on every call. This is rich, non-redundant behavioral disclosure.
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 sentence earns its place: it packs mode semantics, substrate statistics, ranking logic, filter interactions, and limitations into a dense but organized structure. It is front-loaded with the core purpose and modes, then layers in substrate details, ranking rationale, filters, and caveats. It is not concise in word count, but it is information-dense and structured; the length is justified by the tool's complexity. A 4 rather than 5 because the density is high enough that an agent must parse carefully, and some statistics (e.g., 94.5% of entity pairs within two steps) could be trimmed without losing essential guidance.
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 6 parameters, 0 required, 100% schema coverage, an output schema, and rich annotations. The description covers invocation modes, endpoint vocabularies, filter semantics, ranking behavior, output properties (interior_degrees, provenance, route_also_joins, routes_shown, shortest_path_count), and known limitations. It even explains how the response reports matched-pair counts and accounts for non-matching pairs. For a tool this complex, the description is complete enough for an agent to select and invoke it correctly without opening the output schema.
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 baseline is 3. The description adds meaning beyond the schema: it explains the resolution order for slugs (entities, meetings, then named patterns), clarifies that supplying `to` without `from` is accepted and normalized, explains that `limit` caps connections but routes within a connection are shown five at a time in pair mode and one at a time in from/sweep modes, and describes the fragmentation effect of restricting `evidence` (minuted alone is 6 components). It does not add much for `crossing` or `exclude_published` beyond the schema, but the added context for the trickier parameters justifies a 4.
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 specific verb ('Trace'), a clear resource ('how two named things in the planning record connect'), and an explicit statement of what the tool reports ('how specific that connection is'). It distinguishes three modes (from+to, from alone, neither) and names sibling tools (list_entities, list_meetings, list_patterns) for discovering endpoints, so an agent can tell it apart from describe_* and semantic_search tools.
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 when-to-use guidance: it names the endpoint discovery siblings, explains the three invocation modes, and closes with 'Pair with describe_entity for a node's full dossier, describe_meeting for the room itself, and semantic_search for prose.' It also states what the tool does NOT determine (vote outcomes, direction/sequence, uncurated meetings), which is exclusionary guidance that prevents misuse.
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
- Added
trace_connection
4 tool updates
- Changed
describe_pattern3 fields changed- removed
Output schema / properties / signal_status / properties / confidence_pipsRemoved value: -{ - "maximum": 5, - "minimum": 0, - "type": "number" -} - removed
Output schema / properties / signal_status / properties / directionRemoved value: -{ - "enum": [ - "rising", - "stable", - "cooling" - ], - "type": "string" -} - removed
Output schema / properties / signal_status / properties / scoreRemoved value: -{ - "maximum": 100, - "minimum": 0, - "type": "number" -}
- Changed
describe_watch1 field changed- removed
Output schema / properties / significance / properties / confidence_pipsRemoved value: -{ - "type": "number" -}
- Changed
list_patterns4 fields changed- added
Output schema / properties / patterns / items / properties / confidenceAdded value: +{ + "type": "string" +} - removed
Output schema / properties / patterns / items / properties / directionRemoved value: -{ - "type": "string" -} - added
Output schema / properties / patterns / items / properties / horizonAdded value: +{ + "type": "string" +} - removed
Output schema / properties / patterns / items / properties / signal_scoreRemoved value: -{ - "type": "number" -}
- Changed
list_places2 fields changed- removed
Output schema / properties / cities / items / properties / signal_directionRemoved value: -{ - "type": [ - "string", - "null" - ] -} - removed
Output schema / properties / cities / items / properties / signal_strengthRemoved value: -{ - "type": [ - "string", - "null" - ] -}
3 tool updates
- Removed
current_named_patterns - Removed
list_cities - Changed
submit_agent_feedback1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "attached_invocation_count": { + "description": "How many prior invocations (from your MCP-Session-Id) were auto-attached for operator context.", + "type": "number" + }, + "category": { + "description": "The category the feedback was filed under.", + "type": "string" + }, + "feedback_id": { + "description": "Stable id for the stored feedback record.", + "type": "string" + }, + "message": { + "description": "Human-readable acknowledgement.", + "type": "string" + }, + "ok": { + "description": "True when the feedback was accepted and stored.", + "type": "boolean" + }, + "received_at": { + "description": "ISO-8601 timestamp the feedback was recorded.", + "type": "string" + } + }, + "required": [ + "ok", + "feedback_id" + ], + "type": "object" +}
1 tool update
- Added
submit_agent_feedback
3 tool updates
- Changed
describe_corridor2 fields changed- changed
Input schema / properties / lens / descriptionPrevious value: -"The cognitive position to project. Defaults to \"synthesis\". Single-lens values surface a focused projection."New value: +"The cognitive position to project. Defaults to \"synthesis\". Canonical lenses: developer, investor, broker, attorney, business, resident, civic-leader. Aliases route to canonical: legal/lawyer/counsel/regulator → attorney; realtor/intermediary → broker; civic/government → civic-leader; homeowner → resident; operator/site-selector → business; builder → developer." - changed
Input schema / properties / lens / enumPrevious value: -[ - "synthesis", - "developer", - "investor", - "resident", - "business", - "civic", - "infrastructure", - "policy" -]New value: +[ + "synthesis", + "developer", + "investor", + "broker", + "attorney", + "business", + "resident", + "civic-leader" +]
- Changed
describe_meeting2 fields changed- changed
Input schema / properties / lens / descriptionPrevious value: -"Optional cognitive lens. Default: synthesis (the whole-picture multi-projection view). Seven stakeholder lenses available: developer, investor, resident, business, civic, infrastructure, policy. When the requested lens is not present in the dossier body, the response falls back to synthesis with fell_back_to_synthesis: true."New value: +"Optional cognitive lens. Default: synthesis (the whole-picture multi-projection view). Canonical lenses: developer, investor, broker, attorney, business, resident, civic-leader. Aliases route to canonical (legal/lawyer/counsel/regulator → attorney; realtor/intermediary → broker; civic/government → civic-leader; homeowner → resident; operator/site-selector → business; builder → developer). When the requested lens is not present in the dossier body, the response falls back to synthesis with fell_back_to_synthesis: true." - changed
Input schema / properties / lens / enumPrevious value: -[ - "synthesis", - "developer", - "investor", - "resident", - "business", - "civic", - "infrastructure", - "policy" -]New value: +[ + "synthesis", + "developer", + "investor", + "broker", + "attorney", + "business", + "resident", + "civic-leader" +]
- Changed
describe_place3 fields changed- changed
Input schema / properties / lens / descriptionPrevious value: -"The cognitive position to project. Defaults to \"synthesis\". Single-lens values surface a focused projection from a specific stakeholder position."New value: +"The cognitive position to project. Defaults to \"synthesis\". Canonical lenses: developer, investor, broker, attorney, business, resident, civic-leader. Aliases route to canonical: legal/lawyer/counsel/land-use-counsel/regulator → attorney; realtor/intermediary/real-estate-broker → broker; civic/government/official/governance → civic-leader; homeowner/citizen → resident; operator/site-selector/occupier → business; builder/land-developer → developer." - changed
Input schema / properties / lens / enumPrevious value: -[ - "synthesis", - "developer", - "investor", - "resident", - "business", - "civic", - "infrastructure", - "policy" -]New value: +[ + "synthesis", + "developer", + "investor", + "broker", + "attorney", + "business", + "resident", + "civic-leader" +] - changed
Input schema / properties / slug / descriptionPrevious value: -"The place slug (e.g., \"clermont-florida\"). Use list_cities to discover available slugs."New value: +"The place slug (e.g., \"clermont-florida\"). Use list_places to discover available slugs."
18 tool updates
- Changed
current_named_patterns1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "count": { + "type": "number" + }, + "patterns": { + "items": { + "properties": { + "audiences": { + "items": { + "type": "string" + }, + "type": "array" + }, + "canonical_url": { + "type": "string" + }, + "direction": { + "type": "string" + }, + "exhibits_count": { + "type": "number" + }, + "lifecycle_stage": { + "type": "string" + }, + "name": { + "type": "string" + }, + "pattern_url": { + "type": "string" + }, + "related_briefs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "signal_score": { + "type": "number" + }, + "slug": { + "type": "string" + }, + "spatial": { + "items": { + "type": "string" + }, + "type": "array" + }, + "voxel_lead": { + "type": "string" + } + }, + "required": [ + "slug", + "name", + "pattern_url" + ], + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
describe_corridor1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "available_lenses": { + "items": { + "type": "string" + }, + "type": "array" + }, + "claims": { + "items": { + "properties": { + "citations": { + "items": { + "properties": { + "id": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "facet": { + "description": "Structural facet category.", + "enum": [ + "primary_force", + "voxel_lead", + "exhibit", + "defensive_response", + "lesson", + "notable_decision", + "voting_record" + ], + "type": "string" + }, + "id": { + "description": "Full claim_id slug — `{scope}.{facet}.{noun}`.", + "type": "string" + }, + "schema_id": { + "description": "Full @id URL for JSON-LD reference.", + "type": "string" + }, + "text": { + "description": "Claim text, verbatim.", + "type": "string" + } + }, + "required": [ + "id", + "facet", + "text", + "schema_id", + "citations" + ], + "type": "object" + }, + "type": "array" + }, + "fell_back_to_synthesis": { + "type": "boolean" + }, + "freshness": { + "properties": { + "corpus_last_harvested": { + "description": "YYYY-MM-DD — most recent harvest_date in corpus.", + "type": "string" + }, + "dossier_last_material_update": { + "description": "YYYY-MM-DD — when this dossier last changed.", + "type": [ + "string", + "null" + ] + }, + "page_last_rendered": { + "description": "ISO 8601 — request-time stamp.", + "type": "string" + }, + "site_build_committed": { + "description": "Short git SHA.", + "type": "string" + } + }, + "required": [ + "corpus_last_harvested", + "page_last_rendered", + "site_build_committed" + ], + "type": "object" + }, + "frontmatter": { + "type": "object" + }, + "lens": { + "type": "string" + }, + "lens_was_requested": { + "type": "string" + }, + "projection": { + "type": "string" + }, + "record_status": { + "type": [ + "object", + "null" + ] + }, + "slug": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "enum": [ + "corridor" + ], + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "slug", + "type", + "url", + "lens", + "projection", + "claims", + "freshness" + ], + "type": "object" +}
- Changed
describe_entity1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "appears_in_briefs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "appears_in_meetings": { + "items": { + "type": "string" + }, + "type": "array" + }, + "appears_in_watches": { + "items": { + "type": "string" + }, + "type": "array" + }, + "canonical_role": { + "type": "string" + }, + "creative_work": { + "type": "object" + }, + "display_name": { + "type": "string" + }, + "entity_class": { + "type": "string" + }, + "exhibits_patterns": { + "items": { + "type": "string" + }, + "type": "array" + }, + "last_active": { + "type": "string" + }, + "legislation": { + "type": "object" + }, + "named_at": { + "type": "string" + }, + "organization": { + "type": "object" + }, + "person": { + "type": "object" + }, + "provenance_chain": { + "items": { + "type": "object" + }, + "type": "array" + }, + "related_entities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "related_places": { + "items": { + "type": "string" + }, + "type": "array" + }, + "schema_id": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { + "type": "string" + }, + "voxel_lead": { + "type": "string" + } + }, + "required": [ + "slug", + "display_name", + "entity_class", + "url", + "schema_id" + ], + "type": "object" +}
- Changed
describe_meeting1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "available_lenses": { + "items": { + "type": "string" + }, + "type": "array" + }, + "claims": { + "items": { + "properties": { + "citations": { + "items": { + "properties": { + "id": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "facet": { + "description": "Structural facet category.", + "enum": [ + "primary_force", + "voxel_lead", + "exhibit", + "defensive_response", + "lesson", + "notable_decision", + "voting_record" + ], + "type": "string" + }, + "id": { + "description": "Full claim_id slug — `{scope}.{facet}.{noun}`.", + "type": "string" + }, + "schema_id": { + "description": "Full @id URL for JSON-LD reference.", + "type": "string" + }, + "text": { + "description": "Claim text, verbatim.", + "type": "string" + } + }, + "required": [ + "id", + "facet", + "text", + "schema_id", + "citations" + ], + "type": "object" + }, + "type": "array" + }, + "fell_back_to_synthesis": { + "type": "boolean" + }, + "freshness": { + "properties": { + "corpus_last_harvested": { + "description": "YYYY-MM-DD — most recent harvest_date in corpus.", + "type": "string" + }, + "dossier_last_material_update": { + "description": "YYYY-MM-DD — when this dossier last changed.", + "type": [ + "string", + "null" + ] + }, + "page_last_rendered": { + "description": "ISO 8601 — request-time stamp.", + "type": "string" + }, + "site_build_committed": { + "description": "Short git SHA.", + "type": "string" + } + }, + "required": [ + "corpus_last_harvested", + "page_last_rendered", + "site_build_committed" + ], + "type": "object" + }, + "frontmatter": { + "type": "object" + }, + "lens": { + "type": "string" + }, + "lens_was_requested": { + "type": "string" + }, + "projection": { + "type": "string" + }, + "record_status": { + "properties": { + "meeting_status": { + "enum": [ + "scheduled", + "convened", + "cancelled" + ], + "type": "string" + }, + "minutes_available": { + "type": "boolean" + }, + "outcome_status": { + "enum": [ + "pending", + "recorded" + ], + "type": "string" + }, + "record_type": { + "enum": [ + "agenda", + "minutes" + ], + "type": "string" + }, + "vote_final": { + "type": "boolean" + } + }, + "required": [ + "record_type", + "meeting_status", + "outcome_status", + "minutes_available", + "vote_final" + ], + "type": [ + "object", + "null" + ] + }, + "slug": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "enum": [ + "meeting" + ], + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "slug", + "type", + "url", + "lens", + "projection", + "claims", + "freshness", + "record_status" + ], + "type": "object" +}
- Changed
describe_pattern1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "audiences": { + "items": { + "type": "string" + }, + "type": "array" + }, + "claims": { + "items": { + "properties": { + "citations": { + "items": { + "properties": { + "id": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "facet": { + "description": "Structural facet category.", + "enum": [ + "primary_force", + "voxel_lead", + "exhibit", + "defensive_response", + "lesson", + "notable_decision", + "voting_record" + ], + "type": "string" + }, + "id": { + "description": "Full claim_id slug — `{scope}.{facet}.{noun}`.", + "type": "string" + }, + "schema_id": { + "description": "Full @id URL for JSON-LD reference.", + "type": "string" + }, + "text": { + "description": "Claim text, verbatim.", + "type": "string" + } + }, + "required": [ + "id", + "facet", + "text", + "schema_id", + "citations" + ], + "type": "object" + }, + "type": "array" + }, + "defensive_response": { + "items": { + "type": "string" + }, + "type": "array" + }, + "exhibits": { + "items": { + "properties": { + "date": { + "type": "string" + }, + "detected_via": { + "type": "string" + }, + "note": { + "type": "string" + }, + "source": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "freshness": { + "properties": { + "corpus_last_harvested": { + "description": "YYYY-MM-DD — most recent harvest_date in corpus.", + "type": "string" + }, + "dossier_last_material_update": { + "description": "YYYY-MM-DD — when this dossier last changed.", + "type": [ + "string", + "null" + ] + }, + "page_last_rendered": { + "description": "ISO 8601 — request-time stamp.", + "type": "string" + }, + "site_build_committed": { + "description": "Short git SHA.", + "type": "string" + } + }, + "required": [ + "corpus_last_harvested", + "page_last_rendered", + "site_build_committed" + ], + "type": "object" + }, + "lifecycle_stage": { + "type": "string" + }, + "name": { + "type": "string" + }, + "named_at": { + "type": "string" + }, + "provenance_chain": { + "items": { + "type": "object" + }, + "type": "array" + }, + "related_briefs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "related_corridors": { + "items": { + "type": "string" + }, + "type": "array" + }, + "related_places": { + "items": { + "type": "string" + }, + "type": "array" + }, + "scope": { + "properties": { + "corridors": { + "items": { + "type": "string" + }, + "type": "array" + }, + "spatial": { + "items": { + "type": "string" + }, + "type": "array" + }, + "temporal": { + "type": "string" + }, + "topical": { + "type": "string" + } + }, + "type": "object" + }, + "signal_status": { + "properties": { + "confidence": { + "enum": [ + "low", + "medium", + "high", + "very-high" + ], + "type": "string" + }, + "confidence_pips": { + "maximum": 5, + "minimum": 0, + "type": "number" + }, + "direction": { + "enum": [ + "rising", + "stable", + "cooling" + ], + "type": "string" + }, + "horizon": { + "type": "string" + }, + "score": { + "maximum": 100, + "minimum": 0, + "type": "number" + } + }, + "type": "object" + }, + "slug": { + "type": "string" + }, + "surfaces": { + "properties": { + "defined_term_id": { + "type": "string" + }, + "defined_term_set": { + "type": "string" + }, + "dossier": { + "type": "string" + }, + "list_in_atlas": { + "type": "string" + } + }, + "type": "object" + }, + "url": { + "type": "string" + }, + "voxel_lead": { + "type": "string" + } + }, + "required": [ + "slug", + "name", + "url", + "claims", + "freshness" + ], + "type": "object" +}
- Changed
describe_place1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "available_lenses": { + "items": { + "type": "string" + }, + "type": "array" + }, + "claims": { + "items": { + "properties": { + "citations": { + "items": { + "properties": { + "id": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "facet": { + "description": "Structural facet category.", + "enum": [ + "primary_force", + "voxel_lead", + "exhibit", + "defensive_response", + "lesson", + "notable_decision", + "voting_record" + ], + "type": "string" + }, + "id": { + "description": "Full claim_id slug — `{scope}.{facet}.{noun}`.", + "type": "string" + }, + "schema_id": { + "description": "Full @id URL for JSON-LD reference.", + "type": "string" + }, + "text": { + "description": "Claim text, verbatim.", + "type": "string" + } + }, + "required": [ + "id", + "facet", + "text", + "schema_id", + "citations" + ], + "type": "object" + }, + "type": "array" + }, + "fell_back_to_synthesis": { + "type": "boolean" + }, + "freshness": { + "properties": { + "corpus_last_harvested": { + "description": "YYYY-MM-DD — most recent harvest_date in corpus.", + "type": "string" + }, + "dossier_last_material_update": { + "description": "YYYY-MM-DD — when this dossier last changed.", + "type": [ + "string", + "null" + ] + }, + "page_last_rendered": { + "description": "ISO 8601 — request-time stamp.", + "type": "string" + }, + "site_build_committed": { + "description": "Short git SHA.", + "type": "string" + } + }, + "required": [ + "corpus_last_harvested", + "page_last_rendered", + "site_build_committed" + ], + "type": "object" + }, + "frontmatter": { + "type": "object" + }, + "lens": { + "type": "string" + }, + "lens_was_requested": { + "type": "string" + }, + "projection": { + "type": "string" + }, + "record_status": { + "type": [ + "object", + "null" + ] + }, + "slug": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "enum": [ + "place" + ], + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "slug", + "type", + "url", + "lens", + "projection", + "claims", + "freshness" + ], + "type": "object" +}
- Changed
describe_watch1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "body": { + "type": "string" + }, + "claims": { + "items": { + "properties": { + "citations": { + "items": { + "properties": { + "id": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "facet": { + "description": "Structural facet category.", + "enum": [ + "primary_force", + "voxel_lead", + "exhibit", + "defensive_response", + "lesson", + "notable_decision", + "voting_record" + ], + "type": "string" + }, + "id": { + "description": "Full claim_id slug — `{scope}.{facet}.{noun}`.", + "type": "string" + }, + "schema_id": { + "description": "Full @id URL for JSON-LD reference.", + "type": "string" + }, + "text": { + "description": "Claim text, verbatim.", + "type": "string" + } + }, + "required": [ + "id", + "facet", + "text", + "schema_id", + "citations" + ], + "type": "object" + }, + "type": "array" + }, + "freshness": { + "properties": { + "corpus_last_harvested": { + "description": "YYYY-MM-DD — most recent harvest_date in corpus.", + "type": "string" + }, + "dossier_last_material_update": { + "description": "YYYY-MM-DD — when this dossier last changed.", + "type": [ + "string", + "null" + ] + }, + "page_last_rendered": { + "description": "ISO 8601 — request-time stamp.", + "type": "string" + }, + "site_build_committed": { + "description": "Short git SHA.", + "type": "string" + } + }, + "required": [ + "corpus_last_harvested", + "page_last_rendered", + "site_build_committed" + ], + "type": "object" + }, + "outcome": { + "properties": { + "citations": { + "items": { + "type": "string" + }, + "type": "array" + }, + "lesson": { + "type": "string" + }, + "outcome_summary": { + "type": "string" + }, + "outcome_type": { + "type": "string" + }, + "prediction_assessment": { + "type": "object" + }, + "resolved_at_meeting": { + "type": "string" + }, + "resolved_date": { + "type": "string" + }, + "status": { + "enum": [ + "pending", + "resolved", + "obsolete" + ], + "type": "string" + } + }, + "required": [ + "status" + ], + "type": "object" + }, + "scope": { + "properties": { + "brief": { + "type": "string" + }, + "corridor": { + "type": "string" + }, + "pattern": { + "type": "string" + }, + "place": { + "type": "string" + }, + "region": { + "type": "string" + } + }, + "type": "object" + }, + "significance": { + "properties": { + "confidence": { + "type": "string" + }, + "confidence_pips": { + "type": "number" + }, + "horizon": { + "type": "string" + }, + "score": { + "type": "number" + }, + "why_it_matters_voxel": { + "type": "string" + } + }, + "type": "object" + }, + "slug": { + "type": "string" + }, + "subtitle": { + "type": "string" + }, + "title": { + "type": "string" + }, + "trigger": { + "properties": { + "condition": { + "type": "string" + }, + "date": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "enum": [ + "watch" + ], + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "slug", + "type", + "url", + "outcome", + "claims", + "freshness" + ], + "type": "object" +}
- Changed
describe_zoning_signal1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "artifact_types": { + "items": { + "properties": { + "purpose": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url_pattern": { + "type": "string" + } + }, + "required": [ + "type", + "url_pattern", + "purpose" + ], + "type": "object" + }, + "type": "array" + }, + "built_by": { + "properties": { + "studio": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "description": { + "type": "string" + }, + "methodology": { + "properties": { + "cognitive_lenses": { + "items": { + "type": "string" + }, + "type": "array" + }, + "default_projection": { + "type": "string" + }, + "summary": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "type": "string" + }, + "regional_scope": { + "properties": { + "cities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "primary_region": { + "type": "string" + }, + "state": { + "type": "string" + } + }, + "type": "object" + }, + "surfaces": { + "properties": { + "decoder_index": { + "type": "string" + }, + "llms_full": { + "type": "string" + }, + "llms_index": { + "type": "string" + }, + "mcp_endpoint": { + "type": "string" + }, + "mcp_manifest": { + "type": "string" + }, + "patterns_atlas": { + "type": "string" + }, + "schema_url": { + "type": "string" + }, + "site": { + "type": "string" + }, + "sitemap": { + "type": "string" + }, + "status_url": { + "type": "string" + }, + "track_record": { + "type": "string" + } + }, + "required": [ + "site", + "mcp_endpoint", + "status_url", + "schema_url" + ], + "type": "object" + } + }, + "required": [ + "name", + "description", + "artifact_types", + "methodology", + "surfaces" + ], + "type": "object" +}
- Changed
get_track_record1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "by_confidence": { + "items": { + "type": "object" + }, + "type": "array" + }, + "directional": { + "properties": { + "accuracy_pct": { + "type": "number" + }, + "aligned": { + "type": "number" + }, + "misread": { + "type": "number" + }, + "mixed": { + "type": "number" + }, + "total": { + "type": "number" + }, + "unforeseen": { + "type": "number" + } + }, + "type": "object" + }, + "horizon": { + "properties": { + "accuracy_pct": { + "type": "number" + }, + "early": { + "type": "number" + }, + "late": { + "type": "number" + }, + "total": { + "type": "number" + }, + "within": { + "type": "number" + } + }, + "type": "object" + }, + "obsolete": { + "type": "number" + }, + "pending": { + "type": "number" + }, + "recent": { + "items": { + "type": "object" + }, + "type": "array" + }, + "scope": { + "type": "object" + }, + "significance": { + "properties": { + "accuracy_pct": { + "type": "number" + }, + "confirmed": { + "type": "number" + }, + "overstated": { + "type": "number" + }, + "total": { + "type": "number" + }, + "understated": { + "type": "number" + } + }, + "type": "object" + }, + "surfaces": { + "properties": { + "list_resolved_watches": { + "type": "string" + }, + "public_scorecard": { + "type": "string" + } + }, + "type": "object" + }, + "total_resolved": { + "type": "number" + } + }, + "type": "object" +}
- Changed
list_cities1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "cities": { + "items": { + "properties": { + "city": { + "type": "string" + }, + "signal_direction": { + "type": [ + "string", + "null" + ] + }, + "signal_strength": { + "type": [ + "string", + "null" + ] + }, + "slug": { + "type": "string" + }, + "state": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "slug", + "city", + "state", + "url" + ], + "type": "object" + }, + "type": "array" + }, + "count": { + "type": "number" + } + }, + "required": [ + "cities", + "count" + ], + "type": "object" +}
- Changed
list_corridors1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "corridors": { + "items": { + "properties": { + "constituent_places": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "primary_axis": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "slug", + "name", + "url" + ], + "type": "object" + }, + "type": "array" + }, + "count": { + "type": "number" + } + }, + "type": "object" +}
- Changed
list_entities1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "by_class": { + "additionalProperties": { + "type": "number" + }, + "type": "object" + }, + "count": { + "type": "number" + }, + "entities": { + "items": { + "properties": { + "briefs_count": { + "type": "number" + }, + "canonical_role": { + "type": "string" + }, + "case_number": { + "type": "string" + }, + "display_name": { + "type": "string" + }, + "entity_class": { + "type": "string" + }, + "jurisdiction": { + "type": "string" + }, + "legal_status": { + "type": "string" + }, + "meetings_count": { + "type": "number" + }, + "patterns_count": { + "type": "number" + }, + "schema_id": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { + "type": "string" + }, + "voxel_lead": { + "type": "string" + }, + "watches_count": { + "type": "number" + } + }, + "required": [ + "slug", + "display_name", + "entity_class", + "url", + "schema_id" + ], + "type": "object" + }, + "type": "array" + }, + "filters": { + "properties": { + "entity_class": { + "type": "string" + }, + "place": { + "type": "string" + }, + "search": { + "type": "string" + } + }, + "type": "object" + }, + "surfaces": { + "properties": { + "architecture_doc": { + "type": "string" + }, + "decoder_index_hub": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" +}
- Changed
list_meetings1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "count": { + "type": "number" + }, + "filters": { + "properties": { + "board": { + "type": "string" + }, + "jurisdiction": { + "type": "string" + }, + "year": { + "type": "number" + } + }, + "type": "object" + }, + "meetings": { + "items": { + "properties": { + "board": { + "type": "string" + }, + "document_type": { + "type": "string" + }, + "jurisdiction": { + "type": "string" + }, + "meeting_date": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { + "type": "string" + }, + "voxel_lead": { + "type": "string" + } + }, + "required": [ + "slug", + "url" + ], + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
list_patterns1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "count": { + "type": "number" + }, + "patterns": { + "items": { + "properties": { + "audiences": { + "items": { + "type": "string" + }, + "type": "array" + }, + "canonical_url": { + "type": "string" + }, + "direction": { + "type": "string" + }, + "exhibits_count": { + "type": "number" + }, + "lifecycle_stage": { + "type": "string" + }, + "name": { + "type": "string" + }, + "pattern_url": { + "type": "string" + }, + "related_briefs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "signal_score": { + "type": "number" + }, + "slug": { + "type": "string" + }, + "spatial": { + "items": { + "type": "string" + }, + "type": "array" + }, + "voxel_lead": { + "type": "string" + } + }, + "required": [ + "slug", + "name", + "pattern_url" + ], + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
list_places1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "cities": { + "items": { + "properties": { + "city": { + "type": "string" + }, + "signal_direction": { + "type": [ + "string", + "null" + ] + }, + "signal_strength": { + "type": [ + "string", + "null" + ] + }, + "slug": { + "type": "string" + }, + "state": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "slug", + "city", + "state", + "url" + ], + "type": "object" + }, + "type": "array" + }, + "count": { + "type": "number" + } + }, + "required": [ + "cities", + "count" + ], + "type": "object" +}
- Changed
list_watch_items1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "count": { + "type": "number" + }, + "status": { + "enum": [ + "pending", + "resolved", + "obsolete", + "all" + ], + "type": "string" + }, + "watch_items": { + "items": { + "properties": { + "outcome": { + "type": "object" + }, + "scope": { + "type": "object" + }, + "significance": { + "type": "object" + }, + "slug": { + "type": "string" + }, + "subtitle": { + "type": "string" + }, + "title": { + "type": "string" + }, + "trigger_date": { + "type": "string" + }, + "trigger_type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "slug", + "title", + "url" + ], + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
meeting_index1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "city": { + "type": "string" + }, + "count": { + "type": "number" + }, + "from_date": { + "type": "string" + }, + "meetings": { + "items": { + "properties": { + "board": { + "type": "string" + }, + "month": { + "type": "number" + }, + "slug": { + "type": "string" + }, + "url": { + "type": "string" + }, + "year": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "to_date": { + "type": "string" + } + }, + "type": "object" +}
- Changed
semantic_search1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "count": { + "type": "number" + }, + "hits": { + "items": { + "properties": { + "similarity": { + "type": "number" + }, + "slug": { + "type": "string" + }, + "subtitle": { + "type": [ + "string", + "null" + ] + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "slug", + "type", + "title", + "similarity", + "url" + ], + "type": "object" + }, + "type": "array" + }, + "query": { + "type": "string" + } + }, + "type": "object" +}
5 tool updates
- Added
describe_meeting - Added
describe_watch - Changed
list_cities1 field changed- changed
Input schema / properties / state / descriptionPrevious value: -"Optional US state name (e.g., \"Florida\") to filter the result set. Omit for all cities across all states."New value: +"Optional US state name (e.g., \"Florida\") to filter the result set."
- Added
list_patterns - Added
list_places
2 tool updates
- Added
describe_entity - Added
list_entities
2 tool updates
- Added
describe_pattern - Added
get_track_record
1 tool update
- Added
list_watch_items
1 tool update
- Added
list_meetings
8 tool updates
- First observed
current_named_patterns - First observed
describe_corridor - First observed
describe_place - First observed
describe_zoning_signal - First observed
list_cities - First observed
list_corridors - First observed
meeting_index - First observed
semantic_search
Related MCP Connectors
Zoning, ADU eligibility, flood zone, setbacks, and buildability intelligence for U.S. parcels.
Human-reviewed zoning answers with ordinance citations for covered US municipalities.
Built-environment forecasts, public benchmarks, and permit or zoning readiness through remote MCP.
Zoning, parcel, and development feasibility for a street address in Canada and the US.
Related MCP Servers
- AlicenseAqualityDmaintenanceAI-powered property intelligence for instant zoning analysis, buildability assessments, ADU eligibility, flood risk, and development feasibility reports for any US address.51MIT
- AlicenseAqualityAmaintenanceUK property area intelligence: validated trajectory scores, gentrification early-warning and area screening for 2,292 England & Wales postcode districts, from 30+ government data sources.7MIT
- AlicenseAqualityDmaintenanceOpen-source MCP server providing real estate regulatory intelligence (zoning, permits, entitlements, deal scoring) for US properties, enabling AI agents to access 10 callable tools.125 npmMIT
- FlicenseNot gradedqualityBmaintenanceEnables AI agents and developers to look up zoning, land-use, and development records for Gwinnett County, Georgia through five public read-only tools: resolving an address to its actual governing jurisdiction, searching and retrieving county zoning cases, fetching ordinance code sections, and listing jurisdictions. It exposes the same operations over a REST API so questions about setbacks, permits, and case histories can be answered from indexed source records rather than guesses.-
Glama MCP Gateway
Add one secure layer between your agents and this server.