Skip to main content
Glama
lumiclip

mcp-lumiclip

Official

list_projects

Read-onlyIdempotent

Retrieve a list of video clipping projects with details like status and clip counts. Filter by status to find completed or failed projects.

Instructions

Returns a JSON object with projects (array), total, limit, and offset. Each project has: id, name, status, step, expected_clips, clips_count, duration, created_at. Use the status filter to find only completed or failed projects.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of projects to return. Defaults to 20, maximum 100.
statusNoFilter results to only projects with this status.

Implementation Reference

  • The handler function for the list_projects tool. It accepts optional limit and status parameters, constructs a query string, calls the GET /projects API endpoing, and returns the JSON result. On error, it returns an isError response.
    async ({ limit, status }) => {
      try {
        const params = new URLSearchParams();
        if (limit) params.set("limit", String(limit));
        if (status) params.set("status", status);
        const qs = params.toString();
        const result = await apiCall(
          config,
          "GET",
          `/projects${qs ? `?${qs}` : ""}`
        );
        return {
          content: [
            { type: "text" as const, text: JSON.stringify(result, 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:151-201 (registration)
    Registration of the list_projects tool using server.tool() with name 'list_projects', description, Zod schema for input validation (limit: optional number, status: optional enum), and metadata hints.
    server.tool(
      "list_projects",
      "Returns a JSON object with projects (array), total, limit, and offset. Each project has: id, name, status, step, expected_clips, clips_count, duration, created_at. Use the status filter to find only completed or failed projects.",
      {
        limit: z
          .number()
          .optional()
          .describe("Maximum number of projects to return. Defaults to 20, maximum 100."),
        status: z
          .enum([
            "pending",
            "processing",
            "completed",
            "completed_no_clips",
            "failed",
          ])
          .optional()
          .describe("Filter results to only projects with this status."),
      },
      {
        title: "List Projects",
        readOnlyHint: true,
        destructiveHint: false,
        idempotentHint: true,
        openWorldHint: true,
      },
      async ({ limit, status }) => {
        try {
          const params = new URLSearchParams();
          if (limit) params.set("limit", String(limit));
          if (status) params.set("status", status);
          const qs = params.toString();
          const result = await apiCall(
            config,
            "GET",
            `/projects${qs ? `?${qs}` : ""}`
          );
          return {
            content: [
              { type: "text" as const, text: JSON.stringify(result, 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 definition for list_projects using Zod. Defines optional 'limit' (number, max 100) and optional 'status' (enum: pending, processing, completed, completed_no_clips, failed).
    {
      limit: z
        .number()
        .optional()
        .describe("Maximum number of projects to return. Defaults to 20, maximum 100."),
      status: z
        .enum([
          "pending",
          "processing",
          "completed",
          "completed_no_clips",
          "failed",
        ])
        .optional()
        .describe("Filter results to only projects with this status."),
  • src/http.ts:50-60 (registration)
    Static listing of the list_projects tool in the MCP server card JSON at /.well-known/mcp/server-card.json, providing name, description and inputSchema for tool discovery.
    {
      name: "list_projects",
      description: "Returns {projects[], total, limit, offset}. Each project has id, name, status, step, expected_clips, clips_count, duration, created_at.",
      inputSchema: {
        type: "object",
        properties: {
          limit: { type: "number", description: "Maximum projects to return. Defaults to 20, max 100." },
          status: { type: "string", enum: ["pending", "processing", "completed", "completed_no_clips", "failed"], description: "Filter by status." },
        },
      },
    },
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive, openWorldHint. The description adds the response structure (fields like total, offset) but does not disclose behavioral traits beyond annotations, such as pagination defaults or rate limits.

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

Conciseness5/5

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

The description is two sentences: first states the return structure, second gives a usage tip. No wasted words, front-loaded with the most important information, earning its space.

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 two parameters, full schema coverage, and no output schema, the description adequately outlines the response shape (projects array, pagination fields, project attributes). Could mention default limit (20) and max (100) from schema, but overall complete for a list tool.

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 coverage is 100% with clear descriptions for 'limit' and 'status'. The description adds marginal value by suggesting use of status filter for completed/failed projects, but does not provide new meaning beyond the schema's enum values.

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 specifies it returns a JSON object with paginated list of projects and their fields (id, name, status, etc.). This distinguishes it from siblings like get_project_status (single project) or generate_clips (generation), providing a clear verb+resource scope.

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 for listing projects with optional status filtering ('Use the status filter to find only completed or failed projects') but does not explicitly state when to prefer this tool over siblings like get_project_status or check_usage, nor are there when-not-to-use guidelines.

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