@rolexjs/mcp-server 1.5.0-dev-20260317075835 → 1.6.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/dist/index.js CHANGED
@@ -3,13 +3,13 @@
3
3
  // src/index.ts
4
4
  import { localPlatform } from "@rolexjs/local-platform";
5
5
  import { FastMCP } from "fastmcp";
6
- import {
7
- createRoleX,
8
- renderProductResult,
9
- renderProjectResult
10
- } from "rolexjs";
6
+ import { createRoleX, detail, renderProjectResult } from "rolexjs";
11
7
  import { z } from "zod";
12
8
 
9
+ // src/instructions.ts
10
+ import { world } from "rolexjs";
11
+ var instructions = Object.values(world).join("\n\n");
12
+
13
13
  // src/state.ts
14
14
  var McpState = class {
15
15
  role = null;
@@ -20,176 +20,236 @@ var McpState = class {
20
20
  };
21
21
 
22
22
  // src/index.ts
23
- var rolex = createRoleX({
24
- platform: localPlatform()
25
- });
23
+ var rolex = await createRoleX(
24
+ localPlatform({
25
+ bootstrap: ["npm:@rolexjs/genesis"]
26
+ })
27
+ );
28
+ await rolex.genesis();
26
29
  var state = new McpState();
27
- function paramToZod(param, required) {
28
- let zodType;
29
- switch (param.type) {
30
- case "string":
31
- case "gherkin":
32
- zodType = z.string();
33
- break;
34
- case "string[]":
35
- zodType = z.array(z.string());
36
- break;
37
- case "number":
38
- zodType = z.number();
39
- break;
40
- case "record":
41
- zodType = z.record(z.unknown());
42
- break;
43
- default:
44
- zodType = z.unknown();
45
- }
46
- zodType = zodType.describe(param.description);
47
- if (!required) zodType = zodType.optional();
48
- return zodType;
49
- }
50
- function toZodSchema(def) {
51
- const shape = {};
52
- for (const [key, param] of Object.entries(def.params)) {
53
- shape[key] = paramToZod(param, param.required);
54
- }
55
- const schema = z.object(shape);
56
- return schema;
57
- }
58
- function parseArgs(args) {
59
- if (args == null) return void 0;
60
- if (typeof args === "object") return args;
61
- if (typeof args === "string") {
62
- try {
63
- const parsed = JSON.parse(args);
64
- if (typeof parsed === "object" && parsed !== null) {
65
- return parsed;
66
- }
67
- } catch {
68
- }
69
- }
70
- return void 0;
71
- }
72
- var executors = {
73
- async inspect({ id }) {
74
- return await rolex.inspect({ id });
75
- },
76
- async survey({ type }) {
77
- return await rolex.survey(type ? { type } : void 0);
78
- },
79
- async activate({ roleId }) {
30
+ var server = new FastMCP({
31
+ name: "rolex",
32
+ version: "0.12.0",
33
+ instructions
34
+ });
35
+ server.addTool({
36
+ name: "activate",
37
+ description: detail("activate"),
38
+ parameters: z.object({
39
+ roleId: z.string().describe("Role name to activate")
40
+ }),
41
+ execute: async ({ roleId }) => {
80
42
  try {
81
- const role = await rolex.individual.activate({ individual: roleId });
43
+ const role = await rolex.activate(roleId);
82
44
  state.role = role;
83
45
  return await role.project();
84
46
  } catch {
85
- const all = await rolex.survey();
47
+ const census = await rolex.direct("!census.list");
86
48
  throw new Error(
87
49
  `"${roleId}" not found. Available:
88
50
 
89
- ${JSON.stringify(all)}
51
+ ${census}
90
52
 
91
53
  Try again with the correct id or alias.`
92
54
  );
93
55
  }
94
- },
95
- async focus({ id }) {
56
+ }
57
+ });
58
+ server.addTool({
59
+ name: "focus",
60
+ description: detail("focus"),
61
+ parameters: z.object({
62
+ id: z.string().optional().describe("Goal id to switch to. Omit to view current.")
63
+ }),
64
+ execute: async ({ id }) => {
96
65
  return await state.requireRole().focus(id);
97
- },
98
- async want({ id, goal }) {
66
+ }
67
+ });
68
+ server.addTool({
69
+ name: "want",
70
+ description: detail("want"),
71
+ parameters: z.object({
72
+ id: z.string().describe("Goal id (used for focus/reference)"),
73
+ goal: z.string().describe("Gherkin Feature source describing the goal")
74
+ }),
75
+ execute: async ({ id, goal }) => {
99
76
  return await state.requireRole().want(goal, id);
100
- },
101
- async plan({ id, plan, after, fallback }) {
102
- return await state.requireRole().plan(
103
- plan,
104
- id,
105
- after,
106
- fallback
107
- );
108
- },
109
- async todo({ id, task }) {
77
+ }
78
+ });
79
+ server.addTool({
80
+ name: "plan",
81
+ description: detail("plan"),
82
+ parameters: z.object({
83
+ id: z.string().describe("Plan id \u2014 keywords from the plan content joined by hyphens"),
84
+ plan: z.string().describe("Gherkin Feature source describing the plan"),
85
+ after: z.string().optional().describe("Plan id this plan follows (sequential/phase relationship)"),
86
+ fallback: z.string().optional().describe("Plan id this plan is a backup for (alternative/strategy relationship)")
87
+ }),
88
+ execute: async ({ id, plan, after, fallback }) => {
89
+ return await state.requireRole().plan(plan, id, after, fallback);
90
+ }
91
+ });
92
+ server.addTool({
93
+ name: "todo",
94
+ description: detail("todo"),
95
+ parameters: z.object({
96
+ id: z.string().describe("Task id (used for finish/reference)"),
97
+ task: z.string().describe("Gherkin Feature source describing the task")
98
+ }),
99
+ execute: async ({ id, task }) => {
110
100
  return await state.requireRole().todo(task, id);
111
- },
112
- async finish({ id, encounter }) {
101
+ }
102
+ });
103
+ server.addTool({
104
+ name: "finish",
105
+ description: detail("finish"),
106
+ parameters: z.object({
107
+ id: z.string().describe("Task id to finish"),
108
+ encounter: z.string().optional().describe("Optional Gherkin Feature describing what happened")
109
+ }),
110
+ execute: async ({ id, encounter }) => {
113
111
  return await state.requireRole().finish(id, encounter);
114
- },
115
- async complete({ id, encounter }) {
112
+ }
113
+ });
114
+ server.addTool({
115
+ name: "complete",
116
+ description: detail("complete"),
117
+ parameters: z.object({
118
+ id: z.string().optional().describe("Plan id to complete (defaults to focused plan)"),
119
+ encounter: z.string().optional().describe("Optional Gherkin Feature describing what happened")
120
+ }),
121
+ execute: async ({ id, encounter }) => {
116
122
  return await state.requireRole().complete(id, encounter);
117
- },
118
- async abandon({ id, encounter }) {
123
+ }
124
+ });
125
+ server.addTool({
126
+ name: "abandon",
127
+ description: detail("abandon"),
128
+ parameters: z.object({
129
+ id: z.string().optional().describe("Plan id to abandon (defaults to focused plan)"),
130
+ encounter: z.string().optional().describe("Optional Gherkin Feature describing what happened")
131
+ }),
132
+ execute: async ({ id, encounter }) => {
119
133
  return await state.requireRole().abandon(id, encounter);
120
- },
121
- async reflect({ ids, id, experience }) {
134
+ }
135
+ });
136
+ server.addTool({
137
+ name: "reflect",
138
+ description: detail("reflect"),
139
+ parameters: z.object({
140
+ ids: z.array(z.string()).describe("Encounter ids to reflect on (selective consumption)"),
141
+ id: z.string().describe("Experience id \u2014 keywords from the experience content joined by hyphens"),
142
+ experience: z.string().optional().describe("Gherkin Feature source for the experience")
143
+ }),
144
+ execute: async ({ ids, id, experience }) => {
122
145
  return await state.requireRole().reflect(ids, experience, id);
123
- },
124
- async realize({ ids, id, principle }) {
146
+ }
147
+ });
148
+ server.addTool({
149
+ name: "realize",
150
+ description: detail("realize"),
151
+ parameters: z.object({
152
+ ids: z.array(z.string()).describe("Experience ids to distill into a principle"),
153
+ id: z.string().describe("Principle id \u2014 keywords from the principle content joined by hyphens"),
154
+ principle: z.string().optional().describe("Gherkin Feature source for the principle")
155
+ }),
156
+ execute: async ({ ids, id, principle }) => {
125
157
  return await state.requireRole().realize(ids, principle, id);
126
- },
127
- async master({ ids, id, procedure }) {
158
+ }
159
+ });
160
+ server.addTool({
161
+ name: "master",
162
+ description: detail("master"),
163
+ parameters: z.object({
164
+ ids: z.array(z.string()).optional().describe("Experience ids to distill into a procedure"),
165
+ id: z.string().describe("Procedure id \u2014 keywords from the procedure content joined by hyphens"),
166
+ procedure: z.string().describe("Gherkin Feature source for the procedure")
167
+ }),
168
+ execute: async ({ ids, id, procedure }) => {
128
169
  return await state.requireRole().master(procedure, id, ids);
129
- },
130
- async forget({ id }) {
170
+ }
171
+ });
172
+ server.addTool({
173
+ name: "forget",
174
+ description: detail("forget"),
175
+ parameters: z.object({
176
+ id: z.string().describe("Id of the node to remove (principle, procedure, experience, encounter, etc.)")
177
+ }),
178
+ execute: async ({ id }) => {
131
179
  return await state.requireRole().forget(id);
132
- },
133
- async skill({ locator }) {
180
+ }
181
+ });
182
+ server.addTool({
183
+ name: "skill",
184
+ description: detail("skill"),
185
+ parameters: z.object({
186
+ locator: z.string().describe("ResourceX locator for the skill (e.g. deepractice/role-management)")
187
+ }),
188
+ execute: async ({ locator }) => {
134
189
  return await state.requireRole().skill(locator);
135
- },
136
- async use({ command, args }) {
137
- const a = parseArgs(args);
138
- const result = await state.requireRole().use(command, a && Object.keys(a).length > 0 ? a : void 0);
139
- if (result == null) return `${command} done.`;
190
+ }
191
+ });
192
+ server.addTool({
193
+ name: "use",
194
+ description: detail("use"),
195
+ parameters: z.object({
196
+ locator: z.string().describe(
197
+ "Locator string. !namespace.method for RoleX commands, or a ResourceX locator for resources"
198
+ ),
199
+ args: z.record(z.unknown()).optional().describe("Named arguments for the command or resource")
200
+ }),
201
+ execute: async ({ locator, args }) => {
202
+ const result = await state.requireRole().use(locator, args);
203
+ if (result == null) return `${locator} done.`;
140
204
  if (typeof result === "string") return result;
141
205
  return JSON.stringify(result, null, 2);
142
- },
143
- async direct({ command, args }) {
144
- const a = parseArgs(args);
145
- const method = command.startsWith("!") ? command.slice(1) : command;
146
- const response = await rolex.rpc({
147
- jsonrpc: "2.0",
148
- method,
149
- params: a && Object.keys(a).length > 0 ? a : void 0,
150
- id: null
151
- });
152
- if (response.error) throw new Error(response.error.message);
153
- const result = response.result;
154
- if (result == null) return `${command} done.`;
206
+ }
207
+ });
208
+ server.addTool({
209
+ name: "direct",
210
+ description: detail("direct"),
211
+ parameters: z.object({
212
+ locator: z.string().describe(
213
+ "Locator string. !namespace.method for RoleX commands, or a ResourceX locator for resources"
214
+ ),
215
+ args: z.record(z.unknown()).optional().describe("Named arguments for the command or resource")
216
+ }),
217
+ execute: async ({ locator, args }) => {
218
+ const result = await rolex.direct(locator, args);
219
+ if (result == null) return `${locator} done.`;
155
220
  if (typeof result === "string") return result;
156
- if (method === "project.produce") {
157
- const opResult = result;
158
- return renderProductResult("produce", opResult.state);
159
- }
160
- if (method.startsWith("project.")) {
161
- const action = method.slice("project.".length);
221
+ if (locator.startsWith("!project.")) {
222
+ const action = locator.slice("!project.".length);
162
223
  const opResult = result;
163
224
  return renderProjectResult(action, opResult.state);
164
225
  }
165
- if (method.startsWith("product.")) {
166
- const action = method.slice("product.".length);
167
- const opResult = result;
168
- return renderProductResult(action, opResult.state);
169
- }
170
226
  return JSON.stringify(result, null, 2);
171
227
  }
172
- };
173
- var { protocol } = rolex;
174
- var server = new FastMCP({
175
- name: "rolex",
176
- version: "0.12.0",
177
- instructions: protocol.instructions
178
- });
179
- for (const toolDef of protocol.tools) {
180
- const executor = executors[toolDef.name];
181
- if (!executor) {
182
- throw new Error(`No executor for tool "${toolDef.name}"`);
183
- }
184
- server.addTool({
185
- name: toolDef.name,
186
- description: toolDef.description,
187
- parameters: toZodSchema(toolDef),
188
- execute: async (params) => {
189
- return await executor(params);
190
- }
191
- });
192
- }
228
+ });
229
+ server.addResource({
230
+ uri: "rolex://noop",
231
+ name: "_noop",
232
+ description: "",
233
+ async load() {
234
+ return { text: "" };
235
+ }
236
+ });
237
+ server.addResourceTemplate({
238
+ uriTemplate: "rolex://noop/{id}",
239
+ name: "_noop_tpl",
240
+ description: "",
241
+ arguments: [{ name: "id", description: "", required: false }],
242
+ async load() {
243
+ return { text: "" };
244
+ }
245
+ });
246
+ server.addPrompt({
247
+ name: "_noop",
248
+ description: "",
249
+ async load() {
250
+ return "";
251
+ }
252
+ });
193
253
  server.start({
194
254
  transportType: "stdio"
195
255
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/state.ts"],"sourcesContent":["/**\n * @rolexjs/mcp-server — individual-level MCP tools.\n *\n * Pure pass-through: all rendering happens in rolexjs.\n * MCP only translates protocol calls to API calls.\n *\n * Tool schemas are defined once in @rolexjs/core (tools)\n * and converted to Zod here for FastMCP registration.\n */\n\nimport { localPlatform } from \"@rolexjs/local-platform\";\nimport { FastMCP } from \"fastmcp\";\nimport {\n createRoleX,\n type ParamDef,\n type ProductAction,\n type ProjectAction,\n renderProductResult,\n renderProjectResult,\n type State,\n type ToolDef,\n} from \"rolexjs\";\n\nimport { z } from \"zod\";\nimport { McpState } from \"./state.js\";\n\n// ========== Setup ==========\n\nconst rolex = createRoleX({\n platform: localPlatform(),\n});\nconst state = new McpState();\n\n// ========== Zod conversion ==========\n\nfunction paramToZod(param: ParamDef, required: boolean): z.ZodTypeAny {\n let zodType: z.ZodTypeAny;\n switch (param.type) {\n case \"string\":\n case \"gherkin\":\n zodType = z.string();\n break;\n case \"string[]\":\n zodType = z.array(z.string());\n break;\n case \"number\":\n zodType = z.number();\n break;\n case \"record\":\n zodType = z.record(z.unknown());\n break;\n default:\n zodType = z.unknown();\n }\n zodType = zodType.describe(param.description);\n if (!required) zodType = zodType.optional();\n return zodType;\n}\n\nfunction toZodSchema(def: ToolDef): z.ZodTypeAny {\n const shape: Record<string, z.ZodTypeAny> = {};\n for (const [key, param] of Object.entries(def.params)) {\n shape[key] = paramToZod(param, param.required);\n }\n const schema = z.object(shape);\n return schema;\n}\n\n// ========== Tool execution ==========\n\n/** Defensive args parsing — some AI models serialize args as a JSON string instead of an object. */\nfunction parseArgs(args: unknown): Record<string, unknown> | undefined {\n if (args == null) return undefined;\n if (typeof args === \"object\") return args as Record<string, unknown>;\n if (typeof args === \"string\") {\n try {\n const parsed = JSON.parse(args);\n if (typeof parsed === \"object\" && parsed !== null) {\n return parsed as Record<string, unknown>;\n }\n } catch {\n // not valid JSON, ignore\n }\n }\n return undefined;\n}\n\ntype ToolExecutor = (params: Record<string, unknown>) => Promise<string>;\n\nconst executors: Record<string, ToolExecutor> = {\n async inspect({ id }) {\n return (await rolex.inspect({ id: id as string })) as string;\n },\n\n async survey({ type }) {\n return (await rolex.survey(type ? { type: type as string } : undefined)) as string;\n },\n\n async activate({ roleId }) {\n try {\n const role = await rolex.individual.activate({ individual: roleId as string });\n state.role = role;\n return await role.project();\n } catch {\n const all = await rolex.survey();\n throw new Error(\n `\"${roleId}\" not found. Available:\\n\\n${JSON.stringify(all)}\\n\\nTry again with the correct id or alias.`\n );\n }\n },\n\n async focus({ id }) {\n return await state.requireRole().focus(id as string | undefined);\n },\n\n async want({ id, goal }) {\n return await state.requireRole().want(goal as string, id as string);\n },\n\n async plan({ id, plan, after, fallback }) {\n return await state\n .requireRole()\n .plan(\n plan as string,\n id as string,\n after as string | undefined,\n fallback as string | undefined\n );\n },\n\n async todo({ id, task }) {\n return await state.requireRole().todo(task as string, id as string);\n },\n\n async finish({ id, encounter }) {\n return await state.requireRole().finish(id as string, encounter as string | undefined);\n },\n\n async complete({ id, encounter }) {\n return await state\n .requireRole()\n .complete(id as string | undefined, encounter as string | undefined);\n },\n\n async abandon({ id, encounter }) {\n return await state\n .requireRole()\n .abandon(id as string | undefined, encounter as string | undefined);\n },\n\n async reflect({ ids, id, experience }) {\n return await state\n .requireRole()\n .reflect(ids as string[], experience as string | undefined, id as string);\n },\n\n async realize({ ids, id, principle }) {\n return await state\n .requireRole()\n .realize(ids as string[], principle as string | undefined, id as string);\n },\n\n async master({ ids, id, procedure }) {\n return await state\n .requireRole()\n .master(procedure as string, id as string, ids as string[] | undefined);\n },\n\n async forget({ id }) {\n return await state.requireRole().forget(id as string);\n },\n\n async skill({ locator }) {\n return await state.requireRole().skill(locator as string);\n },\n\n async use({ command, args }) {\n const a = parseArgs(args);\n const result = await state\n .requireRole()\n .use(command as string, a && Object.keys(a).length > 0 ? a : undefined);\n if (result == null) return `${command} done.`;\n if (typeof result === \"string\") return result;\n return JSON.stringify(result, null, 2);\n },\n\n async direct({ command, args }) {\n const a = parseArgs(args);\n // Strip \"!\" prefix for JSON-RPC method name\n const method = (command as string).startsWith(\"!\")\n ? (command as string).slice(1)\n : (command as string);\n const response = await rolex.rpc({\n jsonrpc: \"2.0\",\n method,\n params: a && Object.keys(a).length > 0 ? a : undefined,\n id: null,\n });\n if (response.error) throw new Error(response.error.message);\n const result = response.result;\n if (result == null) return `${command} done.`;\n if (typeof result === \"string\") return result;\n if (method === \"project.produce\") {\n const opResult = result as { state: State };\n return renderProductResult(\"produce\" as ProductAction, opResult.state);\n }\n if (method.startsWith(\"project.\")) {\n const action = method.slice(\"project.\".length) as ProjectAction;\n const opResult = result as { state: State };\n return renderProjectResult(action, opResult.state);\n }\n if (method.startsWith(\"product.\")) {\n const action = method.slice(\"product.\".length) as ProductAction;\n const opResult = result as { state: State };\n return renderProductResult(action, opResult.state);\n }\n return JSON.stringify(result, null, 2);\n },\n};\n\n// ========== Server ==========\n\nconst { protocol } = rolex;\n\nconst server = new FastMCP({\n name: \"rolex\",\n version: \"0.12.0\",\n instructions: protocol.instructions,\n});\n\n// Register all tools from unified schema\nfor (const toolDef of protocol.tools) {\n const executor = executors[toolDef.name];\n if (!executor) {\n throw new Error(`No executor for tool \"${toolDef.name}\"`);\n }\n\n server.addTool({\n name: toolDef.name,\n description: toolDef.description,\n parameters: toZodSchema(toolDef),\n execute: async (params) => {\n return await executor(params as Record<string, unknown>);\n },\n });\n}\n\n// ========== Start ==========\n\nserver.start({\n transportType: \"stdio\",\n});\n","/**\n * McpState — thin session holder for the MCP server.\n *\n * Holds the active Role handle. All business logic (state tracking,\n * cognitive hints, encounter/experience registries) lives in Role + RoleContext.\n */\nimport type { Role } from \"rolexjs\";\n\nexport class McpState {\n role: Role | null = null;\n\n requireRole(): Role {\n if (!this.role) throw new Error(\"No active role. Call activate first.\");\n return this.role;\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/instructions.ts","../src/state.ts"],"sourcesContent":["/**\n * @rolexjs/mcp-server — individual-level MCP tools.\n *\n * Pure pass-through: all rendering happens in rolexjs.\n * MCP only translates protocol calls to API calls.\n */\n\nimport { localPlatform } from \"@rolexjs/local-platform\";\nimport { FastMCP } from \"fastmcp\";\nimport { createRoleX, detail, type ProjectAction, renderProjectResult, type State } from \"rolexjs\";\n\nimport { z } from \"zod\";\nimport { instructions } from \"./instructions.js\";\nimport { McpState } from \"./state.js\";\n\n// ========== Setup ==========\n\nconst rolex = await createRoleX(\n localPlatform({\n bootstrap: [\"npm:@rolexjs/genesis\"],\n })\n);\nawait rolex.genesis();\nconst state = new McpState();\n\n// ========== Server ==========\n\nconst server = new FastMCP({\n name: \"rolex\",\n version: \"0.12.0\",\n instructions,\n});\n\n// ========== Tools: Role ==========\n\nserver.addTool({\n name: \"activate\",\n description: detail(\"activate\"),\n parameters: z.object({\n roleId: z.string().describe(\"Role name to activate\"),\n }),\n execute: async ({ roleId }) => {\n try {\n const role = await rolex.activate(roleId);\n state.role = role;\n return await role.project();\n } catch {\n const census = await rolex.direct<string>(\"!census.list\");\n throw new Error(\n `\"${roleId}\" not found. Available:\\n\\n${census}\\n\\nTry again with the correct id or alias.`\n );\n }\n },\n});\n\nserver.addTool({\n name: \"focus\",\n description: detail(\"focus\"),\n parameters: z.object({\n id: z.string().optional().describe(\"Goal id to switch to. Omit to view current.\"),\n }),\n execute: async ({ id }) => {\n return await state.requireRole().focus(id);\n },\n});\n\n// ========== Tools: Execution ==========\n\nserver.addTool({\n name: \"want\",\n description: detail(\"want\"),\n parameters: z.object({\n id: z.string().describe(\"Goal id (used for focus/reference)\"),\n goal: z.string().describe(\"Gherkin Feature source describing the goal\"),\n }),\n execute: async ({ id, goal }) => {\n return await state.requireRole().want(goal, id);\n },\n});\n\nserver.addTool({\n name: \"plan\",\n description: detail(\"plan\"),\n parameters: z.object({\n id: z.string().describe(\"Plan id — keywords from the plan content joined by hyphens\"),\n plan: z.string().describe(\"Gherkin Feature source describing the plan\"),\n after: z\n .string()\n .optional()\n .describe(\"Plan id this plan follows (sequential/phase relationship)\"),\n fallback: z\n .string()\n .optional()\n .describe(\"Plan id this plan is a backup for (alternative/strategy relationship)\"),\n }),\n execute: async ({ id, plan, after, fallback }) => {\n return await state.requireRole().plan(plan, id, after, fallback);\n },\n});\n\nserver.addTool({\n name: \"todo\",\n description: detail(\"todo\"),\n parameters: z.object({\n id: z.string().describe(\"Task id (used for finish/reference)\"),\n task: z.string().describe(\"Gherkin Feature source describing the task\"),\n }),\n execute: async ({ id, task }) => {\n return await state.requireRole().todo(task, id);\n },\n});\n\nserver.addTool({\n name: \"finish\",\n description: detail(\"finish\"),\n parameters: z.object({\n id: z.string().describe(\"Task id to finish\"),\n encounter: z.string().optional().describe(\"Optional Gherkin Feature describing what happened\"),\n }),\n execute: async ({ id, encounter }) => {\n return await state.requireRole().finish(id, encounter);\n },\n});\n\nserver.addTool({\n name: \"complete\",\n description: detail(\"complete\"),\n parameters: z.object({\n id: z.string().optional().describe(\"Plan id to complete (defaults to focused plan)\"),\n encounter: z.string().optional().describe(\"Optional Gherkin Feature describing what happened\"),\n }),\n execute: async ({ id, encounter }) => {\n return await state.requireRole().complete(id, encounter);\n },\n});\n\nserver.addTool({\n name: \"abandon\",\n description: detail(\"abandon\"),\n parameters: z.object({\n id: z.string().optional().describe(\"Plan id to abandon (defaults to focused plan)\"),\n encounter: z.string().optional().describe(\"Optional Gherkin Feature describing what happened\"),\n }),\n execute: async ({ id, encounter }) => {\n return await state.requireRole().abandon(id, encounter);\n },\n});\n\n// ========== Tools: Cognition ==========\n\nserver.addTool({\n name: \"reflect\",\n description: detail(\"reflect\"),\n parameters: z.object({\n ids: z.array(z.string()).describe(\"Encounter ids to reflect on (selective consumption)\"),\n id: z\n .string()\n .describe(\"Experience id — keywords from the experience content joined by hyphens\"),\n experience: z.string().optional().describe(\"Gherkin Feature source for the experience\"),\n }),\n execute: async ({ ids, id, experience }) => {\n return await state.requireRole().reflect(ids, experience, id);\n },\n});\n\nserver.addTool({\n name: \"realize\",\n description: detail(\"realize\"),\n parameters: z.object({\n ids: z.array(z.string()).describe(\"Experience ids to distill into a principle\"),\n id: z.string().describe(\"Principle id — keywords from the principle content joined by hyphens\"),\n principle: z.string().optional().describe(\"Gherkin Feature source for the principle\"),\n }),\n execute: async ({ ids, id, principle }) => {\n return await state.requireRole().realize(ids, principle, id);\n },\n});\n\nserver.addTool({\n name: \"master\",\n description: detail(\"master\"),\n parameters: z.object({\n ids: z.array(z.string()).optional().describe(\"Experience ids to distill into a procedure\"),\n id: z.string().describe(\"Procedure id — keywords from the procedure content joined by hyphens\"),\n procedure: z.string().describe(\"Gherkin Feature source for the procedure\"),\n }),\n execute: async ({ ids, id, procedure }) => {\n return await state.requireRole().master(procedure, id, ids);\n },\n});\n\n// ========== Tools: Knowledge management ==========\n\nserver.addTool({\n name: \"forget\",\n description: detail(\"forget\"),\n parameters: z.object({\n id: z\n .string()\n .describe(\"Id of the node to remove (principle, procedure, experience, encounter, etc.)\"),\n }),\n execute: async ({ id }) => {\n return await state.requireRole().forget(id);\n },\n});\n\n// ========== Tools: Skill loading ==========\n\nserver.addTool({\n name: \"skill\",\n description: detail(\"skill\"),\n parameters: z.object({\n locator: z\n .string()\n .describe(\"ResourceX locator for the skill (e.g. deepractice/role-management)\"),\n }),\n execute: async ({ locator }) => {\n return await state.requireRole().skill(locator);\n },\n});\n\n// ========== Tools: Use ==========\n\nserver.addTool({\n name: \"use\",\n description: detail(\"use\"),\n parameters: z.object({\n locator: z\n .string()\n .describe(\n \"Locator string. !namespace.method for RoleX commands, or a ResourceX locator for resources\"\n ),\n args: z.record(z.unknown()).optional().describe(\"Named arguments for the command or resource\"),\n }),\n execute: async ({ locator, args }) => {\n const result = await state.requireRole().use(locator, args);\n if (result == null) return `${locator} done.`;\n if (typeof result === \"string\") return result;\n return JSON.stringify(result, null, 2);\n },\n});\n\n// ========== Tools: Direct ==========\n\nserver.addTool({\n name: \"direct\",\n description: detail(\"direct\"),\n parameters: z.object({\n locator: z\n .string()\n .describe(\n \"Locator string. !namespace.method for RoleX commands, or a ResourceX locator for resources\"\n ),\n args: z.record(z.unknown()).optional().describe(\"Named arguments for the command or resource\"),\n }),\n execute: async ({ locator, args }) => {\n const result = await rolex.direct(locator, args);\n if (result == null) return `${locator} done.`;\n if (typeof result === \"string\") return result;\n // Render project results as readable text\n if (locator.startsWith(\"!project.\")) {\n const action = locator.slice(\"!project.\".length) as ProjectAction;\n const opResult = result as { state: State };\n return renderProjectResult(action, opResult.state);\n }\n return JSON.stringify(result, null, 2);\n },\n});\n\n// ========== Compatibility: declare empty resources/prompts capabilities ==========\n// Some MCP clients (e.g. Antigravity) probe resources/list and prompts/list\n// after initialize. FastMCP only declares these capabilities when items exist.\n// Register a dummy resource then remove it — forces capability declaration.\n\nserver.addResource({\n uri: \"rolex://noop\",\n name: \"_noop\",\n description: \"\",\n async load() {\n return { text: \"\" };\n },\n});\n\nserver.addResourceTemplate({\n uriTemplate: \"rolex://noop/{id}\",\n name: \"_noop_tpl\",\n description: \"\",\n arguments: [{ name: \"id\", description: \"\", required: false }],\n async load() {\n return { text: \"\" };\n },\n});\n\nserver.addPrompt({\n name: \"_noop\",\n description: \"\",\n async load() {\n return \"\";\n },\n});\n\n// ========== Start ==========\n\nserver.start({\n transportType: \"stdio\",\n});\n","/**\n * MCP server instructions — the cognitive framework for AI roles.\n *\n * Assembled from world .feature files in rolexjs descriptions.\n * Each feature describes one independent concern of the RoleX framework.\n */\nimport { world } from \"rolexjs\";\n\nexport const instructions = Object.values(world).join(\"\\n\\n\");\n","/**\n * McpState — thin session holder for the MCP server.\n *\n * Holds the active Role handle. All business logic (state tracking,\n * cognitive hints, encounter/experience registries) lives in Role + RoleContext.\n */\nimport type { Role } from \"rolexjs\";\n\nexport class McpState {\n role: Role | null = null;\n\n requireRole(): Role {\n if (!this.role) throw new Error(\"No active role. Call activate first.\");\n return this.role;\n }\n}\n"],"mappings":";;;AAOA,SAAS,qBAAqB;AAC9B,SAAS,eAAe;AACxB,SAAS,aAAa,QAA4B,2BAAuC;AAEzF,SAAS,SAAS;;;ACLlB,SAAS,aAAa;AAEf,IAAM,eAAe,OAAO,OAAO,KAAK,EAAE,KAAK,MAAM;;;ACArD,IAAM,WAAN,MAAe;AAAA,EACpB,OAAoB;AAAA,EAEpB,cAAoB;AAClB,QAAI,CAAC,KAAK,KAAM,OAAM,IAAI,MAAM,sCAAsC;AACtE,WAAO,KAAK;AAAA,EACd;AACF;;;AFEA,IAAM,QAAQ,MAAM;AAAA,EAClB,cAAc;AAAA,IACZ,WAAW,CAAC,sBAAsB;AAAA,EACpC,CAAC;AACH;AACA,MAAM,MAAM,QAAQ;AACpB,IAAM,QAAQ,IAAI,SAAS;AAI3B,IAAM,SAAS,IAAI,QAAQ;AAAA,EACzB,MAAM;AAAA,EACN,SAAS;AAAA,EACT;AACF,CAAC;AAID,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,UAAU;AAAA,EAC9B,YAAY,EAAE,OAAO;AAAA,IACnB,QAAQ,EAAE,OAAO,EAAE,SAAS,uBAAuB;AAAA,EACrD,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,OAAO,MAAM;AAC7B,QAAI;AACF,YAAM,OAAO,MAAM,MAAM,SAAS,MAAM;AACxC,YAAM,OAAO;AACb,aAAO,MAAM,KAAK,QAAQ;AAAA,IAC5B,QAAQ;AACN,YAAM,SAAS,MAAM,MAAM,OAAe,cAAc;AACxD,YAAM,IAAI;AAAA,QACR,IAAI,MAAM;AAAA;AAAA,EAA8B,MAAM;AAAA;AAAA;AAAA,MAChD;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAED,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,OAAO;AAAA,EAC3B,YAAY,EAAE,OAAO;AAAA,IACnB,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,6CAA6C;AAAA,EAClF,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,GAAG,MAAM;AACzB,WAAO,MAAM,MAAM,YAAY,EAAE,MAAM,EAAE;AAAA,EAC3C;AACF,CAAC;AAID,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,MAAM;AAAA,EAC1B,YAAY,EAAE,OAAO;AAAA,IACnB,IAAI,EAAE,OAAO,EAAE,SAAS,oCAAoC;AAAA,IAC5D,MAAM,EAAE,OAAO,EAAE,SAAS,4CAA4C;AAAA,EACxE,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,IAAI,KAAK,MAAM;AAC/B,WAAO,MAAM,MAAM,YAAY,EAAE,KAAK,MAAM,EAAE;AAAA,EAChD;AACF,CAAC;AAED,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,MAAM;AAAA,EAC1B,YAAY,EAAE,OAAO;AAAA,IACnB,IAAI,EAAE,OAAO,EAAE,SAAS,iEAA4D;AAAA,IACpF,MAAM,EAAE,OAAO,EAAE,SAAS,4CAA4C;AAAA,IACtE,OAAO,EACJ,OAAO,EACP,SAAS,EACT,SAAS,2DAA2D;AAAA,IACvE,UAAU,EACP,OAAO,EACP,SAAS,EACT,SAAS,uEAAuE;AAAA,EACrF,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,IAAI,MAAM,OAAO,SAAS,MAAM;AAChD,WAAO,MAAM,MAAM,YAAY,EAAE,KAAK,MAAM,IAAI,OAAO,QAAQ;AAAA,EACjE;AACF,CAAC;AAED,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,MAAM;AAAA,EAC1B,YAAY,EAAE,OAAO;AAAA,IACnB,IAAI,EAAE,OAAO,EAAE,SAAS,qCAAqC;AAAA,IAC7D,MAAM,EAAE,OAAO,EAAE,SAAS,4CAA4C;AAAA,EACxE,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,IAAI,KAAK,MAAM;AAC/B,WAAO,MAAM,MAAM,YAAY,EAAE,KAAK,MAAM,EAAE;AAAA,EAChD;AACF,CAAC;AAED,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,QAAQ;AAAA,EAC5B,YAAY,EAAE,OAAO;AAAA,IACnB,IAAI,EAAE,OAAO,EAAE,SAAS,mBAAmB;AAAA,IAC3C,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mDAAmD;AAAA,EAC/F,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,IAAI,UAAU,MAAM;AACpC,WAAO,MAAM,MAAM,YAAY,EAAE,OAAO,IAAI,SAAS;AAAA,EACvD;AACF,CAAC;AAED,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,UAAU;AAAA,EAC9B,YAAY,EAAE,OAAO;AAAA,IACnB,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gDAAgD;AAAA,IACnF,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mDAAmD;AAAA,EAC/F,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,IAAI,UAAU,MAAM;AACpC,WAAO,MAAM,MAAM,YAAY,EAAE,SAAS,IAAI,SAAS;AAAA,EACzD;AACF,CAAC;AAED,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,SAAS;AAAA,EAC7B,YAAY,EAAE,OAAO;AAAA,IACnB,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,+CAA+C;AAAA,IAClF,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mDAAmD;AAAA,EAC/F,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,IAAI,UAAU,MAAM;AACpC,WAAO,MAAM,MAAM,YAAY,EAAE,QAAQ,IAAI,SAAS;AAAA,EACxD;AACF,CAAC;AAID,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,SAAS;AAAA,EAC7B,YAAY,EAAE,OAAO;AAAA,IACnB,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,qDAAqD;AAAA,IACvF,IAAI,EACD,OAAO,EACP,SAAS,6EAAwE;AAAA,IACpF,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,2CAA2C;AAAA,EACxF,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,KAAK,IAAI,WAAW,MAAM;AAC1C,WAAO,MAAM,MAAM,YAAY,EAAE,QAAQ,KAAK,YAAY,EAAE;AAAA,EAC9D;AACF,CAAC;AAED,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,SAAS;AAAA,EAC7B,YAAY,EAAE,OAAO;AAAA,IACnB,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,4CAA4C;AAAA,IAC9E,IAAI,EAAE,OAAO,EAAE,SAAS,2EAAsE;AAAA,IAC9F,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,0CAA0C;AAAA,EACtF,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,KAAK,IAAI,UAAU,MAAM;AACzC,WAAO,MAAM,MAAM,YAAY,EAAE,QAAQ,KAAK,WAAW,EAAE;AAAA,EAC7D;AACF,CAAC;AAED,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,QAAQ;AAAA,EAC5B,YAAY,EAAE,OAAO;AAAA,IACnB,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,4CAA4C;AAAA,IACzF,IAAI,EAAE,OAAO,EAAE,SAAS,2EAAsE;AAAA,IAC9F,WAAW,EAAE,OAAO,EAAE,SAAS,0CAA0C;AAAA,EAC3E,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,KAAK,IAAI,UAAU,MAAM;AACzC,WAAO,MAAM,MAAM,YAAY,EAAE,OAAO,WAAW,IAAI,GAAG;AAAA,EAC5D;AACF,CAAC;AAID,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,QAAQ;AAAA,EAC5B,YAAY,EAAE,OAAO;AAAA,IACnB,IAAI,EACD,OAAO,EACP,SAAS,8EAA8E;AAAA,EAC5F,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,GAAG,MAAM;AACzB,WAAO,MAAM,MAAM,YAAY,EAAE,OAAO,EAAE;AAAA,EAC5C;AACF,CAAC;AAID,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,OAAO;AAAA,EAC3B,YAAY,EAAE,OAAO;AAAA,IACnB,SAAS,EACN,OAAO,EACP,SAAS,oEAAoE;AAAA,EAClF,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,QAAQ,MAAM;AAC9B,WAAO,MAAM,MAAM,YAAY,EAAE,MAAM,OAAO;AAAA,EAChD;AACF,CAAC;AAID,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,KAAK;AAAA,EACzB,YAAY,EAAE,OAAO;AAAA,IACnB,SAAS,EACN,OAAO,EACP;AAAA,MACC;AAAA,IACF;AAAA,IACF,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS,6CAA6C;AAAA,EAC/F,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,SAAS,KAAK,MAAM;AACpC,UAAM,SAAS,MAAM,MAAM,YAAY,EAAE,IAAI,SAAS,IAAI;AAC1D,QAAI,UAAU,KAAM,QAAO,GAAG,OAAO;AACrC,QAAI,OAAO,WAAW,SAAU,QAAO;AACvC,WAAO,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,EACvC;AACF,CAAC;AAID,OAAO,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,aAAa,OAAO,QAAQ;AAAA,EAC5B,YAAY,EAAE,OAAO;AAAA,IACnB,SAAS,EACN,OAAO,EACP;AAAA,MACC;AAAA,IACF;AAAA,IACF,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS,6CAA6C;AAAA,EAC/F,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,SAAS,KAAK,MAAM;AACpC,UAAM,SAAS,MAAM,MAAM,OAAO,SAAS,IAAI;AAC/C,QAAI,UAAU,KAAM,QAAO,GAAG,OAAO;AACrC,QAAI,OAAO,WAAW,SAAU,QAAO;AAEvC,QAAI,QAAQ,WAAW,WAAW,GAAG;AACnC,YAAM,SAAS,QAAQ,MAAM,YAAY,MAAM;AAC/C,YAAM,WAAW;AACjB,aAAO,oBAAoB,QAAQ,SAAS,KAAK;AAAA,IACnD;AACA,WAAO,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,EACvC;AACF,CAAC;AAOD,OAAO,YAAY;AAAA,EACjB,KAAK;AAAA,EACL,MAAM;AAAA,EACN,aAAa;AAAA,EACb,MAAM,OAAO;AACX,WAAO,EAAE,MAAM,GAAG;AAAA,EACpB;AACF,CAAC;AAED,OAAO,oBAAoB;AAAA,EACzB,aAAa;AAAA,EACb,MAAM;AAAA,EACN,aAAa;AAAA,EACb,WAAW,CAAC,EAAE,MAAM,MAAM,aAAa,IAAI,UAAU,MAAM,CAAC;AAAA,EAC5D,MAAM,OAAO;AACX,WAAO,EAAE,MAAM,GAAG;AAAA,EACpB;AACF,CAAC;AAED,OAAO,UAAU;AAAA,EACf,MAAM;AAAA,EACN,aAAa;AAAA,EACb,MAAM,OAAO;AACX,WAAO;AAAA,EACT;AACF,CAAC;AAID,OAAO,MAAM;AAAA,EACX,eAAe;AACjB,CAAC;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rolexjs/mcp-server",
3
- "version": "1.5.0-dev-20260317075835",
3
+ "version": "1.6.1",
4
4
  "description": "MCP server for Rolex — expose RDD role management as MCP tools",
5
5
  "keywords": [
6
6
  "rolex",
@@ -41,9 +41,10 @@
41
41
  "clean": "rm -rf dist"
42
42
  },
43
43
  "dependencies": {
44
- "rolexjs": "1.5.0-dev-20260317075835",
45
- "@rolexjs/local-platform": "1.5.0-dev-20260317075835",
46
- "fastmcp": "^3.0.0",
44
+ "@rolexjs/genesis": "~1.6.1",
45
+ "@rolexjs/local-platform": "~1.6.1",
46
+ "fastmcp": "^3.34.0",
47
+ "rolexjs": "~1.6.1",
47
48
  "zod": "^3.25.0"
48
49
  },
49
50
  "devDependencies": {