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
| Tool | Does |
|---|---|
list_organizations | the caller's organisations (an API key has exactly one) |
list_filesystems | the organisation's filesystems (an API key sees those it has a grant on) |
create_filesystem | create a filesystem and return it |
filesystem_usage | stored bytes and files against quotas, and 30-day traffic |
create_mount_ticket | a one-time mount ticket and the command that mounts with it |
list_mount_sessions | a filesystem's live mount sessions (an API key sees those it created) |
revoke_mount_session | revoke 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/mountableThe 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.