databook (sarapis/databook) is an MCP server listed on the M8ven Trust Index. It scores 74 out of 100, grade C. It declares 41 tools. No publisher has claimed this listing.

C
Warning
74/100

databook

Databook — an open data platform for New York City government: agencies, people, jobs, procurement, budgets, and City Record notices, unified and cross-linked. A nonprofit project of WeGov.NYC.

Warning. Serious findings were identified. Review the full report before connecting. Grades reflect the full trust pyramid: code, verification depth, and reputation. New projects cap at C until adoption is earned.

How we verified

Code Verified⚡ Live Monitored: not connected

Verified is a snapshot. Live keeps it current, and builds your track record.

⚡ Connect GitHub → continuous verification on every pushwhy connect →

Who stands behind it

sarapis

Source: github_code

Is this your MCP?

Claim it to get a verified publisher badge, a free copy of our full audit findings, and direct contact for any high-priority issues we find. Or connect your repo for our deepest verification, Live Monitored: read-only, revoke anytime. What we access →

Install from

The grade above is for the source repository. Registries can serve a different version, so we mark the ones we were not able to read.

// key findings
🚨
Code appears obfuscated
1 file are unreadable to a human reviewer. Cannot audit what they do.
🔐
You'll be asked for 3 credentials: GEMINI_API_KEY, DB_PASSWORD, DATABOOK_PUBLIC_API_KEY
These are read from process.env at runtime. Make sure you trust where they’ll be sent.
// tools this server exposes40 tools

These names and descriptions are the publisher's own, read from the source code. We print them as written. Our assessment is the findings above, not this list.

get_database_overview

Get a summary of all available data in the Databook database. Returns counts for organizations, titles, notices, capital projects, and more. Use this to understand what data is available before diving into specifics.

search_organizations

Search NYC organizations (agencies, boards, offices) by name. Args: query_text: Organization name to search for (partial match supported) limit: Maximum number of results (default 20, max 50) Returns: List of matching organizations with basic info

get_organization_profile

Get detailed profile for a specific NYC organization. Args: org_id: The organization ID (from search_organizations) Returns: Complete organization profile with stats

get_organization_notices

Get recent City Record notices for an organization. Args: org_id: The organization ID limit: Maximum notices to return (default 10, max 50) Returns: List of recent notices for the organization

search_civil_titles

Search NYC civil service job titles. Args: query_text: Title name or code to search (partial match) limit: Maximum results (default 20, max 50) Returns: List of matching civil service titles

get_title_positions

Get employees currently holding a specific civil service title. Args: job_code: The job code (e.g., "10026" from search_civil_titles) limit: Maximum results (default 20, max 50) Returns: List of employees with this title

search_notices

Search City Record Online (CROL) notices. Args: query_text: Search in title or description (optional) section: Filter by section (e.g., "Contract Awards", "Public Hearings") limit: Maximum results (default 20, max 50) Returns: List of matching notices

get_notice_stats

Get City Record notice statistics for the last 30 days. Returns summary by section type to understand recent government activity.

get_recent_events

Get upcoming public events and hearings from the City Record. Args: limit: Maximum events to return (default 10, max 30) Returns: List of upcoming events with dates and details

search_capital_projects

Search NYC capital projects by name or ID. Args: query_text: Project name or ID to search limit: Maximum results (default 20, max 50) Returns: List of matching capital projects

get_project_details

Get detailed information for a specific capital project. Args: project_id: The project ID (e.g., "HW1234") Returns: Full project details with budget and schedule

get_agency_projects

Get capital projects for a specific agency. Args: agency: Agency name (partial match, e.g., "Parks", "DOT") limit: Maximum results (default 15, max 50) Returns: List of capital projects for the agency

get_project_milestones

Get largest capital projects with any milestones (start, end, or intermediate) within a date range. Queries the capitalprojectsmilestones table for actual milestone dates and joins with project details for budget info. Returns the largest projects by current budget. Args: days_back: Days to look bac

search_people

Search NYC government employees by name. Args: query_text: Name to search (first or last name) limit: Maximum results (default 20, max 50) Returns: List of matching employees with title and agency

search_vendors

Search registered NYC vendors by name. Args: query_text: Vendor name to search (partial match) limit: Maximum results (default 20, max 50) Returns: List of matching vendors with basic info

