Skip to main content
Glama

Charles MCP Server

专为 AI agent 逆向分析设计的 Charles Proxy MCP 服务器。

设计原则:MCP 只做数据通道,不替 agent 做分析判断。工具职责是取数据、过滤、呈现,推理交给 agent。

核心机制

Checkpoint 时间线

每次调用 harvest_data() 都会:

  1. 从 Charles 导出当前 session

  2. 取上次收割后产生的新条目(按 times.start 毫秒时间戳增量判断)

  3. 将新条目写入内存 ARCHIVE

  4. 在时间线上记录一个 checkpoint

  5. 清空 Charles session,重启录制(保持导出始终轻量)

agent 可通过 load_checkpoint(n) 随时回到任意历史时间窗口,所有过滤工具自动在那个范围内工作。

资源文件占位符

图片、JS、CSS、二进制等资源的 body 不传给 agent,替换为 [image/png 45.2KB] 形式的占位符。agent 知道类型和大小,按需调 get_raw_data 获取实际内容。

关键词互锁

filter_by_keyword 在匹配数 > 30 时要求先调 check_keyword_exists,避免一次性拉取大量 body 撑爆上下文。


Related MCP server: mitmproxy-mcp

工具总览

收割

工具

说明

harvest_data(fresh_start=False)

增量收割,创建 checkpoint。fresh_start=True 插入重置点,之后只看新流量

时间线

工具

说明

list_checkpoints()

查看所有 checkpoint,了解收割时间线

load_checkpoint(id)

切换到指定 checkpoint 的数据窗口

概览

工具

说明

summarize_traffic()

统计当前窗口的 host / path / 状态码 / 方法分布,不拉取 body

过滤(均返回精简视图,含 body 预览)

工具

说明

filter_by_host(keyword)

按域名过滤,只匹配顶层 host 字段

filter_by_path(keyword)

按 URL 路径关键词过滤

filter_by_method(method)

按 HTTP 方法过滤(GET / POST 等)

filter_by_status(code)

按 HTTP 状态码过滤

check_keyword_exists(keyword)

探测关键词位置,返回轻量索引,并解锁 filter_by_keyword

filter_by_keyword(keyword)

返回含关键词的条目预览,匹配数 > 30 时需先调 check

filter_by_encryption(threshold=3.9)

按香农熵扫描,找出疑似加密/压缩/编码的 body,按熵值降序

详情

工具

说明

get_raw_data(entry_id)

获取完整原始数据。先在当前窗口找,找不到从 ARCHIVE 全局搜

环境控制

工具

说明

set_throttling(preset)

开启 / 关闭弱网模拟,MCP 退出时自动还原

get_proxy_status()

返回当前连接模式(external / managed-headless)与代理运行状态


典型工作流

harvest_data()               # 同步流量,创建 checkpoint
summarize_traffic()          # 看全局:哪个 host 流量多,有没有大量 403
filter_by_host("api.xxx")    # 缩小到目标域名
filter_by_encryption()       # 找加密字段
get_raw_data(entry_id)       # 取完整报文深度分析

切换分析目标:

harvest_data(fresh_start=True)   # 标记重置点,不加载旧流量
# 在 App 触发目标操作
harvest_data()                   # 只拿新流量

回溯历史:

list_checkpoints()               # 查看时间线
load_checkpoint(2)               # 切到第 2 次收割的数据
filter_by_keyword("sign")        # 在那个时间窗口里搜

前置条件

模式一:External(默认)

Charles Proxy 已启动,开启 Web Interface:Proxy → Web Interface Settings

  • 勾选 Enable web interface

  • 用户名:Charles-mcp-server(或通过环境变量自定义)

  • 密码:123456(或通过环境变量自定义)

模式二:Managed Headless(自动托管)

设置 CHARLES_MCP_MODE=managed-headless 后,MCP 启动时自动拉起一个隔离的 Charles --headless 进程,自动生成随机 Web Interface 凭据,无需手动配置。MCP 退出时自动终止 Charles 进程并释放端口。文件锁保证同一时刻只有一个 MCP 实例托管 Charles。


