gamma-mcp
README.md
# Gamma MCP Server
MCP server for [Gamma.app](https://gamma.app) - AI-powered presentation, document, and website generation.
## Features
- **Generate from scratch** - Create presentations, documents, social posts, or webpages from text
- **Create from template** - Adapt existing Gamma templates with new content
- **List themes** - Browse available themes for styling
- **List folders** - Browse workspace folders for organization
- **Poll generation status** - Check when async generation completes
## Installation
```bash
npm install @purple-horizons/gamma-mcp
```
Or clone and build:
```bash
git clone https://github.com/Purple-Horizons/gamma-mcp.git
cd gamma-mcp
npm install
npm run build
```
## Configuration
### Environment Variable
Set your Gamma API key:
```bash
export GAMMA_API_KEY=sk-gamma-xxxxxxxx
```
Get your API key from [Gamma Account Settings](https://gamma.app/settings) (requires Pro, Ultra, Teams, or Business plan).
### Claude Desktop / OpenClaw
Add to your MCP config:
```json
{
"mcpServers": {
"gamma": {
"command": "node",
"args": ["/path/to/gamma-mcp/dist/index.js"],
"env": {
"GAMMA_API_KEY": "sk-gamma-xxxxxxxx"
}
}
}
}
```
### mcporter
Add to `~/.config/mcporter/mcporter.json`:
```json
{
"servers": {
"gamma": {
"command": "node",
"args": ["/path/to/gamma-mcp/dist/index.js"],
"env": {
"GAMMA_API_KEY": "sk-gamma-xxxxxxxx"
}
}
}
}
```
## Tools
### gamma_generate
Generate a new gamma from text input.
**Parameters:**
- `inputText` (required) - Content to generate from (text + image URLs)
- `textMode` (required) - `generate` | `condense` | `preserve`
- `format` - `presentation` | `document` | `social` | `webpage`
- `themeId` - Theme ID (from `gamma_list_themes`)
- `numCards` - Number of slides (1-60 for Pro, 1-75 for Ultra)
- `cardSplit` - `auto` | `inputTextBreaks`
- `additionalInstructions` - Extra generation guidance
- `folderIds` - Array of folder IDs to save to
- `exportAs` - `pdf` | `pptx`
- `textAmount` - `brief` | `medium` | `detailed` | `extensive`
- `textTone` - Tone description (e.g., "professional, inspiring")
- `textAudience` - Target audience
- `textLanguage` - Language code (default: "en")
- `imageSource` - `aiGenerated` | `pictographic` | `pexels` | `giphy` | `webAllImages` | `webFreeToUse` | `webFreeToUseCommercially` | `placeholder` | `noImages`
- `imageModel` - AI model for images (e.g., "flux-1-pro", "imagen-4-pro")
- `imageStyle` - Image style description
- `dimensions` - Card dimensions (format-dependent)
**Returns:** `{ generationId: "..." }`
### gamma_get_generation
Check generation status.
**Parameters:**
- `generationId` (required) - ID from gamma_generate
**Returns:**
```json
{
"status": "pending" | "completed",
"generationId": "...",
"gammaUrl": "https://gamma.app/docs/...",
"credits": { "deducted": 150, "remaining": 3000 }
}
```
### gamma_create_from_template
Create a gamma based on an existing template.
**Parameters:**
- `gammaId` (required) - Template gamma ID
- `prompt` (required) - Instructions and content
- `themeId` - Override theme
- `folderIds` - Destination folders
- `exportAs` - `pdf` | `pptx`
- `imageModel` - AI model for new images
- `imageStyle` - Style for new images
**Returns:** `{ generationId: "..." }`
### gamma_list_themes
List available themes.
**Parameters:**
- `query` - Search by name
- `limit` - Max results (default 50)
- `after` - Pagination cursor
**Returns:**
```json
{
"data": [{ "id": "...", "name": "...", "type": "standard|custom" }],
"hasMore": false,
"nextCursor": null
}
```
### gamma_list_folders
List workspace folders.
**Parameters:**
- `query` - Search by name
- `limit` - Max results (default 50)
- `after` - Pagination cursor
**Returns:**
```json
{
"data": [{ "id": "...", "name": "..." }],
"hasMore": false,
"nextCursor": null
}
```
## Usage Example
```javascript
// 1. Generate a presentation
const gen = await gamma_generate({
inputText: "5 ways AI is transforming healthcare",
textMode: "generate",
format: "presentation",
numCards: 10,
imageSource: "aiGenerated",
imageStyle: "modern, professional photography"
});
// 2. Poll for completion
let status;
do {
await sleep(5000);
status = await gamma_get_generation({ generationId: gen.generationId });
} while (status.status === "pending");
// 3. Use the result
console.log(status.gammaUrl); // https://gamma.app/docs/xxxxx
```
## Credits
Gamma uses a credit-based system:
- ~3-4 credits per card
- ~2-120 credits per image (depends on model)
Check your remaining credits in the generation response.
## License
MIT
TDQS
A3.8/5.0
Scored across 5 tools
Disambiguation5/5
Each tool targets a distinct operation: creating from template, generating new content, polling status, listing folders, and listing themes. No overlap.
Naming Consistency5/5
All tools follow a consistent 'gamma_verb_noun' pattern, with verbs like create_from_template, generate, get_generation, list_folders, list_themes.
Tool Count5/5
Five tools is well-scoped for a presentation/document generation server, covering creation, status polling, and resource listing without excess.
Completeness4/5
Covers the core workflow (generate, poll, list resources), but is missing delete or update operations for folders or themes, which are minor gaps.
Maintenance
ActivityInactive
ResponsivenessNo issues