feat: bulk law lookup (search_law_bulk) with MST diff mode for compliance monitoring · Issue #157 · chrisryugj/korean-law-mcp · GitHub
Skip to content

feat: bulk law lookup (search_law_bulk) with MST diff mode for compliance monitoring #157

Closed

Description

@thkim660207-cmd

Summary (EN)

Compliance-register monitoring (arguably the flagship use case for this MCP) required 98 individual search_law calls per weekly run. Propose search_law_bulk returning compact {law_id, mst, effective_date, upcoming} per query, plus a diff mode that accepts a {law_id: previous_mst} map and returns only changed laws.


배경: ISO 법규준수 자동화(품질·환경·안전보건·정보보안·BCM·부패방지·AI·ESG 8개 영역 108개 법령 등록부)에 본 MCP를 실전 사용 중입니다.

현상 (실측, 2026-08-31 / 2026-09-06)

등록부 전건의 개정 여부 확인(주간 레이더)에 search_law 개별 호출 98회가 필요했고, 같은 작업을 두 번 수행해 총 196회 호출했습니다. 각 응답에서 실제로 사용하는 값은 법령ID / MST / 시행일 / 시행예정 4개뿐이고, 부분매칭 목록·안내문은 감시 용도에는 불필요했습니다.

제안

  1. search_law_bulk(queries: string[]) — 건당 {law_id, mst, effective_date, upcoming[]} 컴팩트 반환
  2. (확장) diff 모드: {law_id: 이전MST} 맵을 입력받아 MST가 달라진 법령만 반환.
    MST가 개정마다 바뀌는 특성(이 MCP가 이미 문서화한 설계)을 서버가 직접 활용하는 것으로,
    법규등록부 감시가 호출 1~2회로 끝나게 됩니다.

Reported via real-world usage; happy to provide more repro details.

Activity

  1. chrisryugj commented on Sep 10, 2026

    @chrisryugj
    Owner

    v4.13.0 에 search_law_bulk 로 반영했습니다 (npm korean-law-mcp@4.13.0, https://mcp.gomdori.app/law 반영 완료).

    제안하신 1·2안을 한 도구에 넣었습니다. 노출 도구는 10개 그대로라 execute_tool 경유입니다.

    execute_tool(tool_name="search_law_bulk", params={
      "queries": ["산업안전보건법", "물환경보전법", "개인정보 보호법"],
      "includeUpcoming": true
    })
    
    법령 대량 조회 (요청 3건 / 확인 3건)
    
    1. 산업안전보건법 [현행]
       ID 001766 | MST 283449 | 시행 2026-08-01
       🔜 일부개정 시행예정 2027-01-08 (MST 287805, 2026-07-07 공포)
       🔜 타법개정 시행예정 2026-12-08 (MST 285379, 2026-04-07 공포)
    2. 물환경보전법 [현행]
       ID 000166 | MST 283441 | 시행 2026-02-19
    ...
    📌 다음 감시용 스냅샷 (previous 에 그대로 전달):
    {"001766":"283449","000166":"283441","011357":"283839"}
    

    diff 모드 — 응답 말미의 스냅샷을 그대로 previous 에 넣으시면 됩니다.

    params={"queries": [...], "previous": {"001766":"283449", ...}}
    → △ 산업안전보건법 | ID 001766 | MST 283449 → 289415 | 시행 2027-03-09
       (본문 동일 N건은 생략)
    

    설계하면서 붙인 것 세 가지를 짚어둡니다.

    1. MST 가 같아도 시행예정이 있으면 침묵하지 않습니다. 공포됐으나 미시행인 개정은 현행 MST 를 바꾸지 않아 diff 만 보면 "변경 없음"입니다. 준법 등록부에서 시행일을 놓치는 자리라 본문 동일(MST …) — 시행예정 있음 으로 따로 냅니다
    2. 한 건이 실패해도 나머지를 버리지 않습니다. 검색 0건은 쿼리명을 밝혀 조회 실패와 구분합니다
    3. 한 호출 상한은 40건입니다. 요청 단위 업스트림 예산(MCP_MAX_UPSTREAM_REQUESTS, 기본 48)을 쿼리당 1~2회 쓰기 때문입니다. 예산이 소진되면 받은 데까지의 결과 + 남은 쿼리 목록을 돌려주니 그대로 다시 넣으시면 됩니다. 108건 등록부라면 includeUpcoming 을 켠 채로는 3회, 끄면 3회(40+40+28) 입니다

    98회 → 3회입니다. 실사용 로그까지 붙여 주셔서 설계가 훨씬 쉬웠습니다. 돌려보시고 어긋나는 지점 있으면 새 이슈로 알려주세요.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions