@clipform/mcp-server 1.41.0 → 1.44.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,11 @@
1
1
  <!-- GENERATED from README.template.md by scripts/sync-mcp-server-readme.mjs - do not edit directly. -->
2
+ <!--
3
+ GENERATED FILE SOURCE TEMPLATE.
4
+ README.md is generated from this template by scripts/sync-mcp-server-readme.mjs.
5
+ Edit prose HERE, never in README.md. URLs/package come from @vid-master/config;
6
+ the tool list is generated from the live server (createServer()._registeredTools),
7
+ so adding/removing a tool updates the README automatically - never hand-list tools.
8
+ -->
2
9
  # @clipform/mcp-server
3
10
 
4
11
  MCP server for [Clipform](https://clipform.io) - build and manage video-style forms from any MCP client (Claude, ChatGPT, Cursor, Windsurf, etc.).
@@ -1802,30 +1802,30 @@ var SLIDESHOW_TRANSITIONS = [
1802
1802
  ];
1803
1803
  var COMPOSITION_REGISTRY = [
1804
1804
  // Beds (full-bleed backgrounds)
1805
- { id: "MediaSlideshow", tier: "public", kind: "bed" },
1806
- { id: "Map", tier: "public", kind: "bed" },
1807
- { id: "Grid", tier: "public", kind: "bed" },
1805
+ { id: "MediaSlideshow", tier: "public", kind: "bed", scene_layer: true },
1806
+ { id: "Map", tier: "public", kind: "bed", scene_layer: true },
1807
+ { id: "Grid", tier: "public", kind: "bed", scene_layer: true },
1808
1808
  { id: "GridList", tier: "public", kind: "bed" },
1809
1809
  { id: "ObscuredReveal", tier: "public", kind: "bed" },
1810
1810
  { id: "Timeline", tier: "public", kind: "bed" },
1811
1811
  { id: "NumberLine", tier: "public", kind: "bed" },
1812
1812
  { id: "CountdownRing", tier: "public", kind: "bed" },
1813
- { id: "CountrySilhouetteClip", tier: "public", kind: "bed" },
1813
+ { id: "CountrySilhouetteClip", tier: "public", kind: "bed", scene_layer: true },
1814
1814
  // TODO(consolidation): collapse to one FlagReveal { country } - these three
1815
1815
  // are the same component with hardcoded flag paths (a recipe, not a tool).
1816
1816
  { id: "FlagRevealGB", tier: "public", kind: "bed" },
1817
1817
  { id: "FlagRevealJP", tier: "public", kind: "bed" },
1818
1818
  { id: "FlagRevealBR", tier: "public", kind: "bed" },
1819
- { id: "ColorCards", tier: "public", kind: "bed" },
1819
+ { id: "ColorCards", tier: "public", kind: "bed", scene_layer: true },
1820
1820
  { id: "TitleCard", tier: "public", kind: "bed" },
1821
1821
  { id: "ParallaxImage", tier: "public", kind: "bed" },
1822
- { id: "Spin3D", tier: "labs", kind: "bed" },
1822
+ { id: "Spin3D", tier: "labs", kind: "bed", scene_layer: true },
1823
1823
  // Overlays (assets layered on a bed)
1824
- { id: "TextReveal", tier: "public", kind: "overlay" },
1825
- { id: "EmojiPuzzle", tier: "public", kind: "overlay" },
1826
- { id: "BeforeAfter", tier: "public", kind: "overlay" },
1827
- { id: "StatCounter", tier: "labs", kind: "overlay" },
1828
- { id: "ListReveal", tier: "labs", kind: "overlay" },
1824
+ { id: "TextReveal", tier: "public", kind: "overlay", scene_layer: true },
1825
+ { id: "EmojiPuzzle", tier: "public", kind: "overlay", scene_layer: true },
1826
+ { id: "BeforeAfter", tier: "public", kind: "overlay", scene_layer: true },
1827
+ { id: "StatCounter", tier: "labs", kind: "overlay", scene_layer: true },
1828
+ { id: "ListReveal", tier: "labs", kind: "overlay", scene_layer: true },
1829
1829
  // Container
1830
1830
  { id: "Scene", tier: "labs", kind: "container" },
1831
1831
  // Social marketing templates (gated)
@@ -1838,6 +1838,7 @@ var compositionIdsByTier = (tier) => COMPOSITION_REGISTRY.filter((c) => c.tier =
1838
1838
  var PUBLIC_COMPOSITION_IDS = compositionIdsByTier("public");
1839
1839
  var LABS_COMPOSITION_IDS = compositionIdsByTier("labs");
1840
1840
  var SOCIAL_COMPOSITION_IDS = compositionIdsByTier("social");
1841
+ var SCENE_LAYER_COMPOSITION_IDS = COMPOSITION_REGISTRY.filter((c) => c.scene_layer).map((c) => c.id);
1841
1842
  var MCP_TOOL_TIERS = {};
1842
1843
 
1843
1844
  // src/lib/telemetry.ts
@@ -1941,7 +1942,9 @@ Error: ${message}`
1941
1942
  }
1942
1943
  const data = await response.json();
1943
1944
  if (!response.ok) {
1944
- const errorMsg = data.error || `API error (${response.status})`;
1945
+ const hint = recoveryHint(response.status, path);
1946
+ const apiMsg = data.error || `API error (${response.status})`;
1947
+ const errorMsg = hint ? `${apiMsg} - ${hint}` : apiMsg;
1945
1948
  if (isServerFault(response.status)) {
1946
1949
  reportError({
1947
1950
  error_type: `http_${response.status}`,
@@ -1959,6 +1962,20 @@ Error: ${message}`
1959
1962
  }
1960
1963
  return { ok: true, data };
1961
1964
  }
1965
+ function recoveryHint(status, path) {
1966
+ if (status === 401 || status === 403) {
1967
+ return "Check credentials: the key comes from CLIPFORM_API_KEY or the OAuth session - read clipform://context/session for the active workspace and auth mode.";
1968
+ }
1969
+ if (status === 404) {
1970
+ if (/^\/forms\/[^/]+\/nodes\//.test(path)) {
1971
+ return "Call clipform_get_form to list this form's nodes and their IDs.";
1972
+ }
1973
+ if (/^\/forms\/[^/]+/.test(path)) {
1974
+ return "Call clipform_list_forms to find valid form IDs (UUIDs, not the share_id from a form URL).";
1975
+ }
1976
+ }
1977
+ return void 0;
1978
+ }
1962
1979
  function errorResult(message) {
1963
1980
  return {
1964
1981
  content: [{ type: "text", text: message }],
@@ -2051,4 +2068,4 @@ export {
2051
2068
  getSessionContextWithAuth,
2052
2069
  getSessionContext
2053
2070
  };
2054
- //# sourceMappingURL=chunk-WCC65GB5.js.map
2071
+ //# sourceMappingURL=chunk-5GITXD5V.js.map