MCP server
@lobbe/mcp is a local MCP server. Your agent starts it on your
computer and talks to it over stdio; the server speaks Lobbe’s API with your personal API token. The
token stays on your computer: it is not in the agent’s config file, and no tool result ever contains
it. The server needs Node.js 20 or newer.
Before you start
Section titled “Before you start”- Make the agent a token of its own in the app, under Connections, with only the scopes its work needs and, if it spends minutes, a daily cap. See Tokens and scopes.
- Keep Developer mode on. While it is off, every request answers
403 DEVELOPER_MODE_OFF: see Developer mode.
Set it up
Section titled “Set it up”Save the token once with the CLI’s login, then add the server to your agent:
# Save your token once: run this, and paste it when askednpx -y @lobbe/cli login
# Claude Codeclaude mcp add --scope user lobbe -- npx -y @lobbe/mcp
# Codexcodex mcp add lobbe -- npx -y @lobbe/mcp{ "mcpServers": { "lobbe": { "command": "npx", "args": ["-y", "@lobbe/mcp"] } } }{ "mcpServers": { "lobbe": { "command": "npx", "args": ["-y", "@lobbe/mcp"] } } }npx -y @lobbe/cli login asks for the token without showing it, checks it with Lobbe, and only then
stores it in ~/.config/lobbe/config.json, readable by you alone. The server reads it from there, so
the agent’s entry carries no token at all.
Claude Code
Section titled “Claude Code”# Save your token once: run this, and paste it when askednpx -y @lobbe/cli login
# Claude Codeclaude mcp add --scope user lobbe -- npx -y @lobbe/mcp--scope user makes the server available in every project. Run /mcp in Claude Code to see it
connected.
# Save your token once: run this, and paste it when askednpx -y @lobbe/cli login
# Codexcodex mcp add lobbe -- npx -y @lobbe/mcpCursor
Section titled “Cursor”# Save your token once: run this, and paste it when askednpx -y @lobbe/cli login{ "mcpServers": { "lobbe": { "command": "npx", "args": ["-y", "@lobbe/mcp"] } } }If ~/.cursor/mcp.json already has other servers, add the lobbe entry inside its mcpServers.
Claude Desktop
Section titled “Claude Desktop”# Save your token once: run this, and paste it when askednpx -y @lobbe/cli login{ "mcpServers": { "lobbe": { "command": "npx", "args": ["-y", "@lobbe/mcp"] } } }Open the file from Claude Desktop: Settings › Developer › Edit Config. Add the lobbe
entry inside mcpServers, save, and quit and reopen Claude Desktop.
The tools
Section titled “The tools”At start the server asks Lobbe who the token belongs to and what it may do (GET /whoami), and
offers only the tools the token’s scopes allow. A token’s scopes are fixed when it is made: for a
tool you don’t see, make a token with the scope it needs, run npx -y @lobbe/cli login again and
restart the server (in most agents, restart the agent).
| Tool | Route | Scopes | Spends minutes |
|---|---|---|---|
list_meetings |
GET /recordings/ready |
recordings:read |
No |
search_meetings |
GET /recordings/search |
recordings:query |
No |
get_meeting |
GET /recordings/{id}/bundle |
recordings:read |
No |
submit_meeting |
POST /recordings |
recordings:write |
Yes |
get_meeting_status |
GET /recordings/{id}/status |
recordings:read, recordings:write |
No |
skip_speaker_naming |
POST /recordings/{id}/naming |
recordings:write |
No |
retry_meeting |
POST /recordings/{id}/retry |
recordings:write |
No |
quote_ask_meeting |
GET /recordings/{id}/ask/quote |
recordings:query |
No |
ask_meeting |
POST /recordings/{id}/ask |
recordings:query |
Yes |
list_series |
GET /series/readable |
series:read |
No |
get_series |
GET /series/{id} |
series:read |
No |
create_series |
POST /series |
series:write |
No |
update_series |
PATCH /series/{id} |
series:write |
No |
get_series_keyterms |
GET /series/{id}/keyterms |
series:read |
No |
set_series_keyterms |
PUT /series/{id}/keyterms |
series:write |
No |
quote_ask_series |
GET /series/{id}/ask/quote |
series:query |
No |
ask_series |
POST /series/{id}/ask |
series:query |
Yes |
get_account |
GET /account |
account:read |
No |
get_keyterms |
GET /account/keyterms |
account:read |
No |
set_keyterms |
PUT /account/keyterms |
account:write |
No |
list_memory |
GET /account/memory |
account:read |
No |
update_memory_item |
PATCH /account/memory/{id} |
account:write |
No |
delete_memory_item |
DELETE /account/memory/{id} |
account:write |
No |
list_events |
GET /events |
recordings:read, recordings:write |
No |
Each tool calls the route in its row, so the route’s reference is the tool’s reference too.
Parameters are snake_case (meeting_id, series_id, max_minutes). Two routes have no tool:
GET /whoami, which the server calls once at start, and PATCH /account/settings, since those
settings stay the app’s to change.
submit_meeting takes the file’s path on your computer: an absolute path, or one that starts with
~/. A relative path is refused, and so is a file that isn’t there, isn’t a type Lobbe takes or is
over the token’s upload limit, before anything is sent. Its series_id must be a series the person
owns, and in a series the series’ type wins over kind.
Tools that spend minutes
Section titled “Tools that spend minutes”submit_meetingspends what the meeting costs: its answer says how many minutes. See What a meeting costs.ask_meetingandask_seriesspend minutes on every answer, a refusal included. Each needsmax_minutes: the most the answer may cost. A dearer answer is refused and nothing is charged.quote_ask_meetingandquote_ask_seriesgive the price for free, so the agent can tell you before it asks. See Ask a meeting.retry_meetingruns a failed step again at no new charge.set_keytermsandset_series_keytermsspend nothing themselves, but a meeting that uses vocabulary carries a surcharge in minutes.
The tools’ descriptions tell the agent all of this, and the agent skill teaches the same rules. A daily cap on the token puts a ceiling on all of it.
The naming link
Section titled “The naming link”When a meeting waits at NAMING, get_meeting_status answers with the naming link and tells the
agent to give it to you rather than guess names. The link opens the meeting’s speaker naming in the
app, for its owner. The agent calls skip_speaker_naming only when you tell it to go ahead without
names. See Speaker naming.
Settings
Section titled “Settings”The server finds its token and server as the CLI does:
| Variable | What it does |
|---|---|
LOBBE_TOKEN |
A token to use instead of the stored one, for containers and CI. Nothing is then read from disk. |
LOBBE_PROFILE |
Which stored token to use: the profile given to npx -y @lobbe/cli login --profile <name>. default otherwise. |
LOBBE_BASE_URL |
Another Lobbe server, as an origin such as https://lobbe.example.com. |
Set them in the entry’s env, for example to use the token stored as work:
{ "mcpServers": { "lobbe": { "command": "npx", "args": ["-y", "@lobbe/mcp"], "env": { "LOBBE_PROFILE": "work" } } } }A token from LOBBE_TOKEN goes to LOBBE_BASE_URL, or to https://app.lobbe.ai, and never to a
server a stored profile names. A stored token goes to the server it was checked against at login,
unless LOBBE_BASE_URL is set.
Troubleshooting
Section titled “Troubleshooting”The server writes its own lines to stderr, which your agent keeps in its MCP log. When it can’t
start, it writes one line and exits with 1:
Lobbe MCP: no token. Run "npx -y @lobbe/cli login", or set LOBBE_TOKEN.No token was found: not inLOBBE_TOKEN, and not in the config file under the profile it looked for. If you logged in with--profile, set the sameLOBBE_PROFILEin the entry’senv.… doesn't look like a Lobbe token (it should start with lobbe_).What was stored or set isn’t a token: copy it again from Connections, and runnpx -y @lobbe/cli loginagain.Lobbe MCP: whoami failed: …The token was found, but Lobbe refused it or couldn’t be reached. The server asks once, and gives up after 10 seconds, so the agent isn’t left waiting. The line carries Lobbe’s code:TOKEN_INVALIDmeans a revoked or expired token (make a new one, then log in again);RATE_LIMITEDsays when to try again.DEVELOPER_MODE_OFF. Developer mode is off in Lobbe’s settings (Account › Developers), which pauses every token of the account. Turn it on and restart the server; the same token works again. A tool call refused this way tells the agent to stop and tell you, not to retry.- A tool is missing. The token doesn’t have its scope: see The tools.
A refusal during a tool call comes back as a tool error with Lobbe’s code, its message and what to do next, never a stack trace and never the token. The codes are listed in Errors.