使用说明
交互式选择MCP服务器(原生UI)
一种模型上下文协议(MCP)服务器,允许AI代理通过 本机窗口 (使用Tauri构建),防止上下文中断,提供优质的用户体验。
✨ 特性
- 本机窗口:当代理需要您的输入时,会出现一个本机窗口。
- Markdown支持:来自AI的详细描述在markdown中呈现。HTML输出经过净化 Dompurify 以防止XSS。
- 输入验证:工具参数在协议边界处通过以下方式进行验证 黄道带 模式。无效呼叫(例如为空
choices)返回一个明确的错误,而不是崩溃。 - 键盘导航:可通过键盘完全访问。使用箭头键导航选项,
Enter确认,以及Shift+Enter用于自定义输入中的新行。 - 交叉平台的:支持Windows和macOS。
🚀 设置和安装
AI agent? Read AGENTS.md instead
如果您是一名AI编码代理,希望在您的项目中安装和使用此MCP服务器,请按照中的说明进行操作 AGENTS.md --它涵盖了设置、配置、 ask_user 工具API、CLI标志和客户端兼容性,采用专为您设计的简洁格式。
需求
- Node.js ≥20(要求
commanderv14和MCP SDK) - 锈 工具链(仅用于原生UI的本地构建)
选项A:使用npx运行(推荐)
您可以直接通过以下方式使用服务器 npx 在MCP客户端配置中:
{
"mcpServers": {
"interactive-choice": {
"command": "npx",
"args": [
"-y",
"mcp-interactive-choice"
]
}
}
}
选项B:本地构建
1.建造一切
从项目根:
npm install
npm run build
这将:
- 构建前端(Vite)
- 构建Tauri二进制文件(Rust)
- 编译MCP服务器(TypeScript)
- 将二进制文件复制到
bin/文件夹
2.向您的MCP客户注册
更新您的配置(例如。, claude_desktop_config.json):
{
"mcpServers": {
"interactive-choice": {
"command": "node",
"args": [
"/path/to/mcp-interactive-choice/dist/index.js"
]
}
}
}
可选:全局强制服务器端超时
通过 --timeout <seconds> 以设置本地窗口等待用户输入的时间的全局上限。如果没有此标志,服务器将无限期等待。忽略非正值或非数值(视为无超时):
{
"mcpServers": {
"interactive-choice": {
"command": "node",
"args": [
"/path/to/mcp-interactive-choice/dist/index.js",
"--timeout", "120"
]
}
}
}
可选:防止全局焦点窃取
通过 --silent 以防止UI每次启动时“窃取”窗口焦点(如果代理经常使用该工具,则很有用):
{
"mcpServers": {
"interactive-choice": {
"command": "node",
"args": [
"/path/to/mcp-interactive-choice/dist/index.js",
"--silent"
]
}
}
}
🛠️ 工具: ask_user
当需要人工决策时,代理会调用此工具。
论据:
title(可选):问题的简短标题。body(可选):Markdown中的详细上下文。渲染的HTML使用DOMPurify进行净化。choices(必填):非空字符串列表。recommended(可选):以下字符串之一choices正如代理人所暗示的那样。如果提供,它必须与以下之一完全匹配choices(在修剪空白后)或调用返回错误。
答复:
- 返回所选选项的字符串值。
- 退货
"User provided answer: {text}"如果用户键入了自定义响应。 - 退货
"User skipped the question"如果用户单击了“跳过”。 - 退货
"user cancelled the selection"如果窗口是手动关闭的。
🛠️ 开发与调试
UI开发(热重载)
要使用热重新加载迭代UI,请执行以下操作:
- 首选
packages/native-ui. - 跑
npm run tauri dev.
使用CLI参数运行(Windows/PPowerShell):
要在开发过程中测试特定数据,请使用该标志 --input:
npm run tauri dev -- -- -- --input '{"title":"Dev Test","choices":["A","B"]}'
🔍 MCP检验员测试
- 构建一切:
npm run build根。 - 运行检查器 从项目根:
npx -y @modelcontextprotocol/inspector node dist/index.js
⚠️ IDE/客户端兼容性
此服务器正在等待 无限期地 默认情况下。这是否有效取决于您的MCP客户端:
| 客户 | 行为 |
|---|---|
| 反重力 谷歌✅ 无客户端超时——工作完美 | |
| VS代码/GitHub副本 | ✅ MCP工具调用没有硬超时;使用取消令牌 |
| 克劳德桌面版 | ⚠️ 强制执行a 60秒 通过MCP TypeScript SDK进行客户端超时(DEFAULT_REQUEST_timeout_MSEC=60000)。如果用户没有及时响应,工具调用将失败。 |
| 光标 | ⚠️ 还强制执行a 60秒 客户端超时。这是一个正在上游跟踪的已知限制。 |
提示: 如果您的客户端强制执行60秒超时,请将--timeout 55传递给此服务器。然后,服务器将返回一个干净的“错误:用户反馈超时”响应 之前 客户端的超时触发,产生的错误比客户端的原始-32001取消更优雅。
📝 许可证
麻省理工学院