Mountable
Sign in

MCP

mountable mcp serves Mountable's management operations as MCP tools over stdio. It authenticates like the CLI: with MOUNTABLE_API_KEY, or with the login from mountable login.

Setup

Give the server MOUNTABLE_API_KEY through its environment: inherited from the environment the MCP client starts in, or set under env in the client's configuration. Never pass the key as a command-line argument, where it would end up in process listings and shell history.

Claude Code: .mcp.json in the project. ${MOUNTABLE_API_KEY} is taken from the environment Claude Code runs in, so the key stays out of the file.

{
  "mcpServers": {
    "mountable": {
      "command": "npx",
      "args": ["-y", "mountable-cli", "mcp"],
      "env": { "MOUNTABLE_API_KEY": "${MOUNTABLE_API_KEY}" }
    }
  }
}

Claude Desktop (claude_desktop_config.json) and Cursor (~/.cursor/mcp.json). Keep these files private, since they hold the key.

{
  "mcpServers": {
    "mountable": {
      "command": "npx",
      "args": ["-y", "mountable-cli", "mcp"],
      "env": { "MOUNTABLE_API_KEY": "mtbl_…" }
    }
  }
}

Tools

ToolDoes
list_organizationsthe caller's organisations (an API key has exactly one)
list_filesystemsthe organisation's filesystems (an API key sees those it has a grant on)
create_filesystemcreate a filesystem and return it
filesystem_usagestored bytes and files against quotas, and 30-day traffic
create_mount_ticketa one-time mount ticket and the command that mounts with it
list_mount_sessionsa filesystem's live mount sessions (an API key sees those it created)
revoke_mount_sessionrevoke a session; its mount stops working

Tools that work inside an organisation take an optional org_id. Results are the API's JSON; errors return {"error": {"code", "message", "hint"}} with the codes listed on Agents. The tool descriptions carry the retry rules: create_filesystem is not idempotent, and create_mount_ticket takes an idempotency_key to reuse after an unknown outcome.

Mounting stays a local command

Mounting is a long-running process in the sandbox, not a tool call. create_mount_ticket returns the session with its ticket and a mount_command to run in the sandbox with the ticket in the environment variable MOUNTABLE_TICKET:

mkdir -p /mnt/mountable && printf '%s\n' "$MOUNTABLE_TICKET" | mountable mount --ticket-stdin --json /mnt/mountable

The command reads the ticket on stdin, so the ticket never appears in an argument list. Any writable directory works in place of /mnt/mountable. Wait for {"event":"mounted"} before using it.