运维工具MCP服务器

一个通过自然语言交互统一管理多种运维工具(如Airflow、EMR、S3、Confluence和Azure DevOps)的MCP协议服务器。

  • by SrujanReddyKallu2024
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 SrujanReddyKallu2024/MCP

使用说明

运维工具MCP服务器

一个聊天窗口,用于与您的所有基础设施(气流、EMR、S3、Confluence和Azure DevOps)进行对话。

不再在5个不同的UI之间跳跃。用简单的英语问你想要什么。


这是什么?

它是一个MCP(模型上下文协议)服务器,使AI助手(如Gemini CLI)可以访问整个运维栈中的44个工具。你用自然语言与它交谈,它会为你调用正确的API。

例子:

你:“今天哪些DAG在刺激方面失败了?” 人工智能: 调用Airflow API,获取所有运行,过滤故障,显示带有诊断命令的摘要


快速开始

1.安装依赖项

pip install -r requirements.txt

2.设置您的 .env 文件

复制示例并填写您的值:

cp .env.example .env

3.运行服务器

python -m mcp_server.main

服务器在stdio上运行——将其连接到Gemini CLI、VS Code或任何MCP客户端。

4.从Gemini CLI连接

将此添加到您的MCP配置中(server.json):

{
  "mcpServers": {
    "ops-tools": {
      "command": "python",
      "args": ["-m", "mcp_server.main"],
      "cwd": "D:\\MCP"
    }
  }
}

环境设置

此服务器跨 4个AWS帐户 (开发、验证、测试、生产)。每个帐户都是一个单独的AWS帐户,有自己的凭据。

AWS配置文件(通过gimme AWS creds)

AWS_REGION=eu-west-2

AWS_PROFILE_DEV=consumersync-dev
AWS_PROFILE_UAT=consumersync-uat
AWS_PROFILE_TEST=consumersync-test
AWS_PROFILE_PROD=consumersync-prod

MWAA环境(气流)

MWAA_ENV_DEV=eec-aws-uk-ms-dev-consumersyncenv-mwaa
MWAA_ENV_UAT=eec-aws-uk-ms-uat-consumersync-mwaa
MWAA_ENV_TEST=eec-aws-uk-ms-tst-consumersync-mwaa
MWAA_ENV_PROD=eec-aws-uk-ms-prod-consumersync-mwaa

EMR日志桶

EMR_LOG_BUCKET_DEV=eec-aws-uk-ms-consumersync-dev-logs-bucket
EMR_LOG_BUCKET_UAT=eec-aws-uk-ms-consumersync-uat-logs-bucket
EMR_LOG_BUCKET_TEST=eec-aws-uk-ms-consumersync-tst-logs-bucket
EMR_LOG_BUCKET_PROD=eec-aws-uk-ms-consumersync-prod-logs-bucket
EMR_LOG_PREFIX=spark-logs

汇流

CONFLUENCE_BASE_URL=https://pages.experian.local
CONFLUENCE_PAT=your-personal-access-token
CONFLUENCE_SPACE_KEY=ACTIVATE

Azure DevOps(TFS)

AZDO_BASE_URL=https://ukfhpapcvt02.uk.experian.local/tfs/DefaultCollection
AZDO_PAT=your-personal-access-token
AZDO_PROJECT=Activate
AZDO_TEAM=Activate Team

重要提示: 在调用任何AWS工具之前,AI总是会问你“哪个环境?”。它从不默默地默认——这可以防止意外的跨账户错误。


全部44个工具

气流/MWAA(11个工具)

监控、调试和管理DAGs所需的一切。

工具 它做什么
list_dags 列出所有DAG及其时间表和暂停状态
list_dag_runs 显示今天/昨天/任何日期的跑步记录——编号列表,以便您可以选择一个
get_dag_run_details 特定运行的完整任务级别细分——哪些任务通过,哪些失败
get_task_log 读取特定任务尝试的气流日志——原始日志输出
trigger_dag 手动启动DAG运行(使用可选配置)
pause_dag 暂停DAG,使其无法按计划运行(已运行的作业已完成)
unpause_dag 取消DAG,以便恢复计划运行
clear_task_instance 在不重新运行整个DAG的情况下重试失败的任务
get_dag_source 显示DAG的Python源代码、任务、运算符和依赖关系
get_dags_status_dashboard 所有DAGs的完整仪表板——状态、时间表、故障、一切一目了然
dag_analytics 分析:成功率、持续时间趋势、失败模式、视觉条纹

