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 (12 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 →
ops_feature ~493
File a feature request.. Files one queue item — a bug report or a feature request — and fires the project's connectors (GitHub issue / Slack). `type` selects which; only the two user-fileable types are accepted (`error`/`alert` tickets are auto-filed by the platform). Returns the new id and per-projec…
| Name | Type | Req | Description |
|---|---|---|---|
| assigneeId | – | – | The `users.id` of the person to assign as owner at creation, or `null`. |
| context | – | – | Arbitrary capture context, or `null`. |
| delegateConnectorId | string | – | The agent connector the filer chose to delegate this item to at creation. When set, the server launches that one agent and skips any tag-rule auto-launch, so the filer's choice prevails and only one… |
| description | string | – | What the feature is. |
| listToken | string | – | REQUIRED. The `listToken` returned by the most recent `ops_list` call. It proves you listed existing ops and confirmed this one doesn't already exist before creating it. Call `ops_list` first if you… |
| notify | – | – | Where this request's completion notification lands. |
| pageUrl | – | – | URL of the page the request relates to, or `null`. |
| priority | – | – | Initial triage priority, or `null`. |
| reporterEmail | – | – | Email of the reporter, or `null`. |
| status | – | – | Initial lifecycle status; defaults to `open` when omitted. |
| subscribers | array | – | Emails of teammates to subscribe to this item's Slack pings at creation. |
| tags | array | – | Tag names to label the item with, e.g. `["ios", "checkout"]`. Each name is matched case-insensitively against the project's existing tags and reuses that tag (keeping its stored casing) when one matc… |
| title | string | yes | One-line feature-request title (no leading/trailing whitespace). |
| trail | string | – | File the request on this trail (`T-12` or the trail's id) instead of the open queue. The item records `discoveredSource` as `agent` (or `person` when a person files it). |
| useCase | string | – | Why it's needed / the use case. |
| userAgent | – | – | Reporter's user-agent string, or `null`. |
No output schema declared.
No examples provided.
ops_fired_alerts_list ~98
List fired alerts. Returns the project's FIRED alerts as a **bare JSON array** (no pagination envelope), ordered by `createdAt desc`. Defaults to the currently-firing ones (`status=active`); pass a `status` to widen to resolved/dismissed history or `all`.
| Name | Type | Req | Description |
|---|---|---|---|
| status | string | – | Filter by lifecycle state. Defaults to `active` (currently firing); `all` returns every status. |
No output schema declared.
No examples provided.
ops_fired_alerts_update ~260
Update a fired alert. Triage writes on one fired alert — the only mutations this surface allows. All body fields are optional (at least one required); only the fields present are changed.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | – | – | AGENT owner — a connected trigger connector's id (`connectors.id`), the built-in `"jarvis"` (Enterprise plan only — rejected with `403` otherwise), or `null` to clear. Stored in `assigneeConnectorId`… |
| assigneeId | – | – | PERSON owner — a `users.id`, or `null` to clear the assignment. |
| 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… |
| status | string | – | New lifecycle state, written through to the queue item (`resolved` / `wont_fix` / `open`). `resolved` / `dismissed` stamp their timestamp; `active` re-opens and clears both. |
No output schema declared.
No examples provided.
ops_get ~121
Get one queue item. Fetch a single queue item by its per-project `number` or full id.
| Name | Type | Req | Description |
|---|---|---|---|
| handle | 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… |
| include | string | – | `linked` inlines the content of every other member of the item's link group as `linkedItems`. |
No output schema declared.
No examples provided.
ops_group ~507
Update a linked group. Applies `status` and/or `priority` to every item in this item's link group — the items tied to it, directly or through a chain, by blocked-by / blocking / duplicate-of links (see `group` on `ops get`). Each member goes through the normal item update, so activity, audit, run cl…
| Name | Type | Req | Description |
|---|---|---|---|
| handle | 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… |
| priority | – | – | Triage priority, or `null` when not set (in an update, `null` clears it). |
| status | string | – | Lifecycle status of a queue item. The working flow is `open` → `in_progress` → `ready_for_qa` → `resolved` (or `wont_fix`, terminal from any earlier stage). `blocked` marks an item that can't progres… |
No output schema declared.
No examples provided.
ops_investigations_create ~492
Record an investigation. Append one structured investigation record to a queue item — the AI-write seam the cockpit's detail panel renders read-only. Post your findings (`kind: investigated`), a blocking question for the team (`kind: question`), or how to verify the fix (`kind: ready_for_qa` with `qaN…
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | The agent type producing the record — pass your own type when you are a coding agent. |
| completedAt | string | – | ISO-8601 timestamp the work finished. |
| confidence | string | – | Self-reported confidence in the record. |
| connectorId | string | – | The trigger-connector row id the agent ran through. |
| durationMs | integer | – | Run duration in milliseconds. |
| findings | string | – | The full findings write-up (markdown). |
| handle | 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 | Which lifecycle stage the record documents. |
| listToken | string | – | REQUIRED. The `listToken` returned by the most recent `ops_investigations_list` call. It proves you listed existing ops investigations and confirmed this one doesn't already exist before creating it.… |
| model | string | – | The model the agent ran on. |
| prNumber | integer | – | A PR the record references. |
| prUrl | string | – | HTML URL of that PR. |
| qaNotes | string | – | How to verify the fix — QA notes (markdown). |
| question | string | – | A blocking question for the team (markdown). |
| sessionId | string | – | The agent-run session id, so the dashboard can deep-link to the run. |
| sources | array | – | The files/links inspected. |
| startedAt | string | – | ISO-8601 timestamp the work started. |
| summary | string | – | One-line summary of the record. |
| tokensUsed | integer | – | Tokens the run consumed. |
| visibility | string | – | Record visibility. Defaults to `published`; `draft` keeps it out of the panel. |
No output schema declared.
No examples provided.
ops_investigations_list ~133
List an item's investigation records. The structured, read-only investigation records on a queue item — the findings / blocking questions / QA notes an AI agent posted while working it, plus its `working` run rows. Returns `published` records only, newest first (max 50).
| Name | Type | Req | Description |
|---|---|---|---|
| handle | 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.
ops_investigations_update ~479
Update an investigation record. Update one existing investigation record in place — the write-back seam for the `working` run record you were handed when a run was launched. Fill in the `summary`/`findings`, attach the fixing PR, record your `confidence` and the `sources` you inspected, or flip its `kind` of…
| Name | Type | Req | Description |
|---|---|---|---|
| completedAt | string | – | ISO-8601 timestamp the work finished. Set it (or flip `kind` off `working`) to mark a run record done. |
| confidence | string | – | Self-reported confidence in the record. |
| durationMs | integer | – | Run duration in milliseconds. |
| findings | string | – | The full findings write-up (markdown). |
| handle | 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… |
| investigationId | 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 | – | Reclassify the record's lifecycle stage (e.g. flip a `working` run into `investigated` once findings land). |
| model | string | – | The model the agent ran on. |
| prNumber | integer | – | A PR the record references. |
| prUrl | string | – | HTML URL of that PR. |
| qaNotes | string | – | How to verify the fix — QA notes (markdown). |
| question | string | – | A blocking question for the team (markdown). |
| sessionId | string | – | The agent-run session id, so the dashboard can deep-link to the run. |
| sources | array | – | The files/links inspected. |
| summary | string | – | One-line summary of the record. |
| tokensUsed | integer | – | Tokens the run consumed. |
| visibility | string | – | Record visibility. `draft` keeps it out of the panel; `published` surfaces it. |
No output schema declared.
No examples provided.
ops_link_pr ~251
Link a fixing PR. Record a pull request that fixes a queue item. An item can carry several PRs: each call ADDS one (re-linking a linked PR is a no-op), `unlink: true` removes one, and `prNumber: null` clears them all. `connectorData.github.prs` lists them; `github.pr` is the primary one (newest…
| Name | Type | Req | Description |
|---|---|---|---|
| handle | 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… |
| prNumber | – | yes | PR number to ADD to the item's linked PRs (re-linking one already linked is a no-op). `null` unlinks EVERY PR on the item. |
| prUrl | string | – | Explicit PR URL. Required for error/alert tickets (no GitHub issue to derive the URL from). |
| unlink | boolean | – | Remove just this PR (`prNumber`, or `prUrl` when given) from the item instead of adding it. |
No output schema declared.
No examples provided.
ops_links ~316
Link related items. Edits how this queue item relates to others: which items block it ("blocked by"), which items it blocks ("blocking"), and which item it duplicates ("duplicate of"). The blocker lists are incremental — already-linked or never-linked items are no-ops and every other relation is …
| Name | Type | Req | Description |
|---|---|---|---|
| addBlockedBy | array | – | Items (number or id) to record as blocking this one. Already-linked items are a no-op. |
| addBlocking | array | – | Items (number or id) this one blocks. Already-linked items are a no-op. |
| duplicateOf | – | – | Mark this item as a duplicate of another (number or id), replacing any earlier canonical; `null` clears it. Omit to leave it unchanged. While the canonical is still open, the item closes as `wont_fix… |
| handle | 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… |
| removeBlockedBy | array | – | Items (number or id) to stop recording as blocking this one. Unlinked items are a no-op. |
| removeBlocking | array | – | Items (number or id) this one should stop blocking. Unlinked items are a no-op. |
No output schema declared.
No examples provided.
ops_list ~905
List the operational queue (bugs, feature requests, errors, alerts, measurement plans) in work order — highest priority first, oldest first within a priority. PAGING: `limit` (page size, 1–500) is REQUIRED — the call fails without it. Start at `offset: 0` and add `limit` to `offset` for the next page; a page shorter than `limit` is the last one. FILTERS (all optional, combined with AND, applied before paging): `type` = bug | feature_request | error | alert | measure_plan; `status` = open | in_progress | investigating_by_ai | blocked | ready_for_qa | resolved | wont_fix | pending_approval | unresolved | all — DEFAULTS TO `unresolved` (omitted = items still being worked: open, in_progress, blocked, ready_for_qa…; no resolved or wont_fix ones). Pass `status: "all"` to include resolved and wont_fix too (pending_approval is only returned when asked for exactly); `priority` = critical | high | medium | nice_to_have; `owner` = a person (id, email or name) or an agent (connector id, name or handle, e.g. "Claude"); `scope: "ready"` = what to work on now — open items nobody is working (no open run) that are unowned or were reopened after an earlier run. Use `scope: "ready"` to pick the next item, then `ops_ack` it.
| Name | Type | Req | Description |
|---|---|---|---|
| closedSince | string | – | ISO-8601 timestamp. Items still being worked are always returned; `resolved` and `wont_fix` items only when they closed at or after this time (see `closedAt`). Combines with `status` like any other f… |
| limit | integer | yes | Page size — max items to return (1–500). A page shorter than `limit` is the last one. |
| offset | integer | – | Number of items to skip before the page starts. Defaults to 0. The order is stable, so `offset += limit` walks the queue page by page. |
| owner | string | – | Narrow to items owned by one person OR one agent. Matches a person by `users.id`, email, or display name, and an agent by connector id, display name, or kebab-case handle — e.g. `owner=Claude` or `ow… |
| priority | – | – | Filter by triage priority, or `all` (the default). Items with no priority set are returned only under `all`. |
| qaQuestions | string | – | `open` narrows to the items with at least one unanswered QA question — the backlog QA answers first (read each with `ops get`, answer with `ops qa-questions answer`). `all` (the default) applies no s… |
| reporter | string | – | Narrow to items filed by one reporter — an email, matched case-insensitive and exact against `reporterEmail`. Items with no reporter never match. While set, `status=all` also returns `pending_approva… |
| scope | string | – | `ready` narrows to the items ready to be picked up right now: status `open`, no open run (nobody has acked it and is still working), and either unowned (no person and no agent) or reopened (sent back… |
| status | – | – | Filter by one lifecycle status, `unresolved` for every status that is not `resolved` or `wont_fix`, or `all` for every status. Defaults to `all` over HTTP; the CLI and MCP tool default to `unresolved… |
| type | – | – | Filter by item type, or `all` (the default). Every type a returned item can carry is filterable, including the auto-filed ones. |
No output schema declared.
No examples provided.
ops_memory_search ~380
Search project memory. What the project already learned from the tickets it shipped — the decisions the team made in answered questions, what QA found, which files a feature lives in, the PR that shipped it, and the requests that were turned down. Every entry is derived from the item's own records (…
| Name | Type | Req | Description |
|---|---|---|---|
| item | string | – | A queue item — its per-project number (e.g. `7`) or full id. Its title and description become the query; its own entries are excluded. |
| kind | string | – | What a project-memory entry records. `shipped` — an item that reached `ready_for_qa`/`resolved`: what was asked, what the run found, the files it touched, the PR. `declined` — an item closed `wont_fi… |
| limit | integer | – | Maximum entries to return (1-50). Defaults to 10. |
| paths | string | – | Comma-separated repo-relative files or directories, e.g. `apps/web/src/checkout/,packages/billing/src/retry.ts`. |
| q | string | – | Free-text query, e.g. `checkout retry`. |
| trail | string | – | A trail — its handle (e.g. `T-12`) or full id. Its title, intent and goal become the query; its own entries and its items' are excluded. |
No output schema declared.
No examples provided.
ops_notify ~221
Raise an attention notification. Raise a 'needs your attention' bell notification. Create-only and idempotent on `dedupeKey` — re-raising with the same key updates the one card instead of stacking duplicates. It never reads, marks read, or deletes the feed, so it is safe for restricted ops keys.
| Name | Type | Req | Description |
|---|---|---|---|
| dedupeKey | string | – | Stable per-escalation key (e.g. `feedback:7`) so re-runs dedupe to one row. |
| href | – | – | Dashboard-relative deep link to the related item. `null` is accepted and treated as "no link". |
| steps | array | – | Ordered steps the human should take to unblock — self-contained (the human reads only this card, not the agent's transcript), 3–6 steps, each naming the exact file, command, env var, or dashboard pag… |
| summary | string | yes | One sentence: why it can't be fixed in code. Renders markdown. |
| title | string | yes | One-line headline of what's blocked. |
No output schema declared.
No examples provided.
ops_qa_notes_create ~352
Add a QA note to an item. Append one typed QA note to a queue item. `kind` is `narrowing` (what now passes vs what still fails), `clarification` (what "fixed" now means), `verification` (requires a `verdict` of `pass` or `fail`, and `body` says what was checked) or `correction` (withdraws an earlier fr…
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | The agent type writing the note — pass your own type when you are QA automation. Omitted, the note is attributed to the caller's identity. |
| body | string | yes | The note (markdown). |
| handle | 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 | What a QA note is — `narrowing` (only part of the bug still fails), `clarification` (changes what "fixed" means), `verification` (a pass/fail verdict on a fix) or `correction` (withdraws an earlier f… |
| listToken | string | – | REQUIRED. The `listToken` returned by the most recent `ops_qa_notes_list` call. It proves you listed existing ops qa notes and confirmed this one doesn't already exist before creating it. Call `ops_q… |
| verdict | string | – | The outcome a `verification` note records. |
No output schema declared.
No examples provided.
ops_qa_notes_list ~204
List an item's QA notes. The typed QA notes on a queue item, newest first (max 200) — narrowing, clarification, verification and correction notes, each with its author and time. They are separate from the comment thread: read these to learn the CURRENT QA state of a ticket (what remains failing, what …
| Name | Type | Req | Description |
|---|---|---|---|
| handle | 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 | – | What a QA note is — `narrowing` (only part of the bug still fails), `clarification` (changes what "fixed" means), `verification` (a pass/fail verdict on a fix) or `correction` (withdraws an earlier f… |
No output schema declared.
No examples provided.
ops_qa_questions_answer ~257
Answer a QA question. Answer one open QA question. The question moves to `answered` and the answer shows on the item. An answered question cannot be answered again (409); ask a new one to follow up. The answerer is the caller's identity; pass `agent` to record it as answered by that agent type's QA…
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | The agent type answering — pass your own type when you are QA automation. Omitted, the answer is attributed to the caller's identity. |
| answer | string | yes | QA's answer (markdown). |
| handle | 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… |
| questionId | 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.
ops_qa_questions_ask ~207
Ask QA a question about an item. Put a question to QA on a queue item — use it when you do not know the answer yourself and QA's decision unblocks the work. The question is open until QA answers it; it surfaces on the item (`ops get` → `qaQuestions`) and in the project-wide QA backlog (`ops list --qa-question…
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | The agent type asking — pass your own type when you are a coding agent. Omitted, the question is attributed to the caller's identity. |
| handle | 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… |
| question | string | yes | What you need QA to answer (markdown). Include what you already tried. |
No output schema declared.
No examples provided.
ops_qa_questions_list ~144
List an item's QA questions. The questions put to QA on a queue item, newest first (max 100), each with QA's answer once given. `ops get` returns the same list as `qaQuestions`.
| Name | Type | Req | Description |
|---|---|---|---|
| handle | 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… |
| status | string | – | Where a QA question stands: `open` (waiting on QA) or `answered`. |
No output schema declared.
No examples provided.
ops_questions_answer ~259
Answer a question. Answer one open question on a queue item — pick option labels in `selected` (exactly one unless the question is `multiSelect`) and/or write a free-text `other`. The question moves to `completed`. When it was the last open question of a `resume` run, that agent is re-fired on t…
| Name | Type | Req | Description |
|---|---|---|---|
| handle | 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… |
| other | string | – | A free-text "Other" answer. |
| questionId | 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… |
| selected | array | – | The option labels picked — exactly one for a single-select question (unless answering only with `other`), one or more for `multiSelect`. |
No output schema declared.
No examples provided.
ops_questions_ask ~306
Ask the team questions about an item. Ask 1–4 structured questions about a queue item — the way to get a decision from a person when the implementation needs one. Each question is the `AskUserQuestion` shape: a short `header` chip, the full `question`, 2–4 `options` (`label` + `description`), and `multiSelect` (ch…
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | The agent type asking — pass your own type when you are a coding agent. Defaults to the run's agent. |
| delivery | string | – | How the answer gets back to the asker — `resume` re-fires the asking run's trigger connector on the item once every question that run asked is answered; `poll` fires nothing and the asker reads `GET… |
| handle | 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… |
| questions | array | yes | 1–4 questions to ask at once. |
| runId | string | – | The run (investigation record id) you are working the item under — the `runId` an ack or a launch handed you. Ties the questions to that run so a `resume` delivery continues it. |
No output schema declared.
No examples provided.
ops_questions_cancel ~196
Withdraw a question. Withdraw one open question you asked — it no longer needs an answer (you found it out yourself, or the item moved on). The question moves to `cancelled` and leaves the detail panel. Withdrawing the last open question of a run delivers nothing.
| Name | Type | Req | Description |
|---|---|---|---|
| handle | 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… |
| questionId | 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.
ops_questions_list ~157
List an item's questions. The structured questions asked on a queue item, with their answers — newest first (max 100). Pull this to read the answers to questions you asked: an answered question reads `status: completed` and carries `answer.selected` (the option labels picked) and `answer.other` (the fr…
| Name | Type | Req | Description |
|---|---|---|---|
| handle | 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… |
| status | – | – | Filter by question status, or `all` (the default). |
No output schema declared.
No examples provided.
ops_review_agents_archive ~107
Archive a review agent. Archive a review agent: it stops running and its key is free to reuse. Evals it already submitted stay on their trails.
| Name | Type | Req | Description |
|---|---|---|---|
| agentId | 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.
ops_review_agents_create ~427
Add a review agent. Add a review agent, from a preset (`preset: security`) or custom (`key`, `name`, `instructions`, and how to read its value). A `push` agent runs on every push to a linked PR through the project's coding-agent trigger (or the one named by `connectorId`) and spends that agent's …
| Name | Type | Req | Description |
|---|---|---|---|
| blocking | boolean | – | – |
| connectorId | string | – | The coding-agent trigger that runs it — a connector id from `ops agents list`. Omitted, the project's first connected trigger runs it. |
| description | string | – | – |
| enabled | boolean | – | – |
| instructions | string | – | What to review and how to score it. |
| key | string | – | Slug the agent's evals are submitted under — lowercase letters, digits and dashes. |
| listToken | string | – | REQUIRED. The `listToken` returned by the most recent `ops_review_agents_list` call. It proves you listed existing ops review agents and confirmed this one doesn't already exist before creating it. C… |
| name | string | – | – |
| polarity | string | – | Which direction is good. Confidence is `higher_is_better`; risk is `lower_is_better`. For a `boolean` agent, `lower_is_better` means a 1 (yes, an issue was found) fails. |
| preset | string | – | A preset id from `ops review-agents list` (e.g. `code-review`, `security`, `risk`, `confidence`, `slop`). |
| threshold | integer | – | – |
| trigger | string | – | When a review agent runs — on every `push` to a trail's linked pull request, or only when a review is requested (`manual`). |
| valueType | string | – | How a review agent's value reads — a `score` from 0 to 100, or a `boolean` signal submitted as 1 (yes) or 0 (no). |
No output schema declared.
No examples provided.
ops_review_agents_list ~43
List review agents. The project's review agents — the evals that score every push to a trail's changes — and the presets that can be added in one call.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
ops_review_agents_update ~307
Change a review agent. Change a review agent's instructions, threshold, polarity, trigger, the connector that runs it, whether it blocks, or switch it off. Its `key` is fixed. Earlier evals keep the verdict they were given.
| Name | Type | Req | Description |
|---|---|---|---|
| agentId | 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… |
| blocking | boolean | – | – |
| connectorId | – | – | – |
| description | – | – | – |
| enabled | boolean | – | – |
| instructions | string | – | – |
| name | string | – | – |
| polarity | string | – | Which direction is good. Confidence is `higher_is_better`; risk is `lower_is_better`. For a `boolean` agent, `lower_is_better` means a 1 (yes, an issue was found) fails. |
| threshold | integer | – | – |
| trigger | string | – | When a review agent runs — on every `push` to a trail's linked pull request, or only when a review is requested (`manual`). |
| valueType | string | – | How a review agent's value reads — a `score` from 0 to 100, or a `boolean` signal submitted as 1 (yes) or 0 (no). |
No output schema declared.
No examples provided.
ops_routing_rules_create ~676
Create a tag automation rule. Appends one rule after the existing ones; existing rules are untouched. The rule fires on a newly filed item carrying any of `tags` (or whose type is in `types`) and applies its actions: `user` assigns a person, `connector` hands the item to a connected coding agent (launching…
| Name | Type | Req | Description |
|---|---|---|---|
| agentPrompt | string | – | Steering prompt for the launched agent. Only kept alongside a `connector`. |
| connector | string | – | Connected coding agent to hand the item to — a connector id from `ops agents list`. |
| enabled | boolean | – | Whether the rule is live. Defaults to `true`. |
| listToken | string | – | REQUIRED. The `listToken` returned by the most recent `ops_routing_rules_list` call. It proves you listed existing ops routing rules and confirmed this one doesn't already exist before creating it. C… |
| priority | string | – | Triage priority of a queue item. The lowest tier is `nice_to_have` (not `low`) — carried over from the feature-request "importance" scale this priority set replaced. |
| skipApproval | boolean | – | Let a matching public-intake ticket skip `pending_approval`. Defaults to `false`. |
| status | string | – | Lifecycle status of a queue item. The working flow is `open` → `in_progress` → `ready_for_qa` → `resolved` (or `wont_fix`, terminal from any earlier stage). `blocked` marks an item that can't progres… |
| subscribers | array | – | Emails notified about matching items. |
| tags | array | – | Tag names the rule matches (case-insensitive). Tags are created on first use. |
| types | array | – | Ticket types the rule also fires on. |
| user | string | – | Person to assign — a user id. |
No output schema declared.
No examples provided.
ops_routing_rules_list ~62
List tag automation rules. The project's tag automation rules in evaluation order. Each rule matches newly filed queue items by tag (or ticket type) and applies its actions — assign a person, launch a connected coding agent, set status or priority, subscribe emails.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
ops_trail_gates_get ~52
Show the merge gates. The project's merge gates for trail changes — branch freshness, human review, agent findings, blocking evals and CI checks — each with whether it is evaluated and whether it blocks.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
ops_trail_gates_set ~964
Set the merge gates. Replace the project's merge gates. Send the whole object (read it with `ops trail-gates get` first).
| Name | Type | Req | Description |
|---|---|---|---|
| agentReview | object | yes | – |
| attributionWindowHours | integer | – | How long after a trail merged an error or alert ticket may be attributed to it. Trails merged inside the window are offered to the investigating agent as candidates. |
| autopilot | object | – | What autopilot may do and spend on one trail. Crossing any one pauses it at a safe point and hands the trail to its owner. The project's defaults live in `trail-gates` `autopilot`. |
| checks | object | yes | – |
| copy | object | – | Release gate. Passes when every copy i18n key exists in every published locale of its profile. Off by default. |
| discovered | object | – | Passes when no item discovered on the trail is open at or above `priority`. Off by default; turn it on to say "a high bug found while building this blocks shipping it". |
| evals | object | yes | – |
| fixRounds | integer | – | How many times the server re-fires the coding agent with a fix prompt after a change's evals or findings fail. After the cap the trail reads `reviewing`, needs a person. `0` turns the loop off. |
| goalWindowDays | integer | – | How many days a delivered trail is watched before its goal metric is judged. A trail is delivered when its plan is approved, every code and tracking item is done and every flag it ships behind is ful… |
| guarded | object | – | Release gate. Passes when every measured resource has at least one guarding alert rule. Off by default. |
| humanReview | object | yes | – |
| intakeMatching | boolean | – | Whether new and still-open errors, alerts, bugs and feature requests are compared with the project's open trails. A confident match attaches the item to the trail with the evidence; a weak one lands… |
| maxGoalReplans | integer | – | How many times shipeasy re-plans a trail on its own after its goal was missed. Each re-plan proposes new options that differ from what was tried. Past the cap the trail is off track and the owner dec… |
| maxParallelRuns | integer | – | How many item runs a trail's build keeps working at once. A build launches an item run for each open item of the current milestone, up to this many; the rest wait for a slot. |
| measured | object | – | Release gate. For a `feature` trail, passes when a measuring experiment or metric exists. Off by default. |
| plan | object | – | Gate. Passes when every release resource the trail's approved plan lists exists on the trail (a flag, kill switch or experiment the person chose while the plan was made). Reads `pending` while a draf… |
| repos | object | – | Per-repo overrides keyed by `owner/repo`. An override replaces the project's `checks.required` for changes in that repo; every other gate stays project-wide. |
| requirePlan | boolean | – | Whether a person approves a trail's plan before it builds. Every trail is planned first — starting an agent on a trail with no approved plan fires a read-only plan run, and the build follows the appr… |
| rollback | object | – | Release gate. For a `feature` trail, passes when a rollback kill switch exists. Off by default. |
| rollout | object | – | How the flag a trail ships behind is ramped after merge — the release controller's plan (see the design doc, the release controller). Part of the plan's release block; the project's defaults live in… |
| shipsDark | object | – | Release gate. Passes when every flag the trail ships behind exists and is not at 100% in prod, so new code merges off. Off by default. |
| upToDate | object | yes | – |
No output schema declared.
No examples provided.
ops_trigger_create_claude ~209
Register a Claude Code scheduled routine as the trigger connector. Creates (or idempotently updates) a coding-agent **trigger** connector — the recurring, unattended run that burns down the ops queue in `--pr` mode. Discriminated on `provider`; only the four Shipeasy-fireable providers are accepted (`claude_trigger`, `cursor_trigger`, `copilo…
| Name | Type | Req | Description |
|---|---|---|---|
| config | object | yes | Non-secret config for a Claude trigger. |
| enabled | boolean | – | Whether the trigger is active on create. |
| events | array | – | Events that auto-fire the routine. Defaults to empty so the trigger does not auto-fire paid runs until events are subscribed. |
| name | string | – | Human-readable connector label. |
| token | string | – | The routine's fire bearer token (secret). **Optional** — a tokenless trigger is recorded but not fireable until a token is added later. Encrypted into the credentials cipher; never persisted in `conf… |
No output schema declared.
No examples provided.
ops_trigger_create_copilot ~192
Register a GitHub Copilot cloud-agent trigger. Creates (or idempotently updates) a coding-agent **trigger** connector — the recurring, unattended run that burns down the ops queue in `--pr` mode. Discriminated on `provider`; only the four Shipeasy-fireable providers are accepted (`claude_trigger`, `cursor_trigger`, `copilo…
| Name | Type | Req | Description |
|---|---|---|---|
| config | object | yes | Non-secret config for a Copilot trigger. |
| enabled | boolean | – | Whether the trigger is active on create. |
| events | array | – | Events that auto-fire a Copilot agent task. Defaults to empty. |
| name | string | – | Human-readable connector label. |
| token | string | yes | Copilot-licensed user PAT (secret). The ops key lives in the repo's GitHub "Agents" secret store and is never sent through Shipeasy. Encrypted; never returned. |
No output schema declared.
No examples provided.
ops_trigger_create_cursor ~228
Register a Cursor cloud-agent trigger (cold-fire; Shipeasy launches the run). Creates (or idempotently updates) a coding-agent **trigger** connector — the recurring, unattended run that burns down the ops queue in `--pr` mode. Discriminated on `provider`; only the four Shipeasy-fireable providers are accepted (`claude_trigger`, `cursor_trigger`, `copilo…
| Name | Type | Req | Description |
|---|---|---|---|
| apiKey | string | yes | Cursor API key that launches the run (secret). Encrypted into the credentials cipher; never returned. |
| config | object | yes | Non-secret config for a Cursor trigger. |
| enabled | boolean | – | Whether the trigger is active on create. |
| events | array | – | Events that auto-fire a cold cloud-agent run. Defaults to empty. |
| name | string | – | Human-readable connector label. |
| opsKey | string | yes | Restricted Shipeasy ops key (secret). Sent as the Bearer for the Shipeasy MCP server handed to each run inline — never in the prompt text or the run env. Encrypted; never returned. |
No output schema declared.
No examples provided.
ops_trigger_create_jules ~205
Register a Google Jules (Gemini) trigger. Creates (or idempotently updates) a coding-agent **trigger** connector — the recurring, unattended run that burns down the ops queue in `--pr` mode. Discriminated on `provider`; only the four Shipeasy-fireable providers are accepted (`claude_trigger`, `cursor_trigger`, `copilo…
| Name | Type | Req | Description |
|---|---|---|---|
| apiKey | string | yes | Jules API key that launches the session (secret). Encrypted into the credentials cipher; never returned. |
| config | object | yes | Non-secret config for a Jules trigger. |
| enabled | boolean | – | Whether the trigger is active on create. |
| events | array | – | Events that auto-fire a Jules session. Defaults to empty. |
| name | string | – | Human-readable connector label. |
| opsKey | string | yes | Restricted Shipeasy ops key, embedded in the prompt (Jules exposes no env channel) (secret). Encrypted; never returned. |
No output schema declared.
No examples provided.
ops_update ~622
Update a queue item. Update a queue item. The body is validated against the item's stored type: a `bug` accepts its content fields (title, steps-to-reproduce, actual/expected result) plus `status`/`priority`/`notify` and a GitHub PR link; a `feature_request` its content (title, description, use-ca…
| Name | Type | Req | Description |
|---|---|---|---|
| actualResult | string | – | Updated actual result. |
| description | string | – | Updated description. |
| expectedResult | string | – | Updated expected result. |
| githubPrNumber | – | – | Link (or, when `null`, unlink) a GitHub pull request to this bug. |
| handle | 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… |
| notify | – | – | Where this item's completion notification lands, or `null`. |
| priority | – | – | Triage priority, or `null` when not set (in an update, `null` clears it). |
| status | string | – | Lifecycle status of a queue item. The working flow is `open` → `in_progress` → `ready_for_qa` → `resolved` (or `wont_fix`, terminal from any earlier stage). `blocked` marks an item that can't progres… |
| stepsToReproduce | string | – | Updated reproduction steps. |
| title | string | – | New bug title (no leading/trailing whitespace). |
| useCase | string | – | Updated use case. |
No output schema declared.
No examples provided.
projects_current ~57
Show the current project. Returns the project the caller's auth header resolves to — plan, status, billing, and which modules are enabled. The server reads the project from the credential, so there is no id parameter. Powers `whoami`.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
projects_update ~978
Update the current project. Update the current project's settings — name, domain, slug, default environment, timezone, experiment-analysis knobs (statistical method, significance threshold, auto-rollback, minimum sample days), and the per-module enable flags. Partial: only the fields you send change.
| Name | Type | Req | Description |
|---|---|---|---|
| autoRollback | boolean | – | Whether a failing guardrail auto-rolls back the experiment. |
| ciConfidence | number | – | Confidence level for the interval surfaced on results (any value in [0.5, 0.999], e.g. 0.90, 0.95, 0.975, 0.99). |
| cupedBaselineDays | integer | – | CUPED baseline window — days of pre-experiment history, frozen at start. |
| cupedMinBaselineUsers | integer | – | CUPED — minimum users with a baseline before it runs at all. |
| cupedMinOverlap | number | – | CUPED selection-bias guard — min share of users with a baseline, else skip. |
| defaultAllocationPct | integer | – | Default traffic allocation (basis points, 1000 = 10%) new experiments start with; overridable per experiment. |
| defaultEnv | string | – | Default environment new resources are scoped to. |
| defaultHoldout | integer | – | Default holdout carve-out (basis points) that seeds each new universe's holdout (0 = none). |
| defaultMei | – | – | Default minimum effect of interest (relative, 0–1) new metrics start with; overridable per metric and per experiment. Null clears it. |
| defaultPower | number | – | Target statistical power (1−β) feeding the realized-MDE calculation. |
| defaultWinsorizePct | integer | – | Default winsorization percentile new metrics start with; overridable per metric. |
| domain | string | – | Lowercase bare hostname (e.g. `acme.com`, `app.acme.com`, `*.acme.com`), or `*` to allow any origin. Full URLs with `https://` are not accepted. The project is keyed by `(owner_email, domain)`, so a… |
| errorAutocloseDays | integer | – | Days an `open` tracked error may go unseen before the nightly sweep auto-resolves it. `0` disables auto-close for this project. |
| errorTicketMinOccurrences | integer | – | Occurrence count a tracked error must cross before an `error` ticket is auto-filed into the ops queue. Requires a paid plan — the request is rejected with 403 on a plan without the `ops_auto_error_is… |
| 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… |
| minRuntimeDays | integer | – | Minimum days an experiment must run before a verdict (peeking guard). |
| minSampleDays | integer | – | Minimum number of days an experiment must run before it can be called. |
| minSampleSize | integer | – | Verdict power guard — minimum users per arm before a ship/hold verdict. |
| moduleConfigs | boolean | – | Enable/disable the dynamic-configs module. |
| moduleEvents | boolean | – | Enable/disable the events module. |
| moduleExperiments | boolean | – | Enable/disable the experiments module. |
| moduleFeedback | boolean | – | Enable/disable the feedback/ops module. |
| moduleGates | boolean | – | Enable/disable the feature-gates module. |
| moduleTranslations | boolean | – | Enable/disable the i18n/translations module. |
| moduleUser | boolean | – | Enable/disable the user-management module. |
| msprtTauMeiFactor | number | – | mSPRT prior width — τ = minimum effect of interest × this factor. |
| msprtTauSdFactor | number | – | mSPRT fallback prior width — τ = this × control SD when no MEI is set. |
| name | string | – | New project name. |
| sigThreshold | string | – | Significance threshold (alpha) for experiment analysis. |
| slug | string | – | URL-safe identifier used in app URLs and SDK config. Lowercase letters, numbers, and hyphens; 2–48 chars; cannot start or end with a hyphen. The caller lowercases the raw slug before sending. |
| srmThreshold | number | – | SRM chi-square p-value below which the run is called invalid. |
| statMethod | string | – | Statistical method the experiment analyzer uses. |
| timezone | string | – | IANA timezone the project's daily analysis runs in. |
No output schema declared.
No examples provided.
projects_upsert ~177
Find-or-create a Shipeasy project by domain (idempotent) and bind the cwd to it via .shipeasy. Use this on fresh installs BEFORE any other write tool — every other write tool refuses to run until .shipeasy exists. Re-running with the same domain returns the existing project unchanged.
| Name | Type | Req | Description |
|---|---|---|---|
| bind | boolean | – | Write .shipeasy after upsert. Default true. Set false to skip binding. |
| domain | string | yes | Hostname-like identifier for the project (e.g. shouks.app, acme.com). Primary key for upsert. |
| name | string | – | Human-readable project name. Defaults to the domain on first create; ignored on later upserts. |
| path | string | – | Directory to write .shipeasy in. Defaults to the MCP server's cwd. |
No output schema declared.
No examples provided.
release_configs_archive ~93
Delete a dynamic config. Soft-deletes the config and rebuilds the project's flags KV blob.
| 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_configs_create ~404
Create a dynamic config. Creates a new config with the given `schema`. The initial `value` (or an empty object) is published as version 1 on **every** env.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | Optional free-form description shown in the dashboard. Max 512 chars. |
| dev | object | – | Seed the **dev** env's initial value (version 1), overriding `value` for dev. Published immediately. Must match `schema`. |
| 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_configs_list` call. It proves you listed existing release configs and confirmed this one doesn't already exist before creating it. Call… |
| 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. |
| prod | object | – | Seed the **prod** env's initial value (version 1), overriding `value` for prod. Published immediately. Must match `schema`. |
| schema | object | yes | JSON Schema (draft 2020-12) describing the shape of the config value. Top-level `type` must be `'object'`; every published value is validated against this schema. |
| staging | object | – | Seed the **staging** env's initial value (version 1), overriding `value` for staging. Published immediately. Must match `schema`. |
| value | object | – | Initial config value. Either a single JSON object applied to every env, or a `{ env: value }` map seeding per-env values. Must match `schema`. Defaults to `{}` on every env when omitted. |
No output schema declared.
No examples provided.
release_configs_get ~104
Get one config. Returns config metadata plus the latest published values per env and any active draft values. Use this to fetch the JSON the editor renders.
| 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_configs_list ~133
List dynamic configs. Returns a single page of configs ordered by `updated_at desc, id desc`. Each row includes the latest published `version` per env and any active drafts.
| 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_configs_update ~371
Update a dynamic config. Partial update. When `value` is supplied it is **republished on every env** (new version per env). A per-env key (`dev`/`staging`/`prod`) publishes a new version to **only that env**, immediately, overriding `value` for it. When `schema` is supplied it replaces the current sch…
| Name | Type | Req | Description |
|---|---|---|---|
| dev | object | – | Publish a new version to the **dev** env only, immediately (no draft). Overrides `value` for dev. Must match the effective schema. |
| 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… |
| prod | object | – | Publish a new version to the **prod** env only, immediately (no draft). Overrides `value` for prod. Must match the effective schema. |
| schema | object | – | Replacement schema. When supplied, the new schema is validated against every published value before it lands. |
| staging | object | – | Publish a new version to the **staging** env only, immediately (no draft). Overrides `value` for staging. Must match the effective schema. |
| value | object | – | Flat value applied to **every** env. Publishes a new version per env. To publish one env only, pass that env's key (`dev`/`staging`/`prod`) instead. |
No output schema declared.
No examples provided.
release_configs_update_schema ~143
Update a config schema. Replaces a config's JSON Schema in place. Every existing published value is re-validated against the new schema before it lands; the update fails if any value no longer validates.
| 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… |
| schema | object | yes | Replacement JSON Schema (draft 2020-12). Validated against every published value before it lands. |
No output schema declared.
No examples provided.
release_experiments_archive ~107
Delete an experiment. Archives the experiment (soft-delete via status transition). Returns `409` if the experiment is still `running` — stop it 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_create ~887
Create an experiment. Creates a new experiment in `draft` status. `name`, `universe`, and `groups` are required; everything else has sensible defaults.
| Name | Type | Req | Description |
|---|---|---|---|
| allocation_pct | integer | – | Share of the (gated) audience allocated to the experiment, in basis points (0–10000 = 0%–100%). `0` = unallocated. Under pooled assignment this is the size of the universe-pool slice claimed. Use `al… |
| allocation_percent | number | – | Allocation as a **percentage** (0–100, fractional ok). Friendlier alias for `allocation_pct`; converted to basis points server-side (e.g. `50` = 5000 bp). If both are set, `allocation_percent` wins. |
| audience | – | – | Audience label shown in the editor. Display-only. |
| bucket_by | – | – | – |
| description | – | – | Free-form description. Max 2000 chars, markdown rendered in the dashboard. |
| 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 | yes | Two or more variants. Weights must sum to `10000 − reserved_headroom`. Existing weights are immutable while running, but a new variant may be appended into the reserved tail. |
| guardrail_metrics | array | – | Up to 10 guardrail metrics defined inline. Each is upserted (event + metric) and attached with role=guardrail. |
| holdout_gate | – | – | Optional per-experiment holdout gate — the name of a `holdout`-type flag (public % + whitelist). A caller the flag passes is *held out* (never assigned, sees the universe defaults). Distinct from the… |
| hypothesis | – | – | Hypothesis statement shown in the editor. Display-only. |
| listToken | string | – | REQUIRED. The `listToken` returned by the most recent `release_experiments_list` call. It proves you listed existing release experiments and confirmed this one doesn't already exist before creating i… |
| min_runtime_days | integer | – | Minimum days the experiment must run before results are considered conclusive. |
| min_sample_size | integer | – | Minimum exposures per group before results are considered conclusive. |
| name | string | yes | 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 | – | – | Owner email. Display-only. |
| params | object | – | **Deprecated** — the universe now owns the config schema (`param_schema`). Retained for back-compat; new experiments should leave this empty and declare params on the universe. Map of param-name → sc… |
| reserved_headroom | integer | – | Basis points of this experiment's split kept empty (0–10000) so a new variant can be appended into it while running without reshuffling. Group weights must sum to `10000 − reserved_headroom`. Default… |
| salt | string | – | Hash salt for bucketing. Auto-generated if omitted. Immutable while running. |
| sequential_testing | boolean | – | Enable sequential testing (always-valid p-values). Requires Premium plan or higher. |
| significance_threshold | number | – | p-value cutoff used by the analysis pass. Defaults to `0.05`. Values other than 0.05 require Pro plan or higher. |
| tag | – | – | Short tag chip rendered next to the name. Display-only. |
| targeting_gate | – | – | Optional gate name (a `targeting`-type flag). Only callers that pass the gate are enrolled in the experiment. |
| universe | string | yes | Name of an existing universe in the project. Returns `422` if the universe doesn't exist. |
No output schema declared.
No examples provided.
release_experiments_get ~96
Get one experiment. Returns the full experiment row including groups, params, allocation, and lifecycle timestamps.
| 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.
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.