heizaheiza/Charles-mcp
요약
Charles MCP Server는 Charles Proxy의 트래픽 데이터를 MCP 클라이언트에 연결하여 AI 에이전트가 실시간 및 과거 네트워크 패킷을 분석할 수 있게 돕는 도구입니다. v3.0 업데이트를 통해 단순 트래픽 조회를 넘어 인증, 서명, 파라미터 변이 등을 다루는 리버스 엔지니어링 워크플로우로 기능을 확장합니다.
핵심 포인트
- 에이전트가 실시간 증분 트래픽과 과거 패킷 기록을 안정적으로 읽고 분석할 수 있음
- 요약 우선(summary-first) 출력 방식을 통해 효율적인 데이터 드릴다운 지원
- 리버스 엔지니어링을 위한 도구 체인(디코딩, 서명 후보 분석 등) 추가 예정
- uvx를 통한 간편한 설치 및 AI 에이전트를 활용한 자동 설정 프롬프트 제공
문서 | 도구 계약 (Tool Contract) | 에이전트 (AGENTS) | 에이전트 워크플로우 가이드 (Agent Workflow Guide) | 영어 README
저장소 유지보수 공지 (2026-04-21)
본 저장소의 공개 Git 히스토리는 2026-04-21에 재정리되었습니다. 만약 해당 날짜 이전에 본 저장소를 클론(clone)했다면, 기여를 계속하기 전에 다시 클론해 주세요. 오래된 로컬 클론에서 직접 병합(merge)하거나 푸시(push)하지 마십시오. 그렇지 않으면 만료된 히스토리가 저장소에 다시 유입될 수 있습니다.
Charles MCP Server는 Charles Proxy를 MCP 클라이언트에 연결하여, 에이전트(agent)가 실시간 트래픽을 안정적으로 읽고, 과거 패킷 기록을 분석하며, 필요할 때 개별 요청의 세부 사항을 확장하여 확인할 수 있도록 합니다.
이 도구가 해결하는 핵심 문제는 단 세 가지입니다:
- 녹화가 진행 중인 상태에서도 에이전트가 현재 세션(session)의 증분 트래픽을 지속적으로 읽을 수 있음
- 라이브(live)와 히스토리(history) 모두 구조화된 분석을 거치며, 에이전트가 원시 패킷 딕셔너리를 직접 소비하지 않도록 함
- 기본적으로 요약 우선(summary-first) 출력을 사용하여, 먼저 핫스팟과 요약을 확인한 후 개별 상세 내용(detail)으로 드릴다운(drill-down)함
v3.0의 업데이트 방향은 다음과 같습니다: charles-mcp의 능력이 "트래픽 조회/필터링"에서 "리버스 엔지니어링(reverse engineering) 워크플로우"로 확장되기 시작합니다.
- 기존의 live/history 분석 능력을 유지하는 동시에, 새로운 리버스 분석(reverse-analysis) 도구 체인(가져오기, 쿼리, 디코딩, 재생, 서명 후보 분석, live 리버스 세션)을 추가합니다.
- 목표는 에이전트가 단순히 트래픽을 보는 것에 그치지 않고, 인증(authentication), 서명(signature), 파라미터 변이(parameter mutation) 및 재전송 가능성(replayability)을 중심으로 더 완전한 리버스 분석 루프를 형성하도록 하는 것입니다.
Charles에서 다음 순서로 진입하십시오: Proxy -> Web Interface Settings
다음 사항을 확인하십시오:
Enable web interface체크- 사용자 이름:
admin - 비밀번호:
123456
메뉴 위치 예시:
설정 창 예시:
저장소를 클론할 필요도, 가상 환경을 수동으로 생성할 필요도 없습니다. 먼저 uv를 설치해야 합니다.
claude mcp add-json charles '{
"type": "stdio",
"command": "uvx",
...
{
"mcpServers": {
"charles": {
...
[mcp_servers.charles]
command = "uvx"
args = ["charles-mcp"]
...
다음 프롬프트를 임의의 AI 에이전트(Claude Code, ChatGPT, Gemini CLI, Cursor Agent 등)에 복사하여 붙여넣으면, 에이전트가 설치와 설정을 자동으로 완료합니다:
🔴 자동 설치 프롬프트 펼치기 (권장)
Install the "charles-mcp" MCP server and configure it for my MCP client. Follow these steps exactly:
Step 1 — Detect OS:
Determine if this machine runs Windows, macOS, or Linux.
...
- Python 3.10+
- 로컬에 Charles Proxy가 실행 중일 것
- Charles Web Interface가 활성화되어 있을 것
- Charles 프록시가 기본적으로
127.0.0.1:8888을 리스닝하고 있을 것
CHARLES_MANAGE_LIFECYCLE=false 설정을 기본적으로 유지하는 것을 권장합니다.
MCP 서버가 Charles의 생명주기(lifecycle)를 제어하기를 명확히 원하는 경우가 아니라면, 종료 시 Charles 프로세스가 함께 닫히지 않도록 설정하십시오.
| 변수 | 기본값 | 설명 |
|---|---|---|
CHARLES_USER | admin | Charles Web Interface 사용자 이름 |
CHARLES_PASS | 123456 | Charles Web Interface 비밀번호 |
CHARLES_PROXY_HOST | 127.0.0.1 | Charles 프록시 호스트 |
CHARLES_PROXY_PORT | 8888 | Charles 프록시 포트 |
CHARLES_CONFIG_PATH | 자동 탐지 | Charles 설정 파일 경로 |
CHARLES_REQUEST_TIMEOUT | 10 | 제어면 (control plane) HTTP 타임아웃(초) |
CHARLES_MAX_STOPTIME | 3600 | 유계 녹화 (bounded recording) 최대 지속 시간 |
CHARLES_MANAGE_LIFECYCLE | false | MCP 서버가 Charles의 시작 및 종료를 관리할지 여부 |
CHARLES_REVERSE_STATE_DIR | ${CHARLES_STATE_DIR}/reverse | reverse-analysis의 SQLite 및 아티팩트 (artifacts) 상태 디렉토리 |
CHARLES_VNEXT_STATE_DIR | 이전 변수 | 이전 버전의 reverse-analysis 상태 디렉토리. 메인 charles-mcp가 처음 시작될 때 CHARLES_REVERSE_STATE_DIR로 자동 마이그레이션됩니다. |
start_live_capture
group_capture_analysis
query_live_capture_entries
get_traffic_entry_detail
stop_live_capture
이 경로는 최소한의 토큰 (token)을 사용하여 먼저 핫스팟 (hotspot)을 찾은 다음, 필요에 따라 개별 요청을 확장하는 것을 목표로 합니다.
list_recordings
analyze_recorded_traffic
group_capture_analysis(source="history")
get_traffic_entry_detail
이 경로는 먼저 녹화된 패킷을 브라우징한 다음, 구조화된 요약 (summary)에 대해 필터링 및 드릴다운 (drill-down)을 수행하기에 적합합니다.
- 기본 공개 도구 인터페이스는 정형화된(canonical) 31개 도구로 축소되었습니다. 레거시 별칭 (legacy aliases) (
filter_func,proxy_by_time,list_sessions)은 더 이상 기본적으로 노출되지 않습니다. - 명시적인 호환성 스위치가 추가되었습니다:
create_server(expose_legacy_tools=True)또는 환경 변수CHARLES_EXPOSE_LEGACY_TOOLS=true를 통해 레거시 호환 계층을 활성화할 수 있습니다. - 문서 진입점이
docs/README.md로 통합되었으며, 레거시 마이그레이션에 대한 권위 있는 설명서로서docs/migrations/legacy-tools.md가 새로 추가되었습니다. - 새로운 에이전트 (Agent) 실행 규격 문서가 추가되었습니다: 저장소 루트에
AGENTS.md가 추가되었고, 작업화된 호출 매뉴얼로서docs/agent-workflows.md가 추가되었습니다. - README와
docs/contracts/tools.md에 에이전트 문서 진입점이 추가되었으며, 다양한 환경에서 확인하기 쉽도록 저장소 상대 경로를 일관되게 사용합니다. - 빈번하게 사용되는 진입점 도구의 설명에 최소한의 필수 의미론 (identity 유지, summary-first, peek/read 차이점 등)이 보완되었으며, 문서와 도구 설명 간의 괴리를 방지하기 위한 계약 테스트 (contract testing)가 추가되었습니다.
- 기능 방향이 리버스 엔지니어링 (reverse engineering) 쪽으로 발전하기 시작했습니다: 임포트, 디코딩, 재생, 시그니처 후보 발견 및 라이브 리버스 분석 워크플로우를 아우르는 reverse-analysis 도구 인터페이스가 도입되었습니다.
read_live_capture와 peek_live_capture는 이제 host, method, path, status와 같은 라우팅 수준의 요약 필드만 반환하며, 더 이상 전체 원본 Charles entry를 직접 반환하지 않습니다. 이는 실시간 폴링 (polling) 시 컨텍스트 (context)를 빠르게 소진하는 것을 방지하기 위함입니다. query_live_capture_entries는 읽기 전용 분석 진입점으로 변경되어 라이브 커서 (live cursor)를 진행시키지 않습니다. 동일한 capture_id를 기반으로 이력의 증분 (incremental) 데이터를 "소비"하지 않고도 필터 조건을 바꿔가며 반복해서 쿼리할 수 있습니다. analyze_recorded_traffic과 query_live_capture_entries의 요약 (summary) 항목은 matched_fields와 match_reasons를 명시적으로 반환합니다.
get_traffic_entry_detail는 에이전트(agent)가 "왜 이 트래픽이 선택되었는지"를 설명하기 용이하도록 합니다.
기본값은 include_full_body=false, max_body_chars=2048입니다. 만약 상세 정보(detail)의 추정 출력량이 약 12,000자를 초과할 경우, warnings를 통해 범위를 축소하거나 전체 본문(full body)을 끄라는 안내가 표시됩니다. - 상세 정보(detail) / 요약(summary) 출력 시 null 값은 자동으로 제거되며, header_map, parsed_json, parsed_form, lower_name 등 내부 필드는 숨겨집니다. 헤더 정보를 확인해야 할 때는 headers 리스트를 사용하십시오.
README에는 권장되는 주요 프로세스 도구만 포함되어 있습니다. 호환성을 위해 유지되는 엔트리(entry)들은 본 문서에서 자세히 다루지 않습니다.
| 도구 | 역할 | 사용 시점 |
|---|---|---|
start_live_capture | 현재 라이브 캡처(live capture)를 시작하거나 제어권을 가져오며, capture_id를 반환 | 실시간 관찰을 시작하기 전 |
read_live_capture | 커서(cursor)를 따라 라이브 캡처를 증분 읽기하며, 압축된 라우팅 요약만 반환 | 새로운 트래픽을 연속적으로 소비하거나, 우선 host/path/status만 확인하고 싶을 때 |
peek_live_capture | 커서를 진행시키지 않고 새로운 트래픽을 미리 보기 하며, 압축된 라우팅 요약만 반환 | 읽기 진행 상태를 변경하지 않고 살짝 확인만 하고 싶을 때 |
stop_live_capture | 캡처를 종료하고, 필요 시 스냅샷을 영구 저장 | 마무리 작업 또는 이번 실시간 패킷 캡처를 내보낼 때 |
query_live_capture_entries | 라이브 캡처에 대해 구조화된 요약(summary)을 출력하며, 커서를 진행시키지 않음 | 실시간 트래픽에서 핵심 요청을 반복적으로 필터링하고 싶을 때 |
| 도구 | 역할 | 사용 시점 |
|---|---|---|
group_capture_analysis | 라이브 또는 히스토리(history) 결과에 대해 그룹화 및 집계 수행 | 주요 host, path, status를 먼저 확인하고 싶을 때 |
get_capture_analysis_stats | 분류 통계 결과를 반환 | API, 정적 리소스, 에러 트래픽의 비중을 빠르게 알고 싶을 때 |
get_traffic_entry_detail | 단일 엔트리(entry)의 상세 정보(detail)를 읽으며, 응답이 너무 클 경우 경고(warnings)를 제공 | 대상 entry_id를 확보한 후, 상세 분석(drill-down)을 준비할 때 |
analyze_recorded_traffic | 지정된 녹화 파일 또는 최신 녹화 파일에 대해 구조화된 요약(summary)을 출력하며, 매칭 이유를 첨부 | 히스토리 .chlsj 파일을 분석하고 싶을 때 |
| 도구 | 역할 | 사용 시점 |
|---|---|---|
list_recordings | 현재 저장된 녹화 파일 목록을 나열 | 어떤 히스토리 녹화 파일들이 있는지 먼저 알고 싶을 때 |
get_recording_snapshot | 특정 녹화 파일의 원본 스냅샷을 읽음 | 저장된 특정 스냅샷을 전체적으로 확인해야 할 때 |
query_recorded_traffic | 최신 녹화 파일에 대해 직접 경량 필터링 수행 | host, method, 정규식(regex) 일치 여부를 빠르게 찾아야 할 때 |
| 도구 | 역할 | 사용 시점 |
|---|---|---|
charles_status | Charles 연결 상태 및 현재 라이브 캡처(live capture) 상태 확인 | 연결 이상이 의심되거나 캡처가 여전히 활성화되어 있는지 확인하고 싶을 때 |
throttling | Charles 네트워크 제한(throttling) 프리셋 설정 | 3G / 4G / 5G / off 등의 네트워크 조건을 시뮬레이션해야 할 때 |
reset_environment | Charles 설정을 복구하고 현재 환경을 정리 | 깨끗한 환경으로 되돌아가야 할 때 |
| 도구 | 역할 | 언제 사용하는가 |
|---|---|---|
reverse_import_session | 공식 Charles XML / native session을 canonical reverse store로 가져옴 | 이미 내보낸 Charles 세션으로부터 재생(replay), 디코딩 또는 서명(signature) 분석을 시작하고 싶을 때 |
reverse_list_captures | 가져온 reverse-analysis capture 목록을 나열 | 저장된 reverse 데이터셋을 선택하고 싶을 때 |
reverse_query_entries | 라우팅 필드를 통해 가져온 reverse entry를 필터링 | 상세 정보(detail) 확인이나 재생(replay)을 하기 전에 후보 요청 범위를 좁히고 싶을 때 |
reverse_get_entry_detail | 가져온 단일 reverse entry의 canonical detail을 반환 | 특정 베이스라인 요청을 심층 분석하고 싶을 때 |
reverse_decode_entry_body | 저장된 request / response body를 디코딩하며, descriptor 기반의 protobuf를 지원 | 구조화된 페이로드(payload) 뷰를 얻고 싶을 때 |
reverse_replay_entry | 가져온 단일 요청에 대해 변이(mutation) 파라미터를 포함하여 재생(replay) 수행 | 요청의 재현 가능성이나 파라미터 민감도를 검증하고 싶을 때 |
reverse_discover_signature_candidates | 여러 개의 가져온 요청을 비교하여 의심되는 서명(signature) 필드 순위를 제공 | 동적 인증(auth) / 서명(sign) 파라미터의 위치를 찾고 싶을 때 |
reverse_list_findings | 영구 저장된 replay / signature 탐색 결과(findings)를 확인 | 기존의 역공학(reverse engineering) 증거를 다시 보고 싶을 때 |
reverse_charles_recording_status | Charles의 현재 녹화 상태와 reverse live session 상태를 반환 | reverse live 분석이 준비되었는지 확인하고 싶을 때 |
reverse_start_live_analysis | reverse live session을 시작하고, 공식 내보내기 페이지를 통해 현재 Charles session을 캡처 | 새로 발생하는 역공학 대상 트래픽을 지속적으로 추적하고 싶을 때 |
reverse_peek_live_entries | 새로운 reverse live entry를 읽되, reverse 커서(cursor)를 진행시키지 않음 | 상태를 소비(consume)하지 않고 새로 추가된 트래픽을 미리 보고 싶을 때 |
reverse_read_live_entries | 새로운 reverse live entry를 읽고 소비(consume) | reverse live 분석 진행 상태를 전진시키고 싶을 때 |
reverse_stop_live_analysis | reverse live session을 중단하고, 필요에 따라 Charles 녹화 상태를 복구 | reverse live 분석을 깔끔하게 마무리하고 싶을 때 |
reverse_analyze_live_login_flow | 새로 추가된 live 트래픽에 대해 로그인 / 인증 관련 점수를 매기고 후속 동작 제안을 제공 | 로그인, 토큰(token) 획득, 세션(session) 수립 프로세스를 분석하고 싶을 때 |
reverse_analyze_live_api_flow | 새로 추가된 live 트래픽에 대해 API 워크플로우 점수를 매기고 후속 동작 제안을 제공 | 비즈니스 API 요청 체인을 분석하고 싶을 때 |
reverse_analyze_live_signature_flow | 서명 민감 요청에 집중하여 변이 실험에 더 특화된 제안을 생성 | sign, nonce, timestamp 등의 보호 메커니즘을 분석하고 싶을 때 |
모든 도구는 기본적으로 데이터 마스킹(masking) 처리를 하지 않고 전체 원본 콘텐츠를 반환합니다. 상위 계층에서 마스킹이 필요한 경우, MCP 클라이언트 또는 에이전트가 직접 처리해야 합니다.
먼저 group_capture_analysis, query_live_capture_entries 또는 analyze_recorded_traffic를 사용하여 대상을 확인한 후, get_traffic_entry_detail을 호출하는 것을 권장합니다.
처음부터 include_full_body=true를 요청하지 마십시오.
모든 요약(summary) 및 상세(detail) 출력은 직렬화(serialization)를 통해 경량화되었습니다:
header_map,parsed_json,parsed_form,lower_name등 내부 필드는 출력에 더 이상 나타나지 않습니다.- 값이
null인 필드는 직렬화 시 자동으로 제거됩니다. - detail 뷰에
full_text가 존재하는 경우, 중복되는preview_text는 제거됩니다.
컨텍스트 윈도우(context window) 보호를 위해 기본 파라미터 값이 낮게 설정되어 있습니다.
| 파라미터 | 기존 기본값 | 새로운 기본값 |
|---|---|---|
max_items | 20 | 10 |
max_preview_chars | 256 | 128 |
max_headers_per_side | 8 | 6 |
max_body_chars | 4096 | 2048 |
더 넓은 범위를 확인하려면 여전히 수동으로 더 높은 값을 전달할 수 있습니다.
history summary는 recording_path를 반환하며,
live summary는 capture_id를 반환합니다.
get_traffic_entry_detail에 대하여:
history시나리오에서는recording_path를 우선적으로 전달합니다.live시나리오에서는capture_id를 우선적으로 전달합니다.
stop_live_capture에는 두 가지 안정적인 종료 상태가 있습니다:
status="stopped": 실제로 종료가 완료됨
status="stop_failed": 짧은 재시도 후에도 실패했으나, capture는 여전히 유지됨
stop_failed가 반환될 때는 다음 사항을 동시에 확인해야 합니다:
recoverable
active_capture_preserved
만약 결과가 다음과 같다면:
{
"status": "stop_failed",
"recoverable": true,
...
이는 현재 capture를 계속해서 읽기, 진단, 다시 중지(stop)할 수 있음을 의미하며, 이미 종료된 것이 아닙니다.
테스트 실행:
python -m pytest -q
자주 사용하는 로컬 점검:
python charles-mcp-server.py
python -c "from charles_mcp.main import main; main()"
-
공개 저장소(public repository)의 이력 정리를 완료하여, 개편된 공개 이력 배포를 준비합니다.
-
기본 공개 도구 범위를 canonical 31개 도구로 축소하며, legacy aliases는 명시적인 호환 계층(explicit compatibility layer)으로 변경합니다 (기본적으로 공개되지 않음).
-
새로운 호환 스위치 추가:
expose_legacy_tools파라미터 및CHARLES_EXPOSE_LEGACY_TOOLS환경 변수 (파라미터 우선순위가 환경 변수보다 높음). -
새로운 docs hub (
docs/README.md) 및 legacy 마이그레이션 문서 (docs/migrations/legacy-tools.md)를 추가하고, 진입점 네비게이션을 통합합니다. -
docs/contracts/tools.md를 통해 canonical public surface를 명확히 하고, 테스트 정렬을 위해 안정적으로 파싱 가능한 JSON 영역을 새로 추가합니다. -
Agent 실행 규격 문서를 도입 및 배포합니다: 저장소 루트 디렉토리에
AGENTS.md및docs/agent-workflows.md를 추가합니다. -
README및docs/contracts/tools.md에 Agent 문서 진입점 링크를 추가하고, 저장소 상대 경로를 사용하도록 통일합니다. -
빈번하게 사용되는 진입점 도구의 최소 프롬프트(prompt)를 동기화하고, 문서/도구 시맨틱 계약(semantic contract) 테스트를 추가하여 규칙이 MCP 설명과 지속적으로 일치하도록 보장합니다.
-
reverse-analysis 메인 도구 범위를 도입하여 임포트, 쿼리, 디코딩, 재생, 시그니처 후보 발견 및 live 역공학(reverse engineering) 프로세스를 포괄합니다. 이를 통해 기능 경계가 "트래픽 확인"에서 "역공학 워크플로우"로 확장됩니다.
-
live/history의 구조화된 분석 경로를 업그레이드합니다:
query_live_capture_entries는 읽기 전용을 유지하며,summary에는 매칭 이유를 추가하고,detail출력은 기본적으로 더 가볍게 구성하되 대규모 응답 시 경고를 제공합니다. -
외부 문서를
v3.0시맨틱으로 업데이트합니다: README의 새로운 기능 섹션에 버전 번호를 명시적으로 표시하고, 중문 및 영문 설명을 동기화합니다. -
Trusted Publisher (OIDC) 기반의 GitHub Actions 자동 배포 프로세스를 추가하여, 공식 GitHub Release 배포 후 PyPI로 자동 동기화할 수 있습니다.
-
배포 보호 기능 추가: Release tag가 프로젝트 버전과 일치하는지 검증하고
twine check --strict를 실행합니다. -
저장소 가시성 및 배포 메타데이터를 보완하여 GitHub Release와 PyPI 배포 링크가 일치하도록 보장합니다.
기록된 패키지 경로 읽기 제한: 히스토리 스냅샷 관련 진입점은 이제 관리되는 디렉토리 내의 .chlsj 파일에만 접근할 수 있어, 도구 인터페이스를 통해 임의의 로컬 JSON 파일을 읽는 것을 방지합니다.
live 스캔 윈도우 수정: query_live_capture_entries 및 관련 live 분석 경로는 이제 실제로 scan_limit를 준수하며, 더 이상 아주 작은 고정된 윈도우 하나만 조용히 스캔하지 않습니다.
body 필터링 누락 수정: request_body_contains 및 response_body_contains
더 이상 잘린(truncated) preview 텍스트만 매칭하지 않고, 더 완전한 요청(request) 및 응답(response) 본문을 정확하게 커버할 수 있습니다.
런타임 데이터 디렉토리 조정: 설치 환경의 기본값을 사용자 상태 디렉토리로 변경하여 스냅샷과 백업을 저장하도록 수정했습니다. 이를 통해 런타임 데이터가 패키지 설치 디렉토리에 작성되는 것을 방지합니다.
배포: 위의 수정 사항들을 동기화하였으며, GitHub 및 PyPI 버전을 2.0.1로 업데이트했습니다.
수정: lower_name
- 검증(validation) 크래시
HeaderKV.lower_name수정 get_traffic_entry_detail호출 시 발생하는'lower_name' is a required property출력 검증 오류를 해결하기 위해 기본값 및 자동 계산 validator를 추가했습니다. 이로 인해 도구가 완전히 사용 불가능했던 문제를 해결했습니다.
커서(cursor) 로직 함정 수정: query_live_capture_entries
- 읽기 전용 분석(내부 cursor를 진행시키지 않음) 방식으로 변경했습니다. 이를 통해 에이전트(agent)가 반복 호출할 때 과거 데이터가 "소비"되어 항상 빈 리스트만 반환하던 문제를 방지합니다.
컨텍스트(Context) 폭발 방지: read_live_capture 및 peek_live_capture
- 반환 전 원본 엔트리(entry)를 라우트 요약(host/method/path/status)으로 자동 압축합니다. 이제 전체 HTTP 요청/응답 원문을 대규모 언어 모델(LLM)에 직접 전달하지 않습니다.
에이전트 무한 루프 타파: 위의 세 가지 수정 사항은 에이전트가 실시간 분석 중 상세 정보(detail) 크래시 → 쿼리 백트래킹 → 커서 경과로 인한 데이터 없음 → 지속적인 재시도 패턴의 무한 루프에 빠지는 현상을 공동으로 제거합니다.
도구 설명 개선: 모든 live/history 도구에 사용 가이드, 부작용(side effects) 설명 및 권장 호출 경로를 추가했습니다.
토큰(Token) 예산 최적화: 직렬화(serialization) 출력을 약 50% 축소하여, 여러 번의 get_traffic_entry_detail 호출 후 컨텍스트 제한 초과(Context limit reached)가 발생하는 문제를 해결했습니다.
header_map,parsed_json,parsed_form,lower_name을 내부 필드로 지정하여 도구 출력에 나타나지 않도록 했습니다.TrafficQueryResult및TrafficDetailResult에서null값을 자동으로 제거합니다.- 상세(detail) 뷰에서
full_text가 존재하는 경우 중복되는preview_text를 자동으로 제거합니다.
기본 파라미터 하향 조정: max_items (20→10), max_preview_chars (256→128), max_headers_per_side (8→6), max_body_chars (4096→2048)
대규모 응답 경고: get_traffic_entry_detail의 출력이 12,000자를 초과할 경우, warnings를 통해 에이전트가 요청 범위를 좁히도록 안내합니다.
폐기된 redaction 체계 제거: include_sensitive 파라미터와 모든 redactions_applied / redacted / sensitive_included 필드를 삭제하여 도구 시그니처(signature)의 노이즈를 줄였습니다.
수정: 해당 프리셋은 이제 자동으로 errors_only 프리셋 의미인 has_error=True를 주입하여, 실제로 오류가 발생한 트래픽만 반환합니다.
HTTP 연결 재사용: LiveCaptureService가 start → read → stop의 전체 생명주기 동안 동일한 HTTP 연결을 재사용하여, 빈번한 폴링(polling) 시의 TCP 오버헤드를 줄입니다.
entry_id 계산 경량화: JSON 전체 직렬화 방식에서 주요 필드를 파이프라인으로 연결한 후 SHA1을 생성하는 방식으로 변경하여, 대규모 본문(body)에 대한 불필요한 직렬화를 방지합니다.
본 프로젝트는 처음에 tianhetonghua/Charles-mcp-server에서 영감을 얻었으나, 해당 프로젝트의 사용 경험이 좋지 않았기 때문에 이후 코드베이스를 대폭 재작성 및 재구성하였습니다. 다양한 아키텍처와 사용 시나리오를 지향하며, 현재 유지 관리자에 의해 독립적으로 지속 관리되고 있습니다.
이전 작업의 핵심 능력은 캐시(cache)를 중심으로 전개되었습니다. 반면 본 프로젝트의 목표는 Claude Code, Codex, Cursor와 같은 MCP 클라이언트 내에서 일반적인 AI 에이전트가 실시간 트래픽과 과거 캡처된 패킷을 안정적이고, 낮은 토큰 사용량으로
전작이 시작점을 제공했다면, 이 저장소(repository)는 서로 다른 목표를 향해 단계적으로 진화해 온 독립적인 구현체입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Codex tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기