Skip to content

Zoning Signal

by zoningsignal.com · remote · no sign-in to list tools · v2.3.0 · published by com.zoningsignal

Planning and zoning records: 25 jurisdictions in Lake, Orange, Osceola, Polk, Seminole counties, FL

Final · 1Changes · 1

18 tools: 1 do something that can't be undone, 1 change things and 16 only read.

Scanned Oct 21, 2026

2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http observatory https://zoningsignal.com/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn1 info
  • The server marks "trace_connection" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The input addresses people (input.to): what it sends cannot be taken back.

    What this check looks for
  • The description is 3,284 characters long, over the 2,000 this check looks for.

    Matched text

    description ends: "...ull dossier, describe_meeting for the room itself, and semantic_search for prose."

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

18 tools

Can't be undone 1Claude Code: ask
  • trace_connectionTrace how two named things in the planning record connect, and report how specific that connection is.2 findings

    Why it is in this group

    • The input addresses people (input.to): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Info

      The description is 3,284 characters long, over the 2,000 this check looks for.

      Matched text

      description ends: "...ull dossier, describe_meeting for the room itself, and semantic_search for prose."

      What this check looks for
    • Warn

      The server marks "trace_connection" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The input addresses people (input.to): what it sends cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    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 (249 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 (162 links, 44 of them stated on both dossiers), and shared named patterns (58 references across 15 patterns; a pattern holds a median of 2 entities and at most 10). That substrate is 161 nodes and 469 links over 68 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 117 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 65% at two hops, 40% at three, 14% at four), and whether the two endpoints are minuted in disjoint jurisdictions, which 15 of 68 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,278 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 347 of 425 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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
Changes things 1Claude Code: ask
  • submit_agent_feedbackSubmit feedback to the observatory's operators about the MCP tool surface.No findings

    Why it is in this group

    • The name "submit_agent_feedback" says "submit": a word for a change.
    Description, as the server wrote it
    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, so there is 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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
Only reads 16Claude Code: allow
  • describe_corridorReturn the dossier projection for a corridor, in the requested cognitive lens.No findings

    Why it is in this group

    • The name "describe_corridor" says "describe": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • describe_entityReturn the full structured dossier for a named entity: the canonical citable artifact for any actor, organization, ordinance, or project the corpus references.No findings

    Why it is in this group

    • The name "describe_entity" says "describe": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • describe_meetingReturn the full dossier projection for a meeting reading, in the requested cognitive lens.No findings

    Why it is in this group

    • The name "describe_meeting" says "describe": a word for reading.
    Description, as the server wrote it
    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, namely developer, investor, broker, attorney, business, resident and 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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • describe_patternReturn the full dossier for a named pattern: voxel_lead, signal_status (horizon/confidence), scope (spatial/temporal/topical/corridors), full exhibits inventory with detection meta…No findings

    Why it is in this group

    • The name "describe_pattern" says "describe": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • describe_placeReturn the dossier projection for a city, in the requested cognitive lens.No findings

    Why it is in this group

    • The name "describe_place" says "describe": a word for reading.
    Description, as the server wrote it
    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. This is 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).

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • describe_watchReturn the full dossier for a watch item, the observatory's forward-looking observation primitive.No findings

    Why it is in this group

    • The name "describe_watch" says "describe": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • describe_zoning_signalReturn 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 methodolo…No findings

    Why it is in this group

    • The name "describe_zoning_signal" says "describe": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_track_recordReturn the observatory's public calibration scorecard: the aggregate accuracy of past watch-item directional reads, horizon calls, and significance assessments across resolved watc…No findings

    Why it is in this group

    • The name "get_track_record" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_corridorsList every published corridor page.No findings

    Why it is in this group

    • The name "list_corridors" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_entitiesList every named entity in the Decoder Index, the smallest citable unit of authority in the corpus.No findings

    Why it is in this group

    • The name "list_entities" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_meetingsReturn meeting readings across all cities, optionally filtered by date range or jurisdiction substring.No findings

    Why it is in this group

    • The name "list_meetings" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_patternsList every named pattern in the Pattern Atlas.No findings

    Why it is in this group

    • The name "list_patterns" says "list": a word for reading.
    Description, as the server wrote it
    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 it from current_named_patterns to align with the canonical content-type vocabulary (loader: getAllContent("pattern"); URLs: /patterns/{slug}; describe tool: describe_pattern).

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_placesList every place dossier (per-jurisdiction reading) the observatory publishes.No findings

    Why it is in this group

    • The name "list_places" says "list": a word for reading.
    Description, as the server wrote it
    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 it 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).

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_watch_itemsReturn The Watch, the field's forward calendar of pending events, scheduled hearings, regulatory sunsets, and condition-triggered milestones the observatory is tracking.No findings

    Why it is in this group

    • The name "list_watch_items" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • meeting_indexReturn meeting readings for a specific city across an optional date range.No findings

    Why it is in this group

    • The description's first verb is "return": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 2.3.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http observatory https://zoningsignal.com/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__observatory__describe_zoning_signal",
      "mcp__observatory__list_places",
      "mcp__observatory__list_corridors",
      "mcp__observatory__list_patterns",
      "mcp__observatory__describe_pattern",
      "mcp__observatory__list_entities",
      "mcp__observatory__describe_entity",
      "mcp__observatory__meeting_index",
      "mcp__observatory__list_meetings",
      "mcp__observatory__list_watch_items",
      "mcp__observatory__get_track_record",
      "mcp__observatory__describe_place",
      "mcp__observatory__describe_corridor",
      "mcp__observatory__describe_meeting",
      "mcp__observatory__describe_watch",
      "mcp__observatory__semantic_search"
    ],
    "ask": [
      "mcp__observatory__submit_agent_feedback",
      "mcp__observatory__trace_connection"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as observatory. Review it before you use it.