Skip to content

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.

  • 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.

Save the token once with the CLI’s login, then add the server to your agent:

Terminal window
# Save your token once: run this, and paste it when asked
npx -y @lobbe/cli login
# Claude Code
claude mcp add --scope user lobbe -- npx -y @lobbe/mcp
# Codex
codex mcp add lobbe -- npx -y @lobbe/mcp
Cursor: add to ~/.cursor/mcp.json
{ "mcpServers": { "lobbe": { "command": "npx", "args": ["-y", "@lobbe/mcp"] } } }
Claude Desktop: add to claude_desktop_config.json
{ "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.

Terminal window
# Save your token once: run this, and paste it when asked
npx -y @lobbe/cli login
# Claude Code
claude 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.

Terminal window
# Save your token once: run this, and paste it when asked
npx -y @lobbe/cli login
# Codex
codex mcp add lobbe -- npx -y @lobbe/mcp
Terminal window
# Save your token once: run this, and paste it when asked
npx -y @lobbe/cli login
Cursor: add to ~/.cursor/mcp.json
{ "mcpServers": { "lobbe": { "command": "npx", "args": ["-y", "@lobbe/mcp"] } } }

If ~/.cursor/mcp.json already has other servers, add the lobbe entry inside its mcpServers.

Terminal window
# Save your token once: run this, and paste it when asked
npx -y @lobbe/cli login
Claude Desktop: add to claude_desktop_config.json
{ "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.

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.

  • submit_meeting spends what the meeting costs: its answer says how many minutes. See What a meeting costs.
  • ask_meeting and ask_series spend minutes on every answer, a refusal included. Each needs max_minutes: the most the answer may cost. A dearer answer is refused and nothing is charged. quote_ask_meeting and quote_ask_series give the price for free, so the agent can tell you before it asks. See Ask a meeting.
  • retry_meeting runs a failed step again at no new charge.
  • set_keyterms and set_series_keyterms spend 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.

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.

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:

An MCP entry with a profile
{ "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.

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 in LOBBE_TOKEN, and not in the config file under the profile it looked for. If you logged in with --profile, set the same LOBBE_PROFILE in the entry’s env.
  • … 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 run npx -y @lobbe/cli login again.
  • 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_INVALID means a revoked or expired token (make a new one, then log in again); RATE_LIMITED says 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.