@sensigo/realm-mcp 0.45.0 → 0.46.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.
Files changed (69) hide show
  1. package/dist/bin-identity.d.ts +11 -0
  2. package/dist/bin-identity.d.ts.map +1 -0
  3. package/dist/bin-identity.js +47 -0
  4. package/dist/bin-identity.js.map +1 -0
  5. package/dist/brand.d.ts +3 -0
  6. package/dist/brand.d.ts.map +1 -0
  7. package/dist/brand.js +7 -0
  8. package/dist/brand.js.map +1 -0
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +1 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/json-trace-buffer-store.d.ts +44 -31
  14. package/dist/json-trace-buffer-store.d.ts.map +1 -1
  15. package/dist/json-trace-buffer-store.js +72 -49
  16. package/dist/json-trace-buffer-store.js.map +1 -1
  17. package/dist/protocol/generator.js +2 -2
  18. package/dist/protocol/generator.js.map +1 -1
  19. package/dist/server.d.ts +13 -2
  20. package/dist/server.d.ts.map +1 -1
  21. package/dist/server.js +30 -4
  22. package/dist/server.js.map +1 -1
  23. package/dist/test-support/declared.d.ts +2 -0
  24. package/dist/test-support/declared.d.ts.map +1 -0
  25. package/dist/test-support/declared.js +9 -0
  26. package/dist/test-support/declared.js.map +1 -0
  27. package/dist/tools/abandon-run.d.ts.map +1 -1
  28. package/dist/tools/abandon-run.js +2 -0
  29. package/dist/tools/abandon-run.js.map +1 -1
  30. package/dist/tools/append-trace.d.ts +2 -0
  31. package/dist/tools/append-trace.d.ts.map +1 -1
  32. package/dist/tools/append-trace.js +18 -70
  33. package/dist/tools/append-trace.js.map +1 -1
  34. package/dist/tools/assert-tool-stores.d.ts +26 -0
  35. package/dist/tools/assert-tool-stores.d.ts.map +1 -0
  36. package/dist/tools/assert-tool-stores.js +54 -0
  37. package/dist/tools/assert-tool-stores.js.map +1 -0
  38. package/dist/tools/create-workflow.d.ts.map +1 -1
  39. package/dist/tools/create-workflow.js +2 -0
  40. package/dist/tools/create-workflow.js.map +1 -1
  41. package/dist/tools/execute-step.d.ts.map +1 -1
  42. package/dist/tools/execute-step.js +15 -0
  43. package/dist/tools/execute-step.js.map +1 -1
  44. package/dist/tools/get-run-state.d.ts +27 -1
  45. package/dist/tools/get-run-state.d.ts.map +1 -1
  46. package/dist/tools/get-run-state.js +59 -2
  47. package/dist/tools/get-run-state.js.map +1 -1
  48. package/dist/tools/get-workflow-protocol.d.ts.map +1 -1
  49. package/dist/tools/get-workflow-protocol.js +2 -0
  50. package/dist/tools/get-workflow-protocol.js.map +1 -1
  51. package/dist/tools/list-workflows.d.ts.map +1 -1
  52. package/dist/tools/list-workflows.js +2 -0
  53. package/dist/tools/list-workflows.js.map +1 -1
  54. package/dist/tools/start-run-batch.d.ts.map +1 -1
  55. package/dist/tools/start-run-batch.js +7 -0
  56. package/dist/tools/start-run-batch.js.map +1 -1
  57. package/dist/tools/start-run.d.ts +8 -1
  58. package/dist/tools/start-run.d.ts.map +1 -1
  59. package/dist/tools/start-run.js +11 -2
  60. package/dist/tools/start-run.js.map +1 -1
  61. package/dist/tools/submit-human-response.d.ts +36 -0
  62. package/dist/tools/submit-human-response.d.ts.map +1 -1
  63. package/dist/tools/submit-human-response.js +101 -12
  64. package/dist/tools/submit-human-response.js.map +1 -1
  65. package/dist/version.d.ts +2 -0
  66. package/dist/version.d.ts.map +1 -0
  67. package/dist/version.js +3 -0
  68. package/dist/version.js.map +1 -0
  69. package/package.json +4 -4
@@ -2,6 +2,8 @@
2
2
  import { z } from 'zod';