get_vendor_profile

Get detailed profile for a specific vendor. Args: vendor_id: The vendor's passport_supplier_id (from search_vendors) Returns: Complete vendor profile with contract statistics

search_contracts

Search NYC procurement contracts with various filters. Args: query_text: Search in contract title (optional) vendor: Filter by vendor name (partial match) agency: Filter by agency name (partial match) status: Filter by status (e.g., "Active", "Registered") limit: Maximum results (default 20, max 50)

get_contract_details

Get detailed information for a specific contract. Args: contract_id: The contract ID (e.g., "CT1-100-2024") Returns: Full contract details

get_contract_stats

Get aggregated contract statistics for analysis. Useful for understanding overall procurement activity, budget allocation, and contract distribution across agencies. Args: agency: Filter by agency name (optional) fiscal_year: Filter by fiscal year (optional) Returns: Summary statistics including cou

search_solicitations

Search NYC procurement solicitations (RFPs, bids). Args: query_text: Search in procurement name (optional) agency: Filter by agency name (partial match) status: Filter by status (e.g., "Open", "Closed") limit: Maximum results (default 20, max 50) Returns: List of matching solicitations

get_solicitation_details

Get detailed information for a specific solicitation. Args: epin: The solicitation EPIN Returns: Full solicitation details with related contracts

get_open_solicitations

Get currently open solicitations (upcoming due dates). Args: limit: Maximum results (default 20, max 50) Returns: List of open solicitations sorted by due date, with Databook and City Record links

search_jobs

Search NYC government job postings. Args: query_text: Search in job title or description (optional) agency: Filter by agency name (partial match) category: Filter by job category (e.g., "Engineering", "Legal") limit: Maximum results (default 20, max 50) Returns: List of matching job postings with sa

get_job_details

Get detailed information for a specific job posting.

get_salary_stats

Get salary statistics for NYC government employees. Args: agency: Filter by agency name (partial match, optional) title: Filter by job title (partial match, optional) fiscal_year: Filter by fiscal year (e.g., 2024, optional) Returns: Salary statistics including averages, ranges, and totals

get_top_salaries

Get highest paid NYC government employees. Args: agency: Filter by agency name (optional) fiscal_year: Fiscal year (defaults to most recent) limit: Maximum results (default 20, max 50) Returns: List of highest paid employees with salary details

search_facilities

