mcpField
O
openchargemap-mcp-server

openchargemap-mcp-server

远程服务
github.com/cyanheads地图与出行12 天前更新
代码仓库

关于 openchargemap-mcp-server

面向电动汽车驾驶者和行程规划者的 MCP 服务,可搜索 Open Charge Map 充电站、查看站点记录并读取社区可靠性反馈。它结合坐标搜索、参考数据查询和明确的可靠性信息。

主要功能

  1. 01按坐标、区域、接口和网络搜索
  2. 02获取完整站点记录及访问详情
  3. 03离线将筛选名称解析为参考 ID
  4. 04查看用户报告和可靠性指标

适用场景

  1. 01查找地点附近兼容的充电站
  2. 02出行前核对访问规则和站点详情
  3. 03对照登记状态与近期社区反馈

MCP 相关

通过 MCP 工具提供站点搜索、记录查询、参考数据解析和社区评论,并提供站点资源。支持 STDIO 和 Streamable HTTP 传输。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://openchargemap.caseyjhand.com/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

安装包
npm@cyanheads/openchargemap-mcp-server0.2.0

工具

4
参数类型必填说明
offsetinteger否返回当前页之前要跳过的匹配站点数,用于读取被截断的结果后续内容。使用上次调用报告的 nextOffset 重复相同搜索。单次搜索最多可访问 500 个站点,因此能够返回结果的最大偏移量为 499——要访问更靠后的站点,请缩小区域或添加筛选条件。结果按距离排序且顺序稳定,但 Open Charge Map 会持续更新,因此分页之间若有站点新增或删除,后续偏移量对应的结果可能会变化。
levelidany否充电等级 ID(1=低 <2kW,2=中 >2kW,3=高 >40kW/快速)。数组条件按 OR 匹配。如果不要求特定连接器,可使用 3 作为粗略的“仅快速充电”筛选条件。
distancenumber否从中心点起算的搜索半径,单位由 distanceUnit 指定(默认 km)。最大值为 500。人口稠密的城市区域建议设小一些(5-25);农村区域可扩大范围。
latitudenumber否中心点纬度(WGS84 十进制度)。与 longitude + distance 配合进行半径搜索。请先通过 openstreetmap_search_places 解析地点名称。
longitudenumber否中心点经度(WGS84 十进制度)。与 latitude + distance 配合进行半径搜索。
maxresultsinteger否要返回的最大站点数,按距搜索点的距离排序。最大值为 200。
minpowerkwnumber否站点任意连接的最低充电功率,单位为 kW。直流快充可使用约 50,高功率直流充电可使用约 150。最快连接功率低于此值的站点将被排除。
operatoridany否运营商/网络 ID,或 ID 数组(按 OR 匹配)。使用 openchargemap_lookup_reference 查询网络名称(类别为 "operators"),例如 "Tesla"、"ChargePoint"。
boundingboxobject否边界框搜索,可替代中心点 + 半径搜索。与 latitude/longitude/distance 互斥——同时发送 boundingbox 和 latitude 或 longitude 会被拒否,而不会自动选择其中一种。
boundingbox.ne_latnumber是东北角纬度。
boundingbox.ne_lngnumber是东北角经度。
boundingbox.sw_latnumber是西南角纬度。
boundingbox.sw_lngnumber是西南角经度。
countrycodestring否按 ISO 3166-1 alpha-2 代码限定为一个国家/地区(例如 "US"、"FR"、"GB")。全球搜索时省略。服务默认覆盖全球——不会隐式限定国家/地区。
usagetypeidany否使用/访问类型 ID,或数组(按 OR 匹配)。通过 openchargemap_lookup_reference(category "usagetypes")解析,例如 Public=1、Public-Pay At Location=5、Public-Membership Required=4。
distanceUnitenum否distance 参数的单位以及返回的距离值所用的单位。KM | Miles
statustypeidany否登记的运行状态 ID,或数组(按 OR 匹配)。通过 openchargemap_lookup_reference(category "statustypes")解析。注意:登记状态由运营商报告,可能已过时;请结合 dateLastVerified 和 openchargemap_get_station_comments 判断实际可靠性,不要将其视为绝对事实。
minchargepointsinteger否站点的充电点(充电车位)最少数量。需要查找可能有空闲车位的站点时,可用此项筛除只有一个充电点的位置。
connectiontypeidany否连接器类型 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。

4 个工具 • 2 个资源

Version License Docker MCP SDK npm TypeScript Bun

Install in Claude Desktop Install in Cursor Install in VS Code

Framework


概述

通过 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 标头发送该密钥;如果未设置,本服务会在启动时立即报错。
安装
  1. 克隆代码库:
git clone https://github.com/cyanheads/openchargemap-mcp-server.git
  1. 进入目录:
cd openchargemap-mcp-server
  1. 安装依赖:
bun install
  1. 配置环境:
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_URLOCM 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_PORTHTTP 服务端口。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.tscreateApp() 入口点——注册工具/资源并初始化服务。
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/openchargemapOCM 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 数据遵循其自身的许可;请参阅署名与数据许可。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。