Apt MCP服务器
一个基于TypeScript的模型上下文协议(MCP)服务器,用于控制Linux上的apt包管理器。专为与人工智能代理(如Cursor、Claude Desktop、Windsurf)和开发人员工具集成而设计,它提供了使用系统本机安装、删除、更新和查询apt包的工具 apt 和 dpkg 二进制文件 sudo 特权。
______________________________________________________________________
特性
- 通过MCP工具安装、删除、更新和查询apt包
- 安全、无密码
sudo假设用于所有操作 - 输入验证和稳健的错误处理
- 所有工具的一致、人类可读的输出
- 专为stdio传输而设计(默认用于本地AI代理集成)
______________________________________________________________________
设置和安装
- 克隆存储库:
git clone
cd popos-control-mcp- 安装依赖项:
npm install- 构建项目:
npm run build- 运行服务器(stdio传输):
npm run dev
# or
npm start注: 服务器假定用户没有密码 sudo 为了便于操作。______________________________________________________________________
工具和API端点
所有工具都通过MCP公开,可以由AI代理或客户端调用。每个工具都返回一个纯文本响应,其中包含摘要、stdout、stderr和日志(如果有的话)。
1. installAptPackage
- 说明: 安装一个或多个apt软件包。
- 参数:
- packages:包名称数组(例如。, ["curl", "git"])
- 输入示例:
{ "packages": ["curl"] }- 输出示例:
Result: SUCCESS
Summary: Apt install succeeded for: curl
[stdout]
...
[stderr]
...2. removeAptPackage
- 说明: 删除一个或多个apt包。
- 参数:
- packages:包名称数组
- 输入示例:
{ "packages": ["curl"] }- 输出示例:
Result: SUCCESS
Summary: Apt remove succeeded for: curl
[stdout]
...
[stderr]
...3. queryAptPackageStatus
- 说明: 查询软件包是否已安装、可用或可升级。
- 参数:
- package:包名称(字符串)
- 输入示例:
{ "package": "curl" }- 输出示例:
Result: SUCCESS
Summary: Status for package curl: Installed=installed, Upgradable=false, Available=available
[stdout]
Package: curl
Installed: installed
Upgradable: no
Available: available4. updateAptPackages
- 说明: 更新apt包列表并升级所有包。
- 参数: 无
- 输入示例:
{}- 输出示例:
Result: SUCCESS
Summary: Apt update and upgrade completed successfully.
[stdout]
apt update stdout:
...
apt upgrade stdout:
...
[stderr]
...5. listUpgradableAptPackages
- 说明: 列出所有可升级的apt软件包。
- 参数: 无
- 输入示例:
{}- 输出示例:
Result: SUCCESS
Summary: Listed upgradable packages successfully.
[stdout]
...
[stderr]
...6. upgradeSpecificAptPackage
- 说明: 升级特定的apt包。
- 参数:
- package:包名称(字符串)
- 输入示例:
{ "package": "curl" }- 输出示例:
Result: SUCCESS
Summary: Apt only-upgrade succeeded for: curl
[stdout]
...
[stderr]
...______________________________________________________________________
示例用法
CLI(标准IO传输)
您可以使用MCP CLI或通过连接AI代理(例如Cursor、Claude Desktop)来测试服务器。
Node.js示例
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);
})();______________________________________________________________________
错误处理和故障排除
- 所有错误均以一致的格式返回
Result: ERROR以及总结。 - 常见错误原因:
- 包名无效:请检查拼写和允许的字符 - 找不到包:请确保该包存在于您的存储库中 - 权限被拒绝:确保配置了无密码sudo - Apt-lock:服务器会自动重试一次,但如果错误仍然存在,请等待并重试
- 错误输出示例:
Result: ERROR
Summary: Apt install failed: E: Unable to locate package notarealpackage
[stdout]
...
[stderr]
E: Unable to locate package notarealpackage______________________________________________________________________
常见问题解答
Q: 服务器是否需要无密码的sudo? A: 是的,所有apt/dpkg命令都使用sudo运行,并且假设没有密码提示。
Q: 服务器使用什么传输? A: 默认情况下为Stdio,便于与本地AI代理和工具集成。
Q: 我可以远程使用此服务器吗? A: 您可以调整它以使用HTTP/SSE传输,但建议将stdio用于本地/代理。
Q: 如何添加新工具? A: 添加新 server.addTool 把…的车堵住 src/index.ts 遵循现有模式。
______________________________________________________________________
许可证
麻省理工学院
