get_project_status
Retrieve project status and clips for a video clipping project. Poll every 10-15 seconds until status is 'completed' to get download URLs.
Instructions
Returns a JSON object with id, name, status (pending/processing/completed/completed_no_clips/failed), step, error, expected_clips, duration, created_at, and a clips array. Clips are sorted by score (highest first). Each clip has: id, title, duration, score, reason, clip_status (pending/exporting/completed/failed), download_url (string or null), quality, thumbnail_url, created_at, updated_at. The download_url is only available when clip_status is 'completed'. Poll every 10-15 seconds until project status is 'completed'.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project ID returned by generate_clips |
Implementation Reference
- src/server.ts:115-149 (handler)The handler function for the 'get_project_status' tool. It calls the API endpoint GET /api/v1/projects/{project_id} and returns the project status as a JSON string. Registered via server.tool() in the same file.
server.tool( "get_project_status", "Returns a JSON object with id, name, status (pending/processing/completed/completed_no_clips/failed), step, error, expected_clips, duration, created_at, and a clips array. Clips are sorted by score (highest first). Each clip has: id, title, duration, score, reason, clip_status (pending/exporting/completed/failed), download_url (string or null), quality, thumbnail_url, created_at, updated_at. The download_url is only available when clip_status is 'completed'. Poll every 10-15 seconds until project status is 'completed'.", { project_id: z .string() .describe("The project ID returned by generate_clips"), }, { title: "Get Project Status", readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true, }, async ({ project_id }) => { try { const project = await apiCall(config, "GET", `/projects/${project_id}`); return { content: [ { type: "text" as const, text: JSON.stringify(project, null, 2), }, ], }; } catch (err: unknown) { const message = err instanceof Error ? err.message : String(err); return { content: [{ type: "text" as const, text: `Error: ${message}` }], isError: true, }; } } ); - src/server.ts:118-122 (schema)Input schema for get_project_status: requires a single 'project_id' string parameter defined using Zod.
{ project_id: z .string() .describe("The project ID returned by generate_clips"), }, - src/server.ts:115-149 (registration)Tool registration via server.tool('get_project_status', ...) on the McpServer instance.
server.tool( "get_project_status", "Returns a JSON object with id, name, status (pending/processing/completed/completed_no_clips/failed), step, error, expected_clips, duration, created_at, and a clips array. Clips are sorted by score (highest first). Each clip has: id, title, duration, score, reason, clip_status (pending/exporting/completed/failed), download_url (string or null), quality, thumbnail_url, created_at, updated_at. The download_url is only available when clip_status is 'completed'. Poll every 10-15 seconds until project status is 'completed'.", { project_id: z .string() .describe("The project ID returned by generate_clips"), }, { title: "Get Project Status", readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true, }, async ({ project_id }) => { try { const project = await apiCall(config, "GET", `/projects/${project_id}`); return { content: [ { type: "text" as const, text: JSON.stringify(project, null, 2), }, ], }; } catch (err: unknown) { const message = err instanceof Error ? err.message : String(err); return { content: [{ type: "text" as const, text: `Error: ${message}` }], isError: true, }; } } ); - src/http.ts:41-49 (schema)Public-facing tool schema definition for get_project_status in the server card JSON, describing input (project_id string) and output.
{ name: "get_project_status", description: "Returns {id, name, status, step, error, expected_clips, duration, clips[]}. Clips sorted by score, each with clip_status (pending/exporting/completed/failed) and download_url when ready.", inputSchema: { type: "object", properties: { project_id: { type: "string", description: "The project ID returned by generate_clips." } }, required: ["project_id"], }, }, - src/http.ts:41-49 (registration)Registration in the MCP server card manifest at /.well-known/mcp/server-card.json listing get_project_status as an available tool.
{ name: "get_project_status", description: "Returns {id, name, status, step, error, expected_clips, duration, clips[]}. Clips sorted by score, each with clip_status (pending/exporting/completed/failed) and download_url when ready.", inputSchema: { type: "object", properties: { project_id: { type: "string", description: "The project ID returned by generate_clips." } }, required: ["project_id"], }, },