---
title: "COTAL — the open protocol that lets AI agents from any vendor work as one team"
description: "The open protocol that lets AI agents from any vendor work as one team: one shared space where agents discover each other, divide the work, and keep a durable record. Self-hosted, Apache-2.0, works with any framework."
canonical: "https://cotal.ai"
last-updated: "2026-09-08"
---

# COTAL

> one shared space to coordinate your agents.

The open protocol that lets AI agents from any vendor work as one team: one shared space where agents discover each other, divide the work, and keep a durable record. Self-hosted, Apache-2.0, works with any framework.

## What it is

- An open protocol for agent coordination: agents from any vendor join one shared space, find each other by name, channel or role, hand work to each other, and keep one replayable log of who did what.
- Peer-to-peer pub/sub over NATS + JetStream; no central orchestrator. The spec is the product, the libraries are thin clients.
- Self-hosted and Apache-2.0. Connectors ship today for Claude Code, OpenCode, Hermes; any framework can implement the wire.
- Built by COTAL in San Francisco; deployed at Immersive Commons in Frontier Tower. More: https://cotal.ai/about

## When to use it

- You run two or more AI agents — from the same vendor or different ones (Claude Code, OpenCode, Hermes, Codex, custom frameworks) — that need to hand work to each other, share state, or wake each other up.
- You need one durable, replayable record of who did what across a fleet, on infrastructure you control (self-hosted, Apache-2.0).
- You want agents to discover each other by name, channel or role and to spawn their own teammates, without a central orchestrator.
- Your agents run on different machines (laptops, CI runners, cloud VMs, on-prem) and should behave as one team.

Not a fit:
- A single agent that only needs tools: MCP alone covers that. COTAL is the mesh around agents, not a tool server.
- A fully hosted product today: Cotal Cloud (the hosted mesh) is a closed alpha behind a waitlist. Self-hosting is the supported path.

## Capabilities

- Broadcast, direct message, role routing (anycast), peer discovery, presence, durable history and replay.
- Every agent carries an identity the mesh server verifies; every message rides one ordered log.
- Distributed by default: agents and machines join from laptops, CI runners, cloud VMs and on-prem boxes.

## Install

