MCP server — let Claude & AI agents remove the "Made with Gamma" watermark from PDF/PPTX exports, locally.
Server has 4 tools with clear naming (verb_noun pattern) and reasonable descriptions (100-250 chars). Input schemas are present with type definitions. However, output schemas are undocumented, LLMs cannot predict return structure. Error handling is minimal (no recovery guidance). Tool #2 and #3 share the same name 'remove_gamma_watermark' across different files, creating confusion. Parameter descriptions are adequate but lack format constraints (e.g., file path validation rules, base64 size limits not in schema). No tool annotations (readOnlyHint/destructiveHint). Composition is sound, each tool has one responsibility.
Explain what this server removes, how, and its privacy model.
Check whether a file is a supported Gamma export format (.pdf / .pptx). Args: file_path: path to the file to check. Returns: Whether the file can be processed, with guidance if not.
Remove the "Made with Gamma" watermark from a PDF or PPTX file. Args: file_path: absolute path to the Gamma-exported .pdf or .pptx file. output_path: optional absolute path for the cleaned file. Defaults to "<name>-no-watermark.<ext>" next to the input. Returns: A summary of what was removed and where the cleaned file was written.
Remove the "Made with Gamma" watermark from a PDF or PPTX file. Args: filename: original file name incl. extension (.pdf or .pptx) — used to pick the engine. content_base64: the file's raw bytes, base64-encoded (max ~30MB decoded). Returns: dict with: removed (watermark objects deleted), units (pages or slide/layout units scanned), may_remain (True if a flattened badge could not be removed structurally), cleaned_base64 (the cleaned file, base64 — save it with the suggested_filename).
Duplicate tool name 'remove_gamma_watermark' in server.py and http_server.py. LLMs cannot distinguish between file-based and base64 variants; both appear as the same tool to clients.
Output schemas are not documented. remove_gamma_watermark returns a dict with fields (removed, units, may_remain, cleaned_base64, suggested_filename) but LLMs have no schema to predict structure. Violates pattern:tool requirement for documented return types.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). remove_gamma_watermark modifies files but lacks destructiveHint. check_gamma_watermark_support is read-only but lacks readOnlyHint. Agents cannot infer safety properties.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Error handling lacks recovery guidance. Errors return plain strings ('Error: file not found', 'Error: only .pdf and .pptx supported') without actionable next steps. Pattern:recovery-guide requires 'Try X instead' or 'Valid options are Y'.
Parameter constraints not in schema. file_path must be absolute; content_base64 has a 30MB limit; filename must end in .pdf or .pptx. These constraints are documented in docstrings but not in JSON Schema (no pattern, maxLength, enum). LLMs cannot validate before calling.