返回市场
操作系统-MCP

操作系统-MCP

作者:marcos28722 星标更新:2025-11-03

项目介绍

Linux MCP 服务器

用 Rust 编写的 MCP(模型上下文协议)服务器,提供获取 Linux 系统信息和通过 PolicyKit 安全认证 在终端执行命令的工具。

🔐 安全:此服务器使用 PolicyKit(pkexec)进行 root 命令的身份验证——系统会弹出一个原生窗口请求您的密码,该密码永远不会暴露在 MCP 中!

📖 文档


⚡ 快速开始 - 使用 root 权限执行命令

要执行需要管理员权限的命令(如 apt updatesystemctl restart 等),请添加 use_polkit: true

✅ PolicyKit - 系统原生图形窗口

{
  "name": "execute_command",
  "arguments": {
    "command": "apt",
    "args": ["update"],
    "use_polkit": true
  }
}

会发生什么:您的操作系统会弹出一个原生窗口请求密码(就像您安装程序时一样)。您的密码永远不会通过 MCP 发送——操作系统会安全地处理身份验证。

⚠️ 常见错误

错误(会导致“权限被拒绝”):

{
  "command": "apt",
  "args": ["update"]
}

正确(添加 use_polkit: true):

{
  "command": "apt",
  "args": ["update"],
  "use_polkit": true
}

🚀 功能

🛠️ 工具

  • get_system_info:获取详细的系统信息

    • CPU(计数、品牌、使用率)
    • 内存(总量、已用、可用、交换)
    • 磁盘(总空间、可用空间、文件系统)
    • 操作系统(名称、内核版本、主机名)
  • execute_command:在终端执行命令

    • 返回 stdout、stderr 和退出码
    • 支持命令参数
    • 两种执行模式
      • 普通(默认):以当前用户权限执行
      • PolicyKituse_polkit: true):使用 pkexec 并显示系统原生图形窗口——推荐用于需要 root 的命令
    • ⚠️ 小心使用——可以执行系统中的任何命令

📚 资源

无需执行命令即可访问系统信息:

  • linux://logs/system —— 系统日志的最后 100 行(journalctl)
  • linux://logs/auth —— 最近 50 行的 SSH 认证日志
  • linux://config/network —— 当前网络配置(ip addr show)
  • linux://processes/top —— 按内存使用量排序的前 10 个进程
  • linux://system/status —— 系统总体状态(CPU、内存、运行时间)

💡 提示

引导式完成常见的管理任务:

  • system_troubleshooting —— 交互式诊断问题(CPU、内存、磁盘、网络、进程)
  • security_audit —— 系统安全性审计(基本或全面范围)
  • service_management —— 管理 systemd 服务(状态、启动、停止、重启、启用、禁用)
  • log_analysis —— 日志分析(系统、认证、内核、应用程序)
  • disk_cleanup —— 安全清理磁盘(保守或激进模式)

📦 编译

cargo build --release

生成的二进制文件位于 target/release/linux-mcp

🔧 使用

运行服务器

./target/release/linux-mcp

服务器通过标准 I/O(stdin/stdout)遵循 MCP 协议进行通信。

与 Claude Desktop 集成

🤖 详细指南:请参阅 CLAUDE_DESKTOP_SETUP.md 获取完整的分步说明!

快速概览

  1. 编译:cargo build --release
  2. 编辑:~/.config/Claude/claude_desktop_config.json(Linux)
  3. 添加配置:
{
  "mcpServers": {
    "linux-mcp": {
      "command": "/完整路径到/linux-mcp-wrapper.sh",
      "args": [],
      "env": {}
    }
  }
}
  1. 完全重启 Claude Desktop

配置路径

  • Linux:~/.config/Claude/claude_desktop_config.json
  • macOS:~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows:%APPDATA%\Claude\claude_desktop_config.json

与 Cursor IDE / VS Code 集成

选项 1:项目级配置

在项目的根目录创建 .cursor/mcp_config.json(Cursor)或 .vscode/mcp.json(VS Code)文件:

# 对于 Cursor
mkdir -p .cursor
nano .cursor/mcp_config.json

# 对于 VS Code
mkdir -p .vscode
nano .vscode/mcp.json

文件内容

