Skip to main content
Glama

openclaw-tools-mcp

MCP server that exposes OpenClaw tools to ACP agents (Kiro, Codex, Claude Code, etc.).

ACP agents run in their own runtime with their own native tools but lack access to OpenClaw's capabilities. This server bridges that gap — web search, page fetching, browser automation, PDF analysis, messaging, inter-agent communication, and Canvas are all available as MCP tools.

ACP Agent ◄── stdio (JSON-RPC) ──► openclaw-tools-mcp ◄── HTTP ──► OpenClaw Gateway

Default tools

Tool

Description

web_search

Search the web

web_fetch

Fetch and extract readable content from URLs

browser

Control a web browser (navigate, click, type, screenshot, etc.)

pdf

Analyze PDF documents

message

Send messages via Discord, Telegram, WhatsApp, etc.

canvas

Control the Canvas visual workspace

sessions_send

Send a message into another OpenClaw session (agent-to-agent)

Related MCP server: Agentweaver MCP Server

Quick start

cd openclaw-tools-mcp
npm install
npm run build

Add to ~/.kiro/settings/mcp.json:

{
  "mcpServers": {
    "openclaw-tools": {
      "command": "node",
      "args": ["/absolute/path/to/openclaw-tools-mcp/dist/index.js"],
      "env": {
        "OPENCLAW_GATEWAY_TOKEN": "${OPENCLAW_GATEWAY_TOKEN}"
      }
    }
  }
}

Requires Node.js >= 22 and a running OpenClaw Gateway.

Configuration

Environment variables

Variable

Required

Default

Description

OPENCLAW_GATEWAY_TOKEN

Yes

Bearer token for gateway auth

OPENCLAW_GATEWAY_URL

No

http://127.0.0.1:18789

Gateway base URL

OPENCLAW_MCP_TOOLS

No

all 7 tools

Comma-separated list of tools to expose

OPENCLAW_MCP_CONFIG

No

openclaw-mcp.json

Path to config file

OPENCLAW_MCP_CUSTOM_TOOLS

No

Comma-separated paths to custom tool JSON files

Config file

Optional openclaw-mcp.json:

{
  "gateway": {
    "url": "http://127.0.0.1:18789",
    "token": "your-token"
  },
  "tools": ["web_search", "web_fetch", "browser", "pdf", "message", "canvas", "sessions_send"],
  "customTools": ["./tools/rooms.json"]
}

Environment variables override config file values.

Exposing a subset of tools

{
  "mcpServers": {
    "openclaw-tools": {
      "command": "node",
      "args": ["/path/to/openclaw-tools-mcp/dist/index.js"],
      "env": {
        "OPENCLAW_GATEWAY_TOKEN": "${OPENCLAW_GATEWAY_TOKEN}",
        "OPENCLAW_MCP_TOOLS": "web_search,web_fetch,message"
      }
    }
  }
}

Custom tool definitions

Load additional tools from JSON files — useful for custom OpenClaw skills/plugins.

{
  "tools": [
    {
      "name": "room_join",
      "description": "Join a named room for multi-agent broadcast messaging.",
      "parameters": {
        "type": "object",
        "properties": {
          "room": { "type": "string", "description": "Room name" },
          "agentId": { "type": "string", "description": "Your agent ID" }
        },
        "required": ["room", "agentId"]
      }
    }
  ]
}

Single-tool files (without the tools wrapper) also work. The schema format matches what OpenClaw plugins use in registerTool(). Supported types: string, number, integer, boolean, array. Enums via "enum": [...].

A sessionKey parameter is automatically injected into every custom tool for gateway routing.

A ready-made definition for the rooms plugin is included at tools/rooms.json.

Notes

  • The server uses stdio transport — ACP agents spawn it as a child process.

  • All tool calls are proxied to the gateway's POST /tools/invoke HTTP endpoint.

  • sessions_send requires a gateway config change — see below.

  • Every built-in tool (except sessions_send) accepts an optional sessionKey parameter for routing the call to a specific agent session on the gateway.

Enabling sessions_send

sessions_send is on the gateway's default HTTP deny list for /tools/invoke. Without this config change, calls will return 404 Tool not available. Add to your OpenClaw config (~/.openclaw/openclaw.json):

gateway: {
  tools: {
    allow: ["sessions_send"]
  }
}

Then restart the gateway (openclaw gateway restart).

Troubleshooting

  • Server won't startOPENCLAW_GATEWAY_TOKEN must be set.

  • Tools return errors — Verify the gateway is running (openclaw gateway status) and the token is correct.

  • Tool not found (404) — The tool may be blocked by gateway policy. Check gateway.tools.deny in your OpenClaw config.

  • Verify in Kiro CLI — Run /mcp in an interactive session to see loaded servers and tools.

License

This project is released into the public domain under The Unlicense. See LICENSE.

Available Tools

7 tools
browserC

