Skip to main content
Glama
cliwant

mcp-sam-gov

nonprofit_financials

Read-only

Get any US tax-exempt nonprofit's IRS Form 990 financials and profile by EIN. Returns revenue, expenses, assets, liabilities, and filing details from public IRS records.

Instructions

Fetch ONE US tax-exempt nonprofit's IRS Form 990 profile + FINANCIALS by EIN via ProPublica Nonprofit Explorer (projects.propublica.org/nonprofits/api/v2/organizations/). ★PROVENANCE: the DATA is IRS Form 990 filings (federal tax-exempt public records) but the API is ProPublica Nonprofit Explorer (NON-PROFIT newsroom) — NOT a .gov API; ProPublica republishes these records KEYLESS (no key). Input: ein (required — the Employer Identification Number, 1..9 digits, e.g. '530196605' for American National Red Cross; rides the URL path). Returns { organization:{ ein, name, address, city, state, zip, nteeCode, subsectionCode, rulingDate, statusCode }, filings:[{ taxYear, formType, revenueUsd, expensesUsd, assetsUsd, liabilitiesUsd, pdfUrl }] } + honest _meta. HONESTY: the four Form 990 figures (revenueUsd/expensesUsd/assetsUsd/liabilitiesUsd) ride null-never-0 coercion — genuine reported 0 stays 0, absent → null (NEVER 0-faked); ein/codes are strings; rulingDate is a date string. totalAvailable = filings.length (COMPLETE filing set — no pagination). Unknown EIN (HTTP 404) → not_found (NEVER fabricated empty org); 4xx → invalid_input; 429 → rate_limited THROWS; 5xx/timeout → upstream_unavailable THROWS; 200 non-JSON / non-object org / non-array filings → schema_drift. Data source disclosed in _meta.source.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
einYesThe organization's EIN (Employer Identification Number), 1..9 digits, e.g. '530196605' (American National Red Cross). Validated ^\d{1,9}$; rides the URL path.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv1.12.0

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint and openWorldHint, but the description goes far beyond that. It details provenance (IRS filings via ProPublica, not a .gov API), the null-never-0 coercion rule for financial figures, string types for EIN/codes, error mapping (404→not_found, 4xx→invalid_input, 429→rate_limited, 5xx→upstream_unavailable, schema_drift), and the complete filing set without pagination. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but dense with necessary information: purpose, input, output, error handling, and honesty guarantees. It is front-loaded with the core purpose, then systematically covers behavior. While every sentence earns its place, the length is substantial; a more compact structure could improve scannability, but it is not bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description is exceptionally complete. It specifies the exact return shape (organization and filings arrays with fields), details on null coercion, error codes for every failure mode, provenance, and the absence of pagination. Nothing an agent needs to call this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents the ein parameter with format and example. The description repeats the example and adds that the EIN 'rides the URL path', which is a minor addition. Since the schema covers the parameter well, the baseline of 3 is appropriate; the description does not significantly enhance parameter understanding beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Fetch') and a specific resource (ONE US tax-exempt nonprofit's IRS Form 990 profile + FINANCIALS by EIN), and clearly distinguishes it from search tools like nonprofit_search by emphasizing it fetches a single entity's financials. The inclusion of the data source (ProPublica) and the keyless access further clarifies its unique role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly conveys usage: it is for fetching one specific nonprofit's financials by EIN, and mentions that it returns a complete filing set with no pagination. It does not explicitly name alternatives or exclusion conditions, but the single-entity scope and the presence of sibling search tools make the intended use clear enough. A brief note on when to prefer it over nonprofit_search would earn a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools