{
  "schema": "cityscroll.mcp_tool_catalog.v1",
  "generated_from": "worker/src/mcp.mjs + capabilities/registry.mjs",
  "endpoint": "POST https://api.cityscroll.org/mcp",
  "registered_capability_references": [
    "notice.search@1",
    "notice.get@1",
    "entity.dossier.get@1",
    "entity.relationships.get@1",
    "cited.passages.retrieve@1",
    "search.federated@1",
    "contract.get@1",
    "contracts.browse@1",
    "contracts.analysis@1",
    "people.get@1",
    "organizations.browse@1",
    "meeting.get@1",
    "land.project.get@1",
    "land.projects.browse@1",
    "land.decision_path.get@1"
  ],
  "tools": [
    {
      "name": "search_federated",
      "operation_class": "read",
      "research_response": {
        "maximum_bytes": 65536,
        "byte_basis": "UTF-8 JSON tool result, including content and structuredContent",
        "identifier_default": 10,
        "identifier_maximum": 50,
        "continuation": "Analysis: group.browse and filters.pagination. Other identifier arrays: counts and replay arguments in content, with identifier_offset/identifier_limit.",
        "overflow": "An explicit tool error asks for a smaller page or narrower filters; civic facts are never silently removed."
      },
      "authority_class": "public_read",
      "description": "Search the registered public CityScroll lenses in one bounded result set. Optional scope selects only allowlisted registered lenses. Preserves per-lens coverage, source observations, exact object routes, and federated ranking; it does not expose a raw store or arbitrary query language.",
      "schema_reference": "search.federated@1",
      "capability_reference": "search.federated@1",
      "input_schema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "query": {
            "type": "string",
            "minLength": 1,
            "maxLength": 240,
            "description": "Resident search terms, up to 240 characters."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 40
          },
          "scope": {
            "description": "Closed allowlist of registered federation lenses. Omit to search every registered lens.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "notices",
                  "people",
                  "agencies",
                  "vendors",
                  "committees",
                  "community_boards",
                  "exams",
                  "parcels",
                  "land",
                  "meetings"
                ]
              },
              {
                "type": "array",
                "minItems": 1,
                "items": {
                  "type": "string",
                  "enum": [
                    "notices",
                    "people",
                    "agencies",
                    "vendors",
                    "committees",
                    "community_boards",
                    "exams",
                    "parcels",
                    "land",
                    "meetings"
                  ]
                }
              },
              {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "lenses"
                ],
                "properties": {
                  "schema": {
                    "type": "string",
                    "const": "cityscroll.capability.search_federated.scope.v1"
                  },
                  "lenses": {
                    "type": "array",
                    "minItems": 1,
                    "items": {
                      "type": "string",
                      "enum": [
                        "notices",
                        "people",
                        "agencies",
                        "vendors",
                        "committees",
                        "community_boards",
                        "exams",
                        "parcels",
                        "land",
                        "meetings"
                      ]
                    }
                  }
                }
              }
            ]
          },
          "identifier_path": {
            "type": "string",
            "maxLength": 1024,
            "description": "JSON Pointer to the identifier array named by a continuation."
          },
          "identifier_offset": {
            "type": "integer",
            "minimum": 0,
            "description": "Offset for identifier arrays only; use the returned continuation with unchanged result filters."
          },
          "identifier_limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 10,
            "description": "Maximum identifiers per array; counts and replay continuations accompany sampled arrays."
          }
        },
        "required": [
          "query"
        ]
      },
      "output_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schema",
          "query",
          "ranking_policy",
          "results",
          "coverage",
          "requested_scope"
        ],
        "properties": {
          "schema": {
            "type": "string",
            "const": "cityscroll.universal_search_federator.v1"
          },
          "query": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "normalized",
              "tokens"
            ],
            "properties": {
              "normalized": {
                "type": "string",
                "maxLength": 240
              },
              "tokens": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          },
          "ranking_policy": {
            "type": "object"
          },
          "results": {
            "type": "array",
            "maxItems": 100,
            "items": {
              "type": "object"
            }
          },
          "coverage": {
            "type": "object"
          },
          "requested_scope": {
            "type": "object"
          }
        }
      },
      "bounds": {
        "input": {
          "queryMaximumLength": 240,
          "defaultResults": 40,
          "maximumResults": 100,
          "maximumCards": 8
        },
        "output": {
          "maximumResults": 100,
          "maximumCardsPerLane": 8
        }
      },
      "examples": [
        {
          "input": {
            "query": "parks",
            "limit": 10
          },
          "output": {
            "coverageStates": [
              "matched",
              "empty",
              "partial",
              "stale",
              "not_indexed",
              "provider_unavailable",
              "out_of_scope"
            ],
            "maximumResults": 10,
            "maximumCardsPerLane": 8,
            "requestedScope": "all_registered_lenses"
          }
        },
        {
          "input": {
            "query": "parks",
            "limit": 10,
            "scope": {
              "schema": "cityscroll.capability.search_federated.scope.v1",
              "lenses": [
                "agencies"
              ]
            }
          },
          "output": {
            "requestedLenses": [
              "agencies"
            ],
            "unrequestedState": "out_of_scope",
            "maximumResults": 10
          }
        },
        {
          "input": {
            "query": "public hearing",
            "limit": 100
          },
          "output": {
            "registeredLenses": [
              "notices",
              "people",
              "agencies",
              "vendors",
              "committees",
              "community_boards",
              "exams",
              "parcels",
              "land",
              "meetings"
            ],
            "maximumResults": 100,
            "provenance": "source-observation refs retained"
          }
        }
      ],
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "store_access": "provider-only"
    },
    {
      "name": "search_notices",
      "operation_class": "read",
      "research_response": {
        "maximum_bytes": 65536,
        "byte_basis": "UTF-8 JSON tool result, including content and structuredContent",
        "identifier_default": 10,
        "identifier_maximum": 50,
        "continuation": "Analysis: group.browse and filters.pagination. Other identifier arrays: counts and replay arguments in content, with identifier_offset/identifier_limit.",
        "overflow": "An explicit tool error asks for a smaller page or narrower filters; civic facts are never silently removed."
      },
      "authority_class": "public_read",
      "description": "Search NYC City Record notices (the daily-refreshed mirror). Keyword terms are OR-matched; add structured filters to narrow. Amounts are validity-filtered (data-entry errors excluded); rolling placeholder deadlines are labeled, never shown as dates.",
      "schema_reference": "notice.search@1",
      "capability_reference": "notice.search@1",
      "input_schema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "query": {
            "type": "string",
            "description": "Keyword terms, space-separated (e.g. 'affordable housing')."
          },
          "section": {
            "type": "string",
            "description": "Exact section, e.g. 'Procurement', 'Public Hearings and Meetings', 'Agency Rules'."
          },
          "agency": {
            "type": "string",
            "description": "Agency name substring."
          },
          "min_amount": {
            "type": "number",
            "description": "Minimum contract amount in dollars (Award notices only carry amounts)."
          },
          "max_amount": {
            "type": "number",
            "description": "Maximum contract amount in dollars."
          },
          "open_only": {
            "type": "boolean",
            "description": "Only notices whose due date hasn't passed."
          },
          "exclude_rolling": {
            "type": "boolean",
            "description": "Drop pre-qualified-list placeholders (year-2090 'deadlines')."
          },
          "limit": {
            "type": "number",
            "description": "Max results (default 15, cap 100)."
          },
          "identifier_path": {
            "type": "string",
            "maxLength": 1024,
            "description": "JSON Pointer to the identifier array named by a continuation."
          },
          "identifier_offset": {
            "type": "integer",
            "minimum": 0,
            "description": "Offset for identifier arrays only; use the returned continuation with unchanged result filters."
          },
          "identifier_limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 10,
            "description": "Maximum identifiers per array; counts and replay continuations accompany sampled arrays."
          }
        }
      },
      "output_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "terms_used",
          "total_matches",
          "retrieval",
          "results"
        ],
        "properties": {
          "terms_used": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "total_matches": {
            "type": "integer",
            "minimum": 0
          },
          "retrieval": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "method",
              "fallback_reason",
              "duration_ms",
              "rows_read",
              "result_count"
            ],
            "properties": {
              "method": {
                "type": "string"
              },
              "fallback_reason": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "duration_ms": {
                "type": "number",
                "minimum": 0
              },
              "rows_read": {
                "type": [
                  "number",
                  "null"
                ],
                "minimum": 0
              },
              "result_count": {
                "type": "integer",
                "minimum": 0
              }
            }
          },
          "results": {
            "type": "array",
            "maxItems": 100,
            "items": {
              "type": "object"
            }
          }
        }
      },
      "bounds": {
        "input": {
          "maximumTermGroups": 64,
          "maximumTermsPerGroup": 64,
          "maximumTermLength": 500,
          "minimum": 1,
          "maximum": 100
        },
        "output": {
          "maximumResults": 100
        }
      },
      "examples": [
        {
          "input": {
            "termGroups": [
              [
                "construction",
                "scaffolding"
              ]
            ],
            "limit": 10
          },
          "output": {
            "availability": "complete",
            "maximumResults": 10
          }
        },
        {
          "input": {
            "termGroups": [],
            "openOnly": true,
            "limit": 1
          },
          "output": {
            "availability": "empty",
            "maximumResults": 1
          }
        }
      ],
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "store_access": "provider-only"
    },
    {
      "name": "get_notice",
      "operation_class": "read",
      "research_response": {
        "maximum_bytes": 65536,
        "byte_basis": "UTF-8 JSON tool result, including content and structuredContent",
        "identifier_default": 10,
        "identifier_maximum": 50,
        "continuation": "Analysis: group.browse and filters.pagination. Other identifier arrays: counts and replay arguments in content, with identifier_offset/identifier_limit.",
        "overflow": "An explicit tool error asks for a smaller page or narrower filters; civic facts are never silently removed."
      },
      "authority_class": "public_read",
      "description": "Get one public City Record notice by its exact RequestID. The result preserves materialized-source freshness and distinguishes a missing public notice from a read that cannot be served.",
      "schema_reference": "notice.get@1",
      "capability_reference": "notice.get@1",
      "input_schema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "request_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80
          },
          "identifier_path": {
            "type": "string",
            "maxLength": 1024,
            "description": "JSON Pointer to the identifier array named by a continuation."
          },
          "identifier_offset": {
            "type": "integer",
            "minimum": 0,
            "description": "Offset for identifier arrays only; use the returned continuation with unchanged result filters."
          },
          "identifier_limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 10,
            "description": "Maximum identifiers per array; counts and replay continuations accompany sampled arrays."
          }
        },
        "required": [
          "request_id"
        ]
      },
      "output_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "capability_reference",
          "availability",
          "notice",
          "source",
          "generated_at",
          "stale",
          "error"
        ],
        "properties": {
          "capability_reference": {
            "type": "string",
            "const": "notice.get@1"
          },
          "availability": {
            "type": "string",
            "enum": [
              "available",
              "not_yet_public",
              "unavailable"
            ]
          },
          "notice": {
            "type": [
              "object",
              "null"
            ]
          },
          "source": {
            "type": [
              "string",
              "null"
            ]
          },
          "generated_at": {
            "type": [
              "string",
              "null"
            ]
          },
          "stale": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "error": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "bounds": {
        "input": {
          "requestIdMaximumLength": 80,
          "maximum": 1
        },
        "output": {
          "oneNotice": true
        }
      },
      "examples": [
        {
          "input": {
            "requestId": "20260807001"
          },
          "output": {
            "availability": "available",
            "source": "materialized",
            "stale": false
          }
        },
        {
          "input": {
            "requestId": "20260807999"
          },
          "output": {
            "availability": "not_yet_public",
            "error": "not-found"
          }
        }
      ],
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "store_access": "provider-only"
    },
    {
      "name": "get_entity_dossier",
      "operation_class": "read",
      "research_response": {
        "maximum_bytes": 65536,
        "byte_basis": "UTF-8 JSON tool result, including content and structuredContent",
        "identifier_default": 10,
        "identifier_maximum": 50,
        "continuation": "Analysis: group.browse and filters.pagination. Other identifier arrays: counts and replay arguments in content, with identifier_offset/identifier_limit.",
        "overflow": "An explicit tool error asks for a smaller page or narrower filters; civic facts are never silently removed."
      },
      "authority_class": "public_read",
      "description": "Get the bounded public dossier for one exact canonical CityScroll entity. Preserves attributed disagreements, availability, provenance, and public redaction.",
      "schema_reference": "entity.dossier.get@1",
      "capability_reference": "entity.dossier.get@1",
      "input_schema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "entity_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 300,
            "description": "Exact canonical CityScroll entity identifier."
          },
          "identifier_path": {
            "type": "string",
            "maxLength": 1024,
            "description": "JSON Pointer to the identifier array named by a continuation."
          },
          "identifier_offset": {
            "type": "integer",
            "minimum": 0,
            "description": "Offset for identifier arrays only; use the returned continuation with unchanged result filters."
          },
          "identifier_limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 10,
            "description": "Maximum identifiers per array; counts and replay continuations accompany sampled arrays."
          }
        },
        "required": [
          "entity_id"
        ]
      },
      "output_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "capability_reference",
          "availability",
          "dossier",
          "error"
        ],
        "properties": {
          "capability_reference": {
            "type": "string",
            "const": "entity.dossier.get@1"
          },
          "availability": {
            "type": "string",
            "enum": [
              "available",
              "not_yet_public",
              "unavailable"
            ]
          },
          "dossier": {
            "type": [
              "object",
              "null"
            ]
          },
          "error": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "bounds": {
        "input": {
          "entityIdMaximumLength": 300,
          "recordLimit": 250
        },
        "output": {
          "maximumLinkedRecords": 250
        }
      },
      "examples": [
        {
          "input": {
            "entityId": "vendor:stem:ACME CONSTRUCTION"
          },
          "output": {
            "availability": "available",
            "maximumLinkedRecords": 250
          }
        },
        {
          "input": {
            "entityId": "vendor:unknown"
          },
          "output": {
            "availability": "not_yet_public",
            "error": "not-found"
          }
        }
      ],
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "store_access": "provider-only"
    },
    {
      "name": "get_entity_relationships",
      "operation_class": "read",
      "research_response": {
        "maximum_bytes": 65536,
        "byte_basis": "UTF-8 JSON tool result, including content and structuredContent",
        "identifier_default": 10,
        "identifier_maximum": 50,
        "continuation": "Analysis: group.browse and filters.pagination. Other identifier arrays: counts and replay arguments in content, with identifier_offset/identifier_limit.",
        "overflow": "An explicit tool error asks for a smaller page or narrower filters; civic facts are never silently removed."
      },
      "authority_class": "public_read",
      "description": "Traverse bounded, evidence-bearing public relationships from one exact canonical CityScroll entity. Only the closed node and edge vocabularies are returned. Published agency graphs give person-leader nodes available_detail: separate dossier availability, an exact leadership read path when available, observation date, confidence, and source limitation.",
      "schema_reference": "entity.relationships.get@1",
      "capability_reference": "entity.relationships.get@1",
      "input_schema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "entity_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 300,
            "description": "Exact canonical CityScroll entity identifier."
          },
          "depth": {
            "type": "integer",
            "minimum": 1,
            "maximum": 2,
            "default": 2
          },
          "fan_out": {
            "type": "integer",
            "minimum": 1,
            "maximum": 25,
            "default": 12
          },
          "node_types": {
            "type": "array",
            "maxItems": 16,
            "uniqueItems": true,
            "items": {
              "type": "string",
              "enum": [
                "vendor",
                "agency",
                "solicitation",
                "contract",
                "award",
                "official",
                "committee",
                "community-board",
                "community-board-committee",
                "person-leader",
                "mandate",
                "project",
                "procedure",
                "borough",
                "community-district",
                "council-district"
              ]
            }
          },
          "edge_types": {
            "type": "array",
            "maxItems": 13,
            "uniqueItems": true,
            "items": {
              "type": "string",
              "enum": [
                "named_vendor_on_award",
                "named_vendor_on_solicitation",
                "published_by_agency",
                "references_contract",
                "votes_on",
                "member_of",
                "agency_led_by",
                "mandate_governs_procedure",
                "project_participates_in_procedure",
                "located_in",
                "covers",
                "intersects",
                "has_committee"
              ]
            }
          },
          "identifier_path": {
            "type": "string",
            "maxLength": 1024,
            "description": "JSON Pointer to the identifier array named by a continuation."
          },
          "identifier_offset": {
            "type": "integer",
            "minimum": 0,
            "description": "Offset for identifier arrays only; use the returned continuation with unchanged result filters."
          },
          "identifier_limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 10,
            "description": "Maximum identifiers per array; counts and replay continuations accompany sampled arrays."
          }
        },
        "required": [
          "entity_id"
        ]
      },
      "output_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "capability_reference",
          "availability",
          "graph",
          "error"
        ],
        "properties": {
          "capability_reference": {
            "type": "string",
            "const": "entity.relationships.get@1"
          },
          "availability": {
            "type": "string",
            "enum": [
              "available",
              "not_yet_public",
              "unavailable"
            ]
          },
          "graph": {
            "type": [
              "object",
              "null"
            ]
          },
          "error": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "bounds": {
        "input": {
          "entityIdMaximumLength": 300,
          "recordLimit": 250,
          "defaultDepth": 2,
          "maximumDepth": 2,
          "defaultFanOut": 12,
          "maximumFanOut": 25
        },
        "output": {
          "maximumEdges": 250
        }
      },
      "examples": [
        {
          "input": {
            "entityId": "vendor:stem:ACME CONSTRUCTION",
            "depth": 2,
            "fanOut": 12
          },
          "output": {
            "availability": "available",
            "maximumDepth": 2,
            "maximumFanOut": 25
          }
        },
        {
          "input": {
            "entityId": "vendor:unknown"
          },
          "output": {
            "availability": "not_yet_public",
            "error": "not-found"
          }
        }
      ],
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "store_access": "provider-only"
    },
    {
      "name": "retrieve_cited_passages",
      "operation_class": "read",
      "research_response": {
        "maximum_bytes": 65536,
        "byte_basis": "UTF-8 JSON tool result, including content and structuredContent",
        "identifier_default": 10,
        "identifier_maximum": 50,
        "continuation": "Analysis: group.browse and filters.pagination. Other identifier arrays: counts and replay arguments in content, with identifier_offset/identifier_limit.",
        "overflow": "An explicit tool error asks for a smaller page or narrower filters; civic facts are never silently removed."
      },
      "authority_class": "public_read",
      "description": "Retrieve source passages with stable citations and exact source joins. Returns source text only. hard_scope.corpus includes observed_on, source_families with coverage and source publication-date bounds, record_count, and passage_count even when no citations match. It does not generate an answer or infer civic relationships.",
      "schema_reference": "cited.passages.retrieve@1",
      "capability_reference": "cited.passages.retrieve@1",
      "input_schema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "query": {
            "type": "string",
            "minLength": 1,
            "maxLength": 240,
            "description": "The resident's original search terms."
          },
          "source_family": {
            "type": "string",
            "enum": [
              "attachment_text",
              "city_record_notice",
              "community_board_minutes"
            ]
          },
          "body_id": {
            "type": "string",
            "maxLength": 120,
            "description": "Exact civic body identifier."
          },
          "published_from": {
            "type": "string",
            "format": "date"
          },
          "published_to": {
            "type": "string",
            "format": "date"
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 10
          },
          "identifier_path": {
            "type": "string",
            "maxLength": 1024,
            "description": "JSON Pointer to the identifier array named by a continuation."
          },
          "identifier_offset": {
            "type": "integer",
            "minimum": 0,
            "description": "Offset for identifier arrays only; use the returned continuation with unchanged result filters."
          },
          "identifier_limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 10,
            "description": "Maximum identifiers per array; counts and replay continuations accompany sampled arrays."
          }
        },
        "required": [
          "query"
        ]
      },
      "output_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schema",
          "contract_version",
          "query",
          "retrieval",
          "hard_scope",
          "coverage",
          "citations"
        ],
        "properties": {
          "schema": {
            "type": "string",
            "const": "cityscroll.semantic_retrieval.cited_passage_response.v1"
          },
          "contract_version": {
            "type": "integer",
            "const": 1
          },
          "query": {
            "type": "string",
            "minLength": 1,
            "maxLength": 240
          },
          "retrieval": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "method",
              "corpus",
              "index"
            ],
            "properties": {
              "method": {
                "type": "string"
              },
              "corpus": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "schema",
                  "manifest_version",
                  "manifest_sha256",
                  "content_sha256",
                  "observed_on"
                ],
                "properties": {
                  "schema": {
                    "type": "string",
                    "const": "cityscroll.semantic_retrieval.corpus_manifest.v1"
                  },
                  "manifest_version": {
                    "type": "integer",
                    "const": 1
                  },
                  "manifest_sha256": {
                    "type": "string",
                    "pattern": "^[a-f0-9]{64}$"
                  },
                  "content_sha256": {
                    "type": "string",
                    "pattern": "^[a-f0-9]{64}$"
                  },
                  "observed_on": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "index": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "schema",
                  "version",
                  "corpus_sha256",
                  "observed_on"
                ],
                "properties": {
                  "schema": {
                    "type": "string",
                    "const": "cityscroll.semantic_retrieval.source_passage_map.v1"
                  },
                  "version": {
                    "type": "string",
                    "pattern": "^[a-f0-9]{64}$"
                  },
                  "corpus_sha256": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "observed_on": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              }
            }
          },
          "hard_scope": {
            "type": "object",
            "properties": {
              "corpus": {
                "type": "object",
                "required": [
                  "observed_on",
                  "source_families",
                  "coverage",
                  "record_count",
                  "passage_count"
                ],
                "properties": {
                  "observed_on": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "source_families": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "required": [
                        "source_family",
                        "observed_on",
                        "coverage",
                        "record_count",
                        "source_published_at_min",
                        "source_published_at_max"
                      ],
                      "properties": {
                        "source_family": {
                          "type": "string",
                          "enum": [
                            "attachment_text",
                            "city_record_notice",
                            "community_board_minutes"
                          ]
                        },
                        "observed_on": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "coverage": {
                          "type": "object"
                        },
                        "record_count": {
                          "type": "integer",
                          "minimum": 0
                        },
                        "source_published_at_min": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "source_published_at_max": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      }
                    }
                  },
                  "coverage": {
                    "type": "object"
                  },
                  "record_count": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "passage_count": {
                    "type": "integer",
                    "minimum": 0
                  }
                }
              }
            }
          },
          "coverage": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "state",
              "boundary"
            ],
            "properties": {
              "state": {
                "type": "string",
                "enum": [
                  "partial",
                  "complete",
                  "unknown"
                ]
              },
              "boundary": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "citations": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "citation_id",
                "source",
                "passage",
                "coverage_state",
                "freshness",
                "exact_join_evidence"
              ],
              "properties": {
                "citation_id": {
                  "type": "string"
                },
                "source": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "id",
                    "family",
                    "native_id",
                    "url",
                    "canonical_href",
                    "title"
                  ],
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "family": {
                      "type": "string",
                      "enum": [
                        "attachment_text",
                        "city_record_notice",
                        "community_board_minutes"
                      ]
                    },
                    "native_id": {
                      "type": "string"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "canonical_href": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "title": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                },
                "passage": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "id",
                    "text",
                    "text_state",
                    "boundary"
                  ],
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "text": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "text_state": {
                      "type": "string",
                      "enum": [
                        "retained",
                        "unknown"
                      ]
                    },
                    "boundary": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "unit",
                        "start",
                        "end"
                      ],
                      "properties": {
                        "unit": {
                          "type": "string",
                          "const": "utf16_code_unit"
                        },
                        "start": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        },
                        "end": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                },
                "coverage_state": {
                  "type": "string",
                  "enum": [
                    "partial",
                    "complete",
                    "unknown"
                  ]
                },
                "freshness": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "state",
                    "observed_on",
                    "source_published_at"
                  ],
                  "properties": {
                    "state": {
                      "type": "string",
                      "enum": [
                        "observed",
                        "stale",
                        "unknown"
                      ]
                    },
                    "observed_on": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "source_published_at": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                },
                "exact_join_evidence": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "state",
                    "method",
                    "candidate_id",
                    "source_record_id",
                    "passage_id"
                  ],
                  "properties": {
                    "state": {
                      "type": "string",
                      "enum": [
                        "matched",
                        "unknown"
                      ]
                    },
                    "method": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "candidate_id": {
                      "type": "string"
                    },
                    "source_record_id": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "passage_id": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                }
              }
            }
          }
        }
      },
      "bounds": {
        "input": {
          "queryMaximumLength": 240,
          "bodyIdMaximumLength": 120,
          "defaultResults": 10,
          "maximumResults": 20
        },
        "output": {
          "maximumCitations": 20
        }
      },
      "examples": [
        {
          "input": {
            "query": "energy conservation",
            "filters": {
              "source_family": "city_record_notice"
            },
            "limit": 5
          },
          "output": {
            "availability": "partial",
            "maximumCitations": 5,
            "exactJoin": "matched-or-unknown"
          }
        },
        {
          "input": {
            "query": "public hearing",
            "limit": 10
          },
          "output": {
            "availability": "complete-or-partial-or-unknown",
            "maximumCitations": 10,
            "exactJoin": "matched-or-unknown"
          }
        }
      ],
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "store_access": "provider-only"
    },
    {
      "name": "get_contract",
      "operation_class": "read",
      "research_response": {
        "maximum_bytes": 65536,
        "byte_basis": "UTF-8 JSON tool result, including content and structuredContent",
        "identifier_default": 10,
        "identifier_maximum": 50,
        "continuation": "Analysis: group.browse and filters.pagination. Other identifier arrays: counts and replay arguments in content, with identifier_offset/identifier_limit.",
        "overflow": "An explicit tool error asks for a smaller page or narrower filters; civic facts are never silently removed."
      },
      "authority_class": "public_read",
      "description": "Get one public contract by its exact ID. Uses the same Contracts record as CityScroll. Includes source links, coverage, freshness, amount validity, and lifecycle facts when available.",
      "schema_reference": "contract.get@1",
      "capability_reference": "contract.get@1",
      "input_schema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "procurement_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 320,
            "description": "Exact canonical procurement_id, including its procurement: prefix."
          },
          "identifier_path": {
            "type": "string",
            "maxLength": 1024,
            "description": "JSON Pointer to the identifier array named by a continuation."
          },
          "identifier_offset": {
            "type": "integer",
            "minimum": 0,
            "description": "Offset for identifier arrays only; use the returned continuation with unchanged result filters."
          },
          "identifier_limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 10,
            "description": "Maximum identifiers per array; counts and replay continuations accompany sampled arrays."
          }
        },
        "required": [
          "procurement_id"
        ]
      },
      "output_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "capability_reference",
          "availability",
          "contract",
          "error"
        ],
        "properties": {
          "capability_reference": {
            "type": "string",
            "const": "contract.get@1"
          },
          "availability": {
            "type": "string",
            "enum": [
              "available",
              "not_yet_public",
              "unavailable"
            ]
          },
          "contract": {
            "type": [
              "object",
              "null"
            ]
          },
          "error": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "bounds": {
        "input": {
          "procurementIdMaximumLength": 320,
          "maximum": 1
        },
        "output": {
          "oneContract": true
        }
      },
      "examples": [
        {
          "input": {
            "procurementId": "procurement:contract:20211201861"
          },
          "output": {
            "availability": "available",
            "exactIdentity": true,
            "lifecycle": "preserved when present"
          }
        },
        {
          "input": {
            "procurementId": "procurement:contract:not-published"
          },
          "output": {
            "availability": "not_yet_public",
            "error": "not-found"
          }
        }
      ],
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "store_access": "provider-only"
    },
    {
      "name": "browse_contracts",
      "operation_class": "read",
      "research_response": {
        "maximum_bytes": 65536,
        "byte_basis": "UTF-8 JSON tool result, including content and structuredContent",
        "identifier_default": 10,
        "identifier_maximum": 50,
        "continuation": "Analysis: group.browse and filters.pagination. Other identifier arrays: counts and replay arguments in content, with identifier_offset/identifier_limit.",
        "overflow": "An explicit tool error asks for a smaller page or narrower filters; civic facts are never silently removed."
      },
      "authority_class": "public_read",
      "description": "List public Contracts records with bounded filters and pages. Results keep exact contract IDs separate, including records that share a PIN. Use population=registered with the analysis continuation arguments for exact analytical groups: this returns registration id, procurement_id and href, including registrations with no detail record.",
      "schema_reference": "contracts.browse@1",
      "capability_reference": "contracts.browse@1",
      "input_schema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "population": {
            "type": "string",
            "enum": [
              "registered"
            ],
            "description": "Exact registered-contract population; agency and vendor use case-sensitive analytical labels in this mode."
          },
          "fiscal_year": {
            "type": "integer",
            "minimum": 1900,
            "maximum": 2200
          },
          "amount_band": {
            "type": "string",
            "maxLength": 240
          },
          "retroactive": {
            "type": "boolean"
          },
          "city_record_match": {
            "type": "string",
            "enum": [
              "exact",
              "none",
              "cannot_evaluate_missing_pin"
            ]
          },
          "group_by": {
            "type": "string",
            "enum": [
              "agency",
              "vendor",
              "registration_fiscal_year",
              "amount_band"
            ]
          },
          "group_label": {
            "type": "string",
            "maxLength": 240,
            "description": "Exact analytical group label, including Unknown / not published; requires group_by."
          },
          "query": {
            "type": "string",
            "maxLength": 240,
            "description": "Case-insensitive terms matched against the existing Contracts browse fields."
          },
          "agency": {
            "type": "string",
            "maxLength": 240,
            "description": "Case-insensitive agency substring."
          },
          "vendor": {
            "type": "string",
            "maxLength": 240,
            "description": "Case-insensitive vendor substring."
          },
          "stage": {
            "type": "string",
            "maxLength": 240,
            "description": "Exact lifecycle stage."
          },
          "source_system": {
            "type": "string",
            "maxLength": 240,
            "description": "Exact source-system value."
          },
          "min_amount": {
            "type": "number",
            "description": "Inclusive valid public amount floor."
          },
          "max_amount": {
            "type": "number",
            "description": "Inclusive valid public amount ceiling."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 25
          },
          "cursor": {
            "type": "string",
            "maxLength": 320,
            "description": "Opaque cursor returned by the previous page."
          },
          "identifier_path": {
            "type": "string",
            "maxLength": 1024,
            "description": "JSON Pointer to the identifier array named by a continuation."
          },
          "identifier_offset": {
            "type": "integer",
            "minimum": 0,
            "description": "Offset for identifier arrays only; use the returned continuation with unchanged result filters."
          },
          "identifier_limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 10,
            "description": "Maximum identifiers per array; counts and replay continuations accompany sampled arrays."
          }
        }
      },
      "output_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "capability_reference",
          "availability",
          "results",
          "total_matches",
          "pagination",
          "coverage",
          "freshness",
          "error"
        ],
        "properties": {
          "capability_reference": {
            "type": "string",
            "const": "contracts.browse@1"
          },
          "availability": {
            "type": "string",
            "enum": [
              "complete",
              "empty",
              "unavailable"
            ]
          },
          "results": {
            "type": [
              "array",
              "null"
            ],
            "maxItems": 100,
            "items": {
              "type": "object"
            }
          },
          "total_matches": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0
          },
          "pagination": {
            "type": [
              "object",
              "null"
            ]
          },
          "coverage": {
            "type": [
              "object",
              "null"
            ]
          },
          "freshness": {
            "type": [
              "object",
              "null"
            ]
          },
          "error": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "bounds": {
        "input": {
          "filterMaximumLength": 240,
          "cursorMaximumLength": 320,
          "minimum": 1,
          "maximum": 100,
          "default": 25
        },
        "output": {
          "maximumResults": 100
        }
      },
      "examples": [
        {
          "input": {
            "agency": "design and construction",
            "stage": "award",
            "limit": 10
          },
          "output": {
            "availability": "complete",
            "maximumResults": 10,
            "oneRowPer": "exact procurement_id"
          }
        },
        {
          "input": {
            "sourceSystem": "passport_public_contracts",
            "limit": 25
          },
          "output": {
            "availability": "complete",
            "pagination": "cursor when more rows remain"
          }
        }
      ],
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "store_access": "provider-only"
    },
    {
      "name": "analyze_contracts",
      "operation_class": "read",
      "research_response": {
        "maximum_bytes": 65536,
        "byte_basis": "UTF-8 JSON tool result, including content and structuredContent",
        "identifier_default": 10,
        "identifier_maximum": 50,
        "continuation": "Analysis: group.browse and filters.pagination. Other identifier arrays: counts and replay arguments in content, with identifier_offset/identifier_limit.",
        "overflow": "An explicit tool error asks for a smaller page or narrower filters; civic facts are never silently removed."
      },
      "authority_class": "public_read",
      "description": "Rank groups by agency, vendor, fiscal year, or amount band. Uses the registered-contract population. Reports registered value or contract count, a scope denominator, and coverage. Each group gives contract_count, contract_sample (default 10, maximum 50; id, procurement_id, canonical href), and an exact browse_contracts continuation. Null procurement_id/href means no individual detail record is published. Groups are paginated in filters.pagination to keep research responses below 64 KiB; repeat the same filters with next_cursor. Does not report payments or spending. Omit agency to discover filters.discovery.agency.accepted_labels; retry an unrecognized label using a suggested exact label. fiscal_year is derived from registration date, July 1 through June 30.",
      "schema_reference": "contracts.analysis@1",
      "capability_reference": "contracts.analysis@1",
      "input_schema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "sample_limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 10
          },
          "cursor": {
            "type": "string",
            "maxLength": 32,
            "pattern": "^groups:[0-9]+$",
            "description": "filters.pagination.next_cursor; repeat all other arguments unchanged."
          },
          "group_by": {
            "type": "string",
            "enum": [
              "agency",
              "vendor",
              "registration_fiscal_year",
              "amount_band"
            ],
            "default": "agency",
            "description": "Grouping dimension."
          },
          "measure": {
            "type": "string",
            "enum": [
              "current",
              "original",
              "count"
            ],
            "default": "current",
            "description": "current or original registered contract value, or unique contract count."
          },
          "agency": {
            "type": "string",
            "maxLength": 240,
            "description": "Exact case-sensitive label from filters.discovery.agency.accepted_labels; omit agency to discover the set."
          },
          "vendor": {
            "type": "string",
            "maxLength": 240
          },
          "fiscal_year": {
            "type": "integer",
            "description": "NYC registration fiscal year, July 1 of the preceding year through June 30, derived from registration date."
          },
          "amount_band": {
            "type": "string",
            "maxLength": 240
          },
          "min_amount": {
            "type": "number"
          },
          "max_amount": {
            "type": "number"
          },
          "retroactive": {
            "type": "boolean"
          },
          "city_record_match": {
            "type": "string",
            "enum": [
              "exact",
              "none",
              "cannot_evaluate_missing_pin"
            ]
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 10
          },
          "identifier_path": {
            "type": "string",
            "maxLength": 1024,
            "description": "JSON Pointer to the identifier array named by a continuation."
          },
          "identifier_offset": {
            "type": "integer",
            "minimum": 0,
            "description": "Offset for identifier arrays only; use the returned continuation with unchanged result filters."
          },
          "identifier_limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 10,
            "description": "Maximum identifiers per array; counts and replay continuations accompany sampled arrays."
          }
        }
      },
      "output_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "capability_reference",
          "availability",
          "group_by",
          "measure",
          "groups",
          "denominator",
          "population",
          "coverage",
          "contract_detail",
          "filters",
          "freshness",
          "error"
        ],
        "properties": {
          "capability_reference": {
            "type": "string",
            "const": "contracts.analysis@1"
          },
          "availability": {
            "type": "string",
            "enum": [
              "complete",
              "empty",
              "unavailable"
            ]
          },
          "group_by": {
            "type": "string",
            "enum": [
              "agency",
              "vendor",
              "registration_fiscal_year",
              "amount_band"
            ]
          },
          "measure": {
            "type": "object"
          },
          "groups": {
            "type": [
              "array",
              "null"
            ],
            "maxItems": 100,
            "items": {
              "type": "object"
            }
          },
          "denominator": {
            "type": [
              "object",
              "null"
            ]
          },
          "population": {
            "type": [
              "object",
              "null"
            ]
          },
          "coverage": {
            "type": [
              "object",
              "null"
            ]
          },
          "contract_detail": {
            "type": [
              "object",
              "null"
            ]
          },
          "filters": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "discovery": {
                "type": "object",
                "required": [
                  "agency",
                  "fiscal_year"
                ],
                "properties": {
                  "agency": {
                    "type": "object",
                    "required": [
                      "match",
                      "accepted_labels",
                      "requested_label",
                      "status",
                      "suggestions",
                      "message"
                    ],
                    "properties": {
                      "match": {
                        "const": "exact_label"
                      },
                      "status": {
                        "enum": [
                          "not_requested",
                          "recognized",
                          "unrecognized"
                        ]
                      },
                      "accepted_labels": {
                        "type": "array",
                        "uniqueItems": true,
                        "items": {
                          "type": "string"
                        }
                      },
                      "requested_label": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "suggestions": {
                        "type": "array",
                        "maxItems": 5,
                        "items": {
                          "type": "string"
                        }
                      },
                      "message": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    }
                  },
                  "fiscal_year": {
                    "type": "object",
                    "required": [
                      "field",
                      "definition",
                      "accepted_values",
                      "requested_value",
                      "period_start",
                      "period_end"
                    ],
                    "properties": {
                      "field": {
                        "const": "registration_fiscal_year"
                      },
                      "definition": {
                        "type": "string"
                      },
                      "accepted_values": {
                        "type": "array",
                        "uniqueItems": true,
                        "items": {
                          "type": "integer"
                        }
                      },
                      "requested_value": {
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "period_start": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "period_end": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "freshness": {
            "type": [
              "object",
              "null"
            ]
          },
          "error": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "bounds": {
        "input": {
          "filterMaximumLength": 240,
          "minimumGroups": 1,
          "maximumGroups": 100,
          "defaultGroups": 10,
          "defaultSample": 10,
          "maximumSample": 50,
          "maximumResponseBytes": 57344
        },
        "output": {
          "maximumGroups": 100,
          "maximumSample": 50,
          "maximumBytes": 57344,
          "pagination": "filters.pagination; pages may be shorter than limit to fit the byte budget",
          "legacyIdentifiers": "HTTP identifiers=full only; outside the research response budget"
        }
      },
      "examples": [
        {
          "input": {
            "groupBy": "agency",
            "measure": "current",
            "fiscalYear": 2027,
            "limit": 10
          },
          "output": {
            "availability": "complete",
            "measure": "current registered contract value in USD",
            "denominator": "selected filtered population value"
          }
        },
        {
          "input": {
            "groupBy": "vendor",
            "measure": "count",
            "agency": "Department of Education"
          },
          "output": {
            "availability": "complete",
            "measure": "unique registered contracts",
            "drillThrough": "contract_sample and exact registered-population contracts.browse@1 continuation"
          }
        }
      ],
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "store_access": "provider-only"
    },
    {
      "name": "get_person_or_organization",
      "operation_class": "read",
      "research_response": {
        "maximum_bytes": 65536,
        "byte_basis": "UTF-8 JSON tool result, including content and structuredContent",
        "identifier_default": 10,
        "identifier_maximum": 50,
        "continuation": "Analysis: group.browse and filters.pagination. Other identifier arrays: counts and replay arguments in content, with identifier_offset/identifier_limit.",
        "overflow": "An explicit tool error asks for a smaller page or narrower filters; civic facts are never silently removed."
      },
      "authority_class": "public_read",
      "description": "Get one exact typed person or organization row from the published People and organizations read model. Display names never create identity; relation states and source fields are preserved.",
      "schema_reference": "people.get@1",
      "capability_reference": "people.get@1",
      "input_schema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "entity_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 320,
            "description": "Exact row id such as official:... or agency:id:..."
          },
          "identifier_path": {
            "type": "string",
            "maxLength": 1024,
            "description": "JSON Pointer to the identifier array named by a continuation."
          },
          "identifier_offset": {
            "type": "integer",
            "minimum": 0,
            "description": "Offset for identifier arrays only; use the returned continuation with unchanged result filters."
          },
          "identifier_limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 10,
            "description": "Maximum identifiers per array; counts and replay continuations accompany sampled arrays."
          }
        },
        "required": [
          "entity_id"
        ]
      },
      "output_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "capability_reference",
          "availability",
          "person_or_organization",
          "error"
        ],
        "properties": {
          "capability_reference": {
            "type": "string",
            "const": "people.get@1"
          },
          "availability": {
            "type": "string",
            "enum": [
              "available",
              "not_yet_public",
              "unavailable"
            ]
          },
          "person_or_organization": {
            "type": [
              "object",
              "null"
            ]
          },
          "error": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "bounds": {
        "input": {
          "entityIdMaximumLength": 320,
          "maximum": 1
        },
        "output": {
          "oneRow": true
        }
      },
      "examples": [
        {
          "input": {
            "entityId": "official:example"
          },
          "output": {
            "availability": "available",
            "exactIdentity": true
          }
        },
        {
          "input": {
            "entityId": "agency:id:not-published"
          },
          "output": {
            "availability": "not_yet_public",
            "error": "not-found"
          }
        }
      ],
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "store_access": "provider-only"
    },
    {
      "name": "browse_organizations",
      "operation_class": "read",
      "research_response": {
        "maximum_bytes": 65536,
        "byte_basis": "UTF-8 JSON tool result, including content and structuredContent",
        "identifier_default": 10,
        "identifier_maximum": 50,
        "continuation": "Analysis: group.browse and filters.pagination. Other identifier arrays: counts and replay arguments in content, with identifier_offset/identifier_limit.",
        "overflow": "An explicit tool error asks for a smaller page or narrower filters; civic facts are never silently removed."
      },
      "authority_class": "public_read",
      "description": "Browse the bounded typed People and organizations snapshot with exact row-kind and token filters. Results retain published, empty, or unknown relation states and read-model freshness.",
      "schema_reference": "organizations.browse@1",
      "capability_reference": "organizations.browse@1",
      "input_schema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "query": {
            "type": "string",
            "maxLength": 240
          },
          "kind": {
            "type": "string",
            "enum": [
              "official",
              "exact-person-appointment",
              "notice-only-hire",
              "agency",
              "vendor",
              "committee",
              "community-board",
              "community-board-person",
              "community-board-committee"
            ]
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 25
          },
          "cursor": {
            "type": "string",
            "maxLength": 320
          },
          "identifier_path": {
            "type": "string",
            "maxLength": 1024,
            "description": "JSON Pointer to the identifier array named by a continuation."
          },
          "identifier_offset": {
            "type": "integer",
            "minimum": 0,
            "description": "Offset for identifier arrays only; use the returned continuation with unchanged result filters."
          },
          "identifier_limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 10,
            "description": "Maximum identifiers per array; counts and replay continuations accompany sampled arrays."
          }
        }
      },
      "output_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "capability_reference",
          "availability",
          "results",
          "total_matches",
          "pagination",
          "coverage",
          "freshness",
          "error"
        ],
        "properties": {
          "capability_reference": {
            "type": "string",
            "const": "organizations.browse@1"
          },
          "availability": {
            "type": "string",
            "enum": [
              "complete",
              "empty",
              "unavailable"
            ]
          },
          "results": {
            "type": [
              "array",
              "null"
            ],
            "maxItems": 100,
            "items": {
              "type": "object"
            }
          },
          "total_matches": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0
          },
          "pagination": {
            "type": [
              "object",
              "null"
            ]
          },
          "coverage": {
            "type": [
              "object",
              "null"
            ]
          },
          "freshness": {
            "type": [
              "object",
              "null"
            ]
          },
          "error": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "bounds": {
        "input": {
          "queryMaximumLength": 240,
          "kindMaximumLength": 80,
          "cursorMaximumLength": 320,
          "minimum": 1,
          "maximum": 100,
          "default": 25
        },
        "output": {
          "maximumResults": 100
        }
      },
      "examples": [
        {
          "input": {
            "kind": "agency",
            "limit": 10
          },
          "output": {
            "availability": "complete",
            "maximumResults": 10,
            "oneRowPer": "exact read-model row id"
          }
        },
        {
          "input": {
            "query": "community board",
            "limit": 25
          },
          "output": {
            "availability": "complete",
            "pagination": "cursor when more rows remain"
          }
        }
      ],
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "store_access": "provider-only"
    },
    {
      "name": "get_meeting",
      "operation_class": "read",
      "research_response": {
        "maximum_bytes": 65536,
        "byte_basis": "UTF-8 JSON tool result, including content and structuredContent",
        "identifier_default": 10,
        "identifier_maximum": 50,
        "continuation": "Analysis: group.browse and filters.pagination. Other identifier arrays: counts and replay arguments in content, with identifier_offset/identifier_limit.",
        "overflow": "An explicit tool error asks for a smaller page or narrower filters; civic facts are never silently removed."
      },
      "authority_class": "public_read",
      "description": "Get one exact source-qualified meeting from the shared CityScroll meeting read model. Preserves source receipt, coverage, freshness, and attached meeting documents. source_presence, source_observation, minutes, and city_record_join are independent states; no notice join does not mean no source meeting.",
      "schema_reference": "meeting.get@1",
      "capability_reference": "meeting.get@1",
      "input_schema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "meeting_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 320,
            "description": "Exact canonical meeting id, including its meeting: prefix."
          },
          "identifier_path": {
            "type": "string",
            "maxLength": 1024,
            "description": "JSON Pointer to the identifier array named by a continuation."
          },
          "identifier_offset": {
            "type": "integer",
            "minimum": 0,
            "description": "Offset for identifier arrays only; use the returned continuation with unchanged result filters."
          },
          "identifier_limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 10,
            "description": "Maximum identifiers per array; counts and replay continuations accompany sampled arrays."
          }
        },
        "required": [
          "meeting_id"
        ]
      },
      "output_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "capability_reference",
          "availability",
          "meeting",
          "source",
          "coverage",
          "freshness",
          "error"
        ],
        "properties": {
          "capability_reference": {
            "type": "string",
            "const": "meeting.get@1"
          },
          "availability": {
            "type": "string",
            "enum": [
              "available",
              "not_yet_public",
              "unavailable"
            ]
          },
          "meeting": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "source_presence": {
                "type": "object",
                "required": [
                  "status",
                  "publisher_identifier"
                ],
                "properties": {
                  "status": {
                    "const": "present"
                  },
                  "publisher_identifier": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "source_observation": {
                "type": "object",
                "required": [
                  "observed_at",
                  "observed_on"
                ],
                "properties": {
                  "observed_at": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "observed_on": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "minutes": {
                "type": "object",
                "required": [
                  "status",
                  "checked_at"
                ],
                "properties": {
                  "status": {
                    "type": "string",
                    "description": "Publisher minutes freshness status, or unknown when not supplied."
                  },
                  "checked_at": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "city_record_join": {
                "type": "object",
                "required": [
                  "status",
                  "reason",
                  "scope"
                ],
                "properties": {
                  "status": {
                    "enum": [
                      "source_record",
                      "matched",
                      "none",
                      "unknown"
                    ]
                  },
                  "reason": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "scope": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "source": {
            "type": [
              "object",
              "null"
            ]
          },
          "coverage": {
            "type": [
              "object",
              "null"
            ]
          },
          "freshness": {
            "type": [
              "object",
              "null"
            ]
          },
          "error": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "bounds": {
        "input": {
          "meetingIdMaximumLength": 320,
          "maximum": 1
        },
        "output": {
          "maximumResults": 1
        }
      },
      "examples": [
        {
          "input": {
            "meetingId": "meeting:city_record:20260810053"
          },
          "output": {
            "availability": "available",
            "source": "city_record",
            "exactIdentity": true
          }
        },
        {
          "input": {
            "meetingId": "meeting:community_board:unpublished"
          },
          "output": {
            "availability": "not_yet_public",
            "error": "not-found"
          }
        }
      ],
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "store_access": "provider-only"
    },
    {
      "name": "get_land_project",
      "operation_class": "read",
      "research_response": {
        "maximum_bytes": 65536,
        "byte_basis": "UTF-8 JSON tool result, including content and structuredContent",
        "identifier_default": 10,
        "identifier_maximum": 50,
        "continuation": "Analysis: group.browse and filters.pagination. Other identifier arrays: counts and replay arguments in content, with identifier_offset/identifier_limit.",
        "overflow": "An explicit tool error asks for a smaller page or narrower filters; civic facts are never silently removed."
      },
      "authority_class": "public_read",
      "description": "Get one exact Land (ZAP) project by its ZAP project id. Includes its deep link, status, geography, applicant, review procedure, exact actions and ids, environmental facts, milestones, outcomes, sources, and any conflicts, when known.",
      "schema_reference": "land.project.get@1",
      "capability_reference": "land.project.get@1",
      "input_schema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "project_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 32,
            "description": "Exact publisher ZAP project id, e.g. 2024Q0356."
          },
          "identifier_path": {
            "type": "string",
            "maxLength": 1024,
            "description": "JSON Pointer to the identifier array named by a continuation."
          },
          "identifier_offset": {
            "type": "integer",
            "minimum": 0,
            "description": "Offset for identifier arrays only; use the returned continuation with unchanged result filters."
          },
          "identifier_limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 10,
            "description": "Maximum identifiers per array; counts and replay continuations accompany sampled arrays."
          }
        },
        "required": [
          "project_id"
        ]
      },
      "output_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "capability_reference",
          "availability",
          "project",
          "error"
        ],
        "properties": {
          "capability_reference": {
            "type": "string",
            "const": "land.project.get@1"
          },
          "availability": {
            "type": "string",
            "enum": [
              "available",
              "not_yet_public",
              "unavailable"
            ]
          },
          "project": {
            "type": [
              "object",
              "null"
            ]
          },
          "error": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "bounds": {
        "input": {
          "projectIdMaximumLength": 32,
          "maximum": 1
        },
        "output": {
          "oneProject": true
        }
      },
      "examples": [
        {
          "input": {
            "projectId": "2024Q0356"
          },
          "output": {
            "availability": "available",
            "exactIdentity": true,
            "procedureResolution": "preserved when resolvable"
          }
        },
        {
          "input": {
            "projectId": "not-a-real-project"
          },
          "output": {
            "availability": "not_yet_public",
            "error": "not-found"
          }
        }
      ],
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "store_access": "provider-only"
    },
    {
      "name": "browse_land_projects",
      "operation_class": "read",
      "research_response": {
        "maximum_bytes": 65536,
        "byte_basis": "UTF-8 JSON tool result, including content and structuredContent",
        "identifier_default": 10,
        "identifier_maximum": 50,
        "continuation": "Analysis: group.browse and filters.pagination. Other identifier arrays: counts and replay arguments in content, with identifier_offset/identifier_limit.",
        "overflow": "An explicit tool error asks for a smaller page or narrower filters; civic facts are never silently removed."
      },
      "authority_class": "public_read",
      "description": "List public Land (ZAP) projects using the same filters as the Land page: review procedure, action type, stage, effect, and geography. Reads the full warehouse, not just active projects, so completed and past projects stay reachable too.",
      "schema_reference": "land.projects.browse@1",
      "capability_reference": "land.projects.browse@1",
      "input_schema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "status": {
            "type": "string",
            "maxLength": 240,
            "description": "Exact publisher public/project status, e.g. 'public:Noticed' or 'project:Active'. Omit for every status — never active-only."
          },
          "query": {
            "type": "string",
            "maxLength": 240,
            "description": "Case-insensitive terms matched against the existing Land browse row text."
          },
          "procedure": {
            "type": "string",
            "enum": [
              "review",
              "ulurp",
              "elurp",
              "non_ulurp"
            ],
            "description": "Resident review-procedure facet."
          },
          "family": {
            "type": "string",
            "enum": [
              "any",
              "acquisition",
              "disposition",
              "certification",
              "renewal",
              "major_concession",
              "legal_document",
              "rezoning",
              "special_permit",
              "authorization",
              "site_selection",
              "mapping",
              "demapping",
              "urban_renewal",
              "landmark",
              "follow_up",
              "office_space",
              "bid",
              "franchise_consent",
              "housing_plan",
              "pops",
              "landfill"
            ],
            "description": "Resident closed action-family facet."
          },
          "stage": {
            "type": "string",
            "enum": [
              "any",
              "active",
              "public_review",
              "pre_certification",
              "community_board",
              "borough_president",
              "cpc",
              "city_council",
              "completed"
            ],
            "description": "Resident review-stage facet."
          },
          "regulatory_effect": {
            "type": "string",
            "enum": [
              "any",
              "upzone",
              "downzone",
              "mixed",
              "no_density_change"
            ],
            "description": "Resident regulatory-effect facet."
          },
          "borough": {
            "type": "string",
            "maxLength": 240,
            "description": "Exact borough name."
          },
          "community_district": {
            "type": "string",
            "maxLength": 240,
            "description": "Borough-lettered community district substring, e.g. K02."
          },
          "council_district": {
            "type": "string",
            "maxLength": 240,
            "description": "Council district number."
          },
          "corpus": {
            "type": "string",
            "enum": [
              "live",
              "historical"
            ],
            "description": "'live' (default) reads the current committed complete warehouse. 'historical' reads the frozen four-project expedited-procedure regression corpus, for reproducible verification."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 25
          },
          "cursor": {
            "type": "string",
            "maxLength": 320,
            "description": "Opaque cursor returned by the previous page."
          },
          "identifier_path": {
            "type": "string",
            "maxLength": 1024,
            "description": "JSON Pointer to the identifier array named by a continuation."
          },
          "identifier_offset": {
            "type": "integer",
            "minimum": 0,
            "description": "Offset for identifier arrays only; use the returned continuation with unchanged result filters."
          },
          "identifier_limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 10,
            "description": "Maximum identifiers per array; counts and replay continuations accompany sampled arrays."
          }
        }
      },
      "output_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "capability_reference",
          "availability",
          "results",
          "total_matches",
          "pagination",
          "coverage",
          "freshness",
          "error"
        ],
        "properties": {
          "capability_reference": {
            "type": "string",
            "const": "land.projects.browse@1"
          },
          "availability": {
            "type": "string",
            "enum": [
              "complete",
              "empty",
              "unavailable"
            ]
          },
          "results": {
            "type": [
              "array",
              "null"
            ],
            "maxItems": 100,
            "items": {
              "type": "object"
            }
          },
          "total_matches": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0
          },
          "pagination": {
            "type": [
              "object",
              "null"
            ]
          },
          "coverage": {
            "type": [
              "object",
              "null"
            ]
          },
          "freshness": {
            "type": [
              "object",
              "null"
            ]
          },
          "error": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "bounds": {
        "input": {
          "filterMaximumLength": 240,
          "cursorMaximumLength": 320,
          "minimum": 1,
          "maximum": 100,
          "default": 25
        },
        "output": {
          "maximumResults": 100
        }
      },
      "examples": [
        {
          "input": {
            "procedure": "elurp",
            "corpus": "historical"
          },
          "output": {
            "availability": "complete",
            "oneRowPer": "exact project_id",
            "fixedPopulation": "the frozen four-project expedited corpus"
          }
        },
        {
          "input": {
            "procedure": "elurp",
            "limit": 25
          },
          "output": {
            "availability": "complete",
            "pagination": "cursor when more rows remain",
            "fixedPopulation": "none — reflects the current committed warehouse"
          }
        }
      ],
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "store_access": "provider-only"
    },
    {
      "name": "get_land_decision_path",
      "operation_class": "read",
      "research_response": {
        "maximum_bytes": 65536,
        "byte_basis": "UTF-8 JSON tool result, including content and structuredContent",
        "identifier_default": 10,
        "identifier_maximum": 50,
        "continuation": "Analysis: group.browse and filters.pagination. Other identifier arrays: counts and replay arguments in content, with identifier_offset/identifier_limit.",
        "overflow": "An explicit tool error asks for a smaller page or narrower filters; civic facts are never silently removed."
      },
      "authority_class": "public_read",
      "description": "Get the typed Land decision path for one exact project. Observed milestones and events remain separate from the reviewed normative procedure stages, actors, effects, and parallel review groups; absent and unknown stages stay explicit.",
      "schema_reference": "land.decision_path.get@1",
      "capability_reference": "land.decision_path.get@1",
      "input_schema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "project_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 32,
            "description": "Exact publisher ZAP project id, e.g. 2024Q0356."
          },
          "identifier_path": {
            "type": "string",
            "maxLength": 1024,
            "description": "JSON Pointer to the identifier array named by a continuation."
          },
          "identifier_offset": {
            "type": "integer",
            "minimum": 0,
            "description": "Offset for identifier arrays only; use the returned continuation with unchanged result filters."
          },
          "identifier_limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 10,
            "description": "Maximum identifiers per array; counts and replay continuations accompany sampled arrays."
          }
        },
        "required": [
          "project_id"
        ]
      },
      "output_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "capability_reference",
          "availability",
          "project_id",
          "decision_path",
          "error"
        ],
        "properties": {
          "capability_reference": {
            "type": "string",
            "const": "land.decision_path.get@1"
          },
          "availability": {
            "type": "string",
            "enum": [
              "available",
              "not_yet_public",
              "unavailable"
            ]
          },
          "project_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "decision_path": {
            "type": [
              "object",
              "null"
            ]
          },
          "error": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "bounds": {
        "input": {
          "projectIdMaximumLength": 32,
          "maximum": 1
        },
        "output": {
          "oneProject": true
        }
      },
      "examples": [
        {
          "input": {
            "projectId": "2024Q0356"
          },
          "output": {
            "availability": "available",
            "procedureResolution": "uniform",
            "parallelReviewGroups": 1
          }
        },
        {
          "input": {
            "projectId": "not-a-real-project"
          },
          "output": {
            "availability": "not_yet_public",
            "error": "not-found"
          }
        }
      ],
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "store_access": "provider-only"
    },
    {
      "name": "preview_watch",
      "operation_class": "read",
      "authority_class": null,
      "description": "Preview what a standing watch would deliver, without subscribing. Lens: money (procurement), land (rezonings), property, rules, meetings, people. Pass a structured filter to keep alternatives, phrases, and exclusions; plain English remains optional.",
      "schema_reference": "mcp.preview_watch.pilot@1",
      "capability_reference": null,
      "input_schema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "lens": {
            "type": "string",
            "enum": [
              "money",
              "people",
              "land",
              "property",
              "rules",
              "meetings"
            ]
          },
          "request": {
            "type": "string",
            "description": "Plain-English description, e.g. 'construction awards over $1M from Parks'."
          },
          "filter": {
            "type": "object",
            "description": "Structured standing-watch filter. When present, the watch is admitted from this object and no plain-English parse is used."
          }
        },
        "required": [
          "lens"
        ]
      },
      "output_schema": null,
      "bounds": null,
      "examples": null,
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      },
      "store_access": null
    },
    {
      "name": "create_watch",
      "operation_class": "mutation",
      "authority_class": null,
      "description": "Create a standing email watch. The watch starts immediately; the welcome email states its scope and includes manage and unsubscribe links. Pass a structured filter to keep alternatives, phrases, and exclusions; plain English remains optional.",
      "schema_reference": "mcp.create_watch.pilot@1",
      "capability_reference": null,
      "input_schema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "email": {
            "type": "string"
          },
          "lens": {
            "type": "string",
            "enum": [
              "money",
              "people",
              "land",
              "property",
              "rules",
              "meetings"
            ]
          },
          "request": {
            "type": "string",
            "description": "Plain-English description of what to watch."
          },
          "filter": {
            "type": "object",
            "description": "Structured standing-watch filter. When present, the watch is admitted from this object and no plain-English parse is used."
          },
          "freq": {
            "type": "string",
            "enum": [
              "daily",
              "weekly"
            ],
            "description": "Digest frequency (default daily)."
          }
        },
        "required": [
          "email",
          "lens"
        ]
      },
      "output_schema": null,
      "bounds": null,
      "examples": null,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": true
      },
      "store_access": null
    },
    {
      "name": "list_capability_gaps",
      "operation_class": "read",
      "research_response": {
        "maximum_bytes": 65536,
        "byte_basis": "UTF-8 JSON tool result, including content and structuredContent",
        "identifier_default": 10,
        "identifier_maximum": 50,
        "continuation": "Analysis: group.browse and filters.pagination. Other identifier arrays: counts and replay arguments in content, with identifier_offset/identifier_limit.",
        "overflow": "An explicit tool error asks for a smaller page or narrower filters; civic facts are never silently removed."
      },
      "authority_class": null,
      "description": "List the capability gaps CityScroll declares about itself, so a caller can name what this endpoint does not answer instead of assuming a tool for it exists. Declared gaps: civic.outcome.prediction (What outcome will a public decision definitely produce? — nearest tools: get_land_project, get_land_decision_path). Takes no input, reads no records, and returns only this published declaration.",
      "schema_reference": "mcp.list_capability_gaps.contract@1",
      "capability_reference": null,
      "input_schema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "identifier_path": {
            "type": "string",
            "maxLength": 1024,
            "description": "JSON Pointer to the identifier array named by a continuation."
          },
          "identifier_offset": {
            "type": "integer",
            "minimum": 0,
            "description": "Offset for identifier arrays only; use the returned continuation with unchanged result filters."
          },
          "identifier_limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 10,
            "description": "Maximum identifiers per array; counts and replay continuations accompany sampled arrays."
          }
        }
      },
      "output_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schema",
          "gaps"
        ],
        "properties": {
          "schema": {
            "type": "string",
            "const": "cityscroll.declared_capability_gaps.v1"
          },
          "gaps": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "gap",
                "question",
                "meaning",
                "nearest_capability_references",
                "nearest_tools"
              ],
              "properties": {
                "gap": {
                  "type": "string"
                },
                "question": {
                  "type": "string"
                },
                "meaning": {
                  "type": "string"
                },
                "nearest_capability_references": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "nearest_tools": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      },
      "bounds": null,
      "examples": null,
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "store_access": null
    }
  ]
}
