基于TypeScript的模型上下文协议(MCP)服务器,用于控制Linux上的apt包管理器。设计用于与AI代理(例如Cursor、Claude Desktop、Windsurf)和开发者工具集成,它通过系统原生的apt和dpkg二进制文件(具有sudo权限)提供安装、卸载、更新和查询apt包的工具。
sudogit clone <your-repo-url>
cd popos-control-mcp
npm install
npm run build
npm run dev
# 或
npm start
注意: 该服务器假定用户对apt操作具有无需密码的
sudo权限。
所有工具都通过MCP暴露,并可由AI代理或客户端调用。每个工具返回一个纯文本响应,包括摘要、标准输出、标准错误和日志(如果有)。
installAptPackagepackages: 包名数组(例如,["curl", "git"]){ "packages": ["curl"] }
结果:成功
摘要:apt安装成功:curl
[标准输出]
...
[标准错误]
...
removeAptPackagepackages: 包名数组{ "packages": ["curl"] }
结果:成功
摘要:apt卸载成功:curl
[标准输出]
...
[标准错误]
...
queryAptPackageStatuspackage: 包名(字符串){ "package": "curl" }
结果:成功
摘要:包curl的状态:已安装=已安装,可升级=否,可用=可用
[标准输出]
包:curl
已安装:已安装
可升级:否
可用:可用
updateAptPackages{}
结果:成功
摘要:apt更新和升级完成。
[标准输出]
apt更新的标准输出:
...
apt升级的标准输出:
...
[标准错误]
...
listUpgradableAptPackages{}
结果:成功
摘要:列出可升级的包成功。
[标准输出]
...
[标准错误]
...
upgradeSpecificAptPackagepackage: 包名(字符串){ "package": "curl" }
结果:成功
摘要:仅升级apt包成功:curl
[标准输出]
...
[标准错误]
...
您可以使用MCP CLI测试服务器,或者通过连接AI代理(如Cursor、Claude Desktop)进行测试。
const { Client } = require("@modelcontextprotocol/sdk/client");
const { StdioClientTransport } = require("@modelcontextprotocol/sdk/client/stdio");
const client = new Client({ name: "test-client", version: "1.0.0" });
const transport = new StdioClientTransport();
(async () => {
await client.connect(transport);
const result = await client.callTool("installAptPackage", { packages: ["curl"] });
console.log(result);
})();
结果:错误和摘要。结果:错误
摘要:apt安装失败:E: 无法找到包notarealpackage
[标准输出]
...
[标准错误]
E: 无法找到包notarealpackage
问:服务器需要无需密码的sudo吗? 答:是的,所有apt/dpkg命令都使用sudo执行,并假设没有密码提示。
问:服务器使用什么传输方式? 答:默认使用标准I/O,便于与本地AI代理和工具集成。
问:我可以远程使用这个服务器吗? 答:您可以将其适应HTTP/SSE传输,但建议本地/代理使用标准I/O。
问:如何添加新工具?
答:在src/index.ts中添加一个新的server.addTool块,遵循现有模式。
MIT