# Tidegap (npm · @tidegap/mcp)

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

- Trust score: 88/100 (high trust)
- Change this week: +7
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-06

## Components

- npm · `@tidegap/mcp`: 88/100 (this document), [markdown](https://verifymcp.io/servers/tidegap-tidegap/tidegap-mcp.md), [page](https://verifymcp.io/servers/tidegap-tidegap/tidegap-mcp)

## Channel facts

- Registry: `npm`
- Package: `@tidegap/mcp`
- Version: `0.20.0`
- 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-06.

- **Supply Chain Security**: 98/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 51 of 130 dependencies flagged as unhealthy (1 deprecated).
- **Provenance & Transparency**: 100/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to tidegap/tidegap).
  - Clear OSI-approved license (Apache-2.0).
  - Actively maintained (last published 3 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 61/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 6107 tokens (~508/item across 12 items; 12 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 70/100
  - Stability observed for 21 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.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 13 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

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

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

### Claude

```bash
claude mcp add tidegap-tidegap -- npx -y @tidegap/mcp
```

### Cursor

```json
{
  "mcpServers": {
    "tidegap-tidegap": {
      "command": "npx",
      "args": [
        "-y",
        "@tidegap/mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "tidegap-tidegap": {
      "command": "npx",
      "args": [
        "-y",
        "@tidegap/mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add tidegap-tidegap -- npx -y @tidegap/mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "tidegap-tidegap": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@tidegap/mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add tidegap-tidegap --command npx --arg -y --arg @tidegap/mcp
```

### Hermes

```yaml
mcp_servers:
  tidegap-tidegap:
    command: "npx"
    args: ["-y", "@tidegap/mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "tidegap-tidegap": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "@tidegap/mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add tidegap-tidegap -t stdio -c npx -a -y @tidegap/mcp
```

### Other

```json
{
  "mcpServers": {
    "tidegap-tidegap": {
      "command": "npx",
      "args": [
        "-y",
        "@tidegap/mcp"
      ]
    }
  }
}
```

## 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-06 (score 88, +5)

- [security improvement] Source repository: unverified → pass

### 2026-11-05 (score 83, −4)

- [security regression] Provenance: pass → unverified

### 2026-11-03 (score 87, +5)

- [security improvement] CVE-2023-54404 no longer affects this package
- [security improvement] Known CVEs: fail → pass
- [functional regression] Schema quality: 274 → 508
- [functional] Destructive annotations: pass → 100
- [functional] Package version: 0.19.0 → 0.20.0

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

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

### 2026-10-30 (score 81, +1)

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

### 2026-10-28 (score 80, +1)

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

### 2026-10-26 (score 79, +1)

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

### 2026-10-24 (score 78, −5)

- [security regression] CVE-2023-54404 affects this package: high
- [security regression] Known CVEs: pass → fail

## MCP tools (12)

### `get_grid_forecast` (~286 tokens)

Return the hour-by-hour grid carbon intensity forecast for one region, up to 72 hours ahead. Use when: the user asks how clean the grid is now or later, or wants the raw curve. Do not use to pick a run time for a task (use recommend_window) or to queue work (use schedule_task). Behavior: writes nothing; reads one grid feed, no login; GB is live without a key, other zones need a feed key or get synthetic data (Source: mock). Returns: region, source, generated time, one row per hour (gCO2/kWh and band), and the cleanest and dirtiest hour. Rejects an unknown zone and lists the closest zones.

Input parameters:

- `hours` (integer): How many hours ahead to forecast, e.g. 12 to cover "tonight". Defaults to 24; 72 is the most.
- `region` (string, required): Grid zone code, e.g. 'US-CAL-CISO', 'GB' or 'DE'; take it from the user's location or the data center they name. `tidegap region list` prints the supported zones; any zone works with an Electricity M…

### `recommend_window` (~585 tokens)

Preview the cleanest run window before a task's deadline, without queuing it. Use when: the user asks when a task would run or what waiting saves. Do not use to queue the task (use schedule_task) or for the raw hourly curve (use get_grid_forecast). Behavior: writes nothing; reads the grid forecast; no login or key. Returns: scheduled_for, intensity, band, estimated_carbon_g_co2, estimated_savings_vs_now_pct, batch_eligible, grid_source (mock = synthetic), alternatives, reasoning; routing_preview with 2+ candidates. Rejects a past deadline, an unknown zone, or a carbon_budget_g no window meets.

Input parameters:

- `candidates` (array): 'provider:model' pairs the user allows, e.g. ['anthropic:claude-haiku-4-5','ollama:llama-3-1-8b']. With 2 or more, the scheduler scores each at the chosen window on carbon, cost and latency (see rout…
- `carbon_budget_g` (number): Hard cap on the task's estimated grams CO2e, e.g. 5. Windows above it are skipped; if no window before the deadline fits, the task fails instead of running on a dirty grid. Omit for no cap.
- `deadline` (string, required): When the task must be finished: ISO-8601 with a UTC offset, in the future. Convert the user's words, e.g. "by 8am tomorrow" in New York becomes '2026-05-13T08:00:00-04:00'.
- `model` (string): Model name to mention in the reasoning text, e.g. 'claude-sonnet-5'; it does not change the window. Omit to leave it out.
- `region` (string, required): Grid zone the task would run against, e.g. 'US-CAL-CISO' or 'FR'. `tidegap region list` prints the supported zones; any zone works with an Electricity Maps key. Defaults, where the host lets it be om…
- `route_weights` (object): How to rank candidates, e.g. {"carbon": 1} for carbon only. Weights are relative and normalized; a key left out counts as 0. Omit for the default {carbon: 0.6, cost: 0.3, latency: 0.1}. Ignored unles…

### `schedule_task` (~2831 tokens)

Queue an AI task or recurring job to run at the cleanest grid hour before its deadline; long deadlines may use the provider Batch API. Use when: the user defers work ("tonight", "no rush", "before my limit resets") or wants it repeated ("every night", "daily", a cron); map that to deadline or repeat. Do not use for work the user waits on (do it now), to preview only (use recommend_window or dry_run) or for limits (use tidegap_usage). Behavior: adds one task, one run of one runner (dry_run writes nothing), or with repeat a job of such tasks; `tidegap tick` runs it; reads the grid forecast; no login; the result stays in the queue (check_queue_status). Returns: task_id, status, scheduled_for, deadline, provider, model, runs_in, estimated_carbon_g_co2, a readiness line; a job adds job_id and its guarantee. Rejects a past deadline, an unknown zone, disallowed tools and shell commands.

Input parameters:

- `after_limit_reset` (boolean): true when the user says "after my limit resets": the task starts no earlier than the Claude subscription limit reset (the latest reset of an exhausted 5-hour or weekly window, else the fuller window'…
- `candidates` (array): 'provider:model' pairs the user allows, e.g. ['anthropic:claude-haiku-4-5','ollama:llama-3-1-8b']. With 2 or more, the scheduler scores each at the chosen window on carbon, cost and latency (see rout…
- `carbon_budget_g` (number): Hard cap on the task's estimated grams CO2e, e.g. 5. Windows above it are skipped; if no window before the deadline fits, the task fails instead of running on a dirty grid. Omit for no cap.
- `cwd` (string): Absolute folder a 'claude-code' run works in, e.g. a worktree '/work/app/.worktrees/fix-login'. This session's project folder keeps the run in a copy of this session; another folder runs fresh there,…
- `days` (array): Weekdays for repeat 'weekly', e.g. ['mon','thu'] for "Mondays and Thursdays". Defaults to today's weekday in time_zone; omit for any other repeat.
- `deadline` (string): When the task must be finished: ISO-8601 with a UTC offset, in the future. Convert the user's words, e.g. "by 8am tomorrow" in New York becomes '2026-05-13T08:00:00-04:00'. Omit with deadline_kind 'q…
- `deadline_kind` (string): Defaults to 'absolute': the deadline parameter sets the due time. 'quota_reset' sets it to the next weekly subscription-quota reset minus a margin, from ~/.tidegap/config (TIDEGAP_QUOTA_RESET_<LABEL>…
- `dispatch` (boolean): Defaults to true: store a task that `tidegap tick` runs. false queues an in-memory placeholder that never calls a model (tests only) and cannot combine with not_before or after_limit_reset. Omit it i…
- `dry_run` (boolean): true previews the plan (window, carbon estimate, provider, model, runs_in) and queues nothing, e.g. to confirm with the user first. Defaults to false.
- `every_hours` (integer): Hours between runs for repeat 'every_n_hours', e.g. 6 for "every 6 hours". Each run comes at most this long after the previous start and not sooner than half of it. Required with 'every_n_hours'; omi…
- `model` (string): Model id for the chosen provider, e.g. 'claude-sonnet-5' (anthropic) or 'gpt-6-sol' (openai). Omit for the provider default: anthropic 'claude-sonnet-5' (TIDEGAP_DEFAULT_MODEL overrides it), openai '…
- `not_before` (string): Earliest start, ISO-8601 with offset, e.g. '2026-05-12T18:00:00+02:00' for "not before 6pm" or "after lunch". The task then runs at the cleanest hour between it and the deadline; it must be in the fu…
- `origin_session_id` (string): Claude Code session id of the conversation that queued the task. Omit it: the server finds the current session itself when the Tidegap plugin is installed. Pass it only when the host substitutes it (…
- `output_path` (string): Absolute file path inside cwd, this session's project folder or the temp folder, e.g. '/tmp/digest.json'; when the task completes, { taskId, result, receipt } is written there as JSON, replacing a re…
- `permission_profile` (string): Tool set of a 'claude-code' run: 'read' is Read, Grep and Glob in its folder; 'web' is WebSearch and WebFetch in a fresh temporary folder (no cwd); 'none' is no tools. Runs never get Bash, Write or E…
- `prompt` (string, required): The full instruction the model receives when the window arrives, e.g. 'Summarize today's AI policy news in 5 bullets'. The run may start in a fresh session without this conversation (the reply's runs…
- `provider` (string): Where the task runs. 'claude-code' uses the local Claude Code login on the next `tidegap tick`, with no API key (see tools); 'ollama' is a local model; the others need their API key. Defaults to 'cla…
- `quota_provider` (string): Which configured quota to follow with deadline_kind 'quota_reset', e.g. 'claude' or 'codex'. Omit when exactly one label is configured; rejected with any other deadline_kind.
- `redact_in_receipt` (array): Regex patterns removed from the prompt before it is stored on the receipt, e.g. ['customer-[0-9]+'] for customer ids. Omit for the default, which strips API-key-looking strings.
- `region` (string): Grid zone to plan against, e.g. 'US-CAL-CISO' or 'FR'; pass it only when the user names a place. `tidegap region list` prints the supported zones; any zone works with an Electricity Maps key. Default…
- `repeat` (string): Defaults to 'none', a one-off. 'daily', 'weekdays', 'weekly' and 'every_n_hours' create a job: each run is a new task with this prompt, started fresh (never a copy of this session) in this project at…
- `result_path` (string): Absolute path of a new file, e.g. '/tmp/review.md'. When the task completes, Tidegap (never the run) writes the result text there with mode 0600, and the session's notice names it. It must be inside…
- `route_weights` (object): How to rank candidates, e.g. {"carbon": 1} for carbon only. Weights are relative and normalized; a key left out counts as 0. Omit for the default {carbon: 0.6, cost: 0.3, latency: 0.1}. Ignored unles…
- `runner` (string): Another name for provider, e.g. 'claude-code'; pass one of the two, or both with the same value. Omit it to follow provider and its default. 'command' is rejected: a shell command task is the user's…
- `time_zone` (string): IANA zone that window and days are read in, e.g. 'Europe/Berlin'; take it from the user's location. Defaults to the host's system zone. Only with a job repeat.
- `title` (string): Short label for queue lists, e.g. 'Weekly digest'. Defaults to the prompt's first line, cut to 80 characters; API-key-looking strings are redacted.
- `tools` (array): Claude Code tools for a 'claude-code' run, e.g. ['WebSearch','WebFetch'] for a research task; [] means none. Allowed: WebSearch, WebFetch, Read, Grep, Glob. Omit for the default: Read, Grep and Glob…
- `wake_session` (boolean): true wakes this Claude Code session when the task finishes, if it sits idle, within 12 hours after its last turn ended: the session starts a turn by itself with the notice. A wake spends a model turn…
- `window` (string): Local hours a job may run in, 'HH:MM-HH:MM', e.g. '22:00-08:00' for "at night"; '22:00-06:00' crosses midnight. Each run then picks its cleanest hour inside that day's window. Only with repeat 'daily…

### `check_queue_status` (~200 tokens)

Show the local task queue and jobs: every task in brief or one in full. Use when: the user asks what is queued or repeats, whether a task finished, or for its result. Do not use to change a task (use cancel_task, postpone_task, update_deadline or retry_task) or for limits (use tidegap_usage). Behavior: no network or login; marks a shown completed or failed task read; never changes a status. Returns: without task_id, status counts, last_tick_at, a line per task and job (guarantee, next run and id, last result); with task_id, its prompt, result, receipt and events. Rejects an unknown task_id.

Input parameters:

- `task_id` (string): One task's id, e.g. 't-3f2a…', from schedule_task or this tool's summary, to get its full record. Omit for the summary of all tasks.

### `tidegap_usage` (~230 tokens)

Report this machine's Claude Code limits: 5-hour and weekly percent used, reset times, and Codex limits if present. Use when: the user asks how much quota is left, or before heavy Claude Code work; at 90% or more, pass after_limit_reset to schedule_task. Do not use for task state (use check_queue_status). Behavior: reads the statusline reading, no API key; TIDEGAP_USAGE_OAUTH=1 calls the usage endpoint with the Claude Code login and caches it in ~/.tidegap/usage.json; never writes tasks or settings. Returns: a summary line and the usage/v1 JSON (windows, reading age, after_limit_reset wait).

Input parameters:

- `include_spend` (boolean): true adds claude_spend: tokens and an API list-price cost estimate for the current 5-hour window from the local Claude Code logs (total, by model, the five latest sessions), plus the tokens of recent…

### `cancel_task` (~247 tokens)

Cancel one queued or scheduled task by task_id; for all pending, use cancel_all. Use when: the user drops one task. Do not use to delay it (use postpone_task) or rerun a failed one (use retry_task). Behavior: marks it cancelled locally (no network) and redacts its prompt. Also cancels running and submitted tasks; a Batch call may still bill. A job or series skips this run; series=true ends it, even from a finished run. Else a finished task or repeat call changes nothing. Returns: "Task <id> status: <status>", terminated_at, and a job or series line when ended. Rejects an unknown task_id.

Input parameters:

- `series` (boolean): true also ends the job or series this task is a run of, so no further run is queued; use it for "stop this for good". Defaults to false: skip only this run; a job then plans its next one. No effect o…
- `task_id` (string, required): Id of the task to cancel, e.g. 't-3f2a…', from the schedule_task reply or the check_queue_status list.

### `expedite_task` (~185 tokens)

Run one queued or scheduled task now, skipping its clean window. Use when: the user wants the result now. Do not use for a failed task (use retry_task), to pick a new deadline (use update_deadline), or for a claude-code task (run `tidegap queue run-now <id>`). Behavior: drops its earliest start and makes one provider call at the current grid intensity; needs the task provider's key in the server env (and ANTHROPIC_API_KEY or OPENAI_API_KEY); the receipt records intensitySource=expedited. Returns: status and error on failure. Rejects running, submitted, finished and unknown tasks.

Input parameters:

- `task_id` (string, required): Id of the queued or scheduled task to run now, e.g. 't-3f2a…', from the schedule_task reply or the check_queue_status list.

### `update_deadline` (~246 tokens)

Change the deadline of one queued or scheduled task and re-pick its cleanest window inside it. Use when: the user moves the due time, earlier or later ("by 6pm instead"). Do not use to delay the start inside the same deadline (use postpone_task), to run now (use expedite_task) or to stop it (use cancel_task). Behavior: rewrites only this task in the local queue, clears its earliest start and quota rule, re-reads the grid forecast; no login. A repeat call only re-picks the hour. Returns: status, scheduled_for, new_deadline. Rejects running, finished or unknown tasks and a past deadline.

Input parameters:

- `deadline` (string, required): The new due time, ISO-8601 with offset, earlier or later than the current one and in the future, e.g. '2026-05-12T18:00:00+02:00' for "by 6pm instead".
- `task_id` (string, required): Id of the queued or scheduled task to move, e.g. 't-3f2a…', from the schedule_task reply or the check_queue_status list.

### `postpone_task` (~464 tokens)

Move one queued or scheduled task later; it never runs earlier than planned. Use when: the user says "tonight" or "after my limit resets"; pass exactly one of preset, until or delay_minutes. Do not use to set a new due time (use update_deadline) or to stop it (use cancel_task). Behavior: rewrites this task's earliest start in the local queue and re-picks the cleanest hour after it, but an until time is kept exactly; after_limit_reset reads the Claude limits. Returns: status, not_before, scheduled_for, deadline. Rejects a target at or before the planned start, finished and unknown tasks.

Input parameters:

- `delay_minutes` (integer): Minutes to add to the planned start, e.g. 90 for "an hour and a half later"; at most 10080 (7 days). Omit when passing preset or until.
- `preset` (string): A named later time, in this machine's local time: '1h' is one hour after the planned start; 'tonight' is 22:00 to 06:00 (after midnight: now to 06:00); 'tomorrow_morning' is 09:00 to 12:00 tomorrow;…
- `reset_at` (string): When the Claude limit resets, ISO-8601 with offset, if the user says it ("my limit resets at 15:00"). Only with preset 'after_limit_reset'; must be in the future and is remembered for later tasks. Om…
- `task_id` (string, required): Id of the queued or scheduled task to move later, e.g. 't-3f2a…', from the schedule_task reply or the check_queue_status list.
- `until` (string): The exact time the user picked, ISO-8601 with offset, after the planned start, e.g. '2026-05-12T21:30:00+02:00'. Omit when passing preset or delay_minutes.

### `reply_task` (~265 tokens)

Send a follow-up message in a completed task's conversation, as a new queued task. Use when: the user follows up on a finished task's result. Do not use for a failed task (use retry_task) or for an unrelated new task (use schedule_task). Behavior: each call adds one task to the local queue with earlier turns as history, the same provider and model, and its own clean window; no login now; it runs later as one provider call with the original's credentials. Returns: task_id, parent_task_id, status, scheduled_for, deadline. Rejects non-completed and unknown tasks and text over 32000 characters.

Input parameters:

- `deadline` (string): When the reply must be finished, ISO-8601 with offset, e.g. '2026-05-12T20:00:00Z'. Defaults to one hour from now.
- `task_id` (string, required): Id of the completed task to continue, e.g. 't-3f2a…', from the check_queue_status list (status completed).
- `text` (string, required): The user's follow-up, sent as the next turn after the task's earlier reply, e.g. 'Now cut it to 3 bullets'. Up to 32000 characters.

### `retry_task` (~190 tokens)

Run a failed task again now, with the same prompt, provider and model. Use when: a task failed on a transient error (rate limit, 5xx). Do not use for a task that did not fail (use expedite_task to run it now, update_deadline to move it), or for a claude-code task (run `tidegap queue run-now <id>`). Behavior: one provider call now; needs the task provider's key in the server env (and ANTHROPIC_API_KEY or OPENAI_API_KEY); the new result and signed receipt replace the old ones. Returns: status (completed or failed) and error on failure. Rejects non-failed and unknown tasks.

Input parameters:

- `task_id` (string, required): Id of the failed task to run again, e.g. 't-3f2a…', from the check_queue_status list (status failed).

### `cancel_all` (~175 tokens)

Cancel every queued and scheduled task in the local queue at once; for a single task use cancel_task. Use when: the user says "cancel everything" or "clear the queue". Do not use to drop one task or to end a repeating series (use cancel_task, with series=true for a series). Behavior: marks each pending task cancelled; running, submitted and finished tasks stay as they are; no network or login. A repeating task skips this occurrence and its next one is queued, so a second call cancels that one too. Returns: "Cancelled N of M task(s)." and one error line per task that could not be cancelled.

Input parameters:

- `status` (string): Cancel only tasks in one state: 'queued' (no window picked yet) or 'scheduled' (window picked). Omit to cancel both.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/tidegap-tidegap/tidegap-mcp#diagnostics

## Score history

- 2026-11-06: 88
- 2026-11-05: 83
- 2026-11-04: 87
- 2026-11-03: 87
- 2026-11-02: 82
- 2026-11-01: 81
- 2026-10-31: 81
- 2026-10-30: 81
- 2026-10-29: 80
- 2026-10-28: 80
- 2026-10-27: 79
- 2026-10-26: 79
- 2026-10-25: 78
- 2026-10-24: 78
- 2026-10-23: 83
- 2026-10-22: 82
- 2026-10-21: 82
- 2026-10-20: 81
- 2026-10-19: 81
- 2026-10-18: 80
- 2026-10-17: 65
- 2026-10-16: 69

## Common questions

### What is the Tidegap MCP server?

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

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

Tidegap scores 88 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 6 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. 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 Tidegap MCP server expose?

Tidegap exposes 12 tools: get_grid_forecast, recommend_window, schedule_task, check_queue_status, tidegap_usage, and 7 more. Their descriptions and schemas cost roughly 5,904 tokens of context every time the server is loaded.

### Is the Tidegap MCP server still maintained?

Tidegap is still listed as active in the MCP registry. We last reached this channel on 6 November 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 Tidegap MCP server under?

Tidegap 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.

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

VerifyMCP ran 16 checks on Tidegap, covering Malware scan, Known CVEs, Install scripts, Dependency health and 12 more. Endpoint Security and Transport & Reachability do not apply to an npm package, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- npm package: https://www.npmjs.com/package/@tidegap/mcp
- Socket report: https://socket.dev/npm/package/@tidegap/mcp
- Repository: https://github.com/tidegap/tidegap
- Website: https://www.tidegap.com/
- Changelog RSS feed: https://verifymcp.io/servers/tidegap-tidegap/tidegap-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/tidegap-tidegap/tidegap-mcp/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/tidegap-tidegap/tidegap-mcp.json
- HTML version of this page: https://verifymcp.io/servers/tidegap-tidegap/tidegap-mcp
