framlit-mcp 0.1.0 → 0.2.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 +100 -42
- package/dist/api/client.d.ts +10 -0
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +13 -4
- package/dist/api/client.js.map +1 -1
- package/dist/cli/index.d.ts +26 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +439 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/output.d.ts +15 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +41 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/core/handlers.d.ts +49 -0
- package/dist/core/handlers.d.ts.map +1 -0
- package/dist/core/handlers.js +148 -0
- package/dist/core/handlers.js.map +1 -0
- package/dist/core/registry.d.ts +25 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +221 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/schemas.d.ts +94 -0
- package/dist/core/schemas.d.ts.map +1 -0
- package/dist/core/schemas.js +69 -0
- package/dist/core/schemas.js.map +1 -0
- package/dist/index.d.ts +3 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -178
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts +9 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +143 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/tools/credits.js +2 -2
- package/dist/tools/generate.d.ts.map +1 -1
- package/dist/tools/generate.js +10 -2
- package/dist/tools/generate.js.map +1 -1
- package/dist/tools/preview.d.ts +15 -0
- package/dist/tools/preview.d.ts.map +1 -0
- package/dist/tools/preview.js +40 -0
- package/dist/tools/preview.js.map +1 -0
- package/dist/tools/projects.js +2 -2
- package/dist/tools/projects.js.map +1 -1
- package/dist/tools/templates.js +1 -1
- package/package.json +10 -6
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Core Handlers
|
|
4
|
+
*
|
|
5
|
+
* Pure handler functions shared by MCP and CLI.
|
|
6
|
+
* Each handler takes (client, args) and returns a HandlerResult.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.handleGenerateCode = handleGenerateCode;
|
|
10
|
+
exports.handleModifyCode = handleModifyCode;
|
|
11
|
+
exports.handleListProjects = handleListProjects;
|
|
12
|
+
exports.handleGetProject = handleGetProject;
|
|
13
|
+
exports.handleCreateProject = handleCreateProject;
|
|
14
|
+
exports.handleUpdateProject = handleUpdateProject;
|
|
15
|
+
exports.handleRenderVideo = handleRenderVideo;
|
|
16
|
+
exports.handleGetRenderStatus = handleGetRenderStatus;
|
|
17
|
+
exports.handleListTemplates = handleListTemplates;
|
|
18
|
+
exports.handleGetCredits = handleGetCredits;
|
|
19
|
+
exports.handlePreviewCode = handlePreviewCode;
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
// Code generation
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
async function handleGenerateCode(client, args) {
|
|
24
|
+
const result = await client.generateCode(args);
|
|
25
|
+
let message = `Generated Remotion code (${result.creditsUsed} credit used, ${result.creditsRemaining} remaining):\n\n\`\`\`tsx\n${result.code}\n\`\`\``;
|
|
26
|
+
if (result.previewUrl) {
|
|
27
|
+
message += `\n\nPreview: ${result.previewUrl}\nOpen the link above to see the video preview (expires in 24h)`;
|
|
28
|
+
}
|
|
29
|
+
return { data: result, message };
|
|
30
|
+
}
|
|
31
|
+
async function handleModifyCode(client, args) {
|
|
32
|
+
const result = await client.modifyCode(args);
|
|
33
|
+
let message = `Modified code (${result.creditsUsed} credit used, ${result.creditsRemaining} remaining):\n\n\`\`\`tsx\n${result.code}\n\`\`\``;
|
|
34
|
+
if (result.previewUrl) {
|
|
35
|
+
message += `\n\nPreview: ${result.previewUrl}\nOpen the link above to see the video preview (expires in 24h)`;
|
|
36
|
+
}
|
|
37
|
+
return { data: result, message };
|
|
38
|
+
}
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
// Projects
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
async function handleListProjects(client) {
|
|
43
|
+
const projects = await client.listProjects();
|
|
44
|
+
if (projects.length === 0) {
|
|
45
|
+
return { data: projects, message: 'No projects found. Create one with framlit_create_project.' };
|
|
46
|
+
}
|
|
47
|
+
const list = projects
|
|
48
|
+
.map((p) => `- ${p.name} (${p.id})\n Format: ${p.format}, Duration: ${p.duration}s\n Updated: ${p.updatedAt}`)
|
|
49
|
+
.join('\n\n');
|
|
50
|
+
return { data: projects, message: `Found ${projects.length} project(s):\n\n${list}` };
|
|
51
|
+
}
|
|
52
|
+
async function handleGetProject(client, args) {
|
|
53
|
+
const project = await client.getProject(args.projectId);
|
|
54
|
+
return {
|
|
55
|
+
data: project,
|
|
56
|
+
message: `${project.name}\n\nFormat: ${project.format}\nDuration: ${project.duration}s\nFPS: ${project.fps}\n\nCode:\n\`\`\`tsx\n${project.code}\n\`\`\``,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
async function handleCreateProject(client, args) {
|
|
60
|
+
const project = await client.createProject(args);
|
|
61
|
+
return {
|
|
62
|
+
data: project,
|
|
63
|
+
message: `Project created!\n\n${project.name} (${project.id})\n\nView at: https://framlit.app/dashboard?project=${project.id}`,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
async function handleUpdateProject(client, args) {
|
|
67
|
+
const { projectId, ...params } = args;
|
|
68
|
+
const project = await client.updateProject(projectId, params);
|
|
69
|
+
return {
|
|
70
|
+
data: project,
|
|
71
|
+
message: `Project updated!\n\n${project.name} (${project.id})\n\nView at: https://framlit.app/dashboard?project=${project.id}`,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
// Rendering
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
async function handleRenderVideo(client, args) {
|
|
78
|
+
const result = await client.renderVideo(args.projectId);
|
|
79
|
+
if (result.status === 'failed') {
|
|
80
|
+
return { data: result, message: `Render failed: ${result.error}`, isError: true };
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
data: result,
|
|
84
|
+
message: `Render started!\n\nRender ID: ${result.renderId}\nStatus: ${result.status}\n\nUse framlit_get_render_status to check progress.`,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
async function handleGetRenderStatus(client, args) {
|
|
88
|
+
const result = await client.getRenderStatus(args.renderId);
|
|
89
|
+
if (result.status === 'completed' && result.downloadUrl) {
|
|
90
|
+
return { data: result, message: `Render completed!\n\nDownload: ${result.downloadUrl}` };
|
|
91
|
+
}
|
|
92
|
+
if (result.status === 'failed') {
|
|
93
|
+
return { data: result, message: `Render failed: ${result.error}`, isError: true };
|
|
94
|
+
}
|
|
95
|
+
const progress = result.progress ? ` (${Math.round(result.progress * 100)}%)` : '';
|
|
96
|
+
return { data: result, message: `Render status: ${result.status}${progress}` };
|
|
97
|
+
}
|
|
98
|
+
// ---------------------------------------------------------------------------
|
|
99
|
+
// Templates
|
|
100
|
+
// ---------------------------------------------------------------------------
|
|
101
|
+
async function handleListTemplates(client, args) {
|
|
102
|
+
const templates = await client.listTemplates(args);
|
|
103
|
+
if (templates.length === 0) {
|
|
104
|
+
return { data: templates, message: 'No templates found matching your criteria.' };
|
|
105
|
+
}
|
|
106
|
+
const list = templates
|
|
107
|
+
.map((t) => `- ${t.name} ${t.isOfficial ? '(Official)' : '(Community)'}\n ${t.description}\n Category: ${t.category}`)
|
|
108
|
+
.join('\n\n');
|
|
109
|
+
return {
|
|
110
|
+
data: templates,
|
|
111
|
+
message: `Found ${templates.length} template(s):\n\n${list}\n\nView all templates at https://framlit.app/marketplace`,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
// ---------------------------------------------------------------------------
|
|
115
|
+
// Credits
|
|
116
|
+
// ---------------------------------------------------------------------------
|
|
117
|
+
async function handleGetCredits(client) {
|
|
118
|
+
const userInfo = await client.getUserInfo();
|
|
119
|
+
const planNames = {
|
|
120
|
+
free: 'Free', hobby: 'Hobby', pro: 'Pro', team: 'Team',
|
|
121
|
+
};
|
|
122
|
+
const planName = planNames[userInfo.planTier] ?? userInfo.planTier;
|
|
123
|
+
let message = `Credit Balance\n\n`;
|
|
124
|
+
message += `Remaining: ${userInfo.creditsRemaining} / ${userInfo.creditsTotal} credits\n`;
|
|
125
|
+
message += `Used: ${userInfo.creditsUsed} credits\n\n`;
|
|
126
|
+
message += `Plan: ${planName}\n`;
|
|
127
|
+
message += `- Max projects: ${userInfo.limits.maxProjects}\n`;
|
|
128
|
+
message += `- Max render duration: ${userInfo.limits.maxRenderDuration}s\n`;
|
|
129
|
+
message += `- Watermark: ${userInfo.limits.hasWatermark ? 'Yes' : 'No'}\n`;
|
|
130
|
+
if (userInfo.creditsRemaining <= 10) {
|
|
131
|
+
message += `\nLow credits! Get more at https://framlit.app/pricing`;
|
|
132
|
+
}
|
|
133
|
+
if (userInfo.planTier === 'free' || userInfo.planTier === 'hobby') {
|
|
134
|
+
message += `\n\nUpgrade to Pro for 500 credits/month and no watermark: https://framlit.app/pricing`;
|
|
135
|
+
}
|
|
136
|
+
return { data: userInfo, message };
|
|
137
|
+
}
|
|
138
|
+
// ---------------------------------------------------------------------------
|
|
139
|
+
// Preview
|
|
140
|
+
// ---------------------------------------------------------------------------
|
|
141
|
+
async function handlePreviewCode(client, args) {
|
|
142
|
+
const result = await client.createPreview(args.code);
|
|
143
|
+
return {
|
|
144
|
+
data: result,
|
|
145
|
+
message: `Preview created!\n\nPreview URL: ${result.previewUrl}\n\nOpen the link above in your browser to see the video preview.\n\nExpires in 24 hours`,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/core/handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Registry
|
|
3
|
+
*
|
|
4
|
+
* Central registry mapping tool names to schemas, handlers, and metadata.
|
|
5
|
+
* Used by both MCP server and CLI for tool discovery and dispatch.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
import type { FramlitClient } from '../api/client.js';
|
|
9
|
+
import type { HandlerResult } from './handlers.js';
|
|
10
|
+
export interface ToolEntry {
|
|
11
|
+
name: string;
|
|
12
|
+
description: string;
|
|
13
|
+
schema: z.ZodObject<z.ZodRawShape>;
|
|
14
|
+
handler: (client: FramlitClient, args: Record<string, unknown>) => Promise<HandlerResult>;
|
|
15
|
+
credits: number | string;
|
|
16
|
+
category: 'generate' | 'project' | 'render' | 'template' | 'credits' | 'preview';
|
|
17
|
+
}
|
|
18
|
+
export declare const TOOL_REGISTRY: ToolEntry[];
|
|
19
|
+
export declare function getToolByName(name: string): ToolEntry | undefined;
|
|
20
|
+
export declare function getToolNames(): string[];
|
|
21
|
+
/**
|
|
22
|
+
* Convert a Zod schema to JSON Schema (simple implementation for CLI introspection).
|
|
23
|
+
*/
|
|
24
|
+
export declare function zodToJsonSchema(schema: z.ZodObject<z.ZodRawShape>): Record<string, unknown>;
|
|
25
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAQnD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IACnC,OAAO,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1F,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;CAClF;AAMD,eAAO,MAAM,aAAa,EAAE,SAAS,EAoHpC,CAAC;AAMF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAEjE;AAED,wBAAgB,YAAY,IAAI,MAAM,EAAE,CAEvC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA8C3F"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Tool Registry
|
|
4
|
+
*
|
|
5
|
+
* Central registry mapping tool names to schemas, handlers, and metadata.
|
|
6
|
+
* Used by both MCP server and CLI for tool discovery and dispatch.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.TOOL_REGISTRY = void 0;
|
|
43
|
+
exports.getToolByName = getToolByName;
|
|
44
|
+
exports.getToolNames = getToolNames;
|
|
45
|
+
exports.zodToJsonSchema = zodToJsonSchema;
|
|
46
|
+
const zod_1 = require("zod");
|
|
47
|
+
const schemas = __importStar(require("./schemas.js"));
|
|
48
|
+
const handlers = __importStar(require("./handlers.js"));
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
// Registry
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
exports.TOOL_REGISTRY = [
|
|
53
|
+
// Code generation
|
|
54
|
+
{
|
|
55
|
+
name: 'framlit_generate_code',
|
|
56
|
+
description: `Generate Remotion video code from a text description.
|
|
57
|
+
Uses 1 credit per generation.
|
|
58
|
+
|
|
59
|
+
The generated code is a valid Remotion composition that can be previewed in browser, rendered to MP4, or saved as a project.
|
|
60
|
+
|
|
61
|
+
Supports: logo animations, product demos, social media content, data visualizations, 3D animations, narrated videos, and style variations.`,
|
|
62
|
+
schema: schemas.generateCodeSchema,
|
|
63
|
+
handler: (c, a) => handlers.handleGenerateCode(c, a),
|
|
64
|
+
credits: 1,
|
|
65
|
+
category: 'generate',
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
name: 'framlit_modify_code',
|
|
69
|
+
description: `Modify existing Remotion code based on instructions.
|
|
70
|
+
Uses 1 credit per modification.
|
|
71
|
+
|
|
72
|
+
Use this to change colors, fonts, timing, animations, add/remove elements, or fix issues in generated code.`,
|
|
73
|
+
schema: schemas.modifyCodeSchema,
|
|
74
|
+
handler: (c, a) => handlers.handleModifyCode(c, a),
|
|
75
|
+
credits: 1,
|
|
76
|
+
category: 'generate',
|
|
77
|
+
},
|
|
78
|
+
// Projects
|
|
79
|
+
{
|
|
80
|
+
name: 'framlit_list_projects',
|
|
81
|
+
description: 'List all your Framlit projects.',
|
|
82
|
+
schema: schemas.listProjectsSchema,
|
|
83
|
+
handler: (c) => handlers.handleListProjects(c),
|
|
84
|
+
credits: 0,
|
|
85
|
+
category: 'project',
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: 'framlit_get_project',
|
|
89
|
+
description: 'Get details of a specific project including its code.',
|
|
90
|
+
schema: schemas.getProjectSchema,
|
|
91
|
+
handler: (c, a) => handlers.handleGetProject(c, a),
|
|
92
|
+
credits: 0,
|
|
93
|
+
category: 'project',
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: 'framlit_create_project',
|
|
97
|
+
description: `Create a new Framlit project.
|
|
98
|
+
Projects store your video code and can be rendered to MP4.`,
|
|
99
|
+
schema: schemas.createProjectSchema,
|
|
100
|
+
handler: (c, a) => handlers.handleCreateProject(c, a),
|
|
101
|
+
credits: 0,
|
|
102
|
+
category: 'project',
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
name: 'framlit_update_project',
|
|
106
|
+
description: 'Update an existing project.',
|
|
107
|
+
schema: schemas.updateProjectSchema,
|
|
108
|
+
handler: (c, a) => handlers.handleUpdateProject(c, a),
|
|
109
|
+
credits: 0,
|
|
110
|
+
category: 'project',
|
|
111
|
+
},
|
|
112
|
+
// Rendering
|
|
113
|
+
{
|
|
114
|
+
name: 'framlit_render_video',
|
|
115
|
+
description: `Start rendering a project to MP4 video.
|
|
116
|
+
Rendering is done on Framlit servers (AWS Lambda).
|
|
117
|
+
|
|
118
|
+
Note: Free/Hobby plans include a watermark. Upgrade to Pro to remove the watermark.`,
|
|
119
|
+
schema: schemas.renderVideoSchema,
|
|
120
|
+
handler: (c, a) => handlers.handleRenderVideo(c, a),
|
|
121
|
+
credits: 0,
|
|
122
|
+
category: 'render',
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
name: 'framlit_get_render_status',
|
|
126
|
+
description: 'Check the status of a video render. Returns status, progress percentage, and download URL when completed.',
|
|
127
|
+
schema: schemas.getRenderStatusSchema,
|
|
128
|
+
handler: (c, a) => handlers.handleGetRenderStatus(c, a),
|
|
129
|
+
credits: 0,
|
|
130
|
+
category: 'render',
|
|
131
|
+
},
|
|
132
|
+
// Templates
|
|
133
|
+
{
|
|
134
|
+
name: 'framlit_list_templates',
|
|
135
|
+
description: `Browse available video templates.
|
|
136
|
+
Templates can be used as starting points for your videos.`,
|
|
137
|
+
schema: schemas.listTemplatesSchema,
|
|
138
|
+
handler: (c, a) => handlers.handleListTemplates(c, a),
|
|
139
|
+
credits: 0,
|
|
140
|
+
category: 'template',
|
|
141
|
+
},
|
|
142
|
+
// Credits
|
|
143
|
+
{
|
|
144
|
+
name: 'framlit_get_credits',
|
|
145
|
+
description: 'Check your current credit balance, usage, and plan details.',
|
|
146
|
+
schema: schemas.getCreditsSchema,
|
|
147
|
+
handler: (c) => handlers.handleGetCredits(c),
|
|
148
|
+
credits: 0,
|
|
149
|
+
category: 'credits',
|
|
150
|
+
},
|
|
151
|
+
// Preview
|
|
152
|
+
{
|
|
153
|
+
name: 'framlit_preview_code',
|
|
154
|
+
description: `Create a temporary preview URL for Remotion code.
|
|
155
|
+
The preview URL can be opened in a browser to see the video.
|
|
156
|
+
|
|
157
|
+
Preview URLs expire after 24 hours. No credits are consumed.`,
|
|
158
|
+
schema: schemas.previewCodeSchema,
|
|
159
|
+
handler: (c, a) => handlers.handlePreviewCode(c, a),
|
|
160
|
+
credits: 0,
|
|
161
|
+
category: 'preview',
|
|
162
|
+
},
|
|
163
|
+
];
|
|
164
|
+
// ---------------------------------------------------------------------------
|
|
165
|
+
// Helpers
|
|
166
|
+
// ---------------------------------------------------------------------------
|
|
167
|
+
function getToolByName(name) {
|
|
168
|
+
return exports.TOOL_REGISTRY.find((t) => t.name === name);
|
|
169
|
+
}
|
|
170
|
+
function getToolNames() {
|
|
171
|
+
return exports.TOOL_REGISTRY.map((t) => t.name);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Convert a Zod schema to JSON Schema (simple implementation for CLI introspection).
|
|
175
|
+
*/
|
|
176
|
+
function zodToJsonSchema(schema) {
|
|
177
|
+
const shape = schema.shape;
|
|
178
|
+
const properties = {};
|
|
179
|
+
const required = [];
|
|
180
|
+
for (const [key, value] of Object.entries(shape)) {
|
|
181
|
+
const zodValue = value;
|
|
182
|
+
const prop = {};
|
|
183
|
+
// Unwrap optional
|
|
184
|
+
let inner = zodValue;
|
|
185
|
+
let isOptional = false;
|
|
186
|
+
if (inner instanceof zod_1.z.ZodOptional) {
|
|
187
|
+
isOptional = true;
|
|
188
|
+
inner = inner.unwrap();
|
|
189
|
+
}
|
|
190
|
+
// Determine type
|
|
191
|
+
if (inner instanceof zod_1.z.ZodString) {
|
|
192
|
+
prop.type = 'string';
|
|
193
|
+
}
|
|
194
|
+
else if (inner instanceof zod_1.z.ZodNumber) {
|
|
195
|
+
prop.type = 'number';
|
|
196
|
+
}
|
|
197
|
+
else if (inner instanceof zod_1.z.ZodBoolean) {
|
|
198
|
+
prop.type = 'boolean';
|
|
199
|
+
}
|
|
200
|
+
else if (inner instanceof zod_1.z.ZodEnum) {
|
|
201
|
+
prop.type = 'string';
|
|
202
|
+
prop.enum = inner.options;
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
prop.type = 'string';
|
|
206
|
+
}
|
|
207
|
+
if (zodValue.description) {
|
|
208
|
+
prop.description = zodValue.description;
|
|
209
|
+
}
|
|
210
|
+
properties[key] = prop;
|
|
211
|
+
if (!isOptional) {
|
|
212
|
+
required.push(key);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return {
|
|
216
|
+
type: 'object',
|
|
217
|
+
properties,
|
|
218
|
+
...(required.length > 0 ? { required } : {}),
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Input Schemas (Zod)
|
|
3
|
+
*
|
|
4
|
+
* Shared validation schemas used by both MCP and CLI.
|
|
5
|
+
* Single source of truth for tool input shapes.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
export declare const generateCodeSchema: z.ZodObject<{
|
|
9
|
+
prompt: z.ZodString;
|
|
10
|
+
format: z.ZodOptional<z.ZodEnum<["landscape", "portrait", "square"]>>;
|
|
11
|
+
}, "strip", z.ZodTypeAny, {
|
|
12
|
+
prompt: string;
|
|
13
|
+
format?: "landscape" | "portrait" | "square" | undefined;
|
|
14
|
+
}, {
|
|
15
|
+
prompt: string;
|
|
16
|
+
format?: "landscape" | "portrait" | "square" | undefined;
|
|
17
|
+
}>;
|
|
18
|
+
export declare const modifyCodeSchema: z.ZodObject<{
|
|
19
|
+
code: z.ZodString;
|
|
20
|
+
instruction: z.ZodString;
|
|
21
|
+
}, "strip", z.ZodTypeAny, {
|
|
22
|
+
code: string;
|
|
23
|
+
instruction: string;
|
|
24
|
+
}, {
|
|
25
|
+
code: string;
|
|
26
|
+
instruction: string;
|
|
27
|
+
}>;
|
|
28
|
+
export declare const listProjectsSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
29
|
+
export declare const getProjectSchema: z.ZodObject<{
|
|
30
|
+
projectId: z.ZodString;
|
|
31
|
+
}, "strip", z.ZodTypeAny, {
|
|
32
|
+
projectId: string;
|
|
33
|
+
}, {
|
|
34
|
+
projectId: string;
|
|
35
|
+
}>;
|
|
36
|
+
export declare const createProjectSchema: z.ZodObject<{
|
|
37
|
+
name: z.ZodString;
|
|
38
|
+
code: z.ZodOptional<z.ZodString>;
|
|
39
|
+
format: z.ZodOptional<z.ZodEnum<["landscape", "portrait", "square"]>>;
|
|
40
|
+
}, "strip", z.ZodTypeAny, {
|
|
41
|
+
name: string;
|
|
42
|
+
code?: string | undefined;
|
|
43
|
+
format?: "landscape" | "portrait" | "square" | undefined;
|
|
44
|
+
}, {
|
|
45
|
+
name: string;
|
|
46
|
+
code?: string | undefined;
|
|
47
|
+
format?: "landscape" | "portrait" | "square" | undefined;
|
|
48
|
+
}>;
|
|
49
|
+
export declare const updateProjectSchema: z.ZodObject<{
|
|
50
|
+
projectId: z.ZodString;
|
|
51
|
+
name: z.ZodOptional<z.ZodString>;
|
|
52
|
+
code: z.ZodOptional<z.ZodString>;
|
|
53
|
+
}, "strip", z.ZodTypeAny, {
|
|
54
|
+
projectId: string;
|
|
55
|
+
name?: string | undefined;
|
|
56
|
+
code?: string | undefined;
|
|
57
|
+
}, {
|
|
58
|
+
projectId: string;
|
|
59
|
+
name?: string | undefined;
|
|
60
|
+
code?: string | undefined;
|
|
61
|
+
}>;
|
|
62
|
+
export declare const renderVideoSchema: z.ZodObject<{
|
|
63
|
+
projectId: z.ZodString;
|
|
64
|
+
}, "strip", z.ZodTypeAny, {
|
|
65
|
+
projectId: string;
|
|
66
|
+
}, {
|
|
67
|
+
projectId: string;
|
|
68
|
+
}>;
|
|
69
|
+
export declare const getRenderStatusSchema: z.ZodObject<{
|
|
70
|
+
renderId: z.ZodString;
|
|
71
|
+
}, "strip", z.ZodTypeAny, {
|
|
72
|
+
renderId: string;
|
|
73
|
+
}, {
|
|
74
|
+
renderId: string;
|
|
75
|
+
}>;
|
|
76
|
+
export declare const listTemplatesSchema: z.ZodObject<{
|
|
77
|
+
category: z.ZodOptional<z.ZodString>;
|
|
78
|
+
official: z.ZodOptional<z.ZodBoolean>;
|
|
79
|
+
}, "strip", z.ZodTypeAny, {
|
|
80
|
+
category?: string | undefined;
|
|
81
|
+
official?: boolean | undefined;
|
|
82
|
+
}, {
|
|
83
|
+
category?: string | undefined;
|
|
84
|
+
official?: boolean | undefined;
|
|
85
|
+
}>;
|
|
86
|
+
export declare const getCreditsSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
87
|
+
export declare const previewCodeSchema: z.ZodObject<{
|
|
88
|
+
code: z.ZodString;
|
|
89
|
+
}, "strip", z.ZodTypeAny, {
|
|
90
|
+
code: string;
|
|
91
|
+
}, {
|
|
92
|
+
code: string;
|
|
93
|
+
}>;
|
|
94
|
+
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/core/schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAYxB,eAAO,MAAM,kBAAkB;;;;;;;;;EAG7B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;EAG3B,CAAC;AAMH,eAAO,MAAM,kBAAkB,gDAAe,CAAC;AAE/C,eAAO,MAAM,gBAAgB;;;;;;EAE3B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;EAI9B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;EAI9B,CAAC;AAMH,eAAO,MAAM,iBAAiB;;;;;;EAE5B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;EAEhC,CAAC;AAMH,eAAO,MAAM,mBAAmB;;;;;;;;;EAG9B,CAAC;AAMH,eAAO,MAAM,gBAAgB,gDAAe,CAAC;AAM7C,eAAO,MAAM,iBAAiB;;;;;;EAE5B,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Tool Input Schemas (Zod)
|
|
4
|
+
*
|
|
5
|
+
* Shared validation schemas used by both MCP and CLI.
|
|
6
|
+
* Single source of truth for tool input shapes.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.previewCodeSchema = exports.getCreditsSchema = exports.listTemplatesSchema = exports.getRenderStatusSchema = exports.renderVideoSchema = exports.updateProjectSchema = exports.createProjectSchema = exports.getProjectSchema = exports.listProjectsSchema = exports.modifyCodeSchema = exports.generateCodeSchema = void 0;
|
|
10
|
+
const zod_1 = require("zod");
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// Shared enums
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
const videoFormat = zod_1.z.enum(['landscape', 'portrait', 'square']).optional();
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// Code generation
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
exports.generateCodeSchema = zod_1.z.object({
|
|
19
|
+
prompt: zod_1.z.string().describe('Description of the video to generate. Be specific about animations, colors, timing, and content.'),
|
|
20
|
+
format: videoFormat.describe('Video format. Defaults to landscape (1920x1080).'),
|
|
21
|
+
});
|
|
22
|
+
exports.modifyCodeSchema = zod_1.z.object({
|
|
23
|
+
code: zod_1.z.string().describe('The existing Remotion code to modify.'),
|
|
24
|
+
instruction: zod_1.z.string().describe('Instructions for how to modify the code.'),
|
|
25
|
+
});
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// Projects
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
exports.listProjectsSchema = zod_1.z.object({});
|
|
30
|
+
exports.getProjectSchema = zod_1.z.object({
|
|
31
|
+
projectId: zod_1.z.string().describe('The project ID.'),
|
|
32
|
+
});
|
|
33
|
+
exports.createProjectSchema = zod_1.z.object({
|
|
34
|
+
name: zod_1.z.string().describe('Name for the project.'),
|
|
35
|
+
code: zod_1.z.string().optional().describe('Optional initial Remotion code.'),
|
|
36
|
+
format: videoFormat.describe('Video format. Defaults to landscape.'),
|
|
37
|
+
});
|
|
38
|
+
exports.updateProjectSchema = zod_1.z.object({
|
|
39
|
+
projectId: zod_1.z.string().describe('The project ID.'),
|
|
40
|
+
name: zod_1.z.string().optional().describe('New name for the project.'),
|
|
41
|
+
code: zod_1.z.string().optional().describe('Updated Remotion code.'),
|
|
42
|
+
});
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
// Rendering
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
exports.renderVideoSchema = zod_1.z.object({
|
|
47
|
+
projectId: zod_1.z.string().describe('The project ID to render.'),
|
|
48
|
+
});
|
|
49
|
+
exports.getRenderStatusSchema = zod_1.z.object({
|
|
50
|
+
renderId: zod_1.z.string().describe('The render ID returned from framlit_render_video.'),
|
|
51
|
+
});
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
// Templates
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
exports.listTemplatesSchema = zod_1.z.object({
|
|
56
|
+
category: zod_1.z.string().optional().describe('Filter by category (e.g., "social", "product", "logo").'),
|
|
57
|
+
official: zod_1.z.boolean().optional().describe('If true, only show official Framlit templates. If false, show community templates.'),
|
|
58
|
+
});
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
// Credits
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
exports.getCreditsSchema = zod_1.z.object({});
|
|
63
|
+
// ---------------------------------------------------------------------------
|
|
64
|
+
// Preview
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
exports.previewCodeSchema = zod_1.z.object({
|
|
67
|
+
code: zod_1.z.string().describe('The Remotion code to preview.'),
|
|
68
|
+
});
|
|
69
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/core/schemas.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,6BAAwB;AAExB,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E,MAAM,WAAW,GAAG,OAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AAE3E,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAEjE,QAAA,kBAAkB,GAAG,OAAC,CAAC,MAAM,CAAC;IACzC,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kGAAkG,CAAC;IAC/H,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,kDAAkD,CAAC;CACjF,CAAC,CAAC;AAEU,QAAA,gBAAgB,GAAG,OAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAClE,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;CAC7E,CAAC,CAAC;AAEH,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAEjE,QAAA,kBAAkB,GAAG,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAElC,QAAA,gBAAgB,GAAG,OAAC,CAAC,MAAM,CAAC;IACvC,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;CAClD,CAAC,CAAC;AAEU,QAAA,mBAAmB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IAClD,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACvE,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,sCAAsC,CAAC;CACrE,CAAC,CAAC;AAEU,QAAA,mBAAmB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC1C,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACjD,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACjE,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;CAC/D,CAAC,CAAC;AAEH,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAEjE,QAAA,iBAAiB,GAAG,OAAC,CAAC,MAAM,CAAC;IACxC,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;CAC5D,CAAC,CAAC;AAEU,QAAA,qBAAqB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC5C,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;CACnF,CAAC,CAAC;AAEH,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAEjE,QAAA,mBAAmB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC1C,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;IACnG,QAAQ,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oFAAoF,CAAC;CAChI,CAAC,CAAC;AAEH,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAEjE,QAAA,gBAAgB,GAAG,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAE7C,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAEjE,QAAA,iBAAiB,GAAG,OAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CAC3D,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* MCP server for AI-powered video generation via Framlit.
|
|
6
|
-
* Enables IDE integration for creating Remotion videos.
|
|
3
|
+
* Backward-compatible entry point.
|
|
4
|
+
* Delegates to the MCP server.
|
|
7
5
|
*/
|
|
8
|
-
|
|
6
|
+
import './mcp/server.js';
|
|
9
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,iBAAiB,CAAC"}
|