1. 为什么要在 Kali 里用 MCP 协议驱动 AI 做渗透
MCP 协议(Model Context Protocol)简单说就是给 AI 装了一双能操作外部工具的手。以前我们用 AI 写渗透思路,它只能给你一段命令让你自己复制到 Kali 里跑;现在通过 MCP,AI 可以直接调用 Kali 上的 nmap、sqlmap、gobuster 这些工具,把「扫描—分析—再扫描」的循环自动串起来。这套方案适合已经装好 Kali、想用自然语言驱动渗透流程的安全学习者,也适合想把重复性信息收集工作交给 AI 的渗透测试人员。
我这次落地的架构是双服务端:Windows 侧跑mcp_server.py作为 AI 接口层,负责工具注册和参数处理;Kali 侧跑kali_server.py作为执行层,负责真正执行命令并返回 JSON 结果。两者之间走 HTTP REST 通信。AI 客户端(CodeBuddy、Claude Code 等支持 MCP 的工具)通过 stdio 连接mcp_server.py,再由它转发到 Kali 的 5000 端口。整个链路里,TaoToken 承担的是统一 Key 和 API 通道的角色——你不需要在多个 AI 工具里分别配 Key,一个 Key 就能让工具链里的模型调用走同一条通道,config.toml 里改一处就行。
下面我会把 config.toml 骨架、MCP 服务端配置片段、连通性验证和一次自动化渗透触发动作完整交付出来,你照着改 IP 和路径就能跑。
2. TaoToken 前置准备:统一 Key 与 API 通道
在动手配 MCP 之前,先把 TaoToken 的 Key 拿到手,这是后面 config.toml 里要填的核心字段。访问官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 注册后进控制台,在 API Keys 页面创建一个新 Key。建议按项目命名,比如kali-mcp,方便后面在多个工具间区分。
创建完 Key 后,API 端点用 https://taotoken.net/api 这个基础地址,不要带任何多余路径。TaoToken 在这里的作用是统一通道:你的 CodeBuddy、Claude Code、以及后面可能加的其它 MCP 客户端,都指向同一个 base_url 和同一个 Key,省去每个工具单独配一遍的麻烦。如果你后面要跑长期编码或 Agent 任务,可以在控制台看 Coding Plan 的额度情况;只是验证模型通不通,用模型对话页面发一条测试消息就行。
拿到 Key 之后先别急着写 config.toml,先在终端里用 curl 验证一下通道是否通:
curl -X POST https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer sk-你的Key" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4o-mini", "messages": [{"role": "user", "content": "ping"}] }'返回里有choices字段就说明 Key 和通道都正常。这一步很关键,因为后面 MCP 报错时,你要能快速判断是通道问题还是 MCP 配置问题。如果这里就 401,先去控制台确认 Key 有没有复制全、有没有被禁用。
3. 可复制的 config.toml 骨架与 MCP 服务端配置
MCP 客户端的配置文件格式各家略有差异,但核心字段一致。下面这份 config.toml 骨架是我实测能跑通的版本,你重点改三个地方:command指向你的 Python 路径、args里的mcp_server.py全路径、以及--server后面的 Kali IP。
# config.toml - MCP 客户端配置骨架 [mcp_servers.kali_mcp] type = "stdio" command = "python" timeout = 180 [mcp_servers.kali_mcp.args] server_script = "F:/AI/mcp_server.py" kali_endpoint = "http://192.168.75.132:5000/" [mcp_servers.kali_mcp.env] TAOTOKEN_API_KEY = "sk-你的Key" TAOTOKEN_BASE_URL = "https://taotoken.net/api"如果你用的客户端是 JSON 格式(比如 CodeBuddy),等价写法如下:
{ "mcpServers": { "kali_mcp": { "timeout": 180, "type": "stdio", "command": "python", "args": [ "F:\\AI\\mcp_server.py", "--server", "http://192.168.75.132:5000/" ], "env": { "TAOTOKEN_API_KEY": "sk-你的Key", "TAOTOKEN_BASE_URL": "https://taotoken.net/api" } } } }路径这里有个坑:Windows 下 JSON 里必须用双反斜杠\\或正斜杠/,单反斜杠会被转义。Kali 的 IP 用ip addr查,NAT 模式下通常是 192.168.x.x 段。
Kali 侧的kali_server.py启动命令:
cd /root/mcp-kali python3 kali_server.py看到Running on http://0.0.0.0:5000就说明执行层起来了。mcp_server.py里的工具注册片段长这样,你可以照着加自己的工具:
@mcp.tool() def nmap_scan(target: str, ports: str = "1-1000") -> dict: """Nmap 网络扫描工具""" return kali_client.safe_post("api/tools/nmap", { "target": target, "ports": ports })对应的 Kali 端点:
@app.route('/api/tools/nmap', methods=['POST']) def nmap_scan(): data = request.json cmd = ['nmap', '-sS', '-p', data['ports'], data['target']] result = executor.execute_command(cmd, timeout=300) return jsonify(result)4. 连通性验证与一次自动化渗透触发
配置写完后,先做三层验证,别一上来就跑完整流程。
第一层,验证 Kali 执行层是否活着:
curl -X POST http://192.168.75.132:5000/api/tools/server_health返回{"status": "ok"}说明 Kali 侧正常。
第二层,验证 MCP 接口层能否转发。在 Windows 终端里直接跑一次 mcp_server.py 的测试调用:
python F:/AI/mcp_server.py --server http://192.168.75.132:5000/ --test nmap_scan --target 192.168.75.1 --ports 22,80如果返回扫描结果 JSON,说明 AI 接口层到执行层的链路通了。
第三层,在 AI 客户端里发自然语言指令。我用的是 DC-1 靶机做验证,指令是:
对 192.168.75.130 做一次快速资产发现,先子域名枚举,再端口扫描,最后用 nuclei 扫一遍常见漏洞,把结果整理成表格。
AI 会依次调用subfinder_enum→naabu_scan→nuclei_scan,整个过程大约 15 分钟。触发动作的关键是让 AI 明确「先做什么、再做什么」,否则它可能只调一个工具就停。实测下来,把流程拆成三步描述,AI 的调用链最稳定。
验证成功的标志是 AI 返回的表格里有真实的端口、服务版本和漏洞编号,而不是泛泛的「建议你扫描」。如果它只给建议不调工具,说明 MCP 连接没生效,回到第二层检查。
5. 本篇常见错排查
Python MCP 包安装失败:报No matching distribution found for mcp,基本是 Python 版本低于 3.10。用py -3.13 -m pip install mcp指定版本装,或者用绝对路径"C:\...\Python313\python.exe" -m pip install mcp。环境变量里只能留一个 Python 版本,多版本共存必冲突。
Kali 软件源 GPG 密钥错误:报NO_PUBKEY,执行sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ED65462EC8D5E4C5,然后重写 sources.list 加上signed-by字段。
APT 进程锁冲突:报无法获得锁 /var/lib/dpkg/lock-frontend,先ps aux | grep apt找到进程号,sudo kill -TERM 进程号,再删锁文件sudo rm -f /var/lib/dpkg/lock-frontend,最后sudo dpkg --configure -a修复。
MCP 连接成功但 AI 不调工具:检查 config.toml 里timeout是否够大,nmap 全端口扫描可能超过 180 秒。另外确认--server地址末尾有斜杠,少了斜杠部分客户端会拼错路径。
Kali 执行层返回超时:kali_server.py里execute_command的 timeout 默认 300 秒,masscan 全端口可能不够,改成 600。同时确认 Kali 防火墙没拦 5000 端口。
6. 接入文档与后续工具链
整套流程跑通后,你手里就有了一条「自然语言 → MCP → Kali 工具」的自动化链路。后续要加新工具,只需要在mcp_server.py里注册一个@mcp.tool()函数,在kali_server.py里加一个对应的 Flask 端点,然后在 config.toml 里不用改任何东西——工具会自动出现在 AI 的可调用列表里。
如果你在接入过程中遇到 Key 或通道问题,直接去 API Keys 页面重新生成一个对比测试;想先验证模型对话是否正常,用模型对话页面发一条消息最快;打算把这条链路用于长期编码或 Agent 任务,可以在控制台看 Coding Plan 的额度配置。接入文档里有完整的端点和参数说明,config.toml 的字段含义也在里面。
最后提醒一句:这套环境只在你自己拥有或获得书面授权的靶机上跑。DC-1、DVWA 这类本地靶机是练手的最佳选择,别把目标指向任何未授权的地址。