LAMBENCY
DeepCaffein · 도구 · 오픈소스

bytemescan
이 제품, 정말 그 기능성으로 보고돼 있나 식약처 공개 명부(보고 + 심사)에 광고 표현을 대조하는 무료 MCP · CLI — MIT

Caff · 2026년 10월 · github.com/caffreywlee-decaff/bytemescan
사용 데이터 — data.go.kr 기능성화장품 보고품목·심사품목 공개 API(쓰는 사람 자기 키). 우리 비공개 데이터는 쓰지 않는다. 위법 판정이 아니라 "공식 보고와 같은가"까지.

광고와 상세페이지에는 "미백", "주름개선", "선크림" 같은 말이 흔하다. 그런데 그 제품이 식약처에 그 기능성으로 보고된 제품인지는 따로 확인해야 한다. 공개 명부는 누구나 볼 수 있지만, 그대로는 쓰기 어렵다. 그 입구를 한 줄로 줄인 것이 이 도구다 — 상품명과 표현을 주면 보고·심사 명부에 대조해 MATCH / MISMATCH / UNVERIFIABLE / NOT_FOUND / REVIEW 로 답하고, 근거 행(번호 · 업소 · 보고 효능)을 같이 돌려준다.

01왜 만들었나 — 공개 명부는 열려 있지만 그대로는 못 쓴다

식약처가 공개 중인 화장품 행정처분 198건을 한 건씩 열어 보면 137건이 광고 문구 때문이었다(2026년 10월 15일, 의약품안전나라 공개 목록). 가장 많은 건 "의약품처럼 보이는 말"(81건)인데, 이 도구는 그건 보지 않는다. 이 도구가 보는 자리는 그중 "기능성화장품이 아닌데 기능성처럼 광고한" 경우 — 7건이다. 수는 적어도 문구 하나로 그 제품의 광고가 대개 2~4개월 멈추는 건 같다.

그 7건을 미리 거르는 데 필요한 자료는 전부 공개돼 있다. 그런데 세 가지가 걸린다.

그래서 이 도구는 두 명부를 같이 조회해 합치고, 확정 판정은 신고번호(report_no)를 줬을 때만 낸다. 상품명만 주면 후보 목록을 REVIEW 로 돌려준다.

02쓰는 순서 — 세 단계

  1. 찾기 — 상품명으로 후보를 받는다. 후보마다 report_no(보고번호 또는 심사 품목번호) · 업소 · 보고 효능 범주가 붙는다.
  2. 고르기 — 업소명 · 보고일 · 효능으로 내 제품이 어느 행인지 고른다. 판매 페이지에는 보통 번호가 없어 이 단계는 사람이 한다.
  3. 확정 — 그 report_no 로 표현을 대조하면 MATCH / MISMATCH / UNVERIFIABLE 가 나온다.
판정뜻
MATCH신고번호로 확정한 제품의 보고 효능 범위 안에 광고한 기능성이 있다
MISMATCH확정한 제품을 찾았고 효능 정보도 있는데, 그 기능성으로는 보고돼 있지 않다 — 위법이라는 뜻이 아니다
UNVERIFIABLE확정한 제품의 명부 행에 효능 정보가 비어 판정할 수 없다(보고 명부 행의 약 5%)
NOT_FOUND그 이름(또는 그 번호)의 보고 제품을 공개 명부에서 못 찾았다
REVIEW사람이 봐야 한다 — 표현이 기능성 범주가 아니거나("보습"), 상품명만으로 제품을 확정하지 못했다(후보 목록 + 임시 판정)

03설치와 등록

키는 data.go.kr 에서 무료로 받아, 기능성화장품 보고품목(FtnltCosmRptPrdlstInfoService01)과 심사품목(FtnltCosmSrngPrdlstInfoService05) 두 서비스를 "활용신청"하면 된다. 키는 쓰는 사람 것이고, 오류 문구에도 찍히지 않는다.

git clone https://github.com/caffreywlee-decaff/bytemescan.git && cd bytemescan
pip install -e .                 # CLI 명령 bytemescan
pip install "mcp[cli]"           # MCP 서버도 쓸 때
cp .env.example .env             # DATA_GO_KR_KEY 채우기

bytemescan lookup "선스틱"                                  # 후보 + report_no
bytemescan check "<고른 상품명>" "미백" --no <report_no>    # MATCH / MISMATCH / UNVERIFIABLE

Claude Code 에서는 한 줄로 등록된다. Claude Desktop · Cursor 는 설정 파일에 같은 명령을 적는다(README 에 그대로 있다).

claude mcp add bytemescan -e DATA_GO_KR_KEY=여기에_키 -- python3 -m bytemescan.server

등록되면 에이전트가 도구 둘을 쓴다 — lookup_functional_cosmetic(item_name), check_cosmetic_claim(item_name, claim, report_no=None). "이 선스틱 자외선차단 보고 있어? 번호는 ○○○이야" 라고 물으면 바로 확정 판정이 온다.

04한계 — 꼭 읽을 것

숫자의 출처 · 만든 곳

행정처분 198 · 광고 137 · 의약품 오인 81 · 기능성 오인 7 — 의약품안전나라 공개 행정처분 목록(2026-10-15 공개분, 근거 조항·위반 내용 글자로 분류). 보고 명부 195,799행 · 효능 정보 있는 행 94.6% · 같은 이름 2,930개(6,214행) — data.go.kr 보고품목 2026-09-21 스냅샷. 심사 명부 20,692행 · 90.8% — 같은 날 심사품목 스냅샷.

Lambency(데이터 · AI 컨설팅)가 만들었다. 판매 페이지 전체를 판매처까지 읽고 사진 속 글자까지 대조하는 일은 BYTEME 판매 페이지 건강검진에서 한다 — 이 도구는 그 일의 공개 데이터 입구만 떼어 낸 것이다. 리포에 문제를 올리거나 메일을 주면 고친다.

자기 브랜드 페이지의 기능성 표현을 하나씩 확인하는 데 쓰면 된다. 판매처 수십 곳의 페이지를 전부 읽고 고칠 자리까지 정리하는 건 다른 일이다.

github.com/caffreywlee-decaff/bytemescan  ·  BYTEME 판매 페이지 건강검진