(by TonyCai) - MySQL Database Integration using Python script with configurable access controls and schema inspection, usng stdio mode to suitable local deployment, you can run it in docker container.
A simple Python script for interacting with a local MySQL database via standard input/output (stdio), based on FastMCP.
mcp-mysql-server
provides a command-line interface for querying and inspecting the schema of a local MySQL database. It is designed for ease of use in local development environments where a lightweight, script-based interaction is preferred. The script utilizes standard input and output for commands and results, making it easy to integrate with other command-line tools and workflows.
pip install -r requirements.txt
Create a configuration file (e.g., config.ini
) in the same directory as the script or specify the path when running the script. The configuration file should have the following format:
[mysql]
host = localhost
port = 3306 # Optional, defaults to 3306
user = your_mysql_user
password = your_mysql_password
database = your_database_name
Note: Ensure the MySQL user specified has the necessary privileges to perform the actions you intend to execute.
Run the script with the following command, specifying the path to your configuration file:
python mcp-mysql-server.py --config config.ini
The script exposes the following tools that you can use to interact with your MySQL database:
test_connection
: Tests the connection to the database and returns server information.list_tables
: Lists all tables in the current database.read_table
: Reads and returns all data from a specified table.write_table
: Inserts a new row of data into a specified table.get_table_schema
: Returns the schema (column definitions) for a specified table.execute_sql
: Executes a custom SQL query and returns the results.mcp-mysql-server.py
: Main script containing the MySQL MCP server implementationconfig.ini
: Configuration file for MySQL connection parametersrequirements.txt
: List of Python dependencieschanges.log
: Log of changes made to the projectThis project can be run in Docker containers using Docker Compose. The setup includes:
docker-compose up -d
This will:
A special configuration file (config.docker.ini
) is used when running in Docker, which points to the MySQL container.
Unit tests are provided to ensure the functionality works correctly. The tests use mocking to avoid requiring an actual database connection.
# Make a copy of the main script with underscore naming
cp mcp-mysql-server.py mcp_mysql_server.py
# Run the tests
python -m unittest tests.py
docker-compose -f docker-compose.test.yml up --build
This will build a test container and run the unit tests within it.
For developers who want to extend this tool, you can add new functionalities by creating additional MCP tools. Each tool is a Python function decorated with @mcp.tool()
that handles a specific database operation.
Example of adding a new tool:
@mcp.tool()
def my_new_tool(param1: str, param2: int) -> dict:
"""
Documentation for the new tool.
"""
connection = create_mysql_connection()
cursor = connection.cursor()
try:
# Your tool implementation here
return {"result": "success"}
finally:
cursor.close()
connection.close()