你常说的话:

  • “显示开发中的所有DAGs”
  • “今天哪些DAG在刺激方面失败了?”
  • “hem_procession最近运行得怎么样?”
  • “在uat中触发ttdcustom_procession”
  • “暂停产品中的数字分类学”
  • “在昨天失败的运行中重试初始化任务”

EMR无服务器(10个工具)

管理Spark作业、读取驱动程序日志、浏览S3日志文件、跟踪成本。

工具 它做什么
list_emr_applications 列出所有EMR无服务器应用程序(注意:DAGs创建的临时应用程序会被清理)
list_job_runs 显示应用程序的作业运行情况,包括状态和持续时间
get_job_run_details 深入了解作业:Spark配置、资源使用、S3日志路径
read_spark_driver_log 从Spark驱动程序读取stdout/stderr——实际的Python输出和错误
browse_s3_logs 逐个文件夹导航S3日志目录结构文件夹
cancel_job_run 取消正在运行或卡住的Spark作业
stop_emr_application 停止EMR应用程序——如果需要,自动取消正在运行的作业
delete_emr_application 永久删除EMR应用程序——强制模式在一次调用中停止并删除
read_s3_file 从S3读取任何文件(CSV、TXT、JSON、Parquet)——限制5 MB,自动检测格式
get_emr_cost_summary 显示vCPU小时数、内存、存储使用情况——按应用程序细分

你常说的话:

  • “显示此作业的Spark驱动程序日志”
  • “stdout日志中失败了什么?”
  • “取消卡住的作业”
  • “停止该EMR应用程序”
  • “强制停止应用程序并取消所有正在运行的作业”
  • “删除该EMR应用程序”
  • “EMR本周花了我们多少钱?”
  • “读取此S3文件:S3://bucket/path/to/file.csv”

S3--通用(4个工具)

浏览帐户中的任何S3存储桶,而不仅仅是EMR日志。

工具 它做什么
list_s3_buckets 列出AWS帐户中的所有S3存储桶
browse_s3 交互式文件夹/文件浏览——类似于S3的文件浏览器
list_s3_recursive 递归列出所有文件,包括过滤器和大小摘要
get_s3_object_info 显示文件元数据(大小、修改日期、内容类型、加密),无需下载

你常说的话:

  • “我们在开发中有哪些S3存储桶?”
  • “显示原始数据桶中的内容”
  • “列出原始存储桶中的所有CSV文件”
  • “此S3文件夹中有多少数据?”
  • “从S3读取此拼花地板文件”
  • “这个文件有多大?”

汇流(9个工具)

无需打开浏览器即可搜索、阅读和编写文档。

工具 它做什么
search_confluence 跨页面全文搜索——按相关性排名(与web UI相同)
get_page_content 读取页面的完整内容——从HTML转换为纯文本
get_child_pages 列出父页面下的所有子页面
get_space_pages 列出空间中的所有页面(分页)
get_page_attachments 列出页面上的文件附件(名称、大小、下载URL)
get_page_labels 在页面上显示标签
get_page_comments 阅读页面上的评论和讨论
create_confluence_page 创建新页面(纯文本或HTML内容)
update_confluence_page 更新现有页面--替换或附加内容

你常说的话:

  • “查找有关受众引擎的文档”
  • “阅读该runbook页面”
  • “在Runbook部分下创建新的故障排除指南”
  • “HEM文档下的子页面是什么?”

专业提示: 当你说“文档”、“documentation”、“wiki”或“runbook”时,人工智能知道会自动搜索Confluence。


Azure DevOps/TFS(8个工具)

Sprint跟踪、工作项、源代码——所有这些都来自聊天。

工具 它做什么
list_repos 列出项目中的所有Git存储库
browse_repo 浏览存储库中的文件和文件夹——一次一个文件夹
browse_repo_recursive 一次调用中存储库的完整递归文件树——显示每个具有正确路径的文件
read_repo_file 读取任何文件的内容(语法突出显示)
get_current_sprint 显示活动冲刺名称、日期和剩余天数
get_sprint_work_items sprint中的所有PBI、任务和Bug——谁在做什么
get_work_item_details PBI/任务/Bug的完整细节:描述、验收标准、链接
get_backlog 不在当前冲刺中的项目——接下来会发生什么

