census-mcp-server について
census-mcp-serverは、人口、経済、住宅データを扱う分析者やアプリケーション向けに、米国国勢調査局のデータセットへアクセスするMCPサーバーです。データセット検索、地理情報の解決、変数検索、データ取得、地域比較をまとめて提供します。
主な機能
- 01データセットと対応地理レベルの一覧
- 02変数の検索とメタデータ確認
- 03地名、ZIPコード、住所をFIPSに解決
- 04推計値と誤差範囲を取得
- 05複数地域の比較と順位付け
活用シーン
- 01人口に関する問いに使う変数の検索
- 02データ取得前の地域情報の解決
- 03郡や州の推計値の比較
MCP 対応
データセット検索、変数・地理情報の参照、データ取得、地域比較を行う8つのツールを提供します。STDIOとStreamable HTTPに対応しています。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://census.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-census https://census.caseyjhand.com/mcp{"mcpServers":{"cyanheads-census":{"type":"http","url":"https://census.caseyjhand.com/mcp"}}}Cursor で開く{"servers":{"cyanheads-census":{"type":"http","url":"https://census.caseyjhand.com/mcp"}}}VS Code で開く{"mcpServers":{"cyanheads-census":{"type":"http","url":"https://census.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-census":{"serverUrl":"https://census.caseyjhand.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
8| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| filter | string | いいえ | データセットを名前または説明で絞り込むキーワードです。省略すると、すべてのデータセットを一覧します。 |
詳細
@cyanheads/census-mcp-server
MCP を介して、米国国勢調査局のデータ、変数、地理情報を照会できます。STDIO または Streamable HTTP に対応しています。
公開ホスト型サーバー: https://census.caseyjhand.com/mcp
概要
米国国勢調査局の人口統計、経済、住宅に関するデータを扱います。データセットや変数を探したり、地名や住所から FIPS コードを特定したり、任意の地理的範囲にわたる推計値を照会または順位付けしたりできます。
ツール
| ツール | 説明 |
|---|---|
census_list_datasets | 利用可能な Census Bureau データセット(ACS5 および ACS1 のプロファイル、主題別、比較テーブル、ACS 補足推計および選択された人口プロファイル、人口推計、10 年ごとの国勢調査、郡別事業所統計、経済センサス、非雇用者統計)を、ビンテージ年とデータセットコードとともに閲覧します。 |
census_list_geographies | データセットと年でサポートされる地域レベルを、親地域の要件と FIPS の例とともに一覧表示します。 |
census_search_variables | 変数ラベルと概念グループをキーワード検索するか、変数コードまたはテーブルコードで検索します。ACS では、推計値と誤差範囲のコードをあわせて返します。 |
census_get_variable | 1 つ以上の変数コードについて、ラベル、概念、述語タイプ、母集団、誤差範囲の対応変数などの完全なメタデータを取得します。データツールが受け付ける注釈列とフラグ列も含まれます。 |
census_list_predicate_values | データセットの辞書またはライブのワイルドカード列挙から、フィルター対象のディメンションが受け付けるコード(EMPSZES、LFO、POPGROUP、NAICS2017…)を一覧表示します。 |
census_resolve_geography | TIGERweb と Census Geocoder を介して、地名(例:「King County, WA」)、ZIP コード、または住所を Census FIPS 識別子に変換します。 |
census_query_data | 特定の地域における変数について、Census データセットにクエリを実行します。誤差範囲を含む推計値、Census のセンチネル値、および公開済みの意味に変換された非公開事業所の値を返します。また、事業所データセットの述語フィルタリングにも対応します。 |
census_compare_geographies | 州内のすべての郡、全国のすべての州、または指定した地域セットを対象に、複数の地域間で変数を順位付けして比較します。同じ述語フィルタリングに対応した、ソート済みのテーブルを出力します。 |
機能リファレンス
census_list_datasets ツール
- データセットコード、名称、説明、および利用可能なビンテージ年を返します。キーワードによる絞り込みは任意です。ACS5 および ACS1(データプロファイル、主題別テーブル、比較プロファイル、
acs/acs1/spp)、acs/acsse、人口推計、2020 年の 10 年ごとの国勢調査ファイル(選挙区再編成(P.L. 94-171)、dec/dhc、dec/dp、dec/sdhc、dec/ddhca、dec/ddhcb)、cbp、ecnbasic、およびnonempを対象とします。 - 各説明には、データセットで必要なフィルター述語と、公開されている地域レベルが記載されています。
- データセットコード(例:
acs/acs5)は、他のツールに渡す値です。大文字と小文字は区別されません。また、2 つの部分で構成されるコードは最後の部分だけでも使用できます(acs5、pl)。acs/acs5/profileなどの 3 つの部分で構成されるコードは、完全な形で指定する必要があります。 available_yearsはすべての利用可能年を示します。それ以外の年を指定するとyear_not_availableが発生し、利用可能な年が示されます。
census_list_geographies ツール
- 地域レベルと親階層ごとに 1 行を返します。内容は
geography_level、親地域が必須かどうか、required_parent_levels、FIPS の例です。totalLevelsは各レベルを 1 回ずつ数えます。 geography_levelの値はcensus_query_dataおよびcensus_compare_geographiesにそのまま渡す値です。yearのデフォルトは最新のビンテージ年です。dataset_not_foundまたはyear_not_available(提供される年を明記)が発生します。
census_search_variables ツール
- ラベルと概念を対象に単語単位で検索します。クエリ内のすべての単語が一致しない場合は、最も近い候補が通知とともに返されます。大文字・小文字を問わず変数コードまたはテーブルコードを指定すると、最初にその変数、またはコード順のテーブル全体が返されます(
B19013の場合は、まずB19013_001E、次にB19013_001Mが返されます)。 - データセットで公開されていないコードを指定すると、そのコードを含む兄弟データセットを示す通知が返されます(
acs/acs5のS1701はacs/acs5/subjectを示します)。B19013_001EAなどの属性列にはcensus_get_variableを使用してください。 - ACS データセットでは、推定値(E 接尾辞)と誤差範囲(M 接尾辞)のコードがセットで返されます。比較プロファイルとその他のファミリーでは、誤差範囲は公開されません。また、キーワード(
naics)またはコード(cbpのNAICS2017)で述語コードも検索できます。 limitは 1~100 の整数です(既定値は 20)。範囲外の値は上限・下限に丸めず、拒否されます。totalMatchesは上限適用前の一致件数です。variables.json はデータセットと年ごとにキャッシュされます(既定の TTL は 24 時間)。
census_get_variable ツール
- 1 つ以上の変数コード(大文字・小文字は区別されません)を受け取り、指定された順にラベル、概念、述語の型、テーブルの母集団を返します。
groups.jsonを取得できない場合、変数は母集団情報なしで返され、再試行するよう通知されます。 B19013_001EAやEMP_Fなどの注釈列とフラグ列を解決します。attribute_ofは各列が属する列を示し、attribute_typeはその種類(ANNOTATION、FLAG、MARGIN_OF_ERROR)を示します。ACS データセットでは、兄弟列への参照としてestimate_code/moe_codeも返されます。- 述語ディメンションコード(
NAICS2017、SEX)がデータセットに存在することを確認します。それらの値はcensus_list_predicate_valuesで一覧表示できます。datasetの既定値はacs/acs5、yearの既定値は最新のデータ年です。 - コードが定義されていない場合は
variable_not_foundが返され、見つかった場合はそのコードを公開している兄弟データセットが示されます(acs/acs5のDP03_0062Eはacs/acs5/profileを示します)。
census_list_predicate_values ツール
- フィルターディメンションで使用できるコードを一覧表示します。データセットの辞書に一覧がある場合はそこから読み込み、ない場合はその都度列挙します。
NAICS*とPOPGROUPは一覧が長く(数千件のコード)、queryで絞り込めます。EMPSZES、LFO、RCPSZES、TAXSTAT、TYPOPはその都度取得する値のみです。 - 辞書の一覧は、データセットが実際に公開している行と照合され、公開されていないコードは除外されます。
sourceは照合が実行されたかどうかを示し、通知には除外された件数が記載されます。 queryはコードとラベルを照合します。結果はコード順に並べ替えられ、省略がある場合はその旨が示されます(limitは 1~500 の整数、既定値は 50、totalCountは一致件数を示します)。ecnbasicでは、within_naicsを指定するとTAXSTATとTYPOPを 1 つの業種に限定できます。
census_resolve_geography ツール
- 名前付きの場所(例:「King County, WA」)は TIGERweb を通じて解決されます。住所は Census Geocoder によって国勢調査区レベルまで解決され、
block_group_fipsとplace_fipsが返されます。5 桁の ZIP(または ZIP+4)は、その ZIP Code Tabulation Area(zip code tabulation area)に解決されます - 州、郡、場所、国勢調査区、ZIP については、
geography_typeが自動検出されます。大都市圏・小都市圏統計地域、合同統計地域、統合都市、経済上の場所では、geography_typeを明示する必要があります。economic placeは 8 桁のecnbasicコード(Seattle03363000)を返します - 場所のレベルには国勢調査指定地域が含まれます。この地域は、法人化された場所または郡が完全一致しない場合にのみ、名前だけで検索できます。完全な名前(「Arlington CDP, VA」)を使用するか、
geography_type: "place"を指定すると検索できます。省略可能なcounty_fipsは、郡と国勢調査区の解決対象を絞り込みます(住所またはそれ以外のレベルではcounty_scope_unsupportedが返されます) - 大文字・小文字は区別されず、州の略称または正式名称を使用できます。また、Saint/St. の違いやアクセント記号の違いは許容されます。New York City の各区は郡に解決されます(「Brooklyn, NY」→ Kings County
047)。この場合、noticeが返されます - 複数の地理情報に一致する名前を指定すると、すべての候補の FIPS コードと州を含む
ambiguous_nameが返されます。結果には、次のツールで使用できるstate_fips(→parent_fips)とfips_summary(→geography_fips)が含まれます。統計地域と ZCTA にはstate_fipsが含まれません
census_query_data ツール
- FIPS コードが必要です(地名には
census_resolve_geographyを使用してください)。geography_fips: "*"を指定すると、親の範囲内にある指定レベルのすべての地理情報が返されます。各行にはgeography_fipsと、全国で一意のgeography_geoidが含まれます。ワイルドカードでは GEOID 順に最大limit行(デフォルト 50、最大 500)が返されます。offsetでページングでき、残りの件数はtotalCountとtruncatedに示されます - 1 回の呼び出しにつき変数コードは最大 49 個です。ラベル列またはレコード列が追加されるデータセットでは、上限がさらに少なくなります(
too_many_variablesに最大数が示されます)。不明なコードにはvariable_not_foundが返されます。レベルと親の指定に問題がある場合は、parent_requiredまたはparent_not_acceptedが返されます。省略可能なtract_fips(6 桁、具体的なcounty_fipsと併用)を指定すると、ブロックグループまたは 10 年ごとの国勢調査ブロックのクエリ対象を 1 つの国勢調査区に絞り込めます - 省略可能な
predicatesマップで、business、pep、decデータセット、およびacs/acs1/sppをフィルタリングできます(例:{"NAICS2017": "5112"})。未指定のディメンションには Census のデフォルト値が適用され、各行のapplied_filtersに示されます。"*"を指定すると、カテゴリごとに 1 行が返され、recordにラベルが付けられます。pep/charvは地理情報ごとに複数行を返すため、1 つに絞り込んでください(例:{"MONTH": "7"}) - ACS のセンチネル値は公開時の意味に置き換えられ、開区間の中央値には
open_endedフラグが付きます。cbp、ecnbasic、nonempでは、秘匿値は抑制済みとして報告され、フラグの意味が示されます。estimateが null の場合、値は抑制済み、テキストセル(valueとして返されます)、または空です dec/ddhcaとdec/ddhcbでは、地理情報のPOPGROUPグループは、ファミリー内の 1 つのテーブルにのみ含まれます。no_dataのヒントまたは通知に、同じファミリーの他のテーブルが示されます。CENSUS_API_KEYが必要です
census_compare_geographies ツール
- あるレベルのすべての地域、または名前付きの
geographiesリストに含まれる GEOID/レベルコードのみを順位付けします。within/within_countyを指定すると州/郡内に範囲を絞り、全国比較では省略します - 1つの変数で順位付けします。
sort_by(デフォルトは最初のコード。要求したコードでなければならず、そうでない場合はsort_by_not_requested)、sort_dir(デフォルトはdesc)、limit(1~500、デフォルトは50)を指定します。totalCountは上限適用前の地域数です。カウント値で順位付けすると、率ではなく規模による順位になります。率で順位付けするには、公表されている割合を使用してください(acs/acs5/subjectのS1701_C03_001E、acs/acs5/profileのDP04_0047PE) census_query_dataと同じpredicates、変数の上限、検証、applied_filtersを使用します。複数レコードのデータセット(pep/charv)または"*"の述語は、predicatesで1件に絞り込まない限りambiguous_rowsエラーになります。抑制値は同じ理由で末尾に並び、テキスト値は順位付けできません(通知にその旨が記載されます)。CENSUS_API_KEYが必要です
機能
@cyanheads/mcp-ts-core を基盤とし、stdio と Streamable HTTP のトランスポート、切り替え可能な認証(none/jwt/oauth)、交換可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションの OpenTelemetry トレース機能を備えた構造化ログを提供します。
Census 固有の機能:
- プロセス内の変数キャッシュと設定可能な TTL — データセットと年の組み合わせごとに variables.json を一度取得し、クライアント側で検索します
- 3つの API を使うバックエンド:データクエリには Census Data API、名前付き地域の解決には TIGERweb、住所から国勢調査区への変換には Census Geocoder を使用します
- すべての外部 API 呼び出しで、バックオフを伴う自動再試行を行います
- FIPS の書式設定ヘルパー — ゼロ埋めされた州、郡、国勢調査区のコードを、ツール間でそのまま受け渡せます
エージェントが使いやすい出力:
- ワークフロー指向のツール群 —
fips_summaryとstate_fipsが返す値は、次のツールのgeography_fipsとparent_fipsにそのまま渡せます - 抑制コードをデコード — Census の負のセンチネル値(例:
-666666666)や企業データセットの非公開フラグ(例:D)を、生の数値や誤ったゼロではなく、公表されている意味に置き換えて提示します - エラー時の復旧ヒント — 曖昧な地域名には候補リストを含め、API キーがない場合のエラーには登録 URL を含めます
はじめに
公開ホストインスタンス
公開インスタンスは https://census.caseyjhand.com/mcp で利用できます。インストールは不要です。Streamable HTTP を提供し、クライアントごとに設定形式が異なります。
Claude Code の場合:
claude mcp add --transport http census-mcp-server https://census.caseyjhand.com/mcp
Cline の場合(cline_mcp_settings.json):
{
"mcpServers": {
"census-mcp-server": {
"type": "streamableHttp",
"url": "https://census.caseyjhand.com/mcp"
}
}
}
Cursor の場合(mcp.json):
{
"mcpServers": {
"census-mcp-server": {
"url": "https://census.caseyjhand.com/mcp"
}
}
}
Claude Desktop では、「設定」→「コネクタ」からリモートサーバーを追加します。
セルフホスト/ローカル
API キー: api.census.gov/data/key_signup.html で無料のキーを登録してください。変数検索と地域の解決はキーなしで利用できますが、データクエリ(
census_query_data、census_compare_geographies)にはキーが必要です。
以下を MCP クライアントの設定ファイルに追加してください:
{
"mcpServers": {
"census-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/census-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"CENSUS_API_KEY": "your-census-api-key"
}
}
}
}
または、npx を使用します(Bun は不要です):
{
"mcpServers": {
"census-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/census-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"CENSUS_API_KEY": "your-census-api-key"
}
}
}
}
または、Docker を使用します:
{
"mcpServers": {
"census-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"-e", "CENSUS_API_KEY=your-census-api-key",
"ghcr.io/cyanheads/census-mcp-server:latest"
]
}
}
}
Streamable HTTP の場合は、トランスポートを設定してサーバーを起動します:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 CENSUS_API_KEY=... bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
- Bun v1.4.0 以降(または Node.js v24 以降)。
- Census API キー — api.census.gov/data/key_signup.html で無料登録できます。
census_query_dataとcensus_compare_geographiesに必要です。他のツールはキーなしで利用できます。
インストール
- リポジトリをクローンします:
git clone https://github.com/cyanheads/census-mcp-server.git
- ディレクトリに移動します:
cd census-mcp-server
- 依存関係をインストールします:
bun install
- 環境を設定します:
cp .env.example .env
# edit .env and set CENSUS_API_KEY
設定
| 変数 | 説明 | デフォルト |
|---|---|---|
CENSUS_API_KEY | データクエリに必須です。 api.census.gov/data/key_signup.html で無料登録できます。 | — |
CENSUS_DEFAULT_YEAR | 年が指定されていない場合のデフォルトのビンテージ年です。 | 2024 |
CENSUS_VARIABLE_CACHE_TTL_HOURS | データセットと年ごとの variables.json をメモリにキャッシュする時間数です。 | 24 |
MCP_TRANSPORT_TYPE | トランスポート:stdio または http。 | stdio |
MCP_SESSION_MODE | HTTP セッションモード:stateful、stateless、または auto。 | stateless |
MCP_HTTP_PORT | HTTP サーバーのポートです。 | 3010 |
MCP_AUTH_MODE | 認証モード:none、jwt、または oauth。 | none |
MCP_LOG_LEVEL | ログレベル(debug、info、notice、warning、error)。 | info |
LOG_TOOL_FAILURE_PAYLOADS | 失敗したツール呼び出しごとに、引数と結果をログに記録します。キー名によるマスキングを行い、LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES(デフォルトは 16384)で上限を設定します。自由形式の値に含まれるシークレットはマスキングされません。 | false |
OTEL_ENABLED | OpenTelemetry の計装を有効にします。 | false |
オプションのオーバーライドの全一覧については、.env.example を参照してください。
サーバーの実行
ローカル開発
# One-time build
bun run rebuild
# Run the built server
bun run start:stdio
# or
bun run start:http
チェックとテストを実行します:
bun run devcheck # Lint, format, typecheck, security audit
bun run test # Vitest test suite
bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t census-mcp-server .
docker run --rm -e CENSUS_API_KEY=your-key -p 3010:3010 census-mcp-server
Dockerfile は、デフォルトで HTTP トランスポート、ステートレスセッションモードを使用し、/var/log/census-mcp-server にログを出力します。OpenTelemetry のピア依存関係はデフォルトでインストールされます。省略するには、--build-arg OTEL_ENABLED=false を指定してビルドしてください。
プロジェクト構成
| パス | 目的 |
|---|---|
src/index.ts | createApp() のエントリーポイントです。ツールを登録し、サービスを初期化します。 |
src/config/server-config.ts | Census 固有の環境変数を解析し、Zod で検証します。 |
src/mcp-server/tools/definitions/ | ツール定義(*.tool.ts)です。 |
src/services/census-api/ | Census Data API クライアントです。データクエリ、抑制コードのマッピング、再試行ロジックを扱います。 |
src/services/geography/ | 地理情報の解決を行います。TIGERweb による地名検索と、Census Geocoder による住所からトラクトへの変換を扱います。 |
src/services/variable-cache/ | TTL とキーワード検索に対応した、プロセス内の variables.json キャッシュです。 |
tests/ | src/ の構成を反映した Vitest テストです。 |
開発ガイド
開発ガイドラインとアーキテクチャ上のルールについては、CLAUDE.md を参照してください。要点は次のとおりです。
- ハンドラーは例外をスローし、フレームワークが捕捉します。ツールのロジックでは
try/catchを使いません。 - リクエスト単位のログには
ctx.log、テナント単位のストレージにはctx.stateを使用します。 - 新しいツールは
src/mcp-server/tools/definitions/index.tsのバレルを通じて登録します。 - 外部 API 呼び出しはラップします。生データを検証し、ドメイン型に正規化してから出力スキーマを返します。不足しているフィールドを捏造してはいけません。
コントリビューション
Issue を歓迎します。提出前にチェックとテストを実行してください:
bun run devcheck
bun run test
ライセンス
Apache-2.0 — 詳細は LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。