安装

方式一:PyPI(推荐)

pip install charles-mcp-server

方式二:从源码安装

git clone <repo-url>
cd Charles-mcp-server
pip install .

方式三:让 AI 自动安装

将下方提示词完整粘贴给任意 AI agent(Claude Code、Cursor Agent、Codex 等),agent 会自动完成安装和配置:

请帮我安装并配置 "charles-mcp-server" MCP server,按以下步骤执行:

Step 1 — 检测操作系统:
  判断当前系统是 Windows、macOS 还是 Linux。

Step 2 — 安装 charles-mcp-server:
  运行:pip install charles-mcp-server
  如果失败,尝试:pip3 install charles-mcp-server
  安装完成后验证:charles-mcp-server --help(有输出即成功)

Step 3 — 检测 MCP 客户端(按顺序匹配,用第一个命中的):

  a) Claude Code — 运行:claude --version
     成功则执行以下命令,然后跳到 Step 5:
       claude mcp add-json charles '{"type":"stdio","command":"charles-mcp-server","args":[]}'

  b) Claude Desktop — 检查配置文件是否存在:
     - macOS:  ~/Library/Application Support/Claude/claude_desktop_config.json
     - Windows:%APPDATA%\Claude\claude_desktop_config.json
     - Linux:  ~/.config/Claude/claude_desktop_config.json

  c) Cursor — 检查以下路径是否存在:
     - ~/.cursor/mcp.json
     - .cursor/mcp.json(当前项目目录下)

  d) Windsurf — 检查:~/.codeium/windsurf/mcp_config.json

  e) Codex CLI — 检查:~/.codex/config.toml

  f) Gemini CLI — 检查:~/.gemini/settings.json

  如果以上均未找到,询问用户使用的是哪个客户端。

Step 4 — 写入配置(适用于 b/c/d/f 的 JSON 格式客户端):
  要添加的配置项为:
    "charles": {
      "command": "charles-mcp-server",
      "args": []
    }

  重要:如果配置文件已存在,先读取再解析 JSON,
  在 "mcpServers" 内追加 "charles" 键(若无 "mcpServers" 则创建),
  不要覆盖已有的其他 MCP server 配置。
  如果文件不存在,创建并写入:
    { "mcpServers": { "charles": { "command": "charles-mcp-server", "args": [] } } }

  适用于 e(Codex CLI TOML 格式):
  在 ~/.codex/config.toml 中追加:
    [mcp_servers.charles]
    command = "charles-mcp-server"
    args    = []

Step 5 — 验证:
  运行:charles-mcp-server
  等待 2 秒后终止进程。
  没有 import 报错则安装成功。

Step 6 — 报告结果:
  输出:"charles-mcp-server 安装完成,请重启 MCP 客户端以加载新服务。"
  并提示:Charles Proxy 需处于运行状态,且已在 Proxy → Web Interface Settings 中
  启用 Web Interface(用户名:Charles-mcp-server,密码:123456)。

各客户端配置

所有客户端使用相同的 MCP server,只是配置文件路径和格式不同。

Claude Code(CC)

claude mcp add-json charles '{
  "type": "stdio",
  "command": "charles-mcp-server",
  "args": []
}'

如需自定义 Charles 账号:

claude mcp add-json charles '{
  "type": "stdio",
  "command": "charles-mcp-server",
  "args": [],
  "env": {
    "CHARLES_USER": "your-username",
    "CHARLES_PASS": "your-password"
  }
}'

Claude Desktop

配置文件路径:

  • macOS:~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows:%APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "charles": {
      "command": "charles-mcp-server",
      "args": []
    }
  }
}

Cursor

配置文件路径(二选一):

  • 全局:~/.cursor/mcp.json

  • 项目级:.cursor/mcp.json(只对当前项目生效)

{
  "mcpServers": {
    "charles": {
      "command": "charles-mcp-server",
      "args": []
    }
  }
}

Windsurf

配置文件路径:~/.codeium/windsurf/mcp_config.json

