Skip to main content
Glama

project_details

Retrieve project metadata including name, terms count, and last activity to prepare for translation management operations in POEditor.

Instructions

Retrieve project metadata such as name, terms count, and last activity. Useful before performing other operations on the project.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
project_idNo

Implementation Reference

  • Handler function for the 'project_details' tool. It resolves the project ID using the helper, calls the POEditor API endpoint 'projects/view', extracts the project object from the response, and returns it formatted as JSON text content.
    async (args) => {
      const id = requireProjectId(args.project_id ?? null);
      const res = await poeditor("projects/view", { id: String(id) });
      const project = res.result?.project ?? res.result ?? {};
      return { content: [{ type: "text", text: JSON.stringify(project, null, 2) }] };
    }
  • Zod input schema for the 'project_details' tool, accepting an optional positive integer project_id.
    const ProjectDetailsInput = z.object({
      project_id: z.number().int().positive().optional()
    });
  • src/server.ts:140-150 (registration)
    Registration of the 'project_details' tool on the MCP server using server.tool(), including the tool name, description, input schema reference, and inline handler implementation.
    server.tool(
      "project_details",
      "Retrieve project metadata such as name, terms count, and last activity. Useful before performing other operations on the project.",
      ProjectDetailsInput.shape,
      async (args) => {
        const id = requireProjectId(args.project_id ?? null);
        const res = await poeditor("projects/view", { id: String(id) });
        const project = res.result?.project ?? res.result ?? {};
        return { content: [{ type: "text", text: JSON.stringify(project, null, 2) }] };
      }
    );
  • Helper function used by the project_details handler (and others) to resolve the project ID from tool arguments or the POEDITOR_PROJECT_ID environment variable.
    function requireProjectId(argProjectId?: number | null) {
      const id = argProjectId ?? (PROJECT_ID ? Number(PROJECT_ID) : null);
      if (!id) throw new Error("project_id is required (either pass it to the tool or set POEDITOR_PROJECT_ID)");
      return id;
    }
  • Core helper function for making authenticated API requests to POEditor, used by the project_details handler to fetch project details.
    export async function poeditor(endpoint: string, form: Record<string, string>) {
      const body = new URLSearchParams({ api_token: API_TOKEN!, ...form });
      const { body: resBody } = await request(`${API_BASE}/${endpoint}`, {
        method: "POST",
        headers: { "Content-Type": "application/x-www-form-urlencoded" },
        body: body.toString()
      });
      const text = await resBody.text();
      let json: any;
      try { json = JSON.parse(text); } catch (e) {
        throw new Error(`POEditor: invalid JSON response: ${text}`);
      }
      const status = json?.response?.status;
      if (status !== "success") {
        const code = json?.response?.code;
        const message = json?.response?.message || "Unknown POEditor error";
        throw new Error(`POEditor API error ${code ?? ""}: ${message}`);
      }
      return json;
    }
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It mentions retrieving metadata but doesn't disclose behavioral traits such as required permissions, error handling, rate limits, or whether the operation is idempotent. For a read operation with zero annotation coverage, this leaves significant gaps in understanding how the tool behaves.

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, front-loaded with the core purpose and followed by a usage hint. Every word earns its place with no redundancy or fluff, making it highly efficient and easy to scan.

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

Completeness3/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 parameter, no output schema, no annotations), the description is adequate but incomplete. It covers the purpose and hints at usage but lacks behavioral details and output information. For a metadata retrieval tool, this is minimally viable but leaves gaps in understanding the full context.

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

Parameters4/5

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

The description doesn't mention parameters, but the input schema has only one parameter (project_id) with 0% schema description coverage. Since there are zero parameters documented in the schema, the baseline is 4, as the description doesn't need to compensate for missing param info. However, it doesn't add any semantic context about the project_id beyond what the schema provides.

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

Purpose4/5

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

The description clearly states the verb 'retrieve' and the resource 'project metadata', specifying concrete attributes like name, terms count, and last activity. It distinguishes from siblings by focusing on metadata retrieval rather than modifications or listings, though it doesn't explicitly name alternatives.

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 provides implied usage guidance with 'useful before performing other operations on the project', suggesting a preparatory role. However, it doesn't explicitly state when to use this tool versus alternatives like list_terms or update_terms, nor does it mention exclusions or prerequisites.

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/ryan-shaw/poeditor-mcp'

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