670  字
  3  分钟 
  mysql mcp使用与抓包测试 
 环境配置
使用docker开启mysql非常方便
首先开启一个mysql server
docker run -itd --name mysql_server -p3306:3306 --rm   -e MYSQL_ROOT_PASSWORD=123456 mysql然后开启mysql client再通过 —link 连接到mysql server
docker run -it --rm  --name mysql_client  --link mysql_server:mysql_server mysql mysql -hmysql_server -uroot -p--link mysql_server:mysql_server 这会把名为 mysql_server 的容器的 IP 地址映射到 mysql_server 这个主机名,第二个容器(mysql_client)可以通过该主机名访问第一个容器的 MySQL 服务。
mcp工具选择:https://github.com/wenb1n-dev/mysql_mcp_server_pro
启动:
# clone仓库git clone https://github.com/wenb1n-dev/mysql_mcp_server_pro
#同步依赖uv sync
# 指定.env启动,神奇的是这里必须绝对路径uv run -m mysql_mcp_server_pro.server --envfile /Users/rayepeng/Documents/code/ida-mcp-reverse/WeChatMiniGame_WebInstaller/.env.env 文件内容
# MySQL Database ConfigurationMYSQL_HOST=127.0.0.1MYSQL_PORT=3306MYSQL_USER=rootMYSQL_PASSWORD=123456MYSQL_DATABASE=information_schema# Optional, default is 'readonly'. Available values: readonly, writer, adminMYSQL_ROLE=admin神奇的错误
不然会遇到这个神奇的错误:
ps .env 文件放在源码目录下也是不行的?好神奇
❯ uv run -m mysql_mcp_server_pro.server --envfile /Users/rayepeng/Documents/code/mysql_mcp_server_pro/.envTraceback (most recent call last):  File "<frozen runpy>", line 198, in _run_module_as_main  File "<frozen runpy>", line 88, in _run_code  File "/Users/rayepeng/Documents/code/mysql_mcp_server_pro/src/mysql_mcp_server_pro/server.py", line 28, in <module>    from .oauth import OAuthMiddleware, login, login_page  File "/Users/rayepeng/Documents/code/mysql_mcp_server_pro/src/mysql_mcp_server_pro/oauth/__init__.py", line 1, in <module>    from .config import oauth_config  File "/Users/rayepeng/Documents/code/mysql_mcp_server_pro/src/mysql_mcp_server_pro/oauth/config.py", line 28, in <module>    oauth_config = OAuthConfig()                   ^^^^^^^^^^^^^  File "/Users/rayepeng/Documents/code/mysql_mcp_server_pro/.venv/lib/python3.11/site-packages/pydantic_settings/main.py", line 193, in __init__    super().__init__(  File "/Users/rayepeng/Documents/code/mysql_mcp_server_pro/.venv/lib/python3.11/site-packages/pydantic/main.py", line 250, in __init__    validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^pydantic_core._pydantic_core.ValidationError: 6 validation errors for OAuthConfigMYSQL_HOST  Extra inputs are not permitted [type=extra_forbidden, input_value='127.0.0.1', input_type=str]    For further information visit https://errors.pydantic.dev/2.12/v/extra_forbiddenMYSQL_PORT  Extra inputs are not permitted [type=extra_forbidden, input_value='3306', input_type=str]    For further information visit https://errors.pydantic.dev/2.12/v/extra_forbiddenMYSQL_USER  Extra inputs are not permitted [type=extra_forbidden, input_value='root', input_type=str]    For further information visit https://errors.pydantic.dev/2.12/v/extra_forbiddenMYSQL_PASSWORD  Extra inputs are not permitted [type=extra_forbidden, input_value='123456', input_type=str]    For further information visit https://errors.pydantic.dev/2.12/v/extra_forbiddenMYSQL_DATABASE  Extra inputs are not permitted [type=extra_forbidden, input_value='information_schema', input_type=str]    For further information visit https://errors.pydantic.dev/2.12/v/extra_forbiddenMYSQL_ROLE  Extra inputs are not permitted [type=extra_forbidden, input_value='admin', input_type=str]    For further information visit https://errors.pydantic.dev/2.12/v/extra_forbidden使用体验
非常方便,这样对于开发后端的web应用来说会更加方便了

抓包测试
好奇这里是怎么实现的数据通信,抓包测试下
最简单的抓包就是转发本地端口
socat -v -x TCP-LISTEN:8081,fork TCP:localhost:3000这是把本地的8081端口转发到3000,记得修改下mcp.json里的配置(因为这个mcp用的是HTTP streamable通信)
"mysql_mcp_server_pro": {  "name": "mysql_mcp_server_pro",  "type": "streamableHttp",  "description": "",  "isActive": true,  "url": "http://localhost:8081/mcp/"},改端口就行了,路径会自动带上,非常有意思
ping数据包

执行mysql命令 use demo_db

执行 execute_sql

参考
这里的抓包比较直观,可以用用里面的工具 从抓包看 MCP:AI 工具调用背后的通信机制
想法
既然这样,那完全就可以打造多个agent之间的联合,输入一个任务,背后自动调用各种mcp工具解决问题
这背后依赖的是一个客户端? 还是什么,我想开发一个网页,然后能够调用这个sse的 mcp tool
现在研究的都还是mcp server,mcp client还需要进一步研究:
那就又是另一个事情了
 mysql mcp使用与抓包测试 
  https://rayepeng.net/mysql-mcp-usage-and-packet-capture/