{
  "mcpServers": {
    "charles": {
      "command": "charles-mcp-server",
      "args": []
    }
  }
}

Codex CLI

配置文件路径:~/.codex/config.toml

[mcp_servers.charles]
command = "charles-mcp-server"
args    = []

自定义账号:

[mcp_servers.charles]
command = "charles-mcp-server"
args    = []

[mcp_servers.charles.env]
CHARLES_USER = "your-username"
CHARLES_PASS = "your-password"

Gemini CLI

配置文件路径:~/.gemini/settings.json

{
  "mcpServers": {
    "charles": {
      "command": "charles-mcp-server",
      "args": []
    }
  }
}

pyenv 环境(通用)

如果通过 pyenv 管理 Python 环境,将上述所有配置的 "command" 替换为对应 Python 的绝对路径,并改用 -m 方式启动:

{
  "mcpServers": {
    "charles": {
      "command": "/path/to/pyenv/versions/3.11.x/bin/python",
      "args": ["-m", "charles_mcp_server.main"]
    }
  }
}

环境变量

所有客户端均支持通过环境变量覆盖默认配置:

变量

默认值

说明

CHARLES_USER

Charles-mcp-server

Charles Web Interface 用户名

CHARLES_PASS

123456

Charles Web Interface 密码

CHARLES_PROXY_HOST

127.0.0.1

Charles 代理地址

CHARLES_PROXY_PORT

8888

Charles 代理端口

CHARLES_MCP_MODE

external

managed-headless 时自动启动并托管 Charles Headless

CHARLES_EXECUTABLE

自动检测

Charles 可执行文件路径(managed-headless 模式使用)

CHARLES_MCP_RUNTIME_DIR

~/.charles-mcp-server

Headless 模式的配置、数据与日志目录


License

MIT License — Owner: tianhetonghua

Available Tools

13 tools
check_keyword_existsA

【互锁-1】探测关键词在当前 checkpoint 的哪些条目中出现。

只返回 id + 命中位置的轻量索引,不返回 body 内容。 调用后 filter_by_keyword 对该关键词的批量限制解除(5 分钟内有效)。

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses side effect (lifting batch limit for filter_by_keyword) and constraint (lightweight return, no body). This is good transparency for a simple tool, though could mention if it modifies state permanently.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose, minimal and no fluff. Every sentence adds value: purpose and behavioral detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with output schema (known but not displayed), description covers core purpose, return characteristics (lightweight), and side effect. Sufficient for agent to decide and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% so description must compensate. The description mentions the 'keyword' parameter implicitly (keyword to search for) but does not add format or constraints beyond schema. Adequate but not compensating fully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool checks if a keyword exists in the current checkpoint's entries, and explicitly distinguishes by promising only lightweight index (id + hit positions) without body content. This is specific and sets it apart from sibling tools like filter_by_keyword which presumably return more data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description explains a key usage context: after calling this tool, the batch limit for filter_by_keyword on that keyword is lifted for 5 minutes. It also delineates return format. However, it does not explicitly state when not to use or list alternatives, missing full guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

filter_by_encryptionA

扫描当前 checkpoint 的所有条目,找出 body 疑似加密/压缩/编码的请求。

按 max(req_entropy, res_entropy) 降序排列。 threshold 默认 3.9:纯文本 JSON 通常 2.53.5,Base64 约 4.05.0,加密 > 5.0。 limit 默认 20,上限 100。

ParametersJSON Schema
NameRequiredDescriptionDefault
thresholdNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must disclose behavior. It explains sorting by entropy and provides threshold ranges. Though it doesn't mention whether scanning is read-only or affects state, the description sufficiently informs about the tool's behavior (scanning + ordering).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each packed with information: scanning & ordering, threshold meaning, limit bounds. No fluff. Front-loaded with main action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values need not be described. Description covers threshold and limit defaults and semantics, addressing main parameters. Could mention that it scans all entries (performance note) but not required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage. Description adds semantic meaning: threshold default and entropy context, limit default and upper bound. This compensates well, though it could also explain parameter units or format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses specific verb '扫描' (scan) and resource 'checkpoint 的所有条目' (all entries), explicitly stating the tool finds requests with encrypted/compressed/encoded body. It clearly distinguishes from sibling tools like filter_by_host, filter_by_keyword, etc., none of which target encryption.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Purpose is clear enough for an agent to infer when to use it (detect encryption) and when not (other filter needs). However, no explicit when-not-to-use or alternative recommendations are given, leaving some ambiguity for new agents.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

