Skip to main content
Glama

project.get

Retrieve web design project details by ID, including layout, quality scores, and semantic analysis from structured design knowledge.

Instructions

Get project details by ID.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesProject ID (UUID)
summaryNoLightweight mode: returns id, name, status only (default: true)

Implementation Reference

  • The handler function that executes the logic for 'project.get', including input validation, service interaction, error handling, and response formatting.
    export async function projectGetHandler(input: unknown): Promise<ProjectGetResponse> {
      // router.tsから注入された_request_idを使用、フォールバックとして自動生成
      const requestId =
        ((input as Record<string, unknown> | null)?._request_id as string | undefined) ??
        generateRequestId();
    
      // 開発環境でのログ出力
      if (isDevelopment()) {
        logger.info("[MCP Tool] project.get called", { input, requestId });
      }
    
      // 入力バリデーション
      let validated: ProjectGetInput;
      try {
        validated = projectGetInputSchema.parse(input);
      } catch (error) {
        if (error instanceof ZodError) {
          const errorMessage = error.errors.map((e) => `${e.path.join(".")}: ${e.message}`).join(", ");
    
          if (isDevelopment()) {
            logger.error("[MCP Tool] project.get validation error", {
              errors: error.errors,
              requestId,
            });
          }
    
          return createErrorResponseWithRequestId(
            ErrorCode.VALIDATION_ERROR,
            `入力バリデーションエラー: ${errorMessage}`,
            requestId,
            error.errors // details(開発環境のみ含まれる)
          );
        }
        // 予期せぬエラー
        return createErrorResponseWithRequestId(
          ErrorCode.INTERNAL_ERROR,
          "入力処理中に予期せぬエラーが発生しました",
          requestId
        );
      }
    
      try {
        // API呼び出し
        const result = await serviceClient.getProject(validated.id);
    
        // 存在しないIDの場合(ServiceClientでnullを返す)
        if (result === null) {
          if (isDevelopment()) {
            logger.warn("[MCP Tool] project.get - Project not found", {
              id: validated.id,
              requestId,
            });
          }
    
          return createErrorResponseWithRequestId(
            ErrorCode.PROJECT_NOT_FOUND,
            `指定されたIDのプロジェクトが見つかりません: ${validated.id}`,
            requestId
          );
        }
    
        if (isDevelopment()) {
          logger.info("[MCP Tool] project.get completed", {
            id: validated.id,
            name: result.name,
            summary: validated.summary,
            requestId,
          });
        }
    
        // summaryモードの場合は軽量レスポンスを返す(id, name, statusのみ)
        if (validated.summary) {
          const summaryData: ProjectGetSummaryOutput = {
            id: result.id,
            name: result.name,
            status: result.status,
            _summary_mode: true,
          };
    
          if (isDevelopment()) {
            logger.info("[MCP Tool] project.get returning summary response", {
              id: result.id,
              requestId,
            });
          }
    
          return createSuccessResponseWithRequestId(summaryData, requestId);
        }
    
        // フルレスポンス
        const fullData: ProjectGetOutput = {
          id: result.id,
          name: result.name,
          slug: result.slug,
          description: result.description,
          status: result.status,
          createdAt: result.createdAt,
          updatedAt: result.updatedAt,
          brandSetting: result.brandSetting ?? null,
        };
    
        return createSuccessResponseWithRequestId(fullData, requestId);
      } catch (error) {
        if (isDevelopment()) {
          logger.error("[MCP Tool] project.get API error", { error, requestId });
        }
    
        // 認証エラーのチェック
        if (error instanceof Error && error.message.includes("UNAUTHORIZED")) {
          return createErrorResponseWithRequestId(ErrorCode.UNAUTHORIZED, "認証が必要です", requestId);
        }
    
        return createErrorResponseWithRequestId(
          ErrorCode.INTERNAL_ERROR,
          "プロジェクト取得中にエラーが発生しました",
          requestId,
          error instanceof Error ? error.message : undefined
        );
      }
    }
  • The definition object for the 'project.get' tool, including its schema and metadata.
    export const projectGetToolDefinition = {
      name: "project.get",
      description: "Get project details by ID.",
      annotations: {
        title: "Project Get",
        readOnlyHint: true,
        idempotentHint: true,
        openWorldHint: false,
      },
      inputSchema: {
        type: "object" as const,
        properties: {
          id: {
            type: "string",
            format: "uuid",
            description: "Project ID (UUID)",
          },
          summary: {
            type: "boolean",
            description: "Lightweight mode: returns id, name, status only (default: true)",
            default: true,
          },
        },
        required: ["id"],
      },
    };

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/TKMD/reftrix-mcp'

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