Skip to content

Toolkits Capability Specification

Capability Identity

PropertyValue
EnumA2ECapability.TOOLKITS
String"toolkits"
Plugin TypeToolkitPlugin (abstract)
Namespacetoolkit/*
Message Count4

Overview

The toolkits capability manages bundled collections of related tools — toolkits. A toolkit groups logically related tools (e.g., "filesystem", "database", "browser") and provides a configuration schema for credentials and settings. Unlike individual tools (which are stateless primitives), toolkits require initialization before their tools can be used, and they may carry credentials, API keys, or environment-specific configuration.

Protocol Flow

Message Types (4)

toolkit/list/req — ToolkitListRequest

Agent → Host. Enumerate available toolkits.

FieldTypeRequiredDefaultDescription
typestrYes"toolkit/list/req"Message type identifier
idstrYesauto UUIDMessage UUID
versionstrYes"1.0"Protocol version
tsfloatYesautoUnix epoch timestamp
filter_kindstrNo""Kind filter (empty = all)
filter_tagslist[str]No[]Tag filter list

toolkit/list/resp — ToolkitListResponse

Host → Agent. Returns all available toolkit manifests.

FieldTypeRequiredDefaultDescription
typestrYes"toolkit/list/resp"Message type identifier
idstrYesauto UUIDMessage UUID
versionstrYes"1.0"Protocol version
tsfloatYesautoUnix epoch timestamp
req_idstrYes""Echoes request ID
toolkitslist[ToolkitDefinition]Yes[]Available toolkit definitions

toolkit/configure/req — ToolkitConfigureRequest

Agent → Host. Configure/initialize a toolkit with schema and credentials.

FieldTypeRequiredDefaultDescription
typestrYes"toolkit/configure/req"Message type identifier
idstrYesauto UUIDMessage UUID
versionstrYes"1.0"Protocol version
tsfloatYesautoUnix epoch timestamp
session_idstrYes""Session from HandshakeResponse
toolkit_namestrYes""Toolkit to configure
configdict[str, Any]Yes{}Configuration values matching toolkit schema

toolkit/configure/resp — ToolkitConfigureResponse

Host → Agent. Acknowledges toolkit configuration.

FieldTypeRequiredDefaultDescription
typestrYes"toolkit/configure/resp"Message type identifier
idstrYesauto UUIDMessage UUID
versionstrYes"1.0"Protocol version
tsfloatYesautoUnix epoch timestamp
req_idstrYes""Echoes request ID
toolkit_namestrYes""Configured toolkit name
statusstrYes"ok"Configuration status: ok, error, partial
messagestrNoNoneHuman-readable status message

Data Models

ToolkitDefinition

FieldTypeRequiredDefaultDescription
namestrYesUnique toolkit name
aliasstrNo""Short display alias
descriptionstrNo""Human-readable description
categorystrNo""Classification category
tagslist[str]No[]Classification tags
icon_svgstrNoNoneSVG icon for UI rendering
schemadict[str, Any]Yes{}JSON Schema for configuration (CRITICAL)
toolslist[str]YesList of tool names bundled in this toolkit
configuredboolNoFalseWhether the toolkit has been configured
versionstrNo"1.0.0"Toolkit version

The schema field is the most important property — it defines the JSON Schema that the config field in ToolkitConfigureRequest must conform to. This enables:

  • Client-side form generation
  • Credential validation before submission
  • Environment-specific configuration templates

Error Handling

Errors are returned as A2EError messages with the following patterns:

ScenarioError CodeDescription
Toolkit not foundRUNTIME_ERRORToolkit name doesn't match any registered toolkit
Configuration invalidRUNTIME_ERRORConfig doesn't match toolkit schema
Unrecognized messageINVALID_MESSAGEMessage type not in toolkit namespace

Plugin Contract — ToolkitPlugin

python
class ToolkitPlugin(A2EPlugin):
    name = "toolkit_plugin"

    @abstractmethod
    def _list_toolkits(self, msg) -> ToolkitListResponse:
        """Must return toolkit list. Override in subclass."""

    @abstractmethod
    def _configure_toolkit(self, msg) -> ToolkitConfigureResponse:
        """Configure a specific toolkit. Override in subclass."""

    def set_push_callback(self, fn):
        """Register push callback for toolkit-initiated events."""

    def emit_event(self, event):
        """Emit a push event to the agent."""

Handler dispatch:

  • ToolkitListRequest → calls _list_toolkits(msg)
  • ToolkitConfigureRequest → calls _configure_toolkit(msg)

Push support: Toolkits can emit server-initiated events (e.g., configuration status changes) via set_push_callback and emit_event.

Wire Examples

List Toolkits

json
{"type":"toolkit/list/req","id":"tk1","version":"1.0","ts":1716123456.789,"filter_kind":"","filter_tags":[]}
json
{"type":"toolkit/list/resp","id":"tk2","version":"1.0","ts":1716123456.800,"req_id":"tk1","toolkits":[{"name":"filesystem","alias":"fs","description":"File I/O toolkit","category":"io","tags":["fs","files"],"icon_svg":null,"schema":{"type":"object","properties":{"root_dir":{"type":"string","description":"Root directory for file operations"}},"required":["root_dir"]},"tools":["read_file","write_file","list_dir"],"configured":false,"version":"1.0.0"}]}

Configure Toolkit

json
{"type":"toolkit/configure/req","id":"tk3","version":"1.0","ts":1716123457.100,"session_id":"s1","toolkit_name":"filesystem","config":{"root_dir":"/home/user/workspace"}}
json
{"type":"toolkit/configure/resp","id":"tk4","version":"1.0","ts":1716123457.200,"req_id":"tk3","toolkit_name":"filesystem","status":"ok","message":"Toolkit configured successfully"}

Relationship to Other Capabilities

  • tools: Toolkits group tools. Once a toolkit is configured, its tools appear in tool/list/resp with toolkit field set.
  • mcp: MCP server tools are automatically registered as tools (not toolkits), since MCP manages its own configuration.
  • skills: Skills may reference toolkits in their toolkits field to declare dependencies.

Security Considerations

  1. Configuration secrets: Toolkit config may contain API keys and credentials — must be encrypted in transit
  2. Schema validation: Host validates config against toolkit schema before applying
  3. Capability gating: Requires toolkits capability negotiated during handshake

A2E Protocol v1.0 — Released under the MIT License.