MCP server for managing restaurant data and photos. Provides tools for searching, viewing, and managing a restaurant database with photo upload capabilities.
Three tools with significant definition gaps. 'code' has a lengthy description (1200+ chars) with embedded examples and API docs, but lacks formal input schema validation and parameter constraints. 'upload_photo' and 'view_photos' have minimal descriptions (under 50 chars) and single parameters with no type constraints or validation guidance. No tool declares output schemas. No error handling guidance. No tool annotations (readOnlyHint/destructiveHint). The 'code' tool is particularly risky: it accepts arbitrary JavaScript execution with minimal safeguards documented.
飯屋データを操作するJavaScriptコードを実行する。yusukebe が登録した飯屋の検索・閲覧ができる。 【重要】飯屋を登録・更新する際は必ずデータを正規化すること: - 店名はGoogle Mapsや公式情報から正式名称を使う(例: ×「あのラーメン屋」→ ○「麺屋 一燈」) - エリアは最寄り駅や地名で統一(例: 「東京都新宿区」ではなく「新宿」) - ジャンルは簡潔に(例: ラーメン、寿司、イタリアン、中華、カレー、焼肉) - Google MapsのURLがわかる場合は必ず含める - memoに入れるコメントは誤字・脱字を修正し、読みやすく整えてから登録する 利用可能なAPI: interface Restaurant { id: number name: string area: string | null genre: string | null memo: string | null rating: number | null google_maps_url: string | null created_at: string updated_at: string } declare const meshi: { search(input: { query?: string; area?: string; genre?: string }): Promise<Restaurant[]> get(input: { id: number }): Promise<Restaurant | null> list(input?: { limit?: number; offset?: number }): Promise<Restaurant[]> add(input: { name: string; area?: string; genre?: string; memo?: string; rating?: number; google_maps_url?: string }): Promise<{ id: number }> update(input: { id: number; name?: string; area?: string; genre?: string; memo?: string; rating?: number; google_maps_url?: string }): Promise<void> delete(input: { id: number }): Promise<void> } コード例: // 渋谷のラーメン屋を検索 const shops = await meshi.search({ genre: "ラーメン", area: "渋谷" }) return shops // 全店舗を取得して評価順にソート const all = await meshi.list({ limit: 100 }) return all.filter(r => r.rating).sort((a, b) => b.rating - a.rating)
飯屋に写真をアップロードするUIを表示する。ユーザーがファイルを選んでアップロードできる。
飯屋の写真をギャラリー形式で表示する。写真一覧をUIで閲覧できる。
Arbitrary code execution tool ('code') lacks input validation, timeout constraints, and error recovery guidance. Description embeds API docs and examples instead of LLM-optimized guidance on when/why to use it.
'upload_photo' and 'view_photos' descriptions are under 50 characters and lack context. No guidance on prerequisites, expected outcomes, or error cases. LLM cannot determine when to select these tools.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., photo IDs, URLs, error details).
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). 'code' and 'upload_photo' are destructive but unmarked. LLM cannot reason about side effects or retry safety.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 45 | 2025-06-18+ | v2 |
'code' tool accepts 'code' parameter as free-form string with no length limits, timeout constraints, or sandbox guarantees. No guidance on what APIs are available, what happens on error, or how to recover from timeouts.