Skip to main content
Glama

Find Funders of a Nonprofit

find_funders_of_nonprofit
Read-only

Find the funders that have ACTUALLY granted to ONE specific nonprofit — the reverse of get_foundation_grants, over the real 7.5M-edge who-funds-whom grant graph (IRS 990-PF, 2022-2026) plus identity-verified announced/web grant records (how new and non-990 funders appear; per-entry 'source' says which store each funder came from, and announced amounts are often not published — they are counted, never summed).

Use this when the question is about a SINGLE org: "who funds Greater Chicago Food Depository?", "which foundations support this nonprofit?", or to prospect from one well-funded peer. To aggregate the same signal across SEVERAL peer orgs, use find_funders_for_peers instead.

Pass recipient_ein when known (most precise). Otherwise pass recipient_name and it is resolved to the best IRS-registered match — the response echoes which nonprofit it resolved to under 'recipient'; confirm it's the org the caller meant.

COVERAGE: US private-foundation (990-PF) grant history PLUS identity-verified announced/web grant records — the latter is how new funders, corporate programs, and non-990 foundations appear here. Government grants and most donor-advised funding still do NOT appear, so an empty result means "no tracked funder reported or announced a grant to this org", not "this org has no funders" — say exactly that.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of funders to return (1-50)
min_amountNoUSD threshold (default 1000): minimum single-grant size for 990 entries; for announced entries, applied to the funder's aggregate published USD total (unpublished/non-USD amounts are never excluded by it)
nonprofit_einNoAlias for recipient_ein. The tool name says 'nonprofit', so MCP clients send nonprofit_ein= — accept both; recipient_ein wins when both are set.
recipient_einNoEIN of the RECIPIENT nonprofit whose funders you want.
nonprofit_nameNoAlias for recipient_name. The tool name says 'nonprofit', so MCP clients send nonprofit_name= (256 rejected calls by 2026-09-30, ticket #1890) — accept both; recipient_name wins when both are set.
recipient_nameNoName of the recipient nonprofit (resolved via the IRS BMF registry when recipient_ein is not given).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / min_amount / description
      Previous value: -"Minimum single-grant size in USD (default 1000)"New value: +"USD threshold (default 1000): minimum single-grant size for 990 entries; for announced entries, applied to the funder's aggregate published USD total (unpublished/non-USD amounts are never excluded by it)"
  2. Changed2 schema fields changed
    • addedInput schema / properties / nonprofit_ein
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Alias for recipient_ein. The tool name says 'nonprofit', so MCP clients send nonprofit_ein= — accept both; recipient_ein wins when both are set."
      +}
    • addedInput schema / properties / nonprofit_name
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Alias for recipient_name. The tool name says 'nonprofit', so MCP clients send nonprofit_name= (256 rejected calls by 2026-09-30, ticket #1890) — accept both; recipient_name wins when both are set."
      +}
  3. Added

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the readOnly/destructive annotations: discloses data provenance (IRS 990-PF 2022-2026 plus identity-verified announced records, per-entry 'source'), the semantic that announced amounts are counted but never summed, and the crucial empty-result interpretation ('no tracked funder reported or announced', not 'no funders'). It also warns the response echoes the resolved recipient for confirmation.

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?

Purpose and the single-org scope are front-loaded, and the CAPS section headers aid scanning. It is on the long side and the announced/web-records point is restated in both the opening paragraph and COVERAGE, which is mild redundancy rather than wasted space.

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?

With an output schema present the description needn't explain return shape, and it still covers the things that matter: coverage boundaries (no government or most DAF funding), empty-result semantics, source attribution, and recipient resolution/echo. Nothing an agent needs to call this correctly is missing.

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

Parameters4/5

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

Schema coverage is 100% so the baseline is 3, but the description adds genuine value the schema does not: recipient_ein is 'most precise', recipient_name resolves via the IRS BMF registry, and the response echoes the resolved org. It does not, however, add anything about limit or min_amount beyond the schema.

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?

States a precise verb+resource (find funders that granted to ONE nonprofit) and explicitly positions itself as 'the reverse of get_foundation_grants' over a named grant graph. It also names the sibling it is not (find_funders_for_peers) for the multi-org case, so an agent can discriminate without opening schemas.

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?

Gives concrete when-to-use triggers ('who funds X?', 'which foundations support this nonprofit?', prospecting from a peer) and an explicit exclusion routing the aggregate case to find_funders_for_peers. It further specifies parameter preference order (recipient_ein when known, else recipient_name) with the resolution caveat.

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.

Resources