@crediolabs/policy-builder-mcp 1.1.1 → 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.
@@ -976,6 +976,7 @@ export declare const InstallPolicyToolShape: {
976
976
  } | undefined;
977
977
  }>>;
978
978
  readonly installNonce: z.ZodOptional<z.ZodNumber>;
979
+ readonly outPath: z.ZodOptional<z.ZodString>;
979
980
  readonly spendingLimit: z.ZodOptional<z.ZodObject<{
980
981
  amount: z.ZodString;
981
982
  periodLedgers: z.ZodNumber;
@@ -987,6 +988,7 @@ export declare const InstallPolicyToolShape: {
987
988
  periodLedgers: number;
988
989
  }>>;
989
990
  readonly allowUnboundedAmount: z.ZodOptional<z.ZodBoolean>;
991
+ readonly allowAuthorityOverlap: z.ZodOptional<z.ZodBoolean>;
990
992
  readonly interpreterAddress: z.ZodOptional<z.ZodString>;
991
993
  readonly smartAccount: z.ZodOptional<z.ZodString>;
992
994
  readonly sourceAccount: z.ZodOptional<z.ZodString>;
@@ -172,6 +172,10 @@ export const InstallPolicyToolShape = {
172
172
  })
173
173
  .optional(),
174
174
  installNonce: z.number().int().positive().optional(),
175
+ // Absolute path for the server to write the unsigned envelope to. Without it
176
+ // the caller has to carry a multi-kilobyte string to disk itself, which
177
+ // mangles it - a file of the right length whose bytes no longer parse.
178
+ outPath: z.string().optional(),
175
179
  // A ROLLING TOTAL beside the per-call predicate, as an OpenZeppelin
176
180
  // spending_limit on the same rule. Both must permit. This is the only way to
177
181
  // express "N per day": the interpreter is handed one call and keeps no state.
@@ -185,6 +189,10 @@ export const InstallPolicyToolShape = {
185
189
  // a spend. Default-deny: such a rule installs and verifies cleanly and caps
186
190
  // nothing.
187
191
  allowUnboundedAmount: z.boolean().optional(),
192
+ // Opt-in to installing a rule the cross-rule scan PROVES cannot bind: a
193
+ // shared signer also sits on a neighbouring rule carrying no policy, so it
194
+ // names that rule and this predicate never runs. Default-deny.
195
+ allowAuthorityOverlap: z.boolean().optional(),
188
196
  interpreterAddress: z.string().optional(),
189
197
  };
190
198
  /** Flat ZodRawShape for `revoke_policy`. */
@@ -26,7 +26,7 @@ export function createMcpServer() {
26
26
  // Kept in step with package.json by `server-version.test.ts`. It was
27
27
  // hardcoded once already and reported 0.0.0 to every client; a literal is
28
28
  // fine, a literal nothing checks is not.
29
- { name: 'policy-builder-mcp', version: '1.1.1' }, { capabilities: { tools: {} } });
29
+ { name: 'policy-builder-mcp', version: '1.2.0' }, { capabilities: { tools: {} } });
30
30
  registerTools(server);
31
31
  return server;
32
32
  }
@@ -976,6 +976,7 @@ export declare const InstallPolicyToolShape: {
976
976
  } | undefined;
977
977
  }>>;
978
978
  readonly installNonce: z.ZodOptional<z.ZodNumber>;
979
+ readonly outPath: z.ZodOptional<z.ZodString>;
979
980
  readonly spendingLimit: z.ZodOptional<z.ZodObject<{
980
981
  amount: z.ZodString;
981
982
  periodLedgers: z.ZodNumber;
@@ -987,6 +988,7 @@ export declare const InstallPolicyToolShape: {
987
988
  periodLedgers: number;
988
989
  }>>;
989
990
  readonly allowUnboundedAmount: z.ZodOptional<z.ZodBoolean>;
991
+ readonly allowAuthorityOverlap: z.ZodOptional<z.ZodBoolean>;
990
992
  readonly interpreterAddress: z.ZodOptional<z.ZodString>;
991
993
  readonly smartAccount: z.ZodOptional<z.ZodString>;
992
994
  readonly sourceAccount: z.ZodOptional<z.ZodString>;
@@ -180,6 +180,10 @@ exports.InstallPolicyToolShape = {
180
180
  })
181
181
  .optional(),
182
182
  installNonce: zod_1.z.number().int().positive().optional(),
