Home Findings Changelog Read Spec

v0.95

February 2026 Current

Adds first-class support for message-oriented protocols. MAPI can now describe APIs built on NATS, MQTT, AMQP, Kafka, Redis Streams, and similar message bus infrastructure—not just HTTP. This release also introduces structured lifecycle definitions, envelope schemas, and messaging delivery metadata.

Why this release

MAPI v0.94 covered HTTP-centric APIs well, but a growing class of systems—particularly agent-to-agent protocols like AgentMesh—use fundamentally different communication patterns: named subjects instead of URLs, pub/sub instead of request/response, and stateful task lifecycles that span multiple messages.

These patterns are the norm in backend event-driven architectures, not the exception. NATS, Kafka, MQTT, and AMQP collectively power more inter-service communication than REST in many organizations. MAPI's "Unified Transport" design goal demanded that these systems be describable in the same format, with the same clarity of intent, that HTTP APIs already enjoy.

Every addition in v0.95 is additive. The HTTP-centric core of MAPI is unchanged. Existing v0.94 documents remain valid.

Addition New Syntax Purpose
Message bus transport MSG subject.pattern Describe publish/reply messaging over NATS, MQTT, Kafka, etc.
Subscriptions ## Subscription: + SUB Describe pub/sub topic subscriptions with wildcards
Lifecycles ## Lifecycle: + ~~~states Define state machines for resources that span interactions
Inbound handlers direction: inbound Distinguish "you call this" from "you handle this"
Envelopes ## Envelope: Describe the wire format wrapping all messages
Messaging metadata delivery, ordering, consumer_group Express delivery guarantees, ordering, and load balancing

New Message Bus Transport (Section 8)

What it does

Adds a MSG transport type for APIs where the address is a named subject (like mesh.registry.register) rather than a URL path. Subjects are dot-delimited strings published to a message broker.

~~~meta id: mesh.register transport: MSG mesh.registry.register (reply) auth: required ~~~

The (reply) modifier indicates request/reply semantics (like HTTP request/response). Without it, the message is fire-and-forget. Parameterized subjects work like HTTP path params: MSG mesh.agent.{agent_id}.inbox.

Why it's needed

MAPI v0.94 defined six transport types, all assuming HTTP endpoints or WebSocket paths. But APIs built on NATS, MQTT, AMQP, and Kafka use a different addressing model entirely—there's no URL, no HTTP method, no path. Without MSG, these APIs simply couldn't be described in MAPI.

New Subscriptions (Section 9)

What it does

Adds a ## Subscription: heading type with a SUB transport for pub/sub patterns. Agents declare interest in a topic pattern and receive matching messages over time.

~~~meta id: mesh.subscribe transport: SUB mesh.event.{topic} ~~~

