Post

MCP로 자동화된 스크랩링 우회 도구를 만들어보자

ux.py의 4단계 폴백 로직을 MCP 도구로 싸서 에이전트가 URL만 넘기면 수집되는 구조를 만들었다

MCP로 자동화된 스크랩링 우회 도구를 만들어보자

MCP로 자동화된 스크랩링 우회 도구를 만들어보자

curl_cffi부터 실제 Chrome 프로필까지 이어지는 폴백 체인을 만들었는데, 에이전트 작업에서 매번 직접 호출하는 게 번거로웠다. 수집 로직을 MCP 도구 하나로 싸서 에이전트가 URL만 넘기면 되게 만들었다.

1. 서론 (Introduction)

  • 문제/상황 (Problem):
    • 에이전트가 사이트를 수집해야 할 때마다 수집 방법 선택, 차단 감지, 폴백 처리를 프롬프트에 설명해야 했다. 복잡한 로직이 에이전트 컨텍스트를 차지했다.
  • 목적 (Purpose):
    • 수집 함수를 MCP 도구로 래핑해 에이전트가 URL 하나만 넘기면 수집 결과를 받을 수 있는 단일 인터페이스를 만든다.
  • 대상 (Target Audience):
    • 크롤링 로직을 에이전트 작업 흐름에 통합하려는 파이썬 개발자

2. 방법 및 과정 (Methods & Process)

  • 배경 조사 및 데이터 (Data Collection):
    • fastmcp는 함수에 데코레이터 하나만 붙이면 MCP 도구로 노출한다. 설치 여부에 따라 실제 서버 객체를 만들거나, 같은 인터페이스의 대체 레지스트리로 동작을 확인할 수 있게 나눴다.
    구성 요소역할
    fetch_url(url, preview)실제 수집 로직(생산 코드에선 ux.fetch(url)에 해당)
    FastMCP(name).tool함수를 MCP 도구로 등록하는 데코레이터
    대체 레지스트리fastmcp 미설치 시 등록 패턴만 재현하는 최소 dict 기반 구현
  • 접근 방법 (Approach Methods):
    • [방법 1]: fastmcp가 설치돼 있으면 FastMCP("ux-fetch") 인스턴스를 만들고 @server.toolfetch_url_tool을 등록한다.
    • [방법 2]: 설치가 안 돼 있으면 이름→함수 dict만 갖는 대체 레지스트리를 만들어 tool()로 등록, call()로 호출하는 동일한 흐름을 재현한다.
  • 분석 및 해결 프로세스 (Analysis Flow):
    • 도구/기술: Python, fastmcp
    • 주요 단계: build_server() 호출 $\rightarrow$ fastmcp 설치 여부 분기 $\rightarrow$ 도구 등록 $\rightarrow$ fetch_url 호출 결과 확인
    • 결과 도출 및 검증: fastmcp 3.3.1 설치 환경에서 FastMCP 인스턴스가 정상 생성됐고, fetch_url_tool 등록 후 내부 로직 호출 결과로 {"ok": true, "method": "curl", "bytes": 54, "html": "..."} 형태의 응답을 확인했다.

3. 결과 (Results)

  • 분석 결과 요약:
    • 에이전트 관점에서는 URL 하나만 넘기면 수집 결과 dict를 받는 인터페이스가 완성됐다.
    • method 필드로 어떤 수집 방식을 거쳤는지, preview 파라미터로 반환 HTML 길이를 조절해 에이전트 컨텍스트 소비량을 제어할 수 있다.
    • fastmcp 없는 환경에서도 대체 레지스트리로 등록·호출 패턴 자체는 동일하게 재현됐다.

4. 인사이트 및 액션 (Insights & Action)

  • 인사이트 (Insight):
    • 복잡한 폴백 로직을 MCP 도구 뒤에 숨기면 에이전트 프롬프트가 단순해진다. 도구 내부 복잡도와 에이전트 컨텍스트 단순도는 반비례한다.
  • 실행 방안 (Action Plan):
    • preview 파라미터로 반환 HTML 크기를 줄이면 에이전트 컨텍스트 소비를 제어할 수 있다. 링크나 메타데이터만 필요하면 값을 작게 잡는다.
  • 한 줄 결론 (Key Takeaway):
    • 수집 복잡도는 도구 안에 두고, 에이전트 컨텍스트엔 URL 하나만 넘긴다. 샘플 코드
  • 다음 스텝 (Next Step):
    • preview 파라미터는 글자 수로만 잘라 반환한다. 정말 필요한 정보(제목·본문 등)가 그 길이 안에 들어있으리라는 보장이 없어, 구조를 인식하지 않고 자르는 한계가 남아 있다.

연구·학습 목적. 이 글은 기법의 동작 원리를 정리한 것이다. 특정 서비스의 이용약관을 우회하거나 타인의 자원에 무단 접근하는 데 쓰지 않는다. 적용 전에 대상의 이용약관과 robots.txt를 확인한다.

This post is licensed under CC BY 4.0 by the author.