
Openchargemap Mcp Server
- 1 repo stars
- Updated July 4, 2026
- cyanheads/openchargemap-mcp-server
Find EV charging stations, detail, and reliability check-ins via the global Open Charge Map.
About
Find EV charging stations, detail, and reliability check-ins via the global Open Charge Map. Exposes 4 MCP tools including | Tool | Description |, |. Find EV charging stations, detail, and reliability check-ins via the global Open Charge Map. <h1>@cyanheads/openchargemap-mcp-server</h1> <p><b>Find EV charging stations by location and connector, get full station detail, resolve reference IDs, and read community reliability check-ins via MCP. STDIO or Streamable HTTP.</b> Install via Claude Desktop, Cursor, or any MCP-compatible client using the server manifest from the upstream repository.
- Find EV charging stations, detail, and reliability check-ins via the global Open Charge Map.
- 4 registered MCP tools for structured agent access.
- Category: AI & LLM Tools with build/integrations journey placement.
- Compatible with Claude Desktop, Cursor, and MCP clients.
- Upstream manifest: openchargemap-mcp-server.
Openchargemap Mcp Server by the numbers
- Exposes 4 verified tools (MCP introspection)
- Data as of Jul 9, 2026 (Skillselion catalog sync)
claude mcp add --env OPENCHARGEMAP_API_KEY=YOUR_OPENCHARGEMAP_API_KEY --env OPENCHARGEMAP_BASE_URL=YOUR_OPENCHARGEMAP_BASE_URL --env OPENCHARGEMAP_REFERENCE_REFRESH=YOUR_OPENCHARGEMAP_REFERENCE_REFRESH --env MCP_LOG_LEVEL=YOUR_MCP_LOG_LEVEL openchargemap-mcp-server -- npx -y @cyanheads/openchargemap-mcp-server runAdd your badge
Show developers this MCP server is listed on Skillselion. Paste this into your README.
| repo stars | ★ 1 |
|---|---|
| Package | @cyanheads/openchargemap-mcp-server |
| Transport | STDIO, HTTP |
| Auth | Required |
| Tools | 4 |
| Last updated | July 4, 2026 |
| Repository | cyanheads/openchargemap-mcp-server ↗ |
How do I connect Openchargemap Mcp Server to my MCP client?
Find EV charging stations, detail, and reliability check-ins via the global Open Charge Map.
Who is it for?
Teams wiring Openchargemap Mcp Server into Claude, Cursor, or custom agents for ai & llm tools.
Skip if: Skip when you need a non-MCP SDK or hosted API without stdio/SSE transport.
What you get
Working Openchargemap Mcp Server MCP server with verified tool registration and client config.
By the numbers
- [object Object]
Openchargemap Mcp Server capabilities & compatibility
- Capabilities
- openchargemap mcp server mcp tool registration · openchargemap mcp server client configuration · openchargemap mcp server agent workflow integrat
- Use cases
- api development
- Runs
- Runs locally
What Openchargemap Mcp Server says it does
Find EV charging stations, detail, and reliability check-ins via the global Open Charge Map.
Tools 4
Public tool metadata - what this server can do for an agent.
openchargemap_find_stations14 paramsFind EV charging stations from the global Open Charge Map registry near a point or within a bounding box. Provide either a center (latitude + longitude + distance) or a boundingbox; optionally scope to a country with countrycode. This tool is coordinate-native and does not geocode place names — resolve a place like "Ballard, Seattle" to coordinates with openstreetmap_geocode first, then pass them here. Filter by connector type, minimum power (kW), operator/network, usage type (public/free/membership), charge level, operational status, and minimum charge points. Filter IDs are integers — resolve a connector or network name to its ID with openchargemap_lookup_reference (e.g. "CCS" -> 33). Each result includes title, address, distance from the search point, connections (type, power, count), operator, access rules, registry operational status, and the last-verified date — treat an old dateLastVerified or a non-operational status as a reliability caveat.
latitudenumberCenter latitude (WGS84 decimal degrees). Use with longitude + distance for a radius search. Resolve place names via openstreetmap_geocode first.longitudenumberCenter longitude (WGS84 decimal degrees). Use with latitude + distance for a radius search.distancenumberSearch radius from the center point, in the unit given by distanceUnit (default km). Max 500. Keep small (5-25) for dense urban areas; widen for rural coverage.distanceUnitstringUnit for the distance parameter and the returned distance values.boundingboxobjectBounding-box search as an alternative to a center+radius. Mutually exclusive with latitude/longitude/distance.countrycodestringRestrict to one country by ISO 3166-1 alpha-2 code (e.g. "US", "FR", "GB"). Omit for a global search. The server is global by default — there is no implicit country.connectiontypeidConnector type ID, or an array of IDs (OR-matched). Resolve names with openchargemap_lookup_reference — e.g. CCS (Type 2)=33, CHAdeMO=2, NACS/Tesla Supercharger=27, Type 2 socket=25, Type 1/J1772=1.minpowerkwnumberMinimum charging power in kW across any connection at the station. Use ~50 for DC fast charging, ~150 for high-power DC. Stations whose fastest connection is below this are excluded.operatoridOperator/network ID, or array of IDs (OR-matched). Resolve a network name with openchargemap_lookup_reference (category "operators") — e.g. "Tesla", "ChargePoint".usagetypeidUsage/access type ID, or array (OR-matched). Resolve via openchargemap_lookup_reference (category "usagetypes") — e.g. Public=1, Public-Pay At Location=5, Public-Membership Required=4.levelidCharge level ID (1=Low <2kW, 2=Medium >2kW, 3=High >40kW/fast). Array OR-matched. Use 3 as a coarse "fast charging only" filter when a specific connector is not required.statustypeidRegistry operational-status ID, or array (OR-matched). Resolve via openchargemap_lookup_reference (category "statustypes"). NOTE: registry status is operator-reported and can be stale — combine with dateLastVerified and openchargemap_get_station_comments to judge real-world reliability, do not treat it as ground truth.minchargepointsintegerMinimum number of charge points (stalls) at the station. Filters out single-point locations when you need a station likely to have an open stall.maxresultsintegerMaximum stations to return, ordered by distance from the search point. Max 200. Larger values cost more payload and upstream load — prefer tightening filters over raising this.
openchargemap_get_station2 paramsGet the full record for one Open Charge Map station by its numeric OCM ID. Returns every connection (type, level, power, current, quantity, per-connection status), the operator and network, usage and access restrictions (pay-at-location, membership, access key), the number of charge points, general comments, usage cost, the data provider, media, and verification recency. Set includeComments to also return community check-ins inline. Obtain an ID from openchargemap_find_stations.
idintegerrequiredNumeric OCM station ID (e.g. 145452). Obtain one from openchargemap_find_stations. Note: UUID lookup is not supported by the OCM API.includeCommentsbooleanInclude community check-ins and comments inline in the response. Adds payload but gives the real-world reliability signal alongside the registry status. For comments alone, use openchargemap_get_station_comments.
openchargemap_lookup_reference3 paramsResolve Open Charge Map reference data to the integer IDs that openchargemap_find_stations filters require. Pick a category and pass a name or code to resolve — "CCS" or "Tesla Supercharger" -> a connectiontypeid, "ChargePoint" -> an operatorid, "Public - Pay At Location" -> a usagetypeid, "France" or "FR" -> a country. Omit the query to browse the whole category. Served from a bundled snapshot — offline and instant. Use the returned id(s) in openchargemap_find_stations.
categorystringrequiredWhich reference set to query. connectiontypes -> connectiontypeid; operators -> operatorid; usagetypes -> usagetypeid; statustypes -> statustypeid; currenttypes -> current type; levels -> charge level (1/2/3); countries -> ISO country.querystringName, title, code, or alias to resolve (e.g. "CCS", "CHAdeMO", "Tesla", "Public", "France", "FR"). Case-insensitive, matches on title, formal name, and known aliases. Omit to browse the entire category.limitintegerMaximum entries to return when browsing or when a query matches several. Max 100.
openchargemap_get_station_comments2 paramsRead community check-ins and comments for one Open Charge Map station — the real-world reliability signal beyond the operator-reported registry status. Returns user comments and fault reports with ratings and dates, alongside the station's current registry status and last-verified date so you can flag mismatches like "listed operational, but the last few check-ins report a fault." Obtain a station ID from openchargemap_find_stations.
idintegerrequiredNumeric OCM station ID. Get one from openchargemap_find_stations. Note: UUID lookup is not supported by the OCM API.maxresultsintegerMaximum comments to return (handler trims, newest first). The OCM API returns all embedded comments — this caps what the tool surfaces. Max 100.
README.md
@cyanheads/openchargemap-mcp-server
Find EV charging stations by location and connector, get full station detail, resolve reference IDs, and read community reliability check-ins via MCP. STDIO or Streamable HTTP.
Public Hosted Server: https://openchargemap.caseyjhand.com/mcp
Tools
Four tools across the find-and-detail surface — search, detail, offline ID resolution, and the community reliability layer:
| Tool | Description |
|---|---|
openchargemap_find_stations |
Find charging stations near a point or within a bounding box, filtered by connector, power, network, usage, status, and charge points. Coordinate-native. |
openchargemap_get_station |
Full record for one station by numeric OCM ID — every connection, operator, access rules, charge points, cost, media, and a computed reliability note. |
openchargemap_lookup_reference |
Resolve connector/operator/usage/status/country names to the integer filter IDs find_stations needs. Served from a bundled snapshot — offline and instant. |
openchargemap_get_station_comments |
Community check-ins for one station alongside the registry status and last-verified date, so registry-vs-reality mismatch is visible. |
openchargemap_find_stations
The workhorse. Search the global registry by location, then narrow with filters.
- Radius search (
latitude+longitude+distance, inKMorMiles) orboundingbox— exactly one mode per call - Optional country scope via ISO 3166-1 alpha-2
countrycode; global by default, no implicit country - Filters: connector type, minimum power (kW), operator/network, usage type, charge level, operational status, minimum charge points — all integer IDs, single or OR-matched arrays
- Resolve a connector or network name to its filter ID with
openchargemap_lookup_referencefirst (e.g."CCS"→33) - Each result carries title, address, distance, connections (type/power/current/count), operator, access rules, registry status, and
dateLastVerified maxresultscaps the set (default 25, max 200), ordered by distance; truncation is disclosed when the cap is hit- Coordinate-native — does not geocode place names. Resolve a place like "Ballard, Seattle" to coordinates with a geocoding server (e.g. the
openstreetmapMCP server'sopenstreetmap_geocode) first, then pass them here
openchargemap_get_station
Full detail for one station by its numeric OCM ID (fetched with verbose=true).
- Every connection: type, level, power, current, amperage, voltage, quantity
- Operator and network, usage and access restrictions (pay-at-location, membership, access key), number of charge points
- General comments, usage cost, data provider, submitted media, verification recency
- Optional inline community check-ins with
includeComments - Computes a plain-prose
reliabilityNotefrom observable facts (verification age, operational flag, fault-vs-positive comment counts) — no synthetic score; omitted when status is fresh and uncontested - Obtain an ID from
openchargemap_find_stations. UUID lookup is not supported by the OCM API.
openchargemap_lookup_reference
Resolve Open Charge Map reference data to the integer IDs the find_stations filters require — served from a bundled snapshot, so it makes no network call (offline, instant).
- Categories:
connectiontypes,operators,usagetypes,statustypes,currenttypes,levels,countries - Pass a
queryto resolve a name, title, code, or alias ("CCS","Tesla Supercharger","ChargePoint","Public - Pay At Location","France","FR") — case-insensitive, matched on title, formal name, and curated connector aliases - Omit the
queryto browse the whole category (up tolimit, max 100) - Returns the matching
id(s) plus thefilterParamthey feed and the snapshot vintage (snapshotDate) - An optional startup refresh keeps the snapshot from drifting — see
OPENCHARGEMAP_REFERENCE_REFRESHbelow
openchargemap_get_station_comments
Community check-ins for one station — the honest reliability signal beyond the operator-reported registry flag.
- Returns user comments and fault reports with ratings and dates, newest first (
maxresultscaps, max 100) - Surfaces the station's registry status, operational flag, and
dateLastVerifiedalongside the comments so you can flag mismatches like "listed operational, but recent check-ins report a fault" - An empty result is not an error — a station with no check-ins returns
comments: []; absence of reports is not evidence the charger works - Backed by the POI fetch with
includecomments=true(OCM has no standalone comments endpoint) - Obtain a station ID from
openchargemap_find_stations
Resource
| Type | Name | Description |
|---|---|---|
| Resource | openchargemap://station/{id} |
Full station record (with community comments) by numeric OCM ID — the URI-addressable twin of openchargemap_get_station. |
All station data is also reachable via the tools. The station corpus (~200k locations, geo-scoped) is not exposed as a listable resource — discover stations with openchargemap_find_stations. Reference data is a resolve surface, not a stable-by-URI record, so it is served by openchargemap_lookup_reference rather than a resource.
Features
Built on @cyanheads/mcp-ts-core:
- Declarative tool and resource definitions — single file per primitive, framework handles registration and validation
- Unified error handling — handlers throw, framework catches, classifies, and formats; typed error contracts with recovery hints
- Pluggable auth:
none,jwt,oauth - Swappable storage backends:
in-memory,filesystem,Supabase,Cloudflare KV/R2/D1 - Structured logging with optional OpenTelemetry tracing
- STDIO and Streamable HTTP transports
Open Charge Map–specific:
- Type-safe client for the OCM v3 POI API with retry and session-scoped result caching
- Reference data (connectors, operators, usage/status types, countries) bundled as an offline snapshot — name→ID resolution needs no live
/referencedatacall, with an optional startup refresh to prevent drift - Curated connector aliases (
CCS,NACS/Supercharger,J1772,Type 2,CHAdeMO) so the names agents actually use resolve to the right IDs - Geocoding intentionally delegated — the server is coordinate-native and composes with any geocoding MCP server rather than rebuilding place-name lookup
Agent-friendly output:
- Reliability surfaced as first-class signal —
status,isOperational, anddateLastVerifiedon every station, plus a plain-prosereliabilityNotederived only from observable facts (no fabricated confidence score) - Honest sparsity — heavily-omitted upstream fields are optional with "absence means unknown, not zero/false" descriptions; the server never invents data OCM didn't return
- CC BY 4.0 attribution on every tool response and in the server-level instructions, per the data license
Getting started
Public Hosted Instance
A public instance is available at https://openchargemap.caseyjhand.com/mcp — no installation required. Point any MCP client at it via Streamable HTTP, with this client config:
{
"mcpServers": {
"openchargemap-mcp-server": {
"type": "streamable-http",
"url": "https://openchargemap.caseyjhand.com/mcp"
}
}
}
Local / self-hosted
Add the following to your MCP client configuration file. An Open Charge Map API key is required — see Prerequisites.
{
"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"
}
}
}
}
Or with npx (no Bun required):
{
"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"
}
}
}
}
Or with 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"
]
}
}
}
For Streamable HTTP, set the transport and start the server:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 OPENCHARGEMAP_API_KEY=... bun run start:http
# Server listens at http://localhost:3010/mcp
Prerequisites
- Bun v1.3 or higher (or Node.js v24+).
- An Open Charge Map API key — free instant signup: register an application at openchargemap.org. Sent as the
X-API-Keyheader on every request; the server fails fast at startup if it's unset.
Installation
- Clone the repository:
git clone https://github.com/cyanheads/openchargemap-mcp-server.git
- Navigate into the directory:
cd openchargemap-mcp-server
- Install dependencies:
bun install
- Configure environment:
cp .env.example .env
# edit .env and set OPENCHARGEMAP_API_KEY
Configuration
All configuration is validated at startup via Zod schemas in src/config/server-config.ts. Key environment variables:
| Variable | Description | Default |
|---|---|---|
OPENCHARGEMAP_API_KEY |
Required. Open Charge Map API key, sent as the X-API-Key header. Free signup at openchargemap.org. |
— |
OPENCHARGEMAP_BASE_URL |
OCM API base URL. Override for a private mirror or testing. | https://api.openchargemap.io/v3 |
OPENCHARGEMAP_REFERENCE_REFRESH |
When true, refresh reference data from the live /referencedata endpoint at startup, falling back to the bundled snapshot on failure. When false, stay fully offline on the bundled snapshot. |
false |
MCP_TRANSPORT_TYPE |
Transport: stdio or http. |
stdio |
MCP_HTTP_PORT |
Port for the HTTP server. | 3010 |
MCP_AUTH_MODE |
Auth mode: none, jwt, or oauth. |
none |
MCP_LOG_LEVEL |
Log level (RFC 5424). | info |
LOGS_DIR |
Directory for log files (Node.js only). | <project-root>/logs |
STORAGE_PROVIDER_TYPE |
Storage backend. | in-memory |
OTEL_ENABLED |
Enable OpenTelemetry instrumentation (spans, metrics, completion logs). | false |
See .env.example for the full list of optional overrides.
Running the server
Local development
Build and run:
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:httpRun checks and tests:
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
The Dockerfile defaults to HTTP transport, stateless session mode, and logs to /var/log/openchargemap-mcp-server. OpenTelemetry peer dependencies are installed by default — build with --build-arg OTEL_ENABLED=false to omit them.
Project structure
| Directory | Purpose |
|---|---|
src/index.ts |
createApp() entry point — registers tools/resources and inits services. |
src/config |
Server-specific environment variable parsing and validation with Zod. |
src/data |
Bundled Open Charge Map reference snapshot (ocm-reference-data.ts) — the offline source for ID resolution. |
src/mcp-server/tools |
Tool definitions (*.tool.ts) plus the shared station schema and renderers. |
src/mcp-server/resources |
Resource definitions (*.resource.ts). |
src/services/openchargemap |
OCM POI API client, response normalization, attribution, and the reliability-note helper. |
src/services/reference-data |
Reference-data service — snapshot loading, lookup indices, curated aliases, optional live refresh. |
tests/ |
Unit and integration tests mirroring src/. |
Development guide
See AGENTS.md (and CLAUDE.md) for development guidelines and architectural rules. The short version:
- Handlers throw, framework catches — no
try/catchin tool logic - Use
ctx.logfor request-scoped logging,ctx.statefor tenant-scoped storage - Register new tools and resources in the
createApp()arrays - Wrap external API calls: validate raw → normalize to domain type → return output schema; never fabricate missing fields
Attribution and data license
Charging-station, connector, and operator data is sourced from Open Charge Map, the community-maintained global registry of EV charging locations, and is licensed under CC BY 4.0.
Station data © Open Charge Map contributors, licensed under CC BY 4.0 (openchargemap.org).
Attribution is mandatory: every tool response carries this attribution string, and the server restates it in its session-level instructions. Any downstream use of the data must credit Open Charge Map and its contributors. This server's own code is Apache-2.0 (below); the license terms above apply to the data, not the software.
Contributing
Issues and pull requests are welcome. Run checks and tests before submitting:
bun run devcheck
bun run test
License
Apache-2.0 — see LICENSE for details. Open Charge Map data carries its own license; see Attribution and data license.
Recommended MCP Servers
FAQ
What does openchargemap mcp server MCP do?
Find EV charging stations, detail, and reliability check-ins via the global Open Charge Map.
When should I use openchargemap mcp server?
User asks about Openchargemap Mcp Server mcp, find ev charging stations, detail, and reliability check-ins via the g.
Is this MCP server safe to install?
Review the Security Audits panel and upstream source before connecting in production.