@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 +1 -1
- package/dist/server.js +1 -1
- package/dist/tools.js +6 -4
- package/package.json +2 -2
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.
|
|
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.
|
|
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
|
|
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
|
-
|
|
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.
|
|
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.
|
|
80
|
+
"@checkbox-site/node": "^0.2.8",
|
|
81
81
|
"@modelcontextprotocol/sdk": "^1.32.2",
|
|
82
82
|
"zod": "^4.6.7"
|
|
83
83
|
}
|