From 0822dadd8b115dc59f6f350721ebf3bf10393b92 Mon Sep 17 00:00:00 2001 From: Agent Date: Sat, 10 Oct 2026 22:58:27 +0000 Subject: [PATCH 1/2] feat(plugins): corespeed-cli, a skills-only plugin for Codex on the cs CLI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A second plugin, plugins/corespeed-cli, registers no MCP server. Its one skill has the agent install @corespeed/cs, sign in once in the browser, and find and call CoreSpeed tools from the shell: cs mcp search, cs mcp get, cs mcp call. A client that loads no tool list has no tool-list limit, which is what Codex users in an organization with many connectors need, and it is the shape the OpenAI Plugins Directory accepts for a skills-only plugin. The cs-cli skill (source: plugins/corespeed/skills/cs-cli) catches up with cs 0.5.0: the search → get → call workflow, cs mcp search and cs mcp get in the command table, the memory commands, exit code 6 (a call waiting for a human's approval, and the approval_wait command to run), and Codex's sandbox, which has no network by default. Its intro no longer assumes the MCP plugin is installed. corespeed-cli carries a byte-identical copy; CI fails on drift, on an .mcp.json in the CLI plugin, and on an mcpServers key in its manifest. The MCP plugin's manifests go to 0.2.1 because their bundled skill changed. Verified: Codex 0.151.0 installs corespeed-cli from this marketplace, lists it as installed and enabled, registers no MCP server, and lays down the manifest, the skill and the assets; the HOL plugin scanner scores the tree 86/100 with no high findings; the jq guards pass locally. Co-Authored-By: Claude Fable 5.1 --- .agents/plugins/marketplace.json | 12 ++ .github/workflows/check.yml | 13 +- README.md | 29 ++- .../corespeed-cli/.codex-plugin/plugin.json | 42 ++++ plugins/corespeed-cli/assets/icon.svg | 4 + plugins/corespeed-cli/assets/logo.svg | 5 + plugins/corespeed-cli/skills/cs-cli/SKILL.md | 180 ++++++++++++++++++ plugins/corespeed/.claude-plugin/plugin.json | 2 +- plugins/corespeed/.codex-plugin/plugin.json | 2 +- plugins/corespeed/skills/cs-cli/SKILL.md | 79 +++++++- 10 files changed, 351 insertions(+), 17 deletions(-) create mode 100644 plugins/corespeed-cli/.codex-plugin/plugin.json create mode 100644 plugins/corespeed-cli/assets/icon.svg create mode 100644 plugins/corespeed-cli/assets/logo.svg create mode 100644 plugins/corespeed-cli/skills/cs-cli/SKILL.md diff --git a/.agents/plugins/marketplace.json b/.agents/plugins/marketplace.json index 7d5bd85..4bfc040 100644 --- a/.agents/plugins/marketplace.json +++ b/.agents/plugins/marketplace.json @@ -15,6 +15,18 @@ "authentication": "ON_INSTALL" }, "category": "Developer Tools" + }, + { + "name": "corespeed-cli", + "source": { + "source": "local", + "path": "./plugins/corespeed-cli" + }, + "policy": { + "installation": "AVAILABLE", + "authentication": "ON_USE" + }, + "category": "Developer Tools" } ] } diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 845416f..d2a4386 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -19,7 +19,7 @@ jobs: run: | for f in .agents/plugins/marketplace.json .claude-plugin/marketplace.json \ plugins/corespeed/.codex-plugin/plugin.json plugins/corespeed/.claude-plugin/plugin.json \ - plugins/corespeed/.mcp.json; do + plugins/corespeed/.mcp.json plugins/corespeed-cli/.codex-plugin/plugin.json; do jq empty "$f" || { echo "::error file=$f::invalid JSON"; exit 1; } done - name: The MCP server signs in with OAuth @@ -30,6 +30,17 @@ jobs: jq -e '.mcpServers | length == 1 and (.corespeed | keys == ["type", "url"]) and .corespeed.url == "https://api.corespeed.io/mcp"' \ plugins/corespeed/.mcp.json > /dev/null \ || { echo "::error file=plugins/corespeed/.mcp.json::expected exactly {type, url} pointing at https://api.corespeed.io/mcp"; exit 1; } + - name: The CLI plugin is skills-only and bundles the same cs-cli skill + # corespeed-cli registers no MCP server: that is the point of it (a + # client loads no tool list). Its cs-cli skill is a copy of the MCP + # plugin's, which is the source; a drift here is a stale copy. + run: | + test ! -e plugins/corespeed-cli/.mcp.json \ + || { echo "::error::plugins/corespeed-cli must not carry .mcp.json"; exit 1; } + jq -e 'has("mcpServers") | not' plugins/corespeed-cli/.codex-plugin/plugin.json > /dev/null \ + || { echo "::error file=plugins/corespeed-cli/.codex-plugin/plugin.json::skills-only plugin: no mcpServers"; exit 1; } + cmp -s plugins/corespeed/skills/cs-cli/SKILL.md plugins/corespeed-cli/skills/cs-cli/SKILL.md \ + || { echo "::error::cs-cli skill differs between the plugins; plugins/corespeed/skills/cs-cli/SKILL.md is the source — copy it over"; exit 1; } - name: Both manifests carry the same version run: | codex=$(jq -r .version plugins/corespeed/.codex-plugin/plugin.json) diff --git a/README.md b/README.md index 7f00502..9e3fdf5 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,20 @@ select **Authenticate** (or open **Settings → MCP servers → CoreSpeed**) and finish the sign-in in the browser. In the ChatGPT desktop app the plugin appears under the **CoreSpeed** marketplace once it has been added. +## Codex, CLI only + +```bash +codex plugin marketplace add corespeed-io/cs +codex plugin add corespeed-cli@corespeed +``` + +This plugin registers no MCP server. Its `cs-cli` skill has the agent install +the `cs` command-line tool, sign in once in the browser, and then find and call +CoreSpeed tools from the shell (`cs mcp search`, `cs mcp get`, `cs mcp call`). +Pick it when Codex cannot load your organization's full tool list, or when you +want every call to go through the shell. It is the plugin meant for the +OpenAI Plugins Directory. + ## The `cs` CLI ```bash @@ -45,19 +59,20 @@ cs login organizations, connects apps, and calls tools from a terminal. See the [CLI docs](https://corespeed.io/docs/cli). -## What the plugin contains +## What the plugins contain -| Part | What it does | -| --- | --- | -| MCP server | `https://api.corespeed.io/mcp` with browser sign-in (OAuth 2.1 + PKCE). You never paste an API key. | -| `cs-cli` skill | Using the `cs` CLI: sign-in, API keys, organizations, connectors, remote MCP servers, credit. | -| `cs-api` skill | Calling CoreSpeed over HTTP from code and CI: credentials, `tools/list` and `tools/call`, error codes, credits. | +| Plugin | Part | What it does | +| --- | --- | --- | +| `corespeed` | MCP server | `https://api.corespeed.io/mcp` with browser sign-in (OAuth 2.1 + PKCE). You never paste an API key. | +| `corespeed` | `cs-cli` skill | Using the `cs` CLI: sign-in, finding and calling tools from a shell, memory, API keys, organizations, connectors, remote MCP servers, credit. | +| `corespeed` | `cs-api` skill | Calling CoreSpeed over HTTP from code and CI: credentials, `tools/list` and `tools/call`, error codes, credits. | +| `corespeed-cli` | `cs-cli` skill | The same skill, and nothing else: no MCP server is registered. | If you added CoreSpeed to your client by hand earlier (`claude mcp add` or `codex mcp add`), remove that entry before installing the plugin, so every tool is registered once. -Sign-in happens at `login.corespeed.io`, and the plugin's only server is +Sign-in happens at `login.corespeed.io`, and the plugins' only server is `https://api.corespeed.io/mcp`. Anything else claiming to be CoreSpeed is not this plugin. diff --git a/plugins/corespeed-cli/.codex-plugin/plugin.json b/plugins/corespeed-cli/.codex-plugin/plugin.json new file mode 100644 index 0000000..0c2fb8a --- /dev/null +++ b/plugins/corespeed-cli/.codex-plugin/plugin.json @@ -0,0 +1,42 @@ +{ + "name": "corespeed-cli", + "version": "0.1.0", + "description": "CoreSpeed from Codex through the cs command-line tool: sign in once in the browser, then search for a tool, read its schema, and call it from the shell — long-term memory shared across your agents, the tools your organization has enabled on CoreSpeed, and API keys for CI. Registers no MCP server.", + "author": { + "name": "CoreSpeed", + "email": "contact@corespeed.io", + "url": "https://corespeed.io" + }, + "homepage": "https://corespeed.io/docs/cli", + "repository": "https://github.com/corespeed-io/cs", + "license": "Apache-2.0", + "keywords": [ + "corespeed", + "cli", + "memory", + "agents" + ], + "skills": "./skills/", + "interface": { + "displayName": "CoreSpeed CLI", + "shortDescription": "CoreSpeed tools and shared memory from the shell", + "longDescription": "CoreSpeed gives your organization one place for agent tools: long-term memory shared across agents, the tools of the apps your organization has enabled, and API keys with spend caps and an audit trail. This plugin brings it to Codex through the cs command-line tool. Sign in once in the browser; after that the agent searches for a tool, reads its schema, and calls it from the shell, with every call metered and, where your organization requires it, approved by a human first. It registers no MCP server.", + "developerName": "CoreSpeed", + "category": "Developer Tools", + "capabilities": [ + "Read", + "Write" + ], + "websiteURL": "https://corespeed.io", + "privacyPolicyURL": "https://corespeed.io/privacy", + "defaultPrompt": [ + "Sign me in to CoreSpeed with the cs CLI and tell me which organization I am using.", + "Search my CoreSpeed memory for context on this repository before we start.", + "Find the CoreSpeed tool for this task with cs mcp search, show me its schema, then call it." + ], + "brandColor": "#C2410C", + "composerIcon": "./assets/icon.svg", + "logo": "./assets/logo.svg", + "termsOfServiceURL": "https://corespeed.io/terms" + } +} diff --git a/plugins/corespeed-cli/assets/icon.svg b/plugins/corespeed-cli/assets/icon.svg new file mode 100644 index 0000000..e9c654b --- /dev/null +++ b/plugins/corespeed-cli/assets/icon.svg @@ -0,0 +1,4 @@ + + CoreSpeed icon + + diff --git a/plugins/corespeed-cli/assets/logo.svg b/plugins/corespeed-cli/assets/logo.svg new file mode 100644 index 0000000..f1c9207 --- /dev/null +++ b/plugins/corespeed-cli/assets/logo.svg @@ -0,0 +1,5 @@ + + CoreSpeed + + + diff --git a/plugins/corespeed-cli/skills/cs-cli/SKILL.md b/plugins/corespeed-cli/skills/cs-cli/SKILL.md new file mode 100644 index 0000000..cfda00d --- /dev/null +++ b/plugins/corespeed-cli/skills/cs-cli/SKILL.md @@ -0,0 +1,180 @@ +--- +name: cs-cli +description: Use when a task needs the CoreSpeed CLI (cs, npm package @corespeed/cs) — signing in from a terminal, finding a CoreSpeed tool for a task and calling it from a shell (cs mcp search, cs mcp get, cs mcp call), searching or saving shared memory, minting or rotating sk-cs- API keys for CI, switching organizations, connecting apps, registering an organization's own MCP servers, or checking credit. Triggers on "cs login", "cs mcp search", "cs mcp call", "cs keys create", "cs switch", "cs token", "cs connectors", "cs remote", "cs usage", "cs mcp-config", or "@corespeed/cs". +--- + +# CoreSpeed CLI (`cs`) + +`cs` runs every command against the same CoreSpeed MCP server your agents use, +under a member session stored on this machine. It needs Node.js 20 or Bun and +has no runtime dependencies. + +If your client already has the CoreSpeed MCP server +(`https://api.corespeed.io/mcp`), call its tools directly. Use `cs` when it +does not: a plugin without an MCP server, a client that cannot load a large +tool list, a human at a terminal, or a CI job that needs an API key. + +The canonical reference is https://corespeed.io/docs/cli. When this skill and +the docs disagree, the docs win. + +## Install + +```bash +npm install -g @corespeed/cs # or: pnpm add -g, yarn global add, bun install -g +npx @corespeed/cs --help # run once without installing (bunx works too) +``` + +Run the install command again to update. + +## Sign in + +```bash +cs login # opens the browser; prints the URL if it cannot +cs login --org # sign in to one organization +``` + +Sign-in needs a human in a browser; an agent cannot complete it. A member of +several organizations picks one at the terminal; without a terminal the +default is used. After that the stored session refreshes itself, so it is once +per machine, not once per command. Until then every command exits `3` with +``Error: not logged in; run `cs login` ``. + +On a machine reached over SSH, forward a fixed callback port and open the +printed URL in your local browser: + +```bash +ssh -L 8765:127.0.0.1:8765 you@devbox +CS_LOGIN_PORT=8765 cs login +``` + +`cs logout` removes the stored session. The browser keeps its own sign-in, so +signing in as someone else means signing out on the dashboard first. + +## Calling tools from a shell + +Three commands, in this order. Do not guess a tool's name or arguments: +search for it, read its schema, then call it. + +```bash +cs mcp search remember a decision # best matches first, one line each; --limit , --json +cs mcp get memory__remember # description, input schema, and a call to start from +cs mcp call memory__remember '{"memory": "Staging deploys go through bart.", "scope": "shared"}' +``` + +`cs mcp call` prints the tool's result on stdout: its `structuredContent` when +it has one, otherwise its content, as pretty-printed JSON. `--raw` prints the +whole `CallToolResult`. The exit code says what the tool did (table below), so +check it before reading the output. `cs mcp list` prints every tool you can +call, one line each; `--json` prints their definitions. + +Tool names are `__`: `memory__*` is shared memory, `manage__*` +is your account and keys, and each app your organization has connected has its +own prefix. + +### Memory + +CoreSpeed memory is long-term and shared across the agents in your +organization. At the start of a non-trivial task, search it with two or three +short queries before planning. After significant work, save the durable +decisions and conventions. + +```bash +cs mcp call memory__search_memory '{"query": "deploy process", "limit": 5}' +cs mcp call memory__remember '{"memory": "Staging deploys go through bart, never wrangler directly.", "scope": "shared"}' +``` + +### Approvals + +Some write calls need a human's approval first. The command then exits `6` +and prints on stderr the exact command to run next: + +``` +cs mcp call manage__approval_wait '{"approval_id": "…"}' +``` + +Run it right away. It waits for the decision and prints the original tool's +result; a request nobody waits on expires. + +## In Codex + +Codex runs shell commands in a sandbox that has no network by default, in +both `workspace-write` and `read-only` mode. `cs` needs the network, so the +sandbox blocks it and Codex asks whether to run the command outside the +sandbox. Approve it, or allow network for the workspace once in +`~/.codex/config.toml`: + +```toml +[sandbox_workspace_write] +network_access = true +``` + +Do not change the user's sandbox settings yourself; ask. + +## Commands + +| Command | What it does | +| --- | --- | +| `cs login [--org ]` | Browser sign-in; stores a member session | +| `cs logout` | Remove the stored session | +| `cs whoami` | Signed-in user, active organization, and the others you belong to | +| `cs switch []` | Change the active organization without signing in again | +| `cs token` | Print a fresh session JWT (five minutes) for one request | +| `cs keys create ` | Mint an `sk-cs-` key; the secret is printed once | +| `cs keys list` | Keys as JSON (id, name, last four characters, cap, usage), never the secret | +| `cs keys rotate ` | Revoke and replace under a new id; name, cap, and usage carry over | +| `cs keys revoke ` | Invalidate a key; it then answers `401 invalid_api_key` | +| `cs mcp-config` | An `mcpServers` entry carrying the five-minute session token | +| `cs mcp search [--limit ] [--json]` | Find tools for a task, best match first, one line each; `--json` prints the matches' definitions | +| `cs mcp get [--json]` | One tool in full: description, input schema, a call to start from; `--json` prints its definition verbatim | +| `cs mcp call [json] [--raw]` | Call a tool and print its result; exits non-zero when the tool did not do what it was asked | +| `cs mcp list [--json]` | Every tool, one line each; `--json` prints their definitions | +| `cs connectors list` | Connectors offered to you, with status and account aliases | +| `cs connectors connect ` | Open the connect flow in the browser | +| `cs connectors disconnect [--account ]` | Remove a connected account | +| `cs connectors accounts list\|rename\|remove` | Manage connected accounts and their aliases | +| `cs remote add\|list\|show\|refresh\|remove` | The organization's own MCP servers, as `org____*` tools; writes need an org admin | +| `cs usage` | Available credit and plan | + +## A key for CI + +The CLI itself takes no API key and is not part of a CI job. Mint a key once, +store it as the job's secret, and send it directly: + +```bash +cs keys create ci-deploy # copy the sk-cs- secret now; it is shown once +``` + +The job then sends `Authorization: Bearer ` on `POST +https://api.corespeed.io/mcp`; the `cs-api` skill has the request shape and +error codes. The CLI creates keys without a spend cap or expiry; set both at +https://app.corespeed.io/keys. + +## Session tokens are short-lived + +`cs token` and `cs mcp-config` hand out the session's own access token, which +lives five minutes. That is right for a request you are making now and wrong +for anything that stays configured: give a lasting configuration an API key, +or let the client sign in through the browser itself. + +The session is stored under `~/.config/cs` (or `$CS_CONFIG_DIR`). Treat that +directory as a credential: never commit it or print its contents. + +## Output and exit codes + +Results go to `stdout`; prompts, warnings, and errors go to `stderr`, so +`cs token` and `cs keys list` pipe cleanly. Failures print `Error: `. + +| Exit | Meaning | Move | +| --- | --- | --- | +| `0` | Success | | +| `1` | Usage error, or the request was refused (not found, conflict, invalid input) | Fix the command; `cs --help` | +| `3` | Not signed in, or the session was rejected | A human runs `cs login`; for an organization with its own SSO or MFA, `cs login --org ` | +| `4` | The account cannot do this now: no active organization, payment required, suspended, or admin role needed | Act on the message; credit is at https://app.corespeed.io/billing | +| `5` | CoreSpeed unreachable, rate-limited, or answering badly | Retry later | +| `6` | The tool call waits for a human's approval and has not run | Run the `cs mcp call manage__approval_wait …` command printed on stderr, right away | + +| Variable | Purpose | +| --- | --- | +| `CS_CONFIG_DIR` | Where the session is stored; a separate directory keeps a separate sign-in | +| `CS_LOGIN_PORT` | Fixed sign-in callback port, for signing in over SSH | +| `DO_NOT_TRACK=1` | Send a bare `cs` user agent | diff --git a/plugins/corespeed/.claude-plugin/plugin.json b/plugins/corespeed/.claude-plugin/plugin.json index 624138c..a72f926 100644 --- a/plugins/corespeed/.claude-plugin/plugin.json +++ b/plugins/corespeed/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "corespeed", - "version": "0.2.0", + "version": "0.2.1", "description": "Connect Claude Code to CoreSpeed: your connected apps, shared memory, media, web and social tools through one MCP server, plus skills for the cs CLI and the HTTP API.", "author": { "name": "CoreSpeed", diff --git a/plugins/corespeed/.codex-plugin/plugin.json b/plugins/corespeed/.codex-plugin/plugin.json index f24b6cc..187e148 100644 --- a/plugins/corespeed/.codex-plugin/plugin.json +++ b/plugins/corespeed/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "corespeed", - "version": "0.2.0", + "version": "0.2.1", "description": "Connect Codex to CoreSpeed: your connected apps, shared memory, media, web and social tools through one MCP server, plus skills for the cs CLI and the HTTP API.", "author": { "name": "CoreSpeed", diff --git a/plugins/corespeed/skills/cs-cli/SKILL.md b/plugins/corespeed/skills/cs-cli/SKILL.md index 73c85f0..cfda00d 100644 --- a/plugins/corespeed/skills/cs-cli/SKILL.md +++ b/plugins/corespeed/skills/cs-cli/SKILL.md @@ -1,16 +1,18 @@ --- name: cs-cli -description: Use when a task needs the CoreSpeed CLI (cs, npm package @corespeed/cs) — signing in from a terminal, minting or rotating sk-cs- API keys for CI, switching organizations, connecting apps, registering an organization's own MCP servers, checking credit, or calling CoreSpeed tools from a shell. Triggers on "cs login", "cs keys create", "cs switch", "cs token", "cs mcp call", "cs connectors", "cs remote", "cs usage", "cs mcp-config", or "@corespeed/cs". +description: Use when a task needs the CoreSpeed CLI (cs, npm package @corespeed/cs) — signing in from a terminal, finding a CoreSpeed tool for a task and calling it from a shell (cs mcp search, cs mcp get, cs mcp call), searching or saving shared memory, minting or rotating sk-cs- API keys for CI, switching organizations, connecting apps, registering an organization's own MCP servers, or checking credit. Triggers on "cs login", "cs mcp search", "cs mcp call", "cs keys create", "cs switch", "cs token", "cs connectors", "cs remote", "cs usage", "cs mcp-config", or "@corespeed/cs". --- # CoreSpeed CLI (`cs`) `cs` runs every command against the same CoreSpeed MCP server your agents use, under a member session stored on this machine. It needs Node.js 20 or Bun and -has no runtime dependencies. With this plugin installed, the agent already -reaches CoreSpeed through its own browser sign-in; reach for `cs` when a human -is at a terminal, when a CI job needs an API key, or to check what an agent -will see. +has no runtime dependencies. + +If your client already has the CoreSpeed MCP server +(`https://api.corespeed.io/mcp`), call its tools directly. Use `cs` when it +does not: a plugin without an MCP server, a client that cannot load a large +tool list, a human at a terminal, or a CI job that needs an API key. The canonical reference is https://corespeed.io/docs/cli. When this skill and the docs disagree, the docs win. @@ -48,6 +50,66 @@ CS_LOGIN_PORT=8765 cs login `cs logout` removes the stored session. The browser keeps its own sign-in, so signing in as someone else means signing out on the dashboard first. +## Calling tools from a shell + +Three commands, in this order. Do not guess a tool's name or arguments: +search for it, read its schema, then call it. + +```bash +cs mcp search remember a decision # best matches first, one line each; --limit , --json +cs mcp get memory__remember # description, input schema, and a call to start from +cs mcp call memory__remember '{"memory": "Staging deploys go through bart.", "scope": "shared"}' +``` + +`cs mcp call` prints the tool's result on stdout: its `structuredContent` when +it has one, otherwise its content, as pretty-printed JSON. `--raw` prints the +whole `CallToolResult`. The exit code says what the tool did (table below), so +check it before reading the output. `cs mcp list` prints every tool you can +call, one line each; `--json` prints their definitions. + +Tool names are `__`: `memory__*` is shared memory, `manage__*` +is your account and keys, and each app your organization has connected has its +own prefix. + +### Memory + +CoreSpeed memory is long-term and shared across the agents in your +organization. At the start of a non-trivial task, search it with two or three +short queries before planning. After significant work, save the durable +decisions and conventions. + +```bash +cs mcp call memory__search_memory '{"query": "deploy process", "limit": 5}' +cs mcp call memory__remember '{"memory": "Staging deploys go through bart, never wrangler directly.", "scope": "shared"}' +``` + +### Approvals + +Some write calls need a human's approval first. The command then exits `6` +and prints on stderr the exact command to run next: + +``` +cs mcp call manage__approval_wait '{"approval_id": "…"}' +``` + +Run it right away. It waits for the decision and prints the original tool's +result; a request nobody waits on expires. + +## In Codex + +Codex runs shell commands in a sandbox that has no network by default, in +both `workspace-write` and `read-only` mode. `cs` needs the network, so the +sandbox blocks it and Codex asks whether to run the command outside the +sandbox. Approve it, or allow network for the workspace once in +`~/.codex/config.toml`: + +```toml +[sandbox_workspace_write] +network_access = true +``` + +Do not change the user's sandbox settings yourself; ask. + ## Commands | Command | What it does | @@ -62,8 +124,10 @@ signing in as someone else means signing out on the dashboard first. | `cs keys rotate ` | Revoke and replace under a new id; name, cap, and usage carry over | | `cs keys revoke ` | Invalidate a key; it then answers `401 invalid_api_key` | | `cs mcp-config` | An `mcpServers` entry carrying the five-minute session token | -| `cs mcp list` | `tools/list` as you, as JSON | -| `cs mcp call [json]` | `tools/call` as you; a refusal still exits `0` with `isError: true` | +| `cs mcp search [--limit ] [--json]` | Find tools for a task, best match first, one line each; `--json` prints the matches' definitions | +| `cs mcp get [--json]` | One tool in full: description, input schema, a call to start from; `--json` prints its definition verbatim | +| `cs mcp call [json] [--raw]` | Call a tool and print its result; exits non-zero when the tool did not do what it was asked | +| `cs mcp list [--json]` | Every tool, one line each; `--json` prints their definitions | | `cs connectors list` | Connectors offered to you, with status and account aliases | | `cs connectors connect ` | Open the connect flow in the browser | | `cs connectors disconnect [--account ]` | Remove a connected account | @@ -107,6 +171,7 @@ Results go to `stdout`; prompts, warnings, and errors go to `stderr`, so | `3` | Not signed in, or the session was rejected | A human runs `cs login`; for an organization with its own SSO or MFA, `cs login --org ` | | `4` | The account cannot do this now: no active organization, payment required, suspended, or admin role needed | Act on the message; credit is at https://app.corespeed.io/billing | | `5` | CoreSpeed unreachable, rate-limited, or answering badly | Retry later | +| `6` | The tool call waits for a human's approval and has not run | Run the `cs mcp call manage__approval_wait …` command printed on stderr, right away | | Variable | Purpose | | --- | --- | From 9955fceda77ba258a7783debda08342ee2924f8e Mon Sep 17 00:00:00 2001 From: Agent Date: Sat, 10 Oct 2026 23:20:42 +0000 Subject: [PATCH 2/2] fix(skills): cs mcp call prints text results as text; --raw is the JSON path The cs-cli skill said the result is "pretty-printed JSON" in every case. cs 0.5.0 prints structuredContent as JSON, but a plain-text content block as text (JSON text re-indented) and other blocks summarised; --raw is what prints the whole CallToolResult as JSON. Say so, in both copies of the skill. Co-Authored-By: Claude Fable 5.1 --- plugins/corespeed-cli/skills/cs-cli/SKILL.md | 10 ++++++---- plugins/corespeed/skills/cs-cli/SKILL.md | 10 ++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/plugins/corespeed-cli/skills/cs-cli/SKILL.md b/plugins/corespeed-cli/skills/cs-cli/SKILL.md index cfda00d..99ae637 100644 --- a/plugins/corespeed-cli/skills/cs-cli/SKILL.md +++ b/plugins/corespeed-cli/skills/cs-cli/SKILL.md @@ -61,10 +61,12 @@ cs mcp get memory__remember # description, input schema, and a call cs mcp call memory__remember '{"memory": "Staging deploys go through bart.", "scope": "shared"}' ``` -`cs mcp call` prints the tool's result on stdout: its `structuredContent` when -it has one, otherwise its content, as pretty-printed JSON. `--raw` prints the -whole `CallToolResult`. The exit code says what the tool did (table below), so -check it before reading the output. `cs mcp list` prints every tool you can +`cs mcp call` prints the tool's result on stdout: its `structuredContent` as +JSON when it has one, otherwise its content blocks, text as text (JSON text +re-indented) and anything else summarised. To parse the result as JSON in +every case, pass `--raw`: it prints the whole `CallToolResult` as it arrived. +The exit code says what the tool did (table below), so check it before +reading the output. `cs mcp list` prints every tool you can call, one line each; `--json` prints their definitions. Tool names are `__`: `memory__*` is shared memory, `manage__*` diff --git a/plugins/corespeed/skills/cs-cli/SKILL.md b/plugins/corespeed/skills/cs-cli/SKILL.md index cfda00d..99ae637 100644 --- a/plugins/corespeed/skills/cs-cli/SKILL.md +++ b/plugins/corespeed/skills/cs-cli/SKILL.md @@ -61,10 +61,12 @@ cs mcp get memory__remember # description, input schema, and a call cs mcp call memory__remember '{"memory": "Staging deploys go through bart.", "scope": "shared"}' ``` -`cs mcp call` prints the tool's result on stdout: its `structuredContent` when -it has one, otherwise its content, as pretty-printed JSON. `--raw` prints the -whole `CallToolResult`. The exit code says what the tool did (table below), so -check it before reading the output. `cs mcp list` prints every tool you can +`cs mcp call` prints the tool's result on stdout: its `structuredContent` as +JSON when it has one, otherwise its content blocks, text as text (JSON text +re-indented) and anything else summarised. To parse the result as JSON in +every case, pass `--raw`: it prints the whole `CallToolResult` as it arrived. +The exit code says what the tool did (table below), so check it before +reading the output. `cs mcp list` prints every tool you can call, one line each; `--json` prints their definitions. Tool names are `__`: `memory__*` is shared memory, `manage__*`