{
  "mcpServers": {
    "linux-mcp": {
      "command": "/home/marcos/Documents/Pessoal/linux-mcp/target/release/linux-mcp",
      "args": [],
      "env": {}
    }
  }
}

选项 2:全局配置

~/.config/cursor/mcp_config.json~/.config/Code/User/mcp.json 中进行全局配置

使用 MCP Inspector 测试

npx @modelcontextprotocol/inspector /完整路径到/linux-mcp

📚 使用示例

🛠️ 工具

获取完整的系统信息

{
  "name": "get_system_info",
  "arguments": {
    "info_type": "all"
  }
}

仅获取 CPU 信息

{
  "name": "get_system_info",
  "arguments": {
    "info_type": "cpu"
  }
}

执行普通命令(无 root 权限)

{
  "name": "execute_command",
  "arguments": {
    "command": "ls",
    "args": ["-la", "/home"]
  }
}

⭐ 使用 PolicyKit 执行命令(用于需要 root 权限的命令)

{
  "name": "execute_command",
  "arguments": {
    "command": "apt",
    "args": ["update"],
    "use_polkit": true
  }
}

结果:系统原生窗口请求密码 → 安全执行命令 ✅

会发生什么:一个官方的系统图形窗口出现,请求您的管理员密码(就像您通过应用中心安装程序时一样)。

📚 资源

资源提供了无需执行命令即可直接访问系统信息的方式:

读取系统日志

{
  "method": "resources/read",
  "params": {
    "uri": "linux://logs/system"
  }
}

查看网络配置

{
  "method": "resources/read",
  "params": {
    "uri": "linux://config/network"
  }
}

查看占用内存最多的进程

{
  "method": "resources/read",
  "params": {
    "uri": "linux://processes/top"
  }
}

查看系统总体状态

{
  "method": "resources/read",
  "params": {
    "uri": "linux://system/status"
  }
}

💡 提示

提示引导您完成常见的管理任务:

CPU 故障排查

{
  "method": "prompts/get",
  "params": {
    "name": "system_troubleshooting",
    "arguments": {
      "problem_type": "cpu"
    }
  }
}

全面的安全审计

{
  "method": "prompts/get",
  "params": {
    "name": "security_audit",
    "arguments": {
      "scope": "full"
    }
  }
}

管理 nginx 服务

{
  "method": "prompts/get",
  "params": {
    "name": "service_management",
    "arguments": {
      "service_name": "nginx",
      "action": "restart"
    }
  }
}

分析认证日志

{
  "method": "prompts/get",
  "params": {
    "name": "log_analysis",
    "arguments": {
      "log_type": "auth",
      "priority": "warning"
    }
  }
}

激进的磁盘清理

{
  "method": "prompts/get",
  "params": {
    "name": "disk_cleanup",
    "arguments": {
      "aggressive": "true"
    }
  }
}

⚠️ 重要:对于需要 root 权限的命令,请添加 use_polkit: true

需要 root 权限的命令(如 apt updatesystemctl restart 等)必须包括提升方法:

无提升方法的命令 ❌正确的命令 ✅
"command": "apt", "args": ["update"]"command": "apt", "args": ["update"], "use_polkit": true
"command": "systemctl", "args": ["restart", "nginx"]"command": "systemctl", "args": ["restart", "nginx"], "use_polkit": true

PolicyKit 更安全:显示一个图形认证对话框,并允许细粒度的权限控制。请参阅 PolicyKit 完整指南 获取详细说明。

🔐 PolicyKit - 使用 root 的安全认证

PolicyKit 是 Linux 的原生特权管理认证系统。

⭐ 为什么使用 PolicyKit?

  • 安全:图形认证对话框——密码从不暴露在日志中
  • 细粒度控制:按命令和用户设置权限
  • 审计:系统日志中有完整的记录
  • 自动超时:凭据自动过期
  • 原生:您的 Linux 桌面环境的官方界面(GNOME、KDE、XFCE 等)

📦 安装

# Ubuntu/Debian
sudo apt install polkitd policykit-1

# Fedora/RHEL
sudo dnf install polkit

# Arch Linux
sudo pacman -S polkit

检查安装:

which pkexec
systemctl status polkit

🚀 基本使用

{
  "name": "execute_command",
  "arguments": {
    "command": "systemctl",
    "args": ["restart", "nginx"],
    "use_polkit": true
  }
}

