servers / charles-mcp-server

charles-mcp-server

communityunknownpythonwrite capablehealthy

Charles Proxy MCP 服务器,checkpoint 时间线 + 增量收割,专为 AI agent 逆向分析设计


01Tools · 14

How to read this: tool names here are observed from a live tools/list handshake. The Risk label is a heuristic inferred from the tool name (write/destructive verbs), not from executing the tool — a conservative guess, not a verified capability. We never escalate risk from a description. Found one that's wrong? Tell us — we fix on report.

ToolRiskSide effectsApproval
check_keyword_exists
【互锁-1】探测关键词在当前 checkpoint 的哪些条目中出现。 只返回 id + 命中位置的轻量索引,不返回 body 内容。 调用后 filter_by_keyword 对该关键词的批量限制解除(5 分钟内有效)。
unknownunknownunknown
list_checkpoints
列出所有 checkpoint,展示完整的收割时间线。 每条记录包含: id checkpoint 序号 read_at 收割时间(HH:MM:SS) count 本次新增条目数 start_time 本批流量的最早请求时间 end_time 本批流量的最晚请求时间 is_reset 是否为 fresh_start 重置点 当前正在查看的 checkpoint 由 current_checkpoint_id 标注。
readfalseunknown
load_checkpoint
将 CACHE 切换到指定 checkpoint 的数据,所有过滤工具随即在该时间窗口内工作。 这是只读回溯——ARCHIVE 和 CHECKPOINTS 不会被修改。 调用 harvest_data() 可随时切回最新增量。 checkpoint_id:来自 list_checkpoints 返回的 id 字段。
unknownunknownunknown
summarize_traffic
对当前 checkpoint 的流量做全局统计,帮助 agent 快速定向。 不拉取任何 body,只统计路由维度: top_hosts 流量最多的域名 top_paths 最活跃的路径前缀(取前两段) status_dist HTTP 状态码分布 method_dist HTTP 方法分布
unknownunknownunknown
filter_by_host
按 host 字段过滤,返回精简视图。 只匹配 entry 顶层的 host 字段,不会误命中 body 或 headers 中出现的域名。 支持部分匹配,例如 'example.com' 可匹配所有子域名。 limit 默认 15,上限 50,返回最近 N 条。
unknownunknownunknown
filter_by_method
按 HTTP 方法过滤(GET / POST / PUT / DELETE 等),返回精简视图。 大小写不敏感。limit 默认 15,上限 50,返回最近 N 条。
readfalseunknown
filter_by_encryption
扫描当前 checkpoint 的所有条目,找出 body 疑似加密/压缩/编码的请求。 按 max(req_entropy, res_entropy) 降序排列。 threshold 默认 3.9:纯文本 JSON 通常 2.5~3.5,Base64 约 4.0~5.0,加密 > 5.0。 limit 默认 20,上限 100。
unknownunknownunknown
filter_by_status
按 HTTP 状态码过滤,返回精简视图。 适合排查异常请求,例如 403(鉴权失败)、500(服务错误)。 limit 默认 15,上限 50,返回最近 N 条。
readfalseunknown
set_throttling
切换网络带宽限制。 - preset 为预设名称 → 开启弱网;preset 为 null → 关闭弱网模拟。 - MCP 进程退出时自动关闭弱网,无需手动清理。 可用预设(直接填名称字符串): 56 kbps Modem | 256 kbps ISDN/DSL | 512 kbps ISDN/DSL 2 Mbps ADSL | 8 Mbps ADSL2 | 16 Mbps ADSL2+ 32 Mbps VDSL | 32 Mbps Fibre | 100 Mbps Fibre 3G | 4G
writetrueunknown
get_raw_data
获取指定条目的完整原始数据(headers、body、timing 等全部字段)。 优先在当前 checkpoint 查找,找不到时从 ARCHIVE 全局搜索。 这样即使切换了 checkpoint,仍可用 entry_id 直接取历史数据。
readfalseunknown
filter_by_keyword
【互锁-2】返回含关键词的条目精简视图(含 body 预览)。 匹配数 > 30 时须先调用 check_keyword_exists 解锁,防止上下文溢出。 limit 默认 10,上限 50,返回最近 N 条。
unknownunknownunknown
load_recording
加载本地 .chlsj 历史录包到 ARCHIVE,创建 checkpoint 并切换到该窗口。 录包与 live 流量共用所有过滤工具(filter_by_*、filter_by_encryption 等)。 录包条目用 "rec:文件名:id" 命名空间存储,不会与 live 条目的 id 冲突。 加载后调用 list_checkpoints 可在时间线上看到录包的真实抓包时间范围。 file_path:.chlsj 文件的绝对路径或相对路径。
unknownunknownunknown
harvest_data
从 Charles 同步增量流量,并在时间线上创建一个新 checkpoint。 【fresh_start=False】(默认) 取上次 harvest 之后产生的新条目,写入 ARCHIVE,创建 checkpoint。 首次调用时加载 session 全部流量。 【fresh_start=True】 在时间线上插一个"重置点",不加载任何条目。 之后的 harvest_data() 只返回此刻之后的新流量。 典型用法:切换分析目标前调用一次。 每次调用都会: - 将新条目存入 ARCHIVE(可通过 load_checkpoint 随时回溯) - 将 CACHE 切换到本次新增的条目 - 清空 Charles session 并重启录制(导出始终只含最新增量) - 使所有关键词授权失效
unknownunknownunknown
filter_by_path
按 URL 路径关键词过滤,返回精简视图。 适合快速定位某个业务接口,例如 '/api/sign'、'/login'。 limit 默认 15,上限 50,返回最近 N 条。
unknownunknownunknown

02Install & source
uvx charles-mcp-server
uvx
pip install charles-mcp-server
pip

05Provenance & freshness
sourcesPyPI [p4]
last_checked2026-07-27 08:46Z
next_check2026-08-18 09:06Z
cadenceevery 48h
verifiedhandshake:failed metadata:passed handshake:failed metadata:passed handshake:failed metadata:passed metadata:passed metadata:passed handshake:failed metadata:passed
index_statusindex5 unique facts >= 5

06Badge

Add the “as seen on MCPExplorer” badge to your README. charles-mcp-server MCP — as seen on mcpexplorer.com

[![charles-mcp-server MCP — as seen on mcpexplorer.com](https://mcpexplorer.com/badge/charles-mcp-server.svg)](https://mcpexplorer.com/servers/charles-mcp-server)

Next step

This is one server. A loadout combines the right servers, governance, and proven plays for a whole job — assembled deliberately, not tool-dumped.

Explore loadouts →