grantsgov-mcp-server について
grantsgov-mcp-serverは、Grants.govに掲載された米国連邦政府の助成機会を扱います。APIキーなしで機会の検索、詳細情報の確認、フィルター用コードの参照ができます。
主な機能
- 01キーワードと条件による機会の検索
- 02応募資格、資金、日程、添付資料の確認
- 03機関とフィルター用コードの参照
- 04予告、公開中、終了、アーカイブ済みの公募の閲覧
活用シーン
- 01機関や申請者区分に合う助成機会の検索
- 02申請前の応募資格と助成内容の確認
- 03締切が近い公募の把握
MCP 対応
Grants.govの機会検索、詳細レコード取得、参照コード検索ツールをMCPクライアントに公開します。`grantsgov-guide`スキルもMCPリソースとして利用できます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://grantsgov.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-grantsgov https://grantsgov.caseyjhand.com/mcp{"mcpServers":{"cyanheads-grantsgov":{"type":"http","url":"https://grantsgov.caseyjhand.com/mcp"}}}Cursor で開く{"servers":{"cyanheads-grantsgov":{"type":"http","url":"https://grantsgov.caseyjhand.com/mcp"}}}VS Code で開く{"mcpServers":{"cyanheads-grantsgov":{"type":"http","url":"https://grantsgov.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-grantsgov":{"serverUrl":"https://grantsgov.caseyjhand.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
3| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| sort | enum | いいえ | 結果の順序:relevance(キーワードの一致度順。キーワードが必要で、指定しない場合は順序不定)、open_date_desc/open_date_asc(掲載日)、close_date_asc/close_date_desc(締切日。昇順では締切日のない項目が最後)、opportunity_number_asc/_desc、agency_asc/_desc。デフォルト:キーワードがある場合は relevance、ない場合は open_date_desc。relevance | open_date_desc | open_date_asc | close_date_asc | close_date_desc | opportunity_number_asc | opportunity_number_desc | agency_asc | agency_desc |
| limit | integer | いいえ | 1 ページあたりの行数(1~100)。 |
| offset | integer | いいえ | ページング用のゼロ始まりの行オフセットです。前のページの next_offset を使用してください。 |
| keyword | string | いいえ | タイトル、説明、機会番号、機関を対象に全文検索します。裸の語はすべて必須です(rural broadband = rural AND broadband)。選択肢は OR でつなぎ、フレーズは引用符で囲み("mental health")、NOT または -term で除外し、末尾に * を付けて前方一致検索します(broad*)。OR を AND または裸の語と混在させる場合は、括弧でグループ化する必要があります(例: (rural OR tribal) broadband)。グループ化されていない混在は拒否されます。内部にハイフンまたはピリオドを含む単語(COVID-19、K-12)はフレーズとして照合されます。フィールド接頭辞(agency:NSF、cfda:93.866)は拒否されます。代わりに agencies、assistance_listing、またはその他のフィルターを使用してください。grantsgov_list_reference の keyword_syntax トピックを参照してください。 |
| agencies | array | いいえ | grantsgov_list_reference の agencies トピックにある機関コード(例:HHS、HHS-NIH11、NSF)。コードには下位機関も含まれます。大文字と小文字は区別されません。指定した機関のいずれかに一致します。 |
| statuses | array | いいえ | 含めるライフサイクル状態:forecasted、posted、closed、archived。デフォルト:forecasted と posted。 |
| eligibilities | array | いいえ | grantsgov_list_reference の eligibilities トピックにある2桁の申請者タイプコード(例:12 = 501(c)(3) ステータスの非営利団体、07 = 連邦政府に認定された部族政府)。文字列または数値で指定できます。1桁の場合はゼロ埋めされます(7 = 07)。指定したタイプのいずれかに一致します。 |
| include_facets | boolean | いいえ | 各フィルター値のファセット件数を含めます。ページング時は、容量を節約するため false に設定してください。 |
| assistance_listing | string | いいえ | 援助事業番号(ALN、旧称 CFDA)を1つ指定します(例:93.866、93866)。大文字と小文字は問いません。値は1つのみ指定できます。 |
| funding_categories | array | いいえ | grantsgov_list_reference の funding_categories トピックにある資金カテゴリーコード(例:HL = Health、ED = Education)。大文字と小文字は区別されません。指定したカテゴリーのいずれかに一致します。 |
| opportunity_number | string | いいえ | 機関が割り当てた正確な機会番号(例:HRSA-27-005)を指定します。大文字と小文字を区別せずに照合し、前後を囲む二重引用符のペアは削除されます。機関間で番号が重複する場合があるため、複数行に一致することがあります。すべての状態を対象に番号を検索するには、grantsgov_get_opportunity で opportunity_numbers を指定することを推奨します。 |
| posted_within_days | integer | いいえ | 過去 N 日間(1~3650日)に掲載された機会のみを対象にします。forecasted および posted 状態でのみ機能します。 |
| closing_within_days | integer | いいえ | 米国東部時間の今日から N 日後までに締め切られる掲載済みの機会のみを対象にします(0~365、0 = 本日締切)。掲載済みの機会を締切日順に検索するため、status は posted、sort は close_date_asc のみ指定できます。 |
| funding_instruments | array | いいえ | 資金提供手段:G(grant)、CA(cooperative agreement)、PC(procurement contract)、O(other)。指定した手段のいずれかに一致します。 |
| include_unrestricted | boolean | いいえ | eligibilities を設定した場合、特定のコードでは対象にならない、すべての申請者タイプに開かれた機会(コード 99)も照合します。列挙したタイプを対象とする機会のみ表示するには false に設定してください。 |
詳細
@cyanheads/grantsgov-mcp-server
Grants.gov の連邦政府助成金の募集情報を検索し、詳細なレコード(応募資格、助成金、締切、添付ファイル)を読み取り、MCP 経由でフィルターコードを解読します。STDIO または Streamable HTTP に対応しています。
公開ホストサーバー: https://grantsgov.caseyjhand.com/mcp
概要
Grants.gov に掲載された米国連邦政府の助成金募集情報を、各省庁の予告済み、公開中、終了済み、アーカイブ済みの告知まで網羅します。キーワード、機関、応募者の種類、助成金カテゴリ、支援プログラム一覧、または締切期間で検索し、助成金の範囲、応募資格、重要な日程、機関の連絡先、NOFO の添付ファイルなど、レコードの全内容を確認できます。API キーは不要です。
ツール
| ツール | 説明 |
|---|---|
grantsgov_search_opportunities | キーワードとフィルターで募集情報を検索します。各行には締切日と残り日数が先頭に表示され、絞り込みに利用できるファセット件数も確認できます |
grantsgov_get_opportunity | 数値 ID または募集番号を指定して、最大 5 件の募集情報の詳細なレコードを読み取ります |
grantsgov_list_reference | 検索フィルターで指定できるコード(機関、応募者の種類、助成金カテゴリ、支援手段)に加え、ステータス、並べ替えオプション、キーワード構文を一覧表示します |
grantsgov-guide スキルでは、助成金候補の絞り込み、応募資格と締切の確認、申請要件について説明します。このスキルはパッケージとプラグインに含まれており、MCP 経由で skill://grantsgov-guide/SKILL.md として利用できます。
機能リファレンス
grantsgov_search_opportunities ツール
- フィルター:
keyword、statuses(デフォルトはforecastedとposted)、agencies(コードには下位機関も含まれます)、eligibilities、funding_categories、funding_instruments、assistance_listing(ALN を 1 つ指定)、opportunity_number(完全一致)、posted_within_days、closing_within_days eligibilitiesは、include_unrestrictedがfalseでない限り、あらゆる申請者タイプに開放されている機会(コード99)にも一致します- キーワードの各語句はすべて必須です。選択肢は
ORで結び、フレーズは引用符で囲み、NOTまたは-termで除外し、接頭辞には末尾に*を付けます。グループ化されていない AND/OR の混在やフィールド接頭辞(agency:NSF)はinvalid_keywordエラーになります closing_within_days(0~365)は締切日を基準に、掲載中の機会を検索します。このフィルターではpostedステータスとclose_date_ascソートのみ使用できます。また、posted_within_daysではclosedとarchivedが拒否されます(filter_conflict)。total_count_kindは、スキャンが未完了の場合に、正確な件数と下限値を区別します。next_offsetで取得できるのは、スキャン済みの残りの一致項目のみです- 1 ページあたり最大 100 行(デフォルトは 25 行)です。
limitは 1~1,000 を受け付け、100 を超える値は通知とともに 100 に制限されます。オフセットページングにはnext_offsetを使用します。effective_keywordとapplied_filtersには送信された値が反映されます。下位機関のファセットは、現在の上流クエリのもとで各階層の項目数を集計します。include_facets: falseを指定すると、ファセットの件数は省略されます - 各行には
close_date_kind(fixed、none_listed、placeholder)とdays_until_closeが含まれますが、助成金額は含まれません。不明なコードはunknown_agency、unknown_eligibility、unknown_funding_categoryのいずれかのエラーになります
grantsgov_get_opportunity ツール
- 識別子リストごとに空白でない項目を最大 50 件、正規化後の一意な識別子を合計 50 件まで受け付けます。最初の 5 件の識別子を読み込み、番号より ID を優先します。残りのキューは、元のセクションオフセットとともに
deferred_ids、deferred_numbers、および実行可能なcontinuationに格納されます。番号は 4 つすべてのステータスを対象に解決されます。選択されたエイリアスは、1 回の呼び出しで 1 件のレコードのみ取得します - 該当なし、または複数の機会で共有されている番号は、エラーではなく、
not_foundまたはambiguous(candidatesを含む)としてunresolved[]に返されます - レコードには、締切日(予測の場合は推定値で、
close_date_is_estimateで示されます)、助成金の上限額と下限額、資金総額、予定採択数、費用分担、適格性の説明とともに申請者タイプ、支援プログラム一覧、機関の連絡先が含まれます - 資金提供と適格性に関するフィールドは、
doc_typeに一致する概要または予測ブロックに由来し、money_sourceにその種類が示されます。予測にはforecast_estimatesが追加されます - 個別にページ分割される項目:説明は 12,000 文字、適格性の説明は 6,000 文字、資金カテゴリーの説明は 2,000 文字、添付ファイルは 30 件、申請パッケージは 10 件、関連する機会は 10 件です。6 つのゼロベース入力は
description_offset、eligibility_offset、funding_category_explanation_offset、attachment_offset、application_package_offset、related_opportunity_offsetです(デフォルトは 0)。各レコードのpagesには全件数と、単一の機会に対する実行可能な継続情報が含まれます。部分的な説明には*_truncatedが保持され、範囲外のページは空になります。添付ファイルにはdownload_urlと、掲載されている場合は変更されていない上流のcreated_dateが含まれます last_revision_noteとlast_revision_changedは、掲載されている場合、現在有効な概要または予測の最新の改訂内容を要約します。変更された名前は公開フィールドに対応付けられ、不明な名前にはupstream:接頭辞が保持されます。メタデータがないからといって、変更がなかったことを意味するわけではありません
grantsgov_list_reference ツール
topic:agencies、eligibilities、funding_categories、funding_instruments、statuses、sort_options、またはkeyword_syntax- コードは Grants.gov の最新スナップショットに基づいており、24 時間キャッシュされ、
snapshot_dateで日付が示されます。各コードにはopen_count(予測分と掲載済み分)とtotal_countが含まれます(statusesに含まれるのはtotal_countのみです)。sort_optionsとkeyword_syntaxは固定データです - 1 ページあたり最大 100 件(デフォルトは 50 件)です。
limitに指定できる値は 1~1,000 で、100 を超える値は通知付きで 100 に制限されます。ページングの前にフィルターが適用されます。continuationは次の呼び出しに必要な引数をすべて保持します - 更新に失敗した場合、期限切れのデータを返すことがあります。その際は
reference_cacheで、古いデータであること、失敗理由、再試行時刻が開示されます。その語彙を使った検索でも、同じ問題とスナップショットのタイムスタンプが開示されます agenciesはデフォルトで最上位の機関を一覧表示します。parent_codeを指定すると、1 つの機関配下のすべてのコードが一覧表示されます。name_containsはすべてのトピックのラベルとコードに一致します(agenciesの場合はすべての階層が対象です)- 別のトピックで
parent_codeを指定するとfilter_not_applicableエラーになります。不明なコードを指定するとunknown_parent_codeエラーになります
機能
@cyanheads/mcp-ts-core を基盤とし、stdio と Streamable HTTP のトランスポート、差し替え可能な認証(none/jwt/oauth)、交換可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションの OpenTelemetry トレース機能を備えた構造化ログを提供します。
Grants.gov 固有の機能:
- リスト形式の入力には、単一の文字列または配列を指定できます。空の値や配列要素は未設定として扱われます。文字列がカンマ、スペース、改行で分割されることはありません
- Grants.gov REST API(
search2、fetchOpportunity)用の API キー不要のクライアントを備え、リトライに対応し、プロセスあたりの同時接続数を最大 4 件に制限します - 入力は Grants.gov が意図どおりに解釈する形式に変換されます。キーワード単体は
ANDで結合され、ハイフン付きトークン(COVID-19、K-12)はフレーズとして照合され、機関コードは下位機関のツリーに展開され、案件番号は文字列どおりに照合され、フィルターコードは最新の語彙と照合されます - 締切日は Grants.gov が公開している米国東部時間における今日からの日数で計算されます。はるか先の仮の終了日は締切日として報告せず、
placeholderとして示されます - 人間が読むフィールドの HTML5 エンティティはデコードされます。説明文の HTML は、表のセルと行の境界を保持したままプレーンテキストに変換されます。
content[]では、機関の文章はそのままのテキストとして表示され、識別子にはコードの書式が保持され、複数行のフィールドは引用ブロックとして表示され、インラインテキストは 1 行にまとめられます
エージェント向けの出力:
- 実行内容を示す
effective_keywordとapplied_filtersを返します。デフォルトのステータス、展開された機関フィルター、追加されたコード99も含まれます - 識別可能なフィールドとして
close_date_kind、doc_type、money_source、unresolved[].outcomeがあり、呼び出し側で条件分岐できます - 次の呼び出しを示す空結果とページングの通知を返します。たとえば、デフォルトのステータスで該当がなかった場合は、終了済みおよびアーカイブ済みの一致件数を示し、締切期間内に該当がなかった場合は次の締切日を示します
- 復旧方法のヒント付きで、型付きの失敗理由を返します。Grants.gov の障害を示す理由には
upstream_unavailable、rate_limited、upstream_route_unavailableがあります
はじめに
インストール不要のホスト済みインスタンスに接続します。
claude mcp add --transport http grantsgov-mcp-server https://grantsgov.caseyjhand.com/mcp
または、ローカルで実行します。
claude mcp add grantsgov-mcp-server -- npx -y @cyanheads/grantsgov-mcp-server
その他のクライアントでは、これを MCP 設定ファイルに追加します。
{
"mcpServers": {
"grantsgov-mcp-server": {
"command": "npx",
"args": ["-y", "@cyanheads/grantsgov-mcp-server"]
}
}
}
API キーは不要です。Docker またはソースからのビルドについては、サーバーの実行をご覧ください。
設定
サーバー独自の設定はありません。Grants.gov API はキー不要で、エンドポイントも固定されています。以下のフレームワーク変数でトランスポート、認証、ログを制御します。
| 変数 | 説明 | デフォルト |
|---|---|---|
MCP_TRANSPORT_TYPE | トランスポート:stdio または http。 | stdio |
MCP_HTTP_PORT | HTTP サーバーのポート。 | 3010 |
MCP_SESSION_MODE | HTTP セッションモード:stateless、stateful、または auto。サーバーは stateless を宣言しています。これを上書きする場合にのみ設定してください。 | stateless |
MCP_AUTH_MODE | 認証:none、jwt、または oauth。 | none |
MCP_LOG_LEVEL | ログレベル(debug、info、warning、error など)。 | info |
LOGS_DIR | ログファイルの保存先ディレクトリ(Node.js のみ)。 | <app-root>/logs |
STORAGE_PROVIDER_TYPE | ストレージバックエンド:in-memory、filesystem、supabase、cloudflare-kv/r2/d1。 | in-memory |
OTEL_ENABLED | OpenTelemetry を有効にします。 | false |
オプションの上書き設定の全一覧は .env.example を参照してください。
サーバーの実行
ローカル開発
Bun v1.4.0 以降(または Node.js v24 以降)と、api.grants.gov へのネットワークアクセスが必要です。
-
クローンとインストール:
git clone https://github.com/cyanheads/grantsgov-mcp-server.git cd grantsgov-mcp-server && bun install cp .env.example .env # optional framework overrides -
本番バージョンのビルドと実行:
# One-time build bun run rebuild # Run the built server bun run start:http # or bun run start:stdio -
チェックとテストの実行:
bun run devcheck # Lints, formats, type-checks, and more bun run test # Runs the test suite
Docker
docker run --rm -p 3010:3010 ghcr.io/cyanheads/grantsgov-mcp-server:latest
イメージはデフォルトで HTTP トランスポート、ステートレスセッションモードを使用し、/var/log/grantsgov-mcp-server にログを出力します。MCP クライアントから stdio 経由で実行するには、"command": "docker" と "args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/grantsgov-mcp-server:latest"] を使用してください。ローカルでビルドするには、docker build -t grantsgov-mcp-server . を実行します。OpenTelemetry のピア依存関係はデフォルトでインストールされます。これらを省略するには、--build-arg OTEL_ENABLED=false を指定してビルドしてください。
プロジェクト構成
| ディレクトリ | 目的 |
|---|---|
src/index.ts | createApp() のエントリーポイントです。ツールと公開済みスキルを登録し、Grants.gov サービスを開始・破棄します。 |
src/mcp-server/tools/definitions | ツール定義(*.tool.ts)。 |
src/mcp-server/tools | 共通入力スキーマ(input-schemas.ts)と format() の描画ヘルパー(render.ts)。 |
src/services/grants-gov | Grants.gov API クライアント、キーワードコンパイラー、参照スナップショット、日付と金額の正規化、HTML からテキストへの変換。 |
tests/ | src/ に対応する単体テストとツールテスト、および必要最小限の Grants.gov レスポンスフィクスチャ。 |
skills/ | 連邦政府の資金提供機会を審査するエージェント向けに公開されたガイダンス。 |
docs/design.md | 設計メモ:調査した API の動作と、ツール構成に関する判断。 |
開発ガイド
開発ガイドラインとアーキテクチャ上のルールについては、CLAUDE.md を参照してください。要点は次のとおりです。
- ハンドラーは例外をスローし、フレームワークが捕捉します。ツールのロジック内で
try/catchを使用しないでください - ログには
ctx.logを使用し、エラーにはツールで宣言されたエラー理由とともにctx.failを使用してください - 新しいツールは
src/mcp-server/tools/definitions/index.tsに登録してください - 外部 API 呼び出しはラップしてください。生データを検証 → ドメイン型に正規化 → 出力スキーマを返す、という順序にし、不足しているフィールドを捏造しないでください
貢献
課題の報告を歓迎します。提出前にチェックとテストを実行してください。
bun run devcheck
bun run test
データソース
募集機会のデータは、連邦政府機関が資金提供の機会を掲載する Grants.gov から取得しています。記録は米国政府の著作物です。このプロジェクトは Grants.gov またはいかなる連邦政府機関とも提携しておらず、承認も受けていません。
ライセンス
このプロジェクトは Apache 2.0 License の下でライセンスされています。詳細については LICENSE ファイルを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。