183
+ // Absolute path for the server to write the unsigned envelope to. Without it
184
+ // the caller has to carry a multi-kilobyte string to disk itself, which
185
+ // mangles it - a file of the right length whose bytes no longer parse.
186
+ outPath: zod_1.z.string().optional(),
183
187
  // A ROLLING TOTAL beside the per-call predicate, as an OpenZeppelin
184
188
  // spending_limit on the same rule. Both must permit. This is the only way to
185
189
  // express "N per day": the interpreter is handed one call and keeps no state.
@@ -193,6 +197,10 @@ exports.InstallPolicyToolShape = {
193
197
  // a spend. Default-deny: such a rule installs and verifies cleanly and caps
194
198
  // nothing.
195
199
  allowUnboundedAmount: zod_1.z.boolean().optional(),
200
+ // Opt-in to installing a rule the cross-rule scan PROVES cannot bind: a
201
+ // shared signer also sits on a neighbouring rule carrying no policy, so it
202
+ // names that rule and this predicate never runs. Default-deny.
203
+ allowAuthorityOverlap: zod_1.z.boolean().optional(),
196
204
  interpreterAddress: zod_1.z.string().optional(),
197
205
  };
198
206
  /** Flat ZodRawShape for `revoke_policy`. */
@@ -30,7 +30,7 @@ function createMcpServer() {
30
30
  // Kept in step with package.json by `server-version.test.ts`. It was
31
31
  // hardcoded once already and reported 0.0.0 to every client; a literal is
32
32
  // fine, a literal nothing checks is not.
33
- { name: 'policy-builder-mcp', version: '1.1.1' }, { capabilities: { tools: {} } });
33
+ { name: 'policy-builder-mcp', version: '1.2.0' }, { capabilities: { tools: {} } });
34
34
  registerTools(server);
35
35
  return server;
36
36
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crediolabs/policy-builder-mcp",
3
- "version": "1.1.1",
3
+ "version": "1.2.0",
4
4
  "license": "MIT",
5
5
  "description": "MCP server exposing the OZ policy-synth core (record_transaction + synthesize_policy) over stdio and Streamable HTTP transports.",
6
6
  "type": "module",
@@ -63,7 +63,7 @@
63
63
  "prepack": "bun run build"
64
64
  },
65
65
  "dependencies": {
66
- "@crediolabs/policy-synth": "1.1.1",
66
+ "@crediolabs/policy-synth": "1.2.0",
67
67
  "@modelcontextprotocol/sdk": "1.30.0",
68
68
  "@stellar/stellar-sdk": "14.4.0",
69
69
  "zod": "3.25.76"
package/src/schemas.ts CHANGED
@@ -213,6 +213,10 @@ export const InstallPolicyToolShape = {
213
213
  })
214
214
  .optional(),
215
215
  installNonce: z.number().int().positive().optional(),
216
+ // Absolute path for the server to write the unsigned envelope to. Without it
217
+ // the caller has to carry a multi-kilobyte string to disk itself, which
218
+ // mangles it - a file of the right length whose bytes no longer parse.
219
+ outPath: z.string().optional(),
216
220
  // A ROLLING TOTAL beside the per-call predicate, as an OpenZeppelin
217
221
  // spending_limit on the same rule. Both must permit. This is the only way to
218
222
  // express "N per day": the interpreter is handed one call and keeps no state.
@@ -226,6 +230,10 @@ export const InstallPolicyToolShape = {
226
230
  // a spend. Default-deny: such a rule installs and verifies cleanly and caps
227
231
  // nothing.
228
232
  allowUnboundedAmount: z.boolean().optional(),
233
+ // Opt-in to installing a rule the cross-rule scan PROVES cannot bind: a
234
+ // shared signer also sits on a neighbouring rule carrying no policy, so it
235
+ // names that rule and this predicate never runs. Default-deny.
236
+ allowAuthorityOverlap: z.boolean().optional(),
229
237
  interpreterAddress: z.string().optional(),
230
238
  } as const
231
239
 
package/src/server.ts CHANGED
@@ -51,7 +51,7 @@ export function createMcpServer(): McpServer {
51
51
  // Kept in step with package.json by `server-version.test.ts`. It was
52
52
  // hardcoded once already and reported 0.0.0 to every client; a literal is
53
53
  // fine, a literal nothing checks is not.
54
- { name: 'policy-builder-mcp', version: '1.1.1' },
54
+ { name: 'policy-builder-mcp', version: '1.2.0' },
55
55
  { capabilities: { tools: {} } }
56
56
  )
57
57
  registerTools(server)