会发生什么

  1. MCP 执行 pkexec systemctl restart nginx
  2. 出现一个您的操作系统的原生窗口(不是自定义的——是 Linux 官方的)
  3. 您输入管理员密码
  4. PolicyKit 验证并以特权执行命令
  5. 结果返回给 MCP

窗口外观

  • GNOME/Ubuntu:带有红色/黄色盾牌的“需要认证”窗口
  • KDE Plasma:KDE Polkit Agent 的蓝色对话框
  • XFCE/MATE:特定环境的简单窗口

您的密码从未通过 MCP 发送——操作系统负责认证!

⚙️ 高级配置(可选)

为了允许某些命令无需密码,可以创建自定义规则:

# 复制示例文件
sudo cp examples/polkit/50-linux-mcp.rules /etc/polkit-1/rules.d/

# 编辑以适应您的用户
sudo nano /etc/polkit-1/rules.d/50-linux-mcp.rules

# 重启 polkit
sudo systemctl restart polkit

📖 完整指南:请参阅 examples/polkit/README_POLKIT.md 获取详细说明、示例和故障排除方法。


🔧 PolicyKit 故障排除

❌ 问题:认证窗口未出现

原因:MCP 没有访问图形会话的权限。

解决方案 1:在 MCP 中配置环境变量

{
  "mcpServers": {
    "linux-mcp": {
      "command": "/路径到/linux-mcp",
      "env": {
        "DISPLAY": ":0",
        "XAUTHORITY": "/home/您的用户/.Xauthority",
        "DBUS_SESSION_BUS_ADDRESS": "unix:path=/run/user/1000/bus"
      }
    }
  }
}

解决方案 2:检查 polkit 代理是否正在运行

# 检查进程
ps aux | grep polkit

# 手动启动(GNOME/Ubuntu)
/usr/libexec/polkit-gnome-authentication-agent-1 &

# 手动启动(KDE)
/usr/lib/polkit-kde-authentication-agent-1 &

❌ 问题:错误“PolicyKit (pkexec) 未安装”

解决方案:安装 PolicyKit

# Ubuntu/Debian
sudo apt install policykit-1 polkitd

# Fedora/RHEL
sudo dnf install polkit

# Arch Linux
sudo pacman -S polkit

检查安装:

which pkexec
systemctl status polkit

❌ 问题:错误“未授权”或“认证失败”

原因:您的用户没有权限或 PolicyKit 规则阻止了它。

解决方案:配置 PolicyKit 规则

# 复制示例规则
sudo cp examples/polkit/50-linux-mcp.rules /etc/polkit-1/rules.d/

# 编辑并替换“marcos”为您的用户名
sudo nano /etc/polkit-1/rules.d/50-linux-mcp.rules

# 重启 polkit
sudo systemctl restart polkit

查看错误日志

journalctl -u polkit -f

❌ 问题:“权限被拒绝”执行命令

原因:您忘记添加 use_polkit: true

错误示例

{
  "exit_code": 100,
  "stderr": "E: 无法打开锁文件 - open (13: 权限被拒绝)",
  "elevation_method": "none"
}

解决方案:添加提升方法:

{
  "command": "apt",
  "args": ["update"],
  "use_polkit": true // ← 添加这个!
}

🔍 调试:查看发生了什么

# 实时查看 PolicyKit 日志
journalctl -u polkit -f

# 在终端手动测试 pkexec
pkexec systemctl status nginx

# 查看所有可用的 PolicyKit 动作
pkaction

# 检查环境变量
echo $DISPLAY
echo $DBUS_SESSION_BUS_ADDRESS

⚠️ 安全性

execute_command 工具可以在系统上执行任何命令。

已实施的安全措施

  • PolicyKit:通过系统原生窗口进行认证——密码从不暴露
  • 无 sudo/密码:MCP 不存储或传输任何密码
  • 审计:所有使用 PolicyKit 的命令都会记录在系统日志中

最佳实践

  • 对所有需要 root 的命令使用 PolicyKit(use_polkit: true
  • 配置 PolicyKit 规则以适应特定命令(参见 examples/polkit/
  • 监控日志:journalctl -u polkit -f
  • 切勿以 root 身份运行服务器

📝 许可

本项目是开源的,并根据 MIT 许可证提供。

🤝 贡献

欢迎贡献!随时提出问题或拉取请求。