# Odile Gate (remote · gate.odilelabs.com)

Free, no signup: per-app keys, allowed calls, approvals and an audit log for your API or model key.

- Trust score: 68/100 (medium)
- Change this week: −3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

> **Recent critical change**: Authorization (2026-10-31). See the changelog below before you install this server.

## Components

- remote · `gate.odilelabs.com`: 68/100 (this document), [markdown](https://verifymcp.io/servers/com-odilelabs-gate/gate.md), [page](https://verifymcp.io/servers/com-odilelabs-gate/gate)

## Channel facts

- Endpoint: `https://gate.odilelabs.com/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.7.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, 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-05.

- **Endpoint Security**: 60/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (gate_update_app).
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC is configured correctly; the domain's records validate against the full chain to the root.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 66/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 5066 tokens (~174/item across 29 items; 29 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 44/100
  - Stability check failed: schema churn in the 15 days we've observed: 1 tool removals, 0 breaking changes, 0 auth/transport breaks, 13 additions.
- **Tool Coverage**: 98/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 93% 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 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 30 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 60/100
  - Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28.

## Install

### How do I install the Odile Gate MCP server?

Odile Gate is a hosted endpoint at https://gate.odilelabs.com/mcp, so there is nothing to install locally. 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 --transport http com-odilelabs-gate 'https://gate.odilelabs.com/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "com-odilelabs-gate": {
      "url": "https://gate.odilelabs.com/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "com-odilelabs-gate": {
      "type": "http",
      "url": "https://gate.odilelabs.com/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.com-odilelabs-gate]
url = "https://gate.odilelabs.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-odilelabs-gate": {
      "type": "remote",
      "url": "https://gate.odilelabs.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-odilelabs-gate --url 'https://gate.odilelabs.com/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-odilelabs-gate:
    url: "https://gate.odilelabs.com/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "com-odilelabs-gate": {
      "Transport": "http",
      "Url": "https://gate.odilelabs.com/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add com-odilelabs-gate -t streamable-http -u 'https://gate.odilelabs.com/mcp'
```

### Other

```json
{
  "mcpServers": {
    "com-odilelabs-gate": {
      "type": "http",
      "url": "https://gate.odilelabs.com/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## 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-04 (score 68, +1)

No change was recorded against any check on this day. Stability & Change Management went from 37 to 41.

### 2026-11-02 (score 67, +2)

- [security improvement] DNSSEC: fail → pass

### 2026-11-01 (score 65, 0)

- [security regression] Stability: 0.33 → fail
- [security regression] A breaking change shipped without a version bump: still 1.8.0
- [security regression] Tool “gate_add_app” was removed
- [security] The server rewrote its instructions, which are the text every model session reads
- [security] New tool “gate_update_app”, which the server declares destructive
- [security] Tool “gate_audit” rewrote its description, which is the text the model reads
- [security] Tool “gate_audit_proof” rewrote its description, which is the text the model reads
- [security] Tool “gate_audit_verify” rewrote its description, which is the text the model reads
- [security] Tool “gate_create_app” rewrote its description, which is the text the model reads
- [security] Tool “gate_metrics” rewrote its description, which is the text the model reads
- [security] Tool “gate_revoke_app” rewrote its description, which is the text the model reads
- [security] Tool “gate_run_timeline” rewrote its description, which is the text the model reads
- [security] Tool “gate_run_tree” rewrote its description, which is the text the model reads
- [functional] Schema quality: good → excellent
- [cosmetic] Tool “gate_create_app” changed its title: Create an app (older name of gate_add_app) → Register an app

### 2026-10-31 (score 65, −6)

- [critical regression] Authorization: partial → fail
- [security] The server rewrote its instructions, which are the text every model session reads
- [security] New tool “gate_revoke_app”, which the server declares destructive
- [security] New tool “gate_revoke_member”, which the server declares destructive
- [security] New tool “gate_revoke_run”, which the server declares destructive
- [security] New tool “gate_rotate_app_key”, which the server declares destructive
- [security] Tool “gate_audit” rewrote its description, which is the text the model reads
- [security] Tool “gate_audit_proof” rewrote its description, which is the text the model reads
- [security] Tool “gate_check_setup” rewrote its description, which is the text the model reads
- [security] Tool “gate_create_app” rewrote its description, which is the text the model reads
- [security] Tool “gate_list_apps” rewrote its description, which is the text the model reads
- [security] Tool “gate_metrics” rewrote its description, which is the text the model reads
- [security] Tool “gate_openshell_setup” rewrote its description, which is the text the model reads
- [security] Tool “gate_run_timeline” rewrote its description, which is the text the model reads
- [security] Tool “gate_run_tree” rewrote its description, which is the text the model reads
- [security] Tool “gate_validate_config” rewrote its description, which is the text the model reads
- [functional regression] Schema quality: 4086 → 4989
- [functional] Destructive annotations: pass → 100
- [functional] Server version: 1.6.0 → 1.8.0
- [functional] New tool “gate_invite_member”
- [functional] New tool “gate_list_members”
- [cosmetic] Tool “gate_create_app” changed its title: Create an app → Create an app (older name of gate_add_app)

### 2026-10-30 (score 71, 0)

- [security] Tool “gate_list_apps” rewrote its description, which is the text the model reads
- [security] Tool “gate_metrics” rewrote its description, which is the text the model reads
- [cosmetic] “gate_add_app” added an optional parameter “expires_at”
- [cosmetic] “gate_add_app” added an optional parameter “max_calls”
- [cosmetic] “gate_create_app” added an optional parameter “expires_at”
- [cosmetic] “gate_create_app” added an optional parameter “max_calls”

### 2026-10-29 (score 71, 0)

- [functional regression] Schema quality: 3374 → 3942
- [functional] New tool “gate_create_app”
- [functional] New tool “gate_set_models”
- [cosmetic] “gate_add_app” added an optional parameter “models”
- [cosmetic] “gate_add_app” added an optional parameter “template”
- [cosmetic] “gate_add_app” made “routes” optional

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

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

### 2026-10-27 (score 70, 0)

- [security] Tool “gate_add_approver” rewrote its description, which is the text the model reads
- [security] Tool “gate_create_run” rewrote its description, which is the text the model reads

## MCP tools (29)

### `gate_openshell_setup` (~103 tokens)

Discover one-command OpenShell setup

Read-only local setup plan for native OpenShell + Gate: one command, exact installer hash, recipe schema, prerequisites, authority boundaries and cleanup. Default creates an isolated Free read-only demo with no model or payment. A trusted local controller may configure an owner-authorized API with explicit routes/scope and private credential files. This tool does not run commands, create resources or accept credentials. Only for OpenShell users; any other agent starts with gate_create_project.

### `gate_create_project` (~199 tokens)

Create a Gate project

Create a Free project in front of an existing HTTPS API. No signup or payment required. For a credential-free demo use https://sandbox.gate.odilelabs.com with GET /customers/:cid/tickets/:id (customer A holds tickets 1-3, B holds 4-5: try GET /customers/A/tickets/1). Returns project_id, admin_key (shown once) and the gateway base URL apps call instead of the API. A real API and its credentials need owner authorization.

Input parameters:

- `header_name` (string): Optional: the secret header your API expects, e.g. Authorization or apikey
- `header_value` (string): Optional: its value. Stored encrypted; apps never see it.
- `name` (string, required): A name for the project, e.g. "Shop API"
- `upstream` (string, required): The API base URL, https only, e.g. https://api.example.com/v1

### `gate_create_app` (~370 tokens)

Register an app

Give one app its own key and the calls it may make. Routes are rules like "GET /orders/:id", "POST /orders", "GET /users/{user}/orders" (per-user), or example calls like "GET /orders/42", which become rules allowing any id. Returns key (shown once), app.id and normalized rules. Send key as Authorization: Bearer <key> to the project gateway; never send the admin key to the workload.

Input parameters:

- `admin_key` (string, required): The project admin key (ga_...). Read it from the .env; never print it.
- `expires_at` (string): Pro: optional future ISO time with timezone, at most 30 days from creation. Rotation preserves this expiry.
- `max_calls` (integer): Pro: optional lifetime call allowance for this app. Rotation preserves its count.
- `models` (array): For a model API: the only models this app may ask for, exact names or a prefix ending in * (e.g. ["gpt-4.1-mini", "claude-haiku-*"]). Omit for no model limit.
- `name` (string, required): The app name, e.g. "storefront" or "nightly sync"
- `per_minute` (integer): Calls per minute for this app (default 60)
- `project_id` (string, required): The project id from gate_create_project, e.g. p1a2b3...
- `routes` (array): Only the calls this app makes, one "METHOD /path" per item
- `template` (string): Ready-made API policy: reads allowed, risky writes held, destructive calls refused. Explicit routes replace the entire template policy. Free and Pro; configure the project upstream first. See /templa…

### `gate_update_app` (~231 tokens)

Apply learned app routes and rate limit

Apply stored learning suggestions to an existing app and return the applied routes, suggested per-minute limit and learning-session metadata. Review gate_learn_suggestions first, then explicitly confirm; requires the project owner key or an admin member key. mode="extend" adds learned routes (default); "replace" removes existing routes before applying them. Both modes set the learned rate limit and keep the app key. Only learned suggestions can be applied: arbitrary routes or rate limits are not accepted, and this tool never starts learning.

Input parameters:

- `admin_key` (string, required): The project owner key (ga_...) or an accepted admin member key (gm_...). Read it from the .env; never print it.
- `app` (string, required): The app id (app_...) with stored learning suggestions
- `confirm` (boolean, required): Explicit confirmation to apply the reviewed learning suggestions
- `mode` (string): Extend existing routes (default), or replace them with learned routes; both set the suggested rate limit
- `project_id` (string, required): The project id from gate_create_project, e.g. p1a2b3...

### `gate_set_models` (~150 tokens)

Set an app's allowed models

For a project in front of a model API: limit which models one app may ask for (the request body's "model", or a /models/<name> path). Other models are refused with 403 model_not_allowed before the provider sees them. models: null removes the limit.

Input parameters:

- `admin_key` (string, required): The project admin key (ga_...). Read it from the .env; never print it.
- `app` (string, required): The app id (app_...)
- `models` (array|null, required): Exact names or prefixes ending in *; null for no limit
- `project_id` (string, required): The project id from gate_create_project, e.g. p1a2b3...

### `gate_list_apps` (~114 tokens)

List apps

The project's apps with their allowed calls, limits, state, idle_since (no allowed call in the project's idle_days) and anomaly-guard settings. Use it to find an app id for the app tools, or a retired app to revoke with gate_revoke_app.

Input parameters:

- `admin_key` (string, required): The project admin key (ga_...). Read it from the .env; never print it.
- `project_id` (string, required): The project id from gate_create_project, e.g. p1a2b3...

### `gate_check_setup` (~172 tokens)

Check an agent integration setup

Read actual Gate protection settings before giving an integration production access. Reports observe-only mode, writes without mandatory runs, missing user-token configuration, wildcard grants and approval separation, with evidence, exact remedies and explicit limits. Sends no upstream requests, changes no settings and uses no gateway quota. Configuration-only: not a security certificate or runtime enforcement test. Use it on a live project; to check an odile.yaml before applying it use gate_validate_config.

Input parameters:

- `admin_key` (string, required): The project admin key (ga_...). Read it from the .env; never print it.
- `app` (string): Optional: check one active app id (app_...) instead of all active apps
- `project_id` (string, required): The project id from gate_create_project, e.g. p1a2b3...

### `gate_metrics` (~258 tokens)

Read Gate operational metrics

Returns project-wide 24-hour call aggregates, anomaly scores, idle apps and current-month usage; use it for operational trends rather than individual calls in gate_audit or one run in gate_run_timeline. Includes stored call counts by HTTP status and reason, measured duration through response headers (including upstream wait), per-app anomaly scores and 24-hour anomaly counts, idle apps (active apps whose key made no allowed call in the project's idle_days, default 14; a flag only, never a revoke), and separate current-month gateway usage: plan, used, allowed, plus upgrade URL and checkout path on Free at 80% or above. Only POST the checkout path when the admin asks to upgrade; reading metrics never starts checkout. Requires the project owner key or an active member key. Audit may be partial: invalid-key sampling and audit-off periods are disclosed. No upstream requests, quota use or policy changes; not a health certificate or performance guarantee. For individual calls use gate_audit.

Input parameters:

- `admin_key` (string, required): The project admin key (ga_...). Read it from the .env; never print it.
- `project_id` (string, required): The project id from gate_create_project, e.g. p1a2b3...

### `gate_audit` (~214 tokens)

Read the audit log

Returns recent gateway calls (time, app, matched route, status, reason, duration); use it to investigate individual calls across the project rather than gate_metrics aggregates or a single gate_run_timeline. Newest first, with totals by status and refusal reason for the returned calls. This view never returns bodies, query values or headers. For 24-hour totals and anomaly scores use gate_metrics; for a signed export an auditor can check, gate_audit_proof; for one run's history, gate_run_timeline.

Input parameters:

- `admin_key` (string, required): The project admin key (ga_...). Read it from the .env; never print it.
- `app` (string): Optional: only this app id (app_...)
- `limit` (integer): How many calls (default 20)
- `project_id` (string, required): The project id from gate_create_project, e.g. p1a2b3...
- `status` (string): Optional: only this HTTP status, e.g. "403"

### `gate_create_run` (~328 tokens)

Grant one agent run

Gate Actions: give one agent session narrow, expiring permission. Actions are rules with {placeholders} bound by scope (e.g. "PATCH /customers/{customer}/tickets/:id" with scope {"customer":"A"}), each with an optional max and approval. Add a human approver with gate_add_approver before granting approval:true actions; without an active approver the grant is refused. Returns a run token (shown once) the agent sends as x-odile-run with its app key. Writes in a run need an Idempotency-Key. Give a write a check ("GET /bookings?idempotency_key={key}") and the agent can settle a lost answer with POST /g/<id>/_gate/recover.

Input parameters:

- `actions` (array, required): Rules, or {rule, max, approval, check}
- `admin_key` (string, required): The project admin key (ga_...). Read it from the .env; never print it.
- `app` (string, required): The app id (app_...) this run is for
- `label` (string): Optional: what the run is for, e.g. "triage ticket 4411"
- `max_calls` (integer): Optional: calls allowed in the whole run
- `project_id` (string, required): The project id from gate_create_project, e.g. p1a2b3...
- `scope` (object): Values for the {placeholders}, e.g. {"customer":"A"}
- `ttl_seconds` (integer): How long the run lasts (default 3600)

### `gate_set_app_runs` (~112 tokens)

Require runs for an app

Make an app need a run: "writes" (every write needs x-odile-run), "all" (every call), or "off".

Input parameters:

- `admin_key` (string, required): The project admin key (ga_...). Read it from the .env; never print it.
- `app` (string, required): The app id (app_...)
- `mode` (string, required)
- `project_id` (string, required): The project id from gate_create_project, e.g. p1a2b3...

### `gate_set_response` (~172 tokens)

Choose response fields for an app

Opt-in JSON response redaction: return only explicit JSON Pointer paths, e.g. /id and /items/*/name. * matches one segment; selecting a container allows its whole subtree. Applies to every upstream response for this app, including errors. Maximum 1 MiB and 5 seconds to read; invalid/non-JSON responses are withheld. No bodies are stored. A withheld reply never reverses an upstream write. null disables filtering. Free and Pro.

Input parameters:

- `admin_key` (string, required): The project admin key (ga_...). Read it from the .env; never print it.
- `allow` (required)
- `app` (string, required): The app id (app_...)
- `project_id` (string, required): The project id from gate_create_project, e.g. p1a2b3...

### `gate_add_approver` (~126 tokens)

Add an approver

Create an approver key for the person who approves held actions (shown once), before granting approval actions. Give it to that person, never to an agent. Only an active approver key can approve, reject or reopen actions.

Input parameters:

- `admin_key` (string, required): The project admin key (ga_...). Read it from the .env; never print it.
- `name` (string, required): Who approves, e.g. "Dana (support lead)"
- `project_id` (string, required): The project id from gate_create_project, e.g. p1a2b3...

### `gate_invite_member` (~139 tokens)

Invite a team member

Use the project owner admin key (ga_...) to invite a named viewer, approver or admin. Returns a single-use invite link shown once, expiring after 72 hours; send it to that person. They accept it to receive their member key, also shown once. Gate sends no email.

Input parameters:

- `admin_key` (string, required): The project admin key (ga_...). Read it from the .env; never print it.
- `name` (string, required): The person's name
- `project_id` (string, required): The project id from gate_create_project, e.g. p1a2b3...
- `role` (string, required)

### `gate_list_members` (~103 tokens)

List team members

Use the project owner admin key (ga_...) to review invited, active and revoked members and find a member id to revoke. Invite links and member keys are shown once when issued and never returned by this list.

Input parameters:

- `admin_key` (string, required): The project admin key (ga_...). Read it from the .env; never print it.
- `project_id` (string, required): The project id from gate_create_project, e.g. p1a2b3...

### `gate_revoke_member` (~127 tokens)

Revoke a team member

Use the project owner admin key (ga_...) to remove a teammate's access immediately, invalidating their member key or pending invite. Safe to repeat. Invite links and keys are shown once; to restore access, create a new invite.

Input parameters:

- `admin_key` (string, required): The project admin key (ga_...). Read it from the .env; never print it.
- `member` (string, required): The member id (mem_...) from gate_list_members
- `project_id` (string, required): The project id from gate_create_project, e.g. p1a2b3...

### `gate_list_actions` (~132 tokens)

List held actions

Actions waiting for approval (or in another state), with the exact call. With an installed approval-risk model, pending actions sort by risk descending and include risk (0–1) and risk_features (top two advisory signals). No model means no score and newest first. Only a person decides in the dashboard.

Input parameters:

- `admin_key` (string, required): The project admin key (ga_...). Read it from the .env; never print it.
- `project_id` (string, required): The project id from gate_create_project, e.g. p1a2b3...
- `state` (string): Default: pending

### `gate_explain_refusal` (~70 tokens)

Explain a refused call

What a Gate refusal means and how to fix it, from the x-gate-refused header value (e.g. route_not_allowed).

Input parameters:

- `reason` (string, required): The x-gate-refused value
- `recoverable` (boolean): Whether the write was granted with a recovery check

### `gate_delegate_run` (~155 tokens)

Delegate a narrower run

Hand a narrower run to another active app in the same project. Uses the parent app key and run token, never the admin key. Scope, expiry, approvals and ancestor budgets stay enforced; maximum depth five.

Input parameters:

- `actions` (array, required)
- `app` (string, required): The destination app id
- `app_key` (string, required): The parent app key (gk_...)
- `label` (string): A short label for the delegated job
- `max_calls` (integer)
- `project_id` (string, required): The project id from gate_create_project, e.g. p1a2b3...
- `run_token` (string, required): The parent run token (gr_...)
- `ttl_seconds` (integer)

### `gate_learn_suggestions` (~122 tokens)

Read learning suggestions

Read normalized routes and a suggested per-minute limit from an admin-enabled, time-boxed learning session. Records only method, normalized path templates and counts per minute; no query values, raw ids, headers or bodies. Never enables learning or applies rules.

Input parameters:

- `admin_key` (string, required): The project admin key (ga_...). Read it from the .env; never print it.
- `app` (string, required): The app id
- `project_id` (string, required): The project id from gate_create_project, e.g. p1a2b3...

### `gate_audit_proof` (~210 tokens)

Export a signed audit proof

Returns chained audit rows, decided-action feature snapshots and signed anchors; use it for a portable tamper-evident export instead of gate_audit's recent-call view, then check it with gate_audit_verify. No sealed paths/bodies, notes, keys or IPs in the action labels. Legacy actions lack snapshots and are excluded. store_audit=false has no chain. Follow next_from for audit rows and next_actions_after as actions_after for labels (10,000 each). Use API/SDK to verify exports above the MCP request size limit. The signature is HMAC-SHA256.

Input parameters:

- `actions_after` (string): Action cursor from next_actions_after
- `admin_key` (string, required): The project admin key (ga_...). Read it from the .env; never print it.
- `from` (integer)
- `project_id` (string, required): The project id from gate_create_project, e.g. p1a2b3...
- `to` (integer)

### `gate_audit_verify` (~132 tokens)

Verify a signed audit export

Returns intact or broken_at for a supplied signed export; use it to check a gate_audit_proof export rather than retrieve audit rows. Recomputes the chain and project signature; broken_at is a one-based row position. Does not approve actions or change permissions.

Input parameters:

- `admin_key` (string, required): The project admin key (ga_...). Read it from the .env; never print it.
- `project_id` (string, required): The project id from gate_create_project, e.g. p1a2b3...
- `proof` (object, required): The full signed export from gate_audit_proof

### `gate_run_tree` (~110 tokens)

Read run tree

Returns one run and its delegated descendants without tokens; use it to inspect delegation and permission state instead of gate_run_timeline events. One run only; the project-wide log is gate_audit.

Input parameters:

- `admin_key` (string, required): The project admin key (ga_...). Read it from the .env; never print it.
- `project_id` (string, required): The project id from gate_create_project, e.g. p1a2b3...
- `run_id` (string, required): The run id

### `gate_run_timeline` (~152 tokens)

Read run timeline

Returns one run's call metadata, approvals and approver names, recovery outcomes and delegated children; use it to reconstruct that session instead of gate_audit's project-wide calls or gate_run_tree's permission state. No bodies or query values. One run only; the project-wide log is gate_audit.

Input parameters:

- `admin_key` (string, required): The project admin key (ga_...). Read it from the .env; never print it.
- `before` (integer): Older audit events (timeline pages have at most 500 events)
- `project_id` (string, required): The project id from gate_create_project, e.g. p1a2b3...
- `run_id` (string, required): The run id

### `gate_rotate_app_key` (~135 tokens)

Replace an app key

Replace one app's key and keep its rules, limits, expiry and call count. The old key stops working at once (no overlap) and the new key is shown once. Use it when a key may have leaked; to remove the app entirely use gate_revoke_app.

Input parameters:

- `admin_key` (string, required): The project admin key (ga_...). Read it from the .env; never print it.
- `app` (string, required): The app id (app_...) from gate_list_apps
- `project_id` (string, required): The project id from gate_create_project, e.g. p1a2b3...

### `gate_revoke_app` (~143 tokens)

Revoke an app

Revoke one app: its key stops working at once (401) and the app no longer counts toward the plan's app limit. It cannot be undone; to give that agent access again, register a new app with gate_create_app. To replace a leaked key but keep the app, use gate_rotate_app_key.

Input parameters:

- `admin_key` (string, required): The project admin key (ga_...). Read it from the .env; never print it.
- `app` (string, required): The app id (app_...) from gate_list_apps
- `project_id` (string, required): The project id from gate_create_project, e.g. p1a2b3...

### `gate_revoke_run` (~133 tokens)

End an agent run

End one run granted with gate_create_run: its token stops working at once (403 run_revoked) while the app itself keeps working. Use it to stop an agent mid-job; grant a new run with gate_create_run if the work should continue.

Input parameters:

- `admin_key` (string, required): The project admin key (ga_...). Read it from the .env; never print it.
- `project_id` (string, required): The project id from gate_create_project, e.g. p1a2b3...
- `run_id` (string, required): The run id: run.run_id in gate_create_run's result

### `gate_validate_config` (~132 tokens)

Check an odile.yaml

Parse and check a declarative Gate config (apps, routes, rate limits, run mode, plugins including anomaly-guard, alerts, approvers) without changing anything. anomaly-guard settings: mode off|alert|strict, z_threshold 2–10, min_minutes 1–30, half_life 5–1440. Returns errors with their path, warnings, and the normalized config. Use it before gate_sync_declarative; to review a live project's settings use gate_check_setup.

Input parameters:

- `config` (string, required): The whole odile.yaml (or the same as JSON) as text

### `gate_sync_declarative` (~208 tokens)

Apply an odile.yaml

Make a Gate project match an odile.yaml: creates the project (if no project_id) and missing apps and approvers, applies run mode, loop, learning and anomaly-guard settings and alerts. Example plugin: {name: anomaly-guard, settings: {mode: alert, z_threshold: 4, min_minutes: 3, half_life: 60}}. Never revokes or deletes; differences it cannot apply (an app's routes or rate limit) come back as drift. dry_run lists the steps without changing anything. New keys are shown once.

Input parameters:

- `admin_key` (string): Its admin key (ga_...), required with project_id. Read it from the .env; never print it.
- `config` (string, required): The whole odile.yaml (or the same as JSON) as text
- `dry_run` (boolean): List the steps without changing anything
- `project_id` (string): Optional: an existing project to sync

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-odilelabs-gate/gate#diagnostics

## Score history

- 2026-11-05: 68
- 2026-11-04: 68
- 2026-11-03: 67
- 2026-11-02: 67
- 2026-11-01: 65
- 2026-10-31: 65
- 2026-10-30: 71
- 2026-10-29: 71
- 2026-10-28: 71
- 2026-10-27: 70
- 2026-10-26: 70
- 2026-10-25: 69
- 2026-10-24: 69
- 2026-10-23: 69
- 2026-10-22: 68
- 2026-10-21: 68

## Common questions

### What is the Odile Gate MCP server?

Odile Gate is an MCP server listed in the public MCP registry as com.odilelabs/gate. Free, no signup: per-app keys, allowed calls, approvals and an audit log for your API or model key. This page covers its hosted endpoint (https://gate.odilelabs.com/mcp).

### Is the Odile Gate MCP server safe to use?

Odile Gate scores 68 out of 100 on VerifyMCP. 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 Odile Gate MCP server expose?

Odile Gate exposes 29 tools: gate_openshell_setup, gate_create_project, gate_create_app, gate_update_app, gate_set_models, and 24 more. Their descriptions and schemas cost roughly 4,752 tokens of context every time the server is loaded.

### Does the Odile Gate MCP server require authentication?

No. We connected to Odile Gate without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the Odile Gate MCP server still maintained?

Odile Gate is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://gate.odilelabs.com/mcp
- Website: https://gate.odilelabs.com/
- Changelog RSS feed: https://verifymcp.io/servers/com-odilelabs-gate/gate.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-odilelabs-gate/gate.json
- HTML version of this page: https://verifymcp.io/servers/com-odilelabs-gate/gate