filter_by_hostA

按 host 字段过滤,返回精简视图。

只匹配 entry 顶层的 host 字段,不会误命中 body 或 headers 中出现的域名。 支持部分匹配,例如 'example.com' 可匹配所有子域名。 limit 默认 15,上限 50,返回最近 N 条。

ParametersJSON Schema
NameRequiredDescriptionDefault
host_keywordYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description discloses key behaviors: returns simplified view, matches only top-level host, supports partial matching, and limit defaults/max. It does not specify read-only nature but is otherwise transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five concise sentences with no wasted words. The purpose is front-loaded, and each sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple filter tool with 2 params, the description covers filtering scope, matching behavior, output view, and limit constraints. An output schema exists but the description still sufficiently completes the context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage, so description fully explains both parameters: host_keyword (top-level host, partial matching) and limit (default 15, max 50, returns recent entries).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Filter by host field, returning a simplified view.' It specifies the scope (top-level host only) and distinguishes from siblings like filter_by_keyword that might search all fields.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for host-specific filtering and warns against mistaken matches in body/headers. However, it does not explicitly state when not to use or mention alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

filter_by_keywordA

【互锁-2】返回含关键词的条目精简视图(含 body 预览)。

匹配数 > 30 时须先调用 check_keyword_exists 解锁,防止上下文溢出。 limit 默认 10,上限 50,返回最近 N 条。

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description bears full burden. It discloses return type (streamlined view with body preview), limit behavior, and unlock requirement. Could be slightly improved by noting error behavior if unlock is omitted, but overall well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise at three sentences, with purpose first, then usage guideline, then limit details. The internal reference '互锁-2' might be confusing to non-Chinese speakers but is minor. No extraneous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with two parameters and an output schema, the description covers purpose, usage guidance, parameter semantics, and special unlock condition. It is fully sufficient for an agent to select and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so description adds all meaning. It explains the keyword parameter implicitly and the limit parameter with default and maximum. Also includes the unlock behavior tied to keyword. No parameter ambiguity remains.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns a streamlined view of entries containing a keyword, including a body preview. It uses specific verb ('返回') and resource ('条目'), and the keyword condition distinguishes it from sibling filter tools like filter_by_status or filter_by_host.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use the sibling tool check_keyword_exists as a prerequisite when match count exceeds 30, preventing context overflow. Also provides default and maximum limit values.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

filter_by_methodA

按 HTTP 方法过滤(GET / POST / PUT / DELETE 等),返回精简视图。

大小写不敏感。limit 默认 15,上限 50,返回最近 N 条。

ParametersJSON Schema
NameRequiredDescriptionDefault
methodYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description adds value by disclosing case-insensitivity, default limit (15), max limit (50), and that it returns the latest N items. However, it does not specify whether the operation is destructive or read-only, nor what 'streamlined view' means precisely.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two sentences. It front-loads the core purpose and then adds key behavioral details. No redundant or unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists, the description doesn't need to detail return values. It covers essential behavioral aspects (case-insensitivity, limits) but does not explain how it differs from other filter tools or what constitutes a 'streamlined view'. Adequate for a simple filtering tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description fully compensates by explaining the method parameter (HTTP methods) and the limit parameter (default 15, max 50, returns latest). This adds significant meaning beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (filter by HTTP method) and the specific resource (HTTP methods like GET, POST, PUT, DELETE). It distinguishes from sibling filter tools by focusing on method filtering, and mentions a 'streamlined view' which sets expectations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for filtering HTTP methods but does not provide explicit guidance on when to use this tool versus alternatives like filter_by_path or filter_by_status. No 'when not to use' or comparison with siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

