grantsgov-mcp-server

v0.1.1 pre-1.0

Search Grants.gov federal funding opportunities, read full records (eligibility, awards, deadlines, attachments), and decode filter codes via MCP. STDIO or Streamable HTTP.

grantsgov.caseyjhand.com/mcp
claude mcp add --transport http grantsgov-mcp-server https://grantsgov.caseyjhand.com/mcp
codex mcp add grantsgov-mcp-server --url https://grantsgov.caseyjhand.com/mcp
{
  "mcpServers": {
    "grantsgov-mcp-server": {
      "url": "https://grantsgov.caseyjhand.com/mcp"
    }
  }
}
gemini mcp add --transport http grantsgov-mcp-server https://grantsgov.caseyjhand.com/mcp
{
  "mcpServers": {
    "grantsgov-mcp-server": {
      "command": "bunx",
      "args": [
        "mcp-remote",
        "https://grantsgov.caseyjhand.com/mcp"
      ]
    }
  }
}
{
  "mcpServers": {
    "grantsgov-mcp-server": {
      "type": "http",
      "url": "https://grantsgov.caseyjhand.com/mcp"
    }
  }
}
curl -X POST https://grantsgov.caseyjhand.com/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"curl","version":"1.0.0"}}}'

Tools

3

grantsgov_search_opportunities

open-world

Search federal funding opportunities on Grants.gov by keyword, agency, applicant eligibility, funding category, funding instrument, assistance listing, opportunity number, posting window (posted_within_days), or closing window (closing_within_days). Returns forecasted and posted opportunities unless statuses says otherwise, each row led by its close date and days remaining, plus facet counts for narrowing. Bare keyword terms are all required; join alternatives with OR, in parentheses when other terms stay required. Rows carry no award amounts or eligibility detail; read those with grantsgov_get_opportunity. Filter codes come from grantsgov_list_reference.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "grantsgov_search_opportunities",
    "arguments": {}
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "keyword": {
      "description": "Full-text search over title, description, opportunity number, and agency. Bare terms are all required (rural broadband = rural AND broadband); join alternatives with OR, quote phrases (\"mental health\"), exclude with NOT or -term, and use a trailing * for prefixes (broad*). OR mixed with AND or with bare terms must be grouped in parentheses, e.g. (rural OR tribal) broadband; an ungrouped mix is rejected. A word with an internal hyphen or period (COVID-19, K-12) is matched as a phrase. Field prefixes (agency:NSF, cfda:93.866) are rejected: use the agencies, assistance_listing, or other filter instead. See grantsgov_list_reference topic keyword_syntax.",
      "type": "string",
      "maxLength": 500
    },
    "statuses": {
      "description": "Lifecycle statuses to include: forecasted, posted, closed, archived. Default: forecasted and posted.",
      "maxItems": 4,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "forecasted",
          "posted",
          "closed",
          "archived"
        ]
      }
    },
    "agencies": {
      "description": "Agency codes from grantsgov_list_reference topic agencies (e.g. HHS, HHS-NIH11, NSF). A code includes its sub-agencies. Case-insensitive. Any listed agency matches.",
      "maxItems": 10,
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 100,
        "pattern": "^[A-Z0-9](?:[A-Z0-9 -]*[A-Z0-9])?$"
      }
    },
    "eligibilities": {
      "description": "Two-digit applicant-type codes from grantsgov_list_reference topic eligibilities (e.g. 12 = nonprofits with 501(c)(3) status, 07 = federally recognized tribal governments), as strings or numbers. A single digit is zero-padded (7 = 07). Any listed type matches.",
      "maxItems": 17,
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^\\d{2}$"
      }
    },
    "include_unrestricted": {
      "default": true,
      "description": "When eligibilities is set, also match opportunities open to any applicant type (code 99), which the specific codes do not cover. Set false to see only opportunities targeted at the listed types.",
      "type": "boolean"
    },
    "funding_categories": {
      "description": "Funding category codes from grantsgov_list_reference topic funding_categories (e.g. HL = Health, ED = Education). Case-insensitive. Any listed category matches.",
      "maxItems": 28,
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^[A-Z]{1,4}$"
      }
    },
    "funding_instruments": {
      "description": "Funding instruments: G (grant), CA (cooperative agreement), PC (procurement contract), O (other). Any listed instrument matches.",
      "maxItems": 4,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "G",
          "CA",
          "PC",
          "O"
        ]
      }
    },
    "assistance_listing": {
      "description": "One assistance listing number (ALN, formerly CFDA), e.g. 93.866 or 93866, in any case. Only one value is supported.",
      "type": "string",
      "pattern": "^\\d{2}\\.[0-9A-Z]{3}$"
    },
    "opportunity_number": {
      "description": "Exact agency-assigned opportunity number (e.g. HRSA-27-005), matched case-insensitively; one pair of surrounding double quotes is removed. Numbers are not unique across agencies, so several rows can match. To look up a number across every status, prefer grantsgov_get_opportunity with opportunity_numbers.",
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "posted_within_days": {
      "description": "Only opportunities posted in the last N days (1-3650). Works only with the forecasted and posted statuses.",
      "type": "integer",
      "minimum": 1,
      "maximum": 3650
    },
    "closing_within_days": {
      "description": "Only posted opportunities closing between today and N days from today, US Eastern (0-365; 0 = closing today). Searches posted opportunities in close-date order, so statuses may only be posted and sort only close_date_asc.",
      "type": "integer",
      "minimum": 0,
      "maximum": 365
    },
    "sort": {
      "description": "Result order: relevance (best keyword match; needs keyword, otherwise the order is arbitrary), open_date_desc/open_date_asc (posting date), close_date_asc/close_date_desc (close date; no close date sorts last on asc), opportunity_number_asc/_desc, agency_asc/_desc. Default: relevance with a keyword, else open_date_desc.",
      "type": "string",
      "enum": [
        "relevance",
        "open_date_desc",
        "open_date_asc",
        "close_date_asc",
        "close_date_desc",
        "opportunity_number_asc",
        "opportunity_number_desc",
        "agency_asc",
        "agency_desc"
      ]
    },
    "limit": {
      "default": 25,
      "description": "Rows per page (1-100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "offset": {
      "default": 0,
      "description": "Zero-based row offset for paging; use next_offset from the previous page.",
      "type": "integer",
      "minimum": 0,
      "maximum": 100000
    },
    "include_facets": {
      "default": true,
      "description": "Include facet counts per filter value. Set false when paging to save space.",
      "type": "boolean"
    }
  },
  "required": [
    "include_unrestricted",
    "limit",
    "offset",
    "include_facets"
  ],
  "additionalProperties": false
}
view source ↗

