openclaw-mcp 1.1.1 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -86,7 +86,8 @@ Add to your Claude Desktop config:
86
86
  "args": ["openclaw-mcp"],
87
87
  "env": {
88
88
  "OPENCLAW_URL": "http://127.0.0.1:18789",
89
- "OPENCLAW_GATEWAY_TOKEN": "your-gateway-token"
89
+ "OPENCLAW_GATEWAY_TOKEN": "your-gateway-token",
90
+ "OPENCLAW_TIMEOUT_MS": "300000"
90
91
  }
91
92
  }
92
93
  }
package/dist/index.js CHANGED
@@ -4,13 +4,15 @@
4
4
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
5
5
 
6
6
  // src/config/constants.ts
7
+ import { createRequire } from "module";
8
+ var require2 = createRequire(import.meta.url);
9
+ var pkg = require2("../../package.json");
7
10
  var SERVER_NAME = "openclaw-mcp";
8
- var SERVER_VERSION = "1.0.0";
11
+ var SERVER_VERSION = pkg.version;
9
12
  var DEFAULT_OPENCLAW_URL = "http://127.0.0.1:18789";
10
13
  var SERVER_ICON_SVG_BASE64 = "PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiB2aWV3Qm94PSIwIDAgMTI4IDEyOCIgZmlsbD0ibm9uZSI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJiZyIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzFhMWEyZSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzE2MjEzZSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJjbGF3IiB4MT0iMCUiIHkxPSIwJSIgeDI9IjEwMCUiIHkyPSIxMDAlIj48c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSIjZmYzMzMzIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjY2MwMDAwIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3Qgd2lkdGg9IjEyOCIgaGVpZ2h0PSIxMjgiIHJ4PSIyNCIgZmlsbD0idXJsKCNiZykiLz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2NCA2NCkiIHN0cm9rZT0idXJsKCNjbGF3KSIgc3Ryb2tlLXdpZHRoPSI3IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGZpbGw9Im5vbmUiPjxwYXRoIGQ9Ik0tMjggLTM4YzAgMCAtMTAgMjAgMCAzMiIvPjxwYXRoIGQ9Ik0tMTIgLTQwYzAgMCAtNiAyMiA0IDM0Ii8+PHBhdGggZD0iTTI4IC0zOGMwIDAgMTAgMjAgMCAzMiIvPjxwYXRoIGQ9Ik0xMiAtNDBjMCAwIDYgMjIgLTQgMzQiLz48Y2lyY2xlIGN4PSIwIiBjeT0iMTAiIHI9IjIwIiBzdHJva2Utd2lkdGg9IjYiLz48cGF0aCBkPSJNLTEwIDR2LTQiIHN0cm9rZS13aWR0aD0iNCIvPjxwYXRoIGQ9Ik0xMCA0di00IiBzdHJva2Utd2lkdGg9IjQiLz48cGF0aCBkPSJNLTggMjBjNCA2IDEyIDYgMTYgMCIgc3Ryb2tlLXdpZHRoPSIzIi8+PC9nPjwvc3ZnPg==";
11
14
 
12
15
  // src/utils/logger.ts
13
- var DEBUG = process.env.DEBUG === "true" || process.env.NODE_ENV === "development";
14
16
  var SENSITIVE_PATTERNS = [
15
17
  /Bearer\s+[A-Za-z0-9\-._~+/]+=*/gi,
16
18
  /api[_-]?key["\s:=]+[A-Za-z0-9\-._~+/]{8,}/gi,
@@ -67,6 +69,10 @@ function parseArguments(version) {
67
69
  type: "string",
68
70
  description: "Host for SSE server",
69
71
  default: process.env.HOST || "0.0.0.0"
72
+ }).option("timeout", {
73
+ type: "number",
74
+ description: "Request timeout in milliseconds",
75
+ default: parseInt(process.env.OPENCLAW_TIMEOUT_MS || "120000", 10)
70
76
  }).option("auth", {
71
77
  type: "boolean",
72
78
  description: "Enable OAuth authentication (SSE mode)",
@@ -94,6 +100,7 @@ function parseArguments(version) {
94
100
  transport: argv.transport,
95
101
  port: argv.port,
96
102
  host: argv.host,
103
+ timeout: argv.timeout,
97
104
  authEnabled: argv.auth,
98
105
  clientId: argv["client-id"],
99
106
  clientSecret: argv["client-secret"],
@@ -125,7 +132,7 @@ var OpenClawApiError = class extends OpenClawError {
125
132
  };
126
133
 
127
134
  // src/openclaw/client.ts
128
- var DEFAULT_TIMEOUT_MS = 3e4;
135
+ var DEFAULT_TIMEOUT_MS = 12e4;
129
136
  var MAX_RESPONSE_SIZE_BYTES = 10 * 1024 * 1024;
130
137
  var OpenClawClient = class {
131
138
  baseUrl;
@@ -230,14 +237,23 @@ var OpenClawClient = class {
230
237
  /**
231
238
  * Send a chat message via the OpenAI-compatible /v1/chat/completions endpoint.
232
239
  */
233
- async chat(message, _sessionId) {
240
+ async chat(message, sessionId) {
241
+ const body = {
242
+ model: "claude-opus-4-5",
243
+ messages: [{ role: "user", content: message }],
244
+ max_tokens: 4096
245
+ };
246
+ if (sessionId) {
247
+ body.session_id = sessionId;
248
+ }
249
+ const headers = {};
250
+ if (sessionId) {
251
+ headers["x-openclaw-session-key"] = sessionId;
252
+ }
234
253
  const completion = await this.request("/v1/chat/completions", {
235
254
  method: "POST",
236
- body: JSON.stringify({
237
- model: "claude-opus-4-5",
238
- messages: [{ role: "user", content: message }],
239
- max_tokens: 4096
240
- })
255
+ body: JSON.stringify(body),
256
+ headers
241
257
  });
242
258
  const content = completion.choices?.[0]?.message?.content ?? "";
243
259
  return {
@@ -595,13 +611,9 @@ var processorClient = null;
595
611
  async function processTask(task, client2) {
596
612
  taskManager.updateStatus(task.id, "running");
597
613
  try {
598
- if (task.type === "chat") {
599
- const input = task.input;
600
- const response = await client2.chat(input.message, input.session_id);
601
- taskManager.updateStatus(task.id, "completed", response.response);
602
- } else {
603
- taskManager.updateStatus(task.id, "failed", void 0, "Unknown task type");
604
- }
614
+ const input = task.input;
615
+ const response = await client2.chat(input.message, input.session_id);
616
+ taskManager.updateStatus(task.id, "completed", response.response);
605
617
  } catch (error) {
606
618
  const errorMsg = error instanceof Error ? error.message : "Unknown error";
607
619
  taskManager.updateStatus(task.id, "failed", void 0, errorMsg);
@@ -702,7 +714,13 @@ async function handleOpenclawTaskStatus(_client, input) {
702
714
  }
703
715
  return successResponse(JSON.stringify(response, null, 2));
704
716
  }
705
- var VALID_TASK_STATUSES = ["pending", "running", "completed", "failed", "cancelled"];
717
+ var VALID_TASK_STATUSES = [
718
+ "pending",
719
+ "running",
720
+ "completed",
721
+ "failed",
722
+ "cancelled"
723
+ ];
706
724
  async function handleOpenclawTaskList(_client, input) {
707
725
  if (!validateInputIsObject(input)) {
708
726
  return errorResponse("Invalid input: expected an object");
@@ -1266,7 +1284,7 @@ async function createSSEServer(config, deps2) {
1266
1284
 
1267
1285
  // src/index.ts
1268
1286
  var args = parseArguments(SERVER_VERSION);
1269
- var client = new OpenClawClient(args.openclawUrl, args.gatewayToken);
1287
+ var client = new OpenClawClient(args.openclawUrl, args.gatewayToken, args.timeout);
1270
1288
  var deps = {
1271
1289
  client,
1272
1290
  serverName: SERVER_NAME,
@@ -1277,6 +1295,7 @@ async function main() {
1277
1295
  log(`OpenClaw URL: ${args.openclawUrl}`);
1278
1296
  log(`Transport: ${args.transport}`);
1279
1297
  log(`Gateway token: ${args.gatewayToken ? "configured" : "not set"}`);
1298
+ log(`Request timeout: ${args.timeout}ms`);
1280
1299
  if (args.transport === "sse") {
1281
1300
  const sseConfig = {
1282
1301
  port: args.port,
@@ -10,6 +10,7 @@ All configuration can be done via environment variables. Copy `.env.example` to
10
10
  |----------|-------------|---------|
11
11
  | `OPENCLAW_URL` | OpenClaw gateway URL | `http://127.0.0.1:18789` |
12
12
  | `OPENCLAW_GATEWAY_TOKEN` | Bearer token for gateway authentication | (none) |
13
+ | `OPENCLAW_TIMEOUT_MS` | Request timeout in milliseconds | `120000` (2 min) |
13
14
 
14
15
  ### Server Settings (SSE transport)
15
16
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openclaw-mcp",
3
- "version": "1.1.1",
3
+ "version": "1.2.1",
4
4
  "description": "Model Context Protocol (MCP) server for OpenClaw AI assistant integration",
5
5
  "author": "Tomáš Grasl <https://www.tomasgrasl.cz/>",
6
6
  "license": "MIT",