Skip to content

Protocol overview

Tesseron speaks JSON-RPC 2.0 over a reliable, ordered, duplex channel between your app and the MCP gateway, then the gateway bridges that to MCP over stdio for the agent. One action round-trip crosses both protocols.

The channel is a transport binding - WebSocket by default, Unix domain socket as an opt-in for Node apps that don't need the browser bridge. The protocol is binding-neutral; see Transport for the contract every binding satisfies.

The protocol is at version 1.1.0.

A first-use session, start to finish: from WebSocket open to the first tool-call result returned to the agent. YOUR APP MCP GATEWAY USER AGENT 1 tesseron/hello { app, actions, caps } 2 tesseron/welcome { sessionId, claimCode } 3 claim code (stdout / web UI) 4 connect AB3X-7K 5 tools/call tesseron__claim_session 6 notifications/tools/list_changed 7 tools/call shop__searchProducts 8 actions/invoke { invocationId, input } 9 result 10 tools/call result
A first-use session, start to finish: from WebSocket open to the first tool-call result returned to the agent.
NameValue
Protocol version1.1.0
Discovery directory (v2)~/.tesseron/instances/
Discovery directory (v1, compat)~/.tesseron/tabs/
Manifest version2
WebSocket subprotocol (gateway side)tesseron-gateway
UDS framingNDJSON (one JSON-RPC message per \n)
Default action timeout60_000 ms
Max sampling depth3
Tool name pattern<app_id>__<action_name>
Resource URI patterntesseron://<app_id>/<resource_name>
app.id validator/^[a-z][a-z0-9_]*$/

All of these are observable from the wire - they're not SDK-specific. A Python or Go SDK implementing Tesseron MUST match them exactly.