Apache Spark History Server MCP
Exposes Spark History Server data as tools for AI agents, enabling natural language querying of Spark applications, jobs, stages, and performance metrics.
README
Kubeflow Spark AI Toolkit
Connect AI agents and engineers to Apache Spark History Server for intelligent job analysis, performance monitoring, and investigation
[!IMPORTANT]
✨ NEW — Spark History Server CLI is now available
A standalone Go binary that queries Spark History Server directly from your terminal — no MCP, no AI framework, no daemon process. Inspect jobs, compare runs, investigate failures, and script against the Spark REST API.
This project provides two interfaces to your Spark History Server data:
🛠️ SHS CLI (shs) |
⚡ MCP Server | |
|---|---|---|
| For | Engineers, shell scripts, CI/CD, coding agents | AI agents and MCP-compatible clients |
| Mental model | "I know the command I want to run" | "Agent, investigate this Spark app" |
| Install | Single static binary — no dependencies | Python 3.12+, uv |
| Get started | CLI docs → | MCP docs → |
🏗️ Architecture
graph TB
subgraph Clients
A[🤖 AI Agent / LLM]
B[👩💻 Engineer / Script / CI]
C[🔧 Coding Agent - Claude Code / Kiro]
end
subgraph "Kubeflow Spark AI Toolkit"
D[⚡ MCP Server]
E[🛠️ CLI - shs]
end
subgraph "Spark History Servers"
F[🔥 Production]
G[🔥 Staging / Dev]
end
A -->|MCP Protocol| D
B -->|Terminal commands| E
C -->|shs skill file| E
D -->|REST API| F
D -->|REST API| G
E -->|REST API| F
E -->|REST API| G
🛠️ SHS CLI (shs) — For Engineers & Scripts
A standalone Go binary. Query your Spark History Server directly from the terminal, shell scripts, or CI/CD pipelines. Also works as a skill for coding agents like Claude Code and Kiro.
Install
# Auto-detect latest version, OS, and architecture
VERSION=$(curl -s https://api.github.com/repos/kubeflow/mcp-apache-spark-history-server/releases | grep -m1 '"tag_name": "cli/' | cut -d'"' -f4 | sed 's|cli/||')
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m)
[ "$ARCH" = "x86_64" ] && ARCH="amd64"
[ "$ARCH" = "aarch64" ] && ARCH="arm64"
curl -sSL "https://github.com/kubeflow/mcp-apache-spark-history-server/releases/download/cli%2F${VERSION}/shs-${VERSION}-${OS}-${ARCH}.tar.gz" | tar xz
sudo mv shs /usr/local/bin/
Quick Start
# Generate a config file
shs setup config > config.yaml # then set your Spark History Server URL
# Explore applications
shs apps
shs jobs -a APP_ID --status failed
shs stages -a APP_ID --sort duration
shs compare apps --app-a APP1 --app-b APP2
# Use as a skill with Claude Code or Kiro
shs setup skill > ~/.claude/skills/spark-history.md
CLI documentation for full usage, or check out a real-world example of Claude Code comparing two TPC-DS 3TB benchmark runs.
⚡ MCP Server — For AI Agents
An MCP (Model Context Protocol) server that exposes Spark History Server data as tools for AI agents. Agents query your Spark infrastructure using natural language — the server handles tool selection, multi-server routing, and structured data retrieval.
Use the MCP server when you want an AI agent to conduct multi-step investigations, synthesize findings across tools, or answer natural-language questions about your Spark applications.
Install
# Run directly with uvx (no install needed)
uvx --from mcp-apache-spark-history-server spark-mcp
# Or install with pip
uv tool install mcp-apache-spark-history-server
spark-mcp
The package is published to PyPI.
Configure
Basic configuration below. Create a file named config.yaml:
servers:
local:
default: true
url: "http://your-spark-history-server:18080"
auth: # optional
username: "user"
password: "pass"
include_plan_description: false # include SQL plans by default (default: false)
mcp:
transports:
- streamable-http # or: stdio
port: "18888"
debug: false
Configurations can be overriden with environment variables.
SHS_MCP_PORT Port for MCP server (default: 18888)
SHS_MCP_TRANSPORT Transport mode: streamable-http or stdio
SHS_MCP_DEBUG Enable debug mode (default: false)
SHS_MCP_ADDRESS Bind address (default: localhost)
SHS_SERVERS_*_URL URL for a specific server
SHS_SERVERS_*_AUTH_USERNAME
SHS_SERVERS_*_AUTH_PASSWORD
SHS_SERVERS_*_AUTH_TOKEN
SHS_SERVERS_*_VERIFY_SSL
SHS_SERVERS_*_TIMEOUT
SHS_SERVERS_*_EMR_CLUSTER_ARN
SHS_SERVERS_*_INCLUDE_PLAN_DESCRIPTION
Multi-Server Setup
Configure multiple Spark History Servers and route queries to specific ones:
servers:
production:
default: true
url: "http://prod-spark-history:18080"
auth:
username: "user"
password: "pass"
staging:
url: "http://staging-spark-history:18080"
Agents can target a specific server per query:
"Get application
<app_id>from the production server"
Connect an AI Agent
| Agent | Transport | Guide |
|---|---|---|
| Claude Desktop | stdio | Setup → |
| Claude Code | stdio or streamable-http | Setup → |
| Kiro | streamable-http | Setup → |
| LangGraph | streamable-http | Setup → |
| Strands Agents | streamable-http | Setup → |
| Local / Inspector | streamable-http | Setup → |
Available Tools (21)
<details> <summary>Available Tools</summary>
Application Information
| Tool | Description |
|---|---|
list_applications |
List applications with optional status, date, and limit filters |
get_application |
Get application detail: status, resources, duration, attempts |
Job Analysis
| Tool | Description |
|---|---|
list_jobs |
List jobs with status filtering |
list_slowest_jobs |
Top N slowest jobs |
Stage Analysis
| Tool | Description |
|---|---|
list_stages |
List stages with status filtering |
list_slowest_stages |
Top N slowest stages |
get_stage |
Stage detail with attempt and summary metrics |
get_stage_task_summary |
Task metric distributions (execution time, memory, I/O, spill) |
Executor & Resource Analysis
| Tool | Description |
|---|---|
list_executors |
List executors (active and optionally inactive) |
get_executor |
Executor detail: resources, task stats, performance |
get_executor_summary |
Aggregate metrics across all executors |
get_resource_usage_timeline |
Chronological executor add/remove with resource totals |
Configuration & Environment
| Tool | Description |
|---|---|
get_environment |
Spark config, JVM info, system properties, classpath |
SQL & Query Analysis
| Tool | Description |
|---|---|
list_slowest_sql_queries |
Top N slowest SQL executions with metrics |
get_sql_execution |
SQL execution detail with optional plan and node metrics |
compare_sql_execution_plans |
Compare SQL plans and metrics between two jobs |
Performance & Bottleneck Analysis
| Tool | Description |
|---|---|
get_job_bottlenecks |
Identify bottlenecks across stages, tasks, and executors |
Comparative Analysis
| Tool | Description |
|---|---|
compare_job_environments |
Diff Spark configs between two applications |
compare_job_performance |
Diff performance metrics between two applications |
AWS Spark Troubleshooting (opt-in)
| Tool | Description |
|---|---|
aws_analyze_spark_workload |
One-shot root cause analysis of failed/slow Spark workloads |
aws_spark_code_recommendation |
Code fix recommendations for identified Spark issues |
Automatically available when AWS credentials and region are configured. See IAM setup guide.
</details>
Example Agent Queries
- "Why is my ETL job running slower than yesterday?" →
get_job_bottlenecks+list_slowest_stages+compare_job_performance - "What caused job 42 to fail?" →
list_jobs+get_stage+get_stage_task_summary - "Compare today's batch with yesterday's run" →
compare_job_performance+compare_job_environments - "Find my slowest SQL queries and explain why" →
list_slowest_sql_queries+get_sql_execution+compare_sql_execution_plans
📸 Screenshots
🔍 Get Spark Application

