Information
MCP 交互服务
这是一个使用 FastMCP 库实现的 MCP 服务,旨在与像 Cursor、Windsurf 等 AI 工具进行交互。当 AI 工具在调用大型语言模型时需要用户输入或选择选项时,可以调用此 MCP 服务。
核心目的
该插件的核心目的是实现 AI 工具(如 Cursor 和 Windsurf)与用户之间的高频通信和确认。它通过以下方式显著提高了 AI 交互的效率和效果:
减少资源浪费:通过允许用户在 AI 提交到可能错误的解决方案路径之前确认或重定向 AI 的方法,该插件最小化了浪费的 API 调用和计算资源。
最大化资源利用率:每次对 Cursor 或 Windsurf 的 API 调用都变得更加高效,因为 AI 可以在继续之前验证其理解和方法是否正确。
防止注意力分散:通过早期确认方法,该插件有助于保持对正确解决方案路径的关注,而不是将注意力转移到错误的方法上。
支持交互式决策:用户可以积极参与决策过程,为 AI 提供即时反馈和指导。
简化复杂任务:对于多步骤任务,该插件确保在每个关键决策点上用户期望与 AI 执行之间的一致性。
功能
选项选择:显示一个选项列表供用户通过输入数字或提供自定义答案来选择
信息补充:当 AI 模型需要更完整的信息时,它们可以请求用户直接输入补充信息
多种用户界面:支持 CLI、Web 和 PyQt 界面
用户界面类型
该项目支持三种不同的用户界面类型,每种都有自己的特点:
CLI(命令行界面)
描述:打开一个新的命令提示符窗口供用户交互
优点:
最小依赖(不需要额外的包)
可以同时处理多个对话窗口
在没有图形界面的环境中工作良好
轻量级且启动速度快
缺点:
基本的视觉呈现
对非技术用户来说可能不够直观
最适合:服务器环境、资源有限的系统或需要同时进行多个对话的情况
PyQt 界面
描述:使用 PyQt 提供现代图形用户界面
优点:
清晰、专业的对话框
熟悉的桌面应用程序体验
对所有类型的用户都易于使用
缺点:
一次只能显示一个对话框
需要 PyQt 依赖项(安装较大)
最适合:重视视觉吸引力的桌面使用场景,或者只需要一个对话框的情况
Web 界面
描述:在网页浏览器中打开对话框
优点:
可以同时处理多个对话窗口
可以通过网页浏览器从任何地方访问
现代、可定制的界面
缺点:
需要安装网页浏览器
设置稍微复杂一些
最适合:远程访问场景、偏好使用网页界面的环境,或者需要同时进行多个对话的情况
使用指南
1. 入门(两种选项)
选项 A:使用预编译的可执行文件(推荐用于 Windows)
从 GitHub Releases 页面下载最新的预编译可执行文件。
无需安装 - 直接下载并运行可执行文件即可。
您可以使用以下命令测试功能:
bash
使用 PyQt 界面测试选项选择
.distmcp-interactive.exe test select_option --ui pyqt
使用 PyQt 界面测试信息补充
.distmcp-interactive.exe test request_additional_info --ui pyqt
您还可以指定文件路径来测试 request_additional_info 工具
.distmcp-interactive.exe test request_additional_info --ui pyqt D.md4. 跳至下面的步骤3进行配置。
选项B:从源代码安装
该项目根据不同UI类型分离依赖项:
requirements-base.txt:基础依赖项,所有UI类型共享
requirements-pyqt.txt:PyQt5 UI依赖项
requirements-web.txt:Web UI (Flask) 依赖项
您可以选择使用传统的pip或更快的uv包管理器来安装依赖项。
使用pip(传统方法)
根据您要使用的UI类型选择适当的依赖文件:
bash
cd requirements
CLI UI(最小依赖)
pip install -r requirements-base.txt
PyQt5 UI
pip install -r requirements-pyqt.txt
Web UI
pip install -r requirements-web.txt
注意:每个特定的UI依赖文件已经包含了对基础依赖的引用(通过 -r requirements-base.txt),因此您只需要安装一个文件。
使用uv(推荐,更快)
如果您已经安装了uv,可以使用以下命令创建虚拟环境并安装依赖项:
bash
创建虚拟环境
uv venv
激活虚拟环境
Windows
.venvScriptsactivate
macOS / Linux
source .venv/bin/activate
根据UI类型安装依赖项
cd requirements
CLI UI(最小依赖)
uv pip install -r requirements-base.txt
PyQt5 UI
uv pip install -r requirements-pyqt.txt
Web UI
uv pip install -r requirements-web.txt
您也可以使用项目的 pyproject.toml 文件直接安装所有依赖项:
bash
安装基础依赖项
uv pip install -e .
安装特定UI类型的依赖项
uv pip install -e ".[pyqt]" # PyQt5 UI
uv pip install -e ".[web]" # Web UI
uv pip install -e ".[all]" # 所有UI类型
2. 启动程序
启动不同的UI响应方式:
bash
命令行界面(默认)
python main.py run --ui=cli
Web界面
python main.py run --ui=web
PyQt界面
python main.py run --ui=pyqt
其他服务启动选项:
bash
使用默认设置启动服务(地址:127.0.0.1,端口:7888)
python main.py run
指定主机和端口
python main.py run --host 0.0.0.0 --port 8888
指定日志级别
python main.py run --log-level warning
3. 配置Cursor、Windsurf或Claude
使用stdio协议(推荐)
stdio协议是最稳定且推荐的连接方法,通过标准输入/输出直接与Python脚本通信,具有以下优点:
更高的稳定性和可靠性
可以同时打开多个对话框
简单直接,无需处理网络连接问题
与系统更紧密集成,响应更快
配置示例:
使用Python(源代码)
json
\{
"ai-interaction": \{
"command": "python",
"args": ["path/to/main.py", "run", "--transport", "stdio", "--ui", "cli"],
"env": \{\}
\}
\}
使用可执行文件
json
\{
"ai-interaction": \{
"command": "D:/Path/To/Your/mcp-interactive.exe",
"args": ["run", "--transport", "stdio", "--ui", "pyqt"],
"env": \{\}
\}
\}
使用SSE协议(备选方案)
如果需要通过网络连接到远程服务器,可以使用SSE协议:
本地启动:
bash
python main.py run --transport sse
Cursor配置:
json
\{
"ai-interaction": \{
"type": "sse",
"url": "http://127.0.0.1:8000/sse",
"env": \{\}
\}
\}
Windsurf配置:
json
\{
"ai-interaction": \{
"serverUrl": "http://127.0.0.1:7888/sse",
"disabled": false
\}
\}
4. 配置AI交互规则
为了最大化Cursor和Windsurf中AI交互的效果,请为MCP使用时配置以下规则:1. 当AI对任务不清楚或需要额外信息时,应调用MCP ai-interaction来请求用户澄清。
当AI有多种可能的解决方案时,应调用MCP ai-interaction让用户选择首选方案。
完成任务后,AI应调用MCP ai-interaction确认是否有其他需要执行的任务。
AI应将任务分解为多个阶段,并在开始新阶段之前调用MCP ai-interaction询问用户是否需要加入任何额外的想法或考虑因素。
AI应主动使用MCP确认关键决策,而不是做出假设。
这些规则确保了高质量、互动式的AI辅助服务,同时最大化每次API调用的价值。
其他功能
查看可用工具
bash
python main.py list-tools
测试工具
bash
测试选项选择工具
python main.py test select_option --ui=cli
测试信息补充工具
python main.py test request_additional_info --ui=cli
交互式测试客户端
项目包括一个交互式测试客户端,允许您使用不同的UI类型和方法测试MCP服务:
bash
运行交互式测试客户端
python mcp_client_en.py --host localhost --port 7888 --ui cli
选项:
--host: 服务器主机(默认:localhost)
--port: 服务器端口(默认:7888)
--ui: 要使用的UI类型(cli, pyqt, web)
客户端提供:
与MCP服务的连接测试
选择要测试的UI类型
测试select_option和request_additional_info两种方法
每种方法的多个参数预设
请求和响应的完全可视化
这对于以下方面特别有用:
调试UI交互问题
测试不同UI类型的行为
向用户演示服务
验证服务器功能
STDIO测试客户端
为了专门测试stdio传输协议,我们提供了一个命令行工具:
bash
使用默认设置测试stdio连接
python mcp_client_stdio.py
指定UI类型
python mcp_client_stdio.py --ui=pyqt
测试特定工具
python mcp_client_stdio.py --test=select_option
更多详情,请参阅STDIO测试指南。
UI测试
bash
测试PyQt界面
python test_ui.py --ui=pyqt
测试Web界面
python test_ui.py --ui=web
测试CLI界面
python test_ui.py --ui=cli
工具描述
选项选择 (select_option)
此工具用于向用户展示一组选项,并让他们通过输入数字或提供自定义答案进行选择。
参数:
options: 选项列表,可以是字符串列表或字典列表
prompt: 显示给用户的提示消息
返回:
包含选择结果的字典,格式如下:
json
\{
"selected_index": 0, // 用户选择的索引,如果为自定义答案则为-1
"selected_option": \{\}, // 用户所选选项的内容
"custom_input": "", // 用户的自定义输入(如果有)
"is_custom": false // 是否为自定义答案
\}
信息补充 (request_additional_info)
此工具用于向用户请求补充信息。
参数:
prompt: 请求信息的提示
current_info: 当前信息,作为参考显示给用户
返回:
用户输入的补充信息(字符串)
与AI工具集成
要将此MCP服务与AI工具集成,请遵循以下步骤:
使用可执行文件或Python源代码启动MCP服务:
使用可执行文件: mcp-interactive.exe run
使用Python源代码: python main.py run
在AI工具中配置MCP端点,根据需要选择stdio或SSE协议
当AI模型需要用户输入或选项选择时,调用适当的MCP工具
Claude集成要将Claude集成到Anthropic的官方产品或第三方应用程序中:
在您的AI工具设置中配置stdio连接:
json
\{
"mcp-interaction": \{
"command": "D:/Path/To/Your/mcp-interactive.exe",
"args": ["run", "--transport", "stdio", "--ui", "pyqt"],
"env": \{\}
\}
\}
配置Claude在需要时使用交互服务,指令如下:
“当您需要用户输入或确认时,请使用MCP交互服务”
“对于多项选择选项,调用select_option工具”
“为收集额外的用户信息,调用request_additional_info工具”
现在Claude能够通过MCP服务直接呈现选项并请求额外信息。
示例
选项选择示例
python
from fastmcp import Client
async with Client("http://127.0.0.1:8000/sse") as client:
options = [
"Option 1: Implement with TensorFlow",
"Option 2: Implement with PyTorch",
\{"title": "Option 3: Implement with JAX", "description": "Better for research purposes"\}
]
result = await client.call_tool(
"select_option",
\{"options": options, "prompt": "Please select a framework implementation"\}
)
selected_option = result.json
print(f"User selected: \{selected_option\}")
信息补充示例
python
from fastmcp import Client
async with Client("http://127.0.0.1:8000/sse") as client:
additional_info = await client.call_tool(
"request_additional_info",
\{
"prompt": "Please provide specific project requirements",
"current_info": "This is a data analysis project"
\}
)
print(f"User provided information: \{additional_info.text\}")
开发注意事项
除非你需要开发或测试多种UI类型,否则建议仅安装一种UI依赖。
如果需要添加新的依赖项,请将其添加到相应的依赖文件中。
当前开发状态
请注意以下实现的状态:
Windows:CLI和PyQt UI版本完全可用。Web UI仍存在一些需要解决的问题。
Linux/Mac:这些平台尚未经过充分测试,您的体验可能会有所不同。
我们正在积极努力提高所有平台和UI类型的兼容性。
构建与分发
构建可执行文件
此项目包含一个脚本,用于构建适用于Windows的独立可执行文件:
bash
构建Windows可执行文件
build_executable.bat
这将在dist目录下创建一个名为mcp-interactive.exe的文件,您可以无需安装Python即可运行它。
跨平台构建
要为不同平台构建可执行文件:
Windows
bash
使用批处理脚本
build_executable.bat
或手动使用PyInstaller命令
pyinstaller mcp-interactive.spec
macOS
bash
确保已安装PyInstaller
pip install pyinstaller
使用spec文件构建
pyinstaller mcp-interactive.spec
Linux
bash
确保已安装PyInstaller
pip install pyinstaller
使用spec文件构建
pyinstaller mcp-interactive.spec
注意:必须在目标平台上进行构建(例如,不能从Windows上构建macOS可执行文件等)。
通过GitHub分发
要使您构建的可执行文件可供下载:
为您的项目创建一个GitHub发布
将构建的可执行文件作为发布资产上传
提供清晰的文档说明每个平台应使用哪个可执行文件
示例步骤:
导航到您的GitHub仓库
点击右侧边栏中的“Releases”
点击“Create a new release”(创建新发布)
设置版本标签(例如v1.0.0)
添加发布的标题和描述
拖放或上传针对不同平台的可执行文件
点击“Publish release”(发布)用户随后可以从GitHub的发布页面下载适用于他们操作系统的相应版本。
许可证
本项目在MIT许可证下发布。