foundation-discovery
Server Details
Foundation discovery and grant intelligence for nonprofits. 174K+ US funders, IRS 990 data.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
Available Tools
13 toolsfind_funders_for_peersFind Funders for Peer OrgsARead-onlyInspect
Find grantmakers that have ACTUALLY funded organizations LIKE the caller's, using the real 7.5M-edge who-funds-whom grant graph (IRS 990-PF, 2022-2026). This is the strongest free-tier prospecting move: collaborative-filtering peer prospecting, distinct from search_funders (name/topic lookup) and search_open_grants (active RFPs).
HOW IT WORKS: for each peer organization, it looks up every foundation that granted to that peer, then merges funders across peers. A funder that gave to several of your peers ranks highest. Every result carries real grant evidence — which peers the funder funded and for how much.
INPUTS (provide one):
peer_orgs (PREFERRED): names or 9-digit EINs of organizations LIKE the one you're raising for — peers, aspirational orgs, or orgs with a similar mission. The graph is keyed by recipient EIN, so naming real peers yields the sharpest evidence. Up to 12 are used.
org_description: a SHORT CAUSE PHRASE, not a paragraph — "food bank", "mental health", "affordable housing". Fallback for when you cannot name peers: it matches the phrase against IRS BMF organization NAMES and, if that finds nothing, against the NTEE cause taxonomy, then uses the best-funded organizations in that cause (biased to
location). It does NOT search mission text, so a LONGER description matches FEWER orgs, not more — keep it to the cause, and prefer peer_orgs. The response reports which pass produced the peers inpeer_discovery.
RECOMMENDED WORKFLOW: establish the org's mission/cause, then name 2-5 peer organizations and call this tool. Deepen any candidate with get_funder_profile / get_foundation_grants (pass the returned ein).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of funders to return (1-50) | |
| location | No | Optional 2-letter state or "City, ST". Only biases peer discovery under org_description; never filters funders. | |
| peer_orgs | No | Names or EINs of peer / aspirational organizations. Example: ["Greater Chicago Food Depository", "Feeding America"]. | |
| min_amount | No | Minimum single-grant size in USD (default 5000) | |
| org_description | No | Short cause phrase for the nonprofit (fallback). Example: "youth mental health". Adding words narrows the match. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and non-destructive, and the description adds substantial behavioral context beyond that: the 7.5M-edge graph, 2022-2026 IRS data, how funders are merged across peers, that results carry grant evidence, that location only biases peer discovery and never filters funders, and that longer org descriptions match fewer orgs. This is unusually transparent.
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?
The description is longer than average but earnestly structured with bold section labels and front-loaded purpose. Each section adds operational value; only minor marketing-style phrasing like 'strongest free-tier prospecting move' is non-essential. Overall it is dense but well-organized.
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 tool with 5 optional parameters, a fallback matching algorithm, and sibling alternatives, the description is complete: it covers inputs, behavior, edge cases, recommended workflow, and downstream follow-up tools. Since an output schema exists, not spelling out return fields is acceptable, and the description even names a returned field (peer_discovery).
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 already 100%, and the description still adds meaningful guidance: peer_orgs is preferred, up to 12 are used, org_description should be a short cause phrase rather than a paragraph, and the matching fallback path is explained. This goes well beyond the schema's field descriptions, especially for the two mutually-conditioned input modes.
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 grantmakers that have ACTUALLY funded organizations LIKE the caller's' using a named grant graph. It also explicitly distinguishes this tool from search_funders and search_open_grants, so an agent can immediately tell it apart from siblings.
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?
Gives explicit when-to-use guidance: name 2-5 peers for sharpest results, use org_description only as a fallback, and pair with get_funder_profile/get_foundation_grants for deeper research. It also names the alternatives it is not (search_funders, search_open_grants), making selection unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_funders_of_nonprofitFind Funders of a NonprofitARead-onlyInspect
Find the foundations 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).
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) grants only. Government grants, corporate giving, and most donor-advised funding do NOT appear, so an empty result means "no tracked foundation reported a grant to this org", not "this org has no funders" — say exactly that.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of funders to return (1-50) | |
| min_amount | No | Minimum single-grant size in USD (default 1000) | |
| recipient_ein | No | EIN of the RECIPIENT nonprofit whose funders you want. | |
| recipient_name | No | Name of the recipient nonprofit (resolved via the IRS BMF registry when recipient_ein is not given). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint, the description discloses rich behavioral details: it is the reverse of get_foundation_grants, it resolves names via IRS BMF and echoes the resolved recipient, and it clarifies coverage limitations (990-PF only, not government/corporate/donor-advised). It also explains how to interpret empty results, which is important nuanced behavior.
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?
The description is front-loaded with the core purpose, then organized into usage, parameter guidance, and coverage caveats. Each sentence adds value and nothing is redundant; the length is appropriate for the complexity, with clear formatting (COVERAGE in caps) to highlight critical caveats.
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?
The description covers the essential context: data source and time range, inverse relationship to another tool, single-org vs peer scope, parameter resolution behavior, and coverage limitations. The presence of an output schema relieves the need to describe return values, and the annotations cover safety, so this is complete for an agent to invoke 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?
Schema covers all four parameters with descriptions, so baseline is 3. The description adds meaningful usage guidance beyond the schema by explaining the EIN-vs-name precedence and resolution behavior, which helps the agent choose parameters correctly. It does not elaborate on limit/min_amount, but those are already fully described in the schema.
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?
Description uses a specific verb and resource: 'Find the foundations that have ACTUALLY granted to ONE specific nonprofit', and explicitly names the inverse of get_foundation_grants. It also distinguishes itself from the sibling find_funders_for_peers by contrasting single-org vs several-org use.
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?
The description explicitly states when to use this tool ('Use this when the question is about a SINGLE org'), gives example queries, and directs multi-org cases to find_funders_for_peers. It also provides parameter selection guidance (prefer recipient_ein, otherwise recipient_name with resolution confirmation).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_990_summaryGet IRS 990 SummaryARead-onlyInspect
Get IRS 990 filing summary and financial trends for a foundation.
This tool retrieves IRS 990 filing data (Form 990 or 990-PF) for a foundation, showing financial information over time. It calculates year-over-year trends for assets, grants, and revenue.
| Name | Required | Description | Default |
|---|---|---|---|
| ein | Yes | Foundation EIN (9 digits). Can include hyphens (e.g., "94-3136777") or be provided as digits only (e.g., "943136777"). | |
| years | No | Number of years of filing data to return (1-10) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds meaningful behavioral context by specifying that it shows financial information over time and calculates trends for assets, grants, and revenue. It also mentions Form 990 or 990-PF, giving additional insight not captured by annotations, though it does not disclose potential limitations like data availability gaps.
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?
The description is two sentences long, front-loaded with the primary purpose, and includes supplementary detail about trends and form types without redundancy. Every sentence contributes value.
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?
Given the tool has an output schema (not shown) and good annotations, the description is reasonably complete. It explains what data is retrieved, the types of forms covered, and the trend calculation. It could be slightly more explicit about prerequisites (e.g., foundation EIN) but the schema already covers that. Overall adequate.
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 covers both parameters (ein and years) with full detail, so description need not add parameter-level meaning. The description's reference to 'over time' and 'trends' implicitly relates to the 'years' parameter, but adds no new semantics beyond the schema. Thus baseline 3 is appropriate.
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 clearly states the tool retrieves IRS 990 filing data and calculates financial trends for a foundation. It specifies the resource (IRS 990 filings) and the action (retrieve/show trends), distinguishing it from sibling tools that focus on other aspects like grants or funder profiles.
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?
The description implies usage for getting financial trends for a foundation, but does not explicitly state when to use this tool versus alternatives like get_funder_stats or search_funders. It provides context (e.g., 'over time', 'year-over-year trends') but lacks direct comparison or exclusion statements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_foundation_grantsGet Foundation GrantsARead-onlyInspect
View grants made by a funder across IRS, web-extracted, and registry records.
Merges five stores. (1) IRS 990-PF filings — structured grant lines from the ~143K US private foundations that file 990s, keyed by EIN. (2) Web-extracted grant records — our enrichment pipeline crawls funder websites and an LLM extracts their grant lists. This second store covers ~15K additional US foundations AND ~17K non-990 funders (European foundations, US community foundations, DAFs, corporate giving programs). (3) 360Giving UK GrantNav rows, (4) CRA T3010 Canadian rows, and (5) ACRI Italian banking-foundation erogazioni are structured registry sources with original-currency amounts preserved.
Use this for ANY funder when the user asks about grants given, including
European funders without an EIN (pass funder_id instead of ein).
Each row in the response carries a source field ("990" for IRS
data, "discovered_web" for crawled, plus "360giving", "t3010",
and "acri" for structured registries). When web-extracted rows for a
funder lack captured amounts (common for European funders that publish PDFs
rather than open data), the response includes an amount_coverage_note
in data_quality — surface that caveat in your reply.
Note: recipient_country reflects the recipient organization's HQ
country (where the grantee is registered), not necessarily where the
program work is implemented.
| Name | Required | Description | Default |
|---|---|---|---|
| ein | No | Foundation EIN (9 digits, hyphens OK). Required for US 990 path. Optional if ``funder_id`` is supplied for a non-990 funder. | |
| year | No | Optional year to filter by (filing_year for 990, grant_year for discovered). If not provided, returns all available years. | |
| limit | No | Maximum number of grants to return (1-50) | |
| funder_id | No | Optional non-990 funder id. Accepts a bare UUID or prefixed id like ``n9f:<uuid>`` / ``non990:<uuid>``. Use this for European funders, US community foundations, DAFs, and other funders that don't file IRS 990-PF. You can get it from search_funders or get_funder_profile. | |
| ntee_code | No | Optional NTEE code to filter recipient organizations. Example: "B41" (Higher Education), "E" (Health). Use get_ntee_codes to browse available codes. | |
| purpose_keyword | No | Optional case-insensitive substring to match against the grant_purpose field. Useful for narrowing to a topic when recipient NTEE code is too coarse — e.g., purpose_keyword="vaccine" surfaces Gates grants whose purpose text mentions vaccines, even when the recipient is classified outside health (universities, think tanks, etc.). | |
| recipient_state | No | Optional 2-letter US state code to filter by recipient state (e.g., "CA", "NY"). | |
| recipient_country | No | Optional recipient country filter. Use ISO 3166-1 alpha-2 codes (e.g., "CH" Switzerland, "ZA" South Africa, "NG" Nigeria, "IN" India). A code that is valid ISO is always read as ISO ("NG" is Nigeria, never Niger; "SN" is Senegal, never Singapore); legacy FIPS 10-4 codes match only when they are not ISO codes at all ("UK", "SF"). Output codes are emitted in ISO 3166. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with readOnlyHint=true and destructiveHint=false already covering safety, the description adds significant behavioral context: it merges five distinct stores, each row includes a source field with concrete values, web-extracted records may carry an amount_coverage_note that must be surfaced, original-currency amounts are preserved, and recipient_country reflects the grantee's HQ country rather than implementation location. No annotation contradiction.
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?
The description is long, but the tool is genuinely complex and nearly every paragraph earns its place: source enumeration, the data-quality caveat, and the country semantics note are all decision-relevant. It is front-loaded with purpose and scoping, though the detailed store-by-store statistics could be tightened without losing much.
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 an 8-parameter tool with five merged data sources, the description covers what the tool returns, how to select the right funder identity, what source field values to expect, and an important data-quality caveat to surface. With annotations covering safety and an output schema present, nothing critical is missing.
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?
The schema has 100% description coverage, so the baseline is 3 and the description does not need to repeat parameter mechanics. It adds value by explicitly instructing the agent to pass funder_id instead of ein for non-990 funders and by clarifying the semantic of recipient_country beyond the schema's ISO-code guidance. This is enough to raise it slightly above baseline.
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 first sentence clearly states the action ('View grants made by a funder') and the resource scope ('IRS, web-extracted, and registry records'). It goes beyond the title by specifying exactly which kinds of funders and sources are covered, and the 'ANY funder' phrasing helps distinguish it from opportunity-oriented tools like search_open_grants.
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?
The description gives an explicit directive: use this for ANY funder when the user asks about grants given, including non-EIN European funders, and it tells the agent to pass funder_id instead of ein. It does not explicitly name a sibling alternative or state when not to use the tool, though the 'grants made by a funder' framing implies the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_funder_profileGet Funder ProfileARead-onlyInspect
Get detailed profile information for a specific funder.
Polymorphic identifier — pass ein for US 990 foundations OR
funder_id (bare UUID / n9f:<uuid>) for non-990 funders such as
European, UK 360Giving, and Canadian CRA T3010 funders. search_funders
returns both fields on every hit, so the caller can hand either one back
here. At least one identifier must be supplied.
Use this after searching for funders to get detailed information about a specific one.
| Name | Required | Description | Default |
|---|---|---|---|
| ein | No | Foundation EIN (9 digits) for US 990 funders. Can include hyphens (e.g., "94-3136777") or be provided as digits only (e.g., "943136777"). Optional if ``funder_id`` is supplied for a non-990 funder. | |
| funder_id | No | Optional non-990 funder id. Accepts a bare UUID or ``n9f:<uuid>`` / ``non990:<uuid>``. The ``usf:<ein>`` prefix is also accepted and routes back to the EIN path. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnly/destructive hints, so the description need not repeat them. It adds valuable behavioral context by explaining polymorphic identifier handling (ein vs funder_id with n9f prefix) and the constraint that at least one identifier must be supplied. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short, front-loaded paragraphs with no filler. Each sentence earns its place: purpose, identifier polymorphism, and when to use it.
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?
With only two optional parameters, a rich output schema, and strong annotations, the description covers the core workflow and identifier choice completely. It answers the key questions an agent would have about what to pass and when.
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?
The input schema already documents both parameters with 100% coverage, so the baseline is 3. The description adds semantics by grouping the identifiers by funder type (US 990 vs non-990) and reinforcing that search_funders returns both fields, aiding identifier selection.
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 opens with 'Get detailed profile information for a specific funder,' which uses a specific verb and resource and immediately distinguishes this from sibling search/stats tools. It also clarifies the scope (specific funder) rather than a list or aggregate.
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?
The description explicitly states 'Use this after searching for funders to get detailed information about a specific one,' giving clear situational context. It does not name alternative tools or state when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_funder_statsGet Funder StatisticsARead-onlyInspect
Get comprehensive giving statistics for a funder.
This tool calculates aggregate statistics about a funder's grantmaking
from IRS 990-PF data, web-extracted grant records, 360Giving rows, CRA
T3010 rows, and ACRI rows. It provides lifetime totals, focus areas, geographic
distribution, and year-over-year trends.
Pass ein for US 990 foundations, or funder_id (bare UUID /
n9f:<uuid>) for non-990 funders.
| Name | Required | Description | Default |
|---|---|---|---|
| ein | No | Foundation EIN (9 digits). Can include hyphens (e.g., "94-3136777") or be provided as digits only (e.g., "943136777"). Optional when funder_id is supplied. | |
| funder_id | No | Optional non-990 funder id (bare UUID / ``n9f:<uuid>``). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds behavioral context by enumerating the data sources (IRS 990-PF, web-extracted, 360Giving, CRA T3010, ACRI) and the types of aggregate outputs. It does not disclose potential limitations such as data completeness, but the additions are valuable beyond the annotations.
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?
The description is front-loaded with the main purpose, followed by a concise explanation of data sources and outputs, then the parameter selection. Each sentence contributes new information, with no fluff or redundancy. It is appropriately sized for the tool's complexity.
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?
Given an output schema exists, the description does not need to detail return values. It explains the tool's scope, data sources, and parameter usage. It lacks explicit notes on edge cases (e.g., funders with no data), but overall it is complete enough for an agent to invoke the tool 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?
Schema covers 100% of parameters. The description adds a decision rule for choosing between ein and funder_id based on funder type, which is not fully articulated in the schema. It also reinforces the formatting details (hyphens allowed). This extra guidance meaningfully assists the agent.
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 opens with 'Get comprehensive giving statistics for a funder,' clearly stating the verb and resource. It further specifies what the statistics include (lifetime totals, focus areas, geographic distribution, trends) and the data sources used, effectively distinguishing it from siblings like get_funder_profile or get_foundation_grants.
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?
The description gives explicit guidance on when to use each parameter: 'Pass ein for US 990 foundations, or funder_id for non-990 funders.' This provides clear context for tool invocation, though it does not explicitly contrast with alternative tools or state exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ntee_codesBrowse NTEE CodesARead-onlyInspect
Browse NTEE (National Taxonomy of Exempt Entities) classification codes.
NTEE codes are used to classify nonprofit organizations by their primary purpose. This tool helps you find the right NTEE code for searching or understanding a foundation's focus area.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Search term to find codes by description (case-insensitive). Example: "education", "youth", "environment" | |
| category | No | Single letter (A-Z) to browse codes in a major category. Example: "A" for Arts, Culture & Humanities "B" for Education "E" for Health Care "P" for Human Services |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds context about what the tool does (browse codes) and its purpose, but does not disclose any additional behavioral traits such as pagination, result limits, or how outputs are structured. This is acceptable for a simple read-only lookup tool with an output schema.
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?
The description is two well-structured sentences. The first sentence explains what the tool b rowses, and the second adds purpose. There is no fluff, and the key information is front-loaded.
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?
This is a simple tool with two optional parameters, a rich schema, and an output schema, so the description doesn't need to over-explain. It covers the overall purpose and usage context. However, it could slightly improve by explicitly noting that either parameter option can be used independently or together, though the schema already implies this.
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%, and each parameter has a clear description. The tool description itself does not add extra meaning beyond the schema, but the baseline of 3 is appropriate because the schema already explains the parameters thoroughly.
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 clearly identifies the tool as a browser for NTEE classification codes, with a specific purpose: helping find the right code for searching or understanding a foundation's focus area. It uses the verb 'browse' plus the resource 'NTEE codes,' and the context about nonprofit classification distinguishes it from sibling tools about funders and grants, though it doesn't explicitly compare to a sibling.
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?
The description states when to use the tool ('find the right NTEE code for searching or understanding a foundation's focus area') but provides no exclusions or alternatives. Since there are no direct sibling tools for NTEE codes, the guidance is adequate but not explicit about when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_checkHealth CheckARead-onlyInspect
Check server health and connectivity.
Returns: Dictionary with health status including: - status: "healthy" or "unhealthy" - version: Server version - environment: Current environment (dev/staging/prod)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds value by disclosing the return structure (status, version, environment) and the connectivity check behavior, which goes beyond the annotation-only information.
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?
The description is extremely concise, front-loaded with the purpose, and follows with a clear bulleted list of return fields. No filler or redundant content.
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 zero-parameter health check tool, the description fully covers its purpose and return data. The output structure is described, and no additional context is needed given the tool's simplicity and the supporting annotations.
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?
The input schema has zero parameters, so schema coverage is 100%. There is nothing for the description to add about parameters. Baseline for zero-param tools is 4, and no explanation is needed.
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 clearly states 'Check server health and connectivity' with a specific verb and resource. This uniquely distinguishes it from sibling tools, which all focus on funder/nonprofit data operations.
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?
The purpose is unambiguous and provides clear context for when to use this tool: when you need to verify server health or connectivity. It does not explicitly list alternatives or exclusions, but the domain differentiation from siblings makes the usage context evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_toolsList Available ToolsARead-onlyInspect
List available MCP tools and get detailed help.
Use this tool to discover what tools are available and how to use them. Call without parameters to see all tools, or provide a tool name to get detailed help including parameters, examples, and related tools.
| Name | Required | Description | Default |
|---|---|---|---|
| tool_name | No | Optional name of a specific tool to get detailed help for. Example: "search_funders", "get_funder_profile" |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, so the description only needs to add extra behavioral context. It does so by explaining the tool's dual behavior (list all vs. details for a specific tool) and mentioning what the help includes (parameters, examples, related tools). No contradictions 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences with the main purpose front-loaded. Every sentence adds useful information without fluff or redundancy.
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?
Given the simple schema, rich annotations, and the presence of an output schema, the description fully covers the tool's behavior. It explains both usage modes and what to expect in return, leaving no significant gaps.
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% for the one parameter, so the baseline is 3. The description adds value beyond the schema by explicitly stating that calling without parameters shows all tools, and providing a tool name gets detailed help—this clarifies the optional parameter's behavioral effect.
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 clearly states the tool lists available MCP tools and provides detailed help. It uses a specific verb and resource, and it distinguishes itself well from sibling tools which all focus on domain-specific queries like funder or grant searches.
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?
The description explicitly states when to use the tool ('to discover what tools are available and how to use them') and explains the two call modes (no parameters vs. with a tool name). It does not explicitly mention when not to use it or contrast with alternatives, but the context is clear given the nature of the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_funder_jobsSearch Funder JobsARead-onlyInspect
Search OPEN PHILANTHROPY JOBS at grantmaking foundations.
Surfaces roles involved in giving away money, running philanthropic programs, or executive leadership of philanthropic work. Backed by a weekly scrape of ~50K funder careers pages + GPT-5.4-mini classification against an 8-category taxonomy.
Categories (use the category param to filter):
grantmaking: Program officers, grants managers, RFP reviewers
program_leadership: VP Programs, Chief Program Officer, Program Director (cause-area)
executive_leadership: CEO, President, Executive Director at a foundation or community foundation
philanthropy_operations: Foundation finance/HR/IT/COO
program_support: Program associates, M&E officers, learning officers, program coordinators
development_for_grantmaking: Major gifts officers and development roles at community foundations and other regranting entities (NOT university or hospital development for the parent's operations)
philanthropy_communications: Foundation comms staff
philanthropy_strategy: Chief Strategy Officer, impact officer, equity & inclusion at a foundation
What's excluded by design: clinical/medical, retail, academic teaching, university advancement for the university itself, hospital fundraising for hospital ops, construction/facilities.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (1-50) | |
| query | No | Keyword search on job title (case-insensitive substring). Examples: "program officer", "grants manager", "CEO", "communications director". | |
| state | No | 2-letter US state code (e.g., "CA", "NY"). Uses a broad SQL prefilter plus an exact token-aware post-filter against the location field. | |
| remote | No | remote | hybrid | on-site. | |
| country | No | Funder HQ country — ISO 3166-1 alpha-2 ("US", "GB", "DE") or a recognized name ("United Kingdom", "Germany"). Filters by where the FOUNDATION is headquartered; the corpus spans European funders, not just US. Independent of `state` (US foundations are the only ones with state-level location data). | |
| sort_by | No | Result ordering. 'funder_giving' (default) ranks by the foundation's annual average giving so the biggest funders surface first. 'recent' sorts by posted_at desc. | funder_giving |
| category | No | One of the 8 philanthropy categories above. | |
| seniority | No | Experience level: internship_fellowship | entry_level | mid | senior | executive. Comma-separate for multi-select — 'entry_level,internship_fellowship' is the early-career shelf (new grads, students). Rows not yet leveled by the classifier are excluded when set. | |
| funder_ein | No | Restrict to one funder by EIN (9 digits, optional prefixes/dashes accepted). | |
| funder_eins | No | Restrict to a LIST of funder EINs (up to 100). The recommended compositional pattern is search_funders → search_funder_jobs(funder_eins=[...]) for cause-area searches (climate, racial equity, youth, etc.) where the cause isn't captured by the 8 role-family categories. | |
| employment_type | No | full-time | part-time | contract | internship | fellowship | temporary. | |
| exclude_categories | No | Categories to hide. Default is no category exclusions; the public jobs board includes operations roles. Pass specific category names to suppress them. | |
| posted_within_days | No | Recency window in days (0-730). Set 0 to disable. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds meaningful context beyond that: it explains the data pipeline (weekly scrape of ~50K pages) and the classification model (GPT-5.4-mini), plus explicit exclusions that set result expectations. This is useful behavioral info not present in annotations.
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?
The description is well-structured: a clear opening sentence, a data-source note, a bulleted category list, and a concise exclusions list. While lengthy due to the category taxonomy, every section serves a distinct purpose—either clarifying parameter values or setting result expectations. Nothing is redundant.
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 13-parameter search tool with full schema coverage and an output schema, the description is remarkably complete. It covers domain boundaries, data freshness, classification methodology, category definitions, and explicit exclusions. The agent receives all necessary context to decide when and how to invoke the tool 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?
The schema has 100% parameter description coverage, so it already carries much of the semantic load. The main description adds significant value by defining all 8 categories for `category`/`exclude_categories`, including concrete role examples and exclusions—information the schema references but does not enumerate. Other parameters are already well-documented in the schema.
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 opens with a specific verb+resource: 'Search OPEN PHILANTHROPY JOBS at grantmaking foundations.' It clearly identifies the tool's function and distinguishes it from sibling tools like search_funders (which searches funders) and search_open_grants (which searches grants).
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?
The description provides clear context about scope and exclusions, including a detailed 'What's excluded by design' list and category definitions. However, it does not explicitly name alternative tools for other query types (e.g., 'for grants use search_open_grants'), so it stops short of full comparative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_fundersSearch GrantmakersARead-onlyInspect
Look up grantmaking organizations by name, topic, or location.
This tool searches 174K+ grantmaking organizations from IRS data using organization names plus grant-purpose/topic signals. Use it when you know the funder's name, want aligned funders for a cause area, or want to browse by location/size/NTEE code. Multi-word searches are ranked by relevance; simple browse/name fallback results are ordered by total assets.
IMPORTANT: Use search_open_grants when the user needs active grant programs or RFPs. search_funders is for finding aligned grantmakers, including ones that may fund by relationship, LOI, or annual cycle rather than a live call.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City name to filter by (case-insensitive). Example: "San Francisco", "New York" | |
| limit | No | Maximum number of results to return (1-50) | |
| metro | No | Colloquial metro / region name for sub-state geography a single city can't capture — "Bay Area", "NYC", "the DMV", "Greater Boston", "Los Angeles", "Chicago", "Seattle". Resolved to its MSA/CBSA code set and applied as an HQ pre-filter. PREFER this over `city` whenever the user names a metro/region rather than one municipality (e.g. "Bay Area funders that fund drug rehab" → query="drug rehab addiction", metro="Bay Area"). Accepts a single name or a list. City names resolve too ('Cleveland', 'Knoxville', 'Portland, OR'). An unrecognized name does NOT error: the search runs without that metro filter and the result carries `geo_notice` saying so (with a did-you-mean when one is close). Example: "Bay Area", ["NYC", "Greater Boston"] | |
| query | No | Search term for a funder name or cause-area phrase. Example: "Ford Foundation", "global health", "community foundation" Topic searches work best with 2+ words. | |
| state | No | Two-letter US state code to filter by funder HQ location. Example: "CA", "NY", "TX" | |
| country | No | Optional HQ country name (or list of names) to restrict to funders headquartered in those countries (e.g., "Germany", ["United States", "Canada"]). Distinct from `grantee_country_codes` (where the funder's grants land) and from `state` (US state of HQ). Use when the user asks for funders based in a specific country — e.g. "European-headquartered foundations" → country=["Germany","Spain","United Kingdom", "Switzerland","Netherlands","France"]. US foundations are included only when "United States" (or "USA") is in the list, or when the param is omitted. | |
| has_pris | No | Filter to foundations with known program-related investment activity. Set true when looking for PRI-active capital providers. | |
| msa_codes | No | Explicit MSA/CBSA codes when you already know them (e.g. ["41860", "41940"]); unioned with whatever `metro` resolves to. Most callers should use `metro`. | |
| ntee_code | No | NTEE classification code to filter by. Example: "A20" (Arts Organizations), "B" (Education), "E" (Health) | |
| max_assets | No | Maximum total assets filter in dollars. Example: 100000000 (foundations with up to $100M assets) | |
| min_assets | No | Minimum total assets filter in dollars. Example: 10000000 (foundations with $10M+ assets) | |
| funder_type | No | Optional canonical funder_type to include. Examples: "community_foundation", "family_foundation", "corporate_foundation", "private_operating", "operating_nonprofit", "independent_foundation". Use this to narrow to a specific kind of grantmaker. NOTE: operating entities (private_operating, operating_nonprofit) are EXCLUDED BY DEFAULT — name one here to include it (e.g. to look up a specific hospital or patient-assistance foundation). | |
| has_er_grants | No | Filter to foundations that make expenditure responsibility grants (grants to non-501(c)(3) entities like PBCs, for-profits, and foreign orgs). Set to True to find only ER-active funders. | |
| exclude_funder_types | No | Optional list of canonical funder_type codes to exclude from results. NOTE: this search ALREADY excludes the operating-entity types by default — private_operating (pharma patient-assistance foundations) and operating_nonprofit (hospital / university group returns) post large "annual_grants" but aren't grantmakers you can apply to. Use this for ADDITIONAL categories; to opt an operating type back in, name it in funder_type instead. | |
| grantee_country_codes | No | Optional list of FIPS 10-4 country codes (e.g., "UK" for United Kingdom, "IN" for India, "KE" for Kenya, "SF" for South Africa) to restrict to funders whose grantees are located in those countries. Use this when the user is asking for funders that move money into a specific non-US geography. Country here is the grantee's HQ country, derived from foundation_grants. When set, the search is forced through the hybrid path; the ILIKE-only name-match path cannot filter by country. Distinct from `state`, which filters by the funder's own US HQ. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds meaningful behavioral context beyond that: data source (IRS data), ranking behavior (multi-word searches ranked by relevance vs. simple browse/name fallback ordered by total assets), and the distinction that search_funders surfaces funders that may operate on LOI/relationship/annual cycles rather than live calls. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: a one-line summary, a usage paragraph, and a clearly flagged IMPORTANT routing note. Every sentence earns its place, and the most decision-relevant distinction (when to use search_open_grants instead) is prominently separated.
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 read-only search tool with 15 optional parameters fully documented in the schema and an output schema present, the description covers the key usage scenarios, ranking behavior, and sibling-tool routing. Nothing an agent needs to correctly select and invoke this tool is missing.
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%, and each of the 15 parameters has rich, example-laden documentation. The description itself only names the high-level search dimensions (name, topic, location), so it does not add meaning beyond the schema. Baseline 3 is appropriate when the schema carries the full parameter-load.
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 opens with a specific verb and resource ('Look up grantmaking organizations by name, topic, or location') and further specifies the 174K+ IRS-based dataset and the name/topic-signal search mechanism. It clearly distinguishes this tool from search_open_grants and other funder-focused siblings.
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?
Explicitly states when to use the tool ('when you know the funder's name, want aligned funders for a cause area, or want to browse by location/size/NTEE code') and gives an explicit exclusion: use search_open_grants for active grant programs or RFPs. This is model guidance with a named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_nonprofitsSearch Nonprofits (Grantee Benchmarking)ARead-onlyInspect
Search the ~2M-org universe of US nonprofits (IRS Business Master File) — the RECIPIENT / grantee side, distinct from search_funders (the grantmaker side). Use this to benchmark peer organizations, research a cause's landscape, or find well-funded peers and then look up WHO funds them.
Each result carries 990 financials (revenue, program-expense ratio,
employees, governance score) and recipient-side funding signals:
total_grants_received (tracked foundation $ received), funder_count
(distinct funders), avg_grant_size_received, and funder_concentration_hhi.
CHOOSING THE RIGHT TOOL:
Want FUNDERS to apply to → use search_funders.
Want to research/benchmark RECIPIENT nonprofits (peers, "who received $X", landscape of a cause) → use search_nonprofits.
Found a well-funded peer and want their funders → note its
funder_count, then use get_foundation_grants / search_funders to find who funds that work.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Case-insensitive exact city name. | |
| limit | No | Maximum number of results (1-50) | |
| metro | No | Colloquial metro/region ("Bay Area", "NYC", "Chicago", "Greater Boston") or a city name ("Cleveland", "Portland, OR") → resolved to its MSA codes. Prefer over city for metro-area intent. An unrecognized name does not error: the search runs without the metro filter and the result carries `geo_notice`. | |
| query | No | Case-insensitive substring match on the organization name. | |
| state | No | 2-letter US state code (e.g. "IL"). | |
| sort_by | No | received (default) | revenue | funders | name. | received |
| msa_codes | No | Explicit CBSA codes if you already know them. | |
| ntee_codes | No | NTEE classification PREFIXES (e.g. ["K31"] food banks, ["E"] health, ["B20"] schools). Prefix match, so "K" = all food/agriculture, "K31" = food banks specifically. | |
| active_only | No | Only IRS-active orgs (default True). | |
| max_revenue | No | ||
| min_revenue | No | ||
| max_received | No | Maximum total received. | |
| min_received | No | Minimum total grant dollars RECEIVED (the key grantee-benchmarking filter — "received over $1M"). | |
| min_employees | No | Minimum employee count. | |
| min_funder_count | No | Minimum distinct funders. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description correctly does not need to restate safety. It adds meaningful behavioral context by describing the underlying IRS data source, the ~2M-org scope, and the exact recipient-side funding signals returned in each result. No contradiction with annotations is present.
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?
The description is longer than minimal, but every section earns its place: the opening defines scope, the middle explains result content, and the closing provides tool-selection guidance. It is structured with clear headings and front-loaded with the most important distinction (grantee vs. funder). Slightly verbose because of the inline code fields, but well organized.
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 15-parameter tool with an output schema, the description is complete: it explains the domain, the result payload, the key tool-routing decisions, and the likely downstream workflow. The schema covers the remaining parameter details, and the output schema handles return-value expectations. Nothing essential is missing for correct tool selection and invocation.
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 87%, so the schema already carries most parameter meaning. The description adds useful high-level context about the result fields (total_grants_received, funder_count, etc.) and mentions broad use cases, but it does not add per-parameter guidance beyond what the schema provides. Baseline 3 is appropriate.
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 states a specific action and subject ('Search the ~2M-org universe of US nonprofits (IRS Business Master File)') and explicitly positions it as the 'RECIPIENT / grantee side, distinct from search_funders'. This clearly differentiates it from its primary sibling tool, so an agent can identify what it does without ambiguity.
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?
The 'CHOOSING THE RIGHT TOOL' section provides explicit conditional routing: use search_funders when the intent is to find funders to apply to, use search_nonprofits for recipient benchmarking, and use get_foundation_grants/search_funders after finding a well-funded peer. This is clear, actionable guidance with named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_open_grantsSearch Open GrantsARead-onlyInspect
Search open grant opportunities from Kindora's active foundation-program corpus plus federal and state government grants.
FOR-PROFIT APPLICANTS: pass for_profit_applicant=true to search capital a for-profit can take (PRIs, loans, revenue-based financing, patient equity) from CDFIs, impact investors, and PRI-active foundations. The default pool is 501(c)(3)-shaped and will NOT contain those programs.
Searches both private foundation grant programs (from IRS data and funder websites) and government grant opportunities — federal (Grants.gov) plus state and district grant portals. Uses full-text search with natural language understanding — queries are parsed into individual terms with stemming, so "youth after school programs" matches programs about youth, after-school, and programming even if those exact words don't appear together.
Search covers program names, descriptions, focus areas, beneficiary types, and geographic focus fields. Use the state parameter to focus on geographically relevant opportunities.
Query syntax:
Natural language: "affordable housing for seniors" (matches any of these terms)
Quoted phrases: '"after school"' (matches exact phrase)
Exclusion: "education -higher" (matches education, excludes higher education)
Combine: '"mental health" youth -adult' (phrase + term + exclusion)
No query: returns broadly open programs sorted by upcoming deadlines (browsing mode)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (1-50) | |
| query | No | Natural language search query. Searches across program names, descriptions, focus areas, beneficiary types, and geographic focus. Supports quoted phrases for exact matching and -term for exclusion. Example: "youth outdoor education", "affordable housing", "STEM education for girls", "food bank hunger", "climate change environment", "domestic violence women" | |
| state | No | Two-letter US state code to filter by geographic relevance. Returns programs focused on that state plus nationally available programs. Example: "CA", "NY", "TX" | |
| topic | No | Alias for query. The tool description says 'by TOPIC', so many MCP clients send topic= (32 rejected calls by 2026-07-11) — accept both; query wins when both are set. | |
| agency | No | Filter government grants by agency name (case-insensitive). Example: "Department of Education", "NSF", "NIH" | |
| source | No | Filter by grant source type. Options: "foundation" (private foundation programs only), "government" (federal + state government grants only), or omit for both sources combined. PREFER omitting this — the foundation corpus is much larger, and filtering to government-only often returns few or zero results. | |
| country | No | Where the applicant works — a country name or a region. Returns funders scoped to that place PLUS regional and global funders, with place-specific ones ranked first (a Kenyan applicant also sees "Sub-Saharan Africa" and worldwide funders). Native names work ("Deutschland", "Espana"). OMIT when the user has not named a place: "Global"/"International" is accepted but simply means no geographic restriction, so it is never needed. An unrecognised value broadens the search rather than emptying it. Use this instead of state for international queries — passing "India" via state would error because state requires a US code. Mixing state with a non-US country is rejected. Example: "India", "Kenya", "Southeast Asia", "Deutschland" | |
| max_award | No | Maximum grant size filter in dollars. Example: 500000 (grants up to $500K) | |
| min_award | No | Minimum grant size filter in dollars. Example: 50000 (grants of $50K+) | |
| focus_area | No | Filter foundation programs by focus area (matches values in focus_areas array). Example: "Education", "Health", "Environment" | |
| deadline_days | No | Deadline lookahead window in days (1-365) | |
| nonprofit_only | No | GOVERNMENT-grants applicant filter only. Omit for the entity-aware default: true for nonprofits and false for for-profit applicants. Does not open the foundation pool — use for_profit_applicant. | |
| for_profit_applicant | No | Set TRUE when the applicant is a FOR-PROFIT entity (social enterprise, public benefit corporation, B Corp, L3C, CDFI). Routes foundation-program search to the for-profit capital pool: loans, program-related investments, revenue-based financing, patient equity, guarantees — capital a company can actually take. Default False = the 501(c)(3) grant pool, which deliberately excludes those instruments. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, destructiveHint=false, but the description goes well beyond: it discloses the search engine behavior (natural language understanding, stemming, query syntax with examples), explains the geographic ranking logic (place-specific funders ranked first), what happens with unrecognized country values (broadens rather than empties), and the internal workaround for 'topic' alias. No contradictions.
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?
The description is well-structured with sections (for-profit applicants, supported sources, search semantics) and front-loaded with the core purpose. It could be slightly tighter (e.g., the historical 'by TOPIC' note is edge-case), but every sentence adds value—no filler, good readability.
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?
Despite 13 parameters, no output schema (yet has one), and no required params, the description covers all major behavioral aspects: query syntax, filtering options, entity-type-aware defaults, geographic nuances, and browsing mode. No glaring gaps remain for an agent to misuse the tool.
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%, yet the description adds critical meaning: for_profit_applicant bridges to an alternative capital pool, the 'country' parameter explains multi-tier geographic ranking, and the 'topic' alias documents a real user-facing issue. This transforms flat schema descriptions into actionable guidance.
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 uses a specific verb ('Search') and resource ('open grant opportunities'), clearly identifying the domain (Kindora's foundation corpus plus federal and state government grants). It distinguishes from siblings like 'search_funders' or 'get_funder_profile' by focusing on grant opportunities rather than funder profiles.
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?
The description provides explicit guidance on when to use the for_profit_applicant parameter, contrasts the default nonprofit pool, and explains when to use the 'country' parameter over 'state' for international queries. It also advises against filtering by 'source' to government-only due to sparse results, offering clear alternatives and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user or an account that owns the GitHub organization, then choose Claim with GitHub.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
Search 31,000+ open US grants, federal contracts, and foundations. Checked daily, free tier.
Find US federal grants your organization is actually eligible to apply for. Free, no API key.
Nonprofit lookup and IRS 990 filing data: revenue, assets, and compensation via ProPublica
Search verified-open US grants (federal, state, foundation). Read-only MCP for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceSearch and explore 1.8M+ US nonprofits, fetch Form 990 financials, and access IRS filing history via MCP.2702Apache 2.0

DataDawn MCP Serverofficial
AlicenseNot gradedqualityBmaintenanceEnables AI agents to query the IRS 990 nonprofit database and OpenRegs federal regulations database via SQL, providing access to nonprofit filings, grants, lobbying, and congressional data.Creative Commons Zero v1.0 Universal- AlicenseAqualityDmaintenanceProvides tools to search and retrieve nonprofit organization data and IRS filing summaries from ProPublica's Nonprofit Explorer, including side-by-side comparisons.4MIT
- AlicenseNot gradedqualityCmaintenanceEnables asking questions in natural language about live grants.gov funding opportunities, with tools to find, filter, check eligibility, track deadlines, and rank matches—while refusing to guess when data is unavailable.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
Each tool serves a distinct purpose: find_funders_for_peers uses peer-based collaborative filtering, search_funders does name/topic lookup, search_open_grants finds active RFPs, search_nonprofits searches recipients, get_funder_* tools provide different aspects of funder data, and utilities like health_check and list_tools are separate. No overlap.
Naming conventions are mixed: 'find_', 'get_', 'search_', 'health_check', 'list_tools', 'get_ntee_codes'. While verbs are descriptive, there is no single consistent pattern (e.g., all search_ or all get_). This could cause slight confusion.
12 tools is well-scoped for a foundation discovery server. Each tool addresses a clear need (prospecting, detail, financials, jobs, utilities) without being excessive or insufficient.
The tool set covers the full lifecycle of foundation research: finding funders (by peers, name, open grants), getting detailed profiles, grants, stats, financials, NTEE codes, and even funder jobs. The inclusion of recipient-side search (search_nonprofits) complements the funder side, leaving no obvious gaps.