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.5 | $0.00340 | $0.00340 |
| Sonnet 5.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 2mo 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.
- 2mo 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 29d ago), licensed MIT. It adds 851 tokens to every session, about $0.0034 per session on Opus 5.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.
NYC-Opendata-Capital-Projects-MCP CLAUDE.md compared with instructions from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| NYC-Opendata-Capital-Projects-MCP CLAUDE.mdWillHsiaoNYC/NYC-Opendata-Capital-Projects-MCP | Instructions file | 1 | 29d ago | MIT | A | 851 | Claude Code |
| vscode buildNext.instructions.mdmicrosoft/vscode | Instructions file | 195k | today | MIT | A | 9,719 | GitHub Copilot |
| vscode oss-third-party-notices.instructions.mdmicrosoft/vscode | Instructions file | 195k | today | MIT | A | 5,516 | GitHub Copilot |
| next.js AGENTS.mdvercel/next.js | Instructions file | 143k | today | MIT | A | 7,461 | Codex, OpenCode |
| langchain AGENTS.mdlangchain-ai/langchain | Instructions file | 149k | today | MIT | A | 4,680 | Codex, OpenCode |
| vscode copilot-instructions.mdmicrosoft/vscode | Instructions file | 195k | today | MIT | A | 3,093 | GitHub Copilot |
| vscode model-prompts.instructions.mdmicrosoft/vscode | Instructions file | 195k | today | MIT | A | 2,022 | GitHub Copilot |