@checkbox-site/mcp 0.2.7 → 0.2.8

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/server.d.ts CHANGED
@@ -5,7 +5,7 @@ import type { KeyContext } from './permissions.ts';
5
5
  import { type IssuedKeys, type ToolContext, type ToolDef } from './tools.ts';
6
6
  export declare const SERVER_NAME = "checkbox";
7
7
  /** Kept equal to packages/mcp/package.json "version" (@checkbox-site/mcp); mcp.test.ts checks it. */
8
- export declare const SERVER_VERSION = "0.2.7";
8
+ export declare const SERVER_VERSION = "0.2.8";
9
9
  export declare const DEFAULT_MCP_URL = "https://app.checkbox.site/mcp";
10
10
  /** The coverage phrase used across Checkbox (the API docs tests check the count against the rules catalog). */
11
11
  export declare const COVERAGE_PHRASE = "federal law, 27 states, DC and New York City";
package/dist/server.js CHANGED
@@ -9,7 +9,7 @@ import { likelyMisspelling, unknownArgumentsMessage, unknownKeysParams } from ".
9
9
  import { outdatedNotice } from "./version-check.js";
10
10
  export const SERVER_NAME = 'checkbox';
11
11
  /** Kept equal to packages/mcp/package.json "version" (@checkbox-site/mcp); mcp.test.ts checks it. */
12
- export const SERVER_VERSION = '0.2.7';
12
+ export const SERVER_VERSION = '0.2.8';
13
13
  export const DEFAULT_MCP_URL = 'https://app.checkbox.site/mcp';
14
14
  /** The coverage phrase used across Checkbox (the API docs tests check the count against the rules catalog). */
15
15
  export const COVERAGE_PHRASE = 'federal law, 27 states, DC and New York City';
