MCP工具构建扩展

Ignition MCP是一个VS Code扩展,允许用户声明式地构建MCP工具并将其提交到代码库中,使AI助手能够访问构建、测试、部署和调试会话等任务。

  • by jlost
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 jlost/ignition-mcp

使用说明

🔥 点火MCP

声明性地构建MCP工具并将其提交到您的存储库中。

在中定义工具 tasks.json 和 launch.json你的AI助手可以访问构建、测试、部署、调试会话——任何你可以打包在脚本中的东西。版本受控,与您的团队共享,不需要MCP服务器代码。

适用于: 光标、VS代码+复制副本、克劳德代码、克劳德桌面和任何兼容MCP的客户端。

💡 为什么不使用终端命令?

AI代理通常运行 npm run build 在一个壳。但VS Code任务提供了更多:

端子 点火MCP
原始输出文本 错误通过问题匹配器填充“问题”面板
一次一个命令 dependsOn 链条自动运行
AI必须知道所有参数 输入变量提示用户或接受AI值
无调试支持 带有断点和变量检查的完整调试会话

你的 tasks.json 已经定义了项目的构建和运行方式。点火MCP将其暴露给您的AI。

🚀 快速开始

  1. 定义任务 在 .vscode/tasks.json:
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Deploy Staging",
      "type": "shell",
      "command": "python scripts/deploy.py --env ${input:environment}",
      "detail": "Deploy to staging or production with zero-downtime rollout"
    }
  ],
  "inputs": [
    {
      "id": "environment",
      "type": "pickString",
      "options": ["staging", "production"]
    }
  ]
}
  1. 扩展自动配置 您的MCP客户端启动时。

  2. 问你的AI:

    • “部署到暂存”
    • “运行构建并显示任何错误”
    • “开始调试并在第42行设置断点”
    • “什么是价值 user.permissions?"

该任务成为一个名为的MCP工具 task_deploy_staging。AI可以提供环境输入,也可以省略它来提示您。

🔌 MCP工具

每个VS Code任务和启动配置都作为自己的工具公开,还有用于管理的实用工具。

⚡ 动态任务工具

在工作区中定义的每个任务都将成为一个名为 task_<sanitized_name>例如:

  • 任务“构建”->工具 task_build
  • 任务“npm:测试”->工具 task_npm_test

基于任务类型的行为:

  • 后台任务 (isBackground: true):立即开始并返回 executionId。稍后检查进度 get_task_status 或 get_task_output.
  • 前沿任务 (isBackground: false):等待完成并返回带有退出代码和输出的结果。

任务输入 自动暴露为 可选的 刀具参数:

  • 如果AI提供 所有输入 (或者它们有默认值),任务立即使用这些值运行
  • 如果 缺少任何输入,VS Code提示用户输入缺失的值
  • 这允许人工智能提供它所知道的,并在剩下的时间里尊重用户

🐛 动态启动工具

在工作区中定义的每个启动配置都将成为一个名为 launch_<sanitized_name>例如:

  • 配置“启动程序”->工具 launch_launch_program
  • 配置“附加到Chrome”->工具 launch_attach_to_chrome

所有启动工具都是后台的 (调试会话长时间运行):

  • 立即返回 sessionId
  • 使用 get_debug_status 检查活动会话
  • 使用 stop_debug_session 停止调试

启动输入 工作方式与任务输入相同:

  • 所有输入均为可选参数
  • 省略任何输入,让VS Code提示用户

预启动任务 当调试会话开始时,由VS Code自动处理。

⚙️ MCP选项

任务支持MCP选项 options 块。启动配置在顶层使用它们(您将看到一个架构警告,但它工作正常)。将鼠标悬停在编辑器中的选项上以查看完整文档。

任务示例:

{
  "label": "Build",
  "type": "shell",
  "command": "npm run build",
  "options": {
    "mcp": { "returnOutput": "onFailure", "interactive": true }
  }
}

启动示例:

{
  "name": "Debug",
  "type": "node",
  "request": "launch",
  "mcp": { "preserveConsole": true }
}
选项 默认值 描述
returnOutput onFailure 何时包括输出: always, onFailure, never
outputLimit 20480 要捕获的最大字符数(空=无限制)
interactive false (任务)在本机终端中运行sudo/交互式输入
preserveConsole false (启动)保持原始控制台设置

⏱️ 扩展设置

在VS代码设置中配置(ignition-mcp.*):

设置 默认值 说明
outputLimit 20480 输出捕获的默认最大字符数(每次任务/启动可重写)
awaitTimeout 300000 默认超时时间(毫秒) await_task 和 await_debug_event (5分钟)

📋 任务实用工具

工具 说明 参数
list_tasks 列出所有可用的VS Code任务及其元数据 无
get_task_status 获取任务执行的状态(正在运行/已完成/失败/已取消) executionId
get_task_output 从任务中获取捕获的终端输出 executionId
cancel_task 取消正在运行的任务 executionId
await_task 等待任务完成(或超时) executionId, timeoutMs (可选)