Control a web browser. Actions: status, start, stop, tabs, open, snapshot, screenshot, navigate, act, click, type, scroll, select, hover, wait, evaluate, close, pdf

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoElement reference ID
urlNoURL for navigate/open actions
textNoText to type or instruction for act
tabIdNoTab ID for tab operations
widthNoViewport width
actionYesBrowser action to perform (e.g. navigate, snapshot, screenshot, click, type, act, status, start, stop, tabs, open, scroll, select, hover, wait, evaluate, close, pdf)
heightNoViewport height
scriptNoJavaScript to evaluate
profileNoBrowser profile name
fullPageNoFull page screenshot
selectorNoCSS selector for element actions
coordinateNo[x, y] coordinate for click actions
sessionKeyNoOpenClaw session key for routing

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden for behavioral disclosure. It only lists action names without explaining side effects, state changes, prerequisites, or return values. For example, it does not state that 'close' terminates the browser session or that 'pdf' generates a file.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with a clear purpose statement. The action list is efficient, though it is presented as an unformatted run-on list that could be better organized into groups or categories.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (13 parameters, multiple actions, no output schema), the description is minimal and incomplete. It does not explain how actions relate to parameters, expected outcomes, or operational requirements, making it insufficient for an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the parameter descriptions already document each field's meaning. The description adds little beyond the schema, mainly repeating action names already present in the 'action' parameter description. It does not map actions to required parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Control a web browser' and lists the available actions, which distinguishes it from sibling tools like web_search and web_fetch. However, it does not explain what each action does in detail, so it is clear but not deeply specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like web_fetch or web_search. It does not mention prerequisites, exclusions, or scenarios where one tool would be preferred over another.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

canvasC

Control the Canvas visual workspace. Actions: present, hide, navigate, eval, snapshot, a2ui_push, a2ui_reset

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoURL for present/navigate actions
htmlNoHTML content for a2ui_push
nodeNoTarget node ID
actionYesCanvas action (present, hide, navigate, eval, snapshot, a2ui_push, a2ui_reset)
formatNoSnapshot format (png, jpeg)
scriptNoJavaScript to evaluate
targetNoTarget for present action (URL or HTML)
sessionKeyNoOpenClaw session key for routing

TDQS

C2.4/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full responsibility for disclosing behavioral traits. It only lists action names without explaining side effects, safety (e.g., eval executes JavaScript), or response behavior. This is a significant gap for a multi-action tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with the resource and action list. It is succinct without waste, though it sacrifices explanatory value for brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a complex tool with 8 parameters, 7 actions, and no output schema. The description is severely incomplete—it doesn't explain action behaviors, parameter combinations, or return values, making it inadequate for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with each parameter having a description, so the baseline is 3. The description adds no parameter meaning beyond what the schema provides, merely repeating the action list already present in the schema's action property.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the resource (Canvas visual workspace) and provides a list of actions, but 'Control' is generic and doesn't clarify what the workspace is or how it relates to sibling tools like browser. It lists actions but gives no detail on what each does, making it hard to distinguish from alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus browser, web_fetch, or others. There are no exclusions, prerequisites, or context signals indicating the intended use case, leaving the agent to infer usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

messageC

Send messages and perform channel actions (Discord, Telegram, WhatsApp, etc.). Actions: send, react, search, read, poll, thread-create, thread-reply

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoRecipient identifier (phone, user ID, channel ID)
emojiNoEmoji for react action
limitNoLimit for search/read results
queryNoSearch query for search action
actionYesMessage action (send, react, search, read, poll, thread-create, thread-reply)
accountNoAccount ID when multiple accounts exist
channelNoChannel type (discord, telegram, whatsapp, signal, slack)
messageNoMessage text to send
threadIdNoThread ID for thread operations
messageIdNoMessage ID for react/reply actions
sessionKeyNoOpenClaw session key for routing
pollOptionsNoPoll answer options
pollQuestionNoPoll question

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses no auth needs, side effects of sending, failure modes, or per-action behaviors. Irreversible operations like send/react are not flagged.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the verb and resource, then lists actions. It is compact with no fluff, though the action list slightly duplicates the schema's action enum.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 13 parameters, 7 actions, no output schema, and no annotations, the description is far from complete. It fails to explain which parameters apply to each action, per-channel specifics, or return formats, leaving many gaps for the agent to navigate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all parameters have individual descriptions. The tool description repeats the action list already present in the action parameter but adds no new meaning or mapping of actions to parameters, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the resource (messages/channels) and the verbs (send, react, search, etc.), with explicit channel examples (Discord, Telegram, WhatsApp). It is clear enough to distinguish from web/browser tools, though 'perform channel actions' is broad.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives such as sessions_send. Implied usage for external messaging exists, but there are no exclusions, prerequisites, or comparison to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pdfB

Analyze PDF documents from file paths or URLs

