Skip to main content
Glama

nonprofit-explorer-mcp-server

Search Nonprofits

nonprofit_search
Read-only

Search 1.8M+ IRS-recognized tax-exempt organizations by name, keyword, city, or phrase. Optionally narrow by US state, NTEE major sector (1–10), or 501(c) subsection type. Returns EINs — pass them to nonprofit_get_organization or nonprofit_get_filings for details. Results are paginated at 25 per page; use the page parameter and num_pages to paginate. Total results cap at 10,000 in the API; if total_results === 10000 the actual count may be higher. A zero-match query and a page past the last one both return an empty organizations array with a notice rather than an error; only a page whose offset reaches that 10,000 cap is refused. Supports quoted phrases ("Red Cross"), required terms (+evanston), excluded terms (-dental). Data from ProPublica Nonprofit Explorer, sourced from IRS Form 990 filings.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
pageNoZero-indexed page number. 25 results per page. Total pages is in num_pages. Increment to paginate large result sets.
queryYesKeyword search string. Searched against org name, the secondary name line, and city in order of relevance. Supports: quoted phrases ("Red Cross"), required terms (+evanston), excluded terms (-dental). Empty string returns all orgs within the active filters.
stateNoTwo-letter US state, territory, or military postal code (e.g., "WA", "NY", "PR"). Case-insensitive — normalized to uppercase before filtering. A code outside that set is rejected rather than silently returning national results. Restricts results to orgs headquartered in that state. "ZZ" (foreign address) is accepted, but no organization in the index currently carries it.
ntee_categoryNoNTEE (National Taxonomy of Exempt Entities) major group integer (1–10). 1=Arts/Culture/Humanities, 2=Education, 3=Environment/Animals, 4=Health, 5=Human Services, 6=International/Foreign Affairs, 7=Public/Societal Benefit, 8=Religion Related, 9=Mutual/Membership Benefit, 10=Unknown/Unclassified.
subsection_codeNo501(c) subsection code. "3" = charitable/religious/educational organization (most common — includes both public charities and private foundations; nonprofit_get_organization returns foundation_type to tell them apart), "4" = social welfare org, "6" = business league/trade association, "92" = 4947(a)(1) nonexempt charitable trust. Filters by tax status, not sector.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
errorNoPresent when the call failed. Absent on success.
noticeNoPresent when the response needs a caveat the domain fields cannot carry: a page that returned no organizations (distinguishing a zero-match query from a page past the end of the result set, and naming the next call), a total_results sitting on the API result ceiling rather than counting matches, or both at once in one string. Absent when the page is populated and the total is an exact count.
cur_pageNoCurrent page (zero-indexed).
per_pageNoResults per page applied by the API (25).
num_pagesNoTotal pages available (total_results / 25, ceiling). The last valid page is num_pages - 1.
data_sourceNoProPublica + IRS attribution text.
page_offsetNoZero-indexed offset of the first result on this page. Requests are refused once this reaches 10,000.
organizationsNoMatching organizations for the current page.
total_resultsNoTotal matching orgs (up to 10,000 — the API ceiling). If 10000, actual count may be higher.
active_filtersNoActive filters echoed back for verification.

TDQS

A5/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses significant behavioral traits: pagination at 25 per page, a 10,000 total-result cap with the meaning of total_results === 10000, the exact behavior for zero-match and past-last-page queries (empty array with notice rather than error), the specific cap refusal, supported search syntax (quoted phrases, + and -), and the data source. This is far more than annotations provide and is highly informative.

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

Conciseness5/5

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

The description is dense but every sentence adds value. It is structured logically: purpose, return value and usage, pagination mechanics, edge-case behavior, search syntax, and data source. Nothing is redundant; the length is justified by the tool's complexity and the need to communicate all these caveats. Front-loading the core purpose and the return-value pointer to siblings is well done.

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?

Given the tool's complexity (filters, pagination, caps, error handling, search syntax), the description covers all essential aspects an agent needs to call it correctly. It also has an output schema for return values, so no need to explain them. There are no gaps for a reasonable agent to trip over.

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

Parameters5/5

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

Even though the schema descriptions cover 100% of parameters, the tool description adds valuable semantic context beyond them: it explains how pagination works (page and num_pages), clarifies the meaning of an empty query, and hints at the parameter roles in the search. It explicitly discusses the NTEE category and subsection codes while also providing a rationale for using them. This goes well beyond the baseline.

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 clearly states the verb 'Search' and the resource '1.8M+ IRS-recognized tax-exempt organizations', specifying the search fields (name, keyword, city, phrase) and optional filters (state, NTEE sector, subsection code). It also distinguishes this tool from its siblings by stating that it returns EINs to be passed to nonprofit_get_organization or nonprofit_get_filings for details.

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

Usage Guidelines5/5

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

The description explicitly instructs to use this tool for searching and then pass the resulting EINs to the two sibling tools for details, making the when-to-use clear. It also provides detailed pagination instructions (page and num_pages) and mentions that empty queries return all orgs within active filters, giving actionable guidance for actual usage.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.7/5.0
Disambiguation5/5

Each tool serves a distinct, non-overlapping purpose: search for organizations, retrieve an organization's profile, and retrieve its filings. There is no ambiguity about which tool to use for a given task.

Naming Consistency5/5

All tools follow the same 'nonprofit_<action>' pattern with verbs indicating the operation (search, get_filings, get_organization). The naming is clean, predictable, and consistent.

Tool Count5/5

With only three tools, the set is tightly scoped to the server's purpose of exploring nonprofit data. Each tool is essential and there is no bloat or redundancy, making the count appropriate.

Completeness5/5

The tool surface covers the entire workflow: search to find entities, get details for a single entity, and retrieve historical filings for analysis. No obvious gaps exist for the stated purpose of exploring nonprofit data.