cs mcp

Find a CoreSpeed tool for a task, read its schema, and call it from a terminal as yourself — the same tools, under the same session, that an agent gets.

cs mcp runs the CoreSpeed MCP endpoint's tools under your session. An organization can have more than a thousand of them, so an agent (or a person) works in three steps instead of reading them all: search for the task, get the one tool it picked, call it. Because the session is a member session, the session-gated manage__* tools run here too.

Usage

cs mcp search <words…> [--limit <n>] [--json]
cs mcp get <tool> [--json]
cs mcp call <tool> [jsonArgs] [--raw]
cs mcp list [--json]
cs mcp search search tweets
cs mcp get twitter__search_posts
cs mcp call twitter__search_posts '{"query": "from:corespeed", "account": "@corespeed"}'

cs mcp search ranks your tools for a need described in words and prints one line per match, best first: the tool name, its declared hints (read-only, destructive) and the first sentence of its description.

Output
twitter__search_posts [read-only]  Search recent posts on X (Twitter).
twitter__create_post  Post a new tweet, or reply with reply_to_id.
social__x_search [read-only]  Search public X posts by keyword (search_type Top | Latest | Media | People | Lists; paginate with cursor).

It matches tool names, descriptions and argument names and descriptions, so describe the task rather than guessing an identifier. It prints the ten best matches; --limit changes that, and --json prints the matches' full definitions instead. A tool only exists here once its connector is connected (cs connectors list).

get

cs mcp get prints one tool in full: its description as written, its input schema (and output schema) verbatim — every type, range, default and required field the tool declares — and a call to start from. For a tool that takes account, it also lists the accounts connected for that connector; account is required when there is more than one.

Output
twitter__search_posts [read-only]

Search recent posts on X (Twitter). Returns up to max_results posts matching the query.

Input schema:
{
  "type": "object",
  "properties": { … },
  "required": ["query"]
}

Connected accounts (pass one as account): @acme, @corespeed

Call it:
  cs mcp call 'twitter__search_posts' '{"query":"<string>","account":"@acme"}'

--json prints the tool's definition exactly as tools/list declares it. An unknown name exits 1 and names the closest tools.

list

cs mcp list prints every tool you can call, one line each in the same format as search, already filtered to your connected accounts and enabled capabilities. --json prints the tools' definitions exactly as tools/list declares them:

cs mcp list --json | jq -r '.[].name'

call

cs mcp call invokes one tool with JSON arguments and prints its result. The arguments must be a single valid JSON object.

cs mcp call memory__search_memory '{"query": "rollout window"}'
cs mcp call manage__whoami

The result is the tool's structuredContent when it returns one: the MCP spec makes that the result data, validated against the tool's output schema, and the text a tool adds beside it is a copy for clients that cannot read it. When that text is more than a JSON copy of the result, a line on stderr says it was not shown. Some tools put their answer in the text and only metadata in structuredContent — media__understand does — so read those with --raw. A tool without structuredContent prints its content: JSON text pretty-printed, other text as written, and a one-line summary for images, audio and resources instead of their bytes. Numbers and strings are printed exactly as the server sent them, 64-bit integers included.

--raw prints the CallToolResult exactly as it arrived — content, structuredContent, isError and _meta:

cs mcp call twitter__search_posts '{"query": "from:corespeed"}' --raw \
  | jq -r '.content[0].text | fromjson | .data[].id'

The result is printed whatever it says. The exit code then says whether the tool did what it was asked, and the reason goes to stderr:

CodeThe call
0Ran and succeeded.
1Was refused: the tool answered isError: true, the tool does not exist, or the arguments were invalid.
4Did not run because of the organization's standing, such as its balance or a suspension.
5Hit a CoreSpeed failure. Retry later.
6Is waiting for a human's approval and has not run.

A call that waits for approval prints the approval id and the call that waits for the decision. Run it right away, because the request expires if nobody waits on it:

cs mcp call manage__approval_wait '{"approval_id": "…"}'

Read Error handling for what to do with each error code.