Zovo Charity Lookup
Server Details
Check a US nonprofit's tax-exempt status, revenue, expenses and officer pay before you donate.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 3 tools
Each tool targets a distinct input mode and action: search by name returns EINs, get by single EIN returns full profile, compare takes 2-5 EINs side by side. The descriptions explicitly disambiguate boundaries (e.g. 'Do not use with names; find EINs with search_nonprofits first'), leaving no plausible misselection.
All three follow a verb_noun pattern (search_nonprofits, get_nonprofit_profile, compare_nonprofits) in snake_case with a consistent domain noun. The plural/singular variation ('nonprofits' vs 'nonprofit_profile') is trivial and still predictable.
Three tools map cleanly onto the natural workflow of find → inspect → compare, and each earns its place with no filler or redundancy. The surface is narrow but deliberately so for a lookup server.
The name-search, EIN profile, and multi-entity comparison plus PDF/CSV/Excel export cover the core lifecycle for nonprofit financial lookup. Minor gaps remain: compare caps at 5 EINs, and there is no bulk EIN lookup or cross-state/category browsing beyond a single filter, though agents can work around these via repeated calls.
Available Tools
3 toolscompare_nonprofitsCompare nonprofitsARead-onlyIdempotentInspect
Use this when the user wants 2 to 5 US nonprofits side by side by EIN: latest Form 990 revenue, expenses, net assets, total assets, officer compensation and computed ratios with formulas, plus a PDF, CSV and Excel comparison. Data is live from ProPublica Nonprofit Explorer. Does not rate or rank organizations. Do not use with names; find EINs with search_nonprofits first.
| Name | Required | Description | Default |
|---|---|---|---|
| eins | Yes | 2 to 5 EINs, e.g. ["53-0196605", "13-1623829"]. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | Yes | |
| source | Yes | |
| formulas | Yes | |
| downloads | Yes | |
| organizations | Yes | |
| tax_years_differ | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint), so the bar is lower. The description still adds non-redundant context: data provenance and freshness ("Data is live from ProPublica Nonprofit Explorer") and a scope limitation beyond the annotations ("Does not rate or rank organizations"), which heads off a natural misinterpretation of a tool named 'compare'. It does not mention cost, rate limits, or failure modes for invalid EINs, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the usage trigger and with the alternative-tool steering placed last, which reads naturally. The output enumeration is dense but each item is concrete rather than filler. Minor length cost from listing the exact return fields even though an output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only tool with full schema coverage, rich annotations, and a declared output schema, the description covers trigger, inputs, provenance, and scope limits. The only real gap is the unresolved 2-to-5 versus maxItems-50 discrepancy in the accepted EIN count, which the description does not reconcile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns above that by adding EIN format guidance implicitly through the EIN-keyed workflow and by tying the parameter to the search_nonprofits prerequisite for name-based requests. It is docked because it asserts a 2-to-5 EIN range while the schema permits maxItems 50, leaving an agent unsure which bound is authoritative.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ("compare 2 to 5 US nonprofits side by side by EIN") and enumerates the concrete outputs returned (Form 990 revenue, expenses, net assets, assets, officer comp, computed ratios with formulas, PDF/CSV/Excel exports). It also states what it is not ("Does not rate or rank organizations"), so an agent can distinguish it from get_nonprofit_profile and search_nonprofits without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger ("Use this when the user wants 2 to 5 US nonprofits side by side by EIN"), an explicit exclusion ("Do not use with names"), and a named prerequisite/alternative ("find EINs with search_nonprofits first"). This is the full when/when-not/alternative triad with a routing dependency to a sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_nonprofit_profileGet nonprofit profileARead-onlyIdempotentInspect
Use this when the user wants to check a US nonprofit by EIN: IRS subsection, foundation status, deductibility, ruling date, and a multi-year table of revenue, expenses, net assets, total assets and officer compensation from Form 990 filings, with year-over-year change, ratios and their formulas, filing PDF links, and a PDF, CSV and Excel report. Data is live from ProPublica Nonprofit Explorer. Does not rate or rank organizations and does not give tax or legal advice.
| Name | Required | Description | Default |
|---|---|---|---|
| ein | Yes | The 9-digit Employer Identification Number, with or without the hyphen, e.g. 53-0196605. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | Yes | |
| years | Yes | |
| source | Yes | |
| filings | Yes | |
| formulas | Yes | |
| downloads | Yes | |
| years_count | Yes | |
| years_shown | No | |
| organization | Yes | |
| filings_count | Yes | |
| filings_shown | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world behavior, so the bar is lower; the description nonetheless adds meaningful context the annotations lack — live third-party provenance (ProPublica Nonprofit Explorer) and explicit scope disclaimers about ranking and tax/legal advice. It does not cover edge behavior such as a nonexistent or malformed EIN, which is the main remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the usage trigger, then a compact inventory of attributes and a scope disclaimer in two sentences with no filler. The long embedded field list is dense and partly duplicates the output schema, which costs a bit of economy but still reads as purposeful rather than padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only lookup with full annotation coverage and an output schema, the description supplies source, scope, and disclaimers, which is close to sufficient for correct invocation. The missing piece is failure semantics (what happens for an unknown or invalid EIN), which an agent would want before calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a single required parameter whose format (9 digits, optional hyphen, example 53-0196605) is fully documented in the schema. The description only restates 'by EIN' and adds no format, lookup, or normalization detail beyond it, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('check a US nonprofit by EIN') and enumerates exactly what the profile contains (IRS subsection, foundation status, deductibility, ruling date, multi-year Form 990 financials, filing links, export formats). The single-EIN profile framing plus 'does not rate or rank organizations' clearly separates it from the sibling compare_nonprofits and search_nonprofits tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Opens with an explicit trigger ('Use this when the user wants to check a US nonprofit by EIN') and adds scope exclusions ('does not rate or rank', 'no tax or legal advice'), which is real when-to-use guidance. It never names compare_nonprofits or search_nonprofits as alternatives, so the routing decision is left partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_nonprofitsSearch nonprofitsARead-onlyIdempotentInspect
Use this when the user wants to find a US nonprofit or charity and its EIN by name, optionally in one US state or one category. Returns up to 25 matches with EIN, city, state, NTEE code and IRS subsection, from ProPublica Nonprofit Explorer. Does not return financials; use get_nonprofit_profile with an EIN for those. Do not use for organizations outside the US.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Part of the organization's name, up to 100 characters, e.g. "food bank" or "Red Cross". | |
| state | No | Optional 2-letter US postal code of the state where the organization is registered, e.g. CA. | |
| category | No | Optional NTEE major group, e.g. human-services. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| query | Yes | |
| state | Yes | |
| source | Yes | |
| category | Yes | |
| organizations | Yes | |
| total_results | Yes | |
| total_results_capped | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the readOnly/idempotent annotations: the upstream source (ProPublica Nonprofit Explorer), the result cap of 25, the exact fields returned, and the explicit absence of financials. The main omission is what happens when more than 25 matches exist — no guidance on pagination or refining the query, which matters for a capped search.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the trigger condition, then results, then the routing alternative, then the exclusion. No filler and nothing repeated from the name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return shape needn't be spelled out, yet the description still summarizes returned fields and their source, which is useful for judging relevance. For a simple three-parameter read-only search, an agent has everything needed to select and call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage the baseline is 3, and the description does add a little: "optionally in one US state or one category" clarifies that state and category are single-value narrowing filters rather than multi-selects, and that name is the primary search key. It stops short of explaining matching behavior (prefix vs substring vs fuzzy), which the schema leaves ambiguous with "Part of the organization's name".
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("find a US nonprofit or charity and its EIN by name") plus the optional narrowing dimensions (state, category). An agent can immediately distinguish this from get_nonprofit_profile because the description says the profile tool needs an EIN.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Opens with an explicit trigger ("Use this when the user wants to..."), names the alternative for a related need (financials via get_nonprofit_profile), and gives an explicit exclusion ("Do not use for organizations outside the US"). It doesn't mention compare_nonprofits, but the when/when-not/alternative triad is otherwise complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
- First observed
compare_nonprofits - First observed
get_nonprofit_profile - First observed
search_nonprofits
Related MCP Connectors
Check any US charity or nonprofit by name or EIN. Free nonprofit_check tool.
Nonprofit lookup and IRS 990 filing data: revenue, assets, and compensation via ProPublica
Search, verify and compare 7.9M+ nonprofits from official charity registries in 100+ countries.
IRS records on US nonprofits: exempt status, revocations, Form 990 financials, due dates, stats.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceSearch and explore 1.8M+ US nonprofits, fetch Form 990 financials, and access IRS filing history via MCP.366 npm2Apache 2.0
- AlicenseAqualityDmaintenanceProvides tools to search and retrieve nonprofit organization data and IRS filing summaries from ProPublica's Nonprofit Explorer, including side-by-side comparisons.4MIT
- FlicenseAqualityDmaintenanceEnables AI assistants to look up IRS nonprofit data, verify tax-deductible charity status, and search for organizations by name or location using the CharityAPI database.43-
- AlicenseNot gradedqualityCmaintenanceEnables querying nonprofit organization data through the ProPublica Nonprofit Explorer API, providing access to financial and operational information without authentication.294 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.