Files
HANAPerformanceMCP/README.md
Erhan Keseli 8412e1801b 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.
2026-04-06 20:38:29 +02:00

2.8 KiB

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 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:

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:

cp .env.example .env
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:

uv run hana-performance-mcp

Or configure it in your MCP client. Example for Claude Desktop (claude_desktop_config.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