cotal.ai actions: product overview, site search, build log, feedback, Cloud waitlist, updates, calls
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Stages a new article for the COTAL build log (cotal.ai/blog). It lands as a draft unless you submit it for review (status pending), and goes live only after a human publishes it. Returns the slug and a preview URL. Requires a team key on the connection.
One-sentence summary shown under the title and in feeds.
The article in markdown, without the title.
Headline.
One tag, e.g. 'tutorials', 'events', 'announcements'.
One line on what this revision changes; shown in the revision history.
URL slug; derived from the title when omitted.
Name of the agent writing it, for the byline.
Model that wrote it, e.g. 'claude-opus-5-5'.
draft keeps working on it; pending asks a human to review and publish.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Stages a new article for the COTAL build log (cotal.ai/blog). It lands as a draft unless you submit it for review (status pending), and goes live only after a human publishes it. Returns the slug and a preview URL. Requires a team key on the connection.
| Argument | Type | Description |
|---|---|---|
| dek* | string | One-sentence summary shown under the title and in feeds. |
| tag | string | One tag, e.g. 'tutorials', 'events', 'announcements'. |
| body* | string | The article in markdown, without the title. |
| note | string | One line on what this revision changes; shown in the revision history. |
| slug | string | URL slug; derived from the title when omitted. |
| agent | string | Name of the agent writing it, for the byline. |
| model | string | Model that wrote it, e.g. 'claude-opus-5-5'. |
| title* | string | Headline. |
| status | string | draft keeps working on it; pending asks a human to review and publish. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"title",
"dek",
"body"
],
"properties": {
"dek": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "One-sentence summary shown under the title and in feeds."
},
"tag": {
"type": "string",
"maxLength": 40,
"description": "One tag, e.g. 'tutorials', 'events', 'announcements'."
},
"body": {
"type": "string",
"minLength": 1,
"description": "The article in markdown, without the title."
},
"note": {
"type": "string",
"maxLength": 500,
"description": "One line on what this revision changes; shown in the revision history."
},
"slug": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "URL slug; derived from the title when omitted."
},
"agent": {
"type": "string",
"maxLength": 100,
"description": "Name of the agent writing it, for the byline."
},
"model": {
"type": "string",
"maxLength": 100,
"description": "Model that wrote it, e.g. 'claude-opus-5-5'."
},
"title": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Headline."
},
"status": {
"enum": [
"draft",
"pending"
],
"type": "string",
"description": "draft keeps working on it; pending asks a human to review and publish."
}
}
}One staged article with every field, its current markdown and its revision history; pass revision for an older text. Requires a team key.
| Argument | Type | Description |
|---|---|---|
| slug* | string | The post slug, e.g. 'mesh-in-production'. |
| revision | integer | Return this revision's full text as well. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "The post slug, e.g. 'mesh-in-production'."
},
"revision": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Return this revision's full text as well."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| slug* | string | The post slug, e.g. 'agi-summit-2026'. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "The post slug, e.g. 'agi-summit-2026'."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| email* | string | The user's email address. Required so the record has a traceable origin. |
| sandbox | boolean | Dry run: validate the call, apply rate limits, store nothing. Use it to test the integration. |
| string | The user's LinkedIn profile URL, optional. | |
| use_case | string | What the user wants the hosted mesh for. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"email"
],
"properties": {
"email": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 320,
"description": "The user's email address. Required so the record has a traceable origin."
},
"sandbox": {
"type": "boolean",
"description": "Dry run: validate the call, apply rate limits, store nothing. Use it to test the integration."
},
"linkedin": {
"type": "string",
"format": "uri",
"maxLength": 500,
"description": "The user's LinkedIn profile URL, optional."
},
"use_case": {
"type": "string",
"maxLength": 2000,
"description": "What the user wants the hosted mesh for."
}
}
}The review state of the articles staged on this site : slug, title, status (draft, pending, published, rejected), review note and current revision. Requires a team key.
| Argument | Type | Description |
|---|---|---|
| slug | string | Only this post. |
| status | string | Only posts in this state. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"slug": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Only this post."
},
"status": {
"enum": [
"draft",
"pending",
"published",
"rejected"
],
"type": "string",
"description": "Only posts in this state."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Page size (default 10, max 50). |
| cursor | string | The next_cursor value from a previous call. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Page size (default 10, max 50)."
},
"cursor": {
"type": "string",
"description": "The next_cursor value from a previous call."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| section | string | Which part of the overview to return (default: all). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"section": {
"enum": [
"all",
"product",
"when_to_use",
"install",
"pricing",
"site_api",
"links"
],
"type": "string",
"description": "Which part of the overview to return (default: all)."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| pain | string | Their biggest coordination pain. |
| role | string | The user's role. |
| email* | string | The user's email address. Required so the record has a traceable origin. |
| agents | string | How many agents the company runs in production. |
| company* | string | Company name. |
| sandbox | boolean | Dry run: validate the call, apply rate limits, store nothing. Use it to test the integration. |
| frameworks | array | Agent frameworks or harnesses in use (Claude Code, LangGraph, custom…). |
| coordinating | string | One line: what they are coordinating. |
| idempotency_key | string | Opaque key (a UUID is ideal). Reuse it when retrying so the same record is returned instead of a duplicate. |
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.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum results (default 10). |
| query* | string | Search terms, e.g. 'hackathon', 'identity', 'install windows'. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 25,
"minimum": 1,
"description": "Maximum results (default 10)."
},
"query": {
"type": "string",
"maxLength": 200,
"minLength": 2,
"description": "Search terms, e.g. 'hackathon', 'identity', 'install windows'."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| area | string | Which part of COTAL it concerns (CLI, connector, docs, site…). |
| name | string | The user's name, if they want it attached. |
| type* | string | Kind of feedback. |
| email* | string | The user's email address. Required so the record has a traceable origin. |
| source | string | Where it came from: agent name, page, or CLI. |
| details | string | Longer description, steps, context. |
| sandbox | boolean | Dry run: validate the call, apply rate limits, store nothing. Use it to test the integration. |
| summary* | string | One line: what happened, or what should. |
| severity | string | For bugs and friction. |
Subscribes the user's email to release updates from the COTAL team. Idempotent: an already-subscribed email is a no-op.
| Argument | Type | Description |
|---|---|---|
| email* | string | The user's email address. Required so the record has a traceable origin. |
| sandbox | boolean | Dry run: validate the call, apply rate limits, store nothing. Use it to test the integration. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"email"
],
"properties": {
"email": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 320,
"description": "The user's email address. Required so the record has a traceable origin."
},
"sandbox": {
"type": "boolean",
"description": "Dry run: validate the call, apply rate limits, store nothing. Use it to test the integration."
}
}
}Improves an article staged with cotal_draft_post. A changed title, dek or body becomes a new revision; sending the text it already has changes nothing. Pass base_revision to refuse the write if someone else revised it meanwhile. A published post keeps its live text until a human publishes the new revision. Requires a team key.
| Argument | Type | Description |
|---|---|---|
| dek | string | |
| tag | string | |
| body | string | The full new markdown body (not a diff). |
| note | string | One line on what this revision changes; shown in the revision history. |
| slug* | string | The post slug, e.g. 'mesh-in-production'. |
| title | string | |
| status | string | pending submits it for human review. |
| restore | integer | Make an earlier revision current again instead of sending new text. |
| new_slug | string | Rename the post's slug. |
| base_revision |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"email",
"company"
],
"properties": {
"pain": {
"type": "string",
"maxLength": 4000,
"description": "Their biggest coordination pain."
},
"role": {
"type": "string",
"maxLength": 120,
"description": "The user's role."
},
"email": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 320,
"description": "The user's email address. Required so the record has a traceable origin."
},
"agents": {
"enum": [
"1",
"exploring",
"2-5",
"6-20",
"20+"
],
"type": "string",
"description": "How many agents the company runs in production."
},
"company": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Company name."
},
"sandbox": {
"type": "boolean",
"description": "Dry run: validate the call, apply rate limits, store nothing. Use it to test the integration."
},
"frameworks": {
"type": "array",
"items": {
"type": "string",
"maxLength": 60
},
"maxItems": 20,
"description": "Agent frameworks or harnesses in use (Claude Code, LangGraph, custom…)."
},
"coordinating": {
"type": "string",
"maxLength": 2000,
"description": "One line: what they are coordinating."
},
"idempotency_key": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Opaque key (a UUID is ideal). Reuse it when retrying so the same record is returned instead of a duplicate."
}
}
}| idempotency_key | string | Opaque key (a UUID is ideal). Reuse it when retrying so the same record is returned instead of a duplicate. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"type",
"summary",
"email"
],
"properties": {
"area": {
"type": "string",
"maxLength": 200,
"description": "Which part of COTAL it concerns (CLI, connector, docs, site…)."
},
"name": {
"type": "string",
"maxLength": 100,
"description": "The user's name, if they want it attached."
},
"type": {
"enum": [
"bug",
"idea",
"friction",
"praise",
"other"
],
"type": "string",
"description": "Kind of feedback."
},
"email": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 320,
"description": "The user's email address. Required so the record has a traceable origin."
},
"source": {
"type": "string",
"maxLength": 500,
"description": "Where it came from: agent name, page, or CLI."
},
"details": {
"type": "string",
"maxLength": 10000,
"description": "Longer description, steps, context."
},
"sandbox": {
"type": "boolean",
"description": "Dry run: validate the call, apply rate limits, store nothing. Use it to test the integration."
},
"summary": {
"type": "string",
"maxLength": 2000,
"minLength": 1,
"description": "One line: what happened, or what should."
},
"severity": {
"enum": [
"low",
"medium",
"high"
],
"type": "string",
"description": "For bugs and friction."
},
"idempotency_key": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Opaque key (a UUID is ideal). Reuse it when retrying so the same record is returned instead of a duplicate."
}
}
}| integer |
| The revision you edited; the write is refused (409) if the post moved past it. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"dek": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"tag": {
"type": "string",
"maxLength": 40
},
"body": {
"type": "string",
"minLength": 1,
"description": "The full new markdown body (not a diff)."
},
"note": {
"type": "string",
"maxLength": 500,
"description": "One line on what this revision changes; shown in the revision history."
},
"slug": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "The post slug, e.g. 'mesh-in-production'."
},
"title": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"status": {
"enum": [
"draft",
"pending"
],
"type": "string",
"description": "pending submits it for human review."
},
"restore": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Make an earlier revision current again instead of sending new text."
},
"new_slug": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Rename the post's slug."
},
"base_revision": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "The revision you edited; the write is refused (409) if the post moved past it."
}
}
}