MCP Uyuni报表服务器
此MCP服务器提供查询和分析Uyuni报告数据库数据的工具,提供补丁管理和系统合规性的见解。
免责声明
这是一个“按原样”提供的开源项目,没有任何明示或暗示的保证。使用风险自负。有关完整详细信息,请参阅许可证部分。
可用工具
- get_arrata_stats
- get_filter_values
- plot_errata_stats_时间序列
get_errata_stats
这是检索勘误表统计信息的主要工具。它可以提供单个汇总摘要或适合绘图的数据时间序列。
示例1:获取汇总摘要
“今年第一季度‘生产服务器’组织中所有‘关键’安全建议的勘误统计数据是什么?”
示例2:生成时间序列图
“向我展示从年初到现在我的‘sle’系统的安全勘误表的每周趋势。在图表上绘制平均补丁时间、补丁系统和创建的勘误表。”
筛选器示例
您可以使用各种过滤器来缩小查询范围。以下是每个过滤器的单独示例以及如何组合它们。
单个过滤器
- 日期范围:
- start_date:“2024年初以来发布的补丁的勘误统计数据是什么?” - end_date:“显示2023年7月1日之前发布的补丁的勘误表统计数据。”
- 咨询性质:
- advisory_type:“给我所有‘bugfix’公告的统计数据。” - advisory_name:“名称中带有‘kernel’的公告的统计数据是什么?” - cve:“查找与'CVE-2023-12345'相关的勘误表的统计信息。” - severity:“所有‘中等’严重程度勘误表的统计数据是什么?”
- 系统属性:
- hostname:“显示主机名中包含'db-server'的系统的勘误统计信息。” - os_family:“获取所有'rhel'系统的统计数据。” - organization“‘人力资源’组织的勘误统计数据是什么?” - system_group_name:“显示‘PCI合规性’系统组的统计数据。”
- 输出格式:
- granularity:“向我展示从年初到现在的所有勘误表的月度趋势。”
组合过滤器
可以组合过滤器来创建高度特定的查询。
- 聚合示例:
> “与包含‘2024’的CVE相关的‘关键’安全补丁的汇总统计数据是什么,这些CVE会影响‘财务’组织中的‘sle’系统?”
- 时间序列示例:
> “向我展示从年初到现在,‘Web服务器’组中系统的‘重要’安全勘误表的每周趋势。”
- 复杂骨料示例:
> “对于过去6个月内发布的补丁,计算应用于‘工程’组织内‘文件服务器’组中的系统的以‘samba’命名的‘bugfix’公告的平均解决时间。”
get_filter_values
此辅助工具允许您发现中各种过滤器的可能值 get_errata_stats 工具。
示例1:发现可用组织
“我可以通过哪些组织进行筛选?”
示例2:搜索特定主机名
“显示包含“web服务器”的可用主机名。”
plot_errata_stats_timeseries
该工具直接生成时间序列数据的PNG图像,可以由有能力的客户端显示。
示例
“绘制一张'财务'组织去年所有安全勘误表的月度图表。”
使用MCP客户端运行
将此服务器与MCP客户端一起使用(例如 mcp-host, gemini-cli, openwebui等),您需要配置客户端以了解如何启动 mcp-server-uyuni-report 过程。这是通过创建一个 config.json 客户端配置目录中的文件。
此服务器需要自己的配置才能连接到数据库。这可以通过单独的配置文件(例如。, .env 或 config)包含环境变量。
配置
服务器是使用环境变量配置的。这些可以放置在文件中(例如。, config 或 .env)然后将其传递给 uv 或 docker 命令。
所需的环境变量
DB_USER:数据库连接的用户名。DB_PASSWORD:数据库连接的密码。
可选环境变量
DB_HOSTNAME:数据库服务器主机名(默认值:localhost).DB_PORT:数据库服务器端口(默认值:5432).DB_NAME:数据库名称(默认值:reportdb).LOG_FILE:将写入日志的文件的路径(例如。,/var/log/mcp-uyuni-report.log).如果未设置,日志将写入标准错误。LOG_LEVEL:应用程序的日志记录级别(例如。,DEBUG,INFO,WARNING).违约:INFO.
方法1:使用 uv (地方发展)
此方法使用以下命令直接在您的计算机上运行服务器 uv.
- 创建服务器配置文件 具有数据库连接所需的环境变量。例如,创建一个名为的文件
config在项目根目录中:
# File: /path/to/mcp-server-uyuni-report/config
DB_USER="your_db_user"
DB_PASSWORD="your_db_password"
DB_HOSTNAME="localhost"
DB_NAME="reportdb"
LOG_LEVEL="DEBUG"- 创建客户端
config.json文件.此文件告诉MCP客户端如何使用uv以及在哪里可以找到服务器的配置文件。
示例 config.json 为您的客户:
{
"mcpServers": {
"mcp-server-uyuni-report": {
"command": "uv",
"args": [
"run",
"--env-file=/path/to/mcp-server-uyuni-report/config",
"--directory",
"/path/to/mcp-server-uyuni-report",
"mcp-server-uyuni-report"
]
}
}
}- 替换 /path/to/mcp-server-uyuni-report 带有此项目目录的绝对路径。
方法2:使用容器(Docker/Podman)
此方法在容器内运行服务器,这非常适合生产环境或隔离环境。设置类似,但客户端 config.json 将使用 docker 或 podman 运行服务器。
- 创建服务器配置文件 如所述
uv上面的方法。
- 创建客户端
config.json文件 它指示客户端启动一个容器。
示例 config.json 为您的客户:
{
"mcpServers": {
"mcp-server-uyuni-report": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"--env-file", "/path/to/mcp-server-uyuni-report/config",
"mcp-uyuni-report-server:latest"
]
}
}
}- 这假设您已经构建了一个名为的Docker镜像 mcp-uyuni-report-server:latest. - 确保通往 --env-file 是正确的,并且可以从客户端运行的地方访问。
使用本地数据库
建议的工作流程是启动本地数据库并从reportdb转储导入数据。这样,MCP服务器就不需要直接访问reportdb数据库。
查看数据库
您可以启动postgresql服务器:
./start_uyuni_report_db.sh导入数据
在您的uyuni服务器中运行:
podman exec -ti uyuni-server pg_dump --username USERNAME --dbname=reportdb --host=localhost --port=5432 | gzip > test_data.sql.gz然后,将test_data.sql.gz复制到您的运行目录中
gunzip test_data.sql.gz并加载数据
./insert_test_data.sh test_data.sql反馈
我们很乐意收到您的来信!任何你想讨论或分享的想法,请在\ 文件以获取详细信息。