filter_by_pathA

按 URL 路径关键词过滤,返回精简视图。

适合快速定位某个业务接口,例如 '/api/sign'、'/login'。 limit 默认 15,上限 50,返回最近 N 条。

ParametersJSON Schema
NameRequiredDescriptionDefault
path_keywordYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description discloses key traits: filtering action, simplified view, and limit behavior (default 15, max 50, returns latest N). It does not mention read-only status, but as a filter/query it is implied non-destructive. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is succinct with three sentences, no wasted words, and front-loads the action. Every sentence provides essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool simplicity (2 params, no annotations) and presence of output schema, the description adequately covers purpose, usage, and parameter behavior. It could mention output format or pagination, but is largely complete for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description must compensate. It explains path_keyword as URL path keyword with examples, and clarifies limit's default, maximum, and effect (returns latest N). This adds significant meaning beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool filters by URL path keyword and returns a simplified view, with explicit examples like '/api/sign' and '/login'. This distinguishes it from sibling tools that filter by other criteria (e.g., host, method, status).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates suitability for quickly locating a business interface, providing context for when to use. However, it does not explicitly say when not to use or name alternative tools, though the sibling context implies differentiation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

filter_by_statusA

按 HTTP 状态码过滤,返回精简视图。

适合排查异常请求,例如 403(鉴权失败)、500(服务错误)。 limit 默认 15,上限 50,返回最近 N 条。

ParametersJSON Schema
NameRequiredDescriptionDefault
status_codeYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses that the tool returns a 'simplified view' and specifies default and maximum limit values. However, it does not mention whether the operation is read-only, any side effects, or the exact nature of the simplified view. The behavioral disclosure is adequate but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no redundancy. The first sentence articulates the core function, the second provides use-case context, and the third specifies parameter behavior. Every sentence serves a purpose, and the structure is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 parameters, required 'status_code', and an output schema), the description covers the main points: purpose, usage scenario, and parameter details. It does not explicitly note that 'status_code' is required (though the schema does), nor does it describe the output format (but the output schema exists). Overall, it is sufficiently complete for a straightforward filter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, meaning the JSON schema provides no explanations for parameters. The description compensates fully by explaining the 'status_code' parameter with practical examples (403, 500) and detailing the 'limit' parameter's default (15) and maximum (50). This adds essential meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: filtering by HTTP status code and returning a simplified view. It also provides concrete examples (403, 500), making the purpose unambiguous. Among sibling tools that filter by other attributes, this tool is distinctively about status codes, so differentiation is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers usage context ('suitable for troubleshooting abnormal requests') and examples, but it does not explicitly state when not to use this tool or mention alternative sibling tools. The agent is left to infer that for host or keyword filtering, other tools should be used. No exclusionary guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_raw_dataA

获取指定条目的完整原始数据(headers、body、timing 等全部字段)。

优先在当前 checkpoint 查找,找不到时从 ARCHIVE 全局搜索。 这样即使切换了 checkpoint,仍可用 entry_id 直接取历史数据。

ParametersJSON Schema
NameRequiredDescriptionDefault
entry_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description carries the full burden. It discloses the search order (checkpoint then archive) and the scope of data returned (full raw data). It does not mention permissions, rate limits, or potential response size, but still provides useful behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences: purpose, search logic, and benefit. Efficient and front-loaded. No wasted words, though slight restructuring could improve flow.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists (not shown but reported), the description need not cover return values. It explains the input parameter and search behavior, which is sufficient for a raw data retrieval tool. Could mention typical use cases or data size considerations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter, entry_id, with no schema description. The description adds meaning by stating it is used to specify an entry and that the ID works across checkpoints. This compensates for the 0% schema coverage, though more detail on ID source could improve.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves complete raw data (headers, body, timing) for a specified entry. It distinguishes from sibling filtering and summary tools by focusing on raw retrieval across checkpoints.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains search priority (current checkpoint then ARCHIVE) and the ability to fetch historical data even after checkpoint switches. It does not explicitly state when not to use or list alternatives, but the context is clear given sibling tool names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

