Public sales agent

Carbnn runs a public sales agent that speaks the Ad Context Protocol (AdCP). A buyer’s agent can connect to it, see what Carbnn sells, and look up the creative formats those products take, without anyone signing in to the Carbnn app.

Endpoint

https://salesagent.streetsdigital.com/

That one URL is the whole agent. It accepts POST only; GET and DELETE return 405 Method Not Allowed.

Protocol version

  • AdCP 3.1. Every response carries "adcp_version": "3.1".
  • get_adcp_capabilities advertises major_versions: [3]. A request that asks for a different major version (for example adcp_major_version: 2) is refused with VERSION_UNSUPPORTED. See errors and limits.

Transport

The agent is an MCP server over Streamable HTTP. Any MCP client that supports Streamable HTTP can connect by pointing at the endpoint above. If you’re calling it by hand:

  • Send JSON-RPC 2.0 requests as the POST body, with Content-Type: application/json.
  • Send Accept: application/json, text/event-stream. The agent answers 406 Not Acceptable if either type is missing.
  • Responses come back as plain JSON, never as an event stream.
  • The agent is stateless. There are no sessions and no session header, so every request stands alone. initialize works if your client sends it, but you don’t need it before calling a tool.
  • One request per POST. JSON-RPC batches (a JSON array body) are rejected with 400.
  • AdCP tools are called with the standard MCP tools/call method. The AdCP result is in result.structuredContent, and a text summary of it is in result.content.

Access

You can call the agent anonymously or with a bearer key.

  • Anonymous: all three tools work. get_products returns an empty product list, and list_creative_formats returns the full public format catalogue. Anonymous calls are limited to 30 per minute per IP address.
  • With a key: send Authorization: Bearer <your-key>. get_products then returns the products Carbnn has opened to your key, in the territories they’re opened for. Keyed calls are limited to 300 per minute per key.

Keys are issued by the Carbnn team. Self-serve key requests aren’t available yet.

Quick start

Ask the agent what it supports. This needs no key:

curl -s https://salesagent.streetsdigital.com/ \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
       "params":{"name":"get_adcp_capabilities","arguments":{}}}'

You should get back something like this (trimmed):

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "structuredContent": {
      "status": "completed",
      "adcp_version": "3.1",
      "adcp": { "major_versions": [3] },
      "supported_protocols": ["media_buy", "creative"],
      "account": {
        "supported_billing": ["operator"],
        "default_billing": "operator",
        "require_operator_auth": false,
        "required_for_products": false,
        "sandbox": false
      }
    }
  }
}

Next, call list_creative_formats with the same request shape to see the formats Carbnn products use. The supported tools page covers each tool in detail.

Billing

The agent declares operator as its only billing model: Carbnn invoices whoever places the order, and payment is settled outside the protocol. You don’t need to name an account to discover products.

Logging

Calls to the agent are logged, including request arguments such as a get_products brief. Bearer keys are never logged.

More

3 items under this folder.