Japanese postal code ⇄ address lookup with bundled official data — fully offline, no API key.
Two well-defined tools with complete input schemas, clear descriptions in Japanese, and proper parameter typing. Both tools are read-only, offline postal/address lookups with sensible defaults (limit clamped 1 - 200, default 50). Descriptions are concise (120 - 180 chars) and explain use cases. However, output schemas are not formally documented in the code, only inferred from JSON.stringify() calls. Parameter descriptions are present but minimal (e.g., 'limit' lacks range/default clarity in schema). Error messages are actionable but responses are unstructured JSON strings rather than typed objects. No tool annotations (readOnlyHint, idempotentHint) despite both tools being read-only and idempotent.
日本の郵便番号から住所を検索する。7桁は完全一致、3〜6桁は前方一致。ハイフン・全角数字も受け付ける。完全オフライン(同梱の日本郵便公式データを使用)。
住所の文字列(漢字またはカナの部分一致)から郵便番号を検索する。都道府県・市区町村・町域のいずれにもマッチする。完全オフライン(同梱の日本郵便公式データを使用)。
Output schemas not formally documented. Tools return JSON strings via text content type; LLMs cannot parse structure without explicit schema declaration. Responses include fields like 'normalizedZipcode', 'matchType', 'total', 'returned', 'records', 'dataVersion' but these are not declared in tool definitions.
Parameter 'limit' description lacks explicit range and default. Schema shows type 'number' but description only states '返却件数の上限(既定50)' (default 50). No min/max bounds documented; code clamps to 1 - 200 but this is invisible to LLM.
No tool annotations despite both tools being read-only and idempotent. Missing readOnlyHint and idempotentHint would help agents understand retry safety and side-effect profile.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Error responses return isError: true with JSON-stringified error objects. No structured error classification (retryable vs user-fixable vs fatal). LLM cannot distinguish 'invalid input' from 'service unavailable'.
Parameter 'zipcode' description includes example values ('5220317', '060-0000', '〒100−0001') which LLMs may reuse literally. Should use format/pattern constraints instead.