mcp-mysql-read-only
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MYSQL_HOST | No | MySQL host. Defaults to host.docker.internal. Single-connection fallback. | host.docker.internal |
| MYSQL_PORT | No | MySQL port. Defaults to 3306. | 3306 |
| MYSQL_USER | No | MySQL user. If set with MYSQL_DATABASE, registers a profile named 'default'. | |
| MYSQL_DATABASE | No | MySQL database name. If set with MYSQL_USER, registers a profile named 'default'. | |
| MYSQL_PASSWORD | No | MySQL password. Defaults to empty. | |
| MYSQL_PROFILES | No | JSON object of named profiles. Example: {"local":{"host":"host.docker.internal","user":"root","password":"","database":"app_dev"}} | |
| MYSQL_DEFAULT_PROFILE | No | Which profile starts active. Defaults to 'default' if it exists, otherwise the first profile. | |
| MYSQL_QUERY_TIMEOUT_MS | No | Statement timeout in milliseconds. Defaults to 30000. | 30000 |
| MYSQL_CONNECT_TIMEOUT_MS | No | Connection timeout in milliseconds. Defaults to 10000. | 10000 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| current_connectionA | Show which MySQL server and database the read-only tools are currently pointed at |
| list_connectionsA | List the connection profiles available to switch to, including any added during this session |
| list_databasesA | List databases on the currently connected MySQL server |
| use_databaseA | Switch the active database on the current MySQL server. Takes effect immediately, no restart needed |
| use_connectionA | Switch to a named connection profile. Takes effect immediately, no restart needed |
| connectA | Connect to any MySQL server at runtime with explicit credentials. Not persisted to disk, but kept for the rest of the session under an alias |
| list_tablesA | List all tables in the active database |
| describe_tableA | Show columns and schema for a specific table |
| get_table_indexesA | Show indexes for a specific table |
| get_foreign_keysA | Show foreign key relationships for a specific table |
| get_table_sampleB | Get sample rows from a table |
| run_queryA | Execute a read-only SQL query (SELECT, WITH, SHOW, DESCRIBE, EXPLAIN only) against the active connection |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 12 tools
Most tools have clear, distinct purposes: connection management (connect, use_connection, list_connections, current_connection), database selection (list_databases, use_database), schema inspection (list_tables, describe_table, get_table_indexes, get_foreign_keys), and data sampling (get_table_sample, run_query). However, there is slight overlap between get_table_sample and run_query (both can retrieve data), and between list_connections and current_connection, though descriptions clarify the difference.
The naming is mostly consistent with verb_noun (e.g., list_tables, describe_table, use_database, get_table_indexes). The only minor deviation is the use of 'current_connection' as a noun phrase instead of a verb, and 'run_query' is fine. The pattern is predictable and readable.
12 tools is a reasonable number for a database inspection server. Each tool serves a clear purpose, and the count is within the typical 3-15 range, though it's on the higher end. No tool feels extraneous, and the set covers connection management and schema exploration comprehensively.
The server covers connection management and schema inspection well, but it lacks write operations (by design, since it's read-only) and query execution is limited to read-only. Missing tools like 'list_views' or 'get_table_data' (full table dump) would be nice, but the core read-only workflow is covered. The read-only limitation is intentional, so the surface is fairly complete for its stated purpose.