From a4c2072a6f95095b201e66bdf73749849662e194 Mon Sep 17 00:00:00 2001 From: ishii-masaki Date: Wed, 11 Mar 2026 14:48:32 +0900 Subject: [PATCH] fix: make metadata fields optional to handle missing API responses The Gyazo API may return images without metadata or with null metadata fields. This caused runtime errors when accessing metadata properties. Updated the GyazoImage type and added optional chaining where metadata is accessed. Co-Authored-By: Claude Opus 4.6 --- src/handlers/resources.ts | 2 +- src/types.ts | 10 +++++----- src/utils.ts | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/handlers/resources.ts b/src/handlers/resources.ts index 13ca326..60bb92b 100644 --- a/src/handlers/resources.ts +++ b/src/handlers/resources.ts @@ -21,7 +21,7 @@ export const listResourcesHandler = { resources: gyazoImages.map((gyazoImage) => ({ uri: `gyazo-mcp:///${gyazoImage.image_id}`, mimeType: `image/${gyazoImage.type}`, - name: gyazoImage.metadata.title || gyazoImage.image_id, + name: gyazoImage.metadata?.title || gyazoImage.image_id, })), }; } catch (error) { diff --git a/src/types.ts b/src/types.ts index 5597c18..63aad01 100644 --- a/src/types.ts +++ b/src/types.ts @@ -12,11 +12,11 @@ export type GyazoImage = { url: string; type: string; created_at: string; - metadata: { - app: string; - title: string; - url: string; - desc: string; + metadata?: { + app?: string | null; + title?: string | null; + url?: string | null; + desc?: string | null; }; ocr?: { locale: string; diff --git a/src/utils.ts b/src/utils.ts index caed230..3658c10 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -9,16 +9,16 @@ import { GyazoImage } from "./types.js"; */ export function getImageMetadataMarkdown(gyazoImage: GyazoImage): string { let imageMetadataMarkdown = ""; - if (gyazoImage.metadata.title) { + if (gyazoImage.metadata?.title) { imageMetadataMarkdown += `### Title:\n${gyazoImage.metadata.title}\n\n`; } - if (gyazoImage.metadata.desc) { + if (gyazoImage.metadata?.desc) { imageMetadataMarkdown += `### Description:\n${gyazoImage.metadata.desc}\n\n`; } - if (gyazoImage.metadata.app) { + if (gyazoImage.metadata?.app) { imageMetadataMarkdown += `### App:\n${gyazoImage.metadata.app}\n\n`; } - if (gyazoImage.metadata.url) { + if (gyazoImage.metadata?.url) { imageMetadataMarkdown += `### URL:\n${gyazoImage.metadata.url}\n\n`; } if (gyazoImage.ocr?.description) {