3
3
  import { validateRunParams, JsonWorkflowStore, JsonFileStore, executeChain, buildNextActions, findEligibleSteps, hashParams, WorkflowError, buildPreExecutionErrorEnvelope, unmetCapabilities, capabilityWarning, createDefaultRegistry, deriveRunPhase, } from '@sensigo/realm';
4
4
  import { sseJsonStringify } from '../sse-json.js';
5
+ import { assertToolStores, markServedByTool, registryRole } from './assert-tool-stores.js';
6
+ import { assertRegistryLine, ExtensionRegistry as RealmExtensionRegistry } from '@sensigo/realm';
5
7
  /** Lightweight structured telemetry. stderr is safe under the MCP stdio/SSE transport. */
6
8
  function logDedup(fields) {
7
9
  console.error(JSON.stringify({ event: 'idempotency_dedup', ...fields }));
@@ -13,6 +15,7 @@ const passthroughDispatcher = async () => ({});
13
15
  * Creates a run and immediately chains through any leading auto steps.
14
16
  */
15
17
  export async function handleStartRun(args, stores) {
18
+ assertToolStores(stores, 'handleStartRun');
16
19
  const workflowStore = stores?.workflowStore ?? new JsonWorkflowStore();
17
20
  const runStore = stores?.runStore ?? new JsonFileStore();
18
21
  const definition = await workflowStore.get(args.workflow_id);
@@ -28,6 +31,9 @@ export async function handleStartRun(args, stores) {
28
31
  const registry = stores?.registryProvider !== undefined
29
32
  ? await stores.registryProvider(definition)
30
33
  : stores?.registry;
34
+ // issue #620 PR-C: the registry rule — refused only on proof (another realm version), before any
35
+ // write. Covers the provider's result and the construction-time registry alike.
36
+ assertRegistryLine(registry, registryRole(stores, 'start_run', 'handleStartRun'), RealmExtensionRegistry);
31
37
  const { run, created } = await runStore.create({
32
38
  workflowId: definition.id,
33
39
  workflowVersion: definition.version,
@@ -81,6 +87,7 @@ export async function handleStartRun(args, stores) {
81
87
  input: params,
82
88
  dispatcher: passthroughDispatcher,
83
89
  ...(registry !== undefined ? { registry } : {}),
90
+ ...(stores?.driver !== undefined ? { driver: stores.driver } : {}),
84
91
  });
85
92
  // Source run_phase from the final run so the spread can't drop it.
86
93
  const finalRun = await runStore.get(run.id).catch(() => run);
@@ -127,6 +134,7 @@ export async function handleStartRun(args, stores) {
127
134
  }
128
135
  /** Registers the start_run MCP tool on the server. */
129
136
  export function registerStartRun(server, opts) {
137
+ markServedByTool(opts);
130
138
  server.tool('start_run', 'Create a new workflow run and chain through initial auto steps.', {
131
139
  workflow_id: z.string(),
132
140
  params: z.record(z.unknown()).optional().default({}),
@@ -136,12 +144,13 @@ export function registerStartRun(server, opts) {
136
144
  }, async (args) => {
137
145
  try {
138
146
  const result = await handleStartRun(args, opts);
139
- // Override command to 'start_run': MCP callers invoked start_run, not
140
- // the first auto step that executeChain may have executed.
141
147
  return {
142
148
  content: [
143
149
  {
144
150
  type: 'text',
151
+ // Override command to 'start_run': MCP callers invoked start_run, not the first auto
152
+ // step executeChain may have run. The step a non-ok reply belongs to stays named in
153
+ // `stopped_step` (issue #676 review).
145
154
  text: sseJsonStringify({ ...result, command: 'start_run' }),
146
155
  },
147
156
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"start-run.js","sourceRoot":"","sources":["../../src/tools/start-run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"start-run.js","sourceRoot":"","sources":["../../src/tools/start-run.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,41 @@
1
+ import { z } from 'zod';
1
2
  import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
3
  import { type ResponseEnvelope } from '@sensigo/realm';
3
4
  import type { HandleRunStores } from './start-run.js';
5
+ /**
6
+ * Issue #625 (holder slice): one warning per argument this tool does not take, naming the near miss
7
+ * when there is one. `server.tool` strips unknown keys before the handler runs, so a misnamed
8
+ * `claimToken` used to vanish without a word and the answer read as "no claim_token passed".
9
+ */
10
+ export declare function unknownKeyWarnings(args: Record<string, unknown>): string[];
11
+ /**
12
+ * The tool's input schema. Pass-through: `registerTool` hands the handler every key, where
13
+ * `server.tool` strips them first (the form `create_workflow` already uses and documents).
14
+ *
15
+ * `claim_token` has NO minimum length on purpose: with `.min(1)` the SDK would refuse an empty
16
+ * token with `MCP error -32602` and the answer would not be recorded — the damage this argument
17
+ * must never do. The engine judges an empty string as a wrong value (`mismatch`) and records the
18
+ * answer.
19
+ */
20
+ export declare const submitHumanResponseArgsSchema: z.ZodObject<{
21
+ run_id: z.ZodString;
22
+ gate_id: z.ZodString;
23
+ choice: z.ZodString;
24
+ responded_by: z.ZodOptional<z.ZodString>;
25
+ claim_token: z.ZodOptional<z.ZodString>;
26
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
27
+ run_id: z.ZodString;
28
+ gate_id: z.ZodString;
29
+ choice: z.ZodString;
30
+ responded_by: z.ZodOptional<z.ZodString>;
31
+ claim_token: z.ZodOptional<z.ZodString>;
32
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
33
+ run_id: z.ZodString;
34
+ gate_id: z.ZodString;
35
+ choice: z.ZodString;
36
+ responded_by: z.ZodOptional<z.ZodString>;
37
+ claim_token: z.ZodOptional<z.ZodString>;
38
+ }, z.ZodTypeAny, "passthrough">>;
4
39
  /**
5
40
  * Business logic for the submit_human_response tool.
6
41
  * Validates the gate_id and choice, then advances the run past the gate.
@@ -10,6 +45,7 @@ export declare function handleSubmitHumanResponse(args: {
10
45
  gate_id: string;
11
46
  choice: string;
12
47
  responded_by?: string | undefined;
48
+ claim_token?: string | undefined;
13
49
  }, stores?: HandleRunStores): Promise<ResponseEnvelope>;
14
50
  /** Registers the submit_human_response MCP tool on the server. */
15
51
  export declare function registerSubmitHumanResponse(server: McpServer, opts?: HandleRunStores): void;
@@ -1 +1 @@
1
- {"version":3,"file":"submit-human-response.d.ts","sourceRoot":"","sources":["../../src/tools/submit-human-response.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAOL,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGtD;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EAC5F,MAAM,CAAC,EAAE,eAAe,GACvB,OAAO,CAAC,gBAAgB,CAAC,CA2B3B;AAED,kEAAkE;AAClE,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,IAAI,CAyD3F"}
1
+ {"version":3,"file":"submit-human-response.d.ts","sourceRoot":"","sources":["../../src/tools/submit-human-response.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EASL,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAiBtD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAS1E;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;gCAkB1B,CAAC;AAEjB;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE;IACJ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC,EACD,MAAM,CAAC,EAAE,eAAe,GACvB,OAAO,CAAC,gBAAgB,CAAC,CA2D3B;AAED,kEAAkE;AAClE,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,IAAI,CAiE3F"}
@@ -1,12 +1,85 @@
1
1
  // submit-human-response tool — advances a gate-waiting run with a human choice.
2
2
  import { z } from 'zod';
3
- import { JsonWorkflowStore, JsonFileStore, submitHumanResponse, WorkflowError, buildPreExecutionErrorEnvelope, getWorkflowForRun, } from '@sensigo/realm';
3
+ import { JsonWorkflowStore, JsonFileStore, submitHumanResponse, WorkflowError, boundStatedName, identityRefusalLine, buildPreExecutionErrorEnvelope, getWorkflowForRun, } from '@sensigo/realm';
4
4
  import { sseJsonStringify } from '../sse-json.js';
5
+ import { assertToolStores, markServedByTool, registryRole } from './assert-tool-stores.js';
6
+ import { assertRegistryLine, ExtensionRegistry as RealmExtensionRegistry } from '@sensigo/realm';
7
+ /** The arguments this tool takes. Anything else is named in the reply's `warnings`, not dropped. */
8
+ const KNOWN_ARGS = ['run_id', 'gate_id', 'choice', 'responded_by', 'claim_token'];
9
+ /**
10
+ * Near misses for the one argument whose absence changes what a reply says. The house `closestKey`
11
+ * (threshold 2) cannot reach `token` or `claimToken` from `claim_token`, so the map is explicit.
12
+ */
13
+ const NEAR_MISSES = {
14
+ claimToken: 'claim_token',
15
+ token: 'claim_token',
16
+ };
17
+ /**
18
+ * Issue #625 (holder slice): one warning per argument this tool does not take, naming the near miss
19
+ * when there is one. `server.tool` strips unknown keys before the handler runs, so a misnamed
20
+ * `claimToken` used to vanish without a word and the answer read as "no claim_token passed".
21
+ */
22
+ export function unknownKeyWarnings(args) {
23
+ return Object.keys(args)
24
+ .filter((key) => !KNOWN_ARGS.includes(key))
25
+ .map((key) => {
26
+ const near = NEAR_MISSES[key];
27
+ return near !== undefined
28
+ ? `submit_human_response: unknown argument '${key}' was ignored — did you mean '${near}'?`
29
+ : `submit_human_response: unknown argument '${key}' was ignored.`;
30
+ });
31
+ }
32
+ /**
33
+ * The tool's input schema. Pass-through: `registerTool` hands the handler every key, where
34
+ * `server.tool` strips them first (the form `create_workflow` already uses and documents).
35
+ *
36
+ * `claim_token` has NO minimum length on purpose: with `.min(1)` the SDK would refuse an empty
37
+ * token with `MCP error -32602` and the answer would not be recorded — the damage this argument
38
+ * must never do. The engine judges an empty string as a wrong value (`mismatch`) and records the
39
+ * answer.
40
+ */
41
+ export const submitHumanResponseArgsSchema = z
42
+ .object({
43
+ run_id: z.string(),
44
+ gate_id: z.string(),
45
+ choice: z.string(),
46
+ responded_by: z
47
+ .string()
48
+ .optional()
49
+ .describe('Who made the choice, as the caller states it — not verified. At most 200 characters, no control characters.'),
50
+ claim_token: z
51
+ .string()
52
+ .optional()
53
+ .describe('The value from gate.claim_token on the reply that opened this question. Pass it back unchanged; it shows this answer comes from the conversation that opened the question. Never required.'),
54
+ })
55
+ .passthrough();
5
56
  /**
6
57
  * Business logic for the submit_human_response tool.
7
58
  * Validates the gate_id and choice, then advances the run past the gate.
8
59
  */
9
60
  export async function handleSubmitHumanResponse(args, stores) {
61
+ // issue #620 PR-C + the admission order (framework v1.27 §4): what the host handed in is checked
62
+ // first, then what this caller sent.
63
+ assertToolStores(stores, 'handleSubmitHumanResponse');
64
+ // Issue #625: `responded_by` is bounded exactly as `realm run respond --by` is — refused before
65
+ // anything is read or written, so nothing is recorded (#604's `responded_by` member: one helper
66
+ // guards both doors).
67
+ // The checked name (spaces at either end removed) is what is passed on and stored.
68
+ let respondedBy;
69
+ if (args.responded_by !== undefined) {
70
+ try {
71
+ respondedBy = boundStatedName(args.responded_by, 'responded_by');
72
+ }
73
+ catch (err) {
74
+ throw new WorkflowError(identityRefusalLine('responded_by', err, 'nothing was recorded'), {
75
+ code: 'VALIDATION_ACTOR_INVALID',
76
+ category: 'VALIDATION',
77
+ agentAction: 'report_to_user',
78
+ retryable: false,
79
+ details: err instanceof WorkflowError ? err.details : {},
80
+ });
81
+ }
82
+ }
10
83
  const workflowStore = stores?.workflowStore ?? new JsonWorkflowStore();
11
84
  const runStore = stores?.runStore ?? new JsonFileStore();
12
85
  const run = await runStore.get(args.run_id);
@@ -22,32 +95,48 @@ export async function handleSubmitHumanResponse(args, stores) {
22
95
  const registry = stores?.registryProvider !== undefined
23
96
  ? await stores.registryProvider(definition)
24
97
  : stores?.registry;
98
+ // issue #620 PR-C: the registry rule — refused only on proof (another realm version), before any
99
+ // write. Covers the provider's result and the construction-time registry alike.
100
+ assertRegistryLine(registry, registryRole(stores, 'submit_human_response', 'handleSubmitHumanResponse'), RealmExtensionRegistry);
25
101
  return submitHumanResponse(runStore, definition, {
26
102
  runId: args.run_id,
27
103
  gateId: args.gate_id,
28
104
  choice: args.choice,
29
105
  ...(registry !== undefined ? { registry } : {}),
30
- // issue #279 (increment 2, PR-D; design record D-5): pass-through only, never validated.
31
- ...(args.responded_by !== undefined ? { respondedBy: args.responded_by } : {}),
106
+ // issue #279 (increment 2, PR-D; design record D-5): stored as checked above (spaces at either
107
+ // end removed); never verified.
108
+ ...(respondedBy !== undefined ? { respondedBy } : {}),
109
+ // issue #625: judged inside the answer's write, never a reason to refuse it.
110
+ ...(args.claim_token !== undefined ? { claimToken: args.claim_token } : {}),
111
+ ...(stores?.driver !== undefined ? { driver: stores.driver } : {}),
32
112
  });
33
113
  }
34
114
  /** Registers the submit_human_response MCP tool on the server. */
35
115
  export function registerSubmitHumanResponse(server, opts) {
36
- server.tool('submit_human_response', "Advance a gate-waiting run by submitting the human's choice.", {
37
- run_id: z.string(),
38
- gate_id: z.string(),
39
- choice: z.string(),
40
- // issue #279 (increment 2, PR-D; design record D-5): unenforced attribution passthrough —
41
- // pass-through only, never validated.
42
- responded_by: z.string().optional(),
43
- }, async (args) => {
116
+ markServedByTool(opts);
117
+ // issue #625: `registerTool` with a pass-through schema — `server.tool` strips unknown keys before
118
+ // the handler sees them (see `create-workflow.ts`), so a misnamed `claimToken` would vanish
119
+ // without a word.
120
+ server.registerTool('submit_human_response', {
121
+ description: "Advance a gate-waiting run by submitting the human's choice.",
122
+ inputSchema: submitHumanResponseArgsSchema,
123
+ }, async (rawArgs) => {
124
+ const args = rawArgs;
44
125
  try {
45
126
  const result = await handleSubmitHumanResponse(args, opts);
127
+ const unknown = unknownKeyWarnings(args);
46
128
  return {
47
129
  content: [
48
130
  {
49
131
  type: 'text',
50
- text: sseJsonStringify({ ...result, data: {}, evidence: [] }),
132
+ text: sseJsonStringify({
133
+ ...result,
134
+ data: {},
135
+ evidence: [],
136
+ // An unknown argument is named FIRST: a caller that sent `claimToken` reads the
137
+ // did-you-mean before the reply's own "No claim_token was passed" sentence.
138
+ ...(unknown.length > 0 ? { warnings: [...unknown, ...result.warnings] } : {}),
139
+ }),
51
140
  },
52
141
  ],
53
142
  };
@@ -1 +1 @@
1
- {"version":3,"file":"submit-human-response.js","sourceRoot":"","sources":["../../src/tools/submit-human-response.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"submit-human-response.js","sourceRoot":"","sources":["../../src/tools/submit-human-response.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const VERSION = "0.46.0";
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,WAAW,CAAC"}
@@ -0,0 +1,3 @@
1
+ // This package's version. scripts/release.mjs rewrites the line below; keep it in exactly this form.
2
+ export const VERSION = '0.46.0';
3
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,qGAAqG;AACrG,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC"}
package/package.json CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "@sensigo/realm-mcp",
3
- "version": "0.45.0",
3
+ "version": "0.46.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
- "description": "MCP server for Realm — exposes 7 tools for AI agent connections over stdio or HTTP.",
7
+ "description": "MCP server for Realm: lets an AI agent run Realm workflows.",
8
8
  "license": "Apache-2.0",
9
9
  "repository": {
10
10
  "type": "git",
11
11
  "url": "https://github.com/sensigo-hq/realm.git"
12
12
  },
13
- "homepage": "https://github.com/sensigo-hq/realm#readme",
13
+ "homepage": "https://realmengine.dev",
14
14
  "keywords": [
15
15
  "mcp",
16
16
  "model-context-protocol",
@@ -46,7 +46,7 @@
46
46
  },
47
47
  "dependencies": {
48
48
  "@modelcontextprotocol/sdk": "1.30.0",
49
- "@sensigo/realm": "^0.45.0",
49
+ "@sensigo/realm": "0.46.0",
50
50
  "proper-lockfile": "^4.1.2",
51
51
  "zod": "^3.25.7"
52
52
  },