@rolexjs/mcp-server 1.1.0 → 1.2.0

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,7 +3,7 @@
3
3
  // src/index.ts
4
4
  import { localPlatform } from "@rolexjs/local-platform";
5
5
  import { FastMCP } from "fastmcp";
6
- import { createRoleX, detail } from "rolexjs";
6
+ import { createRoleX, detail, renderProjectResult } from "rolexjs";
7
7
  import { z } from "zod";
8
8
 
9
9
  // src/instructions.ts
@@ -218,6 +218,11 @@ server.addTool({
218
218
  const result = await rolex.direct(locator, args);
219
219
  if (result == null) return `${locator} done.`;
220
220
  if (typeof result === "string") return result;
221
+ if (locator.startsWith("!project.")) {
222
+ const action = locator.slice("!project.".length);
223
+ const opResult = result;
224
+ return renderProjectResult(action, opResult.state);
225
+ }
221
226
  return JSON.stringify(result, null, 2);
222
227
  }
223
228
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
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 } 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 return JSON.stringify(result, null, 2);\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":"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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// ========== 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;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.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "MCP server for Rolex — expose RDD role management as MCP tools",
5
5
  "keywords": [
6
6
  "rolex",
@@ -41,9 +41,9 @@
41
41
  "clean": "rm -rf dist"
42
42
  },
43
43
  "dependencies": {
44
- "rolexjs": "^1.1.0",
45
- "@rolexjs/local-platform": "^1.1.0",
46
- "@rolexjs/genesis": "^1.1.0",
44
+ "rolexjs": "^1.2.0",
45
+ "@rolexjs/local-platform": "^1.2.0",
46
+ "@rolexjs/genesis": "^1.2.0",
47
47
  "fastmcp": "^3.0.0",
48
48
  "zod": "^3.25.0"
49
49
  },