关于 openchargemap-mcp-server
面向电动汽车驾驶者和行程规划者的 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 重复相同搜索。单次搜索最多可访问 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。直流快充可使用约 50,高功率直流充电可使用约 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")。全球搜索时省略。服务默认覆盖全球——不会隐式限定国家/地区。 |
| 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 | 否 | 站点的充电点(充电车位)最少数量。需要查找可能有空闲车位的站点时,可用此项筛除只有一个充电点的位置。 |
| 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
通过全球 Open Charge Map 登记库,按位置和连接器查找世界各地的电动汽车充电站 — 获取完整站点详情、解析参考 ID,并通过 MCP 查看社区可靠性打卡信息。支持 STDIO 或 Streamable HTTP。
概述
通过 Open Charge Map 获取世界各地的电动汽车充电站信息。按位置、连接器和网络搜索,获取完整站点详情,并查看社区对充电器是否正常工作的打卡反馈。
工具
| 工具 | 描述 |
|---|---|
openchargemap_find_stations | 查找某个点附近或边界框内的充电站,可按连接器、功率、网络、用途、状态和充电点筛选。直接使用坐标。 |
openchargemap_get_station | 按数字 OCM ID 获取单个站点的完整记录 — 包括所有连接、运营商、访问规则、充电点、费用、媒体,以及计算得出的可靠性说明。 |
openchargemap_lookup_reference | 将连接器、运营商、用途、状态和国家名称解析为 find_stations 所需的整数筛选 ID。数据来自捆绑快照 — 无需联网,即时返回。 |
openchargemap_get_station_comments | 获取某个站点的社区打卡信息,并附上登记状态和最后验证日期,从而直观看到登记信息与实际情况是否一致。 |
资源
| 资源 | 描述 |
|---|---|
openchargemap://station/{id} | 按数字 OCM ID 查询完整站点记录(含社区评论)——是 openchargemap_get_station 的 URI 可寻址对应项。 |
skill://openchargemap-guide/SKILL.md | 有关推荐兼容且无障碍的充电桩、评估可靠性证据和检查搜索覆盖范围的指南。插件、npm、Docker 和 MCPB 安装包也包含此指南。 |
所有站点数据也可通过工具访问;站点语料库(约 20 万个位置,按地理范围限定)不作为可列出资源公开,参考数据则由 openchargemap_lookup_reference 提供,而非作为资源提供。
能力参考
openchargemap_find_stations 工具
- 半径搜索(
latitude+longitude+distance,distanceUnit为KM或Miles,最大值为 500)或boundingbox——每次调用只能使用一种模式;可选的countrycode(ISO 3166-1 alpha-2)和筛选条件connectiontypeid、minpowerkw、operatorid、usagetypeid、levelid、statustypeid、minchargepoints(ID 筛选条件接受一个整数 ID 或按 OR 匹配的数组,并通过openchargemap_lookup_reference解析) maxresults限制每页结果数(默认 25,最大 200),offset用于分页浏览每次搜索缓存的固定候选池(最多 500 条)。第 501 条记录仅用于检测上游是否还有剩余结果:没有这条标记记录时,totalCount为精确值;存在时则为下限值;notice会说明具体情况- 无匹配项时会成功返回空列表,并提供搜索恢复建议。未知国家代码不会应用,并会在摘要和提示中说明。失败时返回
invalid_location(未指定搜索区域、只提供了一个中心坐标,或在boundingbox旁提供坐标)、auth_failed或upstream_unavailable
openchargemap_get_station 工具
- 按数字 OCM
id获取单个站点的完整记录——包括每个充电接口、运营商/网络、使用和访问规则、充电点数量、使用费用、数据提供方、媒体以及dateLastVerified;includeComments会在结果中内联添加所有签到记录,不分页(评论很多的站点请使用openchargemap_get_station_comments) reliabilityNote根据可观察事实(验证时间、注册状态、运行标记、故障与正面签到)生成纯文本说明;无须提示时会省略。失败时返回not_found、auth_failed或upstream_unavailable
openchargemap_lookup_reference 工具
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 工具
- 按数字 OCM
id获取单个站点的签到记录,按时间从新到旧排列,每条记录包含评分、日期和记录的结果——maxresults限制每页结果数(默认 25,最大 100),通过offset/nextOffset分页;totalComments统计该站点的全部记录,reliabilityNote中的故障比例也基于全部记录计算 - 在评论旁返回注册状态、
isOperational和dateLastVerified;空的comments: []不代表错误(没有报告并不能证明充电桩可用);失败时返回not_found、auth_failed或upstream_unavailable
openchargemap://station/{id} 资源
- 根据数字 OCM ID 获取单个站点的完整记录,始终包含社区评论——这是
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),确保 Agent 实际使用的名称能解析为正确的 ID - 有意将地理编码交由其他服务处理——本服务以坐标为原生输入,可与任意地理编码 MCP 服务组合使用(例如
openstreetmap服务的openstreetmap_search_places),而非重新构建地点名称查询功能 - 通过
openchargemap_find_stations发现站点,并使用数字 OCM ID 定位——OCM API 不支持通过 UUID 查询
面向 Agent 的输出:
- 将可靠性作为一等信号呈现——每个站点均提供
status、statusTypeId、isOperational和dateLastVerified,另附仅根据可观察事实生成的白话说明reliabilityNote(不编造置信度评分) - 如实呈现数据稀疏性——上游经常省略的字段设为可选,并说明“缺失表示未知,而非零/否”;本服务绝不编造 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 | 将超出范围的正整数页面大小限制到工具上限(站点为 200,评论/参考数据为 100),并显示提示、记录日志和递增 openchargemap.pagination.clamps 计数器。设为 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 监测(跨度、指标、完成日志)。 | 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 调用:验证原始数据 → 规范化为领域类型 → 返回输出模式;绝不伪造缺失字段
署名与数据许可
充电站、连接器和运营商数据来自 Open Charge Map,这是一个由社区维护的全球电动汽车充电地点注册库。许可条款因数据提供方而异。站点记录在提供相关信息时会公开 dataProviderLicense 和 isOpenDataLicensed;未注明许可时,许可状态未知。
站点数据 © Open Charge Map 贡献者及各站点所列的数据提供方(openchargemap.org)。许可条款因提供方而异。
每个工具响应都会附带此 attribution 字符串,服务也会在会话级 instructions 中重申该内容。请保留对 Open Charge Map、其贡献者及各站点数据提供方的署名,并在复用数据前查阅相应提供方的许可条款。本服务自身的代码采用 Apache-2.0 许可(见下文)。
贡献
欢迎提交问题。提交前请运行检查和测试:
bun run devcheck
bun run test
许可
Apache-2.0 — 详情请参阅 LICENSE。Open Charge Map 数据遵循其自身的许可;请参阅署名与数据许可。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。