在人工智能快速发展的今天,如何让AI更高效地与现实世界交互,成为许多开发者和研究者关注的焦点。MCP(Model Context Protocol)技术作为一种创新的工具集成方案,为AI提供了一种“双手”的能力,使其能够通过调用外部工具完成复杂任务。本文将展示在实际场景中的应用。
环境搭建
在开始构建MCP工具之前,我们需要先搭建一个稳定的工作环境。以下是详细的环境配置步骤:
初始化项目
首先,我们需要初始化一个项目目录,这将作为我们后续开发的基础。运行以下命令:
uv init dirsearch-mcp-server
这一步会创建一个名为dirsearch-mcp-server
的目录,并初始化项目结构。
注:
uv 是一个挺全面的python依赖管理工具,但本人不用python做主力很久,略有生疏,按照大家的推荐也使用的uv。
这个项目名称原本是想用来连接dirsearch使用的,奈何环境问题一直搞不定,遂怒,决定使用 go run main.go
运行自编写的go程序,环境报错,亦怒, 直接 go build
编译执行。
创建Python虚拟环境
为了确保开发环境的隔离性和稳定性,我们使用Python虚拟环境。进入项目目录后,运行以下命令:
cd dirsearch-mcp-server uv venv
这将创建一个名为.venv
的虚拟环境,所有依赖包都将安装在这个环境中,避免与其他项目产生冲突。
激活虚拟环境
激活虚拟环境是使用MCP工具的前提。根据你的操作系统,运行以下命令:
.venvScriptsactivate
激活后,你的命令行提示符会显示(venv)
,表示虚拟环境已成功激活。
安装依赖
接下来,我们需要安装MCP的依赖包。运行以下命令:
uv add mcp[cli]
这将安装MCP的核心库及其命令行接口(CLI),为后续开发提供支持。
创建MCP服务器:赋予AI执行能力
在环境配置完成后,我们可以开始创建一个MCP服务器。以下是具体的实现代码:
import subprocess import time from pathlib import Path from mcp.server.fastmcp import FastMCP # Initialize FastMCP server mcp = FastMCP("beian-query-server", log_level="ERROR") @mcp.tool() async def run_beian_query(domain: str, timeout: int = 300) -> dict: """ 执行备案信息查询工具 参数: domain (str): 要查询的域名 (如 baidu.com) timeout (int): 最大执行时间(秒) 返回: dict: 包含执行结果的字典 """ start_time = time.time() result = { "status": "pending", "command": "", "returncode": None, "stdout": "", "stderr": "", "duration": 0.0 } try: # 配置固定参数 target_dir = r"E:ScriptGoStoreRedTeamtoolsToolsForBeian" exe_path = str(Path(target_dir) / "beian.exe") go_cmd = [exe_path, "info", "-i", domain] # 验证环境 if not Path(exe_path).exists(): # 关键修改点3 raise FileNotFoundError(f"beian.exe not found in {target_dir}") # 记录完整命令 result["command"] = " ".join(go_cmd) # 执行命令 process = subprocess.run( go_cmd, cwd=target_dir, stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=timeout, encoding='utf-8', errors='replace' ) # 记录结果 result.update({ "status": "success", "returncode": process.returncode, "stdout": process.stdout.strip(), "stderr": process.stderr.strip(), "duration": round(time.time() - start_time, 2) }) except subprocess.TimeoutExpired as e: result.update({ "status": "timeout", "stderr": f"执行超时 ({timeout}s)", "duration": timeout }) except Exception as e: result.update({ "status": "error", "stderr": str(e), "duration": round(time.time() - start_time, 2) }) return result if __name__ == "__main__": mcp.run(transport="stdio")
上述 exePath 中的beian.exe 就是编译后的程序名称
代码解析
-
初始化MCP服务器
使用FastMCP
类创建一个服务器实例,指定服务器名称为beian-query-server
,并将日志级别设置为ERROR
,以减少不必要的输出。 -
定义工具函数
通过@mcp.tool()
装饰器,我们将run_beian_query
函数注册为一个MCP工具。这个函数接收两个参数:domain
(域名)和timeout
(超时时间),并返回一个包含执行结果的字典。 -
工具逻辑
- 配置工具路径:指定
beian.exe
的路径,并验证其是否存在。 - 执行命令:通过
subprocess.run
执行备案查询命令,并捕获输出和错误信息。 - 结果处理:根据执行结果更新状态、返回码、输出内容和执行时间。
- 配置工具路径:指定
配置MCP Client
创建好 server 后,就需要对client进行配置了,由于 vscode 中 cline 插件很好的支持了 mcp server 功能,可以节省我们创建 mcp client 的步骤 ,但是使用时需要进行相关配置,以下是配置文件的内容:
{ "mcpServers": { "beian-query-server": { "name": "调用golang工具的备案查询工具", "key": "dirsearch-mcp-server", "command": "uv", "args": [ "--directory", "E:\Script\PyStore\dirsearch-mcp-server\", "run", "--with", "mcp", "mcp", "run", "main.py" ], "disabled": false, "autoApprove": [] } } }
配置文件解析
name
:工具的名称,用于描述工具的功能。key
:工具的唯一标识符。command
:运行工具的命令。args
:命令的参数列表,用于指定运行环境和脚本路径。disabled
:是否禁用该工具。autoApprove
:自动批准的工具列表。
这段配置相当于运行以下命令:
uv --directory E:ScriptPyStoredirsearch-mcp-server run --with mcp mcp run main.py
运行
为了更方便地使用MCP工具,我们可以在VSCode中安装cline
插件,并进行以下配置:
-
安装插件
在VSCode的扩展市场中搜索并安装cline
插件。 -
选择MCP服务器
打开VSCode,选择MCP server
作为目标服务器。 -
配置工具
点击Config
按钮,按照提示完成配置。 -
运行工具
配置完成后,工具将自动运行,如下图所示:
- 查看结果
工具运行后,你可以在VSCode的输出窗口中查看结果,如下图所示:
最终的查询结果如下:
总结
通过本文的介绍,我们成功搭建了一个基于MCP技术及ai技术的智能化备案信息查询工具,并实现了自动调用和结果展示。
MCP技术为AI提供了一种与外部工具交互的能力,在渗透测试中,如果将完整的渗透测试工具链通过MCP技术装备给ai调用,那么智能化的渗透测试工具将极大的提高工作的效率,就可以实现渗透测试从自动化到完全智能化的转变。