@clipform/mcp-server 3.3.2 → 3.7.1
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/README.md +5 -7
- package/README.template.md +5 -7
- package/dist/api-client.d.ts +78 -0
- package/dist/api-client.js +22 -0
- package/dist/api-client.js.map +1 -0
- package/dist/auth-context.d.ts +10 -1
- package/dist/auth-context.js +5 -1
- package/dist/{chunk-KHRY3A3M.js → chunk-5SCRFNYJ.js} +21 -9
- package/dist/chunk-5SCRFNYJ.js.map +1 -0
- package/dist/{chunk-5J5N7KTW.js → chunk-GJ3XQSQY.js} +6 -4
- package/dist/{chunk-5J5N7KTW.js.map → chunk-GJ3XQSQY.js.map} +1 -1
- package/dist/{chunk-7I765YTD.js → chunk-PXHGG57Z.js} +39 -20
- package/dist/{chunk-7I765YTD.js.map → chunk-PXHGG57Z.js.map} +1 -1
- package/dist/{chunk-65MTGAFF.js → chunk-SHTP4AJC.js} +102 -103
- package/dist/chunk-SHTP4AJC.js.map +1 -0
- package/dist/{chunk-A5CFGL27.js → chunk-VPF6MLKM.js} +5 -1
- package/dist/chunk-VPF6MLKM.js.map +1 -0
- package/dist/chunk-YOVLSXPW.js +102 -0
- package/dist/chunk-YOVLSXPW.js.map +1 -0
- package/dist/index.js +6 -5
- package/dist/index.js.map +1 -1
- package/dist/instrument.d.ts +20 -3
- package/dist/instrument.js +10 -4
- package/dist/instrument.js.map +1 -1
- package/dist/prompts.js +4 -3
- package/dist/resources.js +4 -3
- package/dist/server.js +6 -5
- package/package.json +7 -3
- package/dist/chunk-65MTGAFF.js.map +0 -1
- package/dist/chunk-A5CFGL27.js.map +0 -1
- package/dist/chunk-KHRY3A3M.js.map +0 -1
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
getWorkflowText,
|
|
7
7
|
objectType,
|
|
8
8
|
registerPrompts
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-GJ3XQSQY.js";
|
|
10
10
|
import {
|
|
11
11
|
GUIDE_TYPES,
|
|
12
12
|
QUIZ_VARIANTS,
|
|
@@ -15,13 +15,18 @@ import {
|
|
|
15
15
|
getGuideUri,
|
|
16
16
|
guideFallbackText,
|
|
17
17
|
registerResources
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-5SCRFNYJ.js";
|
|
19
|
+
import {
|
|
20
|
+
ANON_PREVIEW_NOTICE,
|
|
21
|
+
FULL_CAPS,
|
|
22
|
+
anonPreviewNotice,
|
|
23
|
+
capsFromToolsets
|
|
24
|
+
} from "./chunk-YOVLSXPW.js";
|
|
19
25
|
import {
|
|
20
26
|
ACTIVE_NODE_TYPES,
|
|
21
27
|
CONTACT_FIELDS,
|
|
22
28
|
FEATURE_FLAGS,
|
|
23
29
|
FORM_TYPE_ALIASES,
|
|
24
|
-
FULL_CAPS,
|
|
25
30
|
MCP_ANON_PUBLISH_GATE,
|
|
26
31
|
MCP_TOOL_SECURITY,
|
|
27
32
|
MCP_TOOL_TIERS,
|
|
@@ -31,7 +36,6 @@ import {
|
|
|
31
36
|
authChallengeMeta,
|
|
32
37
|
bfsOrder,
|
|
33
38
|
callApi,
|
|
34
|
-
capsFromToolsets,
|
|
35
39
|
defaultTarget,
|
|
36
40
|
errorResult,
|
|
37
41
|
exposedCompositionIds,
|
|
@@ -39,12 +43,12 @@ import {
|
|
|
39
43
|
resolveFormType,
|
|
40
44
|
structuredResult,
|
|
41
45
|
textResult
|
|
42
|
-
} from "./chunk-
|
|
46
|
+
} from "./chunk-SHTP4AJC.js";
|
|
43
47
|
import {
|
|
44
48
|
getMcpAuth,
|
|
45
49
|
runWithMcpAuth,
|
|
46
50
|
runWithMcpTool
|
|
47
|
-
} from "./chunk-
|
|
51
|
+
} from "./chunk-VPF6MLKM.js";
|
|
48
52
|
import {
|
|
49
53
|
__commonJS,
|
|
50
54
|
__export,
|
|
@@ -17240,7 +17244,7 @@ function registerCreateFormTool(server) {
|
|
|
17240
17244
|
"clipform_create_form",
|
|
17241
17245
|
{
|
|
17242
17246
|
title: "Create Clipform",
|
|
17243
|
-
description: `Create a new Clipform (interactive video-style form). Returns a viewer URL and form ID. When connected via an authenticated MCP client (e.g. claude.ai), the form lands directly in the user's workspace. Anonymous sessions
|
|
17247
|
+
description: `Create a new Clipform (interactive video-style form). Returns a viewer URL and form ID. When connected via an authenticated MCP client (e.g. claude.ai), the form lands directly in the user's workspace. Anonymous sessions build into a temporary account of their own: forms stay drafts with a private preview link. Some results also include a one-time claim URL that signs the user into that account; relay it when present.
|
|
17244
17248
|
|
|
17245
17249
|
${ONBOARDING_OFFER_TOOL_CUE}
|
|
17246
17250
|
|
|
@@ -17413,6 +17417,8 @@ Example: A form that asks a question, collects contact info, then finishes:
|
|
|
17413
17417
|
formUrl ? `The URLs above are exact values; constructed or guessed URLs return 404. Use the ${firstUrlLabel} URL and ${secondUrlLabel} URL as shown.` : `The ${firstUrlLabel} URL above is an exact value; constructed or guessed URLs return 404.`,
|
|
17414
17418
|
`Pass form_id on follow-up tools (get_form, add_node, attach_node_media, etc.).`
|
|
17415
17419
|
);
|
|
17420
|
+
const anonNotice = isPreview ? anonPreviewNotice() : null;
|
|
17421
|
+
if (anonNotice) lines.push(``, anonNotice);
|
|
17416
17422
|
if (planContext) {
|
|
17417
17423
|
const nodePart = planContext.node_limit === null ? "unlimited nodes" : `up to ${planContext.node_limit} nodes per form`;
|
|
17418
17424
|
const formPart = planContext.form_limit === null ? "unlimited forms" : `up to ${planContext.form_limit} forms`;
|
|
@@ -17683,7 +17689,7 @@ function registerListFormsTool(server) {
|
|
|
17683
17689
|
"clipform_list_forms",
|
|
17684
17690
|
{
|
|
17685
17691
|
title: "List Clipforms",
|
|
17686
|
-
description: `List forms in your workspace with optional filtering. Returns paginated results (cursor-based). next_cursor is included when more results exist. To find or open a form by name, pass search with part of its title instead of paging through results.`,
|
|
17692
|
+
description: `List forms in your workspace with optional filtering. Returns paginated results (cursor-based). next_cursor is included when more results exist. To find or open a form by name, pass search with part of its title instead of paging through results. Needs a signed-in Clipform account (an anonymous session is asked to sign in).`,
|
|
17687
17693
|
inputSchema: {
|
|
17688
17694
|
workspace_id: workspaceIdInput,
|
|
17689
17695
|
limit: external_exports.number().int().min(1).max(100).optional().describe("Number of forms to return (default 25, max 100)"),
|
|
@@ -18123,6 +18129,10 @@ Your form is live at: ${viewerUrl}
|
|
|
18123
18129
|
Share this URL with respondents. View responses any time with clipform_get_results (form_id: ${form_id})${responsesUrl ? `, or in the dashboard: ${responsesUrl}` : ""}`;
|
|
18124
18130
|
}
|
|
18125
18131
|
}
|
|
18132
|
+
const anonNotice = anonPreviewNotice();
|
|
18133
|
+
if (anonNotice) resultText += `
|
|
18134
|
+
|
|
18135
|
+
${anonNotice}`;
|
|
18126
18136
|
return structuredResult(resultText, { form_id, updated_fields: updatedFields });
|
|
18127
18137
|
}
|
|
18128
18138
|
);
|
|
@@ -18157,7 +18167,7 @@ function registerDeleteFormTool(server) {
|
|
|
18157
18167
|
"clipform_delete_form",
|
|
18158
18168
|
{
|
|
18159
18169
|
title: "Delete Clipform",
|
|
18160
|
-
description: `Move a form and all its nodes to the trash. It stops accepting responses immediately and can be restored later. Requires user confirmation before it runs.`,
|
|
18170
|
+
description: `Move a form and all its nodes to the trash. It stops accepting responses immediately and can be restored later. Requires user confirmation before it runs. Needs a signed-in Clipform account (an anonymous session is asked to sign in).`,
|
|
18161
18171
|
inputSchema: {
|
|
18162
18172
|
form_id: external_exports.string().uuid().describe("The form UUID to delete (returned by clipform_create_form, not the short share_id from the URL)"),
|
|
18163
18173
|
confirm: external_exports.boolean().optional().describe(CONFIRM_FIELD_DESCRIPTION)
|
|
@@ -18264,7 +18274,7 @@ function registerGetResultsTool(server) {
|
|
|
18264
18274
|
"clipform_get_results",
|
|
18265
18275
|
{
|
|
18266
18276
|
title: "Get Clipform Results",
|
|
18267
|
-
description: `View response counts, choice/action answer breakdowns, and recent open-text answers for a form. Contact, file, draw, camera, and payment answers are counts only - use the dashboard for per-response detail.`,
|
|
18277
|
+
description: `View response counts, choice/action answer breakdowns, and recent open-text answers for a form. Contact, file, draw, camera, and payment answers are counts only - use the dashboard for per-response detail. Needs a signed-in Clipform account (an anonymous session is asked to sign in).`,
|
|
18268
18278
|
inputSchema: {
|
|
18269
18279
|
form_id: external_exports.string().describe("The form UUID (returned by clipform_create_form, not the short share_id from the URL)")
|
|
18270
18280
|
},
|
|
@@ -18367,7 +18377,7 @@ function registerGetResponsesTool(server) {
|
|
|
18367
18377
|
"clipform_get_responses",
|
|
18368
18378
|
{
|
|
18369
18379
|
title: "List form responses",
|
|
18370
|
-
description: "List a Clipform form's individual responses (submissions) with time filtering - complements clipform_get_results (aggregates). Answers questions like 'what came in during the last 24 hours', 'what's the longest answer', 'what did people say'. Text answers plus a non-PII payment summary (amount and status); contact details, file uploads, and audio/video answers are redacted to placeholders and the customer's payment details stay in the dashboard (the responses URL from clipform_get_form). Responses are sorted newest first unless sort: 'oldest'.",
|
|
18380
|
+
description: "List a Clipform form's individual responses (submissions) with time filtering - complements clipform_get_results (aggregates). Answers questions like 'what came in during the last 24 hours', 'what's the longest answer', 'what did people say'. Text answers plus a non-PII payment summary (amount and status); contact details, file uploads, and audio/video answers are redacted to placeholders and the customer's payment details stay in the dashboard (the responses URL from clipform_get_form). Responses are sorted newest first unless sort: 'oldest'. Needs a signed-in Clipform account (an anonymous session is asked to sign in).",
|
|
18371
18381
|
inputSchema: {
|
|
18372
18382
|
form_id: external_exports.string().describe("Form UUID (from clipform_list_forms / clipform_create_form)"),
|
|
18373
18383
|
since: external_exports.string().datetime({ offset: true }).optional().describe("Only responses submitted at or after this ISO 8601 time (e.g. '2026-08-29T00:00:00Z')"),
|
|
@@ -18504,7 +18514,7 @@ function registerWhoamiTool(server) {
|
|
|
18504
18514
|
"clipform_whoami",
|
|
18505
18515
|
{
|
|
18506
18516
|
title: "Who Am I",
|
|
18507
|
-
description: `Show the current identity: auth mode (api key, oauth, session, or anonymous), active workspace, and plan limits.`,
|
|
18517
|
+
description: `Show the current identity: auth mode (api key, oauth, session, or anonymous), active workspace, and plan limits. Needs a signed-in Clipform account (an anonymous session is asked to sign in).`,
|
|
18508
18518
|
inputSchema: {},
|
|
18509
18519
|
outputSchema: {
|
|
18510
18520
|
auth_mode: external_exports.enum(["api_key", "oauth", "session", "anonymous"]).describe("How this session is authenticated"),
|
|
@@ -18521,7 +18531,8 @@ function registerWhoamiTool(server) {
|
|
|
18521
18531
|
links: external_exports.object({
|
|
18522
18532
|
dashboard: external_exports.string().describe("Dashboard home for the active workspace."),
|
|
18523
18533
|
forms: external_exports.string().describe("Forms list for the active workspace.")
|
|
18524
|
-
}).optional().describe("Workspace-level dashboard links - only present for a non-anonymous caller.")
|
|
18534
|
+
}).optional().describe("Workspace-level dashboard links - only present for a non-anonymous caller."),
|
|
18535
|
+
notice: external_exports.string().optional().describe("Anonymous sessions only: the account is a temporary preview until claimed.")
|
|
18525
18536
|
},
|
|
18526
18537
|
annotations: {
|
|
18527
18538
|
readOnlyHint: true,
|
|
@@ -18576,6 +18587,8 @@ function registerWhoamiTool(server) {
|
|
|
18576
18587
|
);
|
|
18577
18588
|
}
|
|
18578
18589
|
if (authMode === "anonymous") {
|
|
18590
|
+
structured.notice = ANON_PREVIEW_NOTICE;
|
|
18591
|
+
lines.push(ANON_PREVIEW_NOTICE);
|
|
18579
18592
|
lines.push(
|
|
18580
18593
|
"Anonymous session: forms are previews until claimed. Open the claim URL from clipform_create_form (or sign up) to claim the workspace and publish."
|
|
18581
18594
|
);
|
|
@@ -20422,12 +20435,18 @@ function registerListAssetsTool(server) {
|
|
|
20422
20435
|
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false }
|
|
20423
20436
|
},
|
|
20424
20437
|
async ({ type }) => {
|
|
20425
|
-
const
|
|
20426
|
-
|
|
20427
|
-
|
|
20428
|
-
|
|
20429
|
-
|
|
20430
|
-
|
|
20438
|
+
const loader = getMcpAuth()?.loadInternalContent;
|
|
20439
|
+
let data;
|
|
20440
|
+
if (loader) {
|
|
20441
|
+
data = await loader("assets", { type: type ?? "all" });
|
|
20442
|
+
} else {
|
|
20443
|
+
const result = await callApi("/internal/assets", {
|
|
20444
|
+
method: "GET",
|
|
20445
|
+
params: { type: type ?? "all" }
|
|
20446
|
+
});
|
|
20447
|
+
if (!result.ok) return errorResult(result.error);
|
|
20448
|
+
data = result.data;
|
|
20449
|
+
}
|
|
20431
20450
|
const lines = [];
|
|
20432
20451
|
const structured = {
|
|
20433
20452
|
sfx: (data.sfx ?? []).map((s) => ({ name: s.name, description: s.description ?? null, path: s.path })),
|
|
@@ -20972,4 +20991,4 @@ export {
|
|
|
20972
20991
|
buildInstructions,
|
|
20973
20992
|
createServer
|
|
20974
20993
|
};
|
|
20975
|
-
//# sourceMappingURL=chunk-
|
|
20994
|
+
//# sourceMappingURL=chunk-PXHGG57Z.js.map
|