@clipform/mcp-server 1.38.0 → 1.40.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.
package/README.md CHANGED
@@ -1,4 +1,5 @@
1
- # @clipform/mcp-server
1
+ <!-- GENERATED from README.template.md by scripts/sync-mcp-server-readme.mjs - do not edit directly. -->
2
+ # @clipform/mcp-server
2
3
 
3
4
  MCP server for [Clipform](https://clipform.io) - build and manage video-style forms from any MCP client (Claude, ChatGPT, Cursor, Windsurf, etc.).
4
5
 
@@ -10,9 +11,9 @@ There are two ways to connect: **remote** (recommended, uses your Clipform accou
10
11
 
11
12
  Use this if you have a Clipform account. Forms are created directly in your workspace and your plan tier applies (no 3-node cap on Pro).
12
13
 
13
- **Claude (claude.ai):** Settings → Connectors → Add custom connector → enter `https://mcp.clipform.io`
14
+ **Claude (claude.ai):** Settings Connectors Add custom connector enter `https://mcp.clipform.io`
14
15
 
15
- **ChatGPT:** Settings → Connectors → Advanced → enable Developer Mode → Create connector → enter `https://mcp.clipform.io` (requires Pro/Team/Enterprise)
16
+ **ChatGPT:** Settings Connectors Advanced enable Developer Mode Create connector enter `https://mcp.clipform.io` (requires Pro/Team/Enterprise)
16
17
 
17
18
  **Any MCP client with OAuth:** Point it at `https://mcp.clipform.io` - discovery, registration, and auth are handled automatically via OAuth 2.1 + Dynamic Client Registration (RFC 7591).
18
19
 
@@ -58,42 +59,36 @@ You can also pass the key as a CLI flag: `npx -y @clipform/mcp-server --api-key=
58
59
 
59
60
  ## Tools
60
61
 
61
- ### Form & node management
62
+ Your MCP client lists these automatically on connect (via `tools/list`). Full reference - arguments, schemas, and examples - is in the [docs](https://clipform.io/docs/guides/mcp).
62
63
 
63
64
  | Tool | Description |
64
65
  |------|-------------|
65
- | `clipform_create_form` | Create a new form with nodes, theming, and tags in one call. Returns the created node IDs (structured output) so media steps need no follow-up lookup |
66
- | `clipform_list_forms` | List forms in your workspace with filtering and pagination |
67
- | `clipform_get_form` | View a form and all its nodes |
68
- | `clipform_update_form` | Change title, publish status, or settings |
69
- | `clipform_delete_form` | Delete a form and its nodes (asks the user to confirm) |
70
- | `clipform_add_node` | Add a node to an existing form |
71
- | `clipform_update_node` | Update node text, type, config, or options |
72
- | `clipform_delete_node` | Remove a node (logic chain auto-relinks; asks the user to confirm) |
73
-
74
- ### Media & logic
75
-
76
- | Tool | Description |
77
- |------|-------------|
78
- | `clipform_upload_node_media` | Attach video or image to one or more nodes (batch, max 10); set `fit_media: true` for generated renders |
79
- | `clipform_get_node_media` | View a node's media details |
80
- | `clipform_delete_node_media` | Remove media from a node (asks the user to confirm) |
81
- | `clipform_attach_audio` | Attach audio to a still-image node |
82
-
83
- ### Creative
84
-
85
- | Tool | Description |
86
- |------|-------------|
87
- | `clipform_render_composition` | Render a video composition to MP4 or PNG - flag reveals, emoji puzzles, grids, timelines, map motion and more. Pass `wait: false` to fire renders in parallel and poll for results |
88
- | `clipform_generate_tts` | Generate narration audio with word-level captions |
89
- | `clipform_generate_slideshow` | Create slideshow videos from images + audio (waits, returns URL) |
90
- | `clipform_generate_video` | Generate video from images, clips, or both synced to audio. Supports a looping background-audio bed (crowd noise, ambience) and print-style texture overlays. Pass `wait: false` to fire renders in parallel and poll for results |
91
- | `clipform_check_render` | Check status of a render started with `wait: false` |
92
- | `clipform_search_media` | Search royalty-free images and videos, with orientation filter and alt-text descriptions |
93
- | `clipform_search_music` | Search royalty-free music and ambient sounds |
94
- | `clipform_list_compositions` | List available video compositions and prop schemas |
95
- | `clipform_list_assets` | List available sound effects, animations, and fonts |
96
- | `clipform_fetch_boundary` | Fetch a GeoJSON boundary polygon for a country, city, or region |
66
+ | `clipform_create_form` | Create a new Clipform (interactive video-style form). |
67
+ | `clipform_list_forms` | List forms in your workspace with optional filtering. |
68
+ | `clipform_get_form` | Retrieve a form's details including all nodes in sequential order. |
69
+ | `clipform_update_form` | Update a form's title, publish status, settings, or tags. |
70
+ | `clipform_delete_form` | Permanently delete a form and all its nodes. |
71
+ | `clipform_add_node` | Add a new node to an existing form. |
72
+ | `clipform_update_node` | Update one or more existing nodes' text, type, config, or options. |
73
+ | `clipform_delete_node` | Delete a node from a form. |
74
+ | `clipform_upload_node_media` | Upload media for one or more nodes. |
75
+ | `clipform_get_node_media` | Get the media attached to a node, including processing status. |
76
+ | `clipform_delete_node_media` | Remove media from a node. |
77
+ | `clipform_set_logic` | Set routing logic on one or more nodes. |
78
+ | `clipform_log_generation` | Save an audit trail for a generated form. |
79
+ | `clipform_search_news` | Fallback news lookup for clients without native web search. |
80
+ | `clipform_youtube_transcript` | Extract the transcript, title, and channel info from a YouTube video. |
81
+ | `clipform_generate_tts` | Generate narration audio from text with word-level captions. |
82
+ | `clipform_generate_video` | Generate a video from images, video clips, or both, synced to an audio track. |
83
+ | `clipform_search_media` | Search images or stock video clips. |
84
+ | `clipform_render_composition` | Render a specialised video composition to MP4 or PNG - custom animated visuals that clipform_generate_video can't provide, such as geography animations or designed motion graphics. |
85
+ | `clipform_search_music` | Search for royalty-free music tracks and ambient sounds. |
86
+ | `clipform_list_compositions` | Browse available video compositions and their expected props schemas. |
87
+ | `clipform_list_assets` | List available creative assets (sound effects, animations, fonts) for video compositions. |
88
+ | `clipform_check_render` | Check the status of a render job started by clipform_generate_video or clipform_render_composition. |
89
+ | `clipform_fetch_boundary` | Fetch a GeoJSON boundary polygon for a country, city, or region. |
90
+ | `clipform_get_guide` | Retrieve craft knowledge for building a specific form type. |
91
+ | `clipform_get_workflow` | Retrieve a step-by-step build workflow for creating a specific form type. |
97
92
 
98
93
  ## Example
99
94
 
@@ -112,6 +107,6 @@ Forms are created with a start node and end screen automatically - you just add
112
107
  ## Links
113
108
 
114
109
  - [Clipform](https://clipform.io) - Create interactive video forms
115
- - [Documentation](https://clipform.io/docs/guides/mcp) - Full guide with node types, scoring, and more
110
+ - [Documentation](https://clipform.io/docs/guides/mcp) - Full guide with node types and more
116
111
 
117
112
  > Craft guides (`clipform://guides/*`, `clipform_get_guide`) are fetched from the Clipform API at runtime, so the server needs a reachable `API_URL` and valid `CLIPFORM_API_KEY` to serve them.
@@ -0,0 +1,91 @@
1
+ <!--
2
+ GENERATED FILE SOURCE TEMPLATE.
3
+ README.md is generated from this template by scripts/sync-mcp-server-readme.mjs.
4
+ Edit prose HERE, never in README.md. URLs/package come from @vid-master/config;
5
+ the tool list is generated from the live server (createServer()._registeredTools),
6
+ so adding/removing a tool updates the README automatically - never hand-list tools.
7
+ -->
8
+ # {{PKG}}
9
+
10
+ MCP server for [Clipform]({{SITE}}) - build and manage video-style forms from any MCP client (Claude, ChatGPT, Cursor, Windsurf, etc.).
11
+
12
+ ## Install
13
+
14
+ There are two ways to connect: **remote** (recommended, uses your Clipform account) and **local** (anonymous, free-tier limits).
15
+
16
+ ### Remote (recommended)
17
+
18
+ Use this if you have a Clipform account. Forms are created directly in your workspace and your plan tier applies (no 3-node cap on Pro).
19
+
20
+ **Claude (claude.ai):** Settings → Connectors → Add custom connector → enter `{{MCP_URL}}`
21
+
22
+ **ChatGPT:** Settings → Connectors → Advanced → enable Developer Mode → Create connector → enter `{{MCP_URL}}` (requires Pro/Team/Enterprise)
23
+
24
+ **Any MCP client with OAuth:** Point it at `{{MCP_URL}}` - discovery, registration, and auth are handled automatically via OAuth 2.1 + Dynamic Client Registration (RFC 7591).
25
+
26
+ ### Local - Claude Code / Claude Desktop / Cursor / etc.
27
+
28
+ Use this for stdio-based MCP clients. Pass your API key to authenticate with your workspace and plan tier.
29
+
30
+ **Claude Code:**
31
+
32
+ ```bash
33
+ claude mcp add clipform -e CLIPFORM_API_KEY=cf_xxx -- npx -y {{PKG}}
34
+ ```
35
+
36
+ **Claude Desktop / Cursor / Windsurf / OpenClaw** - add to your MCP config:
37
+
38
+ ```json
39
+ {
40
+ "mcpServers": {
41
+ "clipform": {
42
+ "command": "npx",
43
+ "args": ["-y", "{{PKG}}"],
44
+ "env": {
45
+ "CLIPFORM_API_KEY": "cf_xxx",
46
+ "API_URL": "{{API_URL}}"
47
+ }
48
+ }
49
+ }
50
+ }
51
+ ```
52
+
53
+ Self-service API key generation is coming soon. For now, your API key is provided during onboarding or via your account settings - contact support if you need one.
54
+
55
+ You can also pass the key as a CLI flag: `npx -y {{PKG}} --api-key=cf_xxx`
56
+
57
+ **Anonymous mode** (no API key): Forms go into a shared workspace with the free-tier 3-node limit. You'll get a claim URL to move forms into your account.
58
+
59
+ ### Environment variables
60
+
61
+ | Variable | Required | Purpose |
62
+ |----------|----------|---------|
63
+ | `CLIPFORM_API_KEY` | For workspace auth | Bearer key - forms land in the key's workspace with its plan limits. Also unlocks the creative tools (search, TTS, video rendering). Omit for anonymous mode. |
64
+ | `API_URL` | Yes | Clipform API base URL (`{{API_URL}}`, or your local/self-hosted API). |
65
+
66
+ ## Tools
67
+
68
+ Your MCP client lists these automatically on connect (via `tools/list`). Full reference - arguments, schemas, and examples - is in the [docs]({{DOCS_URL}}).
69
+
70
+ {{TOOLS}}
71
+
72
+ ## Example
73
+
74
+ > Create a Clipform called "Customer Feedback" with a choice question asking "How would you rate our service?" with options Excellent, Good, Fair, Poor, then an open-ended question asking "Any additional comments?", and finish with an end screen saying "Thanks for your feedback!"
75
+
76
+ ## How it works
77
+
78
+ **Remote (OAuth):** Bearer tokens are audience-bound to `{{MCP_URL}}` (RFC 8707) and scoped to `mcp` only. Forms land directly in the workspace you approved during consent.
79
+
80
+ **Local with API key:** The `CLIPFORM_API_KEY` is sent as a standard `Authorization: Bearer` header. Forms are created directly in the key's workspace with your plan tier limits.
81
+
82
+ **Local anonymous (no key):** Forms go into a shared unclaimed workspace. No auth is needed to edit them - the form UUID is the only credential. You'll get a claim URL to transfer ownership. Free-tier 3-node limit applies.
83
+
84
+ Forms are created with a start node and end screen automatically - you just add the nodes in between.
85
+
86
+ ## Links
87
+
88
+ - [Clipform]({{SITE}}) - Create interactive video forms
89
+ - [Documentation]({{DOCS_URL}}) - Full guide with node types and more
90
+
91
+ > Craft guides (`clipform://guides/*`, `clipform_get_guide`) are fetched from the Clipform API at runtime, so the server needs a reachable `API_URL` and valid `CLIPFORM_API_KEY` to serve them.
@@ -6,7 +6,7 @@ import {
6
6
  getWorkflowText,
7
7
  objectType,
8
8
  registerPrompts
9
- } from "./chunk-QT3RFCCN.js";
9
+ } from "./chunk-UGVXQM5S.js";
10
10
  import {
11
11
  GUIDE_TYPES,
12
12
  QUIZ_VARIANTS,
@@ -14,7 +14,7 @@ import {
14
14
  getGuideUri,
15
15
  guideFallbackText,
16
16
  registerResources
17
- } from "./chunk-ZTJU467D.js";
17
+ } from "./chunk-EZHJR3UM.js";
18
18
  import {
19
19
  BUSINESS,
20
20
  CONTACT_FIELDS,
@@ -23,15 +23,18 @@ import {
23
23
  KEN_BURNS_EFFECTS,
24
24
  KEN_BURNS_FIT_MODES,
25
25
  KEN_BURNS_PRESETS,
26
+ LABS_COMPOSITION_IDS,
26
27
  MCP_TOOL_TIERS,
27
28
  NODE_TYPES,
28
29
  NON_COUNTABLE_TYPES,
30
+ PUBLIC_COMPOSITION_IDS,
29
31
  SLIDESHOW_TRANSITIONS,
32
+ SOCIAL_COMPOSITION_IDS,
30
33
  callApi,
31
34
  errorResult,
32
35
  resolveFormType,
33
36
  textResult
34
- } from "./chunk-KBWMI24E.js";
37
+ } from "./chunk-WCC65GB5.js";
35
38
  import {
36
39
  __commonJS,
37
40
  __export,
@@ -16984,33 +16987,14 @@ import { fileURLToPath } from "url";
16984
16987
  var _endScreen = NODE_TYPES.end_screen.config_schema.properties;
16985
16988
  var END_SCREEN_ICONS = _endScreen.icon.enum;
16986
16989
  var END_SCREEN_CTA_TYPES = _endScreen.cta_type.enum;
16987
- var PUBLIC_COMPOSITIONS = [
16988
- "Map",
16989
- "Grid",
16990
- "GridList",
16991
- "ObscuredReveal",
16992
- "Timeline",
16993
- "NumberLine",
16994
- "CountdownRing",
16995
- "CountrySilhouetteClip",
16996
- "FlagRevealGB",
16997
- "FlagRevealJP",
16998
- "FlagRevealBR",
16999
- "ColorCards",
17000
- "TextReveal",
17001
- "EmojiPuzzle",
17002
- "BeforeAfter",
17003
- "MediaSlideshow",
17004
- "TitleCard",
17005
- "ParallaxImage"
16990
+ var PUBLIC_COMPOSITIONS = PUBLIC_COMPOSITION_IDS;
16991
+ var LABS_COMPOSITIONS = LABS_COMPOSITION_IDS;
16992
+ var SOCIAL_COMPOSITIONS = SOCIAL_COMPOSITION_IDS;
16993
+ var EXPOSED_COMPOSITIONS = [
16994
+ ...PUBLIC_COMPOSITIONS,
16995
+ ...process.env.CLIPFORM_LABS === "1" ? LABS_COMPOSITIONS : [],
16996
+ ...process.env.CLIPFORM_SOCIAL === "1" ? SOCIAL_COMPOSITIONS : []
17006
16997
  ];
17007
- var LABS_COMPOSITIONS = [
17008
- "StatCounter",
17009
- "ListReveal",
17010
- "Scene",
17011
- "Spin3D"
17012
- ];
17013
- var EXPOSED_COMPOSITIONS = process.env.CLIPFORM_LABS === "1" ? [...PUBLIC_COMPOSITIONS, ...LABS_COMPOSITIONS] : PUBLIC_COMPOSITIONS;
17014
16998
 
17015
16999
  // src/lib/schemas.ts
17016
17000
  var ACTIVE_NODE_TYPES = Object.entries(NODE_TYPES).filter(([, def]) => def.is_active && !def.is_system).map(([type]) => type);
@@ -19030,4 +19014,4 @@ export {
19030
19014
  JSONRPCMessageSchema,
19031
19015
  createServer
19032
19016
  };
19033
- //# sourceMappingURL=chunk-WHNDWLHI.js.map
19017
+ //# sourceMappingURL=chunk-CILPQ5ZL.js.map