補助金情報提供MCPサーバー - MCP server that provides Japanese government grants (jGrants) search functionality via the jGrants public API
The server defines 3 tools with varying quality. search_subsidies has a detailed, lengthy description (1000+ chars) with good parameter documentation and clear constraints from the jGrants API. However, descriptions are overly verbose for LLM consumption (exceed 1024 char guidance), parameters lack proper type definitions in schema (missing 'type' fields), and the ping tool is a legacy pattern. The get_subsidy_overview tool has a moderate description but also lacks formal parameter schemas. Error handling is basic (returns {error: ...} dict) with minimal guidance for recovery. No tool annotations (readOnlyHint, destructiveHint) are present. The codebase shows path traversal protection and HTTP timeout handling, which is good for security, but parameter validation is minimal and no confirmation patterns for destructive ops exist.
補助金の最新状況を把握します。締切期間別、金額規模別の集計を提供。 実装メモ(APIに存在しない集計のため、サーバー内で算出) - まず search_subsidies(GET /subsidies)を呼び、取得結果に対して集計します。 - 受付中や締切までの日数は、acceptance_end_datetime を現在時刻と比較して算出します。 - 金額は subsidy_max_limit を数値化して分類します(未設定は "unspecified")。
サーバーの応答を確認するためのユーティリティ。 MCP仕様に従い、空の結果を返します。
高度な検索条件で補助金を検索します。 このツールは jGrants 公開APIの "補助金検索" をラップしています。 - jGrants ポータル: https://www.jgrants-portal.go.jp/ - ベースURL: https://api.jgrants-portal.go.jp/exp/v1/public - エンドポイント: GET /subsidies - 公式ドキュメント: https://developers.digital.go.jp/documents/jgrants/api/
search_subsidies parameter schema lacks type definitions. Parameters are documented in the docstring but the @mcp.tool() decorator does not show explicit JSON Schema type/items/properties. Schema parsing from function signature hints only, no formal schema validation visible.
search_subsidies description is 1100+ characters, exceeding the 1024 char recommended maximum. While comprehensive, this wastes tokens and buries key details. LLM descriptions should be 50 - 200 chars with constraints formalized as enums/patterns in schema, not repeated in prose.
get_subsidy_overview has minimal schema, output_format parameter has a description and default, but no formal enum constraint. Should declare enum: ["json", "csv"] in schema, not just prose.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 48 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 25 | - | v1 |
ping tool is a legacy MCP v0.x pattern (removed in spec 2026-07-28). It provides no value, LLM agents do not call ping proactively, and the server is stateless so connectivity checks are implicit in regular tool calls.
Error handling returns plain {error: ...} dicts with minimal guidance. Errors like 'エラーが発生しました' (generic 'an error occurred') do not tell the LLM what to do next or whether to retry. No recovery paths or error classification.
No tool annotations (toolAnnotations=false). read-only tools should declare readOnlyHint=true. This helps agents understand that these calls have no side effects and are safe to retry without confirmation.
search_subsidies accepts free-form strings for use_purpose, industry, target_number_of_employees, target_area_search instead of enums. Docstring lists valid values (e.g., '新たな事業を行いたい', '製造業') but schema does not enforce them. LLM can hallucinate invalid values.
Output schema for search_subsidies is implicit. Response structure (total_count, subsidies, search_conditions) is documented in prose but no formal JSON Schema definition is provided to the client.