🚀 VSCode 內部命令 MCP 服務器
這是一個基於 FastMCP 框架的 VSCode 擴展,它能將 VSCode 轉換為 MCP(Model Context Protocol)服務器。藉助該擴展,外部客戶端可通過 HTTP Streaming 和 Server-Sent Events(SSE)執行 VSCode 內部命令,為開發者提供更便捷的操作體驗。
🚀 快速開始
此擴展可將 VSCode 轉換為強大的 MCP 服務器,支持外部客戶端通過特定協議執行 VSCode 內部命令。以下是使用前的準備步驟:
安裝
1. 克隆項目
git clone https://github.com/bestk/vscode-internal-command-mcp-server
cd vscode-internal-command-mcp-server
2. 安裝依賴
npm install
3. 編譯項目
npm run compile
4. 在 VSCode 中安裝
- 按
F5 啟動擴展開發主機
- 或者打包為
.vsix 文件進行安裝
配置
在 VSCode 設置中配置服務器參數:
{
"vscode-internal-command-mcp-server.port": 8080,
"vscode-internal-command-mcp-server.host": "localhost",
"vscode-internal-command-mcp-server.autoStart": true,
"vscode-internal-command-mcp-server.asyncExecution": true,
"vscode-internal-command-mcp-server.executionDelay": 1000,
"vscode-internal-command-mcp-server.showAsyncNotifications": false,
"vscode-internal-command-mcp-server.allowedCommands": [
"editor.action.formatDocument",
"workbench.action.files.save",
"editor.action.clipboardCopyAction"
]
}
配置說明
| 屬性 |
詳情 |
port |
MCP 服務器端口,默認值為 8080 |
host |
MCP 服務器主機地址,默認值為 "localhost" |
autoStart |
擴展激活時是否自動啟動服務器,默認值為 true |
asyncExecution |
是否啟用異步命令執行(立即返回,後臺執行),默認值為 true |
executionDelay |
命令執行延時(毫秒),默認值為 0 |
showAsyncNotifications |
是否顯示異步命令執行完成通知,默認值為 false |
allowedCommands |
允許執行的命令列表(空數組表示允許所有命令) |
啟動服務器
- 自動啟動:擴展激活時自動啟動(如果
autoStart 為 true)
- 手動啟動:
- 命令面板:
VSCode Internal Command MCP Server: Start Server
- 或點擊狀態欄中的 🚀 VSCode internal command MCP 按鈕
服務器地址
- MCP 端點:
http://localhost:8080/mcp
- 健康檢查:
http://localhost:8080/health
狀態監控
- 狀態欄顯示:🚀 VSCode internal command MCP 🟢 (運行中) / 🚀 VSCode internal command MCP 🔴 (已停止)
- 命令面板:
VSCode Internal Command MCP Server: Show Status 查看詳細狀態
✨ 主要特性
- 🌐 HTTP Streaming 支持:使用
text/event-stream 協議,支持即時通信
- 🔧 VSCode 命令執行:遠程執行任意 VSCode 內部命令
- 📊 工作區信息查詢:獲取當前工作區狀態和文件信息
- ⚡ 異步後臺執行:支持異步命令執行,不阻塞用戶界面
- ⏰ 可配置延時:支持設置命令執行延時
- 🛡️ 安全控制:可配置的命令白名單機制
- 📡 即時狀態監控:狀態欄顯示服務器運行狀態
- 🔗 標準 MCP 協議:完全兼容 Model Context Protocol 規範
- ⚡ 高性能:基於 FastMCP 框架,支持併發請求和會話管理
- 🩺 健康檢查:內置健康檢查端點
📦 安裝指南
1. 克隆項目
git clone https://github.com/bestk/vscode-internal-command-mcp-server
cd vscode-internal-command-mcp-server
2. 安裝依賴
npm install
3. 編譯項目
npm run compile
4. 在 VSCode 中安裝
- 按
F5 啟動擴展開發主機
- 或者打包為
.vsix 文件進行安裝
💻 使用示例
基礎用法
客戶端連接示例
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
const transport = new StreamableHTTPClientTransport(new URL('http://localhost:8080/mcp'), {
requestInit: {
headers: {
'Content-Type': 'application/json',
Accept: 'application/json, text/event-stream',
},
},
});
const client = new Client({
name: 'vscode-mcp-client',
version: '1.0.0',
});
await client.connect(transport);
const result = await client.callTool({
name: 'execute_vscode_command',
arguments: {
"command": "editor.action.formatDocument"
},
});
console.log('Command result:', result);
使用 Cursor 配置示例
{
"mcpServers": {
"vscode-internal-commands": {
"url": "http://localhost:8080/mcp",
"transport": "http"
}
}
}
使用 curl 測試示例
curl http://localhost:8080/health
curl -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list"
}'
curl -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "execute_vscode_command",
"arguments": {
"command": "workbench.action.files.save"
}
}
}'
高級用法
異步執行響應示例
{
"success": true,
"async": true,
"taskId": "bg_task_1_1756952250790",
"message": "命令 'composer.cancelComposerStep' 已提交到後臺執行,將在 1000ms 後執行",
"command": "composer.cancelComposerStep",
"arguments": [],
"executionDelay": 1000,
"queueLength": 1,
"taskStats": {
"total": 1,
"pending": 1,
"running": 0,
"completed": 0,
"failed": 0,
"cancelled": 0
}
}
📚 詳細文檔
可用工具 (MCP Tools)
1. execute_vscode_command
執行 VSCode 內部命令
參數:
{
"command": string;
"arguments"?: string[];
}
2. list_vscode_commands
列出所有可用的 VSCode 命令
參數:無
返回:命令列表(前 20 個,如果超過會顯示省略提示)
3. get_workspace_info
獲取當前工作區信息
參數:無
返回:
{
"name": string;
"folders": Array<{
"name": string;
"uri": string;
}>;
"activeEditor": string;
}
🔧 技術細節
核心組件
┌─────────────────────────┐
│ VSCode Extension │
├─────────────────────────┤
│ FastMcpServer │ ← 基於 FastMCP 框架
├─────────────────────────┤
│ ServerManager │ ← 服務器管理和狀態
├─────────────────────────┤
│ CommandExecutor │ ← VSCode 命令執行器
├─────────────────────────┤
│ BackgroundTaskExecutor │ ← 後臺任務執行器
├─────────────────────────┤
│ TaskProvider │ ← VS Code 任務提供者
└─────────────────────────┘
技術棧
- 框架:FastMCP - TypeScript MCP 服務器框架
- 協議:Model Context Protocol (MCP)
- 傳輸:HTTP Streaming with Server-Sent Events (SSE)
- 驗證:Zod Schema 驗證
- 平臺:VSCode Extension API
- 異步執行:基於 setInterval 的後臺任務隊列
網絡協議
- 傳輸類型:
httpStream
- 內容類型:
text/event-stream
- 支持協議:HTTP/1.1
- CORS:默認啟用
異步執行機制
- 任務隊列:基於 Map 數據結構的內存隊列
- 執行器:使用 setInterval 定期檢查待執行任務
- 狀態管理:支持 pending、running、completed、failed、cancelled 狀態
- 延時執行:支持配置延時,任務在指定時間後執行
- 通知系統:可選的執行完成通知
📄 許可證
本項目採用 MIT 許可證,詳見 LICENSE 文件。