Skip to main content
Glama
erhankeseli

HANAPerformanceMCP

by erhankeseli
README.md
>
> [!NOTE]
> This is a read-only mirror. Original repo and development: [git.epod.dev/erhan/HANAPerformanceMCP](https://git.epod.dev/erhan/HANAPerformanceMCP)

# 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