Skip to main content
Glama
lumiclip

mcp-lumiclip

Official

get_clip

Read-onlyIdempotent

Retrieve comprehensive details of a video clip by its unique ID. Returns export status, resolution options (720p/1080p), video URLs, thumbnail, and other metadata from your Lumiclip project.

Instructions

Returns a JSON object with full clip details: id, project_id, title, duration, score, reason, export_status, export_quality (720p/1080p), is_exported, video_url, video_url_720p, video_url_1080p, thumbnail_url, created_at, updated_at.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
clip_idYesThe unique clip ID from a project's clips array.

Implementation Reference

  • The get_clip tool handler function. It takes clip_id, calls GET /clips/{clip_id} via the apiCall helper, and returns the clip JSON.
      async ({ clip_id }) => {
        try {
          const clip = await apiCall(config, "GET", `/clips/${clip_id}`);
          return {
            content: [
              { type: "text" as const, text: JSON.stringify(clip, 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,
          };
        }
      }
    );
  • Input schema for get_clip: requires clip_id (string).
    {
      clip_id: z.string().describe("The unique clip ID from a project's clips array."),
    },
  • src/server.ts:203-232 (registration)
    Tool registration using server.tool('get_clip', ...) with description, input schema, metadata hints, and handler.
    server.tool(
      "get_clip",
      "Returns a JSON object with full clip details: id, project_id, title, duration, score, reason, export_status, export_quality (720p/1080p), is_exported, video_url, video_url_720p, video_url_1080p, thumbnail_url, created_at, updated_at.",
      {
        clip_id: z.string().describe("The unique clip ID from a project's clips array."),
      },
      {
        title: "Get Clip",
        readOnlyHint: true,
        destructiveHint: false,
        idempotentHint: true,
        openWorldHint: true,
      },
      async ({ clip_id }) => {
        try {
          const clip = await apiCall(config, "GET", `/clips/${clip_id}`);
          return {
            content: [
              { type: "text" as const, text: JSON.stringify(clip, 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:61-69 (registration)
    Tool definition in the server card JSON, listing get_clip name, description, and input schema for the .well-known endpoint.
    {
      name: "get_clip",
      description: "Returns full clip details: id, project_id, title, duration, score, reason, export_status, export_quality, is_exported, video_url, thumbnail_url.",
      inputSchema: {
        type: "object",
        properties: { clip_id: { type: "string", description: "The unique clip ID from a project's clips array." } },
        required: ["clip_id"],
      },
    },
  • The apiCall helper used by get_clip handler to make authenticated HTTP requests to the Lumiclip API.
    async function apiCall(
      config: ApiConfig,
      method: string,
      path: string,
      body?: unknown
    ) {
      const base = config.apiBase || "https://api.lumiclip.ai";
      const url = `${base}/api/v1${path}`;
      const res = await fetch(url, {
        method,
        headers: {
          Authorization: `Bearer ${config.apiKey}`,
          "Content-Type": "application/json",
        },
        ...(body ? { body: JSON.stringify(body) } : {}),
      });
    
      const data = (await res.json()) as Record<string, unknown>;
    
      if (!res.ok) {
        throw new Error(
          (data.error as string) ||
            (data.message as string) ||
            `API error ${res.status}`
        );
      }
    
      return data;
    }
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint true and destructiveHint false, making the read-only nature clear. The description adds detail about return field names and format (e.g., export_quality values 720p/1080p), but does not disclose other behavioral traits such as rate limits, authorization requirements, or error handling. Extra context is minor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that lists all return fields efficiently, with the purpose right at the start. No repetitive or extraneous content. Slightly dense due to the long list, but still well-structured for quick scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (one required parameter, no output schema, no nested objects), the description covers the purpose and return fields adequately. It specifies certain field formats (export_quality values) which adds value. Some missing context about potential errors or the requirement that the clip exist, but overall sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description for clip_id is complete ('The unique clip ID from a project's clips array') and coverage is 100%. The description adds no further parameter semantics because the schema already provides sufficient meaning. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns a JSON object with full clip details, listing specific fields. The verb 'Returns' and resource 'clip details' indicate a retrieval operation. Sibling tools like 'generate_clips' (creation) and 'list_projects' (listing) are distinct, so this tool is unambiguously for fetching a single clip's details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when needing full details of a specific clip, but it does not explicitly state when not to use it (e.g., for listing clips) or suggest alternatives. No guidance on prerequisites (e.g., clip must exist) or context for selection among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/lumiclip/lumiclip-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server