🎯 调试实用工具

工具 说明 参数
list_launch_configs 列出所有可用的启动配置及其元数据 无
get_debug_status 获取活动调试会话的状态(运行/暂停/终止) 无
get_debug_output 获取捕获的调试控制台输出 sessionId (可选)
get_stack_trace 从暂停的会话中获取调用堆栈 sessionId (可选)
stop_debug_session 停止调试会话 sessionId (可选)
await_debug_event 等待状态更改(断点、异常、终止) sessionId (可选), timeoutMs (可选)

🔴 断点工具

工具 说明 参数
add_breakpoint 设置断点(在VS代码槽中可见) file, line, condition (可选)
remove_breakpoint 删除断点 file, line
list_breakpoints 列出所有当前断点 无

🔍 检测工具

工具 说明 参数
get_variables 暂停时从当前作用域获取变量 sessionId (可选), frameId (可选)
evaluate 在调试上下文中计算表达式 expression, sessionId (可选), frameId (可选)
continue_execution 恢复暂停的调试会话 sessionId (可选), threadId (可选)

🎮 可用命令

命令 描述
点火MCP:配置MCP客户端 添加到全局配置(光标、克劳德、自定义)
点火MCP:显示状态 显示服务器状态和选项
Ignition MCP:接管服务器 从运行相同工作区的另一个窗口接管MCP服务器

📊 状态栏

扩展程序在VS Code状态栏中显示一个火焰图标。悬停以查看端口,单击以查看选项。

🛠️ 发展

从源代码安装

  1. 克隆或下载此存储库
  2. 安装依赖项:
    npm install
    
  3. 构建扩展:
    npm run build
    
  4. 打包扩展:
    npx vsce package
    
  5. 在VS代码/光标中安装:
    • 打开“扩展”视图
    • 点击“…”菜单->“从VSIX安装…”
    • 选择生成的 .vsix 文件

扩展开发主机

  1. 安装依赖项:

    npm install
    
  2. 在VS代码/光标中打开此文件夹

  3. 按F5启动扩展开发主机

    • 这将自动运行手表构建任务
    • 一个新的VS Code窗口打开,加载了扩展名
  4. 对源文件进行更改-它们会自动重建

  5. 按Ctrl+Shift+F5(或Mac上的Cmd+Shift+F5)重新加载扩展

🔧 故障排除

状态栏显示“由另一个窗口提供服务”

具有相同工作区的另一个VS Code窗口已在运行MCP服务器。如果您希望此窗口处理MCP请求,请使用状态栏菜单中的“接管服务器”。

任务未出现

  • 确保在中定义了任务 .vscode/tasks.json
  • 检查任务定义是否没有语法错误
  • 跑 点火MCP:重新启动服务器 从“命令选项板”刷新工具列表
  • 在光标中:打开 光标设置>MCP 并验证服务器是否已启用(关闭/打开以重新连接)
  • 在VS代码中:检查副驾驶或MCP客户端配置中的等效MCP设置
  • 检查状态栏图标-单击它以查看服务器状态和选项
  • 作为最后手段重新加载VS Code窗口

⚠️ 已知限制

任务执行选项

为了捕获任务输出,Ignition MCP使用自己的进程生成而不是VS Code的本机任务执行来运行任务。这意味着:

  • 支持的选项: cwd, env, shell.executable, shell.args 受到尊重
  • 不支持:其他 ShellExecutionOptions (比如 shellQuoting)可以忽略
  • 未来VS代码选项:不会自动支持VS Code添加的新任务选项

变通方案:对于需要完全兼容VS代码执行的任务,请使用 "mcp": { "interactive": true } 在任务选项中。这将在VS Code的本机终端中运行任务(尽管不会捕获输出)。

启动配置输入

当启动配置具有 preLaunchTask 使用输入变量(${input:...}):

  • 简单的任务:输入被替换,任务在没有提示的情况下运行
  • 后台任务 (isBackground: true):VS代码处理执行-可能会提示用户输入
  • 具有依赖关系的任务 (dependsOn):VS代码处理执行-可能会提示用户输入

这是因为后台任务和任务依赖关系需要VS Code的本机任务编排。

转到调试输出捕获

Go调试适配器(Delve)将测试输出直接写入stdout/stderr,而不是通过调试适配器协议路由。当点火MCP超控时 console: "integratedTerminal" 到 "internalConsole" 对于输出捕获,此输出丢失,因为没有终端可以接收它。

症状:调试会话成功运行,但调试控制台或 get_debug_output 结果,即使手动运行相同的配置也会显示输出。

变通方案:禁用Go启动配置的控制台覆盖:

{
  "name": "Run Tests",
  "type": "go",
  "request": "launch",
  "mode": "test",
  "program": "${workspaceFolder}/...",
  "console": "integratedTerminal",
  "mcp": {
    "preserveConsole": true
  }
}

随着 preserveConsole: true,终端已创建,输出可见,但Ignition MCP无法以编程方式捕获它。

📄 许可证

麻省理工学院