NY Benchmark

Query 2M+ municipal finance data points across New York State — 62 cities, 57 counties, 689 school districts. 30 years of audited actuals with domain-aware caveats applied automatically.

NY Benchmark exposes its full dataset of New York State local government financial data — including NYC — through the Model Context Protocol (MCP), an open standard that lets AI tools query structured data directly.

Example questions

  • “What is Syracuse’s fund balance as a percentage of expenditures?”
  • “Compare police spending per capita across Buffalo, Rochester, and Yonkers”
  • “Which cities have the highest debt service burden?”
  • “Show me NYC’s revenue sources over the last 10 years”
  • “Rank all towns by per capita spending”
  • “Which villages spend the most on public safety?”
  • “What are the 10 most populated towns in New York?”
  • “Which school districts spend the most per pupil?”
  • “What cities are late filing with the State Comptroller?”

What you can query

  • 30 years of city financial data (62 cities, 1995-present) — revenue, expenditures, fund balances, debt service
  • Town and village finances (933 towns, 558 villages, 1997-present) — the same OSC financial data, now queryable and rankable
  • School district finances (689 districts, 2012-present) — per-pupil spending, state aid, fund balances
  • County finances (57 counties, 1995-present)
  • Census demographics (population, income, poverty, housing, education)
  • Fiscal stress scores (OSC FSMS, 2012-present) — fiscal and environmental indicators
  • Computed metrics — Fund Balance %, Debt Service %, Per-Capita Spending, available without manual calculation
  • Rankings — rank any entity type by any metric, cross-type rankings (e.g. all cities, towns, and villages together), top/bottom N

What makes this different

Most government data APIs return raw numbers and leave interpretation to the user. Our MCP server includes domain-aware caveats that travel with the data:

  • Comparability notes flag cities with unique reporting structures. NYC isn’t inside any county — it encompasses five boroughs that are themselves counties, and its $109B consolidated budget includes functions (like the $34B Department of Education) that are separate entities elsewhere. Plattsburgh runs its own municipal electric utility, putting debt service in enterprise funds that a naive analysis would miss. The server flags these automatically so the AI doesn’t produce misleading comparisons.
  • Filing status identifies cities that haven’t filed recent reports, so the AI doesn’t silently present stale data as current
  • Data quality rules exclude custodial pass-throughs and interfund transfers that inflate apparent spending
  • Anti-hallucination directives prevent the AI from fabricating benchmark thresholds or interpolating missing data

This approach follows progressive disclosure: session-level instructions set the ground rules, and response-level notes provide entity-specific context on demand.

Connect with Claude Desktop

Tested and supported. Add this to your Claude Desktop config file, then restart Claude Desktop:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Copy

{
  "mcpServers": {
    "nybenchmark": {
      "command": "npx",
      "args": ["mcp-remote", "https://mcp.nybenchmark.org/mcp"]
    }
  }
}

Requires: Node.js (for npx). The mcp-remote package proxies the remote MCP endpoint to your local client. See Anthropic’s MCP setup guide for detailed instructions.

Other MCP clients

MCP is an open standard and our endpoint (https://mcp.nybenchmark.org/mcp) should work with any MCP-compatible client that supports remote servers. We haven’t tested these, but they may work:

ClientNotes
CursorAdd the same JSON snippet to .cursor/mcp.json
WindsurfAdd via MCP Marketplace or ~/.codeium/windsurf/mcp_config.json
ChatGPTRequires Developer Mode (Pro, Team, Enterprise, or Edu — not available on Plus)
Gemini CLICommand-line only, not the Gemini web app

If you get it working with another client, let us know.

How it works

The server provides five tools in a sequential workflow:

  1. discover_data — overview of available data sources, entity types, and year ranges
  2. find_entities — search for cities, counties, school districts, towns, or villages by name, kind, or filing status
  3. find_metrics — explore available metrics by category (revenue, expenditure, balance sheet) or search by keyword
  4. get_data — retrieve time-series data for specific entities and metrics
  5. rank_entities — rank entities by any metric (top/bottom N, cross-type rankings like all cities + towns + villages together)

Domain rules are applied automatically. You don’t need to know about T-fund exclusions, interfund transfer adjustments, or GASB 54 fund balance classifications — the server handles them and attaches explanatory notes to responses when relevant.

Data sources

All data comes from official government sources:

SourceCoverageLink
NYS Office of the State Comptroller61 cities, 933 towns, 558 villages, 57 counties, 689 school districts (1995-present)osc.ny.gov
NYC Comptroller ACFRNYC (FY 2016-2025)comptroller.nyc.gov
U.S. Census Bureau ACSDemographics (2010-present)census.gov
OSC Fiscal Stress Monitoring SystemStress scores (2012-present)osc.ny.gov

For detailed methodology, see the Methodology page on the app.

Explore the data at app.nybenchmark.org →

Related Servers