Skip to main content
Glama

Search Grantmakers

search_funders
Read-only

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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
cityNoCity name to filter by (case-insensitive). Example: "San Francisco", "New York"
limitNoMaximum number of results to return (1-50)
metroNoColloquial 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"]
queryNoSearch term for a funder name or cause-area phrase. Example: "Ford Foundation", "global health", "community foundation" Topic searches work best with 2+ words.
stateNoTwo-letter US state code to filter by funder HQ location. Example: "CA", "NY", "TX"
countryNoOptional 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_prisNoFilter to foundations with known program-related investment activity. Set true when looking for PRI-active capital providers.
msa_codesNoExplicit MSA/CBSA codes when you already know them (e.g. ["41860", "41940"]); unioned with whatever `metro` resolves to. Most callers should use `metro`.
ntee_codeNoNTEE classification code to filter by. Example: "A20" (Arts Organizations), "B" (Education), "E" (Health)
max_assetsNoMaximum total assets filter in dollars. Example: 100000000 (foundations with up to $100M assets)
min_assetsNoMinimum total assets filter in dollars. Example: 10000000 (foundations with $10M+ assets)
funder_typeNoOptional 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_grantsNoFilter 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_typesNoOptional 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_codesNoOptional 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

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / metro / description
      Previous value: -"Colloquial metro / region name for sub-state geography a single\n   city can't capture — \"Bay Area\", \"NYC\", \"the DMV\", \"Greater\n   Boston\", \"Los Angeles\", \"Chicago\", \"Seattle\". Resolved to its\n   MSA/CBSA code set and applied as an HQ pre-filter. PREFER this\n   over `city` whenever the user names a metro/region rather than\n   one municipality (e.g. \"Bay Area funders that fund drug rehab\"\n   → query=\"drug rehab addiction\", metro=\"Bay Area\"). Accepts a\n   single name or a list. Unrecognized names return an error that\n   lists the known metros.\n   Example: \"Bay Area\", [\"NYC\", \"Greater Boston\"]"New value: +"Colloquial metro / region name for sub-state geography a single\n   city can't capture — \"Bay Area\", \"NYC\", \"the DMV\", \"Greater\n   Boston\", \"Los Angeles\", \"Chicago\", \"Seattle\". Resolved to its\n   MSA/CBSA code set and applied as an HQ pre-filter. PREFER this\n   over `city` whenever the user names a metro/region rather than\n   one municipality (e.g. \"Bay Area funders that fund drug rehab\"\n   → query=\"drug rehab addiction\", metro=\"Bay Area\"). Accepts a\n   single name or a list. City names resolve too ('Cleveland',\n   'Knoxville', 'Portland, OR'). An unrecognized name does NOT error:\n   the search runs without that metro filter and the result carries\n   `geo_notice` saying so (with a did-you-mean when one is close).\n   Example: \"Bay Area\", [\"NYC\", \"Greater Boston\"]"
  2. Changed1 schema field changed
    • addedInput schema / properties / has_pris
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Filter to foundations with known program-related investment\n   activity. Set true when looking for PRI-active capital providers."
      +}
  3. Changed2 schema fields changed
    • changedInput schema / properties / exclude_funder_types / description
      Previous value: -"Optional list of canonical funder_type codes to exclude\n   from results. Useful for hiding operating nonprofits that surface\n   with large \"annual_grants\" but are not actually grantmakers — e.g.,\n   exclude_funder_types=[\"operating_nonprofit\"] hides PATH and similar\n   operating organizations."New value: +"Optional list of canonical funder_type codes to exclude\n   from results. NOTE: this search ALREADY excludes the operating-entity\n   types by default — private_operating (pharma patient-assistance\n   foundations) and operating_nonprofit (hospital / university group\n   returns) post large \"annual_grants\" but aren't grantmakers you can\n   apply to. Use this for ADDITIONAL categories; to opt an operating\n   type back in, name it in funder_type instead."
    • changedInput schema / properties / funder_type / description
      Previous value: -"Optional canonical funder_type to include. Examples:\n   \"community_foundation\", \"family_foundation\", \"corporate_foundation\",\n   \"private_operating\", \"operating_nonprofit\", \"independent_foundation\". Use this to narrow to\n   a specific kind of grantmaker."New value: +"Optional canonical funder_type to include. Examples:\n   \"community_foundation\", \"family_foundation\", \"corporate_foundation\",\n   \"private_operating\", \"operating_nonprofit\", \"independent_foundation\". Use this to narrow to\n   a specific kind of grantmaker. NOTE: operating entities\n   (private_operating, operating_nonprofit) are EXCLUDED BY DEFAULT —\n   name one here to include it (e.g. to look up a specific hospital or\n   patient-assistance foundation)."
  4. Changed2 schema fields changed
    • addedInput schema / properties / metro
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Colloquial metro / region name for sub-state geography a single\n   city can't capture — \"Bay Area\", \"NYC\", \"the DMV\", \"Greater\n   Boston\", \"Los Angeles\", \"Chicago\", \"Seattle\". Resolved to its\n   MSA/CBSA code set and applied as an HQ pre-filter. PREFER this\n   over `city` whenever the user names a metro/region rather than\n   one municipality (e.g. \"Bay Area funders that fund drug rehab\"\n   → query=\"drug rehab addiction\", metro=\"Bay Area\"). Accepts a\n   single name or a list. Unrecognized names return an error that\n   lists the known metros.\n   Example: \"Bay Area\", [\"NYC\", \"Greater Boston\"]"
      +}
    • addedInput schema / properties / msa_codes
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Explicit MSA/CBSA codes when you already know them\n   (e.g. [\"41860\", \"41940\"]); unioned with whatever `metro`\n   resolves to. Most callers should use `metro`."
      +}
  5. Changed12 schema fields changed
    • addedInput schema / additionalProperties
      Added value: +false
    • addedInput schema / properties / city / description
      Added value: +"City name to filter by (case-insensitive).\n   Example: \"San Francisco\", \"New York\""
    • addedInput schema / properties / country / description
      Added value: +"Optional HQ country name (or list of names) to restrict to\n   funders headquartered in those countries (e.g., \"Germany\",\n   [\"United States\", \"Canada\"]). Distinct from\n   `grantee_country_codes` (where the funder's grants land) and\n   from `state` (US state of HQ). Use when the user asks for\n   funders based in a specific country — e.g. \"European-headquartered\n   foundations\" → country=[\"Germany\",\"Spain\",\"United Kingdom\",\n   \"Switzerland\",\"Netherlands\",\"France\"]. US foundations are\n   included only when \"United States\" (or \"USA\") is in the list,\n   or when the param is omitted."
    • addedInput schema / properties / exclude_funder_types / description
      Added value: +"Optional list of canonical funder_type codes to exclude\n   from results. Useful for hiding operating nonprofits that surface\n   with large \"annual_grants\" but are not actually grantmakers — e.g.,\n   exclude_funder_types=[\"operating_nonprofit\"] hides PATH and similar\n   operating organizations."
    • addedInput schema / properties / funder_type / description
      Added value: +"Optional canonical funder_type to include. Examples:\n   \"community_foundation\", \"family_foundation\", \"corporate_foundation\",\n   \"private_operating\", \"operating_nonprofit\", \"independent_foundation\". Use this to narrow to\n   a specific kind of grantmaker."
    • addedInput schema / properties / grantee_country_codes / description
      Added value: +"Optional list of FIPS 10-4 country codes\n   (e.g., \"UK\" for United Kingdom, \"IN\" for India, \"KE\" for Kenya,\n   \"SF\" for South Africa) to restrict to funders whose grantees are\n   located in those countries. Use this when the user is asking\n   for funders that move money into a specific non-US geography.\n   Country here is the grantee's HQ country, derived from\n   foundation_grants. When set, the search is forced through the\n   hybrid path; the ILIKE-only name-match path cannot filter by\n   country. Distinct from `state`, which filters by the funder's\n   own US HQ."
    • addedInput schema / properties / has_er_grants / description
      Added value: +"Filter to foundations that make expenditure responsibility grants\n   (grants to non-501(c)(3) entities like PBCs, for-profits, and foreign orgs).\n   Set to True to find only ER-active funders."
    • addedInput schema / properties / max_assets / description
      Added value: +"Maximum total assets filter in dollars.\n   Example: 100000000 (foundations with up to $100M assets)"
    • addedInput schema / properties / min_assets / description
      Added value: +"Minimum total assets filter in dollars.\n   Example: 10000000 (foundations with $10M+ assets)"
    • addedInput schema / properties / ntee_code / description
      Added value: +"NTEE classification code to filter by.\n   Example: \"A20\" (Arts Organizations), \"B\" (Education), \"E\" (Health)"
    • addedInput schema / properties / query / description
      Added value: +"Search term for a funder name or cause-area phrase.\n   Example: \"Ford Foundation\", \"global health\", \"community foundation\"\n   Topic searches work best with 2+ words."
    • addedInput schema / properties / state / description
      Added value: +"Two-letter US state code to filter by funder HQ location.\n   Example: \"CA\", \"NY\", \"TX\""
  6. Changed1 schema field changed
    • addedInput schema / properties / country
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
  7. Changed1 schema field changed
    • addedInput schema / properties / grantee_country_codes
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
  8. Changed2 schema fields changed
    • addedInput schema / properties / exclude_funder_types
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedInput schema / properties / funder_type
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
  9. Changed8 schema fields changed
    • removedInput schema / additionalProperties
      Removed value: -false
    • removedInput schema / properties / city / description
      Removed value: -"City name to filter by (case-insensitive).\n   Example: \"San Francisco\", \"New York\""
    • removedInput schema / properties / has_er_grants / description
      Removed value: -"Filter to foundations that make expenditure responsibility grants\n   (grants to non-501(c)(3) entities like PBCs, for-profits, and foreign orgs).\n   Set to True to find only ER-active funders."
    • removedInput schema / properties / max_assets / description
      Removed value: -"Maximum total assets filter in dollars.\n   Example: 100000000 (foundations with up to $100M assets)"
    • removedInput schema / properties / min_assets / description
      Removed value: -"Minimum total assets filter in dollars.\n   Example: 10000000 (foundations with $10M+ assets)"
    • removedInput schema / properties / ntee_code / description
      Removed value: -"NTEE classification code to filter by.\n   Example: \"A20\" (Arts Organizations), \"B\" (Education), \"E\" (Health)"
    • removedInput schema / properties / query / description
      Removed value: -"Search term to match against foundation NAMES (case-insensitive partial match).\n   Example: \"Ford Foundation\", \"community foundation\", \"Hewlett\"\n   NOTE: Topic queries like \"criminal justice\" or \"youth education\" will return\n   0 results here — use search_open_grants for topic-based discovery."
    • removedInput schema / properties / state / description
      Removed value: -"Two-letter state code to filter by.\n   Example: \"CA\", \"NY\", \"TX\""
  10. First observed

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources