MCP server which runs debian package manager (apt) commands for you using ai agents.
A TypeScript-based Model Context Protocol (MCP) server for controlling the apt package manager on Linux. Designed for integration with AI agents (e.g., Cursor, Claude Desktop, Windsurf) and developer tools, it exposes tools for installing, removing, updating, and querying apt packages using the system's native apt and dpkg binaries with sudo privileges.
sudo assumed for all operationsgit clone <your-repo-url>
cd popos-control-mcp
npm install
npm run build
npm run dev
# or
npm start
Note: The server assumes the user has passwordless
sudofor apt operations.
All tools are exposed via MCP and can be called by AI agents or clients. Each tool returns a plain text response with a summary, stdout, stderr, and logs (if any).
installAptPackagepackages: array of package names (e.g., ["curl", "git"]){ "packages": ["curl"] }
Result: SUCCESS
Summary: Apt install succeeded for: curl
[stdout]
...
[stderr]
...
removeAptPackagepackages: array of package names{ "packages": ["curl"] }
Result: SUCCESS
Summary: Apt remove succeeded for: curl
[stdout]
...
[stderr]
...
queryAptPackageStatuspackage: package name (string){ "package": "curl" }
Result: SUCCESS
Summary: Status for package curl: Installed=installed, Upgradable=false, Available=available
[stdout]
Package: curl
Installed: installed
Upgradable: no
Available: available
updateAptPackages{}
Result: SUCCESS
Summary: Apt update and upgrade completed successfully.
[stdout]
apt update stdout:
...
apt upgrade stdout:
...
[stderr]
...
listUpgradableAptPackages{}
Result: SUCCESS
Summary: Listed upgradable packages successfully.
[stdout]
...
[stderr]
...
upgradeSpecificAptPackagepackage: package name (string){ "package": "curl" }
Result: SUCCESS
Summary: Apt only-upgrade succeeded for: curl
[stdout]
...
[stderr]
...
You can test the server using the MCP CLI or by connecting with an AI agent (e.g., 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);
})();
Result: ERROR and a summary.Result: ERROR
Summary: Apt install failed: E: Unable to locate package notarealpackage
[stdout]
...
[stderr]
E: Unable to locate package notarealpackage
Q: Does the server require passwordless sudo? A: Yes, all apt/dpkg commands are run with sudo and assume no password prompt.
Q: What transport does the server use? A: Stdio by default, for easy integration with local AI agents and tools.
Q: Can I use this server remotely? A: You can adapt it to use HTTP/SSE transport, but stdio is recommended for local/agent use.
Q: How do I add new tools?
A: Add a new server.addTool block in src/index.ts following the existing pattern.
MIT