mcp-mysql-lens
Enables direct interaction with MySQL databases through natural language, allowing query execution, schema inspection, data analysis, and database management operations.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-mysql-lensshow me the top 5 customers by total orders"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP MySQL Lens
A Model Context Protocol (MCP) server that enables Claude Desktop to interact with MySQL databases directly. This server allows Claude to query, analyze, and manage your MySQL databases through natural language.
Features
🔍 Query Execution: Run SQL queries directly from Claude Desktop
📊 Schema Inspection: Explore database structure, tables, and relationships
🔄 Data Analysis: Analyze and visualize data patterns
🛡️ Safe Operations: Built-in safeguards for database operations
🚀 Easy Setup: Simple configuration with environment variables
Related MCP server: mysql-mcp
Prerequisites
Claude Desktop installed
Node.js (v16 or higher)
MySQL Server (v5.7 or higher)
install npm
Valid MySQL credentials with appropriate permissions
NPM Link
Visit npm package mcp-mysql-lens
Installation
1. Install the MCP Server
npm install -g mcp-mysql-lens2. Configure Claude Desktop
Add this configuration to your Claude Desktop config file:
{
"mcpServers": {
"mysql": {
"command": "npx",
"args": [
"mcp-mysql-lens"
],
"env": {
"MYSQL_HOST": "<YOUR_MYSQL_HOST>",
"MYSQL_PORT": "<YOUR_MYSQL_PORT>",
"MYSQL_USER": "<YOUR_MYSQL_USERNAME>",
"MYSQL_PASSWORD": "<YOUR_MYSQL_PASSWORD>",
"MYSQL_DATABASE": "<YOUR_MYSQL_DEFAULT_DB>"
}
}
}
}Configuration File Location:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
3. Restart Claude Desktop
After saving the configuration, restart Claude Desktop for the changes to take effect.
Configuration Parameters
Parameter | Description | Default | Required |
| MySQL server hostname | - | Yes |
| MySQL server port |
| Yes |
| Database username | - | Yes |
| Database password | - | Yes |
| Default database to connect to | - | Yes |
Usage Examples
Once configured, you can interact with your MySQL database through Claude Desktop:
Query Data
"Show me all users from the users table"
"What are the top 10 products by sales?"
"Find all orders from the last 30 days"Analyze Schema
"What tables are in my database?"
"Describe the structure of the customers table"
"Show me the relationships between tables"Data Analysis
"Calculate the average order value by month"
"Find duplicate records in the products table"
"Show me user registration trends"Security Best Practices
⚠️ Important Security Considerations:
Use Read-Only Credentials: Create a dedicated MySQL user with read-only permissions for data analysis tasks
Never Commit Credentials: Don't commit the
claude_desktop_config.jsonfile with actual credentials to version controlUse Environment Variables: For production environments, consider using environment variable substitution
Limit Database Access: Only grant access to specific databases that Claude needs to work with
Use Strong Passwords: Ensure your MySQL password is strong and unique
Enable SSL/TLS: For remote connections, always use SSL/TLS encryption
Regular Auditing: Monitor database access logs regularly
Troubleshooting
Connection Issues
Problem: "Cannot connect to MySQL server"
Verify MySQL server is running:
systemctl status mysql(Linux) or check Services (Windows)Check host and port are correct
Ensure firewall allows connections on MySQL port (default 3306)
Verify credentials are correct
Problem: "Access denied for user"
Confirm username and password are correct
Check user has appropriate permissions:
SHOW GRANTS FOR 'your_user'@'localhost';Verify user can connect from the specified host
Configuration Issues
Problem: Claude Desktop doesn't show the MySQL server
Ensure the config file is in the correct location
Check JSON syntax is valid (use a JSON validator)
Restart Claude Desktop after making changes
Check Claude Desktop logs for errors
Performance Issues
Problem: Queries are slow
Add appropriate indexes to frequently queried columns
Optimize complex queries
Consider increasing MySQL connection timeout
Check database server resources (CPU, memory)
Limitations
Query Timeout: Long-running queries may timeout (default: 30 seconds)
Result Size: Large result sets may be truncated
Write Operations: Currently not supported
Concurrent Connections: Limited by MySQL server's max_connections setting
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Fork the repository
Create your feature branch (
git checkout -b feature/AmazingFeature)Commit your changes (
git commit -m 'Add some AmazingFeature')Push to the branch (
git push origin feature/AmazingFeature)Open a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Acknowledgments
Built on the Model Context Protocol
Powered by Claude by Anthropic
MySQL connector by mysql2
Inspired by dpflucas mysql server
Available Tools
4 toolsdescribe_tableB
Show the schema for a specific table
| Name | Required | Description | Default |
|---|---|---|---|
| database | No | Database name (optional, uses default if not specified) | |
| table | Yes | Table name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool shows a schema, implying a read-only operation, but doesn't cover aspects like permissions needed, error handling, response format, or any side effects. For a tool with no annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that efficiently conveys the core function without any wasted words. It's front-loaded with the essential information, making it easy for an agent to parse quickly. This is an excellent example of conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, no output schema, no annotations), the description is minimally adequate. It states what the tool does but lacks details on usage, behavior, or output. Without annotations or an output schema, more context would be helpful, but it meets a basic threshold for a simple read operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, clearly documenting both parameters ('database' as optional with default, 'table' as required). The description adds no additional meaning beyond this, such as examples or constraints not in the schema. Given the high schema coverage, a baseline score of 3 is appropriate, as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Show') and resource ('schema for a specific table'), making it easy to understand what it does. However, it doesn't explicitly differentiate from sibling tools like 'list_tables' (which might list table names without schemas) or 'execute_query' (which could return data rather than metadata), so it falls short of a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'list_tables' (for listing tables) or 'execute_query' (for querying data), nor does it specify prerequisites or contexts for usage. This leaves the agent with minimal direction on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_queryB
Execute a read-only SQL query
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | SQL query (only SELECT, SHOW, DESCRIBE, and EXPLAIN statements are allowed) | |
| database | No | Database name (optional, uses default if not specified) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states 'read-only,' which is useful, but doesn't cover other critical aspects like permissions needed, rate limits, error handling, or what the output looks like (e.g., result format, pagination). This leaves significant gaps for a tool that executes queries.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose ('Execute a read-only SQL query') with zero waste. Every word earns its place, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of executing SQL queries, no annotations, and no output schema, the description is incomplete. It lacks details on behavioral traits (e.g., safety, performance), output format, and usage context relative to siblings, making it inadequate for full agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters (query and database) thoroughly. The description adds no additional meaning beyond what's in the schema, such as query syntax examples or database context. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('execute') and resource ('read-only SQL query'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like list_databases or describe_table, which might also involve querying but serve different specific purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for SQL queries, particularly read-only ones, but doesn't specify when to use this tool versus alternatives like list_databases or describe_table. It provides some context (read-only) but lacks explicit guidance on exclusions or preferred scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_databasesA
List all accessible databases on the MySQL server
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It indicates a read operation ('List') and implies accessibility constraints ('accessible databases'), but lacks details on permissions, rate limits, or output format. It adds some context but doesn't fully compensate for the absence of annotations, resulting in moderate transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without any wasted words. It's front-loaded with the key action and resource, making it easy to understand quickly. Every part of the sentence contributes meaningfully to the tool's definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (0 parameters, no output schema) and no annotations, the description is minimally adequate. It covers the basic purpose and scope but lacks details on behavioral aspects like permissions or output format. For a simple list tool, it's complete enough to be functional but could be enhanced with more context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, so no parameter information is needed. The description doesn't mention parameters, which is appropriate, and it adds value by clarifying the scope ('all accessible databases'). This exceeds the baseline of 3 for high schema coverage by providing useful context without redundancy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('List') and resource ('all accessible databases on the MySQL server'), distinguishing it from siblings like list_tables (which lists tables within a database) and describe_table (which describes table structure). It precisely communicates what the tool does without being vague or tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating 'all accessible databases,' suggesting it's for discovering available databases, but it doesn't explicitly guide when to use this versus alternatives like list_tables or describe_table. No exclusions or specific contexts are provided, leaving usage somewhat inferred rather than clearly directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tablesC
List all tables in a specified database
| Name | Required | Description | Default |
|---|---|---|---|
| database | No | Database name (optional, uses default if not specified) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only mentions the basic action. It lacks details on behavioral traits like whether it requires authentication, returns paginated results, includes system tables, or has rate limits, leaving significant gaps for a tool with potential complexity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with zero wasted words, front-loading the core purpose efficiently. It's appropriately sized for a simple tool, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is incomplete for a tool that might involve database interactions. It doesn't explain return values, error conditions, or prerequisites, leaving the agent with insufficient context for reliable use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents the single optional parameter 'database'. The description adds no additional parameter semantics beyond implying a database context, aligning with the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List all tables') and resource ('in a specified database'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'list_databases' or 'describe_table' beyond the basic scope, missing explicit distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as 'list_databases' for database-level listing or 'describe_table' for detailed table information. The description only states what it does without context for selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
4 tool updates
- First observed
describe_table - First observed
execute_query - First observed
list_databases - First observed
list_tables
TDQS
Each tool has a clearly distinct purpose: describe_table shows schema, execute_query runs SQL queries, list_databases lists databases, and list_tables lists tables. There is no overlap or ambiguity between these functions.
All tool names follow a consistent verb_noun pattern (describe_table, execute_query, list_databases, list_tables) with clear, descriptive verbs and nouns that match their functions.
With 4 tools, the count is reasonable for a MySQL server interface, though it feels slightly thin as it lacks write operations (e.g., insert, update, delete) which are common in database contexts. However, the tools cover essential read and metadata functions well.
The tool surface covers read operations and metadata well (list databases/tables, describe schema, execute queries), but there are notable gaps: no write operations (insert, update, delete), no transaction management, and no user or permission management tools, which limits full database lifecycle coverage.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for querying and analyzing data from ad platforms, analytics tools, and spreadsheets
Read-only MCP server for The Quiet Protocol's engines, benchmarks, proof, and business data.
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
- dataOAuthco.thinair
Read-only PostgreSQL, MySQL, SQL Server access via MCP — 24 dialect-aware hosted tools.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that provides read-only access to MySQL databases.445472MIT
- AlicenseNot gradedqualityDmaintenanceA lightweight MCP server providing safe, read-only access to MySQL databases. It enables users to query multiple MySQL instances securely while preventing write operations.1,090MIT
- AlicenseNot gradedqualityCmaintenanceRead-only MySQL MCP server for safe schema inspection and SELECT-style queries.33MIT
- AlicenseAqualityCmaintenanceRead-only MySQL/MariaDB MCP server for running SELECT queries safely, with automatic read-only enforcement and query limits.314MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Himanshu-Agg12/mcp-mysql-lens'
If you have feedback or need assistance with the MCP directory API, please join our Discord server