Token导航 LogoToken导航TokenDH.com
Hydrox MCP Tester V0 logo
安全风控stdio官方级别未说明来源级核验

Hydrox MCP Tester V0

MCP Server

用于测试MCP服务器安全性的命令行工具,支持检测提示注入、工具污染等恶意行为。

工具数

0

提示词数

0

GitHub Stars

0

资源数

0
安全命令行工具PythonClaudeClaude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

AFan2025

提供方

AFan2025

最后核验

2026/5/17 20:21

运行时

Python

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

python run.py --server-id tester_server --transport stdio --suite basic --cmd python --arg tester_server.py

详细介绍

HydroX-mcp测试仪-v0

MCP统一安全测试器CLI(针对HydroX AI)。它提供了一种标准化的方法来测试MCP服务器,以防范恶意行为,如提示注入、工具中毒等。

必要软件包:

uv - 此项目被初始化为一个uv Python环境,这意味着会自动包含以下包:

使用方法:

步骤1:运行run.py

这是作为Python命令行界面(CLI)工具运行的主要Python文件。你需要将服务器ID名称、传输方式以及测试套件传递给CLI工具。每种传输方式都有其特定的CLI参数,你需要填写这些参数。

对标准输入输出服务器运行基本安全测试套件

python run.py --server-id tester_server --transport stdio --suite basic --cmd python --arg tester_server.py

从基础套件中运行一个特定的测试

python run.py --server-id tester_server --transport stdio --suite basic --test tool_description_pinjection --cmd python --arg tester_server.py

对HTTP服务器运行高级测试套件

python run.py --server-id remote_server --transport https --suite advanced --url https://api.example.com/mcp

示例命令:使用tester_server.py对basic.py执行当前工作命令,利用示例工具进行工具描述提示注入攻击:

uv run run.py --transport stdio --suite basic --test tool_description_pinjection --cmd python --arg /home/alex/Desktop/projectCompliance/mcp-tester/tester_server.py

当前模块的说明

\generic_client.py\ 翻译成中文是:“通用客户端.py”

这个文件包含了MCPTesterClient类,这是您用来连接MCP服务器的主要客户端。它是每个测试套件都将使用的主要客户端。目标是让这个类充当多个不同MCP服务器之间的通用连接器,并且可以灵活地插入标准或自定义测试到客户端中。

这个类提供了配置、连接和管理多个MCP服务器会话的方法,使用不同的传输方式(例如,stdio、可流式HTTP/S)。它旨在跨不同传输方式工作,以避免通过本地和第三方托管的MCP服务器及工具进行测试时遇到的困难。

Key Features:
- Add and store multiple server configurations (stdio, streamable_http, etc.)
- Establish and manage asynchronous connections to MCP servers
- Maintain active sessions and handle resource cleanup
- Provide a unified interface for test suites to interact with MCP servers

Attributes:
    transport (str): The default transport type for new servers (optional).
    server_params (Dict[str, Dict[str, Any]]): Mapping of server_id to server configuration dicts.
    sessions (Dict[str, ClientSession]): Active MCP client sessions by server_id.
    exit_stacks (Dict[str, AsyncExitStack]): Async context managers for resource cleanup per server.
    logger (logging.Logger): Logger for client events and errors.

Example usage:
    client = MCPTesterClient(transport="stdio")
    client.add_server("local_server", {"transport": "stdio", "server_params": StdioServerParameters(...)})
    await client.connect_server_stdio("local_server", ...)
    # ... run tests ...
    await client.cleanup()

\run.py\ 翻译成中文是“运行文件.py”或更简洁地称为“运行脚本.py”。不过,在实际语境中,我们通常直接说“run.py文件”或“执行run.py”,因为“.py”已经表明这是一个Python文件。所以,一个更自然的翻译可能是“run.py文件”或“执行run.py”

这是用于运行并启动命令行界面(CLI)工具的文件。请阅读\run.py\文件的文档字符串或本Markdown文件开头的“使用步骤”,以了解如何使用\run.py\

测试服务器脚本.py | 对抗性工具.py | 示例工具.py

这是一个模拟本地服务器,可以与通用MPC客户端连接,以展示服务器的基本功能。\tester_server\通过本地stdio传输连接,并连接到\adversarial_tools.py\和\sample_tools.py\,分别作为模拟对抗工具和模拟样本工具,用于测试概念验证/通用形式的对抗方法,以微调测试的敏感性和准确性。请随意根据您的需求进行修改。

如何添加测试和服务器

如何添加测试

要添加测试,请创建一个名为{testname}.py的新文件,用于存放你的测试功能。测试应接受任意数量的参数以及一个MCPTesterClient对象。测试应通过直接调用客户端中的功能或通过客户端来运行,因为当执行run.py时,它应该已经连接到目标服务器。请参阅示例测试以了解具体示例。

