Skip to content

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.

Read, keyless · then act, with your key
claude mcp add --transport http salesbuilder-docs https://salesbuilder.dev/mcp
claude mcp add --transport http startup-builder https://api.sb/mcp

Connect

LineIt doesIt needs
claude mcp add --transport http salesbuilder-docs https://salesbuilder.dev/mcpReads these pages: search, fetch and the guidesNothing
claude mcp add --transport http startup-builder https://api.sb/mcpActs on your Startup through do, every call in try mode first$STARTUP_BUILDER_API_KEY

Already connected for startupbuilder.dev? Skip the second line.

The read server’s four instructions
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

ToolIt doesInput
searchFinds pages, Plays and refusal codes by keyword{ query, limit }
fetchReturns one page as Markdown by its path{ id }, such as /plays/instant-response
guidesReturns the guides whose phrasings answer a task, with the calls each runs{ phrase, limit }
FileWhat it holds
/llms.txtOne line per page, linking its Markdown twin, then every check code with its anchor
/<page>.mdEach page as Markdown: its first line is URL: <path> · Id: <id>, and its code blocks are the window’s tabs
/asks.jsonOne guide per Play, channel and seat, in the hub’s Ask shape
/openapi.jsonEvery operation these pages call, each also in the hub’s own
/plays/mix.jsonThe 27 Play mix answers, until the dry run is keyless
https://startupbuilder.dev/mcpThe startupbuilder.dev docs server: every record type, call and guide these pages build on

Act

Week one through the act server’s do tool, in try mode
{
  "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"
  }
}
ModeIt does
tryWaits for the result and stores nothing: every call on these pages runs this way first
sendReturns the pending Action at once
doWaits for the Action to finish

The files

Your own copy of Leaseline
npm create startups -- --template leaseline --env test
npx startup-builder clock advance --by 56d
Not live yet · gaps #6 · today: Every page runs on leaseline.app as the hub's guide sample.
FolderOne 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.

Contents