Connect an agent

Schematic Planner speaks MCP over HTTP. There is nothing to install: open Agents in your account settings, create a key, and paste the URL and key into your client.

A key belongs to you rather than to one workspace, so a single key reaches every workspace you are a member of. Where that leaves a choice, the tools take a workspace argument — and asked to create something without one, the server names the options instead of guessing.

{
  "mcpServers": {
    "schematic-planner": {
      "url": "https://your-instance.example/mcp",
      "headers": { "Authorization": "Bearer sp_..." }
    }
  }
}

The tools

list_workspaces
Workspaces this key can act in.
list_projects
Projects it can reach, across the account or narrowed to one workspace.
list_plans
Plans, grouped by workspace and project, each with the link to open it.
trace
Follow the flow through one part of a plan — what a node reaches, or what reaches it, hop by hop, with what sets each hop off and what it carries. The way to read a plan: it answers with the thread rather than the whole document, and a cycle is reported instead of followed round.
get_plan
The whole plan at once. Outline, graph JSON, or the full Markdown. Never coordinates.
create_plan
Opens a plan — with the structure you already know, or empty. The first call, not the last: it answers with an id and the address the plan can be looked at.
create_project
A new project to draw in.
apply_ops
How a plan grows after that, and the only write door. Batched, atomic, keyed by slug so retries are safe — and each batch reaches every open canvas at once, so a person looking at the plan watches it change rather than being handed a finished picture.
layout
Re-arrange. Nodes a person dragged are left where they are.
export_plan
The Markdown bundle, plus a link to the zip.
delete_plan
Moves one to the workspace trash, where a person can restore it. Requires its title typed back, so a wrong id cannot take somebody else’s work.

Why agents do not set positions

A language model asked for coordinates produces a diagram nobody wants to read, and spends your context doing it. So the tools have no position field. An agent says what flows where; the server runs the layout, and places the writing on each line too. Anything a person has dragged is pinned, and automatic layout never touches it again.

What the export contains

Flows are written into each node's front matter, with what sets them off and what they carry. Containment edges become directory nesting. Dependency edges become a topological order, which becomes the numeric prefix on each filename. Every node carries its own frontmatter, so the bundle describes the graph completely rather than rendering a picture of it. A dependency cycle does not block the export: it is broken in a stable way and reported in the README.