[Tidegap]
@tidegap/mcp
Renamed from @ebb-ai/mcp in 0.18.0. Use the host config key tidegap and npx -y @tidegap/mcp; the ebb-mcp bin and the EBB_* variables were removed in 0.19. See Renamed from Ebb AI.
MCP server that lets your agent run non-urgent LLM tasks at the cleanest grid hour before a deadline.
Add it to any MCP host. When a user says "do this tonight" or "by tomorrow", the agent calls schedule_task. Tidegap then runs the task at the lowest-carbon grid hour before the deadline, and through the provider Batch API when the deadline allows.
- 12 MCP tools (measured), among them
recommend_window, schedule_task, check_queue_status, get_grid_forecast, cancel_task, postpone_task, update_deadline.
- Live 72-hour forecast. GB needs no key; other regions use free keys (EIA, ENTSO-E, WattTime, Electricity Maps).
- One signed carbon receipt per task, stored in
~/.tidegap/queue.db.
Proof: one real GB run, 2026-09-30. Forecast peak 183 gCO2/kWh vs recommended window 88 gCO2/kWh, about 52 % lower for this run only (forecast, projected). Receipt at dispatch: 158 gCO2/kWh (measured). Host-specific configs: https://www.tidegap.com/docs#install
Run
The server speaks MCP over stdio. To wire it into an agent client:
Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json
on macOS (Linux/Windows have similar paths):
Restart Claude Desktop after editing.
Claude Code
Add tidegap to your ~/.claude/mcp.json (or workspace .claude/mcp.json):
OpenClaw
Add to ~/.openclaw/mcp.json:
Tools exposed (12, measured)
Environment variables
These variables configure this MCP server (and the tidegap CLI, which reads
the same set). They are read at the server's own entry point and injected into
@tidegap/core, which is environment-pure and reads nothing ambient itself.
OpenClaw plugin users: the @vitalini/tidegap OpenClaw plugin reads no
environment variables. Configure it through plugin config instead, under
plugins.entries.tidegap.config in your gateway config — the "Plugin config"
column below names the field that replaces each variable. OpenClaw resolves
the "${ENV_VAR}" shorthand in those fields, so you can keep exporting the
same variables and let the gateway read them on the plugin's behalf.
Grid region
The server resolves the region of each tool call in this order:
- the tool call's
region argument,
TIDEGAP_DEFAULT_REGION in the server's environment (the agent host's MCP config),
- the region setting stored on this machine:
tidegap region set <zone>, or Settings → Grid region in tidegap ui and the Mac app (key TIDEGAP_DEFAULT_REGION in ~/.tidegap/config),
- a guess from the machine's time zone,
GB.
The server reads the setting again when the file changes, so a new setting applies on the next tool call with no restart. A stored value that is not a supported zone is ignored, with one stderr warning per change. schedule_task replies carry region_source: flag | env | setting | timezone | fallback.
A region argument must be one of the 31 supported zones (any case). Another value is rejected with the closest zones and a link to request a region, for example Unknown zone UA. Closest: PL. Request a region: <link>. With TIDEGAP_ELECTRICITY_MAPS_API_KEY set, any zone passes, because Electricity Maps serves zones beyond the list; with TIDEGAP_ENTSOE_SECURITY_TOKEN set, IT passes too.
Develop
From the root of a clone of https://github.com/tidegap/tidegap: