Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

ebb-ai

NPM · @EBB-AI/MCP

Runs non-urgent LLM tasks at the cleanest grid hour before a deadline, via Batch APIs when allowed.

Available components

63 Trust /100

Last scanned (2 hours ago)

Scores higher than 36% of npm servers

Category AI and Machine Learning

Trust breakdown (7 categories)

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. How we score → Why this is hard to score →

Supply Chain Security97
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 53 of 129 dependencies flagged as unhealthy (2 deprecated). View diagnostics → Partial
Provenance & Transparency16
Schema Quality & AI Usability67
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 2732 tokens (~273/item across 10 items; 10 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management3
  • Stability observed for 1 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 10 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 10 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 17 Oct 26 +1

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

  • 16 Oct 26 62

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 17 Oct 2026 · Analysed npm/@ebb-ai/mcp@0.17.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem npm

Background: How many MCP packages publish verified provenance →

Dependencies 129 packages
Packages resolved 129
Deprecated 2
Stale 51
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 10 exposed · ~2,732 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
cancel_all ~83

Bulk-cancel every task in the queue that is still cancellable (status queued or scheduled). Running/completed/failed/cancelled tasks are left untouched. Optionally filter by status. Returns the number of tasks cancelled.

NameTypeReqDescription
statusstring–Optional. If set, cancel only tasks in this status. Valid: 'queued', 'scheduled'. Defaults to both.

No output schema declared.

No examples provided.

cancel_task ~117

Cancel a queued or scheduled task. Idempotent — if the task is already completed/failed/cancelled this returns the existing status without error. Throws only if task_id is unknown. Cancelling one occurrence of a repeating task skips it and queues the next one; pass series=true to end the series.

NameTypeReqDescription
seriesboolean–If true and the task repeats, also end its series: no further occurrence is queued. Default false (skip only this occurrence).
task_idstringyesThe id of the task to cancel.

No output schema declared.

No examples provided.

check_queue_status ~117

Report on the ebb-ai task queue. With no arguments, returns a summary of all known tasks (including tasks persisted by previous sessions — the queue survives host restarts). With task_id, returns full detail for one task, including its title, prompt, result and any carbon receipt (estimated vs actual grams, grid_source, energy_source); viewing a completed or failed task marks it read. Never changes a task's status.

NameTypeReqDescription
task_idstring–If present, return only this task. If omitted, return a queue summary.

No output schema declared.

No examples provided.

expedite_task ~93

Dispatch a queued or scheduled provider-call task immediately, bypassing the scheduler's chosen carbon window. The resulting receipt records intensitySource='expedited'. Only provider-call tasks still queued/scheduled can be expedited; running, submitted (awaiting Batch API results), or terminal (completed/failed/cancelled) tasks are rejected with an explanatory error.

NameTypeReqDescription
task_idstringyesThe id of the task to dispatch now.

No output schema declared.

No examples provided.

get_grid_forecast ~163

Return the projected electricity-grid carbon intensity for a region, hour by hour. Use this when deciding whether to run an expensive AI task now or defer it — intensity is reported in grams CO2-equivalent per kWh with a categorical band (very_clean / clean / average / dirty / very_dirty). Read-only; does not touch the task queue.

NameTypeReqDescription
hoursinteger–Forecast horizon in hours (1-72). Defaults to 24.
regionstringyesElectricity Maps grid zone code (e.g. 'US-CAL-CISO', 'US-TEX-ERCO', 'GB', 'FR', 'DE'). On hosts that allow omitting it, defaults to the configured region, else a host-timezone guess, else GB.

No output schema declared.

No examples provided.

recommend_window ~498

Return the optimal carbon-aware execution window for a task WITHOUT scheduling it. Use this for non-committal planning — to see when the cleanest grid moment falls inside the deadline (and the savings vs running now) before deciding whether to commit via schedule_task. Returns the chosen window, top alternatives, a batch_eligible flag, the grid_source (which feed produced the forecast — 'mock' means synthetic data), and a one-line reasoning string. Read-only; does not touch the task queue.

NameTypeReqDescription
candidatesarray–Optional cross-provider routing candidates: 'provider:model' strings (e.g. ['anthropic:claude-haiku-4-5','openai:gpt-6-luna','ollama:llama-3-1-8b']) the caller EXPLICITLY allows. With >= 2 entries th…
carbon_budget_gnumber–Optional hard cap on estimated grams CO2-equivalent for this task. Windows above the cap are dropped before the cleanest is chosen; if none inside the deadline meets the cap the task fails rather tha…
deadlinestringyesISO-8601 timestamp (e.g. '2026-05-13T08:00:00-04:00') by which the task must have completed. Must be in the future. Required.
modelstring–Optional vendor model name (e.g. 'claude-sonnet-5'). Affects the reasoning string only.
regionstringyesElectricity Maps grid zone code (e.g. 'US-CAL-CISO', 'FR') the recommendation reasons over. On hosts that allow omitting it, defaults to the configured region, else a host-timezone guess, else GB.
route_weightsobject–Optional routing weights {carbon, cost, latency}, non-negative and normalized internally. Default {carbon:0.6, cost:0.3, latency:0.1}. Only used when 'candidates' has >= 2 entries.

No output schema declared.

No examples provided.

reply_task ~141

Continue a completed task's conversation: creates a NEW task that sends the earlier prompt, the model's reply and this text to the same provider and model, and runs at the next clean window before its deadline (default one hour). Costs one provider call. Only completed tasks accept a reply; failed or cancelled tasks are rejected. Returns the new task id and its scheduled time.

NameTypeReqDescription
deadlinestring–Optional ISO-8601 deadline for the reply. Defaults to one hour from now.
task_idstringyesThe id of the completed task to reply to.
textstringyesThe follow-up message (1 to 32000 characters).

No output schema declared.

No examples provided.

retry_task ~73

Re-dispatch a failed provider-call task. Only valid when the task's current status is 'failed' — queued/scheduled/running/submitted/completed tasks are rejected with an explanatory error. The new run's receipt overwrites the old.

NameTypeReqDescription
task_idstringyesThe id of the failed task to retry.

No output schema declared.

No examples provided.

schedule_task ~1,354

Queue an AI task to run during off-peak hours inside the given deadline. Three parallel wins: (1) lighter on the electricity grid — deferring non-urgent tasks smooths projected AI compute demand; (2) 50% of sync list price (projected) — auto-routes through Anthropic/OpenAI Batch APIs when the deadline allows; (3) lower carbon — dispatch at the cleanest electricity-grid hour. Invoke this tool whenever the user phrases a request with deferral language: "do this later", "by tomorrow", "tonight", "overnight", "by EOD", "sometime this week", "when you have a moment", "remind me to", "queue this up", "schedule this", "no rush", "not urgent". Convert the user's wording to an ISO-8601 deadline and pass the task as the prompt. Returns a task_id you can later check with check_queue_status. Good fits: nightly digests, batch summaries, research sweeps, evaluator runs, multi-step report generation — anything the user is fine waiting on. Do NOT use for live chat, interactive code edits, or any task the user is actively waiting to see complete.

NameTypeReqDescription
candidatesarray–Optional cross-provider routing candidates: 'provider:model' strings (e.g. ['anthropic:claude-haiku-4-5','openai:gpt-6-luna','ollama:llama-3-1-8b']) the caller EXPLICITLY allows. With >= 2 entries th…
carbon_budget_gnumber–Optional hard cap on estimated grams CO2-equivalent for this task. Windows above the cap are dropped before the cleanest is chosen; if none inside the deadline meets the cap the task fails rather tha…
deadlinestring–ISO-8601 timestamp (e.g. '2026-05-13T08:00:00-04:00') by which the task must have completed. Must be in the future. Required unless deadline_kind is 'quota_reset', in which case it is ignored.
deadline_kindstring–How the deadline is chosen. 'absolute' (default): use 'deadline'. 'quota_reset': run before the next weekly subscription-quota reset, minus a safety margin, as configured in ~/.ebb-ai/config (EBB_QUO…
dispatchboolean–If true (default), persist a provider_call task body that `ebb tick` (CLI) or scheduler.tick (library) can dispatch. Set to false only to enqueue a placeholder prompt without a dispatchable body (leg…
dry_runboolean–If true, return the planned dispatch (recommended window + carbon estimate) WITHOUT persisting anything. Useful for confirmation flows.
modelstring–Model to dispatch with (e.g. 'claude-sonnet-5' for Anthropic, 'gpt-6-sol' for OpenAI). Defaults per provider: anthropic 'claude-sonnet-5' (EBB_DEFAULT_MODEL overrides it), openai 'gpt-6-sol', gemini…
origin_session_idstring–Claude Code session id of the conversation that queued the task, so the task detail can show `claude --resume <id>`. Pass it only when the host substitutes it (e.g. ${CLAUDE_SESSION_ID} in a slash co…
output_pathstring–Optional absolute file path. When the task completes, ebb-ai writes { taskId, result, receipt } as JSON to this path.
promptstringyesThe prompt or task description to dispatch when the chosen window arrives.
providerstring–Which provider to dispatch this task through: 'anthropic', 'openai', 'gemini', or 'ollama' (local). Defaults to 'anthropic'. 'anthropic' and 'openai' can auto-route through a 50%-cheaper Batch API wh…
quota_providerstring–Quota label for deadline_kind 'quota_reset' (e.g. 'claude', 'codex'). Optional when exactly one label is configured.
redact_in_receiptarray–Optional regex patterns to strip from the prompt before storing it on the receipt. Omit to use the default redaction of API-key-looking strings.
regionstring–Grid-region override (Electricity Maps zone code such as 'US-CAL-CISO'). Defaults to the host's configured region, else a host-timezone guess, else GB.
repeatstring–Repeat rule. Defaults to 'none' (a one-off), also for deadline_kind 'quota_reset'; pass 'weekly' (or 'daily') to repeat. 'quota_reset' follows the weekly quota reset and needs deadline_kind 'quota_re…
route_weightsobject–Optional routing weights {carbon, cost, latency}, non-negative and normalized internally. Default {carbon:0.6, cost:0.3, latency:0.1}. Only used when 'candidates' has >= 2 entries.
titlestring–Optional short title for the task (shown in queue lists). Defaults to the first line of the prompt, cut to 80 characters. API-key-looking strings are redacted.

No output schema declared.

No examples provided.

update_deadline ~93

Re-score and reschedule a queued or scheduled task against a new deadline; the scheduler re-picks the cleanest window inside it. Throws if the task is already running or terminal, or if the new deadline is invalid or in the past.

NameTypeReqDescription
deadlinestringyesNew ISO-8601 deadline. Must be in the future.
task_idstringyesThe id of the task to reschedule.

No output schema declared.

No examples provided.

Install

How do I install the ebb-ai MCP server?

ebb-ai runs locally as an npm package, launched with npx -y @ebb-ai/mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · @ebb-ai/mcp

# add to Claude Code
claude mcp add vitalini-ebb-ai -- npx -y @ebb-ai/mcp
Common questions

What is the ebb-ai MCP server?

ebb-ai is an MCP server listed in the public MCP registry as io.github.Vitalini/ebb-ai. Runs non-urgent LLM tasks at the cleanest grid hour before a deadline, via Batch APIs when allowed. This page covers its npm package (@ebb-ai/mcp).

Is the ebb-ai MCP server safe to use?

ebb-ai scores 63 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 17 October 2026. It declares no install or post-install scripts. 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 ebb-ai MCP server expose?

ebb-ai exposes 10 tools: get_grid_forecast, recommend_window, schedule_task, check_queue_status, cancel_task, and 5 more. Their descriptions and schemas cost roughly 2,732 tokens of context every time the server is loaded.

Is the ebb-ai MCP server still maintained?

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

What licence is the ebb-ai MCP server under?

ebb-ai declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.