SAP HANA Performance MCP Server

MCP server for SAP HANA performance analysis: query plan capture,
PlanViz export, expensive statement monitoring, plan cache inspection,
table statistics, memory stats, and active session tracking.
This commit is contained in:
Erhan Keseli
2026-04-06 20:38:29 +02:00
commit 8412e1801b
22 changed files with 2247 additions and 0 deletions

97
README.md Normal file
View File

@@ -0,0 +1,97 @@
# SAP HANA Performance MCP Server
An MCP server that gives AI assistants direct access to SAP HANA performance data — query plans, execution stats, memory usage.
Built on the [Model Context Protocol](https://modelcontextprotocol.io/) with `hdbcli`.
## Tools
| Tool | What it does |
|---|---|
| `analyze_query` | Captures compile-time and runtime query plans, flags bottlenecks |
| `download_planviz` | Exports query plan data as JSON for offline review |
| `get_expensive_statements` | Top resource-heavy queries from `M_EXPENSIVE_STATEMENTS` |
| `get_plan_cache` | Cached execution plans from `M_SQL_PLAN_CACHE` |
| `get_table_statistics` | Table and column-level stats for a schema/table |
| `get_memory_stats` | Host and per-service memory usage |
| `get_active_sessions` | Active connections and running statements |
## Prerequisites
- Python 3.11+
- A running SAP HANA instance
- A database user with `MONITORING` role (or at minimum, SELECT on `SYS.M_*` views)
## Setup
Clone the repo and install dependencies with [uv](https://docs.astral.sh/uv/):
```bash
git clone https://git.epod.dev/erhan/HANAPerformanceMCP.git
cd HANAPerformanceMCP
uv sync
```
Copy the example env file and fill in your HANA connection details:
```bash
cp .env.example .env
```
```ini
HANA_HOST=your-hana-host
HANA_PORT=30015
HANA_USER=DBADMIN
HANA_PASSWORD=your-password
HANA_ENCRYPT=true
HANA_SSLVALIDATECERTIFICATE=false
# Optional — set this to connect to a tenant database instead of the system DB
HANA_DATABASE_NAME=CCQ
```
## Running
Start the server directly:
```bash
uv run hana-performance-mcp
```
Or configure it in your MCP client. Example for Claude Desktop (`claude_desktop_config.json`):
```json
{
"mcpServers": {
"hana-performance": {
"command": "uv",
"args": [
"--directory", "/path/to/HANAPerformanceMCP",
"run", "hana-performance-mcp"
],
"env": {
"HANA_HOST": "your-hana-host",
"HANA_PORT": "30015",
"HANA_USER": "DBADMIN",
"HANA_PASSWORD": "your-password",
"HANA_ENCRYPT": "true",
"HANA_SSLVALIDATECERTIFICATE": "false",
"HANA_DATABASE_NAME": "your-tenant-db"
}
}
}
}
```
For Claude Code, add the same config under `mcpServers` in `.claude/settings.json`.
## How It Works
The server connects to HANA through a thread-safe connection pool (3 connections by default). Each tool runs read-only queries against system views.
`analyze_query` runs `EXPLAIN PLAN` for the compile-time plan, then optionally executes the query and pulls runtime stats from `M_EXPENSIVE_STATEMENTS`. It checks for full table scans, inefficient joins, memory hotspots, engine mismatches, and cost outliers.
Only `SELECT`/`WITH` statements are allowed. Row limits are enforced (max 10,000).
## License
MIT