BSP Behavioral State Protocol

Agentic Behaviours.
By Design.

Caller
Any Caller
app · agent · IoT · human
Command
BSP Endpoint
Your Implementation
/.well-known/bsp
Event
Consumer
Any Agent
LLM · app · UI · agent

Expose a manifest. Any AI agent discovers your service, reads what commands it accepts and what events it produces, and starts interacting — no custom integration required.

v0.5.9

Capabilities

Built for agent interoperability

Expose what your service does — the operations it accepts and the facts it produces — in a standard form any caller can discover and use. Over HTTP, MCP, or A2A.

🌐

Discoverable by Default

Expose /.well-known/bsp and your service becomes immediately usable by any agent or LLM client — no custom integration, no bespoke connector, no onboarding docs. Capabilities, schemas, and transport bindings are all self-describing.

Behaviour, Not Resources

BSP is not REST. There are no resources to manipulate. Callers express named intents — commands like SignContract or SubmitOrder — and observe the facts that result. The domain language lives in the protocol, not buried in status-field patches.

📡

Observable Event Log

Every BSP service exposes a queryable event log — filterable by type, source, time range, or correlation ID. Correlate results back to the command that caused them, build projections, or feed an AI agent with factual history instead of synthetic prompts.

🔍

Queries

Read the current state of a service without sending a command. GET /queries returns the query catalogue — each query is self-documenting with a JSON Schema for its parameters and response. Reads and writes are cleanly separated at the protocol level.

🤖

Instant LLM Integration

Implement BSP and get MCP for free. Point bsp-mcp at any BSP-compliant endpoint and every LLM client — Copilot, Claude, ChatGPT — immediately discovers commands, reads state, and sends requests. No custom tool definitions required.

🔁

Live Events & History

Subscribe to events the moment they are produced — or query what already happened. GET /events/stream opens a live SSE connection for real-time results. GET /events queries the historical log. Together they give you the complete picture, past and present.

See it in action

Discovery manifest

Every BSP endpoint exposes a /.well-known/bsp manifest. Consumers discover agents, capabilities, and transports in a single request.

/.well-known/bsp
{
  "BSP": {
    "version": "0.5.9",
    "services": {
      "io.bsp.agents": {
        "version": "0.5.9",
        "description": "Service registry, command ingestion, published events",
        "http": {
          "endpoint": "https://api.example.com/"
        }
      }
    },
    "capabilities": [
      {
        "name": "io.bsp.agents.commands",
        "version": "0.5.9",
        "description": "Command catalogue and ingestion",
        "spec": "https://behavioralstate.io/specs/agents/commands",
        "schema": "https://behavioralstate.io/v1/schemas/agents/commands.json"
      }
    ],
    "services": [
      {
        "id": "negotiation",
        "name": "Contract Negotiation",
        "accepts": ["ProposeCounter", "AcceptContract"],
        "produces": ["CounterProposed", "ContractAccepted"],
        "status": "running"
      }
    ]
  }
}

Designed for everyone

Who is BSP for?

For Developers

Build command-and-event services on an open foundation. JSON Schema definitions, OpenAPI specs, and transport bindings — everything you need to implement BSP.

For Businesses

Expose your services to any agent in the world. No bespoke integrations — just a manifest describing what you accept and produce.

For AI Platforms

Discover and interact with any BSP-compliant agent using MCP, A2A, or simple HTTP. Compatible with existing agent frameworks.

For IoT & Sensors

Even a temperature sensor can be an BSP service — it accepts commands and publishes events, and any caller can discover it via the manifest.

Get started today

BSP is open-source under Apache 2.0. Explore the spec, read the schemas, and start building.