package/dist/tools.js CHANGED
@@ -1698,7 +1698,7 @@ const updateSite = {
1698
1698
  name: 'update_site',
1699
1699
  title: 'Update a site\'s settings (write)',
1700
1700
  description: [
1701
- 'WRITE: updates a site — the fields plan tasks of change.type "config" ask for (their change.content is this tool\'s input): checkout_url, checkout_steps, test_account { login_url, email, password } (stored encrypted; the response echoes it without the password), name (the merchant name in generated legal copy), platform, jurisdictions, monitoring_interval_minutes, protection_level (minimum = legal floor only; balanced = + recommended suggestions, the default; maximum = + extras; only required items ever affect compliance).',
1701
+ 'WRITE: updates a site — the fields plan tasks of change.type "config" ask for (their change.content is this tool\'s input): checkout_url, checkout_steps, checkout_pages, test_account { login_url, email, password } (stored encrypted; the response echoes it without the password), name (the merchant name in generated legal copy), platform, jurisdictions, monitoring_interval_minutes, protection_level.',
1702
1702
  'The response is the site; check checkout.url / checkout.test_account to confirm. Then verify_task the task that asked for it.',
1703
1703
  ].join('\n'),
1704
1704
  input: {
@@ -1706,6 +1706,7 @@ const updateSite = {
1706
1706
  name: z.string().max(200).optional().describe('Merchant / brand name (used in generated disclosures).'),
1707
1707
  checkout_url: z.string().max(2048).optional().describe('Page with the Subscribe / Buy button.'),
1708
1708
  checkout_steps: z.array(z.record(z.string(), z.unknown())).max(20).optional().describe('Steps to reach the purchase button (clicks / fills), as in the API.'),
1709
+ checkout_pages: z.array(z.record(z.string(), z.string())).max(4).optional().describe('[{url,plan}] per plan'),
1709
1710
  test_account: strictObject({
1710
1711
  login_url: z.string().max(2048),
1711
1712
  email: z.string().max(320),
@@ -1723,7 +1724,7 @@ const updateSite = {
1723
1724
  annotations: { ...write(false, true), title: 'Update site' },
1724
1725
  async run(args, { api }) {
1725
1726
  const site = await resolveSite(api, args.site);
1726
- const body = pick(args, ['name', 'checkout_url', 'checkout_steps', 'test_account', 'platform', 'jurisdictions', 'monitoring_interval_minutes', 'protection_level']);
1727
+ const body = pick(args, ['name', 'checkout_url', 'checkout_steps', 'checkout_pages', 'test_account', 'platform', 'jurisdictions', 'monitoring_interval_minutes', 'protection_level']);
1727
1728
  if (!Object.keys(body).length)
1728
1729
  throw new ToolError('Pass at least one field to change (e.g. checkout_url, test_account, name).');
1729
1730
  const updated = await api.request('POST', `/v1/sites/${enc(site)}`, { body });
@@ -1856,7 +1857,8 @@ const listFindings = {
1856
1857
  const failNote = args.status === 'fail' && !list.data.length ? ' status=fail is the engine verdict only: a needs_review finding can still be counted as a fix (its label says "Needs a fix"). The fixes to make are the tasks of get_compliance_plan.' : '';
1857
1858
  return {
1858
1859
  headline: `${list.data.length}${list.has_more ? '+' : ''} finding(s).${failNote}`,
1859
- notes: list.data.map((f) => `${f.severity.toUpperCase()} ${f.id} [${f.compliance?.label ?? f.status}] ${f.check_id}: ${f.title}${f.requirements?.[0] ? ` [${f.requirements[0].citation}]` : ''}`),
1860
+ // Round 35 (pilot 34 item 7): each finding with what the plan says about it (the plan decides what is left to do).
1861
+ notes: list.data.map((f) => `${f.severity.toUpperCase()} ${f.id} [${f.compliance?.label ?? f.status}] ${f.check_id}: ${f.title}${f.requirements?.[0] ? ` [${f.requirements[0].citation}]` : ''}${f.plan_task ? ` — plan: ${f.plan_task.label} (${f.plan_task.id})` : ''}`),
1860
1862
  data: list,
1861
1863
  };
1862
1864
  },
@@ -1880,7 +1882,7 @@ const getFinding = {
1880
1882
  ? await optional(api.request('GET', `/v1/findings/${enc(id)}/fix`, { query: pick(args, ['target', 'cancel_url', 'plan']) }))
1881
1883
  : { unavailable: 'This key has no fixes:read permission.' };
1882
1884
  return {
1883
- headline: `${finding.severity.toUpperCase()} ${finding.id} [${finding.compliance?.label ?? finding.status}] ${finding.check_id}: ${finding.title}`,
1885
+ headline: `${finding.severity.toUpperCase()} ${finding.id} [${finding.compliance?.label ?? finding.status}] ${finding.check_id}: ${finding.title}${finding.plan_task ? ` — plan: ${finding.plan_task.label} (${finding.plan_task.id})` : ''}`,
1884
1886
  notes: [complianceBullet(finding.check_id, finding.compliance, finding.status, finding.title)].filter((x) => !!x),
1885
1887
  data: { finding, fix },
1886
1888
  next: findingNext(finding, nextActionOf(fix)),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@checkbox-site/mcp",
3
- "version": "0.2.7",
3
+ "version": "0.2.8",
4
4
  "description": "Checkbox MCP server: auto-renewal law and subscription compliance checks for AI agents (FTC ROSCA, California ARL, New York and other states) on Stripe Checkout params, pricing pages, disclosures and emails. Remote at https://app.checkbox.site/mcp, or local stdio.",
5
5
  "keywords": [
6
6
  "checkbox",
@@ -77,7 +77,7 @@
77
77
  "prepack": "npm run build"
78
78
  },
79
79
  "dependencies": {
80
- "@checkbox-site/node": "^0.2.7",
80
+ "@checkbox-site/node": "^0.2.8",
81
81
  "@modelcontextprotocol/sdk": "^1.32.2",
82
82
  "zod": "^4.6.7"
83
83
  }