openchargemap-mcp-server

v0.1.2 pre-1.0

Find EV charging stations worldwide by location and connector via the global Open Charge Map registry — full station detail, reference-ID resolution, and community reliability check-ins via MCP. STDIO or Streamable HTTP.

openchargemap.caseyjhand.com/mcp
claude mcp add --transport http openchargemap-mcp-server https://openchargemap.caseyjhand.com/mcp
codex mcp add openchargemap-mcp-server --url https://openchargemap.caseyjhand.com/mcp
{
  "mcpServers": {
    "openchargemap-mcp-server": {
      "url": "https://openchargemap.caseyjhand.com/mcp"
    }
  }
}
gemini mcp add --transport http openchargemap-mcp-server https://openchargemap.caseyjhand.com/mcp
{
  "mcpServers": {
    "openchargemap-mcp-server": {
      "command": "bunx",
      "args": [
        "mcp-remote",
        "https://openchargemap.caseyjhand.com/mcp"
      ]
    }
  }
}
{
  "mcpServers": {
    "openchargemap-mcp-server": {
      "type": "http",
      "url": "https://openchargemap.caseyjhand.com/mcp"
    }
  }
}
curl -X POST https://openchargemap.caseyjhand.com/mcp \
  -H "Content-Type: application/json" \
  -H "MCP-Protocol-Version: 2025-11-25" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"curl","version":"1.0.0"}}}'

Tools

4

openchargemap_find_stations

open-world

Find 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.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "openchargemap_find_stations",
    "arguments": {}
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "latitude": {
      "description": "Center latitude (WGS84 decimal degrees). Use with longitude + distance for a radius search. Resolve place names via openstreetmap_geocode first.",
      "type": "number",
      "minimum": -90,
      "maximum": 90
    },
    "longitude": {
      "description": "Center longitude (WGS84 decimal degrees). Use with latitude + distance for a radius search.",
      "type": "number",
      "minimum": -180,
      "maximum": 180
    },
    "distance": {
      "default": 25,
      "description": "Search 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.",
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 500
    },
    "distanceUnit": {
      "default": "KM",
      "description": "Unit for the distance parameter and the returned distance values.",
      "type": "string",
      "enum": [
        "KM",
        "Miles"
      ]
    },
    "boundingbox": {
      "description": "Bounding-box search as an alternative to a center+radius. Mutually exclusive with latitude/longitude/distance.",
      "type": "object",
      "properties": {
        "sw_lat": {
          "type": "number",
          "minimum": -90,
          "maximum": 90,
          "description": "South-west corner latitude."
        },
        "sw_lng": {
          "type": "number",
          "minimum": -180,
          "maximum": 180,
          "description": "South-west corner longitude."
        },
        "ne_lat": {
          "type": "number",
          "minimum": -90,
          "maximum": 90,
          "description": "North-east corner latitude."
        },
        "ne_lng": {
          "type": "number",
          "minimum": -180,
          "maximum": 180,
          "description": "North-east corner longitude."
        }
      },
      "required": [
        "sw_lat",
        "sw_lng",
        "ne_lat",
        "ne_lng"
      ],
      "additionalProperties": false
    },
    "countrycode": {
      "description": "Restrict 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.",
      "type": "string",
      "minLength": 2,
      "maxLength": 2,
      "pattern": "^[A-Za-z]{2}$"
    },
    "connectiontypeid": {
      "description": "Connector 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.",
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991,
          "description": "A single reference ID."
        },
        {
          "maxItems": 10,
          "type": "array",
          "items": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "A reference ID."
          },
          "description": "Several reference IDs, OR-matched."
        }
      ]
    },
    "minpowerkw": {
      "description": "Minimum 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.",
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 1000
    },
    "operatorid": {
      "description": "Operator/network ID, or array of IDs (OR-matched). Resolve a network name with openchargemap_lookup_reference (category \"operators\") — e.g. \"Tesla\", \"ChargePoint\".",
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991,
          "description": "A single reference ID."
        },
        {
          "maxItems": 10,
          "type": "array",
          "items": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "A reference ID."
          },
          "description": "Several reference IDs, OR-matched."
        }
      ]
    },
    "usagetypeid": {
      "description": "Usage/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.",
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991,
          "description": "A single reference ID."
        },
        {
          "maxItems": 10,
          "type": "array",
          "items": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "A reference ID."
          },
          "description": "Several reference IDs, OR-matched."
        }
      ]
    },
    "levelid": {
      "description": "Charge 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.",
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991,
          "description": "A single reference ID."
        },
        {
          "maxItems": 3,
          "type": "array",
          "items": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "A reference ID."
          },
          "description": "Several reference IDs, OR-matched."
        }
      ]
    },
    "statustypeid": {
      "description": "Registry 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.",
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991,
          "description": "A single reference ID."
        },
        {
          "maxItems": 10,
          "type": "array",
          "items": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "A reference ID."
          },
          "description": "Several reference IDs, OR-matched."
        }
      ]
    },
    "minchargepoints": {
      "description": "Minimum number of charge points (stalls) at the station. Filters out single-point locations when you need a station likely to have an open stall.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "maxresults": {
      "default": 25,
      "description": "Maximum 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.",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    }
  },
  "required": [
    "distance",
    "distanceUnit",
    "maxresults"
  ],
  "additionalProperties": false
}
view source ↗

openchargemap_get_station

open-world

Get 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.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "openchargemap_get_station",
    "arguments": {
      "id": "<id>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Numeric OCM station ID (e.g. 145452). Obtain one from openchargemap_find_stations. Note: UUID lookup is not supported by the OCM API."
    },
    "includeComments": {
      "default": false,
      "description": "Include 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.",
      "type": "boolean"
    }
  },
  "required": [
    "id",
    "includeComments"
  ],
  "additionalProperties": false
}
view source ↗

openchargemap_lookup_reference

Resolve 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.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "openchargemap_lookup_reference",
    "arguments": {
      "category": "<category>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "category": {
      "type": "string",
      "enum": [
        "connectiontypes",
        "operators",
        "usagetypes",
        "statustypes",
        "currenttypes",
        "levels",
        "countries"
      ],
      "description": "Which reference set to query. connectiontypes -> connectiontypeid; operators -> operatorid; usagetypes -> usagetypeid; statustypes -> statustypeid; currenttypes -> current type; levels -> charge level (1/2/3); countries -> ISO country."
    },
    "query": {
      "description": "Name, 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.",
      "type": "string",
      "minLength": 1
    },
    "limit": {
      "default": 25,
      "description": "Maximum entries to return when browsing or when a query matches several. Max 100.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "required": [
    "category",
    "limit"
  ],
  "additionalProperties": false
}
view source ↗

openchargemap_get_station_comments

open-world

Read 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.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "openchargemap_get_station_comments",
    "arguments": {
      "id": "<id>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Numeric OCM station ID. Get one from openchargemap_find_stations. Note: UUID lookup is not supported by the OCM API."
    },
    "maxresults": {
      "default": 25,
      "description": "Maximum comments to return (handler trims, newest first). The OCM API returns all embedded comments — this caps what the tool surfaces. Max 100.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "required": [
    "id",
    "maxresults"
  ],
  "additionalProperties": false
}
view source ↗

Resources

1

Full Open Charge Map station record by numeric OCM ID, including community comments — the resource twin of openchargemap_get_station.

uri openchargemap://station/{id} mime application/json