MCP server
Connect Claude Code, VS Code, Cursor, a Google ADK agent, or any Model Context Protocol client directly to Capci's generation tools — diagrams, posts, charts, and more — as native tool calls.
Live remote endpoint — nothing to run yourself
Capci hosts the MCP server for you. Point any MCP client at:
https://capci-mcp-990063403257.asia-south1.run.app/mcpAdd your Developer-plan x-api-key header and you're connected — no install, no server to keep running.
What it can do
- Generate branded posts from a one-line prompt — 20 built-in formats, auto-picked or pinned explicitly.
- Generate diagrams — architecture, flowchart, sequence, class, ER, mindmap, Gantt — as a conversational resource you keep refining with plain English.
- Animate a diagram into a reveal GIF.
- Generate data charts — bar, line, donut, KPI tiles — directly from numbers, no prompt.
- Restyle or resize anything for free — re-theme/resize a prior result without spending another generation call.
- Configure a brand once and have every generation apply it automatically, with a per-call unbranded escape hatch.
- Generate brand-kit assets — social covers, banners, cards — deterministically from your saved brand.
- Generate a logo mark from a description — the one pay-per-use tool; everything above is unlimited on the Developer plan.
Tools
All eleven are unlimited on an active Developer plan except create_logo. Fields marked * are required.
| Tool | What it does | Key inputs |
|---|---|---|
| create_post | Generate a branded social/marketing image from a prompt. Returns a PNG plus reusable content. | prompt*, format, size, theme, style, brand, unbranded |
| restyle_content | Free re-theme/resize of a prior create_post/create_chart result — no new generation. | format*, content*, size, theme, brand |
| create_diagram | Generate a diagram from a prompt. Returns a durable id to refine/restyle/animate later. | prompt*, type, size, theme, nodeStyle, transparent, brand, unbranded |
| refine_diagram | Update a diagram by id. With a prompt: content edit. Without: free instant restyle. | id*, prompt, size, theme, nodeStyle, transparent, colors, brand, unbranded |
| animate_diagram | Turn an existing diagram into a reveal GIF. Blocking — waits for completion. | id*, anim, speed |
| create_chart | Generate a bar/line/donut/KPI chart directly from data — no prompt, deterministic. | chartType*, series/slices/tiles, theme, size |
| set_brand | Configure the saved brand profile every later create_* call inherits by default. | name, handle, tagline, logo, colors |
| list_brandkit_assets | List available brand-kit asset types (banners, covers, cards) and their ids. | (none) |
| create_brandkit_asset | Generate a specific brand-kit asset from the saved brand — free, no prompt. | id*, theme, tagline, pills |
| create_logo Pay-per-use | Generate a logo mark from a description. | prompt* |
| list_post_layouts | List post layout ids/schemas usable with create_post's format field. | (none) |
Authentication
Every call needs a Capci Developer Plan API key (Dashboard → Account → Developer, shown once at creation). The MCP server itself has no login — you pass the key when you connect your client, and it's forwarded on every tool call. A key without an active Developer plan can still discover the tools, but every call fails with a clear plan_required error.
x-api-key: capci_your_api_key_hereConnect a client
All configs below use the live remote endpoint — https://capci-mcp-990063403257.asia-south1.run.app/mcp.
Claude Code
claude mcp add --transport http capci https://capci-mcp-990063403257.asia-south1.run.app/mcp \
--header "x-api-key: YOUR_KEY"VS Code
Add to .vscode/mcp.json (workspace) or via Command Palette → "MCP: Open User Configuration". Note the top-level key is servers, not mcpServers.
{
"servers": {
"capci": {
"type": "http",
"url": "https://capci-mcp-990063403257.asia-south1.run.app/mcp",
"headers": { "x-api-key": "${input:capci-api-key}" }
}
},
"inputs": [
{ "type": "promptString", "id": "capci-api-key", "description": "Capci API key", "password": true }
]
}Cursor
Add to ~/.cursor/mcp.json (global) or .cursor/mcp.json (project). Cursor infers HTTP transport from the presence of url.
{
"mcpServers": {
"capci": {
"url": "https://capci-mcp-990063403257.asia-south1.run.app/mcp",
"headers": { "x-api-key": "YOUR_KEY" }
}
}
}Google ADK (Python)
Run with CAPCI_MCP_INLINE_IMAGES=0 for agent hosts — the default inline base64 images will blow past a model's token limit on repeated calls.
from google.adk.tools.mcp_tool import McpToolset
from google.adk.tools.mcp_tool.mcp_session_manager import StreamableHTTPConnectionParams
capci_tools = McpToolset(
connection_params=StreamableHTTPConnectionParams(
url="https://capci-mcp-990063403257.asia-south1.run.app/mcp",
headers={"x-api-key": "YOUR_KEY"},
),
)
root_agent = LlmAgent(
model="gemini-2.5-flash",
name="capci_agent",
tools=[capci_tools],
)Any other MCP client works the same way — this is a standard Streamable HTTP server: point it at the /mcp URL above and add an x-api-key header.
Code sample (JS/TS, official SDK)
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
const transport = new StreamableHTTPClientTransport(
new URL('https://capci-mcp-990063403257.asia-south1.run.app/mcp'),
{ requestInit: { headers: { 'x-api-key': process.env.CAPCI_API_KEY } } },
);
const client = new Client({ name: 'my-app', version: '1.0.0' });
await client.connect(transport);
// Create a diagram
const diagram = await client.callTool({
name: 'create_diagram',
arguments: {
prompt: 'Users hit a load balancer, which fans out to two API servers backed by a database and a cache.',
type: 'architecture',
theme: 'dark',
},
});
const meta = JSON.parse(diagram.content.find((b) => b.type === 'text' && b.text.startsWith('{'))?.text || '{}');
console.log('Diagram id:', meta.id);
// Refine it — same id, plain-English follow-up
await client.callTool({
name: 'refine_diagram',
arguments: { id: meta.id, prompt: 'Add a CDN in front of the load balancer.' },
});
await client.close();Raw API sample
For integrating from a language without an MCP SDK, or to see the wire format directly: initialize, acknowledge, then call a tool. x-api-key only needs to be present on the tool-call request — discovery works without it.
# 1) Initialize — establishes a session, returns an Mcp-Session-Id header
curl -si -X POST https://capci-mcp-990063403257.asia-south1.run.app/mcp \
-H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-d '{
"jsonrpc": "2.0", "id": 1, "method": "initialize",
"params": {
"protocolVersion": "2025-03-26",
"capabilities": {},
"clientInfo": { "name": "my-client", "version": "1.0.0" }
}
}'
# → look for the "mcp-session-id" response header, save it as $SID
# 2) Acknowledge (required by the protocol before any tool call)
curl -s -X POST https://capci-mcp-990063403257.asia-south1.run.app/mcp \
-H "mcp-session-id: $SID" \
-H 'content-type: application/json' -H 'accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","method":"notifications/initialized"}'
# 3) Call a tool
curl -s -X POST https://capci-mcp-990063403257.asia-south1.run.app/mcp \
-H "mcp-session-id: $SID" -H "x-api-key: YOUR_KEY" \
-H 'content-type: application/json' -H 'accept: application/json, text/event-stream' \
-d '{
"jsonrpc": "2.0", "id": 2, "method": "tools/call",
"params": { "name": "create_chart", "arguments": {
"chartType": "bar", "title": "Quarterly Signups",
"series": [{"label":"Q1","value":120},{"label":"Q2","value":210}]
}}
}'