@hualinge/relay-mcp-server 0.1.3

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.
Files changed (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +11 -0
  3. package/dist/collab.d.ts +8 -0
  4. package/dist/collab.d.ts.map +1 -0
  5. package/dist/collab.js +47 -0
  6. package/dist/collab.js.map +1 -0
  7. package/dist/dare.d.ts +4 -0
  8. package/dist/dare.d.ts.map +1 -0
  9. package/dist/dare.js +46 -0
  10. package/dist/dare.js.map +1 -0
  11. package/dist/index.d.ts +4 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +47 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/memory.d.ts +8 -0
  16. package/dist/memory.d.ts.map +1 -0
  17. package/dist/memory.js +47 -0
  18. package/dist/memory.js.map +1 -0
  19. package/dist/server-toolsets.d.ts +13 -0
  20. package/dist/server-toolsets.d.ts.map +1 -0
  21. package/dist/server-toolsets.js +119 -0
  22. package/dist/server-toolsets.js.map +1 -0
  23. package/dist/tools/callback-memory-tools.d.ts +46 -0
  24. package/dist/tools/callback-memory-tools.d.ts.map +1 -0
  25. package/dist/tools/callback-memory-tools.js +59 -0
  26. package/dist/tools/callback-memory-tools.js.map +1 -0
  27. package/dist/tools/callback-outbox.d.ts +15 -0
  28. package/dist/tools/callback-outbox.d.ts.map +1 -0
  29. package/dist/tools/callback-outbox.js +162 -0
  30. package/dist/tools/callback-outbox.js.map +1 -0
  31. package/dist/tools/callback-retry.d.ts +14 -0
  32. package/dist/tools/callback-retry.d.ts.map +1 -0
  33. package/dist/tools/callback-retry.js +58 -0
  34. package/dist/tools/callback-retry.js.map +1 -0
  35. package/dist/tools/callback-tools.d.ts +444 -0
  36. package/dist/tools/callback-tools.d.ts.map +1 -0
  37. package/dist/tools/callback-tools.js +771 -0
  38. package/dist/tools/callback-tools.js.map +1 -0
  39. package/dist/tools/evidence-tools.d.ts +36 -0
  40. package/dist/tools/evidence-tools.d.ts.map +1 -0
  41. package/dist/tools/evidence-tools.js +87 -0
  42. package/dist/tools/evidence-tools.js.map +1 -0
  43. package/dist/tools/file-tools.d.ts +78 -0
  44. package/dist/tools/file-tools.d.ts.map +1 -0
  45. package/dist/tools/file-tools.js +178 -0
  46. package/dist/tools/file-tools.js.map +1 -0
  47. package/dist/tools/index.d.ts +13 -0
  48. package/dist/tools/index.d.ts.map +1 -0
  49. package/dist/tools/index.js +18 -0
  50. package/dist/tools/index.js.map +1 -0
  51. package/dist/tools/limb-tools.d.ts +113 -0
  52. package/dist/tools/limb-tools.d.ts.map +1 -0
  53. package/dist/tools/limb-tools.js +120 -0
  54. package/dist/tools/limb-tools.js.map +1 -0
  55. package/dist/tools/reflect-tools.d.ts +23 -0
  56. package/dist/tools/reflect-tools.d.ts.map +1 -0
  57. package/dist/tools/reflect-tools.js +52 -0
  58. package/dist/tools/reflect-tools.js.map +1 -0
  59. package/dist/tools/rich-block-rules-tool.d.ts +17 -0
  60. package/dist/tools/rich-block-rules-tool.d.ts.map +1 -0
  61. package/dist/tools/rich-block-rules-tool.js +36 -0
  62. package/dist/tools/rich-block-rules-tool.js.map +1 -0
  63. package/dist/tools/schedule-tools.d.ts +134 -0
  64. package/dist/tools/schedule-tools.d.ts.map +1 -0
  65. package/dist/tools/schedule-tools.js +397 -0
  66. package/dist/tools/schedule-tools.js.map +1 -0
  67. package/dist/tools/session-chain-tools.d.ts +99 -0
  68. package/dist/tools/session-chain-tools.d.ts.map +1 -0
  69. package/dist/tools/session-chain-tools.js +288 -0
  70. package/dist/tools/session-chain-tools.js.map +1 -0
  71. package/dist/utils/index.d.ts +6 -0
  72. package/dist/utils/index.d.ts.map +1 -0
  73. package/dist/utils/index.js +11 -0
  74. package/dist/utils/index.js.map +1 -0
  75. package/dist/utils/path-utils.d.ts +6 -0
  76. package/dist/utils/path-utils.d.ts.map +1 -0
  77. package/dist/utils/path-utils.js +63 -0
  78. package/dist/utils/path-utils.js.map +1 -0
  79. package/dist/utils/path-validator.d.ts +45 -0
  80. package/dist/utils/path-validator.d.ts.map +1 -0
  81. package/dist/utils/path-validator.js +126 -0
  82. package/dist/utils/path-validator.js.map +1 -0
  83. package/package.json +44 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 OfficeClaw Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # @openjiuwen/relay-mcp-server
2
+
3
+ OfficeClaw MCP server package.
4
+
5
+ It exposes Model Context Protocol tools backed by OfficeClaw shared schemas and utility types.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ pnpm add @openjiuwen/relay-mcp-server
11
+ ```
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ /**
4
+ * Create a Collab MCP server instance with messaging, context,
5
+ * task management, and permission tools registered.
6
+ */
7
+ export declare function createCollabServer(): McpServer;
8
+ //# sourceMappingURL=collab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collab.d.ts","sourceRoot":"","sources":["../src/collab.ts"],"names":[],"mappings":";AAeA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAYpE;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,SAAS,CAI9C"}
package/dist/collab.js ADDED
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env node
2
+ /*
3
+ * *
4
+ * * Copyright (C) Huawei Technologies Co., Ltd. 2026. All rights reserved.
5
+ *
6
+ */
7
+ /**
8
+ * OfficeClaw MCP Server — Collab Surface
9
+ * 只暴露协作核心工具(消息、上下文、任务、权限)。
10
+ */
11
+ import { resolve } from 'node:path';
12
+ import { fileURLToPath } from 'node:url';
13
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
14
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
15
+ import { registerCollabToolset } from './server-toolsets.js';
16
+ import { initOfficeClawDir } from './utils/path-validator.js';
17
+ function createBaseServer(name) {
18
+ return new McpServer({
19
+ name,
20
+ version: '0.1.0',
21
+ });
22
+ }
23
+ /**
24
+ * Create a Collab MCP server instance with messaging, context,
25
+ * task management, and permission tools registered.
26
+ */
27
+ export function createCollabServer() {
28
+ const server = createBaseServer('office-claw-collab-mcp');
29
+ registerCollabToolset(server);
30
+ return server;
31
+ }
32
+ async function main() {
33
+ initOfficeClawDir();
34
+ const server = createCollabServer();
35
+ const transport = new StdioServerTransport();
36
+ console.error('[office-claw-collab] MCP Server starting...');
37
+ await server.connect(transport);
38
+ console.error('[office-claw-collab] MCP Server running on stdio');
39
+ }
40
+ const isEntryPoint = process.argv[1] && resolve(fileURLToPath(import.meta.url)) === resolve(process.argv[1]);
41
+ if (isEntryPoint) {
42
+ main().catch((err) => {
43
+ console.error('[office-claw-collab] Fatal error:', err);
44
+ process.exit(1);
45
+ });
46
+ }
47
+ //# sourceMappingURL=collab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collab.js","sourceRoot":"","sources":["../src/collab.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAGH;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,IAAI,SAAS,CAAC;QACnB,IAAI;QACJ,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,MAAM,GAAG,gBAAgB,CAAC,wBAAwB,CAAC,CAAC;IAC1D,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,iBAAiB,EAAE,CAAC;IACpB,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC7D,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7G,IAAI,YAAY,EAAE,CAAC;IACjB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACnB,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
package/dist/dare.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ export declare function createCompactServer(): McpServer;
4
+ //# sourceMappingURL=dare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dare.d.ts","sourceRoot":"","sources":["../src/dare.ts"],"names":[],"mappings":";AAoBA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,mBAAmB,IAAI,SAAS,CAO/C"}
package/dist/dare.js ADDED
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env node
2
+ /*
3
+ * *
4
+ * * Copyright (C) Huawei Technologies Co., Ltd. 2026. All rights reserved.
5
+ *
6
+ */
7
+ /**
8
+ * OfficeClaw MCP Server — Compact entrypoint for narrow-context models.
9
+ *
10
+ * Registers all tools with one-line descriptions instead of verbose
11
+ * GOTCHA/TIP/WORKFLOW paragraphs. This reduces tool definition payload
12
+ * from ~100K+ tokens to ~15K tokens in models where tools are serialized
13
+ * into prompt_length (e.g. OpenAI ChatCompletions → GLM-5).
14
+ *
15
+ * Used by DareAgentService when --mcp-path points here.
16
+ */
17
+ import { resolve } from 'node:path';
18
+ import { fileURLToPath } from 'node:url';
19
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
20
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
21
+ import { registerCompactToolset } from './server-toolsets.js';
22
+ import { initOfficeClawDir } from './utils/path-validator.js';
23
+ export function createCompactServer() {
24
+ const server = new McpServer({
25
+ name: 'office-claw-mcp-compact',
26
+ version: '0.1.0',
27
+ });
28
+ registerCompactToolset(server);
29
+ return server;
30
+ }
31
+ async function main() {
32
+ initOfficeClawDir();
33
+ const server = createCompactServer();
34
+ const transport = new StdioServerTransport();
35
+ console.error('[office-claw] MCP Server (compact) starting...');
36
+ await server.connect(transport);
37
+ console.error('[office-claw] MCP Server (compact) running on stdio');
38
+ }
39
+ const isEntryPoint = process.argv[1] && resolve(fileURLToPath(import.meta.url)) === resolve(process.argv[1]);
40
+ if (isEntryPoint) {
41
+ main().catch((err) => {
42
+ console.error('[office-claw] Fatal error:', err);
43
+ process.exit(1);
44
+ });
45
+ }
46
+ //# sourceMappingURL=dare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dare.js","sourceRoot":"","sources":["../src/dare.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAEH;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,MAAM,UAAU,mBAAmB;IACjC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IACH,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,iBAAiB,EAAE,CAAC;IACpB,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;IACrC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;IAChE,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7G,IAAI,YAAY,EAAE,CAAC;IACjB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACnB,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ export declare function createServer(): McpServer;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAeA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAYpE,wBAAgB,YAAY,IAAI,SAAS,CAIxC"}
package/dist/index.js ADDED
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env node
2
+ /*
3
+ * *
4
+ * * Copyright (C) Huawei Technologies Co., Ltd. 2026. All rights reserved.
5
+ *
6
+ */
7
+ /**
8
+ * OfficeClaw MCP Server (legacy all-in-one entrypoint)
9
+ * 保持向后兼容:聚合注册 collab + memory + signals。
10
+ */
11
+ import { resolve } from 'node:path';
12
+ import { fileURLToPath } from 'node:url';
13
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
14
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
15
+ import { registerFullToolset } from './server-toolsets.js';
16
+ import { initOfficeClawDir } from './utils/path-validator.js';
17
+ function createBaseServer(name) {
18
+ return new McpServer({
19
+ name,
20
+ version: '0.1.0',
21
+ });
22
+ }
23
+ export function createServer() {
24
+ const server = createBaseServer('office-claw-mcp');
25
+ registerFullToolset(server);
26
+ return server;
27
+ }
28
+ /**
29
+ * 主函数
30
+ */
31
+ async function main() {
32
+ initOfficeClawDir();
33
+ const server = createServer();
34
+ const transport = new StdioServerTransport();
35
+ console.error('[office-claw] MCP Server starting...');
36
+ await server.connect(transport);
37
+ console.error('[office-claw] MCP Server running on stdio');
38
+ }
39
+ // 仅作为入口运行时启动 (import 时跳过,避免测试阻塞在 stdio)
40
+ const isEntryPoint = process.argv[1] && resolve(fileURLToPath(import.meta.url)) === resolve(process.argv[1]);
41
+ if (isEntryPoint) {
42
+ main().catch((err) => {
43
+ console.error('[office-claw] Fatal error:', err);
44
+ process.exit(1);
45
+ });
46
+ }
47
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAGH;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,IAAI,SAAS,CAAC;QACnB,IAAI;QACJ,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;IACnD,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,iBAAiB,EAAE,CAAC;IACpB,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACtD,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;AAC7D,CAAC;AAED,wCAAwC;AACxC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7G,IAAI,YAAY,EAAE,CAAC;IACjB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACnB,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ /**
4
+ * Create a Memory MCP server instance with evidence search,
5
+ * reflection, session chain, and memory retention tools registered.
6
+ */
7
+ export declare function createMemoryServer(): McpServer;
8
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":";AAeA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAYpE;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,SAAS,CAI9C"}
package/dist/memory.js ADDED
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env node
2
+ /*
3
+ * *
4
+ * * Copyright (C) Huawei Technologies Co., Ltd. 2026. All rights reserved.
5
+ *
6
+ */
7
+ /**
8
+ * OfficeClaw MCP Server — Memory Surface
9
+ * 只暴露记忆与回溯工具(evidence/reflect/session chain)。
10
+ */
11
+ import { resolve } from 'node:path';
12
+ import { fileURLToPath } from 'node:url';
13
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
14
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
15
+ import { registerMemoryToolset } from './server-toolsets.js';
16
+ import { initOfficeClawDir } from './utils/path-validator.js';
17
+ function createBaseServer(name) {
18
+ return new McpServer({
19
+ name,
20
+ version: '0.1.0',
21
+ });
22
+ }
23
+ /**
24
+ * Create a Memory MCP server instance with evidence search,
25
+ * reflection, session chain, and memory retention tools registered.
26
+ */
27
+ export function createMemoryServer() {
28
+ const server = createBaseServer('office-claw-memory-mcp');
29
+ registerMemoryToolset(server);
30
+ return server;
31
+ }
32
+ async function main() {
33
+ initOfficeClawDir();
34
+ const server = createMemoryServer();
35
+ const transport = new StdioServerTransport();
36
+ console.error('[office-claw-memory] MCP Server starting...');
37
+ await server.connect(transport);
38
+ console.error('[office-claw-memory] MCP Server running on stdio');
39
+ }
40
+ const isEntryPoint = process.argv[1] && resolve(fileURLToPath(import.meta.url)) === resolve(process.argv[1]);
41
+ if (isEntryPoint) {
42
+ main().catch((err) => {
43
+ console.error('[office-claw-memory] Fatal error:', err);
44
+ process.exit(1);
45
+ });
46
+ }
47
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAGH;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,IAAI,SAAS,CAAC;QACnB,IAAI;QACJ,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,MAAM,GAAG,gBAAgB,CAAC,wBAAwB,CAAC,CAAC;IAC1D,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,iBAAiB,EAAE,CAAC;IACpB,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC7D,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7G,IAAI,YAAY,EAAE,CAAC;IACjB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACnB,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerCollabToolset(server: McpServer): void;
3
+ export declare function registerMemoryToolset(server: McpServer): void;
4
+ export declare function registerSignalToolset(_server: McpServer): void;
5
+ export declare function registerLimbToolset(server: McpServer): void;
6
+ export declare function registerFullToolset(server: McpServer): void;
7
+ /**
8
+ * Register all tools with compact (one-line) descriptions.
9
+ * Keeps full functionality — only descriptions are shortened.
10
+ * Use for models where tool definitions count toward prompt_length.
11
+ */
12
+ export declare function registerCompactToolset(server: McpServer): void;
13
+ //# sourceMappingURL=server-toolsets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-toolsets.d.ts","sourceRoot":"","sources":["../src/server-toolsets.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkDpE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAE7D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAE7D;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI,CAAG;AAIlE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAE3D;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAI3D;AAoED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAI9D"}
@@ -0,0 +1,119 @@
1
+ /*
2
+ * *
3
+ * * Copyright (C) Huawei Technologies Co., Ltd. 2026. All rights reserved.
4
+ *
5
+ */
6
+ import { callbackMemoryTools, callbackTools, evidenceTools, limbTools, reflectTools, richBlockRulesTools, scheduleTools, sessionChainTools, } from './tools/index.js';
7
+ const collabTools = [...callbackTools, ...richBlockRulesTools, ...scheduleTools];
8
+ const memoryTools = [
9
+ ...callbackMemoryTools,
10
+ ...evidenceTools,
11
+ ...reflectTools,
12
+ ...sessionChainTools,
13
+ ];
14
+ function resolveExcludedToolNames() {
15
+ return new Set((process.env.OFFICE_CLAW_MCP_EXCLUDED_TOOLS ?? '')
16
+ .split(',')
17
+ .map((name) => name.trim())
18
+ .filter(Boolean));
19
+ }
20
+ function registerTools(server, tools) {
21
+ const excludedToolNames = resolveExcludedToolNames();
22
+ for (const tool of tools) {
23
+ if (excludedToolNames.has(tool.name))
24
+ continue;
25
+ server.tool(tool.name, tool.description, tool.inputSchema, async (args) => {
26
+ const result = await tool.handler(args);
27
+ return {
28
+ ...result,
29
+ };
30
+ });
31
+ }
32
+ }
33
+ export function registerCollabToolset(server) {
34
+ registerTools(server, collabTools);
35
+ }
36
+ export function registerMemoryToolset(server) {
37
+ registerTools(server, memoryTools);
38
+ }
39
+ export function registerSignalToolset(_server) { }
40
+ const limbNodeTools = [...limbTools];
41
+ export function registerLimbToolset(server) {
42
+ registerTools(server, limbNodeTools);
43
+ }
44
+ export function registerFullToolset(server) {
45
+ registerCollabToolset(server);
46
+ registerMemoryToolset(server);
47
+ registerLimbToolset(server);
48
+ }
49
+ /**
50
+ * Compact descriptions for narrow-context models (e.g. GLM-5 196K).
51
+ * OpenAI ChatCompletions serializes tool definitions into prompt_length,
52
+ * so verbose descriptions (GOTCHA/TIP/WORKFLOW) waste ~100K+ tokens.
53
+ * Compact mode keeps only the first sentence of each description.
54
+ */
55
+ const COMPACT_DESCRIPTIONS = {
56
+ // Collab
57
+ office_claw_post_message: 'Post an async message to OfficeClaw chat mid-task.',
58
+ office_claw_get_pending_mentions: 'Get recent @-mentions for you. Call ack_mentions after processing.',
59
+ office_claw_ack_mentions: 'Acknowledge processed mentions up to a message ID.',
60
+ office_claw_get_thread_context: 'Get recent messages from a thread. Pass threadId for cross-thread.',
61
+ office_claw_list_threads: 'List thread summaries. Filter by keyword or activeSince.',
62
+ office_claw_feat_index: 'Lookup feature entries by featId or query.',
63
+ office_claw_cross_post_message: 'Post a message to a different thread by threadId.',
64
+ office_claw_list_tasks: 'List tasks with optional threadId/agentId/status filters.',
65
+ office_claw_list_skills: 'List OfficeClaw shared skills available at runtime. Use before search/grep for workflow tasks; retry with exact skill name if intent search is empty.',
66
+ office_claw_load_skill: 'Load one OfficeClaw shared skill by exact name.',
67
+ office_claw_update_task: 'Update status of a task you own (doing/blocked/done).',
68
+ office_claw_create_rich_block: 'Create a rich block (card/diff/checklist/media_gallery/audio/interactive). Must have kind, v:1, unique id.',
69
+ office_claw_request_permission: 'Request user permission before a sensitive action.',
70
+ office_claw_check_permission_status: 'Check status of a permission request by requestId.',
71
+ office_claw_register_pr_tracking: 'Register a PR for review notification routing.',
72
+ office_claw_update_workflow: 'Update SOP workflow stage for a Feature.',
73
+ office_claw_multi_mention: 'Invoke up to 3 agents in parallel. Requires searchEvidenceRefs or overrideReason.',
74
+ office_claw_get_rich_block_rules: 'Get full rich block schema rules. Call once per session before creating blocks.',
75
+ office_claw_list_scheduled_tasks: 'List all registered scheduled tasks (builtin + dynamic) with status.',
76
+ office_claw_list_schedule_templates: 'List available schedule task templates (reminder, web-digest, repo-activity).',
77
+ office_claw_preview_scheduled_task: 'Preview a scheduled task draft before creating it.',
78
+ office_claw_register_scheduled_task: 'Create a new scheduled task from a template. Preview first.',
79
+ office_claw_update_scheduled_task: 'Update a dynamic scheduled task by ID.',
80
+ office_claw_set_scheduled_task_enabled: 'Cancel/stop/pause a dynamic scheduled task with enabled=false, or resume it with enabled=true, without deleting it.',
81
+ office_claw_remove_scheduled_task: 'Permanently delete a dynamic scheduled task record only when the user explicitly asks to delete/remove it.',
82
+ // Memory
83
+ office_claw_retain_memory_callback: 'Retain a durable memory item with optional tags.',
84
+ office_claw_search_evidence: 'Search project knowledge base. Modes: lexical/semantic/hybrid.',
85
+ office_claw_reflect: 'Ask a reflective question synthesizing project knowledge.',
86
+ office_claw_list_session_chain: 'List session chain for a thread by agentId.',
87
+ office_claw_read_session_events: 'Read events from a sealed session (raw/chat/handoff views).',
88
+ office_claw_read_session_digest: 'Read extractive digest of a sealed session.',
89
+ office_claw_read_invocation_detail: 'Read all events for a specific invocation.',
90
+ // Limbs
91
+ limb_list_available: 'List online limb nodes and capabilities.',
92
+ limb_invoke: 'Invoke a capability on a limb node.',
93
+ limb_pair_list: 'List pending limb pairing requests.',
94
+ limb_pair_approve: 'Approve a limb pairing request.',
95
+ // File tools (MCP-provided)
96
+ read_file: 'Read file content by path.',
97
+ write_file: 'Write content to a file.',
98
+ list_files: 'List files in a directory.',
99
+ };
100
+ function compactTools(tools) {
101
+ return tools.map((t) => {
102
+ const compact = COMPACT_DESCRIPTIONS[t.name];
103
+ if (!compact) {
104
+ console.error(`[compact-mcp] Missing compact description for tool: ${t.name}, using verbose fallback`);
105
+ }
106
+ return compact ? { ...t, description: compact } : t;
107
+ });
108
+ }
109
+ /**
110
+ * Register all tools with compact (one-line) descriptions.
111
+ * Keeps full functionality — only descriptions are shortened.
112
+ * Use for models where tool definitions count toward prompt_length.
113
+ */
114
+ export function registerCompactToolset(server) {
115
+ registerTools(server, compactTools(collabTools));
116
+ registerTools(server, compactTools(memoryTools));
117
+ registerTools(server, compactTools(limbNodeTools));
118
+ }
119
+ //# sourceMappingURL=server-toolsets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-toolsets.js","sourceRoot":"","sources":["../src/server-toolsets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * MCP Callback Memory Tools — invocation-scoped evidence/reflect/retain
3
+ */
4
+ import { z } from 'zod';
5
+ import type { ToolResult } from './file-tools.js';
6
+ export declare const callbackEvidenceSearchInputSchema: {
7
+ query: z.ZodString;
8
+ limit: z.ZodOptional<z.ZodNumber>;
9
+ budget: z.ZodOptional<z.ZodEnum<["low", "mid", "high"]>>;
10
+ tags: z.ZodOptional<z.ZodString>;
11
+ tagsMatch: z.ZodOptional<z.ZodEnum<["any", "all", "any_strict", "all_strict"]>>;
12
+ };
13
+ export declare const callbackReflectInputSchema: {
14
+ query: z.ZodString;
15
+ };
16
+ export declare const callbackRetainMemoryInputSchema: {
17
+ content: z.ZodString;
18
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
19
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
20
+ };
21
+ export declare function handleCallbackSearchEvidence(input: {
22
+ query: string;
23
+ limit?: number | undefined;
24
+ budget?: 'low' | 'mid' | 'high' | undefined;
25
+ tags?: string | undefined;
26
+ tagsMatch?: 'any' | 'all' | 'any_strict' | 'all_strict' | undefined;
27
+ }): Promise<ToolResult>;
28
+ export declare function handleCallbackReflect(input: {
29
+ query: string;
30
+ }): Promise<ToolResult>;
31
+ export declare function handleCallbackRetainMemory(input: {
32
+ content: string;
33
+ tags?: string[] | undefined;
34
+ metadata?: Record<string, string> | undefined;
35
+ }): Promise<ToolResult>;
36
+ export declare const callbackMemoryTools: readonly [{
37
+ readonly name: "office_claw_retain_memory_callback";
38
+ readonly description: string;
39
+ readonly inputSchema: {
40
+ content: z.ZodString;
41
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
42
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
43
+ };
44
+ readonly handler: typeof handleCallbackRetainMemory;
45
+ }];
46
+ //# sourceMappingURL=callback-memory-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"callback-memory-tools.d.ts","sourceRoot":"","sources":["../../src/tools/callback-memory-tools.ts"],"names":[],"mappings":"AAMA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,eAAO,MAAM,iCAAiC;;;;;;CAM7C,CAAC;AAEF,eAAO,MAAM,0BAA0B;;CAEtC,CAAC;AAEF,eAAO,MAAM,+BAA+B;;;;CAI3C,CAAC;AAEF,wBAAsB,4BAA4B,CAAC,KAAK,EAAE;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;IAC5C,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,YAAY,GAAG,YAAY,GAAG,SAAS,CAAC;CACrE,GAAG,OAAO,CAAC,UAAU,CAAC,CAQtB;AAED,wBAAsB,qBAAqB,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAEzF;AAED,wBAAsB,0BAA0B,CAAC,KAAK,EAAE;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CAC/C,GAAG,OAAO,CAAC,UAAU,CAAC,CAMtB;AAED,eAAO,MAAM,mBAAmB;;;;;;;;;EActB,CAAC"}
@@ -0,0 +1,59 @@
1
+ /*
2
+ * *
3
+ * * Copyright (C) Huawei Technologies Co., Ltd. 2026. All rights reserved.
4
+ *
5
+ */
6
+ /**
7
+ * MCP Callback Memory Tools — invocation-scoped evidence/reflect/retain
8
+ */
9
+ import { z } from 'zod';
10
+ import { callbackGet, callbackPost } from './callback-tools.js';
11
+ export const callbackEvidenceSearchInputSchema = {
12
+ query: z.string().trim().min(1).describe('Evidence query string'),
13
+ limit: z.number().int().min(1).max(20).optional().describe('Maximum number of results (default: 5)'),
14
+ budget: z.enum(['low', 'mid', 'high']).optional().describe('Recall budget profile'),
15
+ tags: z.string().optional().describe('Comma-separated tags (example: project:office-claw,kind:decision)'),
16
+ tagsMatch: z.enum(['any', 'all', 'any_strict', 'all_strict']).optional().describe('Tag matching strategy'),
17
+ };
18
+ export const callbackReflectInputSchema = {
19
+ query: z.string().trim().min(1).describe('Reflection question'),
20
+ };
21
+ export const callbackRetainMemoryInputSchema = {
22
+ content: z.string().trim().min(1).describe('Memory content to retain'),
23
+ tags: z.array(z.string().min(1)).optional().describe('Optional memory tags'),
24
+ metadata: z.record(z.string()).optional().describe('Optional metadata (string values only)'),
25
+ };
26
+ export async function handleCallbackSearchEvidence(input) {
27
+ return callbackGet('/api/callbacks/search-evidence', {
28
+ q: input.query,
29
+ ...(input.limit != null ? { limit: String(input.limit) } : {}),
30
+ ...(input.budget ? { budget: input.budget } : {}),
31
+ ...(input.tags ? { tags: input.tags } : {}),
32
+ ...(input.tagsMatch ? { tagsMatch: input.tagsMatch } : {}),
33
+ });
34
+ }
35
+ export async function handleCallbackReflect(input) {
36
+ return callbackPost('/api/callbacks/reflect', { query: input.query });
37
+ }
38
+ export async function handleCallbackRetainMemory(input) {
39
+ return callbackPost('/api/callbacks/retain-memory', {
40
+ content: input.content,
41
+ ...(input.tags ? { tags: input.tags } : {}),
42
+ ...(input.metadata ? { metadata: input.metadata } : {}),
43
+ });
44
+ }
45
+ export const callbackMemoryTools = [
46
+ // D16: search_evidence_callback and reflect_callback removed — merged into
47
+ // the public search_evidence / reflect tools (route supports both auth modes).
48
+ {
49
+ name: 'office_claw_retain_memory_callback',
50
+ description: 'Retain a durable memory item through OfficeClaw callback endpoint. ' +
51
+ 'Use when you discover an important insight, decision, or lesson that should persist across sessions. ' +
52
+ 'Examples: architectural decisions made during discussion, gotchas discovered while debugging, ' +
53
+ 'cross-agent agreements. NOT for transient notes — only for knowledge worth remembering long-term. ' +
54
+ 'TIP: Add descriptive tags (e.g. ["redis", "pitfall"]) so future search_evidence queries can find it.',
55
+ inputSchema: callbackRetainMemoryInputSchema,
56
+ handler: handleCallbackRetainMemory,
57
+ },
58
+ ];
59
+ //# sourceMappingURL=callback-memory-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"callback-memory-tools.js","sourceRoot":"","sources":["../../src/tools/callback-memory-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface CallbackRequest {
2
+ apiUrl: string;
3
+ path: string;
4
+ body: Record<string, unknown>;
5
+ }
6
+ export declare function sendCallbackRequest(request: CallbackRequest, options?: {
7
+ enableOutbox?: boolean;
8
+ }): Promise<{
9
+ ok: true;
10
+ data: unknown;
11
+ } | {
12
+ ok: false;
13
+ error: string;
14
+ }>;
15
+ //# sourceMappingURL=callback-outbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"callback-outbox.d.ts","sourceRoot":"","sources":["../../src/tools/callback-outbox.ts"],"names":[],"mappings":"AA+BA,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AA0HD,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,eAAe,EACxB,OAAO,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GACnC,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA6BrE"}