harvest_dataA

从 Charles 同步增量流量,并在时间线上创建一个新 checkpoint。

【fresh_start=False】(默认) 取上次 harvest 之后产生的新条目,写入 ARCHIVE,创建 checkpoint。 首次调用时加载 session 全部流量。

【fresh_start=True】 在时间线上插一个"重置点",不加载任何条目。 之后的 harvest_data() 只返回此刻之后的新流量。 典型用法:切换分析目标前调用一次。

每次调用都会:

  • 将新条目存入 ARCHIVE(可通过 load_checkpoint 随时回溯)

  • 将 CACHE 切换到本次新增的条目

  • 清空 Charles session 并重启录制(导出始终只含最新增量)

  • 使所有关键词授权失效

ParametersJSON Schema
NameRequiredDescriptionDefault
fresh_startNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses side effects: writing to ARCHIVE, switching CACHE, clearing Charles session, and invalidating keyword auth. This is comprehensive and allows the agent to anticipate all behavioral impacts.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized with sections and bullet points, making it easy to read. It could be slightly more concise, but the structure is effective for conveying detailed behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists, the description appropriately focuses on behavior and side effects. It does not describe return values, but that is acceptable. The description covers all necessary usage context for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% but the description thoroughly explains the single boolean parameter 'fresh_start', detailing both default and alternative behaviors. This adds significant meaning beyond the schema's minimal definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool syncs incremental traffic from Charles and creates a checkpoint. It distinguishes two modes (fresh_start=False/True) and explains their effects. This is specific and resource-oriented, differentiating it from sibling filtering tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool, including typical usage before switching analysis targets. However, it does not explicitly state when not to use it or compare to alternatives like load_checkpoint.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_checkpointsA

列出所有 checkpoint,展示完整的收割时间线。

每条记录包含: id checkpoint 序号 read_at 收割时间(HH:MM:SS) count 本次新增条目数 start_time 本批流量的最早请求时间 end_time 本批流量的最晚请求时间 is_reset 是否为 fresh_start 重置点

当前正在查看的 checkpoint 由 current_checkpoint_id 标注。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It does not mention whether the tool is read-only, destructive, requires authentication, or has any side effects. It only describes the output structure, not the behavior of invoking the tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: a clear introductory sentence followed by bullet points that detail each field. It is appropriately sized for the tool's simplicity, with no redundant or missing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters and an output schema exists, the description fully explains all output fields and mentions the current_checkpoint_id annotation. It provides sufficient context for an agent to invoke the tool and interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no input parameters (0 params), so the baseline is 4. The description adds value by explaining the meaning of each output field, which goes beyond the schema's field names. This helps the agent understand the return data.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all checkpoints to show the complete harvesting timeline, and enumerates the fields in each record. It distinguishes itself from sibling tools (like filter tools or harvest_data) by specifying it is for viewing checkpoint metadata, though it does not explicitly contrast with siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not-to-use guidance is provided. The description implies a use case (viewing timeline), but does not mention alternatives or prerequisites. It is adequate for a simple list tool but lacks comparative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

load_checkpointA

将 CACHE 切换到指定 checkpoint 的数据,所有过滤工具随即在该时间窗口内工作。

这是只读回溯——ARCHIVE 和 CHECKPOINTS 不会被修改。 调用 harvest_data() 可随时切回最新增量。

checkpoint_id:来自 list_checkpoints 返回的 id 字段。

