search_english_law
Search English translations of Korean laws by statute name or keyword. Supports pagination and sorting by date or name.
Instructions
[영문] 영문 법령 검색.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | 법령명 검색어 (영문 또는 한글, 예: 'Customs Act', '관세법') | |
| display | Yes | 페이지당 결과 개수 (기본값: 20, 최대: 100) | |
| page | Yes | 페이지 번호 (기본값: 1) | |
| sort | No | 정렬 옵션: lasc/ldes (법령명순), dasc/ddes (날짜순) | |
| apiKey | No | 법제처 Open API 인증키(OC). 사용자가 제공한 경우 전달 |
Implementation Reference
- src/tools/english-law.ts:19-98 (handler)Main handler function for the search_english_law tool. Takes a LawApiClient and SearchEnglishLawInput, fetches the law search API endpoint 'lawSearch.do' with target 'elaw', parses the XML response to extract law entries, and returns formatted results with Korean/English law names, effective dates, and links.
export async function searchEnglishLaw( apiClient: LawApiClient, args: SearchEnglishLawInput ): Promise<{ content: Array<{ type: string, text: string }>, isError?: boolean }> { try { const extraParams: Record<string, string> = { display: (args.display || 20).toString(), page: (args.page || 1).toString(), }; if (args.query) extraParams.query = args.query; if (args.sort) extraParams.sort = args.sort; const xmlText = await apiClient.fetchApi({ endpoint: "lawSearch.do", target: "elaw", extraParams, apiKey: args.apiKey, }); // parseSearchXML 사용 (rootTag: "" = 전체 XML, itemTag: law) // 영문법령 API는 루트 태그가 일정하지 않아 전체 XML에서 추출 const { totalCnt, page: currentPage, items: allLaws } = parseSearchXML( xmlText, "", "law", (content) => ({ 법령ID: extractTag(content, "법령ID"), 영문법령명: extractTag(content, "법령명영문"), 한글법령명: stripHtml(extractTag(content, "법령명한글")), 시행일자: extractTag(content, "시행일자"), 법령구분: extractTag(content, "법령구분명"), 법령상세링크: extractTag(content, "법령상세링크"), }) ); const totalCount = totalCnt; // 유효한 항목만 필터링 (기존 동작 유지) const laws = allLaws.filter(item => item.법령ID || item.영문법령명); if (totalCount === 0) { let errorMsg = "검색 결과가 없습니다."; errorMsg += `\n\n💡 개선 방법:`; errorMsg += `\n 1. 한글 법령명으로 검색:`; errorMsg += `\n search_english_law(query="관세법")`; errorMsg += `\n\n 2. 영문 법령명으로 검색:`; errorMsg += `\n search_english_law(query="Customs Act")`; errorMsg += `\n\n 3. 한글 법령 먼저 검색 후 영문 조회:`; errorMsg += `\n search_law(query="${args.query || '법령명'}") → get_english_law_text(lawId="...")`; return { content: [{ type: "text", text: errorMsg }], isError: true }; } let output = `영문법령 검색 결과 (총 ${totalCount}건, ${currentPage}페이지):\n\n`; for (const law of laws) { output += `[${law.법령ID}] ${law.영문법령명}\n`; output += ` 한글명: ${law.한글법령명 || "N/A"}\n`; output += ` 시행일자: ${law.시행일자 || "N/A"}\n`; output += ` 법령구분: ${law.법령구분 || "N/A"}\n`; if (law.법령상세링크) { output += ` 링크: ${law.법령상세링크}\n`; } output += `\n`; } output += `\n💡 영문 전문을 조회하려면 get_english_law_text(lawId="법령ID")를 사용하세요.`; return { content: [{ type: "text", text: output }] }; } catch (error) { return formatToolError(error, "search_english_law"); } } - src/tools/english-law.ts:8-15 (schema)Zod schema for search_english_law input validation. Defines fields: query (optional string for search term in English or Korean), display (count per page, 1-100, default 20), page (page number, default 1), sort (sort option), and apiKey (optional API key).
export const searchEnglishLawSchema = z.object({ query: z.string().optional().describe("법령명 검색어 (영문 또는 한글, 예: 'Customs Act', '관세법')"), display: z.number().min(1).max(100).default(20).describe("페이지당 결과 개수 (기본값: 20, 최대: 100)"), page: z.number().min(1).default(1).describe("페이지 번호 (기본값: 1)"), sort: z.enum(["lasc", "ldes", "dasc", "ddes"]).optional() .describe("정렬 옵션: lasc/ldes (법령명순), dasc/ddes (날짜순)"), apiKey: z.string().optional().describe("법제처 Open API 인증키(OC). 사용자가 제공한 경우 전달"), }); - src/tool-registry.ts:506-511 (registration)Registration of search_english_law in the tool registry with name 'search_english_law', description '[영문] 영문 법령 검색.', schema reference to searchEnglishLawSchema, and handler reference to searchEnglishLaw.
{ name: "search_english_law", description: "[영문] 영문 법령 검색.", schema: searchEnglishLawSchema, handler: searchEnglishLaw }, - src/lib/tool-chain-config.ts:66-70 (helper)Tool chain configuration linking search_english_law to its detail tool get_english_law_text with lawId parameter and an ID regex pattern for extracting law IDs from search results.
search_english_law: { detailTool: "get_english_law_text", detailParam: "lawId", idRegex: /\[([^\]]+)\]/, // 영문 법령 ID는 숫자가 아닐 수 있음 }, - src/lib/query-router.ts:377-389 (helper)Query router entry that routes queries matching '영문', '영어', or 'English' patterns to the search_english_law tool with appropriate query extraction.
// ── 12. 영문 법령 ── { name: "english_law", patterns: [ /영문|영어|English/i, ], tool: "search_english_law", extract: (query) => ({ query: query.replace(/영문|영어|English|법령/gi, "").replace(/\s+/g, " ").trim(), }), reason: "영문 키워드 → 영문법령 검색", priority: 10, },