Skip to content

UTC — Universal Tool-Calling Layer

This content is for v1.0. Switch to the latest version for up-to-date documentation.

Call the same tool from MCP, REST, or A2A with one WIMSE token and one audit trail. The Universal Tool-Calling Layer (UTC) normalizes whatever arrives on the wire, verifies it once, and applies the same revocation and audience rules everywhere.

  • One registration, many clients — agents pick the protocol their framework supports; you do not re-register or re-policy per wire format.
  • Same security story as MCP — confused-deputy checks, audience binding, and kill-switch revocation apply to every adapter.
  • Off the exchange path — UTC sits in front of your tool handlers; token exchange latency stays unchanged.
Platform credential → POST /v1/exchange/token → WIMSE JWT
UTC middleware (your tool server)
adapter → verify → allow / deny
tool handler

Adapters translate native requests into one ToolCallRequest. A single Verifier checks token, audience, and revocation regardless of protocol.

AdapterDetects
MCPJSON-RPC tools/call
HTTPREST paths + Bearer token
A2AAgent-to-agent task shapes

Register tools with optional protocol scope — an MCP-only tool returns 403 on REST even when the token is valid.

  1. Exchange a platform credential for a WIMSE JWT — token exchange.
  2. Register the tool on the PEP (resource URI + allowed protocols) — MCP security covers PEP-side registration.
  3. Mount UTC middleware on your tool server — pkg/toolcall.
  4. Point JWKS resolution at GET /v1/identity/jwks on your fabric unit.

MCP:

Terminal window
curl -s -X POST "$TOOL_URL/" \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $WIMSE_JWT" \
-d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"search","arguments":{"q":"starfly"}},"id":1}'

HTTP (same token, same tool):

Terminal window
curl -s "$TOOL_URL/api/search?q=starfly" \
-H "Authorization: Bearer $WIMSE_JWT"
ScenarioResult
MCP or HTTP with valid tokenSame subject, same tool_id, protocol recorded in audit
Valid token, wrong protocol403 capability_denied
Token for tool A at tool B403 audience mismatch
PathStatus
pkg/toolcall/Shipped — middleware, verifier, adapters
examples/multi-protocol-tool/Preview — demo export pending