Menu

MCP server

LifeButler speaks the Model Context Protocol, so AI assistants can work with your workspaces directly: "What's on for the kids this week?", "Put everything for lasagne on the shopping list", "Find the Stadtwerke bill from March and tell me the amount".

URLhttps://api.lifebutler.io/mcp
TransportStreamable HTTP (stateless, JSON responses)
AuthAuthorization: Bearer lb_live_… – an API key

The MCP server uses the same keys, scopes and checks as the REST API: the assistant can do exactly what the key allows, in the workspaces of the key – nothing more. Create a separate key for each assistant, with only the scopes it needs. Read-only scopes are a good start.

Claude Code#

Shell
claude mcp add --transport http lifebutler https://api.lifebutler.io/mcp \
  --header "Authorization: Bearer lb_live_…"

Claude Desktop#

Claude Desktop connects to remote servers with an Authorization header through mcp-remote (needs Node.js). In Settings → Developer → Edit config:

JSON
{
  "mcpServers": {
    "lifebutler": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://api.lifebutler.io/mcp", "--header", "Authorization:${LIFEBUTLER_AUTH}"],
      "env": { "LIFEBUTLER_AUTH": "Bearer lb_live_…" }
    }
  }
}

Cursor#

~/.cursor/mcp.json (or .cursor/mcp.json in a project):

JSON
{
  "mcpServers": {
    "lifebutler": {
      "url": "https://api.lifebutler.io/mcp",
      "headers": { "Authorization": "Bearer lb_live_…" }
    }
  }
}

VS Code (GitHub Copilot)#

.vscode/mcp.json:

JSON
{
  "inputs": [{ "type": "promptString", "id": "lifebutler-key", "description": "LifeButler API key", "password": true }],
  "servers": {
    "lifebutler": {
      "type": "http",
      "url": "https://api.lifebutler.io/mcp",
      "headers": { "Authorization": "Bearer ${input:lifebutler-key}" }
    }
  }
}

OpenAI Codex CLI#

~/.codex/config.toml:

TOML
[mcp_servers.lifebutler]
url = "https://api.lifebutler.io/mcp"
bearer_token_env_var = "LIFEBUTLER_KEY"

Other clients#

Any MCP client that supports Streamable HTTP with a custom header works. Connectors in the web versions of Claude and ChatGPT sign in with OAuth instead of a key; that is planned for a later version.

Tools#

Each tool is one API operation and takes the same fields (path, query and body together). Read-only tools are marked as such, so clients can run them without asking; deleting tools are marked destructive.

ToolWhat it doesScope
get_meWho am I (read-only)workspaces:read
list_workspacesList workspaces (read-only)workspaces:read
get_workspaceGet a workspace (read-only)workspaces:read
list_membersList members (read-only)workspaces:read
list_eventsList appointments in a time range (read-only)calendar:read
get_eventGet an appointment (read-only)calendar:read
create_eventCreate an appointmentcalendar:write
update_eventChange an appointmentcalendar:write
delete_eventDelete an appointmentcalendar:write
list_tasksList tasks (read-only)tasks:read
get_taskGet a task (read-only)tasks:read
create_taskCreate a tasktasks:write
update_taskChange a tasktasks:write
complete_taskComplete a tasktasks:write
reopen_taskReopen a tasktasks:write
delete_taskDelete a tasktasks:write
list_listsList lists (read-only)lists:read
create_listCreate a listlists:write
update_listRename a listlists:write
delete_listDelete a listlists:write
list_itemsList items (read-only)lists:read
add_itemsAdd itemslists:write
update_itemChange or tick off an itemlists:write
delete_itemRemove an itemlists:write
list_documentsList and search documents (read-only)documents:read
get_documentGet a document (read-only)documents:read
upload_documentUpload a documentdocuments:write
update_documentChange a documentdocuments:write
analyze_documentAnalyse a document with AIdocuments:write
delete_documentDelete a documentdocuments:write
searchSmart search (read-only)search
ask_butlerAsk the butlerbutler

Tips#

  • Tell the assistant which workspace you mean ("in Familie Berger"); it starts with list_workspaces.
  • ask_butler and analyze_document use the workspace owner's AI credits.
  • Files: upload_document takes the file as base64 (up to about 10 MB). Downloading files is only possible through the REST API.