Status: Experimental
Related: IDKIP-0001, issue #17
IDKMesh should bind to A2A and MCP, not replace them.
2025-11-25, so this
binding does not claim asynchronous Tasks support at the newer revision.Therefore the binding rule is:
Use protocol-native fields where semantics match. Carry the complete canonical IDKMesh Work Unit in a namespaced extension payload for semantics the external protocol does not define. Verify a canonical SHA-256 digest on round-trip. Never infer IDKMesh acceptance from external task completion.
| IDKMesh concept | A2A 1.0 | MCP 2026-07-28 | Binding decision |
|---|---|---|---|
| Work Unit identity | message/task metadata and task ID relationship | request ID / tool arguments | native hint + canonical extension payload |
| objective | user Message text part |
tools/call arguments |
protocol native |
| worker capability | Agent Card skills/capabilities | server/discover, tools/list, extension capabilities |
protocol native discovery; IDKMesh scheduler interprets capabilities |
| execution lifecycle | Task states |
synchronous tool result; current async mechanism pending conformance | protocol native when supported |
| candidate artifacts | A2A Artifact + Part |
tool result/resources/task final result | protocol native transport; normalize to ResultManifest artifacts |
| inputs | message parts / URLs / data | tool arguments/resources | partial; canonical Work Unit remains authoritative |
| outputs expected | accepted output modes + extension metadata | tool input contract / tool result expectations | partial |
| dependencies | context/reference task IDs plus extension data | explicit handles/arguments | partial; Work Unit DAG remains IDKMesh semantic |
| constraints / allowed paths | extension data | tool arguments/custom extension | IDKMesh semantic |
| uncertainty | extension data | tool arguments/custom extension | IDKMesh semantic |
| permissions / risk | auth + extension data | authorization + extension data | partial; IDKMesh policy remains authoritative |
| validators | extension data | custom extension/tool arguments | IDKMesh semantic |
| evidence requirements | artifact conventions + extension data | tool/task result + custom extension | IDKMesh semantic |
| resource budget | extension data | tool arguments/custom extension | IDKMesh semantic |
| provenance requirements | artifact/task metadata + extension data | result metadata/custom extension | partial; IDKMesh canonical provenance remains authoritative |
| failure semantics | task states + client policy | task states + client policy | partial |
| independent verification | separate verifier task/agent | separate verifier tool/task | IDKMesh semantic; never implied by worker completion |
| integration/merge decision | not defined | not defined | IDKMesh-only |
interop.bindings.to_a2a_send_message() emits an A2A 1.0-oriented SendMessage payload with:
1.0 (Major.Minor; specification patch versions such as 1.0.0 are not request protocol versions);A2A-Version: 1.0 and A2A-Extensions: https://idkmesh.org/extensions/work-contract/v0.1;ROLE_USER;Value coercing JSON integers to floats);https://idkmesh.org/extensions/work-contract/v0.1;The binding module remains transport-neutral. An HTTP adapter must map the service parameters to the standard A2A-Version / A2A-Extensions headers (or the equivalent request parameters allowed by the A2A specification). The decoder fails closed if the expected version or extension activation is absent or mismatched.
The full Work Unit is preserved because A2A Task completion describes agent execution, not IDKMesh acceptance.
A future network adapter should fetch and inspect Agent Cards before dispatch, negotiate the IDKMesh extension when supported, and otherwise use a configured compatibility adapter.
interop.bindings.to_mcp_tool_call() emits an MCP tools/call request for protocol revision 2026-07-28.
It advertises:
org.idkmesh/work-contract as the IDKMesh binding extension;MCP-Protocol-Version, Mcp-Method, and Mcp-Name.Official mcp SDK 2.1.1 identifies 2026-07-28 as its latest protocol but
marks TaskMetadata and ClientTasksCapability as 2025-11-25 only. The
current binding therefore makes a synchronous tools/call, omits params.task,
does not advertise io.modelcontextprotocol/tasks, and records
asyncTaskMode=unsupported-for-2026-07-28. A future revision may add the
current asynchronous mechanism only after its lifecycle is type-checked.
For both bindings:
canonical Work Unit
-> protocol envelope
-> protocol transport/execution
-> binding extraction
-> canonical Work Unit
The reconstructed Work Unit must be identical and its digest must match. If fields are removed or modified, the binding rejects the envelope rather than silently weakening constraints.
A2A TASK_STATE_COMPLETED
or
MCP task status = completed
!=
IDKMesh accepted
The normalized IDKMesh state is:
execution_status = succeeded
acceptance_status = pending_verification
Only a separate verifier/evidence policy may advance the candidate toward integration.
Both ecosystems are evolving. Bindings therefore pin explicit protocol revisions and remain outside the canonical Work Unit schema. This lets transport/protocol adapters change without renaming IDKMesh’s core work semantics.
For A2A specifically, keep specification release and negotiated protocol version distinct: protocol negotiation uses Major.Minor, while patch releases do not change protocol compatibility and should not be sent as request protocol versions.
interop.adapters now defines one coordinator-facing WorkerAdapter protocol.
Both LocalAdapter and A2AMockAdapter cross that same run_with_adapter()
path; the coordinator contains no provider- or protocol-specific branch.
The A2A mock performs a real canonical JSON serialization/deserialization of
the existing SendMessage binding, reconstructs the exact Work Unit, follows a
submitted → working → completed lifecycle, and returns immutable candidate
artifact bytes. The coordinator normalizes either adapter into a schema-valid
ResultManifest v0.1 with exact Work Unit and artifact digests.
Verification is a separate call and component. verify_result_bundle() checks
the Work Unit binding, declared artifact digests, verifier-owned expected bytes,
and the no-worker-acceptance boundary without executing candidate code. Its
VerificationResult remains decision support and explicitly has no integration
authority. The bounded mock uses one process, so it truthfully reports a shared
runtime even though worker and verifier roles remain separate.