MCP server exposing 2slides.com tools (slides generate, jobs get, themes search)
This server exposes 5 well-defined tools with explicit Zod schemas, clear descriptions, and proper parameter validation. All tools have explicit schema definitions visible in src/server.ts with complete parameter typing (string, enum, number, boolean). Descriptions are detailed and include usage guidance, credit costs, and parameter ranges. However, there are notable gaps: (1) output schemas are not documented, responses are serialized JSON with no type hints for the LLM; (2) error handling returns raw JSON without actionable guidance; (3) tool names could be more verb-first consistent; (4) no parameter descriptions for all inputs (e.g., 'referenceImageUrl' in slides_create_like_this lacks a description beyond 'URL of the reference image'). The server handles secrets correctly (API_KEY via env), validates enum constraints, and provides reasonable defaults. Naming is mostly clear but not perfectly verb-driven (e.g., 'slides_generate' vs 'generate_slides' would be more consistent with verb-first patterns).
Get job status and result by jobId. Poll every 20 seconds until status is 'success' or 'failed'. Response fields: jobId, status (pending/processing/success/failed), message, downloadUrl (when success), slidePageCount, createdAt, updatedAt, duration (ms), jobUrl (Nano Banana jobs only). Free — no credits charged.
Generate slides (Nano Banana) that match the style of a reference image. mode defaults to 'async' — returns jobId to poll with jobs_get; 'sync' returns downloadUrl immediately. aspectRatio valid values: 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9 (default), 21:9. resolution: '1K', '2K' (default), '4K'. page: 0=auto-detect (default), 1-100=exact count. contentDetail: 'concise' or 'standard' (default). responseLanguage defaults to 'Auto'. Credits: 100 per page (1K/2K) or 200 per page (4K).
Generate custom-designed slides (Nano Banana) from text content without a reference image. mode defaults to 'async' — returns jobId to poll with jobs_get; 'sync' returns downloadUrl immediately. designStyle is optional free-text describing the visual style (leave empty for default styling). aspectRatio valid values: 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9 (default), 21:9. resolution: '1K', '2K' (default), '4K'. page: 0=auto-detect (default), 1-100=exact count. contentDetail: 'concise' or 'standard' (default). responseLanguage defaults to 'Auto'. Credits: 100 per page (1K/2K) or 200 per page (4K).
Generate a PowerPoint presentation using pre-built themes (Fast PPT). Use themes_search first to get a themeId. mode='sync' (default) returns downloadUrl immediately; mode='async' returns a jobId to poll with jobs_get. responseLanguage defaults to 'Auto' (auto-detect); supported values: Auto, English, Spanish, Arabic, Portuguese, Indonesian, Japanese, Russian, Hindi, French, German, Greek, Vietnamese, Turkish, Thai, Polish, Italian, Korean, Simplified Chinese, Traditional Chinese. Credits: 1 per page.
Output schemas not documented. Responses are JSON serialized without type hints for downstream tool chaining. LLMs cannot infer what fields to expect (e.g., what does 'success' response from slides_generate contain?) or plan downstream calls.
Error responses return raw JSON (data, null, 2) without actionable guidance. A failed API call provides no hint about what the agent should do next (retry? ask user? call a different tool?). Example: 'isError: true' with opaque JSON violates error classification pattern.
Tool naming inconsistency. Some tools use noun_verb (slides_generate) instead of verb_noun (generate_slides). This makes it harder for LLMs to parse intent from name alone. Inconsistent naming across tools increases disambiguation overhead.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 69 | 2026-07-28+ | v2 |
| 2026-03-09 | C | 61 | - | v1 |
Search pre-built themes for slides_generate (Fast PPT). Returns theme objects with id, name, description, previewUrl, and tags. Use the returned id as themeId in slides_generate. limit defaults to 10, max 100. Free — no credits charged.
Parameter descriptions are minimal. 'referenceImageUrl' in slides_create_like_this is described only as 'URL of the reference image for style matching', no format constraints, size limits, or supported image formats mentioned. This forces LLMs to guess valid input.
No documentation of response fields for job polling. jobs_get description mentions 'jobId, status, message, downloadUrl...' as returned fields, but the actual response structure is not formally documented as a schema. LLMs cannot reliably extract fields or detect when a job transitions to terminal states.