# Pumperly (oci · drumsergio/pumperly-mcp)

Cheapest fuel and EV charging near a place or along a drive, in about 40 countries

- Trust score: 43/100 (low)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- npm · `pumperly-mcp`: 48/100, [markdown](https://verifymcp.io/servers/geiserx-pumperly-mcp/pumperly-mcp.md), [page](https://verifymcp.io/servers/geiserx-pumperly-mcp/pumperly-mcp)
- oci · `drumsergio/pumperly-mcp`: 43/100 (this document), [markdown](https://verifymcp.io/servers/geiserx-pumperly-mcp/drumsergio-pumperly-mcp.md), [page](https://verifymcp.io/servers/geiserx-pumperly-mcp/drumsergio-pumperly-mcp)

## Channel facts

- Registry: `oci`
- Package: `drumsergio/pumperly-mcp`
- Version: `v0.2.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Supply Chain Security**: 0/100
  - No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.
  - Known CVEs could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.
  - Install-script risk not yet assessed.
  - Dependency health could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.
- **Provenance & Transparency**: 35/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - License check failed: no license is declared.
  - Actively maintained (last published 7 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 77/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2169 tokens (~216/item across 10 items; 6 tools + 4 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 30/100
  - Stability observed for 9 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 6 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 8 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### How do I install the Pumperly MCP server?

Pumperly runs locally as a container image, launched with docker run --rm -i -e PUMPERLY_URL drumsergio/pumperly-mcp:v0.2.1. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add geiserx-pumperly-mcp -- docker run --rm -i -e PUMPERLY_URL drumsergio/pumperly-mcp:v0.2.1
```

This image reads PUMPERLY_URL. Set it in your client's env block for this server; docker run -e passes it through to the container.

### Cursor

```json
{
  "mcpServers": {
    "geiserx-pumperly-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "PUMPERLY_URL",
        "drumsergio/pumperly-mcp:v0.2.1"
      ]
    }
  }
}
```

This image reads PUMPERLY_URL. Set it in your client's env block for this server; docker run -e passes it through to the container.

### VS Code

```json
{
  "servers": {
    "geiserx-pumperly-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "PUMPERLY_URL",
        "drumsergio/pumperly-mcp:v0.2.1"
      ]
    }
  }
}
```

This image reads PUMPERLY_URL. Set it in your client's env block for this server; docker run -e passes it through to the container.

### Codex

```bash
codex mcp add geiserx-pumperly-mcp -- docker run --rm -i -e PUMPERLY_URL drumsergio/pumperly-mcp:v0.2.1
```

This image reads PUMPERLY_URL. Set it in your client's env block for this server; docker run -e passes it through to the container.

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "geiserx-pumperly-mcp": {
      "type": "local",
      "command": [
        "docker",
        "run",
        "--rm",
        "-i",
        "-e",
        "PUMPERLY_URL",
        "drumsergio/pumperly-mcp:v0.2.1"
      ],
      "enabled": true
    }
  }
}
```

This image reads PUMPERLY_URL. Set it in your client's env block for this server; docker run -e passes it through to the container.

### Hermes

```yaml
mcp_servers:
  geiserx-pumperly-mcp:
    command: "docker"
    args: ["run", "--rm", "-i", "-e", "PUMPERLY_URL", "drumsergio/pumperly-mcp:v0.2.1"]
