在一个理想的世界里,供应商会为其终端提供自己的 MCP 集成,但在那之前,这个项目提供了一个模型上下文协议(MCP)服务器,允许客户端与运行在 Electron 应用中的系统终端进行交互。它能够执行命令、管理终端会话并以编程方式检索输出。
<a href="https://glama.ai/mcp/servers/@nexon33/console-terminal-mcp-server"> <img width="380" height="200" src="https://gips0.baidu.com/it/u=847031029,2188809527&fm=3081&app=3081&f=PNG?w=760&h=400" alt="Electron 终端服务器 MCP 服务器" /> </a>该系统由两个主要部分组成:
index.js):一个 Node.js 脚本,通过标准输入/输出(stdio)监听 MCP 请求。它使用 @modelcontextprotocol/sdk 并作为到 Electron 后端的桥梁。如果后端尚未运行,它会自动启动 Electron 后端。需要 mcp-package.json 来指定 "type": "module"。main.js):Electron 应用的主要进程。它运行一个 Express HTTP 服务器(默认端口 3000),MCP 服务器 (index.js) 通过此服务器进行健康检查和 API 调用。此后台使用 node-pty 管理实际的终端进程,并在加载 terminal.html 的隐藏 BrowserWindow 实例中运行。这是终端交互在像 Claude Desktop 这样的客户端中的样子:
Claude Desktop 窗口带终端输出:

单独的 Electron 终端窗口:

git clone <your-repository-url>
cd command-terminal-electron # 或你的仓库目录名称
npm install
node-pty)。
node rebuild.js
(详情见 rebuild.js)启动 MCP 服务器:
使用 Node.js 运行 index.js 脚本。这将通过 stdio 监听 MCP 命令,并在 Electron 后端进程 (main.js) 尚未运行且未监听预期的 HTTP 端口时自动尝试启动它。
node index.js
注意:Electron 进程在后台隐藏运行,并会在需要时自动重新启动,尽可能复用。
通过 MCP 交互:
客户端通过 stdio 连接到 node index.js 进程,并使用 use_mcp_tool 命令。服务器名称在 index.js 中定义为 "Electron Terminal"。
可用工具:
terminal_start:创建一个新的终端会话并执行初始命令。
{ "command": "string" }{ "content": [...], "sessionId": "string" }<use_mcp_tool>
<server_name>Electron Terminal</server_name>
<tool_name>terminal_start</tool_name>
<arguments>
{
"command": "ls -l"
}
</arguments>
</use_mcp_tool>
terminal_execute:在现有会话中执行命令。
{ "command": "string", "sessionId": "string" }{ "content": [...] }(会话 ID 包含在文本内容中)<use_mcp_tool>
<server_name>Electron Terminal</server_name>
<tool_name>terminal_execute</tool_name>
<arguments>
{
"sessionId": "session_id_from_start",
"command": "pwd"
}
</arguments>
</use_mcp_tool>
terminal_get_output:检索特定会话的累积输出。
{ "sessionId": "string" }{ "content": [...] }<use_mcp_tool>
<server_name>Electron Terminal</server_name>
<tool_name>terminal_get_output</tool_name>
<arguments>
{
"sessionId": "session_id_from_start"
}
</arguments>
</use_mcp_tool>
terminal_stop:终止特定的终端会话进程。
{ "sessionId": "string" }{ "content": [...] }<use_mcp_tool>
<server_name>Electron Terminal</server_name>
<tool_name>terminal_stop</tool_name>
<arguments>
{
"sessionId": "session_id_from_start"
}
</arguments>
</use_mcp_tool>
terminal_get_sessions:列出所有当前由 Electron 后端管理的活动会话。
{}{ "content": [...] }(内容包含活动会话的 JSON 字符串)<use_mcp_tool>
<server_name>Electron Terminal</server_name>
<tool_name>terminal_get_sessions</tool_name>
<arguments>
{}
</arguments>
</use_mcp_tool>
这个 Electron 终端 MCP 服务器与 文件系统 MCP 服务器 配合得非常有效。你可以使用文件系统服务器浏览目录、读写文件,然后使用这个终端服务器在这些目录或相关文件上执行命令,提供一个全面的远程开发和交互体验,无缝地与例如内置在 Claude Desktop 中的互联网搜索功能一起工作。
claude_desktop_config.json 文件应放置在用户的 AppData 目录下:
C:\Users\<username>\AppData\Roaming\Claude\claude_desktop_config.json此文件用于 Claude Desktop 发现和配置外部 MCP 服务器。
配置文件定义了 Claude Desktop 可以启动并连接的 MCP 服务器。每个服务器条目指定了如何启动服务器进程。
mcpServers:
每个键是一个服务器名称,值是其启动配置的对象。
服务器配置示例 (command-terminal):
command:要运行的可执行文件(例如,Node.js 服务器的 node)。args:传递给命令的参数数组(例如,指向你的 MCP 服务器脚本的路径)。{
"mcpServers": {
"command-terminal": {
"command": "node",
"args": [
"C:\\Path\\to\\index.js"
]
}
}
}
mcpServers:
映射服务器名称到它们配置的顶级对象。
command-terminal:
示例服务器名称。你可以在该对象中定义多个服务器。
command:
用于启动 MCP 服务器的可执行文件。
args:
传递给命令的参数,例如服务器脚本的路径。
本项目根据 MIT 许可证发布。详情见 LICENSE 文件。