ai.shipeasy/mcp
NPM · @SHIPEASY/MCP · 2 COMPONENTS
Feature flags, A/B experiments, kill switches, dynamic config & i18n — Shipeasy MCP server.
Available components
Last scanned (13 hours ago)
Scores higher than 97% of npm servers
Category Developer Tools
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 Security98
- 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
- 30 of 95 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency97
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to shipeasy-ai/shipeasy). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 0 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability75
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 41944 tokens (~233/item across 180 items; 180 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 Management100
- Stability check failed: the tool surface changed between 2.8.0 and 2.16.0: 0 tool removals, 1 breaking changes, 65 additions. See how to fix → Fail
Tool Coverage98
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 95% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 17 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 180 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
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.
- 5 Nov 26 0
- Schema quality: 32639 → 41944 ▼ functional
- Package version: 2.15.0 → 2.16.0 functional
- 3 Nov 26 0
- Package version: 2.14.0 → 2.15.0 functional
- 1 Nov 26 +25
- Malware scan: unverified → pass ▲ security
- Known CVEs: unverified → pass ▲ security
- Dependency health: unverified → 0.86 ▲ functional
- Package version: 2.13.0 → 2.14.0 functional
- 31 Oct 26 −25
- Known CVEs: pass → unverified ▼ security
- Malware scan: pass → unverified ▼ security
- Schema quality: 28716 → 31766 ▼ functional
- Dependency health: 0.86 → unverified ▼ functional
- Package version: 2.10.0 → 2.13.0 functional
- Package version: 2.10.0 → 2.12.1 functional
- Package version: 2.10.0 → 2.12.0 functional
- 29 Oct 26 0
- Package version: 2.9.0 → 2.10.0 functional
- 27 Oct 26 +15
- Malware scan: unverified → pass ▲ security
- 26 Oct 26 −16
- Malware scan: pass → unverified ▼ security
- Stability: pass → fail ▼ security
- Schema quality: 194 → 219 ▼ functional
- Package version: 2.8.0 → 2.9.0 functional
- 21 Oct 26 +1
- Stability: 0.97 → pass security
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 5 Nov 2026 · Analysed npm/@shipeasy/mcp@2.16.0
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | shipeasy-ai/shipeasy |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/shipeasy-ai/shipeasy/.github/workflows/publish-mcp.yml@refs/heads/main |
| Rekor log index | 3692077079 |
| Predicate type | SLSA build provenance https://slsa.dev/provenance/v1 |
| Subject digest | sha512:c36cf6859854f870be363435a95b68c6d35240e2de58a1b8a5964cb153e7cc7a120d77001328ef46020b4d8be7035fa1b0d36c81b493fe0d0112b13e0 |
Background: How many MCP packages publish verified provenance →
Dependencies 95 packages
| Packages resolved | 95 |
|---|---|
| Stale | 30 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
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 →
release_experiments_list ~171
List experiments. Returns a single page of non-archived experiments ordered by `updated_at desc, id desc`. Use the `cursor` query parameter to paginate.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | Opaque cursor returned in the previous page's `next_cursor`. Omit for the first page. |
| limit | integer | – | Page size (1–500). Defaults to 100. |
| q | string | – | Case-insensitive substring filter across the resource's human-readable text columns (e.g. `name`, `title`, `description`). OR-matched across those columns; omit to return everything. |
| status | string | – | Filter by lifecycle status. Pass `archived` to return the archive tab; any other value (or omitting it) returns the non-archived experiments. |
No output schema declared.
No examples provided.
release_experiments_readout_create ~256
Mint a readout snapshot. Freezes the current results view into an immutable, dated readout snapshot — verdict, headline, per-metric numbers, the caveat list with its acknowledgment state, enrollment, and a hash of the assignment-relevant config. Ship/stop flows mint one automatically; "Share readout" …
| Name | Type | Req | Description |
|---|---|---|---|
| acknowledgedCaveatIds | array | – | Ids of the open caveats the caller ticked (decision-gating acknowledgment). Unlisted caveats are stored as unacknowledged. |
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
| kind | string | yes | Why the snapshot is being minted — `manual` ("Share readout"), or automatically on `ship` / `stop`. |
| requireAllAcknowledged | boolean | – | When `true`, refuse (`422`) to mint while any open caveat is not listed in `acknowledgedCaveatIds` — server-side ship gating. |
No output schema declared.
No examples provided.
release_experiments_readout_get ~203
Get a readout snapshot. Returns one immutable readout snapshot — the frozen results view (verdict, headline, per-metric numbers, caveats, enrollment) captured when it was minted, plus the `configHash` that tells you whether it is still comparable to the live view.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
| readoutId | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
No output schema declared.
No examples provided.
release_experiments_reanalyze ~115
Re-queue analysis. Requeues the daily analysis pass for this experiment outside the normal cron cadence. Useful after attaching a new metric or correcting an event taxonomy. The job runs asynchronously.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
No output schema declared.
No examples provided.
release_experiments_restore ~92
Restore an archived experiment (→ draft). Drives the experiment lifecycle. Allowed transitions:
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
No output schema declared.
No examples provided.
release_experiments_results ~119
Get analysis results. Returns the latest analysis output for the experiment — one row per metric/group/day, including sample size, mean, % delta vs. control, p-value, and a sample-ratio mismatch flag.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
No output schema declared.
No examples provided.
release_experiments_set_metrics ~132
Attach metrics. Replaces the experiment's metric attachments wholesale. Each entry pairs an existing `metric_id` with a `role` (`goal` / `guardrail` / `secondary`).
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
| metrics | array | yes | Replacement metrics list — replaces the current attachments wholesale. |
No output schema declared.
No examples provided.
release_experiments_start ~92
Start an experiment (draft → running). Drives the experiment lifecycle. Allowed transitions:
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
No output schema declared.
No examples provided.
release_experiments_stop ~89
Stop a running experiment. Drives the experiment lifecycle. Allowed transitions:
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
No output schema declared.
No examples provided.
release_experiments_timeseries ~126
Get analysis timeseries. Same row shape as `/results`, but returns every daily slice rather than the latest. Filter to a single metric with the `metric` query parameter.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
| metric | string | – | Optional metric name to filter the series. |
No output schema declared.
No examples provided.
release_experiments_universes_archive ~109
Delete a universe. Soft-deletes the universe. Returns `409` if any non-archived experiment still references it — archive those experiments first.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
No output schema declared.
No examples provided.
release_experiments_universes_create ~395
Create a universe. Creates a new universe. Only `name` is required — `unit_type` defaults to `user_id` and `holdout_range` defaults to `null` (no holdout).
| Name | Type | Req | Description |
|---|---|---|---|
| description | – | – | Human-readable blurb shown in the universe picker/hovercard. |
| folder | – | – | Optional folder name grouping items in the dashboard. Alphanumeric, `_` or `-` (no `/`). Part of the SDK lookup key (`<folder>/<name>`). |
| holdout_range | – | – | Inclusive `[lo, hi]` bucket range (0–9999) reserved as the **holdout** — callers hashed into this slice are excluded from every experiment in the universe. `null` disables the holdout. Pro plan or hi… |
| listToken | string | – | REQUIRED. The `listToken` returned by the most recent `release_experiments_universes_list` call. It proves you listed existing release experiments universes and confirmed this one doesn't already exi… |
| name | string | yes | Stable universe key. Single segment or `folder.name`. Lowercase letters, digits, `_` or `-`; max 128 chars. Immutable after create. |
| param_schema | – | – | The universe-owned config schema — an ordered `{ name, type, default }[]`. Experiments may only override values per variant, never add fields. `null` starts an empty schema. |
| recommended_headroom | integer | – | Basis points of reserved headroom seeded into each new experiment created in this universe (0 = none). Lets variants be appended into a running experiment without reshuffling. |
| unit_type | string | – | Unit of randomisation. Typically `user_id`. Use `account_id` to keep whole accounts in the same group across an experiment. |
No output schema declared.
No examples provided.
release_experiments_universes_list ~142
List universes. Returns a single page of universes ordered by `created_at desc, id desc`. The universes table has no `updated_at`, so this list is keyed on creation time.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | Opaque cursor returned in the previous page's `next_cursor`. Omit for the first page. |
| limit | integer | – | Page size (1–500). Defaults to 100. |
| q | string | – | Case-insensitive substring filter across the resource's human-readable text columns (e.g. `name`, `title`, `description`). OR-matched across those columns; omit to return everything. |
No output schema declared.
No examples provided.
release_experiments_universes_update ~279
Update a universe. Partial update. Only `holdout_range` is mutable — `name` and `unit_type` are immutable after create.
| Name | Type | Req | Description |
|---|---|---|---|
| description | – | – | Human-readable blurb shown in the universe picker/hovercard. |
| folder | – | – | Optional folder name grouping items in the dashboard. Alphanumeric, `_` or `-` (no `/`). Part of the SDK lookup key (`<folder>/<name>`). |
| holdout_range | – | – | Inclusive `[lo, hi]` bucket range (0–9999) reserved as the **holdout** — callers hashed into this slice are excluded from every experiment in the universe. `null` disables the holdout. Pro plan or hi… |
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
| param_schema | – | – | Replace the universe config schema. Additive changes + default edits are always allowed; removing a param a running experiment overrides is rejected (deprecate-only). |
| recommended_headroom | integer | – | Basis points of reserved headroom seeded into new experiments in this universe. |
No output schema declared.
No examples provided.
release_experiments_update ~640
Update an experiment. Partial update. `allocation_pct`, `groups`, `salt`, `universe`, `params` are **immutable while running** — returns `409` if you try. Stop the experiment first.
| Name | Type | Req | Description |
|---|---|---|---|
| allocation_pct | integer | – | Basis-points allocation (0–10000). Use `allocation_percent` (0–100) for percent. Immutable while the experiment is running. |
| allocation_percent | number | – | Allocation as a **percentage** (0–100). Friendlier alias for `allocation_pct`; converted to basis points server-side. Wins over `allocation_pct` if both are supplied. Immutable while running. |
| audience | – | – | – |
| bucket_by | – | – | – |
| description | – | – | – |
| folder | – | – | Optional folder name grouping items in the dashboard. Alphanumeric, `_` or `-` (no `/`). Part of the SDK lookup key (`<folder>/<name>`). |
| goal_metric | object | – | Inline metric — a DSL `query`, or an `event` (+ `aggregation`/`value`) the server compiles into one. |
| groups | array | – | Replacement groups. Weights must sum to `10000 − reserved_headroom`. Existing weights/values are immutable while running; a new variant may be appended into the reserved tail. |
| guardrail_metrics | array | – | Replaces the guardrail set wholesale (event auto-upserted per entry). |
| holdout_gate | – | – | Per-experiment holdout gate — the name of a `holdout`-type flag, or `null` to clear. A caller the flag passes is held out. |
| hypothesis | – | – | – |
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
| min_runtime_days | integer | – | – |
| min_sample_size | integer | – | – |
| name | string | – | Stable experiment key. Single segment or `folder.name` (a-z, 0-9, `_`/`-`; max 128 chars). Used by SDKs as `Shipeasy.getExperiment(user, '<name>')`. Immutable after create. |
| owner_email | – | – | – |
| params | object | – | **Deprecated** — the universe owns the config schema (`param_schema`). Retained for back-compat. Map of param-name → scalar type. |
| reserved_headroom | integer | – | Basis points of the split kept empty for appended variants. Group weights must sum to `10000 − reserved_headroom`. May be shrunk (never grown into existing weights) while running when appending a var… |
| salt | string | – | Hash salt. Immutable while running. |
| sequential_testing | boolean | – | – |
| significance_threshold | number | – | – |
| tag | – | – | – |
| targeting_gate | – | – | – |
| universe | string | – | New universe name. Immutable while running. Returns `422` if the universe doesn't exist. |
No output schema declared.
No examples provided.
release_flags_activity ~140
List gate activity. Returns recent audit rows for one gate (create, update, enable, disable, delete) ordered newest first. Use the `limit` query parameter to cap the result (1–100, default 20).
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
| limit | integer | – | Max rows to return (1–100). Defaults to 20. |
No output schema declared.
No examples provided.
release_flags_archive ~108
Delete a feature gate. Soft-deletes the gate. Returns 409 if the gate is still referenced by a running experiment as a targeting gate — stop the experiment first.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
No output schema declared.
No examples provided.
release_flags_attributes_archive ~90
Archive a targeting attribute. Soft-deletes (archives) a targeting attribute.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
No output schema declared.
No examples provided.
release_flags_attributes_create ~235
Declare a targeting attribute. Declare a targeting attribute the SDK reports and gates/experiments can target. `type: enum` requires `enum_values`.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | Optional human note shown in the dashboard. |
| enum_values | – | – | Allowed values when `type` is `enum` (required in that case — 422 otherwise); `null` for non-enum types. |
| listToken | string | – | REQUIRED. The `listToken` returned by the most recent `release_flags_attributes_list` call. It proves you listed existing release flags attributes and confirmed this one doesn't already exist before… |
| name | string | yes | Attribute key (lowercase alphanumeric start, then letters/digits/`_`/`-`; max 64 chars). Immutable after create. |
| required | boolean | – | Whether the attribute must be present on the evaluation context. |
| sdk_path | string | – | Optional dotted path the SDK reads the value from. |
| type | string | yes | Declared value type of a targeting attribute. |
No output schema declared.
No examples provided.
release_flags_attributes_get ~87
Get a targeting attribute. Fetch one targeting attribute by id.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
No output schema declared.
No examples provided.
release_flags_attributes_list ~92
List targeting attributes. Returns every auto-inferred targeting attribute in the project — the `name` and (when known) the value `type` — for building gate/experiment targeting rules.
| Name | Type | Req | Description |
|---|---|---|---|
| q | string | – | Case-insensitive substring filter across the resource's human-readable text columns (e.g. `name`, `title`, `description`). OR-matched across those columns; omit to return everything. |
No output schema declared.
No examples provided.
release_flags_attributes_update ~189
Update a targeting attribute. Update a targeting attribute's type, allowed values, required flag, description, or SDK path. `name` is immutable.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | Optional human note shown in the dashboard. |
| enum_values | – | – | Replacement allowed values (for `enum`), or `null` to clear. |
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
| required | boolean | – | Whether the attribute must be present on the evaluation context. |
| sdk_path | string | – | Optional dotted path the SDK reads the value from. |
| type | string | – | Declared value type of a targeting attribute. |
No output schema declared.
No examples provided.
release_flags_create ~688
Create a feature gate. Creates a new gate. Default `enabled: true` at the supplied `rollout_pct` (`0` = fully dark).
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | Long-form description / runbook. Markdown is rendered in the dashboard. |
| enabled | boolean | – | Master switch. Defaults to `true`. Set `false` to create the gate disabled (evaluates to `false` regardless of rules/rollout); flip on via `POST /{id}/enable` or PATCH. |
| folder | – | – | Optional folder name grouping items in the dashboard. Alphanumeric, `_` or `-` (no `/`). Part of the SDK lookup key (`<folder>/<name>`). |
| group | string | – | Group label for dashboard organisation (e.g. team or product area). |
| listToken | string | – | REQUIRED. The `listToken` returned by the most recent `release_flags_list` call. It proves you listed existing release flags and confirmed this one doesn't already exist before creating it. Call `rel… |
| name | string | yes | Stable gate key used by SDKs (`Shipeasy.checkGate(user, '<name>')`). Single segment or `folder.name`. Lowercase letters, digits, `_` or `-`; max 128 chars. Immutable after create — rename = delete +… |
| owner_email | string | – | Owner contact. Displayed verbatim; not used for auth. |
| rollout_pct | integer | – | Initial rollout in **basis points** (0–10000 = 0%–100%) — `100` here means **1%**, not 100%. Use `rollout_percent` (0–100) below if you'd rather think in percent. Use `0` to create the gate dark and… |
| rollout_percent | number | – | Initial rollout as a **percentage** (0–100, fractional ok). Friendlier alias for `rollout_pct`; converted internally to basis points (e.g. `100` here = 10000 bp = 100%). If both `rollout_pct` and `ro… |
| rules | array | – | Targeting predicates. AND-combined. If non-empty, the gate returns `true` only for callers that satisfy every rule **and** fall under `rollout_pct`. |
| salt | string | – | Hash salt for percentage bucketing. Auto-generated if omitted. Provide explicitly to keep a gate's buckets stable across delete/recreate. **Immutable after create** — there is no PATCH for `salt` bec… |
| stack | – | – | Optional gatekeeper stack. When provided, takes precedence over `rules` + `rollout_pct` at evaluation time. Omit (or pass `null`) for a flat gate. |
| title | string | – | Human-readable title shown in the dashboard. Free-form, no key format constraint. |
| type | string | – | Gate kind. `targeting` (default) is a normal flag with the full builder. `holdout` is a **restricted** flag — only a public rollout % and a whitelist are allowed; attribute rules and a gatekeeper sta… |
No output schema declared.
No examples provided.
release_flags_disable ~114
Disable a gate. Sets `enabled: false` so the gate evaluates to `false` for every caller, regardless of `rollout_pct` or `rules`. Use as a quick kill switch.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
No output schema declared.
No examples provided.
release_flags_enable ~94
Enable a gate. Sets `enabled: true`. The current `rollout_pct` is preserved.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
No output schema declared.
No examples provided.
release_flags_get ~116
Get one gate. Returns the full gate row — including the gatekeeper `stack`, resolved creator/last-editor emails, and the edit `version` — for one gate, addressed by id or `name`.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
No output schema declared.
No examples provided.
release_flags_list ~127
List feature gates. Returns a single page of gates ordered by `updated_at desc, id desc`. Use the `cursor` query parameter to paginate.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | Opaque cursor returned in the previous page's `next_cursor`. Omit for the first page. |
| limit | integer | – | Page size (1–500). Defaults to 100. |
| q | string | – | Case-insensitive substring filter across the resource's human-readable text columns (e.g. `name`, `title`, `description`). OR-matched across those columns; omit to return everything. |
No output schema declared.
No examples provided.
release_flags_templates_archive ~108
Delete a gate template. Soft-deletes (archives) a **customer** template. Returns `409` if `id` names a read-only built-in template.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
No output schema declared.
No examples provided.
release_flags_templates_create ~205
Create a gate template. Creates a per-project (customer) targeting-rule template. Built-ins are read-only and cannot be created here. Returns `409` if a template with this `name` already exists in the project.
| Name | Type | Req | Description |
|---|---|---|---|
| auto | boolean | – | Mark the attribute as request-derived (resolved at the SDK edge). |
| category | string | – | – |
| description | string | – | One-liner shown in pickers and matched by the list `query` filter. |
| icon_key | string | – | Display-only icon hint. |
| listToken | string | – | REQUIRED. The `listToken` returned by the most recent `release_flags_templates_list` call. It proves you listed existing release flags templates and confirmed this one doesn't already exist before cr… |
| name | string | yes | Human label. Unique per project. |
| rules | array | yes | The rule definition captured by the template. |
No output schema declared.
No examples provided.
release_flags_templates_get ~108
Get one gate template. Returns a single template by its `id` — a built-in slug (`country`) or a customer `gtpl_…` id.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
No output schema declared.
No examples provided.
release_flags_templates_list ~146
List gate templates. Returns the merged targeting-rule template catalog — read-only **built-ins first** (the `@team`/`@owner` audience aliases, country, email-domain, region presets, …), then this project's **customer** templates. Each item carries a `rules: [{ attr, op, value }]` definition; the …
| Name | Type | Req | Description |
|---|---|---|---|
| q | string | – | Case-insensitive substring filter across the resource's human-readable text columns (e.g. `name`, `title`, `description`). OR-matched across those columns; omit to return everything. |
| query | string | – | Deprecated alias for `q`, kept working for one release. Prefer `q`. |
No output schema declared.
No examples provided.
release_flags_templates_update ~154
Update a gate template. Partial update of a **customer** template. `rules` replaces the list wholesale. Returns `409` if `id` names a read-only built-in template.
| Name | Type | Req | Description |
|---|---|---|---|
| auto | boolean | – | – |
| category | string | – | – |
| description | string | – | – |
| icon_key | – | – | – |
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
| name | string | – | – |
| rules | array | – | – |
No output schema declared.
No examples provided.
release_flags_update ~506
Update a feature gate. Partial update — only supplied fields change. Array fields (`rules`, `stack`) **replace** wholesale; there is no merge or append.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | Long-form description / runbook. Markdown is rendered in the dashboard. |
| enabled | boolean | – | Master switch. `false` makes the gate evaluate to `false` for every caller regardless of `rollout_pct`, `rules`, or `stack` — use as kill switch. |
| folder | – | – | Optional folder name grouping items in the dashboard. Alphanumeric, `_` or `-` (no `/`). Part of the SDK lookup key (`<folder>/<name>`). |
| group | string | – | Group label for dashboard organisation (e.g. team or product area). |
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
| owner_email | string | – | Owner contact. Displayed verbatim; not used for auth. |
| rollout_pct | integer | – | New rollout in **basis points** (0–10000 = 0%–100%) — `100` here means **1%**. Use `rollout_percent` (0–100) below for percent. Omit both to leave unchanged. |
| rollout_percent | number | – | New rollout as a **percentage** (0–100). Friendlier alias for `rollout_pct`; converted internally. Wins over `rollout_pct` if both are supplied. Omit both to leave unchanged. |
| rules | array | – | Replaces the rule list wholesale. To add a value to an `in` rule, send the full new `rules` array with the augmented `value` (e.g. previous `['US','CA']` → `['US','CA','GB']`). |
| stack | – | – | Replaces the gatekeeper stack wholesale. Send `null` to revert to flat `rules` + `rollout_pct` evaluation. |
| title | string | – | Human-readable title shown in the dashboard. Free-form, no key format constraint. |
| type | string | – | Gate kind. Switching to `holdout` requires the gate carry only a public rollout % + whitelist (attribute rules / stack are rejected). |
No output schema declared.
No examples provided.
release_flags_whitelist ~107
Read a gate's whitelist. Returns the gate's whitelist — the always-first allowlist that admits the listed identities before any targeting rule or percentage rollout is evaluated.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
No output schema declared.
No examples provided.
release_flags_whitelist_add ~199
Add entries to a gate's whitelist. Adds identities to the gate's whitelist, creating the block if the gate doesn't have one yet. Entries already on the list are skipped, so the call is idempotent and safe to retry.
| Name | Type | Req | Description |
|---|---|---|---|
| attr | – | – | Identity attribute to match on. Only honoured when the gate has no whitelist yet (this call creates it); passing an attribute that disagrees with an existing whitelist is a 409 rather than a silent r… |
| entries | array | yes | Identities to admit. Already-listed entries are skipped, so the call is idempotent. |
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
No output schema declared.
No examples provided.
release_flags_whitelist_remove ~136
Remove entries from a gate's whitelist. Removes identities from the gate's whitelist. Entries that aren't on the list are skipped, so the call is idempotent.
| Name | Type | Req | Description |
|---|---|---|---|
| entries | array | yes | Identities to stop admitting. Entries that aren't listed are skipped, so the call is idempotent. |
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
No output schema declared.
No examples provided.
release_flags_whitelist_set ~172
Replace a gate's whitelist. Replaces the gate's whole whitelist with `entries`, creating the block if the gate didn't have one. Idempotent — the same call twice leaves the same list.
| Name | Type | Req | Description |
|---|---|---|---|
| attr | – | – | Identity attribute to match on. Defaults to the whitelist's current attribute, or `email` when the gate has no whitelist yet. |
| entries | array | yes | The complete whitelist after the call. Pass `[]` to remove the whitelist from the gate entirely. |
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
No output schema declared.
No examples provided.
release_killswitch_archive ~102
Delete a killswitch. Soft-deletes the killswitch and rebuilds the project's flags KV blob so SDKs stop seeing it.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
No output schema declared.
No examples provided.
release_killswitch_create ~266
Create a killswitch. Creates a new killswitch with `value` (default `false`) applied to **every** env at version 1.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | Optional free-form description shown in the dashboard. Max 512 chars. |
| folder | – | – | Optional folder name grouping items in the dashboard. Alphanumeric, `_` or `-` (no `/`). Part of the SDK lookup key (`<folder>/<name>`). |
| listToken | string | – | REQUIRED. The `listToken` returned by the most recent `release_killswitch_list` call. It proves you listed existing release killswitch and confirmed this one doesn't already exist before creating it.… |
| name | string | yes | Stable config/killswitch key in `folder.name` form (two lowercase segments separated by a dot, e.g. `pricing.tiers`). Immutable after create. |
| switches | object | – | Initial per-switch overrides applied to every env. Empty/omitted leaves the killswitch with only the flat `value`. |
| value | boolean | – | Default value applied to every env at creation. Defaults to `false`. Use `true` to ship the killswitch pre-tripped. |
No output schema declared.
No examples provided.
release_killswitch_get ~105
Get one killswitch. Returns the killswitch metadata plus the latest published `value`/`switches`/`version` per env.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
No output schema declared.
No examples provided.
release_killswitch_list ~143
List killswitches. Returns a single page of killswitches ordered by `updated_at desc, id desc`. Each row includes the latest published `value`/`switches`/`version` per env.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | Opaque cursor returned in the previous page's `next_cursor`. Omit for the first page. |
| limit | integer | – | Page size (1–500). Defaults to 100. |
| q | string | – | Case-insensitive substring filter across the resource's human-readable text columns (e.g. `name`, `title`, `description`). OR-matched across those columns; omit to return everything. |
No output schema declared.
No examples provided.
release_killswitch_set ~170
Set one switch entry. Sets or updates a single `switchKey` on a single `env`. Publishes one new version on that env only — other envs untouched.
| Name | Type | Req | Description |
|---|---|---|---|
| env | string | yes | Target environment. One of the project's configured envs (`dev`, `staging`, `prod`). |
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
| switchKey | string | yes | Switch key to set. |
| value | boolean | yes | New boolean value for this `switchKey` on this `env`. |
No output schema declared.
No examples provided.
release_killswitch_set_value ~168
Set the flat value on one env. Sets the flat `value` on a single `env`, publishing one new version on that env only. `switches` and other envs are untouched.
| Name | Type | Req | Description |
|---|---|---|---|
| env | string | yes | Target environment. One of the project's configured envs (`dev`, `staging`, `prod`). |
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
| value | boolean | yes | Flat boolean to publish on `env`. Publishes a new version on that env only. |
No output schema declared.
No examples provided.
release_killswitch_toggle ~267
Toggle a killswitch or one of its switches. Flips a killswitch on one environment and publishes a new version there. This is the one-call incident verb: it reads the current value, flips it, and publishes, so you don't have to fetch the killswitch first.
| Name | Type | Req | Description |
|---|---|---|---|
| env | – | – | Environment to publish on. Defaults to `prod` — the environment an incident response means when it says "kill it". |
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
| switchKey | – | – | Which target to flip. Omit (or `null`) to flip the killswitch's own flat `value`; name a switch key to flip that nested sub-switch instead, creating the entry if it doesn't exist yet. |
| value | – | – | The value to publish. Omit (or `null`) to flip whatever is stored now — read-modify-write in one call. Pass an explicit `true`/`false` to make the call idempotent, so a retry can't undo the first att… |
No output schema declared.
No examples provided.
release_killswitch_unset ~150
Remove one switch entry. Removes a single `switchKey` from the `switches` map on a single `env`. Publishes a new version on that env.
| Name | Type | Req | Description |
|---|---|---|---|
| env | string | yes | Target environment. One of the project's configured envs (`dev`, `staging`, `prod`). |
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
| switchKey | string | yes | Switch key to remove. |
No output schema declared.
No examples provided.
release_killswitch_update ~237
Update a killswitch. Partial update applied to **every** env. Setting `value`/`switches` publishes a new version per env. Description-only patches don't bump versions.
| Name | Type | Req | Description |
|---|---|---|---|
| description | – | – | New description, or `null` to clear it. Max 512 chars. |
| folder | – | – | Optional folder name grouping items in the dashboard. Alphanumeric, `_` or `-` (no `/`). Part of the SDK lookup key (`<folder>/<name>`). |
| id | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
| switches | object | – | Replace the switches map wholesale on every env. To edit a single entry on a single env use `PUT /{id}/switch` instead. |
| value | boolean | – | Flat value applied to every env. Publishes a new version per env when set. Omit to leave values unchanged. |
No output schema declared.
No examples provided.
tags_get ~212
Read an item's tags. Returns the tags attached to one item. The item is addressed by kind (`entityType`) plus its handle, so the same call reads tags off a queue item, a flag, a config, a kill switch, a metric, a tracked error, an alert rule, or an experiment.
| Name | Type | Req | Description |
|---|---|---|---|
| entityId | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
| entityType | string | yes | The kind of item a tag set hangs off: `ops` (any queue item — bug, feature request, error/alert/measure-plan ticket), `flag` (feature gate), `config` (dynamic config), `killswitch`, `metric`, `error`… |
No output schema declared.
No examples provided.
tags_list ~76
List the project's tags. Returns every tag in the project — the shared roster any item (queue items, flags, configs, kill switches, metrics, tracked errors, alert rules, experiments) can carry. Sorted by name.
| Name | Type | Req | Description |
|---|---|---|---|
| q | string | – | Case-insensitive substring filter on the tag name. Omit to return every tag. |
No output schema declared.
No examples provided.
tags_set ~276
Replace an item's tags. Replaces the item's whole tag set with `tags`: names not yet in the project are created, attached names not in the list are detached, and `[]` clears every tag. Names are deduped case-insensitively, reusing an existing tag's casing (sending `iOS` when `ios` exists attaches `io…
| Name | Type | Req | Description |
|---|---|---|---|
| entityId | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
| entityType | string | yes | The kind of item a tag set hangs off: `ops` (any queue item — bug, feature request, error/alert/measure-plan ticket), `flag` (feature gate), `config` (dynamic config), `killswitch`, `metric`, `error`… |
| tags | array | yes | The complete tag set the item should carry — tags not listed are detached. Names are get-or-created (a new name mints a project tag), deduped case-insensitively; `[]` clears every tag. |
No output schema declared.
No examples provided.
tags_update ~273
Add or remove tags on an item. Edits an item's tags incrementally: attaches every name in `add` (creating project tags as needed) and detaches every name in `remove`, leaving the item's other tags untouched. Matching is case-insensitive; a name in both lists ends up removed.
| Name | Type | Req | Description |
|---|---|---|---|
| add | array | – | Tag names to attach (get-or-created by name, case-insensitive). Already-attached names are a no-op. |
| entityId | string | yes | A resource path identifier — an opaque `xxx_<ULID>` id (~30 chars) or the resource's `name`/`key`. 1–128 characters; the upper bound matches the longest name/key any resource accepts, so an over-long… |
| entityType | string | yes | The kind of item a tag set hangs off: `ops` (any queue item — bug, feature request, error/alert/measure-plan ticket), `flag` (feature gate), `config` (dynamic config), `killswitch`, `metric`, `error`… |
| remove | array | – | Tag names to detach (case-insensitive). Names the item doesn't carry are a no-op. A name in both lists is removed. |
No output schema declared.
No examples provided.
How do I install the ai.shipeasy/mcp server?
ai.shipeasy/mcp runs locally as an npm package, launched with npx -y @shipeasy/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 · @shipeasy/mcp
claude mcp add ai-shipeasy-mcp -- npx -y @shipeasy/mcp
What is the ai.shipeasy/mcp server?
ai.shipeasy/mcp is listed in the public MCP registry as ai.shipeasy/mcp. Feature flags, A/B experiments, kill switches, dynamic config & i18n, Shipeasy MCP server. This page covers its npm package (@shipeasy/mcp).
Is the ai.shipeasy/mcp server safe to use?
ai.shipeasy/mcp scores 94 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 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 ai.shipeasy/mcp server expose?
ai.shipeasy/mcp exposes 180 tools: projects_upsert, auth_check, auth_login, auth_logout, api_keys_create, and 175 more. Their descriptions and schemas cost roughly 41,944 tokens of context every time the server is loaded.
Is the ai.shipeasy/mcp server still maintained?
ai.shipeasy/mcp 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.
What licence is the ai.shipeasy/mcp server under?
ai.shipeasy/mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.