List a pack's MCP tools
Every action of a pack version that is exposed to MCP, as MCP tool definitions in one response, so an MCP server lists a pack's tools with one request instead of one describe per action. The node builds the list when it loads the pack. Tool names are the registry's (`mcp_name`); each tool also carries the action's `ref` and `effects`, which a server drops from `tools/list`. Cache the response for `ttlMs`; the `ETag` is the version's content hash plus the filters, and `If-None-Match` with it answers `304`.
GET
/v1/actions/packs/{namespace}/{name}/tools
Every action of a pack version that is exposed to MCP, as MCP tool definitions in one response, so an MCP
server lists a pack's tools with one request instead of one describe per action. The node builds the list
when it loads the pack. Tool names are the registry's (`mcp_name`); each tool also carries the action's `ref`
and `effects`, which a server drops from `tools/list`. Cache the response for `ttlMs`; the `ETag` is the
version's content hash plus the filters, and `If-None-Match` with it answers `304`.
Authentication
Bearer Token (b3os_sk_ API key or b3os_pat_ token)
Path Parameters
namespace
string
required
path
Reverse-DNS publisher namespace, such as `io.b3os`.
Example:
"io.b3os"name
string
required
path
Pack name within the namespace, such as `github`.
Example:
"github"Query Parameters
version
string
optional
query
An exact version or a range such as `1` or `^1.2`; the latest by default.
effects
string
optional
query
The most a listed tool may do. `read` lists `pure` and `read` actions only.
actions
string
optional
query
Only these action keys, comma-separated (`post-message,list-channels`). An unknown key is a 400.
Header Parameters
If-None-Match
string
optional
header
The `ETag` of a response you hold.
Responses
200
The pack's tools.
application/jsonobject
string
REQUIRED
Enum:
pack_toolspack
string
REQUIRED
version
string
REQUIRED
content_hash
string
REQUIRED
ttlMs
integer
REQUIRED
How long to cache this list, in milliseconds.
tools
object[]
REQUIRED
Array of:
name
string
REQUIRED
The MCP tool name (`mcp_name`).
title
string
REQUIRED
description
string
REQUIRED
inputSchema
object | boolean
REQUIRED
A JSON Schema (draft 2020-12) document, such as a routine's `inputs` or an action's `inputSchema`. B3OS checks
it against the meta-schema when it is published. References to the meta-schema in `schemas/*.json` resolve
here.
Any of:
Option 1object
Option 2boolean
outputSchema
object | boolean
A JSON Schema (draft 2020-12) document, such as a routine's `inputs` or an action's `inputSchema`. B3OS checks
it against the meta-schema when it is published. References to the meta-schema in `schemas/*.json` resolve
here.
Any of:
Option 1object
Option 2boolean
annotations
object
REQUIRED
title
string
readOnlyHint
boolean
destructiveHint
boolean
idempotentHint
boolean
openWorldHint
boolean
ref
string
REQUIRED
effects
string
REQUIRED
`pure` computes from input only; `read` reads from the world; `write` changes it; `irreversible` changes it
and cannot be undone (never retried automatically). Drives MCP annotations and retries.
Enum:
pure, read, write, irreversible
304
Nothing changed since `If-None-Match`.
400
The request failed validation (`invalid_request`, `invalid_url`).
401
Missing, malformed, expired or revoked credentials (`unauthorized`).
403
Authenticated but not allowed (`forbidden`, `egress_denied`).
404
No such pack or version (`pack_not_found`, `pack_version_not_found`).
429
A rate, concurrency or quota limit applies (`rate_limited`, `concurrency_limited`, `quota_exceeded`).
500
Something failed inside B3OS (`internal`). Retry with backoff.
503
The node or the product is not available right now (`node_unavailable`, `product_unavailable`, `capacity_unavailable`).
curl -X GET 'https://beta-api.b3os.org/v1/actions/packs/io.b3os/github/tools' \ -H 'Authorization: Bearer YOUR_API_TOKEN'
const response = await fetch('https://beta-api.b3os.org/v1/actions/packs/io.b3os/github/tools', { method: 'GET', headers: { "Authorization": "Bearer YOUR_API_TOKEN" }});const data = await response.json();console.log(data);
import requestsheaders = { 'Authorization': 'Bearer YOUR_API_TOKEN'}response = requests.get('https://beta-api.b3os.org/v1/actions/packs/io.b3os/github/tools', headers=headers)print(response.json())
200
Response
{ "object": "pack_tools", "pack": "io.b3os/github", "version": "1.0.0", "content_hash": "sha256:1201ecd682388440dfef9cf437f213b05584a971a8673d2b3679d2401f6cd8ae", "ttlMs": 300000, "tools": [ { "name": "github__create-issue", "title": "Create issue", "description": "Open a new issue with a title, optional Markdown body, labels and assignees. Returns its number and URL. Not idempotent: calling it twice opens two issues.", "inputSchema": { "type": "object", "required": [ "owner", "repo", "title" ], "properties": { "owner": { "type": "string" }, "repo": { "type": "string" }, "title": { "type": "string" } }, "additionalProperties": false, "examples": [ { "owner": "acme", "repo": "widgets", "title": "Flaky test in checkout flow" } ] }, "outputSchema": { "type": "object", "properties": { "number": { "type": "integer" }, "html_url": { "type": "string" } } }, "annotations": { "title": "Create issue", "readOnlyHint": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": true }, "ref": "io.b3os/github/create-issue@1.0.0", "effects": "write" } ]}
API Playground
Try this endpoint
GET
/v1/actions/packs/{namespace}/{name}/tools