Mountable

Workspace agents

OpenClaw and Hermes Agent adapters that keep the API key on the host and pass a sandbox only a one-time mount ticket.

OpenClaw and Hermes Agent use the existing Mountable MCP server, npx -y mountable-cli mcp. These adapters do not change the CLI. The host process holds MOUNTABLE_API_KEY. create_mount_ticket returns a ticket and mount_command. The sandbox runs that command with the ticket on stdin. Mounting stays a local process; see MCP and Agents.

The skill installed with the adapters tells the agent to create or reuse a filesystem, check filesystem_usage, mint a ticket with an idempotency key, and revoke_mount_session when the job finishes. Storage and downloads are billed. Creating a filesystem is not idempotent.

OpenClaw

Add the server to ~/.openclaw/openclaw.json. The value ${MOUNTABLE_API_KEY} is taken from the environment OpenClaw runs in. Do not paste the key into the file.

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

The same block is /integrations/openclaw/mcp-server.json. From the CLI, keep the placeholder in single quotes so the shell does not write the key into openclaw.json. OpenClaw substitutes ${MOUNTABLE_API_KEY} from the environment it runs in. The stdio child does not inherit that variable on its own.

openclaw mcp add mountable \
  --command npx \
  --arg -y \
  --arg mountable-cli \
  --arg mcp \
  --env 'MOUNTABLE_API_KEY=${MOUNTABLE_API_KEY}'
openclaw mcp doctor mountable --probe

Copy /integrations/openclaw/skills/mountable/SKILL.md to <workspace>/skills/mountable/SKILL.md. That directory is the workspace skill root OpenClaw loads first.

Hermes Agent

Copy these three files to ~/.hermes/plugins/mountable/, keeping skills/mountable/SKILL.md in that subdirectory:

Enable the plugin:

hermes plugins enable mountable

mcp.json starts npx -y mountable-cli mcp and does not contain the API key. Hermes does not copy the parent environment or ~/.hermes/.env into that plugin process. Store the key in ~/.hermes/.env, then add a native server with the same name in ~/.hermes/config.yaml. The native server replaces the plugin server and expands ${MOUNTABLE_API_KEY} from that file. The plugin still supplies the skill. Do not put ${MOUNTABLE_API_KEY} in mcp.json: Hermes would pass that text through as the key.

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

The plugin file itself stays:

{
  "mcpServers": {
    "mountable": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "mountable-cli", "mcp"]
    }
  }
}

The sandbox still needs the mountable CLI and Linux FUSE (/dev/fuse). Give it the ticket only:

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