flowss runs a Model Context Protocol (MCP) server, so AI assistants and agents outside flowss (Claude Code, Claude Desktop, Cursor, VS Code, or software you write yourself) can use flowss as a tool: look up engines and templates, check whether a diagram parses and renders, critique it, convert it between notations, generate a new diagram from a sentence, render it to SVG or PNG, diff two versions, and run the Science studio's checkers. This page explains what the server offers, how to connect a client step by step, every tool with its arguments and results, what is free and what is metered, the limits, and every error you can meet. It is a developer page, so it shows HTTP requests, headers and JSON. For the rest of the API, see The REST API and Embedding and the render API.
At a glance
| Fact | Value |
|---|---|
| Endpoint | https://www.flowss.ai/api/mcp |
| Transport | JSON-RPC 2.0 over HTTP. POST a request, get one JSON response back |
| Protocol version | 2024-11-05 |
| Server name | glyph, version 1.0.0 (the handle clients may show; it names the flowss server) |
| Discovery | GET https://www.flowss.ai/api/mcp returns a JSON description and the tool list |
| Methods | initialize, tools/list, tools/call, ping, and the initialized notification |
| Tools | 10: six work without a key, four need your flowss API key |
| Authentication | Authorization: Bearer glyp_… with a flowss API key from your account page. No OAuth |
| Batches | Up to 20 JSON-RPC messages per request, run in order |
| Without a key | 200 requests a day per network address |
| With a key | 200 calls a day per account to the free tools; the keyed tools are metered like the REST API |
| AI costs | 1 AI point per diagram generated, per AI conversion and per AI engine detection, on hosted AI only |
What you can do with it
| Ask your assistant to… | Tool it uses | Key needed |
|---|---|---|
| "Which engine should I use for a C4 diagram?" | list_engines | No |
| "Find a template for a sequence diagram of an OAuth flow" | search_templates | No |
| "Does this Mermaid diagram have errors?" | verify_diagram | No |
| "How good is this diagram, and what would improve it?" | critique_diagram | No |
| "What notation is this snippet written in?" | detect_engine | No (better with a key) |
| "Convert this Mermaid flowchart to D2" | convert_engine | No for built-in conversions; yes for AI conversion |
| "Draw a three-tier web app with a cache and a Postgres database" | generate_diagram | Yes |
| "Render this diagram as a PNG" | render_diagram | Yes |
| "What changed between these two versions of the schema?" | diff_diagrams | Yes |
| "Balance this chemical equation" or "check this physics relation" | check_science | Yes |
A useful pattern for an agent: generate or edit a diagram, call verify_diagram to make sure it parses and draws, then critique_diagram to improve it, then render_diagram for the image.
Before you start
- For the free tools: nothing. You can connect without an account.
- For the keyed tools: a flowss account and an API key. API keys can be created on any plan.
- For the AI tools (
generate_diagram, and AI conversion or AI detection): hosted AI points, which come with Plus (200 a month), Ultra and Enterprise (600 a month), or points you bought earlier. Over MCP, AI always runs on hosted points: your own AI provider key, whether kept in your browser or saved to your account, is not used for MCP calls. On Free and Starter without bought points,generate_diagramreturns the same "no points" message the app shows, whiledetect_engineandconvert_enginefall back to their free answers where they have one (see each tool below). See AI points and limits.
Step 1: Create a flowss API key
- Sign in and open your account page.
- Find the API keys panel ("For the headless
/api/renderendpoint (which needs a key or a signed-in session), the/api/v1endpoints and the MCP server — wire diagrams into CI, docs builds, or back-end pipelines. Cleartext is shown ONCE on creation."). - Type a name in Key name (e.g. CI pipeline), for example "Claude Desktop", and click Create key. A blank name becomes "Untitled".
- The panel shows New key — copy now, won't show again with the key, which starts with
glyp_. Click Copy and store the key somewhere safe, such as a password manager. Then click Dismiss. - The key now appears in the list with its name, its first characters (
glyp_xxxxx…), "never used" or the date it was last used, and the date it was created. (Until you create one, the list reads "No API keys yet.")
flowss stores only a fingerprint of the key, never the key itself, so a lost key cannot be shown again: revoke it and create a new one. Revoke asks "Revoke this key? Existing integrations using it will stop working immediately." and takes effect at once.
Tip: Create one key per client or machine. Each key appears separately in the list with its own "last used" date, so you can revoke one without breaking the others. All of an account's keys share the same daily allowances.
Step 2: Check the server answers
Discovery needs no key:
curl https://www.flowss.ai/api/mcp
It returns the server name and version, the protocol version, the endpoint, a line about authentication, the methods and the tool definitions.
The JSON-RPC handshake:
curl -X POST https://www.flowss.ai/api/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}'
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"protocolVersion": "2024-11-05",
"capabilities": { "tools": {} },
"serverInfo": { "name": "glyph", "version": "1.0.0" }
}
}
Your key, on a keyed tool:
curl -X POST https://www.flowss.ai/api/mcp \
-H 'Authorization: Bearer glyp_YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "generate_diagram",
"arguments": { "prompt": "three-tier web app with a cache and a Postgres DB" }
}
}'
If that returns a diagram, your key works and your account has points. The server also accepts the key without the Bearer prefix.
Step 3: Connect your client
Point your client at https://www.flowss.ai/api/mcp using its HTTP transport (some clients call it "Streamable HTTP"), and add the Authorization header with your key. The client then discovers the tools by itself through tools/list. Leave the header out to use only the free tools.
Things to know about this server when you configure a client:
- It authenticates with the
Authorizationheader only. It has no OAuth sign-in flow, so a client that can only add remote servers through an OAuth sign-in needs a bridge (see Claude Desktop below). - It answers every
POSTwith a single JSON response. It does not stream events to the client, and aGETreturns the JSON description above rather than an event stream. - It always answers
initializewith protocol version2024-11-05, whatever version your client proposes, and it does not issue session ids.
The examples below were written for each client's current configuration format. Client formats change; if a field is not recognised, check your client's own MCP documentation and keep the same URL and header.
Claude Code
claude mcp add --transport http flowss https://www.flowss.ai/api/mcp \
--header "Authorization: Bearer glyp_YOUR_KEY"
Then ask, for example, "Use flowss to draw our login flow as a sequence diagram and verify it."
Cursor
Add the server to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project):
{
"mcpServers": {
"flowss": {
"url": "https://www.flowss.ai/api/mcp",
"headers": { "Authorization": "Bearer glyp_YOUR_KEY" }
}
}
}
VS Code
Add the server to .vscode/mcp.json in your workspace:
{
"servers": {
"flowss": {
"type": "http",
"url": "https://www.flowss.ai/api/mcp",
"headers": { "Authorization": "Bearer glyp_YOUR_KEY" }
}
}
}
Claude Desktop
If your version of Claude Desktop cannot add a remote server with a custom Authorization header, connect through a local bridge instead. The community mcp-remote package (not made by flowss) runs with Node.js and forwards a header; add this to Claude Desktop's configuration file (claude_desktop_config.json) and restart Claude Desktop:
{
"mcpServers": {
"flowss": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://www.flowss.ai/api/mcp",
"--header",
"Authorization:${FLOWSS_AUTH}"
],
"env": { "FLOWSS_AUTH": "Bearer glyp_YOUR_KEY" }
}
}
}
Putting the key in env keeps the space in "Bearer glyp_…" out of the command line, which some systems split on.
Your own code
Any HTTP client can speak to the server directly: send JSON-RPC 2.0 messages by POST with Content-Type: application/json. A typical session is initialize, then tools/list, then any number of tools/call. There is no session to keep: each request stands alone.
import requests
URL = "https://www.flowss.ai/api/mcp"
HEADERS = {"Authorization": "Bearer glyp_YOUR_KEY"}
def call(tool, arguments, id=1):
body = {"jsonrpc": "2.0", "id": id, "method": "tools/call",
"params": {"name": tool, "arguments": arguments}}
r = requests.post(URL, json=body, headers=HEADERS, timeout=70)
return r.json()
print(call("verify_diagram", {"engine": "mermaid", "code": "graph LR\n A --> B"}))
Step 4: Try it
Ask your assistant something that needs flowss, for example:
- "List the flowss engines that can draw entity-relationship diagrams."
- "Generate a Mermaid sequence diagram of a password reset, then verify it with flowss."
- "Critique this D2 diagram and apply the top three suggestions."
- "Convert this Graphviz graph to D2."
- "Render this diagram as a dark PNG 1,600 pixels wide."
Your assistant shows each tool call it makes. Generated diagrams come back with an embed_url you can open in a browser to see the figure.
The tools
| Tool | Key | What it costs | What it returns |
|---|---|---|---|
list_engines | No | Free | Every engine: id, name, source language, description |
search_templates | No | Free | Matching templates: id, title, engine, description |
detect_engine | No | Free; 1 point when AI is asked (key only) | { engine, confidence, source } |
convert_engine | Only for AI conversion | Free for built-in conversions; 1 point for AI conversion | { engine, code, notes, method } |
verify_diagram | No | Free | { ok, summary, defects } |
critique_diagram | No | Free | Readiness, verification, a seven-dimension critique and findings |
generate_diagram | Yes | 1 point | { engine, title, code, embed_url, links } |
render_diagram | Yes | Free (counts toward the daily render allowance) | SVG text or a PNG image |
diff_diagrams | Yes | Free (counts toward the daily render allowance) | A structural diff and a summary |
check_science | Yes | Free (counts toward the daily render allowance) | The science API's result for the operation |
list_engines
No arguments. Returns { "count": N, "engines": [{ "id", "name", "language", "description" }] } for every engine flowss supports. Use it before generating or converting, to pick an engine id. The engines themselves are documented at /docs/engines.
search_templates
| Argument | Type | Required | Meaning |
|---|---|---|---|
query | string | No | A word matched against each template's title, engine and description |
engine | string | No | Only templates for this engine id |
limit | number | No | Most results to return; default 20, at most 100 |
Returns { "count", "templates": [{ "id", "title", "engine", "description" }] }. With no arguments it returns the first 20 templates. See The template gallery.
detect_engine
| Argument | Type | Required | Meaning |
|---|---|---|---|
code | string | Yes | The diagram source, up to 100 KB |
The built-in matcher runs first, with no key. When it is confident, the answer is { "engine", "confidence": "high" or "medium", "source": "heuristic" }. When it is not:
- Without a key, you get its best guess marked as such:
{ "engine", "confidence": "low", "source": "heuristic" }(mermaidwhen it has no guess at all). - With a key, the AI classifies the snippet and returns
"source": "ai", for 1 point once the AI has answered. If your account has no points, you get the low-confidence guess instead of an error.
convert_engine
| Argument | Type | Required | Meaning |
|---|---|---|---|
targetEngine | string | Yes | The engine id to convert to |
code | string | Yes | The source, up to 100 KB |
sourceEngine | string | No | The engine the code is in. Needed for the built-in converters |
How it converts:
| Situation | method | Key | Cost |
|---|---|---|---|
| Source and target are the same engine | transpiler (code returned unchanged, no notes) | No | Free |
| A built-in converter reads the source and nothing is lost | transpiler | No | Free |
| A built-in converter reads the source but drops something | transpiler-lossy, with notes naming what was dropped. If the loss is structural and you sent a key, AI conversion is used instead | No | Free (1 point if AI is used) |
| No built-in converter for the pair | ai | Yes | 1 point |
The built-in converters cover a Mermaid flowchart to D2 or PlantUML, D2 to Mermaid, Graphviz to D2, DBML to Mermaid (ER) or ERD, Markmap to a Weave mind map (lucidflow), and a Weave board to Mermaid, Graphviz, D2 or PlantUML. Without a key, a pair that needs AI returns the key-required message (or the lossy result, when there is one). With a key, the call goes on to the conversion service, which first tries one more free step: when you passed sourceEngine and asked for targetEngine: "lucidflow", it lays a graph-like source onto a Weave canvas structurally, with no AI and no point. With a key but no points, the lossy result is returned when there is one; otherwise the points message.
verify_diagram
| Argument | Type | Required | Meaning |
|---|---|---|---|
engine | string | Yes | Engine id |
code | string | Yes | The source, non-empty, up to 512 KB |
A mechanical check with no AI: does the source parse in its own notation, is it complete, do references resolve, does the engine's own checker accept it, and does it actually draw. Returns { "ok", "summary", "defects": [...] }, where a blocking defect fails the diagram and an advisory one is a note. It runs the same checks as the Studio's status bar.
critique_diagram
| Argument | Type | Required | Meaning |
|---|---|---|---|
engine | string | Yes | Engine id |
code | string | Yes | The source, non-empty, up to 512 KB |
request | string | No | The words that asked for this diagram (up to 2,000 characters are used). Unlocks the fidelity dimension |
The whole deterministic read, with no AI. Returns:
readiness: the level the diagram earns (empty, draft, sound, reviewed, publishable), with a label, a score, the reason and what blocks the next level;verification: asverify_diagram;critique: an overall score, a band, a summary, and seven dimensions (fidelity, completeness, structure, legibility, rigour, accessibility, portability), each with its findings and the concrete edit that would improve it, plus suggestedmoves. A dimension that cannot be judged is reported as unassessed, never as a pass;findings: the readiness findings.
generate_diagram
| Argument | Type | Required | Meaning |
|---|---|---|---|
prompt | string | Yes | What to draw, in plain language, up to 8,000 characters |
engine | string | No | An engine id to use. An unknown id is ignored and the engine is chosen for you |
Generates a complete diagram with hosted AI and returns:
{
"engine": "d2",
"title": "Food delivery — containers",
"code": "…the diagram source…",
"embed_url": "https://www.flowss.ai/embed?engine=d2&code=…&theme=dark",
"links": {
"embed": "https://www.flowss.ai/embed?engine=d2&code=…&theme=dark",
"render": "https://www.flowss.ai/api/render"
}
}
It costs 1 point, charged once the AI has answered, even if the answer then cannot be used ("The model returned malformed output."). It also counts toward your account's daily generation allowance: 60 a day on Free and Starter, 200 on Plus, 400 on Ultra and 500 on Enterprise. That allowance is counted before points are checked, so a call refused for lack of points still uses one. A generation may take up to 30 seconds. If the model names an engine flowss does not know, the result falls back to the engine you asked for, or to mermaid; a missing title becomes "Diagram".
render_diagram
| Argument | Type | Required | Meaning |
|---|---|---|---|
engine | string | Yes | Engine id. Only engines flowss can draw on its servers are supported |
code | string | Yes | The source, up to 100 KB |
format | svg or png | No | Default svg |
theme | light or dark | No | Default light |
width | number | No | PNG width in pixels; default 1,200, between 200 and 4,000 |
Returns the SVG as text, or the PNG as an image content block. GET https://www.flowss.ai/api/render lists which engines can be rendered and why the others cannot. A PNG that would exceed the render service's megapixel limit at the requested width is drawn narrower, or refused when even that is too large; ask for svg instead, which has no pixel limit. Source over 100 KB is refused ("Source is too large (>100 KB)…"). Rendering counts toward your account's daily render allowance of 60, shared with diff_diagrams, check_science and the REST render API. See Embedding and the render API.
diff_diagrams
| Argument | Type | Required | Meaning |
|---|---|---|---|
engine | string | Yes | Engine id of the before source |
before | string | Yes | The earlier source |
after | string | Yes | The later source |
afterEngine | string | No | The engine of after, if different |
Returns { "engine", "structured", "parseable_engine", "changed", "textChanged", "summary", "diff" }. For Mermaid (flowcharts), D2, Graphviz, DBML, Structurizr, SQL, ERD and OpenAPI the diff is structural when the source parses (added, removed and renamed nodes and edges; for SQL and DBML schemas, columns added, removed or retyped); otherwise structured is false and changed reflects a whitespace-insensitive text comparison. The summary is one line, such as "Added 1 edge (b→c).", "The source changed." or "No change." Each source may be up to 256 KB ("Source too large (>256 KB).").
check_science
| Argument | Type | Required | Meaning |
|---|---|---|---|
op | string | Yes | The operation, for example balance, check-equation, verify, convert, simulate, fit |
args | object | No | The operation's own fields, for example { "equation": "CH4 + O2 -> CO2 + H2O" } |
Runs the Science studio's deterministic checkers and model analysers. The checker operations include verify (a whole figure's claims, or a list of labels), balance, redox, oxidation-states, molar-mass, convert (units), dimension, check-equation, quantity, compare, constant, identifier, notation, pathway, figure-standards, palette, alt-text, accessibility, taxonomy, critique-design, randomise, factorial, replication, spectrum, beer-lambert, nmr-frequency, reporting-guideline, risk-of-bias and hazards. The model operations compute a Science figure's models: model, simulate, steady-state, r0, fit, sensitivity, montecarlo (a seed is required, at most 500 draws), graph, describe, regress, pi-groups, ledger-check and quantities. Every number a model operation computes comes back with a provenance entry naming its method and version. An unknown op is refused with the list of valid ones; GET https://www.flowss.ai/api/v1/science documents each operation's fields. See Science and The REST API.
Methods and messages
| Method | What it does |
|---|---|
initialize | The handshake. Returns the protocol version, capabilities: { tools: {} } and the server info |
notifications/initialized (or initialized) | A notification; no reply |
ping | Returns an empty result |
tools/list | Returns { tools: [{ name, description, inputSchema }] } |
tools/call | Runs a tool: params: { name, arguments } |
notifications/initialized(and any unknown method sent without anid) is a notification and gets no reply; sent on its own, it is answered with HTTP 202 and no body.- A message without
"jsonrpc": "2.0"or amethodis answered with the error "Invalid Request". - A batch is a JSON array of up to 20 messages. They run one at a time, in order, and the response is an array of the results.
- A batch stops starting new tool calls about 25 seconds in, so that the slowest call it started can still finish within the request's 60-second limit. Each call it did not start is answered with "Deadline exceeded: this batch ran out of time before this call could start, so it was not run and nothing was charged. Send it again in a smaller batch." The finished results are returned as normal.
- A request body may be up to about 4 MB.
Tool results
A successful call returns an MCP content array: a text block holding JSON (pretty-printed), the SVG text for render_diagram in SVG, or an image block (data in base64, mimeType: "image/png") for a PNG. A tool that fails returns a normal result with isError: true and a text block saying why, so your assistant can read it and react. JSON-RPC errors are used for problems with the request itself (invalid JSON, an unknown method or tool, an oversized batch) and for the daily limits.
Limits and metering
| What | Limit | Counted per |
|---|---|---|
| Requests without a key | 200 a day. A batch counts once | Network address |
Free tools called with a key (list_engines, search_templates, verify_diagram, critique_diagram, and detect_engine or convert_engine when answered without AI) | 200 calls a day | Account (all its keys together) |
generate_diagram | 60 a day on Free and Starter, 200 on Plus, 400 on Ultra, 500 on Enterprise; plus 1 point each | Account |
| AI conversion and AI detection | 1 point each | Account |
render_diagram, diff_diagrams, check_science | 60 a day in total, on every plan, shared with the REST API | Account |
| Messages per batch | 20 | Request |
| Request size | About 4 MB | Request |
| Source size | 100 KB for detect, convert and render; 512 KB for verify and critique; 256 KB per side for diff | Call |
All daily limits reset at midnight UTC. A keyed call to an AI tool is counted once, by the AI feature it reaches, never twice. Hosted AI over MCP also falls under flowss's daily safety limits on hosted AI (see AI points and limits).
Security
- Your key travels only in the header of your requests to flowss. flowss uses it to identify your account and charge your points; it is never sent to an AI provider.
- A key that does not verify is treated as no key. A mistyped or revoked key is not passed on to anything: the request is handled as keyless, the free tools still answer, and the keyed tools reply with the key-required message.
- Revoking a key takes effect immediately for every client using it.
- Treat the key like a password. Anyone holding it can spend your account's points and daily allowances. Prefer an environment variable or your client's secret storage to pasting it into shared files, and do not commit configuration files that contain it.
- The server holds no session state. Each request stands alone, so there is nothing to sign out of; to cut a client off, revoke its key.
Tips
- Give your assistant the order "generate, then verify, then critique":
verify_diagramandcritique_diagramare free, and catch most problems before you render or publish. - Pass
sourceEnginetoconvert_enginewhenever you know it. Without it the built-in converters cannot be used, and every conversion needs AI. - Pass the original request to
critique_diagramasrequestto get the fidelity score. - Ask for SVG unless you need a PNG: SVG stays sharp at any size and has no pixel limit.
- Keep batches small when they include
generate_diagram, which can take up to 30 seconds per call. - Use one API key per client so you can see each one's "last used" date and revoke one alone.
- Watch your points in your account menu or on your account page; every MCP generation appears in Points history as a Hosted AI call.
Limits and known constraints
- Over MCP, AI tools always use hosted AI points. Your own AI provider key is not used, so on Free and Starter the AI tools work only with points bought earlier on a plan with an allowance.
- Authentication is by API key header only; there is no OAuth sign-in.
- The server does not stream: every request gets one JSON response, and there are no server-initiated notifications.
- The server offers tools only. It has no MCP resources or prompts.
render_diagramdraws only the engines flowss can render on its servers;GET /api/renderlists them.generate_diagramcharges its point once the AI has answered, even if the answer is malformed.- The free tools are capped at 200 calls a day per account with a key, and 200 requests a day per network address without one. Several people behind one office or campus address share the keyless allowance.
- The server's handle is
glyph; some clients show that name next to its tools.
Troubleshooting
| Message or symptom | Cause | What to do |
|---|---|---|
"This tool needs a flowss API key: send Authorization: Bearer glyp_<key> (create one in Account → API keys)." | No key, or a key that did not verify (mistyped, revoked, or missing the glyp_ start) | Create or copy a key on your account page and send it as Authorization: Bearer glyp_… |
"Rate limit reached (200 keyless requests per day). Send Authorization: Bearer glyp_<key> for an allowance of your own." (HTTP 429) | The keyless allowance for your network address is used up | Add your API key, or wait until midnight UTC |
| "Rate limit reached (200 in-process tool calls per day for this key's account). Try again tomorrow." | Your account used its daily allowance of free tool calls | Wait until midnight UTC |
| "Rate limit reached (60/day). Try later.", or "Render failed (HTTP 429)" with "Daily render quota reached for your plan (60/day on …)" | Your account's daily render allowance (shared by render, diff and science) or its generation allowance is used up | Wait until midnight UTC. The render allowance is the same on every plan; a higher plan raises only the generation allowance |
| "You're out of AI points…", "Hosted AI isn't included on the starter plan…" or "The free plan has no AI at all…" | No hosted points for an AI tool | Buy a pack on Plus and above, or upgrade; your own AI key does not apply over MCP |
| "Hosted AI on flowss has reached today's safety limit…" | The platform's daily safety limit on hosted AI | Try again after 00:00 UTC; the free tools still work |
| "Deadline exceeded: this batch ran out of time before this call could start…" | A batch ran past its time budget | Send the remaining calls again in a smaller batch. They were not run or charged |
| "Batch too large: at most 20 messages per request." | More than 20 messages in one batch | Split the batch |
| "Invalid Request: empty batch." | An empty JSON array was sent | Send at least one message |
| "Invalid Request" | A message without "jsonrpc": "2.0" or without a method | Send well-formed JSON-RPC 2.0 messages |
| "Request body is too large (>4000000 bytes)." (HTTP 413) | The POST body is over about 4 MB | Send fewer or smaller messages per request |
| "Parse error: body is not valid JSON." | The body is not valid JSON | Check the request body and the Content-Type header |
| "Unknown tool: …" | A tool name that does not exist | Call tools/list and use the exact name |
| "Method not found: …" | A method the server does not offer (for example resources or prompts) | Use initialize, tools/list, tools/call or ping |
| "Missing 'prompt'.", "Missing 'code'.", "Missing 'engine' or 'code'.", "Missing 'targetEngine' or 'code'.", "Missing 'engine', 'before' or 'after'.", "Missing 'op'." or "Send a non-empty 'code'." | A required argument is missing or empty | Check the tool's arguments above |
| "Unknown 'engine': …" or "Unknown 'targetEngine': …" | Not a flowss engine id | Call list_engines for the ids |
| "Code is too long (>100 KB)." or "Diagram too large (>512 KB)." | The source is over the tool's limit | Send a smaller diagram, or split it |
| "Generation failed (HTTP …)." or "The model returned malformed output." | The AI request failed or produced an unusable answer | Try again, perhaps with a clearer prompt |
| "Render failed (HTTP …): …" | The engine cannot be rendered on the server, the source has an error, or the image is too large | Run verify_diagram first; try svg; check GET /api/render for supported engines |
| Your client cannot add the server, or asks you to sign in | The client only supports OAuth or event-stream servers | Use the mcp-remote bridge shown under Claude Desktop, or call the server directly |
Tools appear under the name glyph | That is the server's handle | Nothing to fix; the name you give the server in your client is what most clients show |
