search_law
Search Japanese labor and social insurance laws by keyword using the e-Gov API. Find relevant legal texts when you don't know the specific law name.
Instructions
労働・社会保険関連の法令をキーワードで検索する。法令名が分からない場合に使用。e-Gov法令API v2を使用。
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes | 検索キーワード。例: "労働基準", "雇用保険", "安全衛生", "育児休業", "厚生年金" | |
| law_type | No | 法令種別で絞り込み。Act=法律, CabinetOrder=政令(施行令), MinisterialOrdinance=省令(施行規則) | |
| limit | No | 取得件数(デフォルト10、最大20) |
Implementation Reference
- src/tools/search-law.ts:20-56 (handler)The handler function in search_law.ts executes the searchLaw logic and formats the tool response.
async (args) => { try { const result = await searchLaw({ keyword: args.keyword, lawType: args.law_type, limit: args.limit, }); if (result.results.length === 0) { return { content: [{ type: 'text' as const, text: `"${args.keyword}" に一致する法令が見つかりませんでした。\nキーワードを変えて再検索してください(例: 類義語や略称を試す)。\nまた、get_law で法令名を直接指定して条文を取得することもできます。`, }], }; } const lines = result.results.map((r, i) => `${i + 1}. **${r.lawTitle}**\n 法令番号: ${r.lawNum}\n law_id: ${r.lawId}\n 種別: ${r.lawType}\n URL: ${r.egovUrl}` ); return { content: [{ type: 'text' as const, text: `# 法令検索結果: "${args.keyword}"\n\n${lines.join('\n\n')}\n\n---\n出典:e-Gov法令検索(デジタル庁)`, }], }; } catch (error) { return { content: [{ type: 'text' as const, text: `エラー: ${error instanceof Error ? error.message : String(error)}`, }], isError: true, }; } } - src/tools/search-law.ts:5-58 (registration)The tool 'search_law' is registered here using the server.tool method.
export function registerSearchLawTool(server: McpServer) { server.tool( 'search_law', '労働・社会保険関連の法令をキーワードで検索する。法令名が分からない場合に使用。e-Gov法令API v2を使用。', { keyword: z.string().describe( '検索キーワード。例: "労働基準", "雇用保険", "安全衛生", "育児休業", "厚生年金"' ), law_type: z.enum(['Act', 'CabinetOrder', 'MinisterialOrdinance']).optional().describe( '法令種別で絞り込み。Act=法律, CabinetOrder=政令(施行令), MinisterialOrdinance=省令(施行規則)' ), limit: z.number().optional().describe( '取得件数(デフォルト10、最大20)' ), }, async (args) => { try { const result = await searchLaw({ keyword: args.keyword, lawType: args.law_type, limit: args.limit, }); if (result.results.length === 0) { return { content: [{ type: 'text' as const, text: `"${args.keyword}" に一致する法令が見つかりませんでした。\nキーワードを変えて再検索してください(例: 類義語や略称を試す)。\nまた、get_law で法令名を直接指定して条文を取得することもできます。`, }], }; } const lines = result.results.map((r, i) => `${i + 1}. **${r.lawTitle}**\n 法令番号: ${r.lawNum}\n law_id: ${r.lawId}\n 種別: ${r.lawType}\n URL: ${r.egovUrl}` ); return { content: [{ type: 'text' as const, text: `# 法令検索結果: "${args.keyword}"\n\n${lines.join('\n\n')}\n\n---\n出典:e-Gov法令検索(デジタル庁)`, }], }; } catch (error) { return { content: [{ type: 'text' as const, text: `エラー: ${error instanceof Error ? error.message : String(error)}`, }], isError: true, }; } } ); } - The actual business logic 'searchLaw' that interacts with the e-Gov API is defined here.
export async function searchLaw(params: { keyword: string; lawType?: string; limit?: number; }): Promise<SearchLawResult> { const limit = Math.min(params.limit ?? 10, 20); const results = await searchLaws(params.keyword, limit, params.lawType); return { keyword: params.keyword, results: results.map((r: EgovLawSearchResult) => ({ lawTitle: r.revision_info?.law_title ?? r.current_revision_info?.law_title ?? '', lawId: r.law_info.law_id, lawNum: r.law_info.law_num, lawType: r.law_info.law_type, egovUrl: getEgovUrl(r.law_info.law_id), })), }; }