grantsgov_get_opportunity

open-world

Read the full Grants.gov record for up to 5 opportunities, given numeric opportunity ids or opportunity numbers: deadline and its explanation, award ceiling and floor, total funding, expected awards, cost sharing, eligible applicant types with the eligibility narrative, description, assistance listings, agency contact, NOFO attachments with download links, and application packages. An opportunity number is resolved across all statuses. A miss or an ambiguous number comes back as an unresolved entry with guidance, not an error.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "grantsgov_get_opportunity",
    "arguments": {}
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "opportunity_ids": {
      "description": "Numeric Grants.gov ids (e.g. 363423, or \"363423\" as search rows emit them), from grantsgov_search_opportunities opportunity_id. Up to 5 combined with opportunity_numbers.",
      "maxItems": 5,
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 1,
        "maximum": 9007199254740991
      }
    },
    "opportunity_numbers": {
      "description": "Agency-assigned opportunity numbers (e.g. HRSA-27-005), matched exactly and case-insensitively across all statuses; one pair of surrounding double quotes is removed. A number shared by several opportunities comes back as ambiguous with candidates. Up to 5 combined with opportunity_ids.",
      "maxItems": 5,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100
      }
    }
  },
  "additionalProperties": false
}
view source ↗

grantsgov_list_reference

open-world

List the codes Grants.gov search filters accept, with labels and live opportunity counts: agencies (top level, or one agency's sub-agencies via parent_code, or matched by name via name_contains), applicant eligibility types, funding categories, funding instruments, statuses, sort options, and keyword syntax. Use the codes as grantsgov_search_opportunities inputs.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "grantsgov_list_reference",
    "arguments": {
      "topic": "<topic>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "topic": {
      "description": "Which list to return: agencies (agency codes), eligibilities (two-digit applicant-type codes), funding_categories, funding_instruments, statuses, sort_options, or keyword_syntax.",
      "type": "string",
      "enum": [
        "agencies",
        "eligibilities",
        "funding_categories",
        "funding_instruments",
        "statuses",
        "sort_options",
        "keyword_syntax"
      ]
    },
    "name_contains": {
      "description": "Keep only entries whose label or code contains every word given, ignoring case, accents, and punctuation (e.g. \"national science\", \"nih\"). For agencies this searches every code, top-level and sub-agency. Works with every topic. A value with no letters or digits matches nothing.",
      "type": "string",
      "maxLength": 100
    },
    "parent_code": {
      "description": "Agencies only: list every code under this agency at any depth (e.g. HHS, DOD-DARPA). Case-insensitive. Omit for the top-level list.",
      "type": "string",
      "maxLength": 100,
      "pattern": "^[A-Z0-9](?:[A-Z0-9 -]*[A-Z0-9])?$"
    }
  },
  "required": [
    "topic"
  ],
  "additionalProperties": false
}
view source ↗