Skip to main content
Glama
smurfy92

openclaw-control-mcp

by smurfy92

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
OPENCLAW_HTTPNoSet to 1 to expose MCP over Streamable HTTP
OPENCLAW_MOCKNoSet to 1 to use in-memory mock gateway
OPENCLAW_DEBUGNoSet to 1 to log every WS frame to stderr
OPENCLAW_HTTP_HOSTNoHTTP host127.0.0.1
OPENCLAW_HTTP_PORTNoHTTP port3333
OPENCLAW_TIMEOUT_MSNoConnect / request timeout in milliseconds30000
OPENCLAW_GATEWAY_URLYesWebSocket URL of the gateway (ws:// or wss://)
OPENCLAW_HTTP_BEARERNoBearer token for HTTP mode
OPENCLAW_CONTROL_HOMENoOverride the directory used to persist store.json
OPENCLAW_USE_KEYCHAINNoSet to 0 or false to force plain JSON secret storage1
OPENCLAW_GATEWAY_TOKENNoGateway login token (recommended)
OPENCLAW_GATEWAY_PASSWORDNoExtra password (some gateway configs require it)

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
openclaw_setupA

Persist a named OpenClaw gateway config (URL + token) to local store. Default instance name is 'default'. Pass instance to manage multiple gateways (e.g. 'perso', 'work') from the same MCP. Env vars (OPENCLAW_GATEWAY_URL/TOKEN) still override everything stored here — leave them unset to use named instances. After saving, the matching client connection is closed so the next tool call re-handshakes with the new credentials.

openclaw_setup_showA

Show the currently resolved gateway configuration for an instance (default 'default' or whichever instance is the active default). Does NOT print tokens. Pass instance to inspect a non-default one.

openclaw_setup_listA

List every persisted gateway instance (name + URL + whether token/password are set, never the values). Plus the active default instance and where secrets live (file vs OS keychain).

openclaw_setup_select_defaultA

Switch the active default instance — every subsequent tool call (cron.list, sessions.list, etc.) will route to this instance unless an env var overrides. Closes existing client connections so they re-handshake with the new instance's credentials.

openclaw_setup_clearA

Clear a persisted gateway config. By default clears every instance; pass instance to clear just one. Does NOT touch the device identity or device tokens. After this, the MCP falls back to env vars or errors with 'configure first'.

openclaw_device_statusA

Show this MCP's local device identity, pairing status, current scopes (if any), and any pending pairing requestId. Triggers a fresh connect attempt, so it doubles as a 'retry pairing' command after approval. Use when scoped methods fail with 'missing scope: operator.read'.

openclaw_device_pair_listA

List pending and paired devices known to the gateway. Useful for confirming that this MCP's device shows up in 'pending' before approval. Wraps device.pair.list (operator scope).

openclaw_device_pair_approveA

Approve a pending device pairing request. Requires operator.write scope. Wraps device.pair.approve.

openclaw_device_pair_rejectB

Reject a pending device pairing request. Wraps device.pair.reject.

openclaw_device_pair_removeA

Remove a paired device from the gateway. Wraps device.pair.remove. Destructive — the device will need to re-pair to reconnect.

openclaw_device_token_revokeA

Revoke a device's authentication token. Wraps device.token.revoke. Destructive — the device must re-pair (or use a freshly issued token).

openclaw_device_token_rotateA

Rotate a device's authentication token (issues a new one, invalidates the old). Wraps device.token.rotate. Destructive — the device's currently cached token stops working.

openclaw_device_repairA

Recover from the expected Uint8Array of length 32, got length=0 failure mode (empty device.privateKey). Backs up store.json to store.json.bak.<ts>, wipes the broken device + cached tokens (keeps gateway URL + token configs), and drops the matching keychain entries. The next call to any scoped tool regenerates a fresh Ed25519 keypair and surfaces a new pendingPairing.requestId to approve in the Control panel. The instance arg is accepted but currently no-op — the local Store is shared across all instances. Destructive — run only when openclaw_device_status reports the empty-private-key failure mode.

openclaw_introspectA

Inspect the OpenClaw gateway capabilities. Triggers a connect (if not already), returns the server version, this device's role/scopes, the full list of JSON-RPC methods and events the gateway publishes, and a coverage report comparing those methods to the typed wrappers this MCP exposes. Use to discover what methods you can call via openclaw_call and to spot endpoints that still need a typed wrapper after a gateway upgrade.

openclaw_callA

DESTRUCTIVE ESCAPE HATCH — call ANY JSON-RPC method on the gateway with arbitrary params. Use this to operate on endpoints that don't yet have a typed wrapper. The user must validate the exact method name and params on every call (especially anything matching *.add|remove|delete|update|create|write|terminate|reset|approve|reject). For read-only inspection prefer the typed tools (openclaw_cron_list, openclaw_introspect, …) — openclaw_call should only be used when no typed alternative exists.

openclaw_statusA

Get overall gateway status (uptime, agents, sessions, queues). Wraps the root-level status JSON-RPC method. Read-only.

openclaw_healthA

Combined health probe — server-side health JSON-RPC plus client-side metadata (MCP version, device pairing state, gateway URL, last successful call). Read-only. Use this for a one-shot 'is everything OK?' check.

openclaw_last_heartbeatA

Get the last heartbeat info (latest tick processed by the gateway). Wraps last-heartbeat. Read-only.

openclaw_set_heartbeatsA

Toggle / configure heartbeat emission from the gateway. Wraps set-heartbeats. Pass enabled and any cadence params.

openclaw_system_presenceA

Get presence info (which devices are connected, when they last spoke). Wraps system-presence. Read-only.

openclaw_system_eventB

Emit a custom system event onto the gateway bus. Wraps system-event. Mostly used for tooling / debug — operators rarely call this directly.

openclaw_wakeC

Wake an agent / session out of idle. Wraps the root-level wake method. Pass agentId/sessionId.

openclaw_sendA

Channel-routed send — pushes a message via the gateway's delivery layer. Wire format (verified live against gateway 2026.4.12+): requires to (channel-specific recipient) + idempotencyKey (auto-generated if omitted). Prefer the typed openclaw_chat_send or openclaw_sessions_send when you want session context.

openclaw_agentA

Root-level agent method — sends a message to the default agent and returns the agent's response. Wire format (verified live against gateway 2026.4.12+): requires message + idempotencyKey (auto-generated if omitted). NOT read-only — this triggers an agent turn. Prefer openclaw_sessions_send when you want explicit session control.

openclaw_agent_identity_getA

Get the gateway's agent identity (current default agent metadata). Wraps agent.identity.get. Read-only.

openclaw_agent_waitC

Block until the agent finishes its current turn (or timeout). Wraps agent.wait. Long-running — uses the configured request timeout (default 30s).

openclaw_gateway_identity_getA

Get the gateway's own identity (id, version, owner, region). Wraps gateway.identity.get. Read-only.

openclaw_sessions_listA

List active OpenClaw agentic sessions. Wraps sessions.list. Each session has both a sessionId (UUID) and a key (composite, e.g. 'agent:main:main', 'agent:main:cron:', 'agent:main:telegram:group:', 'agent:main:subagent:'). Use to find a session before preview/patch/abort/compact/reset. The status filter is applied client-side after fetch (verified live: the gateway itself rejects a status param with unexpected property 'status' against 2026.4.12+).

openclaw_sessions_previewA

Preview one or more sessions without subscribing — returns recent messages, status, and metadata for each key. Wraps sessions.preview. Read-only. Pass keys (array of full session keys like 'agent:main:cron:' from openclaw_sessions_list).

openclaw_sessions_createA

Create a new agent session. Wraps sessions.create. The default agent id is typically 'main'. Pass an optional title to set the human-readable label shown in the Control panel.

openclaw_sessions_patchA

Update session metadata (title, displayName, tags, etc.). Wraps sessions.patch. Pass id + only the fields you want to change. Schema is intentionally permissive — gateway accepts any subset of session fields.

openclaw_sessions_sendA

Send a user message into an existing session. Wraps sessions.send. The agent processes async and streams the reply via session.message events; call openclaw_sessions_preview afterwards (with the session's composite key) to see the result. Use either text or message — gateway accepts both names depending on version.

openclaw_sessions_abortA

Abort the in-flight agent turn for a session (cancels the current LLM call / tool loop). Wraps sessions.abort. Destructive — interrupts running work.

openclaw_sessions_resetA

Reset a session (clears working state, keeps session id). Wraps sessions.reset. Destructive — confirm before calling.

openclaw_sessions_deleteA

Delete a session permanently. Wraps sessions.delete. Destructive — confirm before calling.

openclaw_sessions_compactA

Trigger a compaction of a session's history (creates a new compaction snapshot, keeps the session live). Wraps sessions.compact.

openclaw_sessions_compaction_listA

List compaction snapshots for a session. Wraps sessions.compaction.list. Read-only.

openclaw_sessions_compaction_getA

Fetch a specific compaction snapshot by id. Wraps sessions.compaction.get. Read-only.

openclaw_sessions_compaction_restoreA

Restore a session to a previous compaction snapshot. Wraps sessions.compaction.restore. Destructive — overwrites current session state with the snapshot. The current state is lost unless you branched first.

openclaw_sessions_compaction_branchA

Create a NEW session that starts from a previous compaction snapshot of an existing session. Wraps sessions.compaction.branch. Use this when you want to explore an alternative continuation without losing the current session state.

openclaw_sessions_subscribeA

Subscribe to session lifecycle events (sessions.changed). Wraps sessions.subscribe. Note: the MCP runs over stdio and cannot stream events back to the client — this tool registers the subscription server-side but you won't receive deltas in Claude Code. Useful mainly to confirm the subscription was accepted.

openclaw_sessions_unsubscribeC

Unsubscribe from session lifecycle events. Wraps sessions.unsubscribe.

openclaw_sessions_messages_subscribeA

Subscribe to streaming session messages (session.message events). Wraps sessions.messages.subscribe. Note: MCP stdio cannot stream events to Claude Code — server-side subscription only.

openclaw_sessions_messages_unsubscribeC

Unsubscribe from session message stream. Wraps sessions.messages.unsubscribe.

openclaw_sessions_tailA

Watch a session by polling sessions.preview and return only the NEW messages that appeared during the tail window. Workaround for the stdio MCP not being able to stream sessions.subscribe / session.message events to Claude Code. Polls every intervalMs (default 2000ms) for up to durationMs (default 30000ms, max 300000ms), or until maxMessages new messages are collected, or until the session reaches a terminal status ('done', 'error', 'aborted', 'timeout', 'completed'). The first poll seeds the 'already-seen' set so existing messages are NOT returned — only what arrives after the tool was called.

openclaw_chat_sendA

Send a message into a chat session via the gateway's chat layer. Wire format (verified live against gateway 2026.4.12+): requires sessionKey (composite, e.g. 'agent:main:main' from openclaw_sessions_list), message, and idempotencyKey (auto-generated UUID if omitted). The pre-0.5.x agentId/sessionId/text shape is rejected by the gateway. Destructive — triggers an agent turn.

openclaw_chat_historyA

Fetch chat history for a session. Wraps chat.history. Wire format (verified live): requires sessionKey; accepts limit. Read-only. The pre-0.5.x agentId/sessionId/offset fields are rejected.

openclaw_chat_abortA

Abort an in-flight chat turn for a session. Wraps chat.abort. Wire format (verified live): requires sessionKey. Destructive — cancels running LLM call.

openclaw_logs_tailA

Tail recent gateway logs. Wraps logs.tail. Read-only. The gateway only forwards limit to the wire; sinceMs, level, and component are applied client-side AFTER fetch (verified live: the gateway rejects them with unexpected property against 2026.4.12+). For wide tails, raise limit and the client filters on the way back. Use this for debug — e.g. tracing why a cron job failed, why a session aborted, or what an agent emitted.

openclaw_agents_listA

List configured agents on the gateway (e.g. 'main', custom agents). Wraps agents.list. Read-only.

openclaw_agents_createA

Create a new agent configuration. Wraps agents.create. Pass agentId, displayName, model, plus any extra fields the gateway accepts (system prompt, default tools, etc.). Call openclaw_agents_list first to see the full shape of an existing agent.

openclaw_agents_updateA

Update an existing agent's configuration. Wraps agents.update. Pass agentId + only the fields you want to change. Schema is permissive — gateway accepts the same shape as agents.create.

openclaw_agents_deleteA

Delete an agent configuration. Wraps agents.delete. Destructive — confirm before calling. Sessions tied to this agent may be orphaned.

openclaw_agents_files_listA

List files attached to an agent (instructions, system files, etc.). Wraps agents.files.list. Read-only.

openclaw_agents_files_getA

Fetch a specific agent file's contents (system prompt, tool definitions, etc.). Wraps agents.files.get. Read-only. Pass either path (full path including the file name) or name (file basename) — not both.

openclaw_agents_files_setA

Write or overwrite an agent file. Wraps agents.files.set. Destructive — overwrites existing content silently. Pass agentId, path or name, and content or body (gateway accepts both names depending on version).

openclaw_channels_statusA

Get the connection status of delivery channels (Telegram, email, etc.). Wraps channels.status. Read-only.

openclaw_channels_logoutA

Log out / disconnect a delivery channel. Wraps channels.logout. Destructive — channel won't deliver until re-authenticated. Pass the channel name (e.g. 'telegram').

openclaw_models_listA

List models available to the gateway (Anthropic, OpenAI, etc.) with their IDs and any provider metadata. Wraps models.list. Read-only.

openclaw_usage_statusB

Get usage status (token counts, current period, quotas). Wraps usage.status. Read-only.

openclaw_usage_costA

Get usage cost breakdown (per agent, per model, per period). Wraps usage.cost. Read-only. Pass period/agent filters if supported.

openclaw_cron_listA

List configured OpenClaw cron jobs. Wraps the gateway JSON-RPC method cron.list. Returns jobs with name, schedule, payload kind, and enabled state.

openclaw_cron_statusA

Get the OpenClaw cron scheduler status (enabled flag, next-run timestamp, recent failures). Wraps cron.status.

openclaw_cron_runB

Trigger an immediate run of a specific OpenClaw cron job by id. Wraps cron.run.

openclaw_cron_runsA

List recent runs of a specific OpenClaw cron job. Wraps cron.runs. Pass compact: true to truncate each run's summary to 200 chars (saves tokens when scanning many runs); a summaryTruncated flag is added per entry. Each entry also gets a runAtAgo field (e.g. "3h ago") for readability.

openclaw_cron_removeA

Delete an OpenClaw cron job by id. Destructive — confirm before calling. Wraps cron.remove.

openclaw_cron_addC

Create a new OpenClaw cron job. Wraps cron.add. Field names match the gateway wire format (verified by the Control panel SPA + live calls), NOT the README placeholders sometimes seen in the MCP source: schedule uses expr/tz (cron) or everyMs (every) or at (exact); payload.agentTurn uses message and timeoutSeconds. Examples: { schedule: { kind: "cron", expr: "0 13 * * 5", tz: "Europe/Paris" }, payload: { kind: "agentTurn", message: "...", timeoutSeconds: 180 } }.

openclaw_cron_updateA

Update an existing OpenClaw cron job in place. Wraps cron.update. Avoids the remove + re-add dance when you just want to change schedule, timeout, payload, or delivery. Wire format (verified live against gateway 2026.4.12+): { id|jobId: string, patch: object } — pass the job id and a patch object containing only the fields you want to change. Older shape { job: { id, ...fields } } is auto-translated for backward compat with pre-0.5.1 callers.

openclaw_cron_add_weeklyA

Create a cron job that fires once a week at a fixed local time. Synthesizes a cron-kind schedule and an agentTurn payload, then calls cron.add. Pass dayOfWeek (mon..sun), hour (0-23), minute (0-59), tz (IANA, defaults to Europe/Paris), and message. Optional channel delivery: pass channel + to.

openclaw_cron_add_dailyA

Create a cron job that fires every day at a fixed local time. Synthesizes the cron-kind schedule + agentTurn payload. Pass hour, minute, tz, message. Optional channel delivery via channel + to.

openclaw_cron_add_everyA

Create a cron job that fires every N minutes/hours regardless of clock time. Synthesizes an every-kind schedule. Pass either intervalMinutes or intervalHours (the tool computes everyMs). Use for monitoring jobs that don't care about wall-clock alignment.

openclaw_cron_add_onceA

Create a one-shot reminder/job that fires exactly once at a given absolute timestamp, then auto-deletes. Synthesizes an exact-kind schedule with deleteAfterRun: true. Pass at as RFC3339 (e.g. '2026-05-08T09:00:00+02:00') and a message.

openclaw_config_getA

Read the gateway's current configuration. Wraps config.get. Read-only. The gateway returns the full config; pass path to project to a sub-section client-side after fetch (the gateway itself does NOT support a path filter — verified live against 2026.4.12+).

openclaw_config_setA

Replace a config value at a given path. Wraps config.set. Destructive — overwrites the previous value. Prefer openclaw_config_patch for partial updates.

openclaw_config_patchA

Optimistic-locked replace of the FULL gateway config (verified live against 2026.4.12+). Wraps config.patch. Wire format: { raw: string, baseHash: string } where raw is the full config serialized as JSON and baseHash comes from a previous openclaw_config_get call. Pass mergePath + mergeValue for the convenience flow: this tool will fetch the current config, deep-merge your value at the given dotted path, compute the resulting raw JSON, and submit it with the freshly-read baseHash. Destructive — replaces the entire config atomically.

openclaw_config_applyB

Apply pending config changes (commit). Wraps config.apply. Destructive — propagates buffered config to running components.

openclaw_config_schemaA

Get the JSON schema describing the gateway's config structure. Wraps config.schema. Read-only — useful before openclaw_config_set/patch to know which paths exist.

openclaw_config_schema_lookupA

Look up the schema description for a specific config path. Wraps config.schema.lookup. Read-only.

openclaw_secrets_reloadA

Reload the gateway's secret store from disk. Wraps secrets.reload. Use after editing the secrets file out-of-band so the gateway picks up new values without a restart.

openclaw_secrets_resolveA

Resolve a command-scoped secret. Wraps secrets.resolve. Wire format (verified live against gateway 2026.4.12+): { commandName: string } — the gateway secrets subsystem is COMMAND-scoped, not arbitrary key/value. SENSITIVE — returns secret material; only use for debugging missing/wrong-values issues. For arbitrary API keys consumed by skills, use openclaw_secrets_set (which writes to the config tree, not the command-scoped secret store).

openclaw_secrets_setA

Store an arbitrary secret (API key, third-party token, etc.) in the gateway's config tree where skills can consume it. Internally calls config.patch with a mergePath so the value lands at config.<scope>.<name>. Default scope is secrets (creates config.secrets.<name>); override with scope for skill-scoped secrets like tools.linkedin-outreach.proxycurlApiKey. Note: this writes to the CONFIG tree, not the gateway's secrets.resolve command-scoped store (which has no public write API). After this call, restart-free — the next agent run sees the updated config.

openclaw_skills_statusA

Get the skills subsystem status (which skills are installed, enabled, recently updated). Wraps skills.status. Read-only.

openclaw_skills_searchB

Search the available skill catalog (installed and remote). Wraps skills.search. Read-only.

openclaw_skills_detailA

Get detailed info on a specific skill (manifest, version, dependencies, install state). Wraps skills.detail. Read-only.

openclaw_skills_installC

Install a skill (or a specific version). Wraps skills.install. Mutates the gateway's skill set — confirm before calling.

openclaw_skills_updateB

Update an installed skill to its latest (or a specified) version. Wraps skills.update. Mutates the gateway state.

openclaw_skills_binsA

List the binaries / executables exposed by installed skills. Wraps skills.bins. Read-only.

openclaw_tools_catalogA

List the catalog of agent-facing tools available to OpenClaw agents (i.e. what main and other agents can call from inside a session). Wraps tools.catalog. Read-only.

openclaw_tools_effectiveA

Get the effective (merged) tool set for an agent — base catalog + skill-provided + per-agent overrides. Wraps tools.effective. Read-only.

openclaw_update_runA

Trigger an update of the gateway itself (pull latest version, restart components). Wraps update.run. DESTRUCTIVE — may briefly interrupt running sessions. Confirm before calling.

openclaw_commands_listA

List the slash-commands registered in the gateway (commands the agent or operator can invoke). Wraps commands.list. Read-only.

openclaw_message_actionB

Trigger a message-level action (e.g. retry, mark-as-handled, attach to a session). Wraps message.action. Mutates gateway state.

openclaw_exec_approval_listB

List pending and recent exec approvals (commands the agent wants to run that need a human OK). Wraps exec.approval.list. Read-only.

openclaw_exec_approval_getA

Get details of a specific exec approval request (command, args, agent, status). Wraps exec.approval.get. Read-only.

openclaw_exec_approval_requestA

Submit a new exec approval request (programmatic; normally agents do this themselves). Wraps exec.approval.request.

openclaw_exec_approval_resolveB

Resolve (approve / reject) a pending exec approval. Wraps exec.approval.resolve. Mutates — the agent will proceed (or not) based on this decision.

openclaw_exec_approval_waitDecisionA

Block until an exec approval gets a decision (or timeout). Wraps exec.approval.waitDecision. Long-running — bounded by the request timeout.

openclaw_exec_approvals_getA

Get the global exec approvals policy (auto-allow rules, defaults). Wraps exec.approvals.get. Read-only.

openclaw_exec_approvals_setB

Set / replace the global exec approvals policy. Wraps exec.approvals.set. Destructive — overwrites the existing policy.

openclaw_exec_approvals_node_getB

Get the per-node exec approvals policy override. Wraps exec.approvals.node.get. Read-only.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/smurfy92/openclaw-control-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server