
Security News
OpenCode User Hit with Hostile Backlash After Reporting Free AI Loophole
An OpenCode user faced harassment after reporting a free AI usage loophole, drawing a bitter backlash in a GitHub thread that has since been deleted.
@ebb-ai/mcp
Advanced tools
MCP server: run non-urgent LLM tasks at the cleanest grid hour before a deadline, via Batch APIs when allowed.
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. ebb-ai then runs the task at the lowest-carbon grid hour before the deadline, and through the provider Batch API when the deadline allows.
recommend_window, schedule_task, check_queue_status, get_grid_forecast, cancel_task, update_deadline.~/.ebb-ai/queue.db.npx -y @ebb-ai/mcp
{ "mcpServers": {
"ebb-ai": { "command": "npx", "args": ["-y", "@ebb-ai/mcp"] }
} }
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.ebb-ai.com/docs#install
npx -y @ebb-ai/mcp
The server speaks MCP over stdio. To wire it into an agent client:
Edit ~/Library/Application Support/Claude/claude_desktop_config.json
on macOS (Linux/Windows have similar paths):
{
"mcpServers": {
"ebb-ai": {
"command": "npx",
"args": ["-y", "@ebb-ai/mcp"],
"env": {
"EBB_ELECTRICITY_MAPS_API_KEY": "optional - mock data without it",
"EBB_DEFAULT_REGION": "US-CAL-CISO"
}
}
}
}
Restart Claude Desktop after editing.
Add ebb-ai to your ~/.claude/mcp.json (or workspace .claude/mcp.json):
{
"mcpServers": {
"ebb-ai": {
"command": "npx",
"args": ["-y", "@ebb-ai/mcp"]
}
}
}
Add to ~/.openclaw/mcp.json:
{
"mcpServers": {
"ebb-ai": {
"command": "npx",
"args": ["-y", "@ebb-ai/mcp"]
}
}
}
| Tool | Purpose |
|---|---|
get_grid_forecast(region, hours?) | Hour-by-hour carbon intensity for a region; useful before deciding whether to defer. |
recommend_window(deadline, region?, ...) | Plan the cleanest window inside the deadline without queueing anything. |
schedule_task(prompt, deadline, model?, region?, carbon_budget_g?, repeat?, origin_session_id?) | Queue a task to run in the cleanest window inside the deadline. Returns a task_id. repeat defaults to none, also for deadline_kind: "quota_reset". |
check_queue_status(task_id?) | Inspect the queue or one specific task; includes a carbon receipt once the task has completed. |
cancel_task(task_id, series?) | Cancel a queued or scheduled task; on a repeating task, skip it, or end the series with series: true. |
reply_task(task_id, text, deadline?) | Continue a completed task: a new task with the conversation plus this text, same provider and model. |
expedite_task(task_id) | Dispatch a queued or scheduled task now, outside its carbon window. |
update_deadline(task_id, deadline) | Reschedule a task against a new deadline. |
retry_task(task_id) | Re-dispatch a failed task. |
cancel_all(status?) | Cancel every task that is still queued or scheduled. |
These variables configure this MCP server (and the ebb CLI, which reads
the same set). They are read at the server's own entry point and injected into
@ebb-ai/core, which is environment-pure and reads nothing ambient itself.
OpenClaw plugin users: the
@vitalini/ebbOpenClaw plugin reads no environment variables. Configure it through plugin config instead, underplugins.entries.ebb.configin 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.
| Var | Plugin config | Purpose |
|---|---|---|
EBB_ELECTRICITY_MAPS_API_KEY | electricityMapsApiKey | API key from electricitymaps.com. Universal fallback. If unset (and no zone-specific feed is configured), the server falls back to deterministic mock data so you can still run the whole stack locally. |
EBB_EIA_API_KEY | eiaApiKey | Free US EIA key. Enables average-emissions intensity for the US ISO zones (CAISO / ERCOT / ISO-NE / NYISO / PJM / MISO). |
EBB_ENTSOE_SECURITY_TOKEN | entsoeSecurityToken | Free ENTSO-E token. Enables EU zone intensity (FR / DE / ES / IT / NL). |
WATTTIME_USERNAME + WATTTIME_PASSWORD | wattTimeUsername + wattTimePassword | Free WattTime v3 account. Enables marginal-emissions (co2_moer) forecasts for the US ISO zones — takes precedence over EIA where covered, falls through to EIA on any error. The marginal signal is disclosed as signalType: "marginal" on forecasts and receipts. |
EBB_DEFAULT_REGION | defaultRegion | Electricity Maps zone code, default US-CAL-CISO. |
ANTHROPIC_API_KEY | anthropicApiKey | Enables the anthropic provider (batch-capable). |
OPENAI_API_KEY | openaiApiKey | Enables the openai provider (batch-capable). |
GEMINI_API_KEY / GOOGLE_API_KEY | geminiApiKey / googleApiKey | Enables the gemini provider (Generative Language API, sync-only). GEMINI_API_KEY is preferred; GOOGLE_API_KEY is the fallback. |
OLLAMA_HOST | ollamaHost | Enables the local ollama provider (sync-only). Default http://localhost:11434; keyless — set this var to opt the provider in. |
From the root of a clone of https://github.com/Vitalini/ebb-ai:
pnpm install
pnpm --filter @ebb-ai/mcp build
node packages/mcp-server/dist/server.js
FAQs
Renamed to @tidegap/mcp. This shim starts the @tidegap/mcp server and stops receiving updates.
The npm package @ebb-ai/mcp receives a total of 0 weekly downloads. As such, @ebb-ai/mcp popularity was classified as not popular.
We found that @ebb-ai/mcp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
An OpenCode user faced harassment after reporting a free AI usage loophole, drawing a bitter backlash in a GitHub thread that has since been deleted.

Threat Research
/Security News
319 browser extensions installed by 13.4 million users hijack searches, capture queries, and collect referral payments from Yahoo and Bing.

Threat Research
Malicious Firefox extensions mimic Phantom, Jupiter, and Bitget wallets to steal recovery phrases and private keys, with one fetching its payload remotely.