Skip to content
Miss Blue

Reference

CLI and MCP

mb is the API from a terminal. mb mcp is the same thing served to a model. One binary, one list of capabilities — so a tool cannot exist that mb --help does not mention, and a command cannot exist that a model cannot call.

Install and sign in

cargo install --path apps/miss-blue-cli

mb login

mb login prints a short code and opens the console. You approve it there — in a browser you are already signed into — and the token is delivered to the terminal that asked. Nothing goes through a clipboard.

  Your code is  WDJB-MJHT

  Open  https://missblue.dev/device
  and enter it. This code is good for 10 minutes.

  Waiting…..

  Signed in everything you can reach

When you approve, you choose what it may reach: everything you can, or any combination of workspaces and projects. Naming a workspace covers the projects inside it, including ones added later. The choice is enforced on every request the sign-in makes — a token granted one project is refused the rest of your account, whatever your role is. The token is saved to ~/.config/miss-blue/credentials.json with mode 0600, and mb logout deletes it.

mb logout removes the local copy; it does not yet revoke the sign-in server-side, so a token that leaked stays valid until it expires. Per-sign-in revocation is not built yet — ask us and we will kill it. If you are handing a machine a credential you may want back in a hurry, scope it narrowly.

On a machine with no browser — a CI runner, a server over ssh — pass --no-browser and open the printed URL somewhere else.

Or a project key

MISS_BLUE_API_KEY still works and wins over a saved login — right for CI, where a project-scoped key that outlives whoever set it up is exactly what you want.

From a terminal

mb whoami
mb send --to +15555550100 --text "Your table is confirmed for 7pm"
mb send --to +15555550100 --file receipt.png
mb threads
mb lookup +15555550100
mb problems --only failed

With one number, send uses it. With several it stops and names them rather than guessing — a reply on the wrong line is worse than a command you have to repeat.

As MCP tools

mb mcp speaks MCP over stdio. Point a client at it:

{
  "mcpServers": {
    "miss-blue": {
      "command": "mb",
      "args": ["mcp"],
      "env": { "MISS_BLUE_API_KEY": "mb_live_..." }
    }
  }
}

A failed tool call comes back as a result with isError, not a transport error, so the model can read what went wrong and try something else. The same key scoping applies: a model holding a key reaches that project and nothing else.

Every capability

The same list in both places. A CLI command and an MCP tool of the same name do the same thing.

whoamiWhat this key is, and which project it holds.
numbersThe numbers this project holds.
sendSend an iMessage.
threadsConversations, most recent first.
threadEvery message in one conversation.
messagesRecent messages across this project's numbers.
messageOne message, including its delivery state and the Mac build that handled it.
problemsSends that failed, or are still waiting for a Mac.
lookupWhether iMessage is known to reach a handle. Answered from your own traffic, not from Apple.
typingShow or hide the typing bubble in a conversation.
readTell the customer their message was seen. Only when a human has looked.
reactAdd or remove a tapback on a message.
unsendUnsend a message, inside Apple's two-minute window.
labelName a number, so threads say which line they arrived on.
contactsNames this project has given handles. Shared by everyone on it.
nameName a handle, or rename one already named.
forgetRemove a name from the project's book.
webhooksThe endpoints this project sends events to.
webhook-addRegister where events should go.
webhook-rmStop sending to an endpoint.
deliveriesWhat we tried to send an endpoint, and what came back.
NextErrorsOne shape, and what each status means.