ParametersJSON Schema
NameRequiredDescriptionDefault
checkpoint_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It discloses that the operation is read-only, does not modify ARCHIVE/CHECKPOINTS, and that filtering tools work within the checkpoint's time window. This adequately informs the agent of key behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, efficiently conveying purpose, key constraints, and reversal option. It is front-loaded with the main action. Could be slightly more structured but very concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one required parameter and an existing output schema, the description covers all essential aspects: what it does, how to use it, its read-only nature, and how to switch back. It is complete given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter checkpoint_id has a description explaining it comes from list_checkpoints' id field. This adds value beyond the schema (which has no description), making it clear how to obtain the correct value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool switches CACHE to a specified checkpoint, enabling filtering tools within that time window. It distinguishes itself from sibling tools like harvest_data (revert to latest) and list_checkpoints (get checkpoint IDs).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the context for using the tool: to load a checkpoint for read-only backtracking, and mentions that harvest_data() can be called to revert. It lacks explicit 'when not to use' but provides sufficient guidance for an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_throttlingA

切换网络带宽限制。

  • 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

ParametersJSON Schema
NameRequiredDescriptionDefault
presetYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses auto-cleanup behavior and provides a comprehensive list of presets. Without annotations, the description carries the full burden and does well, though it could mention potential impact on other operations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured with bullet points, clear sections, and no redundant information. It is concise yet fully informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers usage, parameters, and behavior well. Although output schema exists but not described, the tool's action is simple (toggle throttling), so the description is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description explains the preset parameter thoroughly: valid values are preset names or null, and all preset names are listed. The compensation is complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it switches network bandwidth throttling, with preset enabling and null disabling. It distinguishes itself from sibling tools which are all filtering or data-related.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly describes when to use preset vs null, and mentions auto-cleanup on process exit. No need to specify alternatives as siblings are unrelated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

summarize_trafficA

对当前 checkpoint 的流量做全局统计,帮助 agent 快速定向。

不拉取任何 body,只统计路由维度: top_hosts 流量最多的域名 top_paths 最活跃的路径前缀(取前两段) status_dist HTTP 状态码分布 method_dist HTTP 方法分布

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses behaviors: it does not fetch body, only routing dimensions, and lists exactly what statistics it returns. This provides complete transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise: two sentences plus a bullet list. The first sentence states the main action, and the bullet list clarifies the dimensions. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters and an output schema (mentioned in context), the description is complete. It explains the tool works on the current checkpoint and lists all output dimensions. No obvious gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are 0 parameters, so baseline is 4. The description adds value beyond the empty schema by explaining the tool's purpose and output, which is necessary for an agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it performs global statistics on traffic for the current checkpoint, listing specific dimensions (top_hosts, top_paths, etc.). This distinguishes it from sibling filter tools, which focus on filtering rather than summarizing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use (for traffic overview) vs. siblings (filters), but lacks explicit guidance like 'use this instead of filter_by_* when you need aggregation.' Still, the purpose is clear enough for correct selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.2/5.0
Disambiguation5/5

Each tool targets a distinct aspect of traffic capture/analysis: filter tools focus on different fields, checkpoint tools manage timelines, and utilities cover data retrieval, throttling, and summarization. The only pair (check_keyword_exists and filter_by_keyword) is clearly linked as a required sequence, avoiding ambiguity.

Naming Consistency4/5

All tools use snake_case. Filter tools consistently start with 'filter_by_', while others use verb_noun patterns (e.g., harvest_data, get_raw_data). This provides predictability, though not all follow the exact same template.

Tool Count5/5

13 tools cover the full lifecycle of traffic interception (harvest, checkpoint management, multiple filters, raw data retrieval, network throttling, and traffic summarization) without redundancy or unnecessary scope.

Completeness5/5

The tool surface enables full CRUD-like operations on captured traffic: harvest (create checkpoint), list/load checkpoints (read), filter by multiple criteria, get raw data, and analyze summaries. Throttling is also included, covering common debugging needs.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    Integrates Charles Proxy with MCP clients to provide real-time and historical network traffic capture and structured analysis. It features a summary-first approach that filters noise and desensitizes data for efficient, low-token agent debugging and monitoring.
    18
    302
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI to analyze real-time HTTP(S) traffic captured by ProxyPin, with tools to browse, search, and inspect requests and responses, as well as access saved history sessions.
    17
    3
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tianhetonghua/Charles-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server