Stitchwork Docs

AI agents (MCP)

Point Claude — or any MCP client, or your own sales agent — at your workspace and ask it who to call today. Stitchwork speaks the Model Context Protocol, so the tools below appear automatically, with no integration to build.

What your agent can do

Access is read-only with three exceptions, and all of them only add. An agent can find prospects, look up customers and orders, read the diary, and read your sales figures and nudge results. The three things it can write are a customer note, a follow-up — a customer put on somebody's list, with the reason, the day it is owed by, and optionally a draft of the message worth sending — and a nudge proposal: a draft for your storefront that cannot appear anywhere until a person turns it on. All three are appended, signed with the seat that wrote them, and none can be edited or removed by the agent afterwards. Nothing it does changes, deletes, sends or activates anything: not a price, a quote, an order, or a person's details. And it sees only what the person or agent holding the token could already see in Stitchwork — an associate who staffs one store gets one store's data.

The headline use is finding leads. In Stitchwork a lead is not a stranger from a web form: it is your own warm prospect — somebody who abandoned a basket, showed buying intent and never bought, or bought before and has gone quiet.

What the AI can and cannot see

The point of connecting through Stitchwork rather than exporting a CSV is that the data protection is enforced server-side, not promised. Concretely:

Your data stays in Stitchwork. The AI comes to it and takes away only the shaped answer to the question it asked. What an AI vendor does with a conversation is governed by your agreement with them — choose your client accordingly.

Connecting Claude

This is the normal way in, and there is no credential to copy.

  1. An owner or admin grants the person MCP access in Settings → MCP. This is what uses a seat, and it has to happen first — Claude cannot grant itself access, and nobody can add to your bill by connecting.
  2. In Claude, add a custom connector and paste the endpoint: https://app.stitchwork.io/mcp
  3. Claude sends them to Stitchwork to sign in and confirm. Approve, and the connection is live.

Behind that, Claude discovers our authorization server, registers itself and runs an OAuth 2.1 flow with PKCE. There is nothing to configure: no client ID, no secret, no token to paste. If someone without a seat tries, they are told to ask an admin.

Access tokens last an hour and refresh silently. Disconnecting the app in Settings → MCP cuts it off immediately — it does not wait for anything to expire.

Connecting an agent or script

For something headless — a nightly sweep, your own sales bot — OAuth is the wrong shape, because there is no person to sign in. Create an agent in Settings → MCP instead and copy its token. It is shown once and never again.

Endpoint:  https://app.stitchwork.io/mcp
Header:    Authorization: Bearer mcp_live_••••
Protocol:  2024-10-07 … 2026-07-28 (negotiated)

Negotiation follows the spec: on initialize the requested revision is read from params.protocolVersion in the body — the MCP-Protocol-Version header only exists on later requests, where it carries the already-negotiated version and wins if sent. Stitchwork answers in your revision when it speaks it, and in its newest when it does not. Both the classic initialize handshake and 2026-07-28's server/discover work.

The transport is stateless: one HTTP POST carrying JSON-RPC 2.0, no session to establish and no stream to hold open. A quick check that your token works:

curl -X POST https://app.stitchwork.io/mcp \
  -H "Authorization: Bearer mcp_live_••••" \
  -H "Content-Type: application/json" \
  -H "MCP-Protocol-Version: 2026-07-28" \
  -H "Mcp-Method: tools/list" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

The Mcp-Method header (and Mcp-Name on a tools/call) arrived in 2026-07-28 and lets gateways route without reading the body. Send them or leave them out, but if you send one it must match the body — a header that disagrees is rejected rather than guessed at.

The playbooks

The tools below say what each piece of data means. The playbooks say what to do with them, in order — because an agent asked to "check follow-ups" will read the outstanding list back and stop, which is a fair reading of a request that named one thing. A playbook names the whole round instead.

In Claude Code they appear as slash commands: type / and they are listed alongside everything else. Arguments follow the command.

/mcp__stitchwork__morning_run
/mcp__stitchwork__lapsed_sweep 365
/mcp__stitchwork__appointment_prep tomorrow
PlaybookWhat it doesArgument
morning_run The full round: what the team already owes people, then a sweep for customers who are on nobody's list yet, briefed and ranked. lapsed_days
lapsed_sweep Customers who have stopped buying, checked against the team's own notes — including anyone who asked not to be called. lapsed_days
appointment_prep A one-minute brief per upcoming visit. Flags bookings nobody has confirmed yet, and first-time visitors. horizon
weekly_review How the week went, including what got dismissed and why — the most useful signal about which suggestions are not landing. —
No playbook files anything

Every one of them stops at a shortlist and asks you which to act on. That is deliberate: create_follow_up writes to a colleague's real list under the agent's name, and nothing in this server can undo it. Deciding who is worth a colleague's time is the judgement your team is paid for. If you want an agent filing without asking, tell it so in the conversation — then it is your call rather than ours.

Playbooks are user-invoked, so they do not fire when somebody types a request in plain English. For that path, the tools carry the same sequence themselves: a result from list_follow_ups or any find_* tool includes a next_steps field naming what to do next and what the result is not. Both read from one source, so they cannot describe two different processes.

Other clients surface prompts differently, or not at all — the next_steps path works everywhere regardless. Discover them over the wire with prompts/list, and fetch one with prompts/get.

The tools

Finding leads

Retention

Briefing a salesperson

Putting somebody on the list

The list itself, how work is routed and how a sale is credited are covered in Follow-ups & sales credit.

The storefront's messages

Nudges are covered in their own page; these two tools are the agent's seat at that table — one reads the verdicts, one drafts for the review queue, and neither can touch what a shopper sees.

Recording what was said

Looking things up

What's selling

Money and currencies

Every money figure comes back per currency, in a list, never as one combined total. Stitchwork holds no exchange rates, so a customer who spent £3,400 and $4,000 is worth two figures and not "£7,400" — any single number would be invented. The tool descriptions say so, and so does the server's own instructions block, because a model asked "how much is this customer worth" will otherwise add them.

Result sizes

Every list tool takes limit (default 20, maximum 100) and offset, and returns a next_offset when there is more. Results are deliberately lean — list rows carry who to contact and what it is worth, and the matching get_* tool fills in the detail. That is a token budget, not a restriction: a page of twenty leads with everything attached would spend your agent's working memory on the eighteen people it never mentions.

Calls are rate limited per seat. A normal conversation will never reach it; an agent stuck in a loop will, and gets a 429 with a Retry-After.

Errors

Two kinds, and the difference matters to your agent. A problem with the request — a bad token, a locked workspace, a malformed body — is an HTTP error your client handles. A problem with the answer — no such customer, an empty date range — comes back as a normal 200 with isError set, so the model can read it and try something else.

StatusMeans
401Missing, revoked or unrecognised token.
402The workspace is locked. Same rule as the rest of the API.
429Too many calls. Back off and retry.
400Malformed request, unknown method, or headers that disagree with the body.

Seats and billing

Each person or agent you grant access to is one MCP seat, charged on top of your normal terms. Seats are counted from the grant list and never from usage — running a lot of queries does not change your bill, and neither does running none. Revoke a seat and the charge stops; revoking also kills every token under it immediately.

A token can be rotated with no downtime: create a second one, deploy it, then revoke the first. Extra tokens on the same seat are not extra seats. Removing somebody from your team revokes their MCP seat automatically.

MCP access is not yet available on AWS Marketplace subscriptions — the listing has no MCP seat dimension. Get in touch and we will arrange it.

Keeping access safe