Tools
A tool is an atomic operation with a typed input schema, optional output schema, and a handler function. Every tool has a path (dot-separated lowercase identifier likegithub.issues.create) and a name (Title Case like “Create Issue”).
Tools are the fundamental unit of the Toolshed catalog. Agents discover tools via search_tools, inspect them via read_tool, and invoke them inside sandbox scripts.
Plugins
A plugin groups related tools with shared authentication. Plugins are defined using the SDK’sdefinePlugin and defineTool functions:
Sources
A source is a unit of tool registration. Sources are how external APIs get imported into the Toolshed catalog. Four adapter types are supported:| Type | What it does |
|---|---|
| OpenAPI | Fetches an OpenAPI/Swagger spec and auto-generates tools from endpoints |
| GraphQL | Introspects a GraphQL schema and generates tools from queries and mutations |
| MCP | Connects to an external MCP server and imports its tools |
| Plugin | Wraps a hand-written plugin as a registry-compatible source |
Roles and Policy
A role defines which tools a user can access using glob patterns:github.issues.*— matches one segment (github.issues.create,github.issues.list)github.**— matches any depth undergithub*— matches everything (admin)
Elicitation
Destructive tools (those that create, update, or delete data) require human approval before executing. When a sandbox script calls a destructive tool:- Execution pauses and returns a
pausedresult with anexecutionId - The agent presents the pending action to the user
- The user approves or denies via the
resumeMCP tool - Execution continues or rejects based on the decision
The Tools Proxy
Inside sandbox scripts, tools are accessed through a property-chain proxy:tools.gmail.messages.list(args) into an invocation of tool path gmail.messages.list. Agents cannot enumerate the proxy — they must use tools.search() to discover available tools.