imf-mcp-server について
IMF SDMX 3.0のマクロ経済データをデータフローや国別に照会するMCPサーバーです。WEO予測、国際収支、CPI、為替レートなどの時系列を必要とする分析者やエージェント向けで、ステージした結果へのSQL分析も任意で行えます。
主な機能
- 01IMFデータフローの閲覧
- 02ディメンションとコードの解決
- 03時系列データの照会
- 04大規模結果のDataCanvasへのステージ
- 05ステージ済みテーブルへの読み取り専用SQL
- 06リソースによるデータフローメタデータ取得
活用シーン
- 01マクロ経済指標のIMFデータセット検索
- 02期間を指定した国別データの取得
- 03ステージした複数国データの分析
- 04照会前のディメンションコード確認
MCP 対応
STDIOまたはStreamable HTTP経由で、6つのツールと`imf://database/{dataflow_id}`リソースをMCPクライアントに提供します。公開ホスト型エンドポイントもあります。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://imf.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-imf https://imf.caseyjhand.com/mcp{"mcpServers":{"cyanheads-imf":{"type":"http","url":"https://imf.caseyjhand.com/mcp"}}}Cursor で開く{"servers":{"cyanheads-imf":{"type":"http","url":"https://imf.caseyjhand.com/mcp"}}}VS Code で開く{"mcpServers":{"cyanheads-imf":{"type":"http","url":"https://imf.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-imf":{"serverUrl":"https://imf.caseyjhand.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
5| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| limit | integer | いいえ | この呼び出しで返すデータフローの最大数。デフォルトは 50 件です。1 回の呼び出しで返せるのは最大 200 件のため、より大きい limit(最大 1,000)を指定した場合は 200 件が返され、requested_limit と applied_limit が併せて返されます。total_count は一致件数を示すため、結果が部分ページかどうかを常に判別できます。 |
| filter | string | いいえ | 任意の絞り込み語。空白とカンマで区切ります。各語がデータフローの ID、名前、全文説明のいずれかに大文字と小文字を区別せず含まれる場合、一致とみなされます。例:"exchange rate" は ER と関連データフローを返し、"WEO outlook" は WEO とそれを基に構築された地域別見通しを返します。 |
| offset | integer | いいえ | このページより前にスキップする、一致したデータフローの件数です。limit と組み合わせて、範囲の広いカタログや未絞り込みのカタログをページ分割できます。 |
| include_vintages | boolean | いいえ | WEO_2025_OCT_VINTAGE などのビンテージ(履歴スナップショット)データフローを含めます。デフォルトは false です。検索画面をすっきり保つため、ビンテージは除外されます。 |
詳細
@cyanheads/imf-mcp-server
MCP 経由で IMF SDMX 3.0 のマクロ経済データを検索できます。190 か国にわたる数百のデータフロー、WEO の予測、BOP、CPI、為替レート、国民経済計算を利用できます。STDIO または Streamable HTTP に対応しています。
公開ホスト型サーバー: https://imf.caseyjhand.com/mcp
概要
190 か国にわたる IMF のマクロ経済データを利用できます。世界経済見通しの予測、国際収支、CPI、為替レート、国民経済計算、その他数百のデータセットを収録しています。カタログの閲覧、ディメンションコードの解決、時系列データの検索、大規模な複数国の結果に対する SQL の実行が可能です。API キーは不要です。
ツール
| ツール | 説明 |
|---|---|
imf_list_databases | IMF SDMX データフローの一覧を取得します。任意で単語による絞り込みができます |
imf_get_database | データフローのディメンションとコードリストを取得し、用語を SDMX コードに対応付けます |
imf_query_dataset | 時間範囲を指定し、ディメンションキーでデータフローを検索します |
imf_dataframe_describe | imf_query_dataset でステージングされた DataCanvas テーブルと列を一覧表示します |
imf_dataframe_query | ステージングされた DataCanvas テーブル全体に対して、読み取り専用の SQL SELECT を実行します |
imf_dataframe_drop | ステージングされたテーブルまたはビューを 1 つ削除します。デフォルトでは無効です |
リソース
| リソース | 説明 |
|---|---|
imf://database/{dataflow_id} | 1 つのデータフローの検出メタデータ:ディメンション、コードリストのプレビュー、key_format |
機能リファレンス
imf_list_databases ツール
filterは、ID、名前、説明にスペースまたはカンマで分割したすべての単語が含まれるデータフローを対象にします(大文字と小文字は区別されません)。include_vintages=trueでない限り、WEO_2025_OCT_VINTAGEなどのビンテージスナップショットは除外されますlimit(デフォルトは50)とoffsetを使ってページ分割されます。1ページあたり最大200件です。より大きなlimit(最大1,000)を指定すると、requested_limit/applied_limitが返されます。total_countとreturned_countは、それぞれ一致した件数とページ内の件数を示します- 説明は200文字で切り詰められます。全文は
imf_get_databaseで取得できます
imf_get_database ツール
- 用語をSDMXディメンションコードに解決します(国はISO 3文字コードです。
USではなくUSAを使用します)。imf_query_datasetが必要とする、ドット区切りのディメンション順序key_formatを返します - コードリストのプレビューは50件です。
dimension_idを指定すると、limit/offsetで1つのディメンションをページ分割できます(1ページあたり最大200件で、残りはnext_offsetに示されます)。codelist_filterを指定すると、IDまたは名前にすべての単語が含まれるコードに絞り込めます available_only=trueの場合、データフローで公開されているコードのみをページ分割して返し、系列数と期間のカバレッジも示します。省略された場合、agency_id/versionは自動検出されます
imf_query_dataset ツール
- DSDの順序に従ったドット区切りのキーです。各位置では
+でコードを組み合わせ、*ですべてのコードに一致させます。コードとdataflow_idは大文字と小文字を区別しません。start_period/end_periodにはYYYY、YYYY-SN、YYYY-QN、YYYY-MM、またはYYYY-MM-DDを指定でき、last_n_observations(1~1,000,000)を指定すると、各系列の直近N件の観測値が返されます time_period、value、status、系列属性(公開されている場合はunit、scale、decimals、reference_period)を返し、系列ごとに1件のseries_metadataを含みます。応答は100,000文字に制限されます。DataCanvasを使用している場合、結果が大きいとDataCanvasに出力されます(output_mode: "canvas"を指定すると強制的にステージングされ、保存されたかどうかはstagedに示されます)。DataCanvasを使用していない場合、最も古い観測値から返され、truncated: trueとretrieval_guidanceが付与されます- キーおよび期間範囲のエラーは
invalid_key_code(最も近い有効なコードを含む)、wildcard_in_code_list、key_too_long、response_too_large、no_data、no_data_in_rangeです。+を含むキーで一部の系列のみが返された場合、残りはmissing_seriesに列挙されます。上流の障害はdata_unavailableとrate_limitedで、どちらも45秒の呼び出し時間内であれば再試行できます
imf_dataframe_describe ツール
- ステージングされたすべてのテーブルについて、行数、列名、DuckDBの型を一覧表示します
staged: trueを返したimf_query_dataset呼び出しのcanvas_idが必要です。imf_dataframe_queryを呼び出す前に実行してください- 他のデータフレームツールと同様に、
CANVAS_PROVIDER_TYPE=duckdbの場合のみ一覧に表示されます
imf_dataframe_query ツール
- 呼び出しごとに読み取り専用のSQL
SELECTを1つ実行します。先頭がWITH … SELECTのクエリも使用できますが、DMLとDDLは拒否されます - 結果はキャンバスの行数制限(デフォルトは10,000件)に続いて、100,000文字の応答上限で制限されます。どちらかの上限により結果が切り詰められた場合、
truncated: trueになります。安定したORDER BYとLIMIT/OFFSETを使ってページ分割してください - 大きすぎるセルはテキストテーブル内では切り詰められますが、
structuredContentにはすべての値が保持されます。それでも1行が予算を超える場合はresponse_too_largeになります CANVAS_PROVIDER_TYPE=duckdbの場合のみ一覧に表示されます
imf_dataframe_drop ツール
- キャンバスから指定したテーブルまたはビューを1つ削除します。
imf_dataframe_describeで確認できる正確な名前が必要です - 同じ対象を再度削除した場合や、対象が存在しない場合は、エラーではなく
dropped: falseを返します - デフォルトでは無効です。登録するには、
CANVAS_PROVIDER_TYPE=duckdbとともにIMF_ENABLE_DATAFRAME_DROP=trueを設定してください
imf://database/{dataflow_id} リソース
- コードリストの項目が50件以下の各ディメンションに加え、件数、
key_format、名前、説明を返します dataflow_idはimf_list_databasesから取得します。プレビューを超えるコードリストについては、continuationメタデータがimf_get_databaseを案内します
機能
@cyanheads/mcp-ts-core を基盤としており、stdio および Streamable HTTP トランスポート、切り替え可能な認証(none/jwt/oauth)、切り替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションの OpenTelemetry トレースを備えた構造化ログに対応しています。
IMF 固有の機能:
- 公開 IMF SDMX 3.0 ポータルにキーなしでアクセスできます
- 型付けされた SDMX 3.0 クライアントが、各クエリの前にキーの次元数を DSD に照らして検証します
- データフローカタログと利用可能性制約をセッション内にキャッシュします
- 複数の国や長期間にわたる大量の結果を DataCanvas にスピルできるよう、DuckDB を使用します
エージェントが扱いやすい出力:
- コードリストのエントリには、機械処理用コードと人間が読めるラベルの両方が含まれます
- すべてのデータフローレスポンスの
key_formatに、次元の順序が示されます - 観測値には、各データフローの
statusフラグ(例:T、C、NA)が含まれ、データ品質に関する注意事項を確認できます stagedとtruncatedは個別に報告され、ステージングされた結果にはcanvas_id、table_name、取得方法の案内が含まれます
はじめに
公開ホストインスタンス
公開インスタンス https://imf.caseyjhand.com/mcp を利用できます。インストールは不要です。Streamable HTTP を使って、任意の MCP クライアントから接続してください。
{
"mcpServers": {
"imf-mcp-server": {
"type": "streamable-http",
"url": "https://imf.caseyjhand.com/mcp"
}
}
}
セルフホスト/ローカル
API キーは不要です。以下を MCP クライアントの設定ファイルに追加してください。
{
"mcpServers": {
"imf-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/imf-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
または、npx を使用します(Bun は不要です)。
{
"mcpServers": {
"imf-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/imf-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
または、Docker を使用します。
{
"mcpServers": {
"imf-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"ghcr.io/cyanheads/imf-mcp-server:latest"
]
}
}
}
大量の結果に対する SQL 分析を有効にするには、env ブロックに CANVAS_PROVIDER_TYPE=duckdb を追加してください。ステージングされたテーブルをエージェントが削除できるようにする場合に限り、IMF_ENABLE_DATAFRAME_DROP=true を追加してください。
Streamable HTTP を使用するには、トランスポートを設定してサーバーを起動します。
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
- Bun v1.4.0 以降(または Node.js v24 以降)。
- API キーは不要です。
インストール
- リポジトリをクローンします:
git clone https://github.com/cyanheads/imf-mcp-server.git
- ディレクトリに移動します:
cd imf-mcp-server
- 依存関係をインストールします:
bun install
- 環境を設定します:
cp .env.example .env
# edit .env as needed — no required vars for basic use
設定
| 変数 | 説明 | デフォルト |
|---|---|---|
CANVAS_PROVIDER_TYPE | DataCanvas へのスピルとデータフレームツールを有効にするには、duckdb に設定します。 | — |
IMF_ENABLE_DATAFRAME_DROP | imf_dataframe_drop を登録します。 | false |
IMF_BASE_URL | IMF SDMX 3.0 のベース URL です。 | https://api.imf.org/external/sdmx/3.0 |
IMF_REQUEST_TIMEOUT_MS | リクエストごとのタイムアウト(ミリ秒)です。 | 30000 |
MCP_TRANSPORT_TYPE | トランスポート:stdio または http。 | stdio |
MCP_HTTP_PORT | HTTP サーバーのポートです。 | 3010 |
MCP_SESSION_MODE | HTTP セッションの処理方法:stateful、stateless、または auto。 | stateless |
MCP_AUTH_MODE | 認証モード:none、jwt、または oauth。 | none |
MCP_LOG_LEVEL | ログレベル(RFC 5424)です。 | info |
OTEL_ENABLED | OpenTelemetry 計装を有効にします。 | false |
オプションのオーバーライドの全一覧は、.env.example を参照してください。
サーバーの実行
ローカル開発
-
ビルドして実行:
bun run rebuild bun run start:stdio # or bun run start:http -
チェックとテストを実行:
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t imf-mcp-server .
docker run --rm -p 3010:3010 imf-mcp-server
Dockerfile は、デフォルトで HTTP トランスポート、ステートレスセッションモードを使用し、ログを /var/log/imf-mcp-server に出力します。OpenTelemetry のピア依存関係はデフォルトでインストールされます。これらを省略するには、--build-arg OTEL_ENABLED=false を指定してビルドしてください。
プロジェクト構成
| ディレクトリ | 目的 |
|---|---|
src/index.ts | createApp() のエントリーポイントです。ツール/リソースを登録し、サービスを初期化します。 |
src/config/server-config.ts | サーバー固有の環境変数を解析し、Zod で検証します。 |
src/mcp-server/tools/definitions/ | ツール定義(*.tool.ts)です。 |
src/mcp-server/resources/definitions/ | リソース定義(*.resource.ts)です。 |
src/services/canvas/ | DataCanvas アクセサーです。フレームワークの canvas インスタンスをラップします。 |
src/services/imf-sdmx/ | IMF SDMX 3.0 API クライアントです。データフローカタログ、DSD の取得、データクエリを扱います。 |
tests/ | src/ に対応する単体テストと統合テストです。 |
docs/ | 設計メモとディレクトリツリーです。 |
開発ガイド
開発ガイドラインとアーキテクチャ上のルールについては、CLAUDE.md/AGENTS.md を参照してください。要点は次のとおりです。
- ハンドラーは例外をスローし、フレームワークが捕捉します。ツールのロジックで
try/catchを使用しないでください。 - リクエスト単位のログには
ctx.logを、テナント単位のストレージにはctx.stateを使用してください。 - 新しいツールとリソースは、
src/mcp-server/*/definitions/index.tsのバレル経由で登録してください。 - 外部 API 呼び出しは、未加工データの検証 → ドメイン型への正規化 → 出力スキーマに沿った返却の順でラップしてください。不足しているフィールドを捏造しないでください。
データソース
データは国際通貨基金の SDMX 3.0 ポータルから、IMF の著作権および利用規約に基づいて取得しています。IMF の規約では、出典を明記することで統計データの再配布が認められています。データを返す各ツールのレスポンスには、必要な出典表記を含む source フィールドが含まれます。Source: International Monetary Fund, <dataflow name>, https://data.imf.org/。
コントリビューション
課題の報告を歓迎します。提出前にチェックとテストを実行してください。
bun run devcheck
bun run test
ライセンス
Apache-2.0 — 詳細は LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。