# Portugal EV Charging MCP - Live Status & Real Prices (`teal_hang/ev-charging-portugal`) Actor

MCP server for Portugal EV charging. Agents get the cheapest charge in N driving minutes: live status + weighted €/kWh (ad-hoc and every CEME card). Not a scraper. Do not click Try for free. No dataset. Console/dataset Actor: coming (teal\_hang/ev-charging-portugal-run).

- **URL**: https://apify.com/teal\_hang/ev-charging-portugal.md
- **Developed by:** [Daniel Oiteiro](https://apify.com/teal_hang) (community)
- **Categories:**
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $50.00 / 1,000 compare prices

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

**IMPORTANT: Do not click Try for free. This Actor is an MCP server. It writes no dataset.**

### Portugal EV Charging MCP - Live Status & Real Prices

Ask a question, get an answer. Not a scraper. The Portuguese network is already loaded.

Do not click **Try for free**. Do not use the **Endpoints** tab. That URL with `?token=` is not Cursor setup.

#### Two listings, one engine

| You want | Use |
| --- | --- |
| Chat in Cursor or Claude Desktop | **This Actor.** Connect below. Do not Start. |
| Form, Start, table of rows | [Portugal EV Charging - Dataset Export](https://apify.com/teal_hang/ev-charging-portugal-run). Try for free is OK there. |

Same Portugal index. Same prices. The dataset listing is not an MCP server. Do not paste its `mcp.apify.com` snippet into Cursor. That runs the export Actor. It does not give you these tools.

#### Connect (Cursor)

1. Copy this JSON.

```json
{
  "mcpServers": {
    "voltpass-apify": {
      "url": "https://teal-hang--ev-charging-portugal.apify.actor/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_APIFY_API_TOKEN>"
      }
    }
  }
}
```

2. Open [Apify Integrations](https://console.apify.com/settings/integrations). Log in if asked. Copy your **API token**.
3. Cursor → Settings → MCPs → **New MCP Server**. Paste the JSON.
4. Replace the placeholder with the token you copied. **Delete the `<` and `>` as well.** Apify treats `Bearer <apify_api_...>` as no token and returns HTTP 401 `api-token-missing`.

```
Wrong:  "Authorization": "Bearer <apify_api_XXXX>"
Right:  "Authorization": "Bearer apify_api_XXXX"
```

5. Enable. The server must show Connected, not Disabled.
6. New chat: `Cheapest fast charge near Marquês de Pombal right now.`

First call can take ~13 s. After that, about 1 s.

Claude Desktop / Claude Code: same JSON in that client's MCP config. Same token.

#### Why this is different

Real prices, precomputed. Weighted peak/off-peak €/kWh for every charger, ad-hoc AND per-CEME card. In Portugal the price depends on which card you hold. Every row has `computed_at`.

Official live status. National feed, not crowd check-ins.

Driving minutes, not radius. "Within 15 minutes" is network time, not a circle.

Answers, not row dumps. `compare_price(lat, lon, kwh, max_minutes)` returns the top 10 cheapest ways to charge, with session € for your kWh.

#### Tools

| Tool              | What it does                                                                                          |
| ----------------- | ----------------------------------------------------------------------------------------------------- |
| `compare_price`   | Cheapest kWh within N driving minutes. Optional CEME filter. `session=true` = session € on the top 5. |
| `chargers_within` | Chargers reachable in N minutes. Cap 25 (max 50).                                                     |
| `hub_now`         | One site: full / trapped / neighbor in driving minutes (D\* 5/10/15).                                 |
| `hubs_now`        | Full hubs now. Requires `d_star` and a bound.                                                         |
| `reliability`     | Honest uptime. Default 7/30d. `full=true` = long window + confidence + blinds.                        |

#### How it works

You ask in plain language. The client calls one (or more) of the tools above. You get a sentence, not a CSV.

| You ask                           | Tool                                            |
| --------------------------------- | ----------------------------------------------- |
| Cheapest charge near here, now    | `compare_price`                                 |
| Is this cable reliable?           | `reliability` (`full=true` for the long window) |
| Which hubs are full?              | `hubs_now`                                      |
| What can I reach in N minutes?    | `chargers_within`                               |
| This site is full, where do I go? | `hub_now`                                       |
| Real session € for my kWh         | `compare_price` with `session=true`             |

Prices move. Live status moves. The block below is a real run from 26 Aug 2026 (Claude Desktop, evening, peak tariff). Do not treat the euros as today's price. Check `computed_at`.

#### Examples (verbatim, 26 Aug 2026)

**Q. Cheapest fast charge near Marquês de Pombal right now.**

Pick: Galp 50 kW in Oeiras, OER-00073-02, 9 min drive, available now, €0.172/kWh (€5.16 for 30 kWh). 96% uptime over the last 7 and 30 days, so it's a safe bet.

Two things worth knowing:

The headline price needs a Moeve card. €0.172/kWh is the Moeve App "GOW Deco" tariff. Without that CEME you'll pay ad-hoc rates, which are several times higher. If you don't have Moeve, tell me which card you use and I'll re-rank.

Nothing genuinely fast sits at Marquês itself. The chargers within a 1-minute walk/drive are Maksu 14 kW and EDP 5 kW, not fast charging. The one exception is a Maksu 64 kW bank right there, but it's €0.9014/kWh, €27 for the same 30 kWh, over five times the Galp price. Only worth it if you can't leave the area.

I skipped the technically-cheapest result the data returned (LSB-00976-03, same €0.172, 6 min): it's currently out of order and has been up only ~20% of the time. The other 50 kW option, OER-00069-01 at 8 min, is available but sits at 72% uptime, fine as a backup, not a first choice.

One caveat on freshness: prices come from a snapshot taken around 02:00 today, and I've priced this at peak rate (Lisbon weekdays 08:00 to 22:00), which is correct for 19:20 now. Live availability is current as of a minute ago.

Same `compare_price` via the Apify face, off-peak 27 Aug: Moeve, Galp Power OPC, €3.48, 6 min (`LSB-00808-02`).

**Q. Is OER-00073-02 reliable?**

Yes, it's one of the better-evidenced chargers in the area.

95.1% uptime over 296 days, with high data confidence: ~6,000 recorded status transitions and only 2 blinded days, so this isn't a thin sample.
Consistent across every window: 96% (7d), 98% (30d), 95% (90d and 365d). No recent degradation, no sign it's quietly dying.

Two caveats to hold alongside that.

Uptime isn't availability. It runs ~10 charges a day and this is a busy hour. The quiet windows are 02:00 to 03:00 and 09:00 to 10:00. It read as free a few minutes ago, but at 19:30 on a Wednesday you could arrive to find it occupied rather than broken. Different problem, same delay.

5% downtime is roughly 1 arrival in 20. Worth having OER-00069-01 in mind as a fallback, 8 min, same €0.172/kWh, though its own uptime is only 72%.

**Q. What hubs are busy in Lisbon tonight?**

At least 40 hubs are full right now across greater Lisbon (19:27). That's the tool's cap, so the real number is higher. But the headline is less alarming than it sounds, for two reasons.

Almost all of it is AC, not fast charging. Of everything full, only four sites have their CCS bay occupied: `EML-LSB-00398`, `EML-LSB-00394`, `REP-LSB-00444`, `GLP-LSB-00655`. Every one of those has a free DC alternative within 10 minutes. The Type 2 street posts are what's saturated. If you're after a fast charge tonight, the network is essentially open.

Most "full" hubs are single-bay. A 1-connector site reads as 100% full the moment one car plugs in, which isn't really congestion. Roughly two-thirds of the list is that, mostly Maksu street posts.

The nine genuinely stuck spots, full with no free connector within 10 minutes' drive:

| Site                      | Bays     | Notes                                             |
| ------------------------- | -------- | ------------------------------------------------- |
| `EML-LSB-00398`           | 3/3      | Type 2 trapped; CCS and CHAdeMO have alternatives |
| `EML-LSB-00394`           | 3/3      | Same pattern                                      |
| `GLP-LSB-90102`           | 2/2      | Type 2                                            |
| `GLP-LSB-90141`           | 2/2      | Type 2                                            |
| `HRZ-LSB-90093`           | 2/2      | Type 2                                            |
| `MAK-LSB-00438`, `-00439` | 1/1 each | Adjacent posts, both taken                        |
| `MAK-LSB-00750`, `-00751` | 1/1 each | Adjacent posts, both taken                        |

This is a live snapshot, not a forecast. Occupancy turns over on the order of an hour or two. Without a lat/lon, `hubs_now` is country-wide, not "Lisbon only".

**Q. Chargers I can reach in 8 minutes from Oriente?**

Oriente is far better served than Marquês, over 50 chargers within 8 minutes (that's the tool's cap, so more exist). Most are 14 kW AC street posts around €0.28 to 0.36/kWh. The fast options are what's worth picking through.

Best pick: `LSB-00344-03`, Galp 43 kW, 7 min, available now, €0.182/kWh (€5.46 for 30 kWh). 96% uptime over both 7 and 30 days, and a decent sample behind it (~3 charges/day, 60 status transitions). Needs a Galp Electric Casa tariff.

Cheapest, if you have Moeve: `LRS-00143-02`, 50 kW, 8 min, available, €0.172/kWh (€5.16). Only €0.30 less for the whole session, though, and I'd trust it slightly less: 95% uptime but just 23 status changes in 7 days, so that number rests on a thin sample.

Skip these, despite how they look in a raw list:

- `LSB-00640-02`, 115 kW, 1 minute away. The fastest charger anywhere near you, and it's dead: 0% uptime over 7 and 30 days, one status change in 8 days. Its live status reads "unknown". Don't drive to it.
- `LSB-00030-02` (50 kW, 4 min, €0.172) is occupied right now, and `LSB-00979-01` (50 kW, 8 min) is out of order.
- `LSB-00713-01` (76 kW, 2 min) is occupied and €0.5366/kWh, triple the Galp price.
- Atlante `LSB-00651-01` (38 kW, 2 min) is €0.98/kWh. Emergencies only.

Prices from a ~02:00 snapshot, priced at peak rate (correct for 19:30 Wednesday). Availability live as of a minute ago.

**Q. If OER-00073-02 is full, where do I go?**

Good news first: it isn't full. The whole site is empty. `GLP-OER-00073` reads 0 of 3 connectors occupied as of a minute ago. All three are free: your CCS 50 kW, plus a CHAdeMO 50 kW and a Type 2 43 kW.

If you arrive and it is taken:

`GLP-OER-00274`, 1 minute away, 90 kW, not full. That's your fallback, and it's actually faster than the original pick. One caveat: I don't have its pricing, and it didn't surface in the cheapest-ten ranking earlier, which suggests it costs more than €0.172/kWh. Fine as a fallback, not as a first choice.

Or just wait. Typical dwell at this site is ~35 minutes (from 75 recorded sessions), so worst case you're queuing a little over half an hour, usually less, since you'd be arriving mid-session.

The other two connectors at the same site are CHAdeMO and Type 2, so they're only useful if your car takes those rather than CCS. The nearest Type 2 alternative, `GRN-OER-00159`, is currently full anyway.

**Q. Cheapest 40 kWh on an EDP card within 10 min of Saldanha?** (this run also did session €)

On an EDP card there's no cheapest to hunt for. Every option within 10 minutes prices identically at €0.188/kWh on the EDP Casa + UVE tariff. So the decision is entirely about speed and reliability.

Real cost for 40 kWh: €12.63, not €7.52. The per-kWh math (0.188 × 40) understates it by two-thirds once operator session fees are added. Worth knowing before you're surprised at the terminal.

Go to `OER-00073-02`, 50 kW, 9 min, available now. €12.63, about 46 minutes. Same charger from earlier: 95% uptime over 296 days, high confidence. Still the soundest bet within reach.

The closer alternative, `OER-00069-01` (50 kW, 7 min, available), costs exactly the same and saves two minutes of driving, but runs at 72% uptime. Your call whether two minutes is worth a 1-in-4 chance of a wasted trip.

Two traps in the ranked results:

- `LSB-00976-03` came back top again, 1 minute away, same price. It's out of order and has ~20% uptime. The ranking is sorting on price alone, and price is flat here, so proximity floats a dead charger to the top.
- `LSB-00979-01` (50 kW, 8 min) currently reads "available", and it flipped from "out of order" three minutes ago. Its record explains why: 22% uptime over the last 7, 30 and 90 days, 45% lifetime, with 3,255 status changes in 87 days. It flickers rather than works. Avoid regardless of what its live status says.

The 22 kW AC posts on this list are both more expensive (€13.10) and vastly slower, 3.6 hours versus 46 minutes. On an EDP card, AC has no price advantage at all here.

**Q. Give me the long-window reliability for LSB-00640-02, including confidence and blinds.**

| Metric               | Value         |
| -------------------- | ------------- |
| Lifetime uptime      | 77.6%         |
| 365-day              | 44.1%         |
| 90-day               | 44.1%         |
| 30-day               | 43.6%         |
| 7-day                | null, no data |
| Data confidence      | high          |
| Sample days          | 213           |
| Weighted transitions | 6,268         |
| Blinded days         | 0             |

The cheap 7/30d query returned 0% uptime with 1 status change in 8 days. The long window shows 6,268 status transitions over 213 days, high confidence, zero blinded days.

The full window reports 7-day uptime as null (no usable data, not zero). The cheap path rendered that same absence as 0.0%. "We watched and it was down" versus "it stopped reporting." The 30-day figures diverge too (0% cheap, 43.6% full).

What holds: roughly 44% uptime across 30, 90 and 365 days. The 77.6% lifetime figure is the earlier, healthier period dragging the average up. Don't plan a 115 kW charge around it. Worth a look if you happen to be passing.

**Q. Fast DC only near Cascais?**

Cascais has real DC, and one option clearly wins.

Go to `CSC-00339-02`, WOWPLUG 96 kW, 2 min, available now. It's both the fastest and the most reliable thing in the area: 99.6% uptime over 7 days, 98.8% over 30, 90 and 365 days, high confidence across 118 sample days. (Its 75.4% lifetime figure reflects a rough early period. The whole of the past year is 98.8%.) At €0.3734/kWh that's roughly €14.94 for 40 kWh. Its twin `CSC-00339-01` is occupied.

Cheapest DC, if you can wait: `CSC-00417-02`, Galp 50 kW, 5 min, €0.188/kWh on an EDP card. Occupied right now. Half the per-kWh rate of the WOWPLUG, though expect operator fees to push the real total well above the €7.52 the energy math suggests.

Other DC within about 3 minutes, all currently available:

| Charger                    | Power | Drive | €/kWh                 |
| -------------------------- | ----- | ----- | --------------------- |
| `CSC-00427-01/02` Galp     | 76 kW | 2 min | 0.772                 |
| `CSC-00516-01/02` Galp     | 57 kW | 3 min | 0.787                 |
| `CSC-00070-01/02` Repsol   | 32 kW | 2 min | 0.457                 |
| `PT-REP-E17607-2/3` Repsol | 32 kW | 3 min | not listed            |
| `CSC-00027-01/02` EDP      | 32 kW | 2 min | 0.610, status unknown |

The charger listing caps at 50 results and filled up at just 3 minutes out. Cascais is dense with 14 kW AC posts. The 50 kW Galp units surfaced through `compare_price`. There is no `min_kw` filter on `chargers_within`.

#### Pricing

| Event                                             | USD   |
| ------------------------------------------------- | ----- |
| Lookup (`chargers_within`, `hub_now`, `hubs_now`) | $0.01 |
| `reliability`                                     | $0.02 |
| `compare_price`                                   | $0.05 |
| `compare_price` + session                         | $0.10 |

$0.05 for `compare_price` replaces ~50 priced fetches. You pay per MCP `tools/call`, not per row.

#### What this is not

Not a Console scraper. Not global. Not a route planner. Portugal only, done properly.

# Actor input Schema

## Actor input object example

```json
{}
```

# Actor output Schema

## `mcp` (type: `string`):

Streamable HTTP. Authorization: Bearer \<APIFY\_TOKEN>.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("teal_hang/ev-charging-portugal").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("teal_hang/ev-charging-portugal").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call teal_hang/ev-charging-portugal --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,teal_hang/ev-charging-portugal"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/xG4egO25ojQg3SAyS/builds/R2olr9AT0aIxDcZUa/openapi.json
