# Federal Grants: 10,000+ Active Grants.gov Opportunities (`andrew_avina/grants-mcp`) Actor

Search all active federal grant opportunities from Grants.gov. NIH, NSF, USDA, HUD, DOE, DOJ + 25 agencies. Returns ceiling, eligibility, close date. Filter by agency, keyword, amount, applicant type. MCP-native. Updated daily.

- **URL**: https://apify.com/andrew\_avina/grants-mcp.md
- **Developed by:** [Andrew Avina](https://apify.com/andrew_avina) (community)
- **Categories:** MCP servers, Lead generation, Business
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## grants-mcp

**Every active federal grant opportunity, filterable by agency, deadline, and award ceiling.**

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-brightgreen)](https://apify.com/store)
[![Pricing](https://img.shields.io/badge/Pricing-from%20%240.50%2F1k%20results-blue)](https://apify.com/pricing)
[![Data Source](https://img.shields.io/badge/Data-Grants.gov%20%2B%20SAM.gov-orange)](https://www.grants.gov)
[![Category](https://img.shields.io/badge/Category-Grants%20%2F%20Nonprofits-purple)](https://apify.com/store)
[![MCP Ready](https://img.shields.io/badge/MCP-Server%20Ready-red)](https://modelcontextprotocol.io)

---

### What Is This?

The federal government distributes more than **$800 billion in grants annually** through over 1,000 grant programs administered by 26 federal agencies. Grants.gov alone lists **10,000+ active opportunities** at any given time, and the native search interface — while functional — returns flat, hard-to-filter results that require significant manual triage. Nonprofit development directors, university research offices, and foundation grant writers spend dozens of hours per month just identifying which opportunities are worth pursuing.

This actor provides a clean, programmable interface to Grants.gov's public API with automatic fallback to SAM.gov for supplementary opportunity data. Filter by funding agency, CFDA program number, opportunity status, deadline range, award ceiling, and keyword — and get back normalized opportunity records with every field your grant pipeline needs: opportunity ID, opportunity number, title, agency, deadline, award ceiling, and full description text. No Grants.gov account required.

It runs in **Batch mode** for pipeline integrations (feed a nonprofit CRM, trigger deadline alerts, export to a grants calendar) and **MCP server mode** for live grant research inside Claude Desktop or any MCP-compatible AI assistant. Research offices at universities use it to monitor agency funding priorities in real time. Individual grant writers use it to surface opportunities their clients would never find manually.

---

### Who Uses This

**Nonprofit Development Directors**
You manage a portfolio of 15 active grants and need to identify 8 new opportunities in the next quarter across HHS, DOL, and HUD. The Grants.gov interface gives you paginated results with no way to filter by award ceiling or deadline proximity. This actor returns every open opportunity matching your agency and keyword filters, sorted by deadline, in one structured call — ready to share with your board in a formatted report.

**University Research Office Staff**
You support 200+ faculty across 30 departments, each chasing funding in different agencies and CFDA programs. Manually monitoring Grants.gov for new postings in each area isn't sustainable. This actor lets you run a nightly batch query per department, alerting faculty only when new opportunities appear in their specific program areas — turning a 20-hour/week monitoring task into an automated feed.

**Federal Grant Writers (Freelance and Firm)**
You specialize in writing applications for USDA rural development and HHS community health grants. You need to know the moment a new NOFA drops — before your clients' competitors see it. Set up a monitored batch run against your target agencies and have new opportunities pushed to your workflow the same day they're posted.

**Foundation Program Officers**
You're a private foundation looking to co-fund with federal agencies — a common structure for education and workforce programs. You need to know which federal opportunities allow third-party co-funding and what the award ceilings look like, so you can structure your grants to complement federal dollars. This actor surfaces that data without manual triage.

**AI Agent Developers Building Grant Research Tools**
You're building an AI assistant for a nonprofit that needs to answer "what grants are we eligible for this quarter?" This actor's MCP interface gives your agent live access to Grants.gov data — no scraping, no stale exports, no hallucinated program names.

---

### Key Features

| Feature | Detail |
|---|---|
| Data coverage | 10,000+ active federal grant opportunities |
| Primary source | Grants.gov REST API (official) |
| Fallback source | SAM.gov Contract Opportunities API |
| Filter: Agency | Any of 26 federal grant-making agencies |
| Filter: CFDA number | Catalog of Federal Domestic Assistance program number |
| Filter: Opportunity status | Open, Forecasted, Closed, Archived |
| Filter: Deadline range | Open opportunities closing within N days, or date range |
| Filter: Award ceiling | Min/max award ceiling in USD |
| Filter: Keyword | Full-text search against title + description |
| Output format | Normalized JSON with all required opportunity fields |
| MCP server mode | Live tool-use in Claude Desktop, Claude Code, any MCP client |
| Batch mode | One-shot runs with full result sets |
| SAM.gov fallback | Automatic retry via SAM.gov when Grants.gov returns incomplete data |

---

### Quick Start

#### Batch Mode

**Input:**
```json
{
  "mode": "batch",
  "agency": "Department of Health and Human Services",
  "keyword": "community health center",
  "opportunity_status": "open",
  "deadline_within_days": 60,
  "award_ceiling_min": 500000,
  "max_results": 20
}
````

**Output (truncated to 2 records):**

```json
[
  {
    "opportunity_id": "HHS-2024-HRSA-MCH-0042",
    "opportunity_number": "HRSA-24-042",
    "title": "Maternal and Child Health Community Integration Program",
    "agency": "Health Resources and Services Administration",
    "parent_agency": "Department of Health and Human Services",
    "cfda_number": "93.994",
    "deadline": "2024-08-15",
    "posted_date": "2024-06-01",
    "award_ceiling": 2500000,
    "award_floor": 250000,
    "expected_awards": 12,
    "description": "HRSA is soliciting applications for the Maternal and Child Health Community Integration Program to fund community health centers providing integrated prenatal and postnatal services in rural and underserved communities...",
    "eligibility": "Nonprofits, state governments, tribal governments, institutions of higher education",
    "url": "https://www.grants.gov/search-results-detail/HHS-2024-HRSA-MCH-0042"
  },
  {
    "opportunity_id": "HHS-2024-SAMHSA-CMHS-0019",
    "opportunity_number": "SM-24-019",
    "title": "Community Mental Health Services Block Grant Supplemental Funding",
    "agency": "Substance Abuse and Mental Health Services Administration",
    "parent_agency": "Department of Health and Human Services",
    "cfda_number": "93.958",
    "deadline": "2024-07-30",
    "posted_date": "2024-05-28",
    "award_ceiling": 1800000,
    "award_floor": 100000,
    "expected_awards": 25,
    "description": "SAMHSA announces the availability of supplemental funding through the Community Mental Health Services Block Grant program...",
    "eligibility": "State mental health authorities",
    "url": "https://www.grants.gov/search-results-detail/HHS-2024-SAMHSA-CMHS-0019"
  }
]
```

#### MCP Server Mode

```json
{
  "mcpServers": {
    "grants": {
      "command": "npx",
      "args": [
        "apify-actor-mcp",
        "--actor-id", "your-username/grants-mcp",
        "--token", "YOUR_APIFY_TOKEN"
      ]
    }
  }
}
```

Then in Claude: *"Find open USDA grants for rural broadband infrastructure closing in the next 90 days with an award ceiling above $1M."*

***

### MCP Tools Exposed

#### `search_grant_opportunities`

Search active federal grant opportunities with filters.

```json
{
  "tool": "search_grant_opportunities",
  "arguments": {
    "agency": "Department of Education",
    "keyword": "STEM workforce development",
    "opportunity_status": "open",
    "award_ceiling_min": 200000,
    "max_results": 30
  }
}
```

#### `get_opportunity_detail`

Retrieve full opportunity record including all attachments metadata and eligibility details.

```json
{
  "tool": "get_opportunity_detail",
  "arguments": {
    "opportunity_id": "ED-GRANTS-060124-001"
  }
}
```

#### `list_closing_soon`

Return all open opportunities closing within N days, optionally filtered by agency.

```json
{
  "tool": "list_closing_soon",
  "arguments": {
    "days": 30,
    "agency": "National Science Foundation"
  }
}
```

#### `search_by_cfda`

Return all opportunities under a specific CFDA program number.

```json
{
  "tool": "search_by_cfda",
  "arguments": {
    "cfda_number": "47.076",
    "opportunity_status": "open"
  }
}
```

#### `agency_funding_summary`

Return total available funding and opportunity count by agency for a given keyword or status filter.

```json
{
  "tool": "agency_funding_summary",
  "arguments": {
    "keyword": "climate resilience",
    "opportunity_status": "open"
  }
}
```

***

### Input Schema

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `"batch"` | `"batch"` or `"mcp"` |
| `agency` | string | — | Federal agency name (partial match supported) |
| `cfda_number` | string | — | CFDA program number (e.g., `"93.994"`) |
| `keyword` | string | — | Full-text keyword search (title + description) |
| `opportunity_status` | string | `"open"` | `"open"`, `"forecasted"`, `"closed"`, `"archived"`, `"all"` |
| `deadline_within_days` | integer | — | Return only opportunities closing within N days |
| `deadline_from` | string | — | ISO 8601 date — opportunities closing after this date |
| `deadline_to` | string | — | ISO 8601 date — opportunities closing before this date |
| `award_ceiling_min` | number | — | Minimum award ceiling (USD) |
| `award_ceiling_max` | number | — | Maximum award ceiling (USD) |
| `eligibility_type` | string | — | Filter by applicant type: `"nonprofit"`, `"university"`, `"state"`, `"tribal"`, `"individual"` |
| `max_results` | integer | `100` | Maximum records to return (up to 5,000) |
| `sort_by` | string | `"deadline"` | Sort field: `"deadline"`, `"award_ceiling"`, `"posted_date"` |
| `sort_order` | string | `"asc"` | `"asc"` or `"desc"` |
| `include_description` | boolean | `true` | Include full description text in results |

***

### Use Case Recipes

#### Recipe 1: Deadline Alert Feed for a Nonprofit Portfolio

Find all HHS and DOL opportunities closing in the next 45 days with award ceilings above $250K:

```json
{
  "agency": "Department of Health and Human Services",
  "opportunity_status": "open",
  "deadline_within_days": 45,
  "award_ceiling_min": 250000,
  "sort_by": "deadline",
  "sort_order": "asc",
  "max_results": 50
}
```

**Outcome:** Sorted deadline calendar — pipe this to a Slack alert, email digest, or CRM task creation workflow.

#### Recipe 2: University Research Office Program Scan

Surface all NSF opportunities in CFDA 47.076 (STEM Education) currently open:

```json
{
  "cfda_number": "47.076",
  "opportunity_status": "open",
  "eligibility_type": "university",
  "max_results": 100
}
```

**Outcome:** Complete current funding landscape for a specific NSF division — share with department chairs.

#### Recipe 3: Climate Funding Landscape by Agency

Compare available climate-related funding across all agencies:

```json
{
  "keyword": "climate resilience adaptation",
  "opportunity_status": "open",
  "sort_by": "award_ceiling",
  "sort_order": "desc",
  "max_results": 200
}
```

**Outcome:** Cross-agency climate funding map with award ceilings — use `agency_funding_summary` tool for a rolled-up view.

#### Recipe 4: Rural Development Grant Pipeline

USDA rural development grants for broadband and infrastructure:

```json
{
  "agency": "Department of Agriculture",
  "keyword": "rural broadband infrastructure",
  "opportunity_status": "open",
  "award_ceiling_min": 1000000,
  "max_results": 30
}
```

**Outcome:** Active USDA broadband grant opportunities — cross-reference with your jurisdiction's eligibility before applying.

***

### Connecting to Claude Desktop / Claude Code

**Claude Desktop:**

```json
{
  "mcpServers": {
    "grants": {
      "command": "npx",
      "args": [
        "apify-actor-mcp",
        "--actor-id", "your-username/grants-mcp",
        "--token", "apify_api_YOURTOKEN"
      ],
      "env": {}
    }
  }
}
```

**Claude Code:**

```json
{
  "mcpServers": {
    "grants": {
      "command": "npx",
      "args": ["apify-actor-mcp", "--actor-id", "your-username/grants-mcp", "--token", "apify_api_YOURTOKEN"]
    }
  }
}
```

Sample prompts once connected:

- *"What NSF grants are available for machine learning research closing in the next 60 days?"*
- *"Find USDA grants for food banks with award ceilings above $500K."*
- *"Summarize available HHS funding for substance abuse treatment programs."*

***

### Pricing

| Volume | Price |
|---|---|
| First 1,000 results | $0.50 |
| 1,001 â€“ 50,000 results | $0.40/1k |
| 50,000+ results | $0.30/1k |

**ROI context:** A professional grant writer charges $75â€“$150/hour. Identifying 10 eligible opportunities manually from Grants.gov takes 3â€“5 hours. This actor does it in under 30 seconds. If even one application succeeds at $500K, the research cost is 0.0001% of the award.

***

### Data Source and Freshness

- **Primary:** Grants.gov REST API — official federal grant opportunities database managed by HHS
- **Fallback:** SAM.gov Contract Opportunities API — used when Grants.gov returns incomplete records
- **Update frequency:** Grants.gov updates continuously; this actor reflects data within 1â€“4 hours of posting
- **Coverage:** All federal grant opportunities across all 26 grant-making agencies; CFDA-registered programs only
- **Historical data:** Closed and archived opportunities available for research purposes

***

### Technical Notes

- Grants.gov API requires no authentication for public opportunity searches
- SAM.gov fallback requires no API key for basic opportunity data
- Large result sets (1,000+) paginate automatically; full traversal may take 15â€“45 seconds
- Description fields are returned as plain text (HTML stripped); original HTML available on request via `include_raw_html: true`
- CFDA numbers should be formatted as `"XX.XXX"` strings (e.g., `"93.994"`)
- Award ceilings are in USD integers; `null` indicates no stated ceiling (formula grants, open-ended programs)

***

### Support

- **Issues:** File a GitHub issue on the actor repository
- **Apify Community:** [community.apify.com](https://community.apify.com)
- **Grants.gov API docs:** [grantsgovprod.grants.gov/grantsGov/v2/rest](https://grantsgovprod.grants.gov/grantsGov/v2/rest/)
- **SAM.gov docs:** [open.gsa.gov/api/sam](https://open.gsa.gov/api/sam/)

# Actor input Schema

## `query` (type: `string`):

Search keyword matched against grant title, description, and agency. Examples: 'rural broadband', 'opioid treatment', 'climate resilience', 'STEM education', 'maternal health'.

## `agency` (type: `string`):

Filter by federal agency name or code. Examples: 'NIH', 'USDA', 'HHS', 'NSF', 'ED' (Dept of Education), 'EPA', 'DOJ', 'DOL' (Dept of Labor).

## `fundingCategory` (type: `string`):

Filter by funding category. Common values: 'Health', 'Education', 'Science and Technology and other Research and Development', 'Agriculture', 'Environment', 'Community Development', 'Housing', 'Law Justice and Legal Services', 'Transportation'.

## `status` (type: `string`):

Filter by grant status: 'posted' (currently open), 'forecasted' (upcoming, not yet open), 'closed' (deadline passed), 'archived' (no longer active).

## `minAward` (type: `integer`):

Only return grants with award ceiling >= this value. Use 500000 to filter for major grants, 1000000 for million-dollar+ opportunities.

## `maxAward` (type: `integer`):

Only return grants with award ceiling <= this value. Set to 0 for no upper limit.

## `limit` (type: `integer`):

Maximum number of grant opportunities to return (max 500). In MCP server mode, up to 500 records are loaded into memory for real-time queries.

## `serveMcp` (type: `boolean`):

When enabled, starts an MCP-compatible HTTP server on port 4321 instead of returning a batch dataset. Use this mode to connect Claude Desktop, Cursor, or any MCP client directly to live Grants.gov data. Ideal for grant writer AI assistants. The actor will run continuously until stopped.

## Actor input object example

```json
{
  "query": "",
  "agency": "",
  "fundingCategory": "",
  "status": "posted",
  "minAward": 0,
  "maxAward": 0,
  "limit": 100,
  "serveMcp": false
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("andrew_avina/grants-mcp").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("andrew_avina/grants-mcp").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call andrew_avina/grants-mcp --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=andrew_avina/grants-mcp",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Federal Grants: 10,000+ Active Grants.gov Opportunities",
        "description": "Search all active federal grant opportunities from Grants.gov. NIH, NSF, USDA, HUD, DOE, DOJ + 25 agencies. Returns ceiling, eligibility, close date. Filter by agency, keyword, amount, applicant type. MCP-native. Updated daily.",
        "version": "0.0",
        "x-build-id": "keHtdYdbkCUd2vp5g"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/andrew_avina~grants-mcp/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-andrew_avina-grants-mcp",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/andrew_avina~grants-mcp/runs": {
            "post": {
                "operationId": "runs-sync-andrew_avina-grants-mcp",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/andrew_avina~grants-mcp/run-sync": {
            "post": {
                "operationId": "run-sync-andrew_avina-grants-mcp",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "query": {
                        "title": "Keyword Search",
                        "type": "string",
                        "description": "Search keyword matched against grant title, description, and agency. Examples: 'rural broadband', 'opioid treatment', 'climate resilience', 'STEM education', 'maternal health'.",
                        "default": ""
                    },
                    "agency": {
                        "title": "Agency Name or Code",
                        "type": "string",
                        "description": "Filter by federal agency name or code. Examples: 'NIH', 'USDA', 'HHS', 'NSF', 'ED' (Dept of Education), 'EPA', 'DOJ', 'DOL' (Dept of Labor).",
                        "default": ""
                    },
                    "fundingCategory": {
                        "title": "Funding Category",
                        "type": "string",
                        "description": "Filter by funding category. Common values: 'Health', 'Education', 'Science and Technology and other Research and Development', 'Agriculture', 'Environment', 'Community Development', 'Housing', 'Law Justice and Legal Services', 'Transportation'.",
                        "default": ""
                    },
                    "status": {
                        "title": "Opportunity Status",
                        "enum": [
                            "posted",
                            "forecasted",
                            "closed",
                            "archived"
                        ],
                        "type": "string",
                        "description": "Filter by grant status: 'posted' (currently open), 'forecasted' (upcoming, not yet open), 'closed' (deadline passed), 'archived' (no longer active).",
                        "default": "posted"
                    },
                    "minAward": {
                        "title": "Minimum Award Ceiling (USD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only return grants with award ceiling >= this value. Use 500000 to filter for major grants, 1000000 for million-dollar+ opportunities.",
                        "default": 0
                    },
                    "maxAward": {
                        "title": "Maximum Award Ceiling (USD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only return grants with award ceiling <= this value. Set to 0 for no upper limit.",
                        "default": 0
                    },
                    "limit": {
                        "title": "Result Limit",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of grant opportunities to return (max 500). In MCP server mode, up to 500 records are loaded into memory for real-time queries.",
                        "default": 100
                    },
                    "serveMcp": {
                        "title": "MCP Server Mode",
                        "type": "boolean",
                        "description": "When enabled, starts an MCP-compatible HTTP server on port 4321 instead of returning a batch dataset. Use this mode to connect Claude Desktop, Cursor, or any MCP client directly to live Grants.gov data. Ideal for grant writer AI assistants. The actor will run continuously until stopped.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
