Skip to main content
The Model Context Protocol (MCP) is an open standard that lets AI assistants use external tools. Placet ships an MCP server (@placet/mcp) that exposes all Placet capabilities — sending messages, requesting human reviews, rendering diagrams, and more — as MCP tools. This is the recommended connection type when your agent runs inside an AI-powered IDE or coding assistant like Claude Code, VS Code Copilot, Cursor, or Windsurf.

Transport Modes

The MCP server supports two transport modes:

Setup

The MCP server is included in the default docker-compose.yml:
Start it alongside the rest of Placet:

npx (local / stdio)

For local development or one-off usage:

Client Configuration

VS Code / GitHub Copilot

Create .vscode/mcp.json in your project:

Claude Code

Or add to ~/.claude/claude_desktop_config.json:

Cursor

Add to Cursor settings (Settings > MCP Servers):

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

Any stdio-compatible client

For clients that support stdio transport:
Set PLACET_DEFAULT_CHANNEL to make the channelId parameter optional in all tools. This is useful when your agent only works with a single channel.

Available Tools

Channel Management

Messages

Reviews (Human-in-the-Loop)

Status

Plugins

Plugin tools are registered dynamically at startup. The MCP server fetches all installed plugin manifests from the backend and creates a send_{plugin_name}_message tool for each plugin that has an inputSchema. See Dynamic Plugin Tools below.

Review Types

The send_review_message tool supports 5 review types. The AI agent sends the review, and a human responds in the Placet dashboard.

Approval

Show buttons for the human to approve or reject an action.
Button styles: primary (green), danger (red), secondary (gray), ghost (outline) Response: { "selectedOption": "approve", "comment": "Looks good!" }

Selection

Let the human choose from a list of options.
Set mode to "multi" to allow selecting multiple items. Response: { "selectedIds": ["opt-a"] }

Form

Render a structured form with typed fields.
Supported field types: text, number, email, url, textarea, select, checkbox, date, time, datetime, range, password Field options: required, placeholder, defaultValue, min, max, step, unit, options (for select) Response: { "serverName": "prod-api-02", "region": "eu-west-1", "instances": 3, "enableSSL": true, ... }

Text Input

Free text input, optionally with a markdown editor.
Response: { "text": "The user's response text..." }

Freeform

Pass-through for custom plugin UIs. See Dynamic Plugin Tools.

Dynamic Plugin Tools

The MCP server discovers installed plugins at startup and registers a tool for each one. For example, the built-in plugins create these tools:

send_kroki_diagram_message

Render diagrams (Mermaid, PlantUML, D2, Graphviz, etc.) as SVG via a Kroki server.
Supported diagram types: mermaid, plantuml, d2, graphviz, ditaa, erd, nomnoml, svgbob, vega, vegalite, wavedrom, bytefield, excalidraw

send_form_submit_message

Render a pre-filled form and submit to a webhook.
When you install additional plugins with an inputSchema, the MCP server automatically creates new send_{plugin}_message tools — no code changes required.

Workflow Pattern

The typical MCP workflow is fire → poll → continue: The wait_for_review tool holds the connection for up to 5 minutes (configurable via MCP_CONNECTION_TIMEOUT_MS), polling the backend every 30 seconds. If the human hasn’t responded, it returns status: "timeout" — the agent can call wait_for_review again to keep waiting.
Some MCP clients (like VS Code) have their own HTTP timeouts that may be shorter than the configured wait time. If waitInline=true fails, use the two-step pattern: send_review_message followed by wait_for_review.

Environment Variables