Wildcards use NATS-style syntax: * matches exactly one token, > matches one or more tokens (must be at end). MQTT equivalents (+ and #) map directly.

Why it's needed

Pub/sub is arguably more common than webhooks in backend systems. MAPI v0.94's event model was limited to webhooks (HTTP callbacks to a registered URL). But in message-oriented architectures, subscribers connect to a shared bus and declare interest in topic patterns—no callback URL, no HTTP involved. This is the dominant event model in NATS, MQTT, Kafka, Redis Pub/Sub, and RabbitMQ.

New Lifecycles (Section 13)

What it does

Adds a ## Lifecycle: heading with a ~~~states block that defines a state machine: which states a resource can be in, which transitions are valid, and optionally which capabilities trigger them.

~~~states submitted -> working: Agent begins processing [mesh.task.accept] working -> completed: Agent finishes [mesh.task.respond] working -> failed: Agent encounters an error [mesh.task.respond] * -> canceled: Either party cancels [mesh.task.cancel] ~~~

The * wildcard means "from any non-terminal state." Capability IDs in brackets are optional—when present, they link transitions to specific capabilities for code generation.

Why it's needed

Many systems have resources that transition through states over multiple interactions—tasks, orders, deployments, CI/CD pipelines. Previously, these state machines had to be described in prose within Logic Constraints, which is fragile and hard for LLMs to reason about programmatically. Structured state definitions let LLMs understand what states exist, which transitions are legal, and what "terminal" means.

New Inbound Direction (Section 8.2)

What it does

Adds a direction field to capability metadata. The default outbound means "you call this" (the existing assumption). The new inbound value means "you implement a handler for this"—other agents send messages here and you must respond.

~~~meta id: mesh.agent.inbox transport: MSG mesh.agent.{agent_id}.inbox direction: inbound ~~~

Why it's needed

MAPI v0.94 implicitly assumed a client-server model: the document describes a service, the reader is the client. But in peer-to-peer protocols, every agent is both client and server simultaneously. Without this distinction, an LLM can't tell whether to generate a function call (outbound) or an event handler (inbound). One metadata field solves it cleanly.

New Envelopes (Section 12)

What it does

Adds a ## Envelope: heading for defining the wire format that wraps all messages. In HTTP, wire format is implicit (headers, status codes). In message protocols, every message is wrapped in an envelope carrying identity, correlation IDs, tracing, and the payload.

When an Envelope is defined, each capability's Input and Output schemas describe the contents of the envelope's payload field—not the full wire message. This composition rule is explicit in the spec so LLMs know to construct the envelope and nest the payload inside it.

Why it's needed

An LLM generating code to send a message over a bus needs to construct the full envelope—not just the payload. Without a structured envelope definition, the LLM would have to guess at wire format from scattered Logic Constraints, or the spec author would have to redundantly include envelope fields in every capability's Input schema.

New Messaging Metadata (Section 8.3, Appendix D)

What it does

Adds three metadata fields for message bus capabilities:

deliveryat_most_once (fire-and-forget), at_least_once (may duplicate, use idempotency), or exactly_once (requires broker support like JetStream or Kafka transactions).

orderingunordered, ordered (publish order within subject), or partition_ordered (ordered within partition key).

consumer_group — When set, only one member of the group receives each message (load balancing). Without it, all subscribers get every message (fan-out).

Why it's needed

Delivery guarantees, ordering, and consumer groups are fundamental to message-oriented architectures. They affect how code must be written—at-least-once delivery means handlers must be idempotent, consumer groups mean you need graceful rebalancing, partition ordering constrains how you can parallelize. Making these explicit in metadata lets LLMs generate correct code rather than assuming defaults that may not hold.

Enhanced Updated Reference Cards & Conversion Guides

All seven reference cards have been updated for v0.95:

MAPI-AUTHOR — New transport strings, message bus examples, envelope/lifecycle/direction guidance.

MAPI-CONSUMER — MSG/SUB transport patterns, direction awareness, envelope composition rules.

MAPI-VALIDATOR — Validation rules for all new heading types, transport patterns, states blocks, and messaging metadata.

MAPI-AUTH — Transport-layer auth patterns for message protocols.

ASYNCAPI-TO-MAPI — Kafka/AMQP/NATS now map to MSG/SUB transports instead of the previous WS workaround.

MAPI-TO-OPENAPI — Guidance on handling MSG/SUB capabilities (no OpenAPI equivalent).

v0.94

January 2026

Added cross-cutting authentication documentation. Introduced the Auth Intention section, the MAPI-AUTH reference card, and auth-related metadata fields (auth_flow, auth_scopes, auth_docs_url). Established the philosophy that authentication is a cross-cutting concern woven throughout capabilities, not siloed into a separate security section.

v0.92

2025

Initial public draft of the MAPI specification. Established the core format: Markdown documents with TypeScript schemas, capability-oriented organization, metadata blocks, intention sections, logic constraints, and support for HTTP, WebSocket, SSE, and webhook transports. Introduced progressive disclosure via reference cards.