Docs for your agent: the connect lines
Two lines connect your agent: one reads these pages, keyless, and one acts on your Startup in try mode first.
Two lines connect your agent. The first reads these pages, keyless; the second acts on your Startup, every call in try mode first.
claude mcp add --transport http salesbuilder-docs https://salesbuilder.dev/mcp
claude mcp add --transport http startup-builder https://api.sb/mcp Connect
| Line | It does | It needs |
|---|---|---|
claude mcp add --transport http salesbuilder-docs https: | Reads these pages: search, fetch and the guides | Nothing |
claude mcp add --transport http startup-builder https: | Acts on your Startup through do, every call in try mode first | $STARTUP_BUILDER_API_KEY |
Already connected for startupbuilder.dev? Skip the second line.
Read these docs to answer how to win, keep and grow Customers on startupbuilder.dev; act only through the platform MCP.
Run every call in try mode first: it stores nothing and returns what would happen, refusals included.
A 422 names each failing check with its fix and the call that clears it; run that call, then retry.
Nothing marked Not live yet runs today: use the call or Play the mark names instead. Read
| Tool | It does | Input |
|---|---|---|
search | Finds pages, Plays and refusal codes by keyword | { query, |
fetch | Returns one page as Markdown by its path | { id }, such as / |
guides | Returns the guides whose phrasings answer a task, with the calls each runs | { phrase, |
| File | What it holds |
|---|---|
/llms.txt | One line per page, linking its Markdown twin, then every check code with its anchor |
/<page>.md | Each page as Markdown: its first line is URL:, and its code blocks are the window’s tabs |
/asks.json | One guide per Play, channel and seat, in the hub’s Ask shape |
/openapi.json | Every operation these pages call, each also in the hub’s own |
/plays/ | The 27 Play mix answers, until the dry run is keyless |
https: | The startupbuilder.dev docs server: every record type, call and guide these pages build on |
Act
{
"name": "do",
"arguments": {
"code": "const sb = $.with({ namespace: 'leaseline.app' }) \nawait sb.Mailbox.warm({ mailbox: 'mailbox_1', cap: 40 }, { mode: 'try' }) // day 0 · dana@leaseline.app starts warming; it sends on day 15 \nawait sb.PlayMix.compile({ startup: 'leaseline.app' }, { mode: 'try' }) // day 1 · 0 Customers · 3 h a week · $0 → three Plays \nconst { task } = await sb.Task.next() // drafted by your SDR agent: \"Ask Priya at Oakmont for two intros\"\nawait sb.Message.schedule({ message: 'message_3', at: '2026-10-20T14:00:00Z' }, { mode: 'try' }) // day 3 · the first cold email \n// 422 · Your SDR agent’s first cold email did not send: dana@leaseline.app has warmed 3 of 14 days. \n// mailbox-warm: Wait 11 days; warm intros keep running. · then Mailbox.warm \nreturn await sb.Metric.query({ metric: 'days-to-first-outside-order', shape: 'trend' }) // day 21 · the first order from a Customer outside your own Startups" ,
"mode": "try"
}
}| Mode | It does |
|---|---|
try | Waits for the result and stores nothing: every call on these pages runs this way first |
send | Returns the pending Action at once |
do | Waits for the Action to finish |
The files
npm create startups -- --template leaseline --env test
npx startup-builder clock advance --by 56d| Folder | One file is |
|---|---|
plays/ | A Play you run, stating only what differs from the catalog |
audiences/ | A List: who it goes to, saved as a search |
agents/ | A seat: its agent or person, its number and its approvals |
metrics/ | The quarter: its goal and each seat’s number |
Compiled, not written: edit the records it reads (terms), then regenerate. Every step runs from a sentence or a line of code. In your words: the CRM words you know, and where each lives here.