tools/list
Enumerate every tool visible to the authenticated caller on the CoreSpeed MCP endpoint.
https://api.corespeed.io/mcptools/listtools/list is the authority on what this caller can see. It is filtered
per request by connected accounts (your own and those shared with you), your
organization's remote MCP servers, organization plus member capability
settings, and the features enabled for your organization — never cache it
across identities, and never build a static tool inventory in application code.
Visibility is not executability. The list carries every manage__* tool for
an API-key caller too; a call runs with what the key holds, so an agent key
is refused on a permission-gated write (admin_required,
insufficient_role) and on a member's own act (member_principal_required),
and every key on a mint (api_key_cannot_mint). It also carries tools from
connectors in needs_reauth, which fail until the account is reauthorized.
An account shared with you for only some tools lists every tool of its
connector; the others answer tool_not_granted. Inside an
environment
(/mcp/env/<name>, or a key bound to one), the list holds only the connectors
the environment includes, and within each only the tools its entries allow.
Absence proves a tool cannot be called; presence does not prove it can. Branch on
the result, not on membership in this list.
No manage__* tool is reserved to a session: apart from those refusals and
manage__switch_org (browser sign-ins only), every one runs for an API key as
its principal — Authentication
has the table. The remote_* writes check connections:org;
connectors_wait answers only for the caller's own accounts and
approval_wait only for the caller's own requests. approval_wait is listed
only where Smart Approvals is available to your organization, the three
connectors_* tools only where connect links are, and send_feedback only
where feedback is. See tools/call.
Authorizations
AuthorizationstringheaderrequiredBearer <token>— an MCP OAuth token, ansk-cs-…API key orsk-csa-…agent key, or a user session JWT.x-api-key: <sk-cs-…>is accepted in its place.Acceptstringheaderrequiredapplication/json, text/event-stream— the Streamable HTTP transport requires both media types. This 2025-era request is answered as onetext/event-streamevent; itsdata:line is the JSON-RPC response.Content-Typestringheaderrequiredapplication/json. The transport rejects anything else with415.
Request
paramsobjectoptionalSend
{}. CoreSpeed returns the full visible surface in one response; there is no pagination cursor to follow today.
Response fields
tools[].namestringrequiredThe wire name,
<capability-id>__<operation>. Pass it verbatim totools/call.tools[].descriptionstringoptionalModel-facing description of when to use the tool. Optional in the MCP schema — CoreSpeed's own tools always set it, but a tool proxied from an org-registered remote MCP server may omit it. Do not require it.
tools[].inputSchemaobjectrequiredJSON Schema for the
argumentsobject. Validate against this rather than against examples.tools[].outputSchemaobjectoptionalJSON Schema for
structuredContenton a successful call. Only some tools declare it.tools[].annotationsobjectoptionalDisplay title plus behavior hints (
readOnlyHint,destructiveHint,idempotentHint,openWorldHint). Useful for deciding what needs a human in the loop.
A connector contributes tools as soon as the caller has a stored visible
credential for it — including an account in needs_reauth, whose tool calls
then fail until the account is reauthorized. Presence in tools/list means
visible, not necessarily healthy; check GET /connectors for account health.
curl https://api.corespeed.io/mcp \
-H "Authorization: Bearer $CORESPEED_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'{
"jsonrpc": "2.0",
"id": 2,
"result": {
"tools": [
{
"name": "memory__search",
"description": "Search saved long-term memories for facts relevant to the current question or task.",
"inputSchema": {
"type": "object",
"properties": {
"query": { "type": "string" }
},
"required": ["query"]
},
"annotations": {
"title": "Search memory",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
}
},
{
"name": "notion__create_page",
"description": "Create a new Notion page under a parent page, with a title and optional plain-text content (one paragraph per line).",
"inputSchema": {
"type": "object",
"properties": {
"parent_page_id": { "type": "string" },
"title": { "type": "string" }
},
"required": ["parent_page_id", "title"]
},
"annotations": {
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": true
}
}
]
}
}A JSON array body is refused before any tool runs: one rate-limit slot must not carry an unbounded number of tool calls.
{
"jsonrpc": "2.0",
"id": null,
"error": {
"code": -32600,
"message": "JSON-RPC batch requests are not supported; send one request per tool call."
}
}