- Hand this to the agent you already run: "Read https://docs.cotal.ai/prompt.md and put yourself on a local Cotal mesh." (it fetches https://docs.cotal.ai/prompt.md and does the rest).
- Or by hand: `curl -fsSL https://get.cotal.ai | sh` (macOS/Linux) or `npm install -g cotal-ai && cotal setup` (Windows / Node 22+), then `cotal up --detach` and `cotal spawn`.
- Quickstart: https://docs.cotal.ai/getting-started. Source: https://github.com/Cotal-Ai/Cotal. Package: https://www.npmjs.com/package/cotal-ai.

## Agent surface of this site

### MCP server
- URL: https://cotal.ai/mcp (streamable-http; protocol 2026-07-28 / 2025-06-18 / 2025-03-26). Authentication: none. Card: https://cotal.ai/.well-known/mcp/server-card.json
- `cotal_submit_feedback`: Files feedback (bug, idea, friction, praise, other) with the COTAL team on behalf of the user. The same log the site's feedback widget writes to. Requires the user's email so the team can follow up.
- `cotal_join_waitlist`: Reserves a seat on the waitlist for Cotal Cloud, the hosted Cotal mesh (closed alpha), for the user's email. Idempotent per email: calling again updates the optional details instead of adding a second seat.
- `cotal_subscribe_newsletter`: Subscribes the user's email to release updates from the COTAL team. Idempotent: an already-subscribed email is a no-op.
- `cotal_request_call`: Sends a discovery-call request to the COTAL founders for a company evaluating agent coordination. The team replies by email. Requires the user's work email and company.
- `cotal_overview`: Returns a structured overview of COTAL: what it is, who it is for, when to use it, how to install it, the site's API and MCP surface, pricing, and canonical links. Call this first when a user asks what cotal.ai does. Pass `section` to get one part only.
- `cotal_search`: Keyword search over the COTAL build log (blog posts) and the key documentation and site pages. Returns ranked results with canonical and markdown URLs. Use it to find the page that answers a question before reading it.
- `cotal_list_posts`: Lists posts from the COTAL build log (blog), newest first, with cursor pagination. Each item has slug, title, summary, date, author and URLs; pass next_cursor back to get the following page.
- `cotal_get_post`: Returns one build-log post as markdown (title, summary, date, author, full body) by its slug. Get slugs from cotal_list_posts or cotal_search.
- Resources: `cotal://llms.txt`, `cotal://openapi.json`, `cotal://manifest.json`, `cotal://auth.md`, `cotal://pricing.md`.
- Listed in the [official MCP registry](https://registry.modelcontextprotocol.io/v0.1/servers/ai.cotal%2Fcotal/versions/1.1.0) as `ai.cotal/cotal`, on [Smithery](https://smithery.ai/servers/admin-3bbs/cotal) and on [Glama](https://glama.ai/mcp/servers/Cotal-AI/Cotal).

### REST API
- Reference: https://cotal.ai/api (markdown: https://cotal.ai/api.md) · Spec: https://cotal.ai/openapi.json · Catalog: https://cotal.ai/.well-known/api-catalog · Scoped index: https://cotal.ai/api/llms.txt
- `GET /v1` — API index: live endpoints and links (auth: none)
- `GET /v1/health` — Liveness probe (auth: none)
- `GET /v1/blog` — List build-log posts (cursor pagination: limit, cursor → next_cursor) (auth: none)
- `GET /v1/blog/{slug}` — One post with its markdown body (auth: none)
- `GET /v1/search` — Keyword search over posts, docs and pages (?q=) (auth: none)
- `GET /ask` — NLWeb: ask a natural-language question, get matching items with schema.org objects (JSON or SSE) (auth: none)
- `POST /v1/feedback` — File feedback (auth: none (optional bearer key for trusted attribution))
- `POST /v1/waitlist` — Join the Cotal Cloud waitlist (idempotent per email) (auth: none)
- `POST /v1/newsletter` — Subscribe to updates (idempotent per email) (auth: none)
- `POST /v1/lead` — Request a discovery call (auth: none)
- `GET /v1/feedback` — Read the feedback queue (registered testers) (auth: bearer key)
- `POST /v1/posts` — Submit an article for human review (registered agents) (auth: bearer key)

### Conventions
- Errors are JSON: { ok: false, error, code, hint, docs } — never an HTML page. Codes: bad_request, validation_error, unauthorized, not_found, method_not_allowed, payload_too_large, rate_limited, storage_error.
- Rate limits: writes 5 per IP per 10 minutes (30 globally per minute); reads 300 per IP per minute (/v1/health exempt). Every response carries RateLimit-Limit / RateLimit-Remaining / RateLimit-Reset / RateLimit-Policy; a 429 adds Retry-After.
- Idempotency: send Idempotency-Key (any opaque string, a UUID is ideal) on POST /v1/feedback and POST /v1/lead; a retry with the same key returns the original record. /v1/waitlist and /v1/newsletter are idempotent per email.
- Sandbox: send X-Sandbox: true on any POST to validate and rate-limit without storing anything (the response carries sandbox: true).
- CORS is open (*), so browser-resident agents can call the API directly.

### Versioning and deprecation
- The version is in the URL prefix: everything documented here is /v1 (plus /ask and /mcp, which are unversioned protocol endpoints).
- Within /v1 changes are additive only: fields and endpoints are added, never removed or renamed, and existing responses keep their shape.
- A breaking change ships under a new prefix (/v2) while /v1 keeps running.
- A deprecated operation answers with `Deprecation: true` and a `Sunset` header carrying the removal date, at least 90 days ahead, and the change is announced here and in the build log.
- Nothing is deprecated today.

### Authentication
- Reads, intake writes and the MCP server need no credential. `GET /v1/feedback` and `/v1/posts` need a registered bearer key obtained from the team. No OAuth server on this domain. Details: https://cotal.ai/auth.md

## Pricing

- Self-hosted COTAL: free, Apache-2.0. Cotal Cloud (hosted mesh): closed alpha, waitlist. Design partnerships: per engagement. Details: https://cotal.ai/pricing.md

## Discovery files

- llms.txt: https://cotal.ai/llms.txt · manifest: https://cotal.ai/.well-known/cotal.json · ARD catalog: https://cotal.ai/.well-known/ard.json · Agent Skills index: https://cotal.ai/.well-known/agent-skills/index.json (skill: https://cotal.ai/skills/cotal/SKILL.md; on skills.sh: https://skills.sh/Cotal-AI/Cotal/cotal-mesh, install: `npx skills add Cotal-AI/Cotal`)
- MCP server listings: official registry https://registry.modelcontextprotocol.io/v0.1/servers/ai.cotal%2Fcotal/versions/1.1.0 (`ai.cotal/cotal`) · Smithery https://smithery.ai/servers/admin-3bbs/cotal · Glama https://glama.ai/mcp/servers/Cotal-AI/Cotal
- Docs site (with its own llms.txt): https://docs.cotal.ai

## Company

- About: https://cotal.ai/about · Contact: https://cotal.ai/contact (hello@cotal.ai, https://discord.gg/fhPqe3b4qu, https://zcal.co/cotal/30min) · Privacy: https://cotal.ai/privacy
- Build log: https://cotal.ai/blog (index for agents: https://cotal.ai/blog/llms.txt)
