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
| Name | Required | Description | Default |
|---|---|---|---|
| agencies | No | Agency codes (comma-separated) | |
| aln | No | Assistance Listing Number | |
| eligibilities | No | Eligibility criteria (comma-separated) | |
| funding_categories | No | Funding categories (comma-separated) | |
| keyword | No | Keyword to search for | |
| opp_num | No | Opportunity number | |
| opp_statuses | No | Opportunity statuses (pipe-separated, e.g. 'forecasted|posted') | forecasted|posted |
| rows | No | Number 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:
- src/biocontext_kb/core/grants/__init__.py:1-5 (registration)Package-level export of the search_grants_gov tool function.from ._search_grants_gov import search_grants_gov __all__ = [ "search_grants_gov", ]
- src/biocontext_kb/core/__init__.py:10-10 (registration)Imports the search_grants_gov tool into the core module, making it available via core_mcp.from .grants._search_grants_gov import *