Zoning Signal
REMOTE · ZONINGSIGNAL.COM · SCANNED AUG 3
US municipal zoning intelligence — corridor analysis, place dossiers, named-pattern detection.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →
Endpoint Security80
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one. See how to fix → View diagnostics → Partial
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability80
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 3869 tokens (~184/item across 21 items; 17 tools + 4 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
- Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
remote · zoningsignal.com
claude mcp add --transport http com-zoningsignal-observatory https://zoningsignal.com/mcp
[mcp_servers.com-zoningsignal-observatory] url = "https://zoningsignal.com/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"com-zoningsignal-observatory": {
"type": "remote",
"url": "https://zoningsignal.com/mcp",
"enabled": true
}
}
} openclaw mcp add com-zoningsignal-observatory --url https://zoningsignal.com/mcp --transport streamable-http
mcp_servers:
com-zoningsignal-observatory:
url: "https://zoningsignal.com/mcp" {
"mcpServers": {
"com-zoningsignal-observatory": {
"type": "http",
"url": "https://zoningsignal.com/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 3 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.
- 31 Jul 26 +3
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 30 Jul 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.
- 29 Jul 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.
- 27 Jul 26 +1
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 26 Jul 26 70
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 3 Aug 2026 · Probed https://zoningsignal.com/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=zoningsignal.com | CN=YR2,O=Let's Encrypt,C=US | 30 Jun 2026 | 28 Sept 2026 | RSA 2048 | SHA256-RSA | 58338dab596b1bda944087b69c4554387c7 |
| SANs: zoningsignal.com | ||||||
| CN=YR2,O=Let's Encrypt,C=US (CA) | CN=Root YR,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | RSA 2048 | SHA256-RSA | 4ebd24947e24d394802d84a52fd5b319 |
| CN=Root YR,O=ISRG,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | RSA 4096 | SHA256-RSA | f24b6d17f9d9ad7cb1c9fea78782699f |
DNSSEC insecure
Validation of zoningsignal.com. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| zoningsignal.com. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=63072000 |
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://zoningsignal.com/mcp | Verified | 200 | |
| http (plaintext) | http://zoningsignal.com/mcp | HTTPS enforced | 308 | https://zoningsignal.com/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.
describe_corridor Describe Corridor ~170
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 | Type | Req | Description |
|---|---|---|---|
| lens | string | — | 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… |
| slug | string | yes | The corridor slug (e.g., "us-27-south-lake"). Use list_corridors to discover available slugs. |
| Name | Type | Req | Description |
|---|---|---|---|
| available_lenses | array | — | — |
| claims | array | yes | — |
| fell_back_to_synthesis | boolean | — | — |
| freshness | object | yes | — |
| frontmatter | object | — | — |
| lens | string | yes | — |
| lens_was_requested | string | — | — |
| projection | string | yes | — |
| record_status | object|null | — | — |
| slug | string | yes | — |
| title | string | — | — |
| type | string | yes | — |
| url | string | yes | — |
No examples provided.
describe_entity Describe Entity ~286
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.
| Name | Type | Req | Description |
|---|---|---|---|
| slug | string | 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| appears_in_briefs | array | — | — |
| appears_in_meetings | array | — | — |
| appears_in_watches | array | — | — |
| canonical_role | string | — | — |
| creative_work | object | — | — |
| display_name | string | yes | — |
| entity_class | string | yes | — |
| exhibits_patterns | array | — | — |
| last_active | string | — | — |
| legislation | object | — | — |
| named_at | string | — | — |
| organization | object | — | — |
| person | object | — | — |
| provenance_chain | array | — | — |
| related_entities | array | — | — |
| related_places | array | — | — |
| schema_id | string | yes | — |
| slug | string | yes | — |
| url | string | yes | — |
| voxel_lead | string | — | — |
No examples provided.
describe_meeting Describe Meeting ~338
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 | Type | Req | Description |
|---|---|---|---|
| lens | string | — | Optional cognitive lens. Default: synthesis (the whole-picture multi-projection view). Canonical lenses: developer, investor, broker, attorney, business, resident, civic-leader. Aliases route to cano… |
| slug | string | yes | The meeting slug (e.g., "leesburg-pc-2026-01"). Use list_meetings or meeting_index to discover available slugs. |
| Name | Type | Req | Description |
|---|---|---|---|
| available_lenses | array | — | — |
| claims | array | yes | — |
| fell_back_to_synthesis | boolean | — | — |
| freshness | object | yes | — |
| frontmatter | object | — | — |
| lens | string | yes | — |
| lens_was_requested | string | — | — |
| projection | string | yes | — |
| record_status | object|null | yes | — |
| slug | string | yes | — |
| title | string | — | — |
| type | string | yes | — |
| url | string | yes | — |
No examples provided.
describe_pattern Describe Pattern ~164
Return the full dossier for a named pattern: voxel_lead, signal_status (score/direction/horizon/confidence/pips), 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 | Type | Req | Description |
|---|---|---|---|
| slug | string | yes | The pattern slug (e.g., "self-storage-canary"). Use current_named_patterns to discover available slugs. |
| Name | Type | Req | Description |
|---|---|---|---|
| audiences | array | — | — |
| claims | array | yes | — |
| defensive_response | array | — | — |
| exhibits | array | — | — |
| freshness | object | yes | — |
| lifecycle_stage | string | — | — |
| name | string | yes | — |
| named_at | string | — | — |
| provenance_chain | array | — | — |
| related_briefs | array | — | — |
| related_corridors | array | — | — |
| related_places | array | — | — |
| scope | object | — | — |
| signal_status | object | — | — |
| slug | string | yes | — |
| surfaces | object | — | — |
| url | string | yes | — |
| voxel_lead | string | — | — |
No examples provided.
describe_place Describe Place ~238
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 | Type | Req | Description |
|---|---|---|---|
| lens | string | — | 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… |
| slug | string | yes | The place slug (e.g., "clermont-florida"). Use list_places to discover available slugs. |
| Name | Type | Req | Description |
|---|---|---|---|
| available_lenses | array | — | — |
| claims | array | yes | — |
| fell_back_to_synthesis | boolean | — | — |
| freshness | object | yes | — |
| frontmatter | object | — | — |
| lens | string | yes | — |
| lens_was_requested | string | — | — |
| projection | string | yes | — |
| record_status | object|null | — | — |
| slug | string | yes | — |
| title | string | — | — |
| type | string | yes | — |
| url | string | yes | — |
No examples provided.
describe_watch Describe Watch ~200
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 (score / horizon / confidence / confidence_pips / 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 | Type | Req | Description |
|---|---|---|---|
| slug | string | yes | The watch slug (e.g., "lake-bright-council-mar-23"). Use list_watch_items to discover available slugs. |
| Name | Type | Req | Description |
|---|---|---|---|
| body | string | — | — |
| claims | array | yes | — |
| freshness | object | yes | — |
| outcome | object | yes | — |
| scope | object | — | — |
| significance | object | — | — |
| slug | string | yes | — |
| subtitle | string | — | — |
| title | string | — | — |
| trigger | object | — | — |
| type | string | yes | — |
| url | string | yes | — |
No examples provided.
describe_zoning_signal Describe Zoning Signal ~57
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.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| artifact_types | array | yes | — |
| built_by | object | — | — |
| description | string | yes | — |
| methodology | object | yes | — |
| name | string | yes | — |
| regional_scope | object | — | — |
| surfaces | object | yes | — |
No examples provided.
get_track_record Get Track Record ~246
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 | Type | Req | Description |
|---|---|---|---|
| brief | string | — | 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 | string | — | Optional: scope to a corridor slug (e.g., "us-27-south-lake"). Returns the aggregate track record across the corridor's constituent places. |
| jurisdiction | string | — | 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| by_confidence | array | — | — |
| directional | object | — | — |
| horizon | object | — | — |
| obsolete | number | — | — |
| pending | number | — | — |
| recent | array | — | — |
| scope | object | — | — |
| significance | object | — | — |
| surfaces | object | — | — |
| total_resolved | number | — | — |
No examples provided.
list_corridors List Corridors ~62
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.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| corridors | array | — | — |
| count | number | — | — |
No examples provided.
list_entities List Entities ~377
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 | Type | Req | Description |
|---|---|---|---|
| entity_class | string | — | Filter by entity class. "Person" = board members, attorneys, applicants (individuals), elected officials. "Organization" = developer firms, law firms, agencies, HOAs, planning consultancies. "Legisla… |
| place | string | — | 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.jurisd… |
| search | string | — | 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-… |
| Name | Type | Req | Description |
|---|---|---|---|
| by_class | object | — | — |
| count | number | — | — |
| entities | array | — | — |
| filters | object | — | — |
| surfaces | object | — | — |
No examples provided.
list_meetings List Meetings ~171
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 | Type | Req | Description |
|---|---|---|---|
| from_date | string | — | Inclusive lower bound (ISO 8601 date). Omit to span back to the earliest reading. |
| jurisdiction | string | — | Optional case-insensitive substring to filter by city (e.g., "minneola"). Omit for all cities. |
| to_date | string | — | Inclusive upper bound (ISO 8601 date). Omit for the latest reading. |
| Name | Type | Req | Description |
|---|---|---|---|
| count | number | — | — |
| filters | object | — | — |
| meetings | array | — | — |
No examples provided.
list_patterns List Patterns ~145
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, signal score, 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).
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| count | number | — | — |
| patterns | array | — | — |
No examples provided.
list_places List Places ~135
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 | Type | Req | Description |
|---|---|---|---|
| state | string | — | Optional US state name (e.g., "Florida") to filter the result set. Omit for all places across all states. |
| Name | Type | Req | Description |
|---|---|---|---|
| cities | array | yes | — |
| count | number | yes | — |
No examples provided.
list_watch_items List Watch Items ~236
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 | Type | Req | Description |
|---|---|---|---|
| brief | string | — | Optional: filter to items linked to a specific named-pattern brief. |
| corridor | string | — | Optional: filter to items scoped to a specific corridor (e.g., "us-27-south-lake"). |
| horizon | string | — | Optional: filter to items in the named horizon band. Imminent = ≤14 days; near-term = ≤90 days; structural = >90 days or condition-triggered. |
| place | string | — | Optional: filter to items scoped to a specific place dossier (e.g., "leesburg-florida"). |
| status | string | — | Filter by lifecycle status. Defaults to 'pending' (active watch items only); pass 'all' for the full corpus including resolved + obsolete entries. |
| Name | Type | Req | Description |
|---|---|---|---|
| count | number | — | — |
| status | string | — | — |
| watch_items | array | — | — |
No examples provided.
meeting_index Meeting Index ~132
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 | Type | Req | Description |
|---|---|---|---|
| city | string | yes | City name (e.g., "Clermont"). Case-insensitive. |
| from_date | string | — | Inclusive lower bound (ISO 8601 date). Omit to span back to the earliest reading. |
| to_date | string | — | Inclusive upper bound (ISO 8601 date). Omit for the latest reading. |
| Name | Type | Req | Description |
|---|---|---|---|
| city | string | — | — |
| count | number | — | — |
| from_date | string | — | — |
| meetings | array | — | — |
| to_date | string | — | — |
No examples provided.
semantic_search Semantic Search ~153
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 | Type | Req | Description |
|---|---|---|---|
| q | string | 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| count | number | — | — |
| hits | array | — | — |
| query | string | — | — |
No examples provided.
submit_agent_feedback Submit Agent Feedback ~444
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 | Type | Req | Description |
|---|---|---|---|
| about_tool | string | — | Optional: the tool name this feedback is about (e.g., "describe_corridor"). Lets operators rollup feedback per tool. |
| about_url | string | — | Optional: a URL on the observatory this feedback references (e.g., "https://zoningsignal.com/corridors/us-27-south-lake"). |
| agent_context | string | — | 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. |
| category | string | 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' =… |
| message | string | 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. |
| suggested_resolution | string | — | Optional: if you have a concrete proposal — a new tool, a renamed parameter, a missing field on a response — name it here. |
| Name | Type | Req | Description |
|---|---|---|---|
| attached_invocation_count | number | — | How many prior invocations (from your MCP-Session-Id) were auto-attached for operator context. |
| category | string | — | The category the feedback was filed under. |
| feedback_id | string | yes | Stable id for the stored feedback record. |
| message | string | — | Human-readable acknowledgement. |
| ok | boolean | yes | True when the feedback was accepted and stored. |
| received_at | string | — | ISO-8601 timestamp the feedback was recorded. |
No examples provided.