{
  "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",
      "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"
                      ]
                    }
                  }
                }
              }
            ]
          }
        },
        "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",
      "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)."
          }
        }
      },
      "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",
      "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
          }
        },
        "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",
      "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."
          }
        },
        "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",
      "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.",
      "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"
              ]
            }
          }
        },
        "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",
      "authority_class": "public_read",
      "description": "Retrieve source passages with stable citations and exact source joins. Returns source text only; 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
          }
        },
        "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"
          },
          "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",
      "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."
          }
        },
        "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",
      "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.",
      "schema_reference": "contracts.browse@1",
      "capability_reference": "contracts.browse@1",
      "input_schema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "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."
          }
        }
      },
      "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",
      "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, coverage, and exact contract IDs. Does not report payments or spending.",
      "schema_reference": "contracts.analysis@1",
      "capability_reference": "contracts.analysis@1",
      "input_schema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "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
          },
          "vendor": {
            "type": "string",
            "maxLength": 240
          },
          "fiscal_year": {
            "type": "integer"
          },
          "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
          }
        }
      },
      "output_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "capability_reference",
          "availability",
          "group_by",
          "measure",
          "groups",
          "denominator",
          "population",
          "coverage",
          "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"
            ]
          },
          "filters": {
            "type": [
              "object",
              "null"
            ]
          },
          "freshness": {
            "type": [
              "object",
              "null"
            ]
          },
          "error": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "bounds": {
        "input": {
          "filterMaximumLength": 240,
          "minimumGroups": 1,
          "maximumGroups": 100,
          "defaultGroups": 10
        },
        "output": {
          "maximumGroups": 100
        }
      },
      "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_ids and ordinary Contracts scope"
          }
        }
      ],
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "store_access": "provider-only"
    },
    {
      "name": "get_person_or_organization",
      "operation_class": "read",
      "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:..."
          }
        },
        "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",
      "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
          }
        }
      },
      "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",
      "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.",
      "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."
          }
        },
        "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"
            ]
          },
          "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",
      "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."
          }
        },
        "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",
      "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."
          }
        }
      },
      "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",
      "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."
          }
        },
        "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 plain-English standing watch would deliver, without subscribing. Lens: money (procurement), land (rezonings), property, rules, meetings, people.",
      "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'."
          }
        },
        "required": [
          "lens",
          "request"
        ]
      },
      "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 from plain English. The watch starts immediately; the welcome email states its scope and includes manage and unsubscribe links.",
      "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."
          },
          "freq": {
            "type": "string",
            "enum": [
              "daily",
              "weekly"
            ],
            "description": "Digest frequency (default daily)."
          }
        },
        "required": [
          "email",
          "lens",
          "request"
        ]
      },
      "output_schema": null,
      "bounds": null,
      "examples": null,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": true
      },
      "store_access": null
    }
  ]
}