你常说的话:

  • “我们正在进行什么冲刺?”
  • “大家都在做什么?”
  • “显示PBI 12345”
  • “积压的是什么?”
  • “显示hem_procession仓库中的所有文件”
  • “列出此仓库中的所有Python文件”
  • “此仓库的文件夹结构是什么?”

编排(1个工具)

电动工具——将多个工具连接在一起,以获得一次性答案。

工具 它做什么
diagnose_dag_failure 在一次调用中完成故障诊断——查找失败的运行,读取任务日志,提取EMR ID,读取Spark驱动程序日志,返回根本原因分析

你会说:

  • “诊断产品中hem_procession的故障”
  • “昨天ttdcustom_procession出了什么问题?”

这个工具取代了过去需要20分钟的5-6个手动步骤。


实用工具(1个工具)

工具 它做什么
server_health_check 确认服务器正在运行并已连接

运作原理

You (plain English) → AI (Gemini/Claude) → MCP Server → APIs (Airflow, EMR, S3, Confluence, TFS)
  1. 你用自然语言键入一个问题
  2. 人工智能会找出要调用的工具
  3. MCP服务器调用实际的API(MWAA、boto3、Confluence REST、Azure DevOps REST)
  4. 结果以格式化和可读的形式返回
  5. AI可以将工具链接在一起,例如查找失败的运行→ 阅读其日志→ 显示根本原因

建筑

D:\MCP\
├── mcp_server/
│   ├── main.py              # Server entry point + tool registration
│   ├── config.py             # Environment config (4 AWS accounts)
│   └── tools/
│       ├── _aws_helpers.py   # Shared AWS helpers (S3 client, formatting)
│       ├── mwaa_tools.py     # 11 Airflow tools
│       ├── emr_tools.py      # 10 EMR Serverless tools
│       ├── s3_tools.py       # 4 general S3 tools
│       ├── confluence_tools.py # 9 Confluence tools
│       ├── azdo_tools.py     # 8 Azure DevOps tools
│       ├── orchestration_tools.py # 1 orchestration tool
│       └── utility_tools.py  # 1 utility tool
├── .env                      # Your local config (not committed)
├── .env.example              # Template for .env
├── server.json               # MCP client config
├── requirements.txt          # Python dependencies
├── DEMO_SCRIPT.md            # 15-minute demo walkthrough
└── README.md                 # This file

关键设计决策

  • 每次通话都有新的凭证 --S3或EMR没有客户端缓存。每个API调用都会得到一个新的boto3会话,因此过期的凭据永远不会导致静默失败。
  • 环境感知 --所有AWS工具都要求您指定dev/uat/test/prod。AI会询问您是否忘记了。每个env都指向不同的AWS帐户。
  • MWAA会话缓存 --Airflow登录令牌被缓存(它需要身份验证Cookie),但缓存会在401/403错误和重试时自动清除。
  • 清理日志输出 --Spark驱动程序日志从.gz自动解压缩,Confluence HTML转换为干净的markdown文本。
  • 互动式回应 --DAG运行是有编号的,所以你可以说“告诉我运行#3的情况”。工作项显示随时可用的后续命令。

故障排除

问题 修复
“无法连接到MWAA Web服务器” 请先连接到VPN
S3上的“拒绝访问” 运行 gimme-aws-creds 刷新您的AWS凭据
“CONFLUENCE_PAT未设置” 将您的CONFLUENCE个人访问令牌添加到 .env
“AZDO_PAT未设置” 在Azure DevOps中生成PAT→ 用户设置→ 个人访问令牌
AI一次调用所有环境 服务器指令应该防止这种情况发生——如果发生这种情况,说“just dev”
停滞气流会话 服务器在401/403上自动重试——如果仍然存在,请重新启动服务器

需求

  • Python 3.10+
  • VPN访问(适用于MWAA、Confluence、Azure DevOps)
  • gimme-aws-creds 为所有4个AWS帐户配置
  • 汇流PAT
  • Azure DevOps PAT
  • MCP兼容客户端(Gemini CLI、VS Code、Claude Code等)