Borrowing it
Nothing to install: this file belongs to WillHsiaoNYC/NYC-Opendata-Capital-Projects-MCP. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/WillHsiaoNYC/NYC-Opendata-Capital-Projects-MCP/main/CLAUDE.mdgit clone --depth 1 https://github.com/WillHsiaoNYC/NYC-Opendata-Capital-Projects-MCPWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/instructions/willhsiaonyc/nyc-opendata-capital-projects-mcp/claude-md)<a href="https://agentmods.dev/instructions/willhsiaonyc/nyc-opendata-capital-projects-mcp/claude-md"><img src="https://agentmods.dev/badge/instructions/willhsiaonyc/nyc-opendata-capital-projects-mcp/claude-md/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/instructions/willhsiaonyc/nyc-opendata-capital-projects-mcp/claude-md"><img src="https://agentmods.dev/badge/instructions/willhsiaonyc/nyc-opendata-capital-projects-mcp/claude-md.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00851 | $0.00851 |
| Opus 5 | $0.00426 | $0.00426 |
| Sonnet 5 | $0.00170 | $0.00170 |
| Haiku 4.5 | $0.00085 | $0.00085 |
Grade A, and why
NYC-Opendata-Capital-Projects-MCP CLAUDE.md scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 11d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 54 lines — stays where its author put it; the contents beside it link to each section on GitHub.
OD-CPD MCP — project guide for Claude
NYC Capital Projects data (4 Socrata datasets) served over a local DuckDB as an MCP server.
Read this first
docs/FEATURES.mdis the canonical inventory of the MCP's tools and the domain rules it encodes — PID↔FMS many-to-many, the sponsor-driven category taxonomy, signed-value reporting, reporting cadence, the (managing_agency, fms_id) budget grain, etc. Read it before answering data questions or changing behavior.- Keep
docs/FEATURES.mdcurrent. Whenever the MCP gains a tool, a built-in domain rule, or a taxonomy/behavior change, update the relevant section and bump its "Last updated" date — ideally in the same PR. - Every aggregation in
materialize.pyencodes a keying assumption — which entity (budget line, PID, pair, snapshot) each published column attaches to. Verify the keying before changing it.
Running & testing
- Tests:
uv run pytest(fallback:PYTHONPATH=src python -m pytest). - The MCP server is stdio, launched by the client as
uv run --directory <repo> od-cpd-serverwithPYTHONPATH=<repo>/src. Bareuv run od-cpd-servercan fail withModuleNotFoundErrorwhen the editable.pthis missing or hidden (e.g. under iCloud), so always setPYTHONPATH=src. - Code changes do not reach the running server until it is reconnected — it's a
stdio subprocess. Reconnect via
/mcp(or restart the client) to load new code.
Updating the live database
od-cpd init/od-cpd updatere-download all four datasets from Socrata (full ingest).- To apply YAML /
materialize.pychanges without re-downloading, re-materialize the existing raw tables via the atomic-swap pattern: copyvar/cpd.duckdb→ a shadow file, open it read-write, runmaterialize.materialize_all(con), theningest.atomic_swap(shadow, db). Never open the live DB read-write directly while the MCP may touch it — the shadow + atomic swap keeps the running server safe.
Architecture orientation
- Curated dictionaries drive classification — edit YAML, not Python:
data/agencies.yaml→agency_dim,data/categories.yaml→category_dim. src/od_cpd/materialize.pybuilds the normalized + analytics tables and the category dimension;src/od_cpd/categories.pycompilescategories.yamlinto thecategory_dimCASE expression.- Category taxonomy: 3-tier precedence — specific ten-year keyword / fms-id prefix →
sponsor routing → generic facility keyword →
Other. File order incategories.yamlis precedence among tier-1 keyword matches. Institution categories (Library, Cultural) are owner-authoritative viaever_managed_by(all-history; survives reassignment). - Classify by the stable signal — fms-id/budget-line prefix,
sponsor_agency, or theten_year_plan_categorylabel — never project name, which reassigns and undercounts.managing_agencyis the builder/budget-holder, not the owner: use it only for the three construction-manager agencies (DDC/DCAS/EDC) whose work IS what they manage. For everyone else, "their projects" =sponsor_agency. This is the role-aware rule baked into the agency-scoped tools (agency+agency_role); seedocs/FEATURES.md§4.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 11d ago First seen · 54 lines · 851 tokens per session scan A b979e3b9ef85
NYC-Opendata-Capital-Projects-MCP CLAUDE.md is an instructions file published in the GitHub repository WillHsiaoNYC/NYC-Opendata-Capital-Projects-MCP (1 stars, last pushed 5d ago), licensed MIT. It adds 851 tokens to every session, about $0.0043 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other instructions, from other repositories
next.js AGENTS.md
AGENTS.md instructions for vercel/next.js, covering next.js development guide, codebase structure, monorepo overview, core package: packages/next and other important packages.
codex AGENTS.md
AGENTS.md instructions for openai/codex, covering rust/codex-rs, the codex-core crate, code review rules, crate api surface and model visible context.
vscode buildNext.instructions.md
Working notes and architecture documentation for the new esbuild-based build system in build/next. Use when making changes to the new build pipeline (transpile/bundle commands, NLS plugin, source-map handling, resource copying, or self-hosting watch tasks).
spec-kit AGENTS.md
AGENTS.md instructions for github/spec-kit, covering agents.md, about spec kit and specify, quickstart — add a new integration in 5 steps, integration architecture and integrationmanifest — file tracking.
langchain AGENTS.md
AGENTS.md instructions for langchain-ai/langchain, covering global development guidelines for the langchain monorepo, corridor security analysis, project architecture and context, monorepo structure and development tools & commands.
vscode oss-third-party-notices.instructions.md
Instructions for microsoft/vscode, covering vs code oss third-party-notices pipeline, architecture, pipeline flow in ci, applying the notice (cutover) and fallback chain (never fail the build).