Docs · static mirror — the interactive version loads with JavaScript.

OpenClaw

Connect Runstack MCP in OpenClaw — ~/.openclaw/openclaw.json mcp.servers with Streamable HTTP or stdio, or Control UI Settings → MCP.

Source: https://runstack.engineer/docs/mcp-openclaw

openclaw

OpenClaw is a gateway + agent runtime that consumes MCP servers via mcp.servers in ~/.openclaw/openclaw.json (JSON5, hot-reloaded). Wire it to Runstack's MCP tools at https://app.runstack.engineer/mcp with Authorization: Bearer rnsk_…. Get a key at API Keys.

Add via Control UI (easiest)

  1. Open Control UI → Settings → MCP → Add server.
  2. Name: runstack, Transport: Streamable HTTP (or SSE fallback), URL: https://app.runstack.engineer/mcp.
  3. Expand advanced editor → add header Authorization: Bearer rnsk_YOUR_API_KEY.
  4. Add server → probe below.

Probe (reachability ≠ saved):

openclaw mcp doctor runstack --probe
# or status only:
openclaw mcp status --verbose

Composer also allows + → Connectors → Add MCP server… (scope: This session vs Everywhere).

Add via CLI

Remote (Streamable HTTP) — recommended:

openclaw mcp add runstack \
  --url https://app.runstack.engineer/mcp \
  --transport streamable-http \
  --header "Authorization: Bearer rnsk_YOUR_API_KEY"
openclaw mcp doctor runstack --probe

Expose only selected tools:

openclaw mcp add runstack --url https://app.runstack.engineer/mcp --transport streamable-http --include 'search_tools,execute_tool' --header "Authorization: Bearer rnsk_..."

Local (stdio) — via @rnsk/mcp:

openclaw mcp add runstack --command npx --arg "-y" --arg "@rnsk/mcp" --env RUNSTACK_API_KEY=rnsk_YOUR_API_KEY

Or openclaw mcp add local-tools --command node --arg ./dist/mcp-server.js --cwd /srv/....

Other useful commands: openclaw mcp status|show|probe|login|logout|reload|unset, openclaw mcp login runstack for OAuth servers (not needed for Runstack Bearer).

Manual JSON (direct edit)

~/.openclaw/openclaw.json (JSON5, Gateway watches file, hot reload → next turn uses new tools; set OPENCLAW_CONFIG_PATH if outside default):

{
  mcp: {
    servers: {
      runstack: {
        url: "https://app.runstack.engineer/mcp",
        transport: "streamable-http",
        enabled: true,
        connectionTimeoutMs: 5000,
        requestTimeoutMs: 20000,
        headers: {
          Authorization: "Bearer rnsk_YOUR_API_KEY"
        },
        // optional: scoped tool filter
        toolFilter: { include: ["search_tools", "check_authentication", "initiate_connection", "execute_tool"] }
      }
    }
  }
}

Stdio variant:

{
  mcp: {
    servers: {
      runstack: {
        command: "npx",
        args: ["-y", "@rnsk/mcp"],
        env: { RUNSTACK_API_KEY: "rnsk_YOUR_API_KEY" },
        enabled: true
      }
    }
  }
}

Rules: enabled: false keeps definition without connecting; name __proto__ is reserved; keep credentials out of literals → use secret refs (${VAR} / env:) via Environment variables. Unknown keys or malformed types refuse Gateway startup — run openclaw doctor --fix to repair.

Opposite direction: expose OpenClaw as MCP server

To let external clients (Codex, Claude Code) read/send OpenClaw channel conversations:

openclaw mcp serve   # OpenClaw is the MCP server (bridge → Gateway)

This is the reverse of the above (OpenClaw as client registry). Not needed for Runstack consumption.

Troubleshooting

SymptomFix
Server saved but no toolsopenclaw mcp doctor runstack --probe checks live connection; inspect toolFilter.include/exclude
Stdio won't startVerify command in Gateway env, cwd exists, transport: "stdio" requires non-empty command; bundle-mcp:<name>: prefixes stderr
HTTP needs authFor Runstack Bearer, use headers.Authorization; for OAuth servers use auth: "oauth" + openclaw mcp login …
Changes not in active agentopenclaw mcp reload refreshes CLI-process runtimes; remote Gateway needs its own reload/restart

Verify

In an OpenClaw agent turn: “Use Runstack to search for Gmail tools”. Confirm search_tools is discovered and execute_tool respects workspace auth via check_authentication.

Related