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
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Project ID (UUID) | |
| summary | No | Lightweight 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 ); } } - apps/mcp-server/src/tools/project-get.ts:169-194 (registration)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"], }, };