为了在run.py中注册测试,需要创建一个全局字典,将测试名称映射到可调用对象:即TESTSUITE_INDEX = {"testname": Callable\[testname\]}。然后,在run.py中导入测试套件索引并将其添加到TEST_REGISTRY索引中。这是一种非常简单但不太可扩展的方法。为了提高可扩展性,建议接下来负责此测试套件项目的开发人员使用Python装饰器作为包装器来帮助封装和注册测试,而不是每次添加新套件时都需要修改内部的TEST_REGISTRY。希望这种方法能尽快被弃用,鉴于我的截止日期临近,我实在没有时间设计一个更好的解决方案。

样本测试说明

basic.py | 基本测试:

  1. 工具描述:pinjection(或“注射针工具”)

这是一种常见的攻击类型,利用工具描述进行提示/命令注入。这很可能是MCP(可能是指某种机器学习或自动化系统中的客户端-服务器架构)提示注入攻击中最常见的案例。MCP客户端可能会将预定义的工具及其描述列表直接加载到客户端代理的系统提示中,作为默认行为。这种做法存在危险,因为它允许恶意行为者通过修改工具描述,直接访问模型的系统提示。

此测试通过加载与通用客户端连接的每个服务器,检查工具描述中是否存在任何可能的提示注入方案。然后,它会在每个连接的服务器上调用server.list_tools()方法。它使用一个判断模型来输出对提示是否试图向代理注入恶意命令或指令的风险等级的判定。这一过程通过JSON格式的输出完成,该输出会向客户端返回风险等级(低、中、高)以及简要描述。

改进方法:

  • 判决模型:当前本地运行的是Llama-3.1-8B-Instruct模型,

这可以调整为一个经过微调的模型,该模型在对抗性命令类型上得到了更好的训练。

  • 用户界面调整:

目前,输出只是被打印到标准输出/终端,没有其他形式的保存。如果我们想将这段代码提升到生产级别供其他人使用,应该将其连接到数据库或某种其他形式的数据聚合系统,以便进行更好的分析和扩展。

  1. 工具响应_注射(或“工具响应_针注”,具体根据上下文确定“pinjection”的准确含义)

这是针对MCP服务器利用工具响应进行的第二常见的攻击类型。根据某些客户端/代理如何处理响应,MCP服务器工具的响应可以被用来向客户端操作中注入恶意提示或命令。此类攻击的一个简单示例是,如果客户端使用未受保护的os.system()命令来处理来自MCP工具的响应。一个未转义的字符串很容易导致更严重的安全漏洞。本测试旨在为给定MCP服务器上的工具参数提供一个样本输入,并接收响应。然后,它将使用一个判断模型来检查响应中是否尝试了命令注入。

改进方法:

  • 未实现错误:工具的用例范围过广,无法针对所有类型工具及其各种不同的输入需求进行通用测试。

advanced.py | 高级测试:

  1. 超时测试器

这个测试针对的是服务器中常见的一种标准形式的超时资源泄漏攻击,该攻击仅针对stdio传输连接。它通过\find_stdio_child()\方法查找通过stdio传输启动的子进程,并在超时断开连接前和后分别进行快照捕获。

改进方法:

  • 很多漏洞:由于实习期结束前没时间修复,加上我对网络方面的经验相对不足。

我尝试使用哪个MCP服务器进行了超时海绵攻击测试

  • Google Workspace MCP:本地 | 标准输入输出 | https://github.com/taylorwilsdon/google_workspace_mcp/tree/main

这次尝试未能成功,主要是因为通过stdio设置持续资源监控时遇到了问题。通过stdio传输方式启动的MCP服务器作为CPU上的子进程,难以对其进行监控。

  • Invideo MCP 服务器:第三方 | SSE/HTTPS | https://mcp.invideo.io/sse

这是一台通过官方Anthropic MCP网站https://docs.claude.com/en/docs/agents-and-tools/remote-mcp-servers发布的服务器。其目的是通过调用视频创建API来测试超时海绵攻击,这一过程可能会消耗大量计算资源。可以通过API令牌调用的使用情况来衡量结果。然而,该MCP服务器似乎在通过HTTPS请求时存在问题。服务器可能尚未完全设置好,因为连接到服务器时出现了超时问题。

  • Canva MCP 服务器:第三方 | HTTPS | https://mcp.canva.com/mcp

这个,使用HTTPS请求方法调用工具是可行的。不过,我认为其中一些操作需要特权,我无法通过某些函数,比如sessions.call_tools()。实习结束时没有足够的时间继续调试。可能需要一个良好的MCP服务器来测试超时的有效性。 记录的指令:2025-09-12 16:38:38,585 - httpx - INFO - HTTP 请求:POST https://mcp.canva.com/mcp "HTTP/1.1 401 未授权"

  • Box MCP 服务器:第三方 | HTTPS | https://mcp.box.com/

与Canva存在相同的问题。

目录标签

目录标签

安全命令行工具PythonClaude安全测试本地部署MCP服务器提示注入检测

支持客户端

Claude

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

none

运行时(runtime,运行环境)

Python

工具数量(toolCount,工具数)

0

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdionone部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP