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 +2 -1
- package/dist/index.js +37 -18
- package/docs/configuration.md +1 -0
- package/package.json +1 -1
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 =
|
|
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 =
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
599
|
-
|
|
600
|
-
|
|
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 = [
|
|
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,
|
package/docs/configuration.md
CHANGED
|
@@ -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