openchargemap-mcp-server について
EV ドライバーや旅行計画者向けの MCP サーバーで、Open Charge Map の充電スポット検索、詳細確認、コミュニティ報告による信頼性の確認ができます。座標検索に加え、参照データの解決と信頼性情報を提供します。
主な機能
- 01座標、エリア、コネクター、ネットワークで検索
- 02詳細なステーション記録と利用条件の取得
- 03フィルター名を参照 ID にオフラインで変換
- 04利用報告と信頼性指標の確認
活用シーン
- 01場所の近くで対応する充電器を探す
- 02出発前に利用条件と施設情報を確認する
- 03登録状況と最近のコミュニティ報告を照合する
MCP 対応
MCP ツールとしてステーション検索、記録取得、参照データ解決、コミュニティコメントを公開し、ステーションリソースも提供します。STDIO と Streamable HTTP に対応します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://openchargemap.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-openchargemap https://openchargemap.caseyjhand.com/mcp{"mcpServers":{"cyanheads-openchargemap":{"type":"http","url":"https://openchargemap.caseyjhand.com/mcp"}}}Cursor で開く{"servers":{"cyanheads-openchargemap":{"type":"http","url":"https://openchargemap.caseyjhand.com/mcp"}}}VS Code で開く{"mcpServers":{"cyanheads-openchargemap":{"type":"http","url":"https://openchargemap.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-openchargemap":{"serverUrl":"https://openchargemap.caseyjhand.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
4| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| offset | integer | いいえ | 切り詰められた結果の続きを取得する際に、返却ページの前にスキップする該当ステーション数です。前回の呼び出しで報告された nextOffset を指定して同じ検索を繰り返してください。1 回の検索で取得できるステーションは最大 500 件のため、結果を返せる最も大きなオフセットは 499 です。それ以降のステーションを取得するには、範囲を狭めるかフィルターを追加してください。距離順で並び順は安定していますが、Open Charge Map は継続的に更新されるため、ページ取得の間にステーションが追加または削除されると、後続オフセットの位置がずれる場合があります。 |
| levelid | any | いいえ | 充電レベル ID(1=低 <2kW、2=中 >2kW、3=高 >40kW/急速)。配列内の条件は OR で照合されます。特定のコネクターを指定しない場合、「急速充電のみ」の大まかなフィルターとして 3 を使用してください。 |
| distance | number | いいえ | 中心点からの検索半径。単位は distanceUnit で指定します(デフォルトは km)。最大値は 500 です。人口密度の高い都市部では小さめ(5~25)にし、地方では対象範囲を広げてください。 |
| latitude | number | いいえ | 中心点の緯度(WGS84 十進度)。半径検索には longitude + distance と併用します。地名は先に openstreetmap_search_places で変換してください。 |
| longitude | number | いいえ | 中心点の経度(WGS84 十進度)。半径検索には latitude + distance と併用します。 |
| maxresults | integer | いいえ | 返却するステーションの最大数。検索地点からの距離順に並びます。最大値は 200 です。 |
| minpowerkw | number | いいえ | ステーション内のいずれかの接続口における最低充電出力(kW)。DC 急速充電には約 50、高出力 DC には約 150 を指定してください。最速の接続口がこの値を下回るステーションは除外されます。 |
| operatorid | any | いいえ | 事業者/ネットワーク ID、または ID の配列(OR で照合)。openchargemap_lookup_reference でネットワーク名を検索してください(カテゴリは "operators")。例:「Tesla」、「ChargePoint」。 |
| boundingbox | object | いいえ | 中心点 + 半径検索の代わりに使用するバウンディングボックス検索です。latitude/longitude/distance とは併用できません。boundingbox と latitude または longitude を同時に送信すると、どちらかが優先されるのではなく拒否されます。 |
| boundingbox.ne_lat | number | はい | 北東角の緯度。 |
| boundingbox.ne_lng | number | はい | 北東角の経度。 |
| boundingbox.sw_lat | number | はい | 南西角の緯度。 |
| boundingbox.sw_lng | number | はい | 南西角の経度。 |
| countrycode | string | いいえ | ISO 3166-1 alpha-2 コード(例:「US」、「FR」、「GB」)で国を 1 つに限定します。全世界を検索する場合は省略してください。サーバーはデフォルトで全世界を対象とし、暗黙的に国が限定されることはありません。 |
| usagetypeid | any | いいえ | 利用/アクセス種別 ID、または配列(OR 条件で一致)。openchargemap_lookup_reference(category "usagetypes")で解決します。例:Public=1、Public-Pay At Location=5、Public-Membership Required=4。 |
| distanceUnit | enum | いいえ | distance パラメーターと返される距離値の単位。KM | Miles |
| statustypeid | any | いいえ | 登録上の稼働状況 ID、または配列(OR 条件で一致)。openchargemap_lookup_reference(category "statustypes")で解決します。注:登録状況は運営者の報告であり、古い可能性があります。dateLastVerified と openchargemap_get_station_comments を併用して実際の信頼性を判断し、確定情報として扱わないでください。 |
| minchargepoints | integer | いいえ | ステーションの充電ポイント(充電区画)の最小数。空き区画がありそうなステーションを探す場合、充電ポイントが 1 つだけの場所を除外します。 |
| connectiontypeid | any | いいえ | コネクター種別 ID、または ID の配列(OR 条件で一致)。openchargemap_lookup_reference で名称を解決します。例:CCS (Type 2)=33、CHAdeMO=2、NACS/Tesla Supercharger=27、Type 2 socket=25、Type 1/J1772=1。 |
詳細
@cyanheads/openchargemap-mcp-server
世界中のEV充電ステーションを、世界規模のOpen Charge Mapレジストリから場所とコネクターで検索できます。ステーションの詳細情報、参照IDの解決、MCP経由でのコミュニティによる信頼性チェックインに対応しています。STDIOまたはStreamable HTTP。
公開ホスト型サーバー: https://openchargemap.caseyjhand.com/mcp
概要
Open Charge Mapから、世界中のEV充電ステーションを検索できます。場所、コネクター、ネットワークで検索し、ステーションの詳細情報や、充電器が実際に使えるかどうかに関するコミュニティのチェックインを確認できます。
ツール
| ツール | 説明 |
|---|---|
openchargemap_find_stations | 地点周辺または境界ボックス内の充電ステーションを、コネクター、出力、ネットワーク、利用方法、ステータス、充電ポイントで絞り込んで検索します。座標を直接指定できます。 |
openchargemap_get_station | 数値のOCM IDで指定した1つのステーションの完全なレコードを取得します。すべての接続、運営者、アクセス規則、充電ポイント、料金、メディア、および算出された信頼性に関する注記を確認できます。 |
openchargemap_lookup_reference | コネクター、運営者、利用方法、ステータス、国の名前を、find_stationsで必要な整数のフィルターIDに解決します。バンドルされたスナップショットから提供されるため、オフラインで即座に利用できます。 |
openchargemap_get_station_comments | 1つのステーションに関するコミュニティのチェックインを、レジストリのステータスおよび最終確認日とともに取得し、レジストリの情報と実際の状況の不一致を確認できます。 |
リソース
| リソース | 説明 |
|---|---|
openchargemap://station/{id} | 数値の OCM ID で指定した、コミュニティコメントを含むステーションの全レコードです。openchargemap_get_station に対応する URI でアクセス可能なリソースです。 |
skill://openchargemap-guide/SKILL.md | 互換性とアクセシビリティに優れた充電器の推奨、信頼性を示す情報の評価、検索範囲の確認に関するガイドです。プラグイン、npm、Docker、MCPB のインストールにも同梱されています。 |
すべてのステーションデータにはツールからもアクセスできます。ステーションのデータセット(約 20 万か所、地理的な範囲で絞り込み)は一覧表示可能なリソースとして公開されておらず、参照データはリソースではなく openchargemap_lookup_reference から提供されます。
機能リファレンス
openchargemap_find_stations tool
- 半径検索(
latitude+longitude+distance、distanceUnitはKMまたはMiles、最大 500)またはboundingboxを指定します。1 回の呼び出しにつき、いずれか 1 つの方式のみ使用できます。任意でcountrycode(ISO 3166-1 alpha-2)と、フィルターconnectiontypeid、minpowerkw、operatorid、usagetypeid、levelid、statustypeid、minchargepointsを指定できます(ID フィルターには、openchargemap_lookup_referenceで解決した整数 ID を 1 つ、または OR 条件で照合する配列を指定します)。 maxresultsはページの上限を設定します(デフォルト 25、最大 200)。offsetは検索ごとに最大 500 件の候補を含む固定キャッシュプールをページ分割します。501 件目のレコードは上流に残りがあることを検出するためだけに使われます。この目印がない場合、totalCountは正確な値を示し、ある場合は下限を示します。どちらのケースかはnoticeに記載されます。- 一致する結果がない場合は、検索の再試行方法に関する案内を含む、正常な空のリストが返されます。不明な国コードは適用されず、概要と通知にその旨が記載されます。検索範囲がない場合、中心座標の片方だけが指定されている場合、または
boundingboxと座標を併用した場合はinvalid_location、認証に失敗した場合はauth_failed、上流サービスが利用できない場合はupstream_unavailableで失敗します。
openchargemap_get_station tool
- 数値の OCM
idで指定した 1 つのステーションの全レコードを返します。すべての接続口、運営事業者/ネットワーク、利用方法とアクセスルール、充電ポイント数、利用料金、データプロバイダー、メディア、dateLastVerifiedが含まれます。includeCommentsを指定すると、すべてのチェックインがページ分割されずにインラインで追加されます。コメントの多いステーションにはopenchargemap_get_station_commentsを使用してください。 reliabilityNoteは、観測可能な事実(検証からの経過期間、登録状況、稼働状態のフラグ、問題報告と肯定的なチェックインの比率)から算出される通常の文章です。特記事項がない場合は省略されます。not_found、auth_failed、またはupstream_unavailableで失敗します。
openchargemap_lookup_reference tool
category(connectiontypes、operators、usagetypes、statustypes、currenttypes、levels、countries)と、任意でタイトル、コード、別名を指定する大文字と小文字を区別しないquery("CCS"、"Tesla Supercharger"、"FR"など)を指定します。queryを省略すると、カテゴリを参照できます(limitは最大 100、デフォルト 25。offset/nextOffsetでページ分割)。- 一致した
id(複数可)、openchargemap_find_stationsのフィルターに使用するfilterParam、およびsource(liveまたはbundled)とsnapshotDateを返します。OPENCHARGEMAP_REFERENCE_REFRESHによって起動時に更新されていない場合は、バンドルされたスナップショットを使ってオフラインで応答します。一致するものがない場合は、スペルの確認やカテゴリの参照を案内する、正常な空のリストが返されます。
openchargemap_get_station_comments tool
- 数値の OCM
idで指定した 1 つのステーションのチェックインを、新しい順に返します。それぞれに評価、日付、記録された結果が含まれます。maxresultsはページの上限を設定します(デフォルト 25、最大 100)。offset/nextOffsetでページ分割できます。totalCommentsはステーションのコメント全件数を示し、reliabilityNoteの問題発生率はその全件を対象に算出されます。 - コメントとともに、登録状況、
isOperational、dateLastVerifiedを返します。comments: []はエラーではありません(報告がないことは、充電器が正常に動作する証拠にはなりません)。not_found、auth_failed、またはupstream_unavailableで失敗します。
openchargemap://station/{id} リソース
- 数値のOCM IDで指定した1つのステーションの全レコードです。コミュニティのコメントは常に含まれます。
openchargemap_get_stationに対応するURI指定可能なリソースで、600秒間キャッシュされ、一覧表示はできません。 - IDに対応するステーションが見つからない場合は、
not_foundが返されます。
特長
@cyanheads/mcp-ts-core を基盤としており、stdioおよびStreamable HTTPトランスポート、プラグイン可能な認証(none / jwt / oauth)、切り替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションのOpenTelemetryトレーシングに対応した構造化ログを備えています。
Open Charge Map固有の機能:
- OCM v3 POI API向けの型安全なクライアント。リトライとセッション単位の結果キャッシュに対応しています。
- 参照データ(コネクター、運営事業者、利用状況/ステータスの種類、国)はオフラインスナップショットとして同梱されています。名前からIDへの解決にライブの
/referencedata呼び出しは不要で、差異を防ぐため、起動時に任意で更新できます。 - 厳選されたコネクターエイリアス(
CCS、NACS/Supercharger、J1772、Type 2、CHAdeMO)により、エージェントが実際に使う名称を適切なIDに解決できます。 - ジオコーディングは意図的に委任されています。このサーバーは座標を中心に動作し、場所名の検索機能を再構築するのではなく、任意のジオコーディングMCPサーバー(例:
openstreetmapサーバーのopenstreetmap_search_places)と組み合わせて利用できます。 - ステーションは数値のOCM IDで指定します。
openchargemap_find_stationsで検索してください。OCM APIにはUUIDによる検索機能がありません。
エージェントに適した出力:
- 信頼性を主要な情報として提示します。すべてのステーションに
status、statusTypeId、isOperational、dateLastVerifiedを含め、観測可能な事実のみから導いた平易な説明のreliabilityNoteを提供します(根拠のない信頼度スコアは生成しません)。 - 欠損情報を正直に扱います。上流データで大幅に省略されるフィールドは、「欠落は不明を意味し、ゼロやfalseを意味しない」という説明を添えて任意項目にしています。サーバーがOCMから返されていないデータを捏造することはありません。
- すべての応答でOpen Charge Mapの貢献者とステーションデータプロバイダーを明記し、提供されている場合はステーションごとのプロバイダーのライセンス条件とオープンデータフラグも示します。
はじめに
公開ホストインスタンス
公開インスタンスは https://openchargemap.caseyjhand.com/mcp で利用できます。インストールは不要です。次のクライアント設定を使用し、Streamable HTTP経由で任意のMCPクライアントから接続してください。
{
"mcpServers": {
"openchargemap-mcp-server": {
"type": "streamable-http",
"url": "https://openchargemap.caseyjhand.com/mcp"
}
}
}
セルフホスト/ローカル
以下をMCPクライアントの設定ファイルに追加してください。Open Charge Map APIキーが必要です。前提条件を参照してください。
{
"mcpServers": {
"openchargemap-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/openchargemap-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"OPENCHARGEMAP_API_KEY": "your-api-key"
}
}
}
}
またはnpxを使用する場合(Bunは不要です):
{
"mcpServers": {
"openchargemap-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/openchargemap-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"OPENCHARGEMAP_API_KEY": "your-api-key"
}
}
}
}
またはDockerを使用する場合:
{
"mcpServers": {
"openchargemap-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"-e", "OPENCHARGEMAP_API_KEY=your-api-key",
"ghcr.io/cyanheads/openchargemap-mcp-server:latest"
]
}
}
}
Streamable HTTPを使用する場合は、トランスポートを設定してサーバーを起動してください。
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 OPENCHARGEMAP_API_KEY=... bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
- Bun v1.4 以降(またはNode.js v24以降)。
- Open Charge Map APIキー。無料ですぐに登録できます。openchargemap.org でアプリケーションを登録してください。すべてのリクエストの
X-API-Keyヘッダーに送信されます。未設定の場合、サーバーは起動時にただちにエラー終了します。
インストール
- リポジトリをクローンします:
git clone https://github.com/cyanheads/openchargemap-mcp-server.git
- ディレクトリに移動します:
cd openchargemap-mcp-server
- 依存関係をインストールします:
bun install
- 環境を設定します:
cp .env.example .env
# edit .env and set OPENCHARGEMAP_API_KEY
設定
すべての設定は、起動時に src/config/server-config.ts の Zod スキーマを使用して検証されます。主な環境変数は次のとおりです。
| 変数 | 説明 | デフォルト |
|---|---|---|
OPENCHARGEMAP_API_KEY | 必須。 Open Charge Map API キーです。X-API-Key ヘッダーとして送信されます。openchargemap.org から無料で登録できます。 | — |
OPENCHARGEMAP_BASE_URL | OCM API のベース URL です。プライベートミラーやテスト用に上書きできます。 | https://api.openchargemap.io/v3 |
OPENCHARGEMAP_REFERENCE_REFRESH | true の場合、起動時にライブの /referencedata エンドポイントから参照データを更新し、失敗した場合はバンドルされたスナップショットにフォールバックします。false の場合、バンドルされたスナップショットを使用して完全にオフラインで動作します。 | false |
OPENCHARGEMAP_CLAMP_LIMITS | 正の整数で指定されたページサイズが大きすぎる場合、通知とログを出力し、openchargemap.pagination.clamps カウンターを記録して、ツールの最大値(ステーションは 200、コメント/参照データは 100)に制限します。false にすると拒否されます。ゼロ、負の数、小数のサイズは常に拒否されます。 | true |
MCP_TRANSPORT_TYPE | トランスポート:stdio または http。 | stdio |
MCP_HTTP_PORT | HTTP サーバーのポートです。 | 3010 |
MCP_AUTH_MODE | 認証モード:none、jwt、または oauth。 | none |
MCP_LOG_LEVEL | ログレベル(RFC 5424)です。 | info |
LOGS_DIR | ログファイルの保存ディレクトリです(Node.js のみ)。 | <project-root>/logs |
LOG_TOOL_FAILURE_PAYLOADS | 失敗した各ツール呼び出しの引数と結果を記録します。キー名で機密情報をマスキングし、LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES(デフォルトは 16384)で上限を設定します。自由形式の値に含まれる秘密情報はマスキングされません。 | false |
STORAGE_PROVIDER_TYPE | ストレージバックエンドです。 | in-memory |
OTEL_ENABLED | OpenTelemetry instrumentation(スパン、メトリクス、完了ログ)を有効にします。 | 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, changelog sync bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t openchargemap-mcp-server .
docker run --rm -e OPENCHARGEMAP_API_KEY=your-key -p 3010:3010 openchargemap-mcp-server
Dockerfile のデフォルトは、HTTP トランスポート、ステートレスセッションモード、/var/log/openchargemap-mcp-server へのログ出力です。OpenTelemetry のピア依存関係はデフォルトでインストールされます。省略するには、--build-arg OTEL_ENABLED=false を指定してビルドしてください。
プロジェクト構成
| ディレクトリ | 用途 |
|---|---|
src/index.ts | createApp() のエントリーポイントです。ツール/リソースを登録し、サービスを初期化します。 |
src/config | サーバー固有の環境変数を解析し、Zod で検証します。 |
src/data | バンドルされた Open Charge Map の参照スナップショット(ocm-reference-data.ts)です。ID 解決に使用するオフラインのデータソースです。 |
src/mcp-server/tools | ツール定義(*.tool.ts)と、共通のステーションスキーマおよびレンダラーです。 |
src/mcp-server/resources | リソース定義(*.resource.ts)です。 |
src/services/openchargemap | OCM POI API クライアント、レスポンスの正規化、帰属表示、信頼性に関する注記のヘルパーです。 |
src/services/reference-data | 参照データサービスです。スナップショットの読み込み、検索インデックス、厳選されたエイリアス、省略可能なライブ更新を扱います。 |
tests/ | src/ に対応する単体テストと統合テストです。 |
開発ガイド
開発ガイドラインとアーキテクチャ上のルールについては、AGENTS.md(および CLAUDE.md)を参照してください。要点は次のとおりです。
- ハンドラーは例外をスローし、フレームワークが捕捉します。ツールのロジック内で
try/catchを使わないでください - リクエストスコープのログには
ctx.logを、テナントスコープのストレージにはctx.stateを使用してください - 新しいツールとリソースは
createApp()の配列に登録してください - 外部 API 呼び出しはラップし、生データを検証してからドメイン型に正規化し、出力スキーマに沿って返してください。不足しているフィールドを捏造してはいけません
帰属表示とデータライセンス
充電ステーション、コネクター、運営事業者のデータは、EV充電スポットのコミュニティ運営による世界規模の登録簿である Open Charge Map から取得しています。ライセンス条件はデータプロバイダーによって異なります。提供されている場合、ステーションのレコードには dataProviderLicense と isOpenDataLicensed が含まれます。ライセンスが明記されていない場合、ライセンスは不明です。
ステーションデータ © Open Charge Map の貢献者および各ステーションに記載されたプロバイダー(openchargemap.org)。ライセンス条件はプロバイダーによって異なります。
すべてのツールレスポンスにはこの attribution 文字列が含まれ、サーバーはセッションレベルの instructions にも同じ内容を記載します。Open Charge Map、その貢献者、および各ステーションのプロバイダーへの帰属表示を維持し、再利用する前に該当プロバイダーのライセンス条件を確認してください。このサーバー自体のコードは Apache-2.0 です(下記参照)。
貢献
Issue を歓迎します。提出前にチェックとテストを実行してください。
bun run devcheck
bun run test
ライセンス
Apache-2.0 — 詳細は LICENSE を参照してください。Open Charge Map のデータには独自のライセンスが適用されます。帰属表示とデータライセンスを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。