Skip to main content
Glama
biocontext-ai

BioContextAI Knowledgebase MCP

Official

bc_search_grants_gov

Search for grants on grants.gov by keyword, opportunity number, eligibility, agency, or funding category. Retrieve tailored results to identify funding opportunities matching specific criteria.

Instructions

Search for grants from grants.gov using the Search2 API.

Args: keyword: Keyword to search for opp_num: Opportunity number eligibilities: Eligibility criteria (comma-separated) agencies: Agency codes (comma-separated) rows: Number of results to return opp_statuses: Opportunity statuses (pipe-separated, e.g. 'forecasted|posted') aln: Assistance Listing Number funding_categories: Funding categories (comma-separated)

Returns: dict: Search results from grants.gov or error message

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
agenciesNoAgency codes (comma-separated)
alnNoAssistance Listing Number
eligibilitiesNoEligibility criteria (comma-separated)
funding_categoriesNoFunding categories (comma-separated)
keywordNoKeyword to search for
opp_numNoOpportunity number
opp_statusesNoOpportunity statuses (pipe-separated, e.g. 'forecasted|posted')forecasted|posted
rowsNoNumber of results to return

Implementation Reference

  • The primary handler function implementing the 'search_grants_gov' tool. Includes input schema definitions via Annotated Fields, registration via @core_mcp.tool() decorator, and the full logic to query the grants.gov API and return results or errors.
    @core_mcp.tool() def search_grants_gov( keyword: Annotated[Optional[str], Field(description="Search keyword")] = None, opp_num: Annotated[Optional[str], Field(description="Opportunity number")] = None, eligibilities: Annotated[Optional[str], Field(description="Eligibilities (comma-separated)")] = None, agencies: Annotated[Optional[str], Field(description="Agency codes (comma-separated)")] = None, rows: Annotated[int, Field(description="Results to return")] = 10, opp_statuses: Annotated[ Optional[str], Field(description="'forecasted|posted' (pipe-separated, default: 'forecasted|posted')") ] = "forecasted|posted", aln: Annotated[Optional[str], Field(description="Assistance Listing Number")] = None, funding_categories: Annotated[Optional[str], Field(description="Categories (comma-separated)")] = None, ) -> dict: """Search grants.gov by keyword, agency, or other criteria. Returns opportunity listings with deadlines and eligibility. Returns: dict: Grant opportunities list with titles, agencies, deadlines, funding amounts, eligibility criteria or error message. """ url = "https://api.grants.gov/v1/api/search2" # Build request payload payload = {"rows": rows, "oppStatuses": opp_statuses or "forecasted|posted"} # Add optional parameters if provided if keyword: payload["keyword"] = keyword if opp_num: payload["oppNum"] = opp_num if eligibilities: payload["eligibilities"] = eligibilities if agencies: payload["agencies"] = agencies if aln: payload["aln"] = aln if funding_categories: payload["fundingCategories"] = funding_categories try: headers = {"Content-Type": "application/json"} response = requests.post(url, json=payload, headers=headers) response.raise_for_status() # Return the JSON response return response.json() except requests.exceptions.RequestException as e: return {"error": f"Failed to fetch grants data: {e!s}"}
  • Input schema for the tool defined via Pydantic Annotated types and Field descriptions in the function signature.
    def search_grants_gov( keyword: Annotated[Optional[str], Field(description="Search keyword")] = None, opp_num: Annotated[Optional[str], Field(description="Opportunity number")] = None, eligibilities: Annotated[Optional[str], Field(description="Eligibilities (comma-separated)")] = None, agencies: Annotated[Optional[str], Field(description="Agency codes (comma-separated)")] = None, rows: Annotated[int, Field(description="Results to return")] = 10, opp_statuses: Annotated[ Optional[str], Field(description="'forecasted|posted' (pipe-separated, default: 'forecasted|posted')") ] = "forecasted|posted", aln: Annotated[Optional[str], Field(description="Assistance Listing Number")] = None, funding_categories: Annotated[Optional[str], Field(description="Categories (comma-separated)")] = None, ) -> dict:
  • Package-level export of the search_grants_gov tool function.
    from ._search_grants_gov import search_grants_gov __all__ = [ "search_grants_gov", ]
  • Imports the search_grants_gov tool into the core module, making it available via core_mcp.
    from .grants._search_grants_gov import *

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/biocontext-ai/knowledgebase-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server