MartinDai/linux-mcp-server
If you are the rightful owner of linux-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
The linux-mcp-server is an MCP Server implemented using the Spring AI framework, designed to execute shell commands on specified Linux systems, both locally and remotely via SSH.
Linux MCP Server
基于 Spring Boot 与 Spring AI 构建的 Model Context Protocol (MCP) 服务端,实现对本地与远程 Linux 主机的安全 Shell 命令执行。通过 MCP 标准接口,可被 Claude Desktop 等支持 MCP 的 AI 助手直接接入,扩展 AI 的运维能力。
目录
简介
Linux MCP Server 将 Shell 执行封装成一个 MCP 工具 executeShell,由 Spring AI 自动注册到 MCP Server。客户端通过标准 MCP 调用,指定目标主机和命令,即可在本地或远程 Linux 机器上执行脚本,返回标准输出与错误日志。
功能亮点
- 双模式执行:自动判断命令执行位置,支持本地进程调度与远程 SSH 执行。
- 连接池管理:基于 Caffeine 缓存复用 SSH 连接,默认 5 分钟自动过期清理。
- 轻量配置:使用简单的
hosts.json维护远程主机清单,可热重启生效。 - Spring Boot 原生集成:开箱即用的
mvn spring-boot:run/可执行 JAR 部署方式,默认监听3001端口。 - MCP 协议兼容:依赖
spring-ai-starter-mcp-server-webmvc,支持 STREAMABLE HTTP 通道,适配主流 MCP 客户端。
快速开始
环境准备
- Java 17+
- Maven 3.6+(推荐使用仓库自带的
./mvnw/mvnw.cmd) - 具备 SSH 服务的目标 Linux 主机
获取代码
git clone <repository-url>
cd linux-mcp-server
配置远程主机
编辑 src/main/resources/hosts.json:
[
{
"ip": "192.168.1.100",
"username": "devops",
"password": "your_password"
}
]
ip:目标主机地址,需与executeShell中的machineIp对应。username/password:SSH 登录凭据,目前采用密码认证,可在代码中扩展密钥登录。
⚠️ 建议不要将生产凭据提交到版本库,使用环境变量或配置中心管理敏感信息。
启动服务
开发环境直接运行:
mvn spring-boot:run
或打包独立运行:
mvn clean package
java -jar target/linux-mcp-server-0.0.1-SNAPSHOT.jar
启动完成后,默认在 http://localhost:3001/mcp 暴露 MCP 接入点。
配置说明
关键配置集中在 src/main/resources/application.yml:
server:
port: 3001 # MCP Server 监听端口
spring.ai.mcp.server:
name: linux-mcp-server
version: 1.0.0
protocol: STREAMABLE # 使用流式 HTTP 传输
streamable-http:
mcp-endpoint: /mcp # MCP 入口路径
如需自定义:
- 更改端口或
mcp-endpoint时,记得同步更新 MCP 客户端配置。 - 若需要连接更多主机,直接在
hosts.json中追加条目并重启服务。
与 AI 助手集成
以 Claude Desktop 为例,可在其 claude_desktop_config.json 中添加:
{
"mcpServers": [
{
"name": "linux-mcp-server",
"type": "http",
"command": "http",
"args": ["http://localhost:3001/mcp"]
}
]
}
连接成功后,Claude 将自动发现工具 executeShell:
machineIp(可选):为空或本地地址执行本机命令。path(可选):命令执行目录,缺省为/。shell(必填):需要执行的完整命令。
安全建议
- 凭据管理:
hosts.json以明文保存密码,仅用于开发或受控环境;生产环境请改用密钥认证或外部安全存储。 - 主机校验:当前使用
PromiscuousVerifier跳过主机指纹校验,部署到生产前应替换为已知主机列表以防中间人攻击。 - 权限最小化:为远程机器创建受限用户,避免使用
root账户并限制可执行命令范围。 - 网络限制:通过防火墙/安全组限制 MCP Server 与目标主机的访问来源。
开发与调试
- 代码结构主要位于
src/main/java/com/doodl6/mcp/linux,可按需扩展新的工具方法。 - 如需调整 SSH 缓存策略,可修改
RemoteShellService中的CACHE_DURATION_MINUTES、MAX_CACHE_SIZE。 - 修改完成后建议手动触发一次
executeShell(本地与远程各一次)验证输出与错误处理逻辑。
许可证
项目基于 开源,可自由使用与二次开发。