makeslates-mcp-server 0.1.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 ADDED
@@ -0,0 +1,151 @@
1
+ # MakeSlates MCP Server
2
+
3
+ AI-powered slide deck creation for Cursor, Claude Code, and other MCP clients.
4
+
5
+ Create beautiful presentations with natural language - just describe what you want, and the AI builds it for you.
6
+
7
+ ## Quick Start
8
+
9
+ ### 1. Get Your API Key
10
+
11
+ 1. Go to [makeslates.com/settings](https://makeslates.com/settings)
12
+ 2. Sign in and generate an API key
13
+ 3. Copy your `sk_live_...` key
14
+
15
+ ### 2. Configure Your MCP Client
16
+
17
+ #### For Cursor
18
+
19
+ Add to your Cursor MCP settings (`~/.cursor/mcp.json`):
20
+
21
+ ```json
22
+ {
23
+ "mcpServers": {
24
+ "makeslates": {
25
+ "command": "npx",
26
+ "args": ["-y", "makeslates-mcp-server"],
27
+ "env": {
28
+ "MAKESLATES_API_KEY": "sk_live_your_key_here"
29
+ }
30
+ }
31
+ }
32
+ }
33
+ ```
34
+
35
+ #### For Claude Code
36
+
37
+ Add to `~/.claude/claude_desktop_config.json`:
38
+
39
+ ```json
40
+ {
41
+ "mcpServers": {
42
+ "makeslates": {
43
+ "command": "npx",
44
+ "args": ["-y", "makeslates-mcp-server"],
45
+ "env": {
46
+ "MAKESLATES_API_KEY": "sk_live_your_key_here"
47
+ }
48
+ }
49
+ }
50
+ }
51
+ ```
52
+
53
+ #### For Claude Desktop
54
+
55
+ Add to your Claude Desktop config:
56
+
57
+ ```json
58
+ {
59
+ "mcpServers": {
60
+ "makeslates": {
61
+ "command": "npx",
62
+ "args": ["-y", "makeslates-mcp-server"],
63
+ "env": {
64
+ "MAKESLATES_API_KEY": "sk_live_your_key_here"
65
+ }
66
+ }
67
+ }
68
+ }
69
+ ```
70
+
71
+ ### 3. Start Creating!
72
+
73
+ Once configured, you can ask your AI assistant things like:
74
+
75
+ - "Create a pitch deck for my AI startup"
76
+ - "Make a presentation about Q4 results with charts"
77
+ - "Build slides explaining our new product features"
78
+
79
+ ## Available Tools
80
+
81
+ | Tool | Description |
82
+ |------|-------------|
83
+ | `list_templates` | List all slide templates (call this first!) |
84
+ | `create_presentation_with_slides` | Create a full presentation in one call |
85
+ | `list_presentations` | List your presentations |
86
+ | `get_presentation` | Get a presentation with all slides |
87
+ | `add_slide_from_template` | Add a slide using a template |
88
+ | `update_slide` | Update slide content |
89
+ | `delete_slide` | Remove a slide |
90
+ | `get_upload_url` | Get URL for image uploads |
91
+
92
+ ## Slide Templates
93
+
94
+ ### Opening Slides
95
+ - `image-full` - Full-bleed image with title (best for first slide)
96
+ - `title` - Title and subtitle
97
+ - `section` - Section divider
98
+
99
+ ### Content Slides
100
+ - `title-content` - Header with bullet points
101
+ - `two-column` - Side-by-side comparison
102
+ - `three-column` - Three parallel points
103
+ - `image-left` / `image-right` - Image with text
104
+
105
+ ### Impact Slides
106
+ - `big-number` - Single impressive metric
107
+ - `quote` - Featured quotation
108
+ - `statement` - Bold claim with visual
109
+
110
+ ### Data Slides
111
+ - `chart-bar` - Bar chart
112
+ - `chart-pie` - Pie chart
113
+ - `chart-line` - Line chart
114
+
115
+ ## Example Usage
116
+
117
+ ```javascript
118
+ // The AI will call these tools for you based on natural language
119
+
120
+ // 1. List available templates
121
+ list_templates()
122
+
123
+ // 2. Create a presentation
124
+ create_presentation_with_slides({
125
+ title: "Q4 Results",
126
+ darkMode: true,
127
+ slides: [
128
+ { template: "image-full", title: "Q4 2024 Results" },
129
+ { template: "big-number", number: "+34%", label: "Revenue Growth" },
130
+ { template: "chart-bar", title: "Revenue by Region", data: [...] },
131
+ { template: "two-column", title: "Key Wins", leftContent: "...", rightContent: "..." }
132
+ ]
133
+ })
134
+ ```
135
+
136
+ ## Environment Variables
137
+
138
+ | Variable | Description | Required |
139
+ |----------|-------------|----------|
140
+ | `MAKESLATES_API_KEY` | Your API key from makeslates.com | Yes |
141
+ | `MAKESLATES_API_URL` | Custom API URL (default: https://makeslates.com/api/mcp) | No |
142
+
143
+ ## Links
144
+
145
+ - **Website**: [makeslates.com](https://makeslates.com)
146
+ - **Documentation**: [makeslates.com/docs](https://makeslates.com/docs)
147
+ - **Issues**: [GitHub Issues](https://github.com/offscriptpontus/makeslates-mcp-server/issues)
148
+
149
+ ## License
150
+
151
+ MIT
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * MakeSlates MCP Server
4
+ *
5
+ * A stdio-based MCP server that bridges to the MakeSlates HTTP API.
6
+ * This allows Cursor, Claude Code, and other MCP clients to interact
7
+ * with MakeSlates presentations.
8
+ *
9
+ * Usage:
10
+ * MAKESLATES_API_KEY=sk_live_xxx npx @makeslates/mcp-server
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG"}
package/dist/index.js ADDED
@@ -0,0 +1,344 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * MakeSlates MCP Server
4
+ *
5
+ * A stdio-based MCP server that bridges to the MakeSlates HTTP API.
6
+ * This allows Cursor, Claude Code, and other MCP clients to interact
7
+ * with MakeSlates presentations.
8
+ *
9
+ * Usage:
10
+ * MAKESLATES_API_KEY=sk_live_xxx npx @makeslates/mcp-server
11
+ */
12
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
13
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
14
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
15
+ // ============================================================================
16
+ // Configuration
17
+ // ============================================================================
18
+ const API_URL = process.env.MAKESLATES_API_URL || "https://makeslates.com/api/mcp";
19
+ const API_KEY = process.env.MAKESLATES_API_KEY;
20
+ const SERVER_INFO = {
21
+ name: "makeslates-mcp",
22
+ version: "0.1.0",
23
+ };
24
+ // ============================================================================
25
+ // Tool Definitions (matches the HTTP API)
26
+ // ============================================================================
27
+ const TOOLS = [
28
+ {
29
+ name: "list_workspaces",
30
+ description: "List workspaces the user is a member of. Returns workspace id, name, slug, and role.",
31
+ inputSchema: {
32
+ type: "object",
33
+ properties: {},
34
+ },
35
+ },
36
+ {
37
+ name: "list_presentations",
38
+ description: "List presentations. Use workspaceId to filter by workspace, or omit for personal presentations.",
39
+ inputSchema: {
40
+ type: "object",
41
+ properties: {
42
+ workspaceId: { type: "string", description: "Workspace ID to filter by (omit for personal presentations)" },
43
+ limit: { type: "number", description: "Maximum number of presentations to return" },
44
+ search: { type: "string", description: "Search term to filter presentations by title" },
45
+ },
46
+ },
47
+ },
48
+ {
49
+ name: "get_presentation",
50
+ description: "Get a presentation by ID with all its slides and content",
51
+ inputSchema: {
52
+ type: "object",
53
+ properties: {
54
+ id: { type: "string", description: "The presentation ID" },
55
+ },
56
+ required: ["id"],
57
+ },
58
+ },
59
+ {
60
+ name: "create_presentation",
61
+ description: "Create a new empty presentation. Use create_presentation_with_slides for efficiency.",
62
+ inputSchema: {
63
+ type: "object",
64
+ properties: {
65
+ title: { type: "string", description: "Title of the presentation" },
66
+ workspaceId: { type: "string", description: "Workspace ID to create in (omit for personal)" },
67
+ darkMode: { type: "boolean", description: "Set to true for dark theme, false for light theme" },
68
+ },
69
+ required: ["title"],
70
+ },
71
+ },
72
+ {
73
+ name: "create_presentation_with_slides",
74
+ description: `Create a presentation with slides in one call.
75
+
76
+ Each slide needs a template ID and content fields. Use list_templates to see all templates and their contentFields.
77
+
78
+ Content fields map to element roles - pass them directly: { template: "big-number", number: "42%", label: "Growth" }`,
79
+ inputSchema: {
80
+ type: "object",
81
+ properties: {
82
+ title: { type: "string", description: "Title of the presentation" },
83
+ workspaceId: { type: "string", description: "Workspace ID to create in (omit for personal)" },
84
+ darkMode: { type: "boolean", description: "Set to true for dark theme" },
85
+ slides: {
86
+ type: "array",
87
+ items: {
88
+ type: "object",
89
+ properties: {
90
+ template: { type: "string", description: "Template ID" },
91
+ },
92
+ required: ["template"],
93
+ },
94
+ description: "Array of slides with template and content",
95
+ },
96
+ },
97
+ required: ["title", "slides"],
98
+ },
99
+ },
100
+ {
101
+ name: "update_presentation",
102
+ description: "Update a presentation's metadata. Use update_slide for slide content.",
103
+ inputSchema: {
104
+ type: "object",
105
+ properties: {
106
+ id: { type: "string", description: "The presentation ID" },
107
+ title: { type: "string", description: "New title" },
108
+ darkMode: { type: "boolean", description: "Set to true for dark theme, false for light theme" },
109
+ },
110
+ required: ["id"],
111
+ },
112
+ },
113
+ {
114
+ name: "delete_presentation",
115
+ description: "Soft-delete a presentation",
116
+ inputSchema: {
117
+ type: "object",
118
+ properties: {
119
+ id: { type: "string", description: "The presentation ID to delete" },
120
+ },
121
+ required: ["id"],
122
+ },
123
+ },
124
+ {
125
+ name: "move_presentation",
126
+ description: "Move a presentation to a different workspace, or to personal (no workspace). Only the presentation creator can move it.",
127
+ inputSchema: {
128
+ type: "object",
129
+ properties: {
130
+ id: { type: "string", description: "The presentation ID to move" },
131
+ workspaceId: { type: "string", description: "Target workspace ID, or omit/null to move to personal" },
132
+ },
133
+ required: ["id"],
134
+ },
135
+ },
136
+ {
137
+ name: "add_slide_from_template",
138
+ description: `THE ONLY WAY TO ADD SLIDES - Uses pre-designed templates.
139
+
140
+ ALWAYS use this tool. NEVER use add_slide.
141
+ Templates: title, section, image-full, two-column, quote, big-number, chart-bar, etc.
142
+
143
+ 1. Call list_templates first
144
+ 2. Pick the best template
145
+ 3. Use this tool to add the slide
146
+ 4. Use update_slide only to change text content`,
147
+ inputSchema: {
148
+ type: "object",
149
+ properties: {
150
+ presentationId: { type: "string", description: "The presentation ID" },
151
+ template: {
152
+ type: "string",
153
+ description: 'Template ID from list_templates (e.g. "title", "image-full", "two-column")',
154
+ },
155
+ position: { type: "number", description: "Position to insert (0-indexed). Omit to append." },
156
+ },
157
+ required: ["presentationId", "template"],
158
+ },
159
+ },
160
+ {
161
+ name: "update_slide",
162
+ description: `Update a slide's content. Replaces elements array entirely.
163
+
164
+ Design rules:
165
+ - backgroundColor: ALWAYS "default"
166
+ - font: ALWAYS "default"
167
+ - Text color: ALWAYS "default"`,
168
+ inputSchema: {
169
+ type: "object",
170
+ properties: {
171
+ presentationId: { type: "string", description: "The presentation ID" },
172
+ slideIndex: { type: "number", description: "Index of the slide to update (0-indexed)" },
173
+ backgroundColor: { type: "string", description: 'ALWAYS "default"' },
174
+ elements: {
175
+ type: "array",
176
+ description: "Array of elements. Each MUST have id, type, and position {x,y,width,height}",
177
+ },
178
+ },
179
+ required: ["presentationId", "slideIndex"],
180
+ },
181
+ },
182
+ {
183
+ name: "delete_slide",
184
+ description: "Delete a slide from a presentation",
185
+ inputSchema: {
186
+ type: "object",
187
+ properties: {
188
+ presentationId: { type: "string", description: "The presentation ID" },
189
+ slideIndex: { type: "number", description: "Index of the slide to delete (0-indexed)" },
190
+ },
191
+ required: ["presentationId", "slideIndex"],
192
+ },
193
+ },
194
+ {
195
+ name: "list_templates",
196
+ description: `MANDATORY FIRST STEP - List all available slide templates.
197
+
198
+ YOU MUST call this before adding any slides. Templates are the ONLY way to create good-looking slides.
199
+ Each template has perfect spacing, typography, and layout built-in.`,
200
+ inputSchema: {
201
+ type: "object",
202
+ properties: {},
203
+ },
204
+ },
205
+ {
206
+ name: "get_schema",
207
+ description: "Get schema reference. Usually not needed - just use templates.",
208
+ inputSchema: {
209
+ type: "object",
210
+ properties: {},
211
+ },
212
+ },
213
+ {
214
+ name: "get_upload_url",
215
+ description: `Get a presigned URL for fast direct image uploads.
216
+
217
+ Returns:
218
+ - uploadUrl: POST your image file here directly
219
+ - publicUrl: Use this URL in your slides after upload
220
+
221
+ This is MUCH faster than base64 encoding. Upload directly to storage.`,
222
+ inputSchema: {
223
+ type: "object",
224
+ properties: {
225
+ filename: { type: "string", description: 'Image filename (e.g. "hero.jpg", "chart.png")' },
226
+ contentType: { type: "string", description: 'MIME type (e.g. "image/jpeg", "image/png"). Defaults to image/jpeg' },
227
+ },
228
+ required: ["filename"],
229
+ },
230
+ },
231
+ ];
232
+ async function callHttpApi(method, params) {
233
+ if (!API_KEY) {
234
+ return {
235
+ jsonrpc: "2.0",
236
+ id: null,
237
+ error: {
238
+ code: -32000,
239
+ message: "MAKESLATES_API_KEY environment variable is not set. Get your API key at https://makeslates.com/settings",
240
+ },
241
+ };
242
+ }
243
+ const request = {
244
+ jsonrpc: "2.0",
245
+ id: Date.now(),
246
+ method,
247
+ params,
248
+ };
249
+ try {
250
+ const response = await fetch(API_URL, {
251
+ method: "POST",
252
+ headers: {
253
+ "Content-Type": "application/json",
254
+ Authorization: `Bearer ${API_KEY}`,
255
+ },
256
+ body: JSON.stringify(request),
257
+ });
258
+ if (!response.ok) {
259
+ const text = await response.text();
260
+ return {
261
+ jsonrpc: "2.0",
262
+ id: request.id,
263
+ error: {
264
+ code: -32000,
265
+ message: `HTTP ${response.status}: ${text}`,
266
+ },
267
+ };
268
+ }
269
+ return (await response.json());
270
+ }
271
+ catch (error) {
272
+ return {
273
+ jsonrpc: "2.0",
274
+ id: request.id,
275
+ error: {
276
+ code: -32000,
277
+ message: `Network error: ${error instanceof Error ? error.message : String(error)}`,
278
+ },
279
+ };
280
+ }
281
+ }
282
+ // ============================================================================
283
+ // MCP Server
284
+ // ============================================================================
285
+ async function main() {
286
+ // Check for API key early
287
+ if (!API_KEY) {
288
+ console.error("Error: MAKESLATES_API_KEY environment variable is required.");
289
+ console.error("");
290
+ console.error("To get an API key:");
291
+ console.error(" 1. Go to https://makeslates.com/settings");
292
+ console.error(" 2. Generate an API key");
293
+ console.error(" 3. Set it in your environment or MCP config");
294
+ console.error("");
295
+ console.error("Example:");
296
+ console.error(' MAKESLATES_API_KEY=sk_live_xxx npx @makeslates/mcp-server');
297
+ process.exit(1);
298
+ }
299
+ const server = new Server(SERVER_INFO, {
300
+ capabilities: {
301
+ tools: {},
302
+ },
303
+ });
304
+ // Handle tools/list
305
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
306
+ return { tools: TOOLS };
307
+ });
308
+ // Handle tools/call
309
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
310
+ const { name, arguments: args } = request.params;
311
+ // Forward to HTTP API
312
+ const response = await callHttpApi("tools/call", {
313
+ name,
314
+ arguments: args,
315
+ });
316
+ if (response.error) {
317
+ return {
318
+ content: [
319
+ {
320
+ type: "text",
321
+ text: `Error: ${response.error.message}`,
322
+ },
323
+ ],
324
+ isError: true,
325
+ };
326
+ }
327
+ // The HTTP API returns { content: [{ type: "text", text: "..." }] }
328
+ const result = response.result;
329
+ return {
330
+ content: result?.content || [{ type: "text", text: JSON.stringify(result) }],
331
+ isError: result?.isError,
332
+ };
333
+ });
334
+ // Connect via stdio
335
+ const transport = new StdioServerTransport();
336
+ await server.connect(transport);
337
+ // Log to stderr (stdio is used for MCP communication)
338
+ console.error(`MakeSlates MCP server started (API: ${API_URL})`);
339
+ }
340
+ main().catch((error) => {
341
+ console.error("Fatal error:", error);
342
+ process.exit(1);
343
+ });
344
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "makeslates-mcp-server",
3
+ "version": "0.1.0",
4
+ "description": "MCP server for MakeSlates - AI-powered slide deck creation",
5
+ "author": "MakeSlates",
6
+ "license": "MIT",
7
+ "type": "module",
8
+ "main": "dist/index.js",
9
+ "bin": {
10
+ "makeslates-mcp": "dist/index.js"
11
+ },
12
+ "files": [
13
+ "dist"
14
+ ],
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "dev": "tsc --watch",
18
+ "prepare": "npm run build",
19
+ "start": "node dist/index.js"
20
+ },
21
+ "dependencies": {
22
+ "@modelcontextprotocol/sdk": "^1.25.2"
23
+ },
24
+ "devDependencies": {
25
+ "@types/node": "^20.0.0",
26
+ "typescript": "^5.0.0"
27
+ },
28
+ "engines": {
29
+ "node": ">=18"
30
+ },
31
+ "keywords": [
32
+ "mcp",
33
+ "model-context-protocol",
34
+ "cursor",
35
+ "claude",
36
+ "ai",
37
+ "slides",
38
+ "presentations",
39
+ "makeslates"
40
+ ],
41
+ "repository": {
42
+ "type": "git",
43
+ "url": "https://github.com/offscriptpontus/makeslates-mcp-server.git"
44
+ },
45
+ "homepage": "https://makeslates.com",
46
+ "bugs": {
47
+ "url": "https://github.com/offscriptpontus/makeslates-mcp-server/issues"
48
+ }
49
+ }