APT包管理器控制服务

一个基于TypeScript的模型上下文协议(MCP)服务器,用于控制Linux上的apt包管理器,支持安装、移除、更新和查询apt包,适用于AI代理和开发者工具集成。

  • by GdMacmillan
  • JavaScript
  • 本地部署
  • 6 星标
  • 更新于
在 GitHub 查看 GdMacmillan/apt-mcp-server

使用说明

Apt MCP服务器

一个基于TypeScript的模型上下文协议(MCP)服务器,用于控制Linux上的apt包管理器。专为与人工智能代理(如Cursor、Claude Desktop、Windsurf)和开发人员工具集成而设计,它提供了使用系统本机安装、删除、更新和查询apt包的工具 apt 和 dpkg 二进制文件 sudo 特权。


特性

  • 通过MCP工具安装、删除、更新和查询apt包
  • 安全、无密码 sudo 假设用于所有操作
  • 输入验证和稳健的错误处理
  • 所有工具的一致、人类可读的输出
  • 专为stdio传输而设计(默认用于本地AI代理集成)

设置和安装

  1. 克隆存储库:
    git clone <your-repo-url>
    cd popos-control-mcp
    
  2. 安装依赖项:
    npm install
    
  3. 构建项目:
    npm run build
    
  4. 运行服务器(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: available
    

4. 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 遵循现有模式。


许可证

麻省理工学院