```

This image reads PUMPERLY_URL. Set it in your client's env block for this server; docker run -e passes it through to the container.

### Netclaw

```json
{
  "McpServers": {
    "geiserx-pumperly-mcp": {
      "Transport": "stdio",
      "Command": "docker",
      "Arguments": [
        "run",
        "--rm",
        "-i",
        "-e",
        "PUMPERLY_URL",
        "drumsergio/pumperly-mcp:v0.2.1"
      ]
    }
  }
}
```

This image reads PUMPERLY_URL. Set it in your client's env block for this server; docker run -e passes it through to the container.

### Other

```json
{
  "mcpServers": {
    "geiserx-pumperly-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "PUMPERLY_URL",
        "drumsergio/pumperly-mcp:v0.2.1"
      ]
    }
  }
}
```

This image reads PUMPERLY_URL. Set it in your client's env block for this server; docker run -e passes it through to the container.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-04 (score 43, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-02 (score 42, +1)

- [security regression] Provenance: unverified → fail

### 2026-11-01 (score 41, 0)

- [security regression] Provenance: fail → unverified

### 2026-10-31 (score 41, +1)

No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-29 (score 40, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-28 (score 39, 0)

- [security regression] Tool safety: pass → unverified
- [security regression] Stability: 0.00 → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional regression] Capabilities: pass → unverified
- [functional] Package version: v0.2.0 → v0.2.1

### 2026-10-27 (score 39, +32)

- [security regression] Provenance: unverified → fail
- [security improvement] Injection markers: unverified → pass
- [security] First check of Judged manipulation: pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] Stability: unverified → 0.00
- [functional improvement] Schema quality: unverified → 100
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Tool coverage: unverified → 100
- [functional] First check of Tool coverage: 100
- [functional] First check of Destructive annotations: pass
- [functional] First check of Schema quality: excellent
- [functional] First check of Schema quality: fail
- [functional] First check of Tool coverage: 100
- [functional] First check of Schema quality: fail
- [functional] Package version: v0.1.2 → v0.2.0

### 2026-10-26 (score 7, 0)

- [security regression] Provenance: fail → unverified

## MCP tools (6)

### `calculate_route` (~293 tokens)

Calculate a driving route

Calculate a driving route and return its distance (km), driving time (minutes) and bounding box, with up to 2 alternatives when there are no waypoints. Ends can be place names, "lat,lon" text or coordinates. To find fuel along the way, call cheapest_fuel_on_route instead: it routes and searches in one call. Set include_geometry only to pass the line to find_route_stations; it can be up to 2000 points.

Input parameters:

- `dest_lat` (number): End latitude, decimal degrees.
- `dest_lon` (number): End longitude, decimal degrees.
- `destination` (string): End as a place name ("Valencia") or "lat,lon" text. Or give dest_lat and dest_lon.
- `include_geometry` (boolean): Include each route's GeoJSON LineString ([lon, lat] points). Default false.
- `origin` (string): Start as a place name ("Madrid") or "lat,lon" text ("40.4168,-3.7038"). Or give origin_lat and origin_lon.
- `origin_lat` (number): Start latitude, decimal degrees.
- `origin_lon` (number): Start longitude, decimal degrees.
- `waypoints` (array): Optional stops in order, as [lon, lat] pairs (longitude first), at most 5. Example: [[-1.13, 40.34]].

Output parameters:

- `destination` (object)
- `origin` (object)
- `routes` (array)

### `cheapest_fuel_on_route` (~399 tokens)

Cheapest fuel along a trip

Plan a drive and find where to fill up: routes from origin to destination, then lists the stations within corridor_km of the route, cheapest first, with each one's km from the start. Ends can be place names ("Madrid", "Valencia"), "lat,lon" text or coordinates. Prices are per litre (per kg for CNG, LNG and H2, per kWh for EV) in local currency; cross-border trips mix currencies, see pumperly://exchange-rates. Uses two of the API's 30 route searches per minute.

Input parameters:

- `corridor_km` (number): How far off the route a station may be, in km, 0.5 to 50. Default 2 (a short detour).
- `dest_lat` (number): End latitude, decimal degrees.
- `dest_lon` (number): End longitude, decimal degrees.
- `destination` (string): End as a place name ("Valencia") or "lat,lon" text. Or give dest_lat and dest_lon.
- `fuel` (string, required): Fuel code. Common ones: B7 = diesel, E5 = petrol 95, E10 = petrol 95 E10, E5_98 = petrol 98, LPG = autogas, EV = charging. The pumperly://fuel-types resource lists all 16 with labels and price units.
- `limit` (integer): How many stations to return, 1 to 50. Default 10.
- `origin` (string): Start as a place name ("Madrid") or "lat,lon" text ("40.4168,-3.7038"). Or give origin_lat and origin_lon.
- `origin_lat` (number): Start latitude, decimal degrees.
- `origin_lon` (number): Start longitude, decimal degrees.
- `sort_by` (string): price (cheapest first, default) or route (in driving order).

Output parameters:

- `destination` (object)
- `distance_km` (number)
- `duration_min` (number)
- `origin` (object)
- `stations` (object)

### `find_nearest_stations` (~359 tokens)

Find nearest fuel or EV stations

Find the fuel stations or EV chargers closest to a point, with current prices. Give the point as lat and lon, or as a place name in near (geocoded for you). sort_by=distance (default) returns the nearest; sort_by=price returns the cheapest among the 50 nearest within the radius. Prices are per litre (per kg for CNG, LNG and H2, per kWh for EV) in the station's local currency. Covers about 40 countries, mostly in Europe; pumperly://stats lists them.

Input parameters:

- `fuel` (string, required): Fuel code. Common ones: B7 = diesel, E5 = petrol 95, E10 = petrol 95 E10, E5_98 = petrol 98, LPG = autogas, EV = charging. The pumperly://fuel-types resource lists all 16 with labels and price units.
- `lat` (number): Latitude of the search point in decimal degrees, e.g. 40.4168. Give with lon, or use near instead.
- `limit` (integer): How many stations to return, 1 to 50. Default 5.
- `lon` (number): Longitude of the search point in decimal degrees, e.g. -3.7038. Give with lat, or use near instead.
- `near` (string): Place name or address to search around, e.g. "Atocha, Madrid". Used when lat and lon are not given.
- `radius_km` (number): Search radius in km, 0.5 to 100. Default 10.
- `sort_by` (string): distance (nearest first, default) or price (cheapest first).

Output parameters:

- `center` (null|object)
- `found` (integer)
- `fuel` (string)
- `prices` (null|array)
- `returned` (integer)
- `sort_by` (string)
- `stations` (null|array)
- `unit` (string): What prices are per: L, kg or kWh

### `find_route_stations` (~296 tokens)

Fuel or EV stations along a route line

List the fuel stations or EV chargers within corridor_km of a route line you already have, cheapest first by default, with each station's km along the route. Most callers want cheapest_fuel_on_route, which takes place names and does the routing too. Prices are per litre (per kg for CNG, LNG and H2, per kWh for EV) in local currency. The API allows 30 route searches per minute.

Input parameters:

- `corridor_km` (number): How far from the route a station may be, in km, 0.5 to 50. Default 5.
- `fuel` (string, required): Fuel code. Common ones: B7 = diesel, E5 = petrol 95, E10 = petrol 95 E10, E5_98 = petrol 98, LPG = autogas, EV = charging. The pumperly://fuel-types resource lists all 16 with labels and price units.
- `geometry` (object, required): GeoJSON LineString of the route: {"type":"LineString","coordinates":[[lon,lat],...]}, longitude first, 2 to 2000 points. calculate_route returns one with include_geometry=true.
- `limit` (integer): How many stations to return, 1 to 50. Default 10.
- `sort_by` (string): price (cheapest first, default) or route (in driving order from the start).

Output parameters:

- `center` (null|object)
- `found` (integer)
- `fuel` (string)
- `prices` (null|array)
- `returned` (integer)
- `sort_by` (string)
- `stations` (null|array)
- `unit` (string): What prices are per: L, kg or kWh

### `geocode` (~150 tokens)

Geocode a place name

Turn a place name or address into coordinates (lat, lon), best match first. The station and route tools already accept place names, so call this only to pick between ambiguous places or to get coordinates for a bbox. Give lat and lon to prefer results near a point.

Input parameters:

- `lat` (number): Optional latitude to prefer nearby results. Give with lon.
- `limit` (integer): How many matches to return, 1 to 10. Default 5.
- `lon` (number): Optional longitude to prefer nearby results. Give with lat.
- `query` (string, required): City, address or point of interest, e.g. "Puerta del Sol, Madrid". At most 200 characters.

Output parameters:

- `query` (string)
- `results` (null|array)

### `get_stations_in_area` (~284 tokens)

Fuel or EV stations in an area

List the fuel stations or EV chargers inside a bounding box with current prices, cheapest first by default, plus the min, median and max price per currency. Use it for "cheapest diesel in this town". For a point and radius use find_nearest_stations; along a trip use cheapest_fuel_on_route. Prices are per litre (per kg for CNG, LNG and H2, per kWh for EV) in local currency. Keep the box city-sized: a whole-country box can exceed the 8 MB answer cap.

Input parameters:

- `bbox` (string, required): Bounding box as "minLon,minLat,maxLon,maxLat" in decimal degrees, longitude first. Example for central Madrid: "-3.75,40.38,-3.65,40.45".
- `fuel` (string, required): Fuel code. Common ones: B7 = diesel, E5 = petrol 95, E10 = petrol 95 E10, E5_98 = petrol 98, LPG = autogas, EV = charging. The pumperly://fuel-types resource lists all 16 with labels and price units.
- `limit` (integer): How many stations to return, 1 to 100. Default 20.
- `sort_by` (string): price (cheapest first, default) or distance (from the centre of the box).

Output parameters:

- `center` (null|object)
- `found` (integer)
- `fuel` (string)
- `prices` (null|array)
- `returned` (integer)
- `sort_by` (string)
- `stations` (null|array)
- `unit` (string): What prices are per: L, kg or kWh

## Diagnostics

Captured diagnostic sections: Provenance. The full working is on the page: https://verifymcp.io/servers/geiserx-pumperly-mcp/drumsergio-pumperly-mcp#diagnostics

## Score history

- 2026-11-05: 43
- 2026-11-04: 43
- 2026-11-03: 42
- 2026-11-02: 42
- 2026-11-01: 41
- 2026-10-31: 41
- 2026-10-30: 40
- 2026-10-29: 40
- 2026-10-28: 39
- 2026-10-27: 39
- 2026-10-26: 7
- 2026-10-25: 7
- 2026-10-24: 7
- 2026-10-23: 7
- 2026-10-22: 7
- 2026-10-21: 7
- 2026-10-20: 7
- 2026-10-19: 7
- 2026-10-18: 7
- 2026-10-17: 7
- 2026-10-16: 7
- 2026-10-15: 7
- 2026-10-14: 7
- 2026-10-13: 7
- 2026-10-12: 7
- 2026-10-10: 7
- 2026-10-09: 7
- 2026-10-07: 7

## Common questions

### What is the Pumperly MCP server?

Pumperly is an MCP server listed in the public MCP registry as io.github.GeiserX/pumperly-mcp. Cheapest fuel and EV charging near a place or along a drive, in about 40 countries. This page covers its container image (drumsergio/pumperly-mcp).

### Is the Pumperly MCP server safe to use?

Pumperly scores 43 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Pumperly MCP server expose?

Pumperly exposes 6 tools: calculate_route, cheapest_fuel_on_route, find_nearest_stations, find_route_stations, geocode, get_stations_in_area. Their descriptions and schemas cost roughly 1,781 tokens of context every time the server is loaded.

### Is the Pumperly MCP server still maintained?

Pumperly is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What did VerifyMCP test on the Pumperly MCP server?

VerifyMCP ran 12 checks on Pumperly, covering Source repository, Provenance, License, Maintenance and 8 more. 4 items could not be completed, a gap on our side rather than a finding about Pumperly: Malware scan, Known CVEs, Install scripts and Dependency health. One category scores 0 for that reason, because we only credit what we can confirm. Endpoint Security and Transport & Reachability do not apply to a container image, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- Docker Hub: https://hub.docker.com/r/drumsergio/pumperly-mcp
- Repository: https://github.com/GeiserX/pumperly-mcp
- Changelog RSS feed: https://verifymcp.io/servers/geiserx-pumperly-mcp/drumsergio-pumperly-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/geiserx-pumperly-mcp/drumsergio-pumperly-mcp/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/geiserx-pumperly-mcp/drumsergio-pumperly-mcp.json
- HTML version of this page: https://verifymcp.io/servers/geiserx-pumperly-mcp/drumsergio-pumperly-mcp