ParametersJSON Schema
NameRequiredDescriptionDefault
pdfNoSingle PDF path or URL
pdfsNoMultiple PDF paths or URLs
modelNoModel to use for analysis
pagesNoPage range (e.g. '1-5', '1,3,5')
promptNoAnalysis prompt / question about the PDF
sessionKeyNoOpenClaw session key for routing

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It only says 'Analyze' without specifying whether the tool extracts text, downloads files, reads local paths, makes network requests, or returns structured output. No side effects, permissions, or output behavior are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the verb and resource. It contains no redundant or filler content, making it highly concise and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 6 parameters, no annotations, and no output schema, the one-line description is far from complete. It fails to explain what 'analyze' returns, how to use the 'model' or 'prompt' parameters, or how the tool behaves in practice. The agent is left to infer all usage context from parameter names and descriptions alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The parameter schema provides descriptions for all 6 parameters, so the baseline is 3. The tool description does not add any parameter-specific meaning beyond what the schema already states; it merely mirrors the fact that inputs can be paths or URLs, which is already documented in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Analyze'), a well-defined resource ('PDF documents'), and a source qualifier ('from file paths or URLs'). It is instantly distinguishable from sibling tools like web_search and web_fetch, which are general-purpose and not PDF-specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no guidance on when to use this tool versus alternatives. It does not mention prerequisites, exclusions, or compare with related tools such as web_fetch or browser for fetching PDFs from URLs. The intended use case is implied but never explicitly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sessions_sendA

Send a message into another OpenClaw session. Use for agent-to-agent communication. Either sessionKey or label must be provided to identify the target session.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNoTarget session label
messageYesMessage content to send
sessionKeyNoTarget session key (e.g. agent:openclaw-expert:discord:channel:123456)
timeoutSecondsNoHow long to wait for a response

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the action and identification requirement but omits the response/wait behavior enabled by 'timeoutSeconds' (e.g., whether it returns the other session's reply). This is a notable gap for a messaging tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, front-loaded with the primary action and followed by an essential requirement. Every word adds value; no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description adequately covers the core purpose and parameter constraints, but for a tool with no output schema or annotations, it should clarify response/wait behavior, especially given the 'timeoutSeconds' parameter. The absence of this detail leaves the agent uncertain about the tool's return value and blocking nature.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

While the schema already describes all parameters, the description adds crucial semantic information: 'Either sessionKey or label must be provided to identify the target session.' This is not reflected in the schema's required list, making it valuable beyond the structured data.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action: 'Send a message into another OpenClaw session' and explicitly mentions 'Use for agent-to-agent communication,' which distinguishes it from sibling tools like 'message' that likely target users.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context ('Use for agent-to-agent communication') and identifies a prerequisite (sessionKey or label required). It does not explicitly mention when not to use, but the stated use case is sufficiently directive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

web_fetchA

Fetch and extract readable content from a URL (HTML converted to markdown or text)

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to fetch
maxCharsNoMaximum characters to return
sessionKeyNoOpenClaw session key for routing
extractModeNoContent extraction mode

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does add noteworthy behavioral context: it explains that HTML is converted to markdown or text, implying content extraction rather than raw HTML delivery. However, it does not disclose error handling, redirects, or authentication concerns, leaving some behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that immediately communicates the tool's core function and output format transformation. Every element earns its place, with no redundant phrasing or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is straightforward with a clear schema covering all four parameters, so the description is nearly sufficient. It explains the core transformation (HTML to markdown/text) and output nature (readable content), though it omits details like return value structure or failure modes. Given the simplicity and 100% schema coverage, this is a high degree of completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description's mention of markdown/text conversion aligns with the extractMode parameter but adds no new details beyond what the schema already specifies. It does not elaborate on maxChars or sessionKey semantics, which the schema already covers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action: 'Fetch and extract readable content from a URL', with explicit mention of HTML being converted to markdown or text. This distinguishes it from siblings like web_search (search) and browser (interactive), as it identifies a unique fetch-and-convert operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for fetching web content, but offers no explicit when-to-use or when-not-to-use guidance, nor does it reference alternative tools. The context from sibling tool names (e.g., browser, web_search) could help an agent infer when this tool is appropriate, but the description itself does not provide that guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 7 tool updatesv1.0.0
    • First observedbrowser
    • First observedcanvas
    • First observedmessage
    • First observedpdf
    • First observedsessions_send
    • First observedweb_fetch
    • First observedweb_search

TDQS

B3.3/5.0
Disambiguation5/5

Each tool targets a distinct domain: web search, URL fetching, browser control, PDF analysis, messaging, canvas, and inter-session communication. No two tools have overlapping purposes; even web_fetch and browser are differentiated by control vs extraction.

Naming Consistency3/5

The naming pattern is inconsistent: some tools use verb_noun (web_search, web_fetch), some are single nouns (browser, pdf, message, canvas), and one uses noun_verb (sessions_send). All are lowercase snake_case, but the structure varies.

Tool Count5/5

Seven tools is well-scoped for a general-purpose assistant toolkit, covering major capabilities like web, communication, document analysis, and workspace control without feeling bloated or sparse.

Completeness4/5

The suite covers web research, browsing, document analysis, messaging, canvas control, and agent-to-agent communication. Minor gaps like calendar or file management could be expected, but the core workflows are well covered.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

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/haliphax-ai/openclaw-tools-mcp-server'

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