⚡ Job Performance Comparison

🚀 Kubernetes Deployment
Deploy the MCP server using Helm:
helm install spark-history-mcp ./deploy/kubernetes/helm/mcp-apache-spark-history-server/
# Production configuration
helm install spark-history-mcp ./deploy/kubernetes/helm/mcp-apache-spark-history-server/ \
--set replicaCount=3 \
--set autoscaling.enabled=true
See deploy/kubernetes/helm/ for full configuration options.
When deployed in Kubernetes, connect Claude Desktop via mcp-remote:
kubectl port-forward svc/mcp-apache-spark-history-server 18888:18888
📔 AWS Integration
- AWS Glue — Connect to Glue Spark History Server
- Amazon EMR — Use EMR Persistent UI for Spark analysis
- AWS Spark Troubleshooting — One-shot root cause analysis and code fix recommendations for failed Spark workloads (EMR EC2, EMR Serverless). Automatically available when AWS credentials and region are configured. See IAM setup guide for required permissions.
🔧 Development Setup
git clone https://github.com/kubeflow/mcp-apache-spark-history-server.git
cd mcp-apache-spark-history-server
# Install Task runner
brew install go-task # macOS; see https://taskfile.dev/installation/ for others
# MCP Server
task install # install Python dependencies
task start-spark-bg # start Spark History Server with sample data
task start-mcp-bg # start MCP server
task start-inspector-bg # open MCP Inspector at http://localhost:6274
task stop-all
# CLI
cd skills/cli
task build # build ./bin/shs
task test # unit tests
task test-e2e # e2e tests (starts/stops Docker SHS automatically)
task start-shs # start SHS with CLI e2e sample data
🌍 Adopters
Using this project? Add your organization to ADOPTERS.md and help grow the community.
🤝 Contributing
See CONTRIBUTING.md for guidelines.
📄 License
Apache License 2.0 — see LICENSE.
📝 Trademark Notice
Built for use with Apache Spark™ History Server. Not affiliated with or endorsed by the Apache Software Foundation.
<div align="center">
Connect your Spark infrastructure to AI agents and engineers
🛠️ SHS CLI · ⚡ MCP Server · 🧪 Test · 🤝 Contribute
Built by the community, for the community 💙
</div>
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。