Search NYC city facilities (buildings, parks, offices). Args: query_text: Search facility name (optional) facility_type: Filter by type (e.g., "School", "Library", "Police Station") borough: Filter by borough (Manhattan, Brooklyn, Queens, Bronx, Staten Island) limit: Maximum results (default 25, max

get_facility_types

Get list of all facility types and their counts. Returns: Breakdown of facility types across NYC

search_schools

Search NYC schools (public, charter, private, after-school programs). Args: query_text: Search school name (optional) school_type: Filter by type (e.g., "elementary", "high school", "charter", "after-school") borough: Filter by borough (Manhattan, Brooklyn, Queens, Bronx, Staten Island) limit: Maxim

get_school_stats

Get overview of NYC schools by type and borough. Returns: Breakdown of school counts by category and location

get_agency_budget

Get budget breakdown for a specific agency. Args: agency: Agency name (partial match) fiscal_year: Fiscal year (defaults to most recent) Returns: Budget details by category with adopted vs modified amounts

compare_agency_budgets

Compare budgets across NYC agencies. Args: fiscal_year: Fiscal year (defaults to most recent) limit: Number of agencies to show (default 20) Returns: Top agencies by budget with year-over-year comparison

search_legislation

Search NYC Council legislation (introductions) by keyword.

get_legislation_detail

Get full details for a specific NYC Council bill.

get_council_member

Get NYC Council member profile with committee assignments.

get_recent_legislation

Get recently introduced or enacted NYC Council legislation.

get_local_laws

Get local laws enacted by the NYC Council in a given year.

get_upcoming_hearings

Get upcoming (and recent) NYC Council committee hearings.

get_hearing_detail

Get full details for a specific NYC Council hearing/event.

get_hearing_briefing

Generate a data briefing for an upcoming NYC Council hearing.

// environment variables
To run this server yourself, you supply these values. They go in your own MCP client configuration and stay on your machine. The secret label means the value is sensitive, not that the server mishandles it.
configBASE_URL
configMCP_URL
configPOSTGRES_HOST
configPOSTGRES_PORT
configPOSTGRES_DB
configPOSTGRES_USER
configCORS_EXTRA_ORIGINS
configAPI_EDGE_MAX_AGE
configDATA_SCHEDULER_ENABLED
configSPENDING_S3_BUCKET
configREVIEW_ROOT
configSPENDING_DATA_BASE
configNYCDB_PATH
configNYC_ORG_MIN_EXPECTED
configDATA_LAKE_PATH
configNYCHA_CURATED_XWALK_CSV
🔐 secretGEMINI_API_KEY
configNORMALIZER_TIMEOUT
configPIPELINE_ALERT_FROM
configPIPELINE_ALERT_TO
configSOCRATA_BASE
configGOOGLE_SHEETS_CREDENTIALS
configTITLES_ENRICHMENT_CSV
configDB_USER
🔐 secretDB_PASSWORD
configDB_NAME
configDB_HOST
configAPI_BASE_URL
configORG_CORE_FEED_FLOOR
configEXTRACTOR_S3_BUCKET
configEXTRACTOR_S3_PREFIX
configCHECKBOOK_MAX_RECORDS
configLOG_LEVEL
configDUCKDB_MAX_WORKERS
configBUDGET_REVENUE_BASE
🔐 secretDATABOOK_PUBLIC_API_KEY
configPG_POOL_MAX_SIZE
configPG_POOL_MIN_SIZE
Deployment configuration, supplied by whoever hosts the server. Users are not asked for these.
deploySENTRY_DSN
deploySENTRY_ENVIRONMENT
deploySENTRY_TRACES_SAMPLE_RATE
// quality suggestions

Tool annotations

40/41 tools have annotations

Add readOnlyHint or destructiveHint annotations to every tool so hosts can warn users before invoking.

All four hints declared on every tool

41/41 tools missing one or more hints — get_database_overview (missing: destructiveHint); search_organizations (missing: destructiveHint); get_organization_profile (missing: destructiveHint), +38 more. OpenAI's directory rejects tools where any of the four hints are missing or non-boolean.

For every tool, set all four hints (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) to explicit true/false values that match the handler’s actual behaviour.

Tool test coverage

14/41 tools referenced in tests (34%)

Write tests that reference each tool by name so every tool has at least one test.

No eval / new Function

1 eval() or new Function() call — dynamic code execution

Replace eval / Function with explicit parsing or safer alternatives.

Readable source code

1 file are minified or bundled, which is usually build output rather than concealment

Ship unminified, readable source.

Secrets not logged

4 secret values sent to print

Redact or omit secret values from log output.

Claim the listing to review these findings one by one and send us a correction where you disagree, straight to the team. Claiming also means we tell you when the grade moves, and reach you first if we find anything urgent.

// full audit trail
The findings above are the summary. The full trail, every check we ran, each deduction, the network hosts observed and the dependency advisories, goes to verified publishers, along with an alert whenever a new one lands. Verified publishers can also review each finding and dispute it in one click. Publisher corrections have sharpened several of our checks this month, because the maintainer knows the codebase better than any scanner.
// improvement guidance — verified publishers only
We have 6 concrete improvements we can share with the publisher of this MCP. Each comes with specific guidance to raise the trust score.
// embed badge in your README
[![M8ven Verified](https://m8ven.ai/badge/mcp/sarapis/databook?variant=verified)](https://m8ven.ai/mcp/sarapis/databook)
Shows verification status without the grade. Want the grade badge instead? Remove ?variant=verified from the URL.
commit: d7879f924528452a5dc004bc413dfdaf33d59326
code hash: 1f50c7c3f93931a0d141affa6e125e47c0d3b5dc2d3060f78c49be888f747aa8
view raw JSON →
Check MCPs from inside your assistant
Tool Check · MCP

Vetting this one by hand? Tool Check is an MCP that scores other MCPs. Add it once and ask Claude, ChatGPT, or any MCP client to grade a server, surface CVEs, check the publisher, and suggest safer alternatives — before you install.

https://m8ven.ai/api/mcp/tool-check
check_toolsearch_toolscompare_toolsrecommend_alternativescheck_publisherreport_concern
How to add it →Free · no account needed · works in any MCP client