使用说明
运维工具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)
- 你用自然语言键入一个问题
- 人工智能会找出要调用的工具
- MCP服务器调用实际的API(MWAA、boto3、Confluence REST、Azure DevOps REST)
- 结果以格式化和可读的形式返回
- 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等)
