# AI Agent Integration & Model Context Protocol (MCP) Server Guide This guide provides exhaustive technical documentation for integrating MySQLTuner with Artificial Intelligence (AI) agents, LLM coding assistants, and automated database administration pipelines using the **Model Context Protocol (MCP)** and direct `--agent-json` CLI telemetry. --- ## 🏗️ Architecture & Component Overview MySQLTuner provides a zero-dependency, container-ready AI integration stack. It bridges database engine metrics with modern AI clients (such as Claude Desktop, Cursor IDE, VS Code extensions, Antigravity, and LangChain/LlamaIndex frameworks). ```mermaid graph TD subgraph "AI Client Layer" Claude[Claude Desktop] Cursor[Cursor IDE] VSCode[VS Code / Cline / Roo Code] Custom[Custom LLM Pipeline] end subgraph "MCP Server Layer (build/mcp_server.py)" JSONRPC[JSON-RPC 2.0 stdio Interface] Daemon[Background Audit Daemon] CacheManager[JSON / HTML Cache Store] RollbackEngine[Rollback & Transaction Engine] end subgraph "Database & Core Engine" PerlEngine[MySQLTuner Perl Core (mysqltuner.pl)] MySQLInstance[(MySQL / MariaDB / Percona Server)] end Claude <-->|stdio JSON-RPC| JSONRPC Cursor <-->|stdio JSON-RPC| JSONRPC VSCode <-->|stdio JSON-RPC| JSONRPC Custom <-->|stdio JSON-RPC| JSONRPC JSONRPC --> Daemon Daemon -->|Executes --agent-json| PerlEngine PerlEngine -->|SQL Telemetry| MySQLInstance PerlEngine -->|Structured JSON| CacheManager CacheManager -->|Resources & Findings| JSONRPC RollbackEngine -->|SET GLOBAL / Revert| MySQLInstance ``` --- ## ⚡ Mode 1: Direct CLI Machine Integration (`--agent-json`) When invoked with `--agent-json`, `mysqltuner.pl` suppresses ANSI formatting and outputs a clean, single-payload JSON schema designed for direct LLM ingestion or programmatic parsing. ### CLI Command Syntax ```bash perl mysqltuner.pl --agent-json --host --user --pass ``` ### JSON Schema & Field Specifications ```json { "findings": [ { "id": "innodb_buffer_pool_size_adjust", "topic": "Performance", "description": "InnoDB buffer pool size is under-allocated for current workload.", "impact_score": 9, "risk_level": "Medium", "risk_description": "Increases memory consumption. Ensure sufficient OS-free RAM to prevent OOM swapping.", "requires_restart": false, "expected_outcome": "Reduces disk I/O and increases query cache read hits.", "action": { "type": "SQL", "statement": "SET GLOBAL innodb_buffer_pool_size = 1073741824;", "rollback_statement": "SET GLOBAL innodb_buffer_pool_size = 134217728;" } } ] } ``` #### Field Glossary: - **`id`**: Deterministic key for the specific diagnostic check. - **`topic`**: Domain (`Performance`, `Security`, `Reliability`, `Modeling`, `Replication`). - **`impact_score`**: Estimated optimization value on a scale of `1` (minor) to `10` (critical optimization). - **`risk_level`**: Safety classification (`Low`, `Medium`, `High`, `Critical`). - **`risk_description`**: Detailed side-effect analysis (memory allocation, table lock potential, restart requirement). - **`requires_restart`**: Boolean (`true`/`false`) indicating if `my.cnf` edit and service restart is required. - **`action`**: Object containing the executable `statement` (`SQL` or `Config`) and its counterpart `rollback_statement`. --- ## 🔌 Mode 2: Model Context Protocol (MCP) Server Interface The MySQLTuner MCP server ([build/mcp_server.py](file:///build/mcp_server.py)) implements the standard MCP specification over `stdio` transport using JSON-RPC 2.0. ### Exposed MCP Resources | URI Resource | Content Type | Description | | :--- | :--- | :--- | | `mysqltuner://reports/latest.json` | `application/json` | Accesses the latest cached audit findings and database variable state. | | `mysqltuner://reports/latest.html` | `text/html` | Retrieves the interactive HTML analytics report (pgBadger-style visuals). | | `mysqltuner://indicators/summary.json` | `application/json` | Provides high-level KPI indicators (Performance, Security, Resilience scores). | ### Exposed MCP Tools #### 1. `get_latest_audit` * **Purpose**: Retrieves cached audit findings instantly without querying the database server. * **Arguments**: None. #### 2. `run_audit` * **Purpose**: Triggers a live execution of `mysqltuner.pl --agent-json` and updates the cache. * **Arguments**: None. #### 3. `apply_recommendation` * **Purpose**: Applies a safe, dynamic SQL tuning adjustment (`SET GLOBAL`). * **Arguments**: - `statement` (string, required): The SQL command to execute. - `variable_name` (string, optional): Target variable to capture pre-execution baseline for rollback. #### 4. `rollback_recommendation` * **Purpose**: Reverts a previously applied SQL modification using recorded transaction state. * **Arguments**: - `statement_id` (string, required): Transaction identifier returned during `apply_recommendation`. --- ## 🚀 Deployment & Configuration Guide ### Containerized Deployment (Recommended Microservice) The official Docker image ([Dockerfile.mcp](file:///Dockerfile.mcp)) packages Perl, Python 3, mysql-client, and the MCP server. ```bash docker run -d \ --name mysqltuner-mcp \ -e DB_HOST=mysql-server \ -e DB_PORT=3306 \ -e DB_USER=root \ -e DB_PASSWORD=secret_pass \ -e AUDIT_INTERVAL_HOURS=6 \ -v /var/cache/mysqltuner:/var/cache/mysqltuner \ mysqltuner-mcp ``` #### Supported Environment Variables: - `DB_HOST`: Hostname or IP address of the target MySQL/MariaDB server (default: `127.0.0.1`). - `DB_PORT`: Database port (default: `3306`). - `DB_USER`: Database audit user (default: `root`). - `DB_PASSWORD`: Password for the database user. - `AUDIT_INTERVAL_HOURS`: Periodic audit refresh interval in hours (default: `6`). - `CACHE_DIR`: Cache directory for report artifacts (default: `/var/cache/mysqltuner`). --- ### Client IDE & Agent Configurations #### 1. Claude Desktop Edit your Claude configuration file: - **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json` - **Windows**: `%APPDATA%\Claude\claude_desktop_config.json` ```json { "mcpServers": { "mysqltuner": { "command": "docker", "args": [ "run", "-i", "--rm", "-v", "/var/cache/mysqltuner:/var/cache/mysqltuner", "-e", "DB_HOST=host.docker.internal", "-e", "DB_USER=root", "-e", "DB_PASSWORD=your_password", "mysqltuner-mcp" ] } } } ``` #### 2. Cursor IDE 1. Go to **Settings** -> **Features** -> **MCP**. 2. Click **+ Add New MCP Server**. 3. Configure settings: - **Name**: `mysqltuner` - **Type**: `stdio` - **Command**: `python3 /path/to/MySQLTuner-perl/build/mcp_server.py` #### 3. VS Code (Cline / Roo Code) Add to `mcpSettings.json`: ```json { "mcpServers": { "mysqltuner": { "command": "python3", "args": ["/path/to/MySQLTuner-perl/build/mcp_server.py"], "env": { "DB_HOST": "127.0.0.1", "DB_USER": "root", "DB_PASSWORD": "your_password" } } } } ``` --- ## 🛡️ AI Agent Governance & System Prompt To ensure safe, production-grade operations, inject the following system prompt into your LLM agent context: ```markdown You are a Principal Database Administrator (DBA) managing a MySQL/MariaDB infrastructure via the MySQLTuner MCP server. ### Safety Rules: 1. **Baseline Inspection**: Always run `get_latest_audit` before proposing changes. 2. **Risk Categorization**: - `Low` / `Medium` risk statements with `requires_restart: false` can be applied live after presenting the rollback statement to the user. - `High` / `Critical` risk statements or changes with `requires_restart: true` MUST require explicit confirmation. 3. **Rollback Availability**: Always state both the `statement` and `rollback_statement` prior to executing `apply_recommendation`. 4. **Post-Execution Verification**: Call `run_audit` after executing changes to verify KPI score improvement. If metrics regress, immediately execute `rollback_recommendation`. ```