MCP server over NYC Open Data (Socrata/SODA) for NYC housing data: HPD violations, complaints, and litigation, building ownership two ways (HPD registration and the property record: PLUTO assessment roll, ACRIS deeds/mortgages, Speculation Watch List), landlord portfolios, DOB records, 311 heat complaints, marshal evictions, and a one-call building profile. Built for tenant organizers, housing-court legal aid, and Right-to-Counsel orgs.
10 tools with complete schemas and descriptions. Naming is domain-specific but lacks action verbs (e.g., 'building_violations' instead of 'get_building_violations'). Descriptions are solid (100-200 chars, domain-grounded) but generic for similar tools. Parameters are well-typed with enums for borough. Output schemas are not documented in the source. Error handling is minimal, no recovery guidance or actionable error messages visible. No tool annotations (readOnlyHint, etc.). Composition is good: each tool has one responsibility, and parameters chain well (house_number/street/borough used consistently). Security: no secrets in params, read-only operations only.
311 service requests (heat and hot water complaints) for a building, with summary statistics by status.
HPD Complaints and Problems for a building, with summary statistics by complaint status.
One-call building profile: HPD violations, complaints, litigation, evictions, AEP, vacate orders, bedbug filings, emergency repair charges, and speculation watch list status.
HPD Housing Maintenance Code Violations for a building, with summary statistics by violation class and status.
DOB (Department of Buildings) violations and complaints for a building.
Marshal-executed evictions filtered by borough.
Tool names lack action verbs. 'building_violations' should be 'get_building_violations' or 'search_building_violations'. LLMs infer intent from verb-noun patterns; missing verbs reduce clarity.
Output schemas are not documented. The source shows input schemas but no return type definitions. LLMs cannot plan downstream calls or extract fields without knowing what each tool returns.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
HPD Housing Litigations (HPD-initiated cases and tenant actions) filtered by borough and respondent name.
All buildings registered under an owner/agent name (landlord portfolio lookup).
True building owner via PLUTO assessment roll (DOF assessor owner name) and ACRIS real property documents (deeds, mortgages), plus speculation watch list status.
HPD building registration and owner/agent/officer contacts for a building.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools are read-only, but this is not declared in the schema. Agents cannot distinguish safe-to-retry operations from potentially destructive ones.
Error handling is not visible in source. No recovery guidance (e.g., 'If address not found, try search_buildings()'), no error classification (retryable vs. user-fixable), no actionable error messages.
Similar tool names create ambiguity. 'building_violations' vs 'dob_building' both return violations but from different agencies. Descriptions clarify (HPD vs DOB) but names should too (e.g., 'hpd_violations' vs 'dob_violations').