toolprotocol¶
Protocol layer providing transport, wire format, and protocol primitives for MCP, A2A, and ACP integrations.
Packages¶
| Package | Purpose |
|---|---|
content | Unified content parts (text, image, audio, file, resource) |
discover | Service discovery + capability negotiation |
transport | Transport interfaces (stdio, SSE, streamable HTTP) |
wire | Protocol wire encoding (MCP, A2A, ACP) |
stream | Streaming events for progress/partial/complete |
session | Client session store + context helpers |
task | Long-running task lifecycle + subscriptions |
resource | MCP resources registry + subscriptions |
prompt | Prompt templates + registry |
elicit | User input elicitation (text/confirm/choice/form) |
Contracts (Highlights)¶
- Transport: concurrent-safe;
Servehonors context;Closeis idempotent. - Wire: deterministic encode/decode; capabilities reflect real support.
- Content: immutable content parts; MIME type always matches payload.
- Stream: event order preserved;
Donecloses onClose.
Example: Wire + Transport¶
import (
"context"
"github.com/jonwraymond/toolprotocol/transport"
"github.com/jonwraymond/toolprotocol/wire"
)
type server struct{}
func (s *server) ServeTransport(ctx context.Context, t transport.Transport) error {
return nil
}
ctx := context.Background()
codec := wire.NewMCP()
payload, _ := codec.EncodeRequest(ctx, &wire.Request{
ID: "1",
Method: "tools/list",
})
tp, _ := transport.New("stdio", nil)
_ = payload
_ = tp.Serve(ctx, &server{})
Diagram¶
Protocol Flow¶
sequenceDiagram
participant Client
participant Transport
participant Wire
participant Handler
Client->>Transport: Connect
Transport->>Wire: Decode request
Wire->>Handler: Route to handler
Handler-->>Wire: Response
Wire-->>Transport: Encode response
Transport-->>Client: Send