{
  "markdown": "# @lumiclip/mcp-server\n\nTurn long videos into short clips — from Claude, Cursor, or any AI assistant that supports MCP.\n\nGive it a YouTube link. It finds the best moments, reframes for vertical video (9:16), adds subtitles, and returns download-ready clips.\n\n[![smithery badge](https://smithery.ai/badge/lumiclip/lumiclip)](https://smithery.ai/servers/lumiclip/lumiclip) [![Lumiclip MCP server](https://glama.ai/mcp/servers/lumiclip/lumiclip-mcp-server/badges/card.svg)](https://glama.ai/mcp/servers/lumiclip/lumiclip-mcp-server)\n\n## Quick Start\n\n1. Get an API key at [app.lumiclip.ai/developers](https://app.lumiclip.ai/developers)\n2. Run:\n\n```bash\nLUMICLIP_API_KEY=sk_live_... npx @lumiclip/mcp-server\n```\n\n## Setup\n\n### Claude Desktop / Cursor\n\nAdd to your config file — `claude_desktop_config.json` for Claude, `.cursor/mcp.json` for Cursor:\n\n```json\n{\n  \"mcpServers\": {\n    \"lumiclip\": {\n      \"command\": \"npx\",\n      \"args\": [\"@lumiclip/mcp-server\"],\n      \"env\": {\n        \"LUMICLIP_API_KEY\": \"sk_live_...\"\n      }\n    }\n  }\n}\n```\n\n### Cursor Directory\n\n[Install in Cursor](https://cursor.directory/plugins/mcp-lumiclip)\n\n### Smithery\n\n```bash\nnpx @smithery/cli mcp add lumiclip/lumiclip\n```\n\n### Remote (Streamable HTTP)\n\nFor n8n, custom integrations, or any client that supports remote MCP:\n\n- **Endpoint:** `https://mcp.lumiclip.ai/mcp`\n- **Auth:** `Authorization: Bearer sk_live_...`\n- **Transport:** Streamable HTTP (POST)\n\n## Tools\n\n| Tool | What it does |\n|---|---|\n| `generate_clips` | Start clip generation from a YouTube URL. Returns a `project_id` right away. |\n| `get_project_status` | Check progress and get clips when ready. Clips are sorted by score (best first). |\n| `list_projects` | List your projects with status and clip counts. |\n| `get_clip` | Get full details for a single clip. |\n| `check_usage` | See your plan, remaining credits, and usage. |\n\n## How It Works\n\n1. Call `generate_clips` with a YouTube URL\n2. Get back a `project_id` immediately\n3. Poll `get_project_status` every 10–15 seconds (or pass a `callback_url` for webhook)\n4. When done, clips are sorted by score (best first), each with a `download_url`\n\n### Statuses\n\n**Project:** `pending` → `processing` → `completed` (or `completed_no_clips` / `failed`)\n\n**Processing steps:** `queued` → `DOWNLOADING_VIDEO` → `EXTRACTING_AUDIO` → `TRANSCRIBING` → `DETECTING_HIGHLIGHTS` → `CUTTING_CLIPS` → `EXPORTING_CLIPS` → `done`\n\n**Clips:** `pending` → `exporting` → `completed` (or `failed`). The `download_url` is available when `clip_status` is `completed`.\n\n## API Reference\n\n### `generate_clips`\n\nStart clip generation from a YouTube video.\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `url` | string | Yes | Full YouTube video URL |\n| `start_time` | number | No | Start time in seconds (to process only a segment) |\n| `end_time` | number | No | End time in seconds (to process only a segment) |\n| `callback_url` | string | No | Webhook URL to receive results when done |\n\n```json\n{\n  \"project_id\": \"43dbe622-8ac6-4579-9625-0ad7f0f9db0b\",\n  \"status\": \"processing\",\n  \"poll_url\": \"/api/v1/projects/43dbe622-8ac6-4579-9625-0ad7f0f9db0b\",\n  \"estimated_minutes\": 5,\n  \"message\": \"Processing started. Poll with get_project_status every 10-15 seconds until status is 'completed'.\"\n}\n```\n\n### `get_project_status`\n\nCheck progress and get clips.\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `project_id` | string | Yes | The project ID from `generate_clips` |\n\n```json\n{\n  \"id\": \"43dbe622-...\",\n  \"name\": \"Video Title\",\n  \"status\": \"completed\",\n  \"step\": \"done\",\n  \"error\": null,\n  \"expected_clips\": 9,\n  \"duration\": 639,\n  \"created_at\": \"2026-03-15T02:21:46.226Z\",\n  \"clips\": [\n    {\n      \"id\": \"32538b9c-...\",\n      \"title\": \"One Dating Theory Leads to Chaos\",\n      \"duration\": 41.83,\n      \"score\": 90,\n      \"reason\": \"Sharp universal joke that hooks instantly with strong reactions.\",\n      \"clip_status\": \"completed\",\n      \"download_url\": \"https://cdn.lumiclip.ai/exports/premium/.../clip-32538b9c-....mp4\",\n      \"quality\": \"1080p\",\n      \"thumbnail_url\": \"https://cdn.lumiclip.ai/exports/premium/.../clip-32538b9c-...-thumb.jpg\",\n      \"created_at\": \"2026-03-15T02:29:10.954Z\",\n      \"updated_at\": \"2026-03-15T02:30:43.907Z\"\n    }\n  ]\n}\n```\n\nClips are sorted by `score` (highest first).\n\n### `list_projects`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `limit` | number | No | Max projects to return. Default 20, max 100. |\n| `status` | string | No | Filter: `pending`, `processing`, `completed`, `completed_no_clips`, `failed` |\n\n```json\n{\n  \"projects\": [\n    {\n      \"id\": \"43dbe622-...\",\n      \"name\": \"Video Title\",\n      \"status\": \"completed\",\n      \"step\": \"done\",\n      \"expected_clips\": 9,\n      \"clips_count\": 8,\n      \"duration\": 639,\n      \"created_at\": \"2026-03-15T02:21:46.226Z\"\n    }\n  ],\n  \"total\": 1,\n  \"limit\": 20,\n  \"offset\": 0\n}\n```\n\n### `get_clip`\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `clip_id` | string | Yes | The clip ID from a project's clips array |\n\n```json\n{\n  \"id\": \"32538b9c-...\",\n  \"project_id\": \"43dbe622-...\",\n  \"title\": \"One Dating Theory Leads to Chaos\",\n  \"duration\": 41.83,\n  \"score\": 90,\n  \"reason\": \"Sharp universal joke that hooks instantly.\",\n  \"export_status\": \"completed\",\n  \"export_quality\": \"1080p\",\n  \"is_exported\": true,\n  \"video_url\": \"https://cdn.lumiclip.ai/...\",\n  \"video_url_720p\": \"https://cdn.lumiclip.ai/...\",\n  \"video_url_1080p\": \"https://cdn.lumiclip.ai/...\",\n  \"thumbnail_url\": \"https://cdn.lumiclip.ai/...\",\n  \"created_at\": \"2026-03-15T02:29:10.954Z\",\n  \"updated_at\": \"2026-03-15T02:30:43.907Z\"\n}\n```\n\n### `check_usage`\n\nNo input required.\n\n```json\n{\n  \"plan\": \"pro\",\n  \"credits_remaining\": 450,\n  \"credits_total\": 500,\n  \"period_start\": \"2026-03-01T00:00:00.000Z\",\n  \"period_end\": \"2026-04-01T00:00:00.000Z\"\n}\n```\n\n## Errors\n\n| HTTP Status | Error | What to do |\n|---|---|---|\n| 400 | Invalid YouTube URL | Check the URL format |\n| 401 | Unauthorized | Check your API key |\n| 402 | Insufficient credits | Buy more credits or use a shorter video |\n| 429 | Rate limit exceeded | Wait and try again |\n| 500 | Internal server error | Try again later |\n\n## Webhooks\n\nPass a `callback_url` when calling `generate_clips` to receive a POST when all clips are ready.\n\n**Completed:**\n\n```json\n{\n  \"event\": \"project.completed\",\n  \"project_id\": \"43dbe622-...\",\n  \"status\": \"completed\",\n  \"source_url\": \"https://www.youtube.com/watch?v=H51iLa1leOU\",\n  \"clips\": [\n    {\n      \"id\": \"32538b9c-...\",\n      \"title\": \"One Dating Theory Leads to Chaos\",\n      \"duration\": 41.83,\n      \"score\": 90,\n      \"download_url\": \"https://cdn.lumiclip.ai/exports/premium/.../clip-32538b9c-....mp4\",\n      \"thumbnail_url\": \"https://cdn.lumiclip.ai/exports/premium/.../clip-32538b9c-...-thumb.jpg\",\n      \"quality\": \"1080p\"\n    }\n  ]\n}\n```\n\n**Failed:**\n\n```json\n{\n  \"event\": \"project.failed\",\n  \"project_id\": \"43dbe622-...\",\n  \"status\": \"failed\",\n  \"error\": \"YouTube video is unavailable\",\n  \"clips\": []\n}\n```\n\nClips are sorted by score (highest first). We retry up to 3 times if your server doesn't respond.\n\n**Signature verification (optional):** Each callback includes an `X-Lumiclip-Signature` header. Compute `HMAC-SHA256` of the request body using `SHA-256(your_api_key)` as the signing key. Compare with the header value (`sha256=<hex>`).\n\n## Using with n8n\n\n**Option A — Webhook (recommended):**\n\n1. Create a workflow with a **Webhook** trigger node. Copy its URL.\n2. Add an **HTTP Request** node: `POST https://api.lumiclip.ai/api/v1/clips/generate` with Header Auth (`Authorization: Bearer sk_live_...`) and body:\n   ```json\n   {\n     \"url\": \"https://www.youtube.com/watch?v=...\",\n     \"callback_url\": \"https://your-n8n.com/webhook/abc123\"\n   }\n   ```\n3. When clips are ready, the Webhook node receives the payload.\n4. Best clip: `{{ $json.clips[0].download_url }}`\n\n**Option B — Polling loop:**\n\n1. `POST` to generate clips (same as above, without `callback_url`).\n2. **Wait** 15 seconds → **GET** `https://api.lumiclip.ai/api/v1/projects/{{ $json.project_id }}` → **IF** status is not `completed`, loop back to Wait.\n\n## REST API\n\nFor direct HTTP calls without MCP:\n\n| Method | Endpoint | Description |\n|---|---|---|\n| `POST` | `/api/v1/clips/generate` | Start clip generation |\n| `GET` | `/api/v1/projects/:id` | Get project status and clips |\n| `GET` | `/api/v1/projects` | List projects |\n| `GET` | `/api/v1/clips/:id` | Get single clip details |\n| `GET` | `/api/v1/account/usage` | Check credits and plan |\n\nBase URL: `https://api.lumiclip.ai` — All endpoints require `Authorization: Bearer sk_live_...`\n\n## Environment Variables\n\n| Variable | Required | Default |\n|---|---|---|\n| `LUMICLIP_API_KEY` | Yes | — |\n| `LUMICLIP_API_URL` | No | `https://api.lumiclip.ai` |\n\n## Links\n\n- Website: [lumiclip.ai](https://lumiclip.ai)\n- API key: [app.lumiclip.ai/developers](https://app.lumiclip.ai/developers)\n- Pricing: [lumiclip.ai/pricing](https://lumiclip.ai/pricing)\n\n## License\n\nMIT\n",
  "bytes": 8997,
  "sha": "a49bcb272eb7ba6732c8e85da9bb6c98ac94e8f626dce2b06b6d4fe7ab7668b8",
  "repo_slug": "lumiclip/lumiclip-mcp-server",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_lumiclip_lumiclip_786af1b5/readme"
}