🖥️ 横向MCP服务器
   ](https://lobehub.com/mcp/donbianco-canonical-landscape-mcp)     
面向系统管理员的人工智能景观基础设施管理
概述
横向MCP服务器 是一个轻量级的工具,将基于人工智能的基础设施管理带到您的指尖。由系统管理员构建以简化日常操作,此MCP(模型上下文协议)服务器将您的Canonical Landscape基础设施与Claude AI连接起来,使您能够使用自然语言管理和查询您的Ubuntu/Debian车队。
为什么是这个工具?
作为管理数百台机器的系统管理员,为每个查询手动导航Landscape web界面变得非常耗时。这个工具是为了解决这个问题而创建的,它允许人工智能:
- 查询您的基础设施 使用自然语言而不是点击菜单
- 获得即时答案 关于机器状态、包和警报
- 节省时间 执行重复性任务,如检查是否安装了软件包
- 监控活动 和审计日志,无需手动搜索
- 解决问题 借助人工智能辅助的洞察力
真实世界示例
您现在可以简单地问Claude,而不是登录Landscape、导航到计算机、按标签过滤和手动检查每台机器:
- “显示所有需要重新启动的生产服务器”
- “网络服务器-01上安装了nginx吗?”
- “在过去的两个小时里,哪些机器没有办理登机手续?”
- “我们目前有什么警报?”
Claude将使用此MCP服务器查询您的Landscape基础设施并提供即时答案。
主要特点
- 🖥️ 计算机查询 -按标签、主机名、分布和状态搜索
- 📦 包管理 -立即在您的车队中查找已安装的软件包
- 📊 活动监控 -跟踪审计日志和系统活动
- 🚨 警报管理 -收到有关系统问题的通知
- ⚡ 快速查找 -检查特定机器上的包装安装
- 🌐 HTTP服务器 -在VM上部署以进行远程访问
- 📈 流线型仪表板 -可视化您的基础设施
\ > > > > > > b8a758e(更新install.sh添加资源提示等)
______________________________________________________________________
🎯 什么是MCP?
模型上下文协议(MCP) 是Anthropic创建的一个开放协议,它规范了应用程序如何向大型语言模型(LLM)提供上下文。此MCP服务器将您的Landscape基础设施数据暴露给Claude Code和其他MCP兼容客户端,从而实现AI驱动的基础设施管理。
当您将Claude Code与此MCP服务器一起使用时,Claude可以:
- 用自然语言查询您的基础设施
- 提供有关您的系统的见解
- 帮助解决问题
- 生成报告和摘要
- 回答有关您的车队的问题
______________________________________________________________________
🚀 快速开始
自动安装(推荐)
最简单的安装方法是使用自动安装脚本:
# Clone the repository
git clone https://github.com/yourusername/landscape-mcp.git
cd landscape-mcp
# Run the installation script
./install.sh脚本将:
- 安装UV包管理器(如果尚未安装)
- 创建Python虚拟环境
- 安装所有依赖项
- 配置您的Landscape API凭据
- 设置Claude Code MCP服务器配置
- 测试安装
就是这样! 重新启动Claude Code并开始使用MCP服务器。
______________________________________________________________________
手动安装
如果您更喜欢手动安装:
步骤1:获取API凭据
- 登录您的Landscape web界面
- 点击您的用户名(右上角)
- 导航到API访问/凭据部分
- 生成访问密钥和密钥
步骤2:使用UV进行安装
紫外线 是一个快速的Python包安装程序和解析器:
# Install UV (if not already installed)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Clone or navigate to the project directory
cd landscape-mcp
# Create virtual environment and install dependencies
uv venv
source .venv/bin/activate # On Linux/Mac
# Or on Windows: .venv\Scripts\activate
# Install dependencies
uv pip install -r requirements.txt步骤3:配置API凭据
编辑 landscape_mcp.py 并用您的凭据更新这些行:
API_URI = os.getenv("LANDSCAPE_API_URI", "https://landscape.example.com/api/")
API_KEY = os.getenv("LANDSCAPE_API_KEY", "YOUR_API_KEY_HERE")
API_SECRET = os.getenv("LANDSCAPE_API_SECRET", "YOUR_API_SECRET_HERE")或设置环境变量:
export LANDSCAPE_API_URI="https://landscape.example.com/api/"
export LANDSCAPE_API_KEY="your-key"
export LANDSCAPE_API_SECRET="your-secret"步骤4:添加到克劳德代码
编辑 ~/.claude/settings.json:
{
"mcpServers": {
"landscape": {
"command": "/full/path/to/landscape-mcp/.venv/bin/python",
"args": ["/full/path/to/landscape-mcp/landscape_mcp.py"],
"disabled": false
}
}
}步骤5:验证安装
# Restart Claude Code, then check:
claude mcp list
# Should show: landscape: ... ✓ Connected______________________________________________________________________
💡 用法示例
在Claude Code中配置MCP服务器后,您可以向Claude提出以下问题:
- “显示横向上的所有计算机”
- “哪些机器需要重新启动?”
- “我的服务器-01上安装了nginx吗?”
- “显示笔记本电脑最近的活动”
- “列出过去一小时的所有脱机计算机”
- “我们有什么警报?”
- “查找所有带有标签:product的计算机”
Claude将使用适当的MCP工具查询您的景观基础设施并提供答案。
______________________________________________________________________
📊 可用工具
MCP服务器为Claude Code提供以下工具:
- 景观查询计算机 --按标签、主机名或状态查询计算机
- 景观查询包 --搜索已安装的软件包
- 景观查询活动 --获取审核日志和活动历史记录
- 景观查询警报 --检索系统警报
- 景观查询离线 --查找尚未登记的计算机
- 景观_食品_包装_仓储 --检查机器上是否安装了特定的软件包
______________________________________________________________________
🔍 查询语法参考
| 语法 | 示例 | 描述 |
|---|---|---|
tag: | tag:production | 带有特定标签的计算机 |
hostname: | hostname:my-laptop | 特定计算机主机名 |
distribution: | distribution:24.04 | Ubuntu/Debian版本 |
access-group: | access-group:global | 访问组筛选 |
needs:reboot: | needs:reboot:true | 需要重新启动的机器 |
| 多个标签 | tag:prod tag:secure | AND逻辑(空格分隔) |
______________________________________________________________________
🌐 HTTP服务器(可部署在VM上)
该项目包括一个HTTP版本(mcp_http.py)其可以部署在VM上并通过HTTP/SSE远程访问。
快速入门(HTTP版本)
# 1. Install dependencies
uv pip install -r requirements-http.txt
# 2. Run the server
python mcp_http.py
# 3. Test it
./test-http.sh http://localhost:8000安装HTTP服务器
# Install HTTP server dependencies
uv pip install -r requirements-http.txt
# Or install individually
uv pip install starlette "uvicorn[standard]" sse-starlette正在运行HTTP服务器
# Run on localhost (development)
python mcp_http.py
# Or with custom host/port
MCP_HTTP_HOST=0.0.0.0 MCP_HTTP_PORT=8000 python mcp_http.py服务器终结点:
- 上海证券交易所
http://your-server:8000/sse - 信息:
http://your-server:8000/messages(职位) - 健康:
http://your-server:8000/health
自动部署(推荐)
使用提供的部署脚本进行轻松设置:
# Transfer files to your VM
scp -r . user@your-vm:/tmp/landscape-mcp
# SSH to the VM
ssh user@your-vm
# Run deployment script
cd /tmp/landscape-mcp
./deploy-http.sh脚本将:
- 创建服务用户和安装目录
- 使用UV安装依赖项
- 配置systemd服务
- 启动并启用服务
使用Systemd进行手动部署
创建 /etc/systemd/system/landscape-mcp.service:
[Unit]
Description=Landscape MCP HTTP Server
After=network.target
[Service]
Type=simple
User=landscape
WorkingDirectory=/opt/landscape-mcp
Environment="LANDSCAPE_API_URI=https://landscape.example.com/api/"
Environment="LANDSCAPE_API_KEY=your-key"
Environment="LANDSCAPE_API_SECRET=your-secret"
Environment="MCP_HTTP_HOST=0.0.0.0"
Environment="MCP_HTTP_PORT=8000"
ExecStart=/opt/landscape-mcp/.venv/bin/python /opt/landscape-mcp/mcp_http.py
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target启用并启动:
sudo systemctl enable landscape-mcp
sudo systemctl start landscape-mcp
sudo systemctl status landscape-mcp
# View logs
sudo journalctl -u landscape-mcp -f将Claude代码连接到HTTP服务器
编辑 ~/.claude/settings.json:
{
"mcpServers": {
"landscape-http": {
"url": "http://your-vm-ip:8000/sse",
"transport": "sse"
}
}
}______________________________________________________________________
📈 流线型仪表板
该项目包括一个基于网络的仪表板,用于可视化您的基础设施。
运行仪表板
# Make sure you're in the virtual environment
source .venv/bin/activate
# Run the dashboard
streamlit run landscape_machines_dashboard.py仪表板将在您的浏览器中打开 http://localhost:8501 并提供:
- 实时基础设施概述
- 带过滤器的计算机清单
- 分发和标签分析
- 注释管理
- 交互式可视化
______________________________________________________________________
📋 项目结构
landscape-mcp/
├── landscape_mcp.py # Main MCP server (stdio)
├── mcp_http.py # HTTP MCP server (deployable)
├── landscape_machines_dashboard.py # Streamlit dashboard
├── install.sh # Automated installation script
├── requirements.txt # Core dependencies
├── requirements-http.txt # HTTP server dependencies
├── setup.py # Python package setup
├── pyproject.toml # Python project config
├── README.md # This documentation
├── CONTRIBUTING.md # Contribution guidelines
├── LICENSE # MIT License
└── .gitignore # Git ignore rules核心依赖关系
mcp==1.24.0 # MCP Server Framework
landscape-api-py3==0.9.0 # Landscape API wrapper
requests==2.32.5 # HTTP client可选仪表板依赖关系
streamlit # Web dashboard framework
pandas # Data manipulation
plotly # Interactive visualizations______________________________________________________________________
⚙️ 配置
MCP服务器从环境变量中读取凭据。您可以通过多种方式配置它们:
环境变量
| 变量 | 描述 | 示例 |
|---|---|---|
LANDSCAPE_API_URI | 您的景观API端点 | https://landscape.example.com/api/ |
LANDSCAPE_API_KEY | 您的API访问密钥 | your-access-key-here |
LANDSCAPE_API_SECRET | 您的API密钥 | your-secret-key-here |
设置环境变量
Linux/macOS:
export LANDSCAPE_API_URI="https://landscape.example.com/api/"
export LANDSCAPE_API_KEY="your-key"
export LANDSCAPE_API_SECRET="your-secret"窗户:
set LANDSCAPE_API_URI=https://landscape.example.com/api/
set LANDSCAPE_API_KEY=your-key
set LANDSCAPE_API_SECRET=your-secret永久(添加到 ~/.bashrc 或 ~/.zshrc):
echo 'export LANDSCAPE_API_URI="https://landscape.example.com/api/"' >> ~/.bashrc
echo 'export LANDSCAPE_API_KEY="your-key"' >> ~/.bashrc
echo 'export LANDSCAPE_API_SECRET="your-secret"' >> ~/.bashrc
source ~/.bashrc或者,您可以在中编辑默认值 landscape_mcp.py (第15-17行),但为了安全起见,建议使用环境变量。
______________________________________________________________________
🔐 安全
- 仅限HTTPS -所有API通信都使用HTTPS
- API证书 -存储在
landscape_mcp.py或环境变量 - 无数据持久性 -MCP服务器不存储任何基础设施数据
- 只读访问 -这些工具只查询数据,不会修改您的基础设施
安全最佳实践:
- 从不将API凭据提交到版本控制
- 将环境变量用于生产部署
- 定期旋转API键
- 如果可能,将横向中的API密钥权限限制为只读
______________________________________________________________________
🛠️ 故障排除
MCP服务器未连接
# Check if MCP server is recognized
claude mcp list
# View logs
tail -f ~/.claude/logs/landscape*.log
# Test the server directly
python landscape_mcp.pyAPI连接错误
- 在中验证您的凭据
landscape_mcp.py - 确保API URI以
/api/ - 检查与Landscape服务器的网络连接
- 验证API密钥是否有效且未过期
仪表板未启动
# Make sure streamlit is installed
uv pip install streamlit pandas plotly
# Run with verbose output
streamlit run landscape_machines_dashboard.py --logger.level=debug查询无结果
- 标签名区分大小写
- 检查您的API密钥是否具有适当的权限
- 验证查询语法是否与Landscape的查询语言匹配
______________________________________________________________________
🤝 贡献
欢迎投稿!我们感谢:
- 错误报告
- 文档改进
- 代码贡献
- 测试与反馈
请阅读 贡献.md 有关我们的行为准则和提交pull请求流程的详细信息。
如何做出贡献
- 克隆该仓库
- 创建要素分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'feat: add amazing feature') - 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求
______________________________________________________________________
📚 资源
- 模型上下文协议(MCP) -了解MCP
- 典型景观 -官方景观文件
- 克劳德代码 -Claude的官方CLI工具
- UV包装管理器 -快速Python包安装程序
______________________________________________________________________
📄 许可证
MIT许可证-请参阅 许可证 文件以获取详细信息。
______________________________________________________________________
⚠️ 重要免责声明
不是官方的标准产品
这是一个 非官方、社区驱动 项目:
- 非 由Canonical有限公司开发、维护或支持。
- 非 一个官方的Canonical Landscape工具
- Canonical已经 不参与 无论在这个项目中
- “Canonical”、“Landscape”和“Ubuntu”是Canonical有限公司的商标。
社区贡献
- 由系统管理员为满足内部基础设施管理需求而创建
- 公开分享,造福社区
- 使用风险和自由裁量权由您自行承担
- 未提供任何保证或担保
没有官方支持
- 本项目提供 “原样” 不提供任何形式的保证
- Canonical将 非 为该工具提供支持
- 问题和疑问应仅指向此存储库
- 作者/贡献者不对任何损害或问题承担责任
法律责任
免责声明: 本软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权持有人均不对因软件或软件的使用或其他交易而产生或与之相关的任何索赔、损害赔偿或其他责任承担责任,无论是在合同、侵权或其他诉讼中。
商标声明: 所有产品名称、徽标和品牌均为其各自所有者的财产。使用这些名称、徽标和品牌并不意味着认可。本项目使用商标名称仅用于描述和识别目的。
用户确认: 通过使用此软件,用户承认:
- 这是社区软件,不受Canonical官方支持
- 使用风险完全由用户自行承担
- 作者对功能、安全性或适用性不作任何保证
- 用户有责任确保遵守其组织的政策
- 该软件在生产使用前应进行彻底测试
如需Canonical官方支持: 有关Canonical Landscape的官方支持、文档和产品,请访问:
- 官方网站:https://ubuntu.com/landscape
- 官方支持:https://ubuntu.com/support
\<\<\<\<\<\<\<头
- 官方文件:https://documentation.ubuntu.com/landscape/
\=======
- 官方文件:https://ubuntu.com/landscape/docs
