Laravel数据库的MCP服务器
 ](https://nodejs.org/)
一个模型上下文协议(MCP)服务器,为Laravel应用程序提供无缝的数据库访问。自动解析Laravel .env 文件并连接到MySQL、PostgreSQL、MariaDB或SQLite数据库。
特性
- ✨ 自动.env解析:从Laravel读取数据库配置
.env文件 - 🚢 Laravel Sail支持:自动检测和使用
FORWARD_DB_PORT - 🔒 只读模式:使用查询验证进行安全的数据库探索
- 📊 数据库反思:列出架构、表、列、索引和过程
- 🔍 SQL执行:使用分页支持执行查询
- 🌐 多个数据库:支持MySQL、PostgreSQL、MariaDB和SQLite
- 🔐 SSH隧道:与远程数据库的安全连接
- 📦 易于集成:适用于Claude桌面和光标
用法
无需安装!直接与npx一起使用:
npx mcp-server-laravel-database --env /path/to/laravel/.env快速开始
1.基本用法
指向你的Laravel .env 文件:
npx mcp-server-laravel-database --env /path/to/your/laravel/.env2.使用克劳德桌面
添加到您的Claude Desktop配置(~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上):
{
"mcpServers": {
"laravel-database": {
"command": "npx",
"args": [
"-y",
"mcp-server-laravel-database",
"--env",
"/absolute/path/to/your/laravel/.env",
"--readonly"
]
}
}
}3.使用光标
添加到光标MCP设置中:
{
"mcpServers": {
"laravel-database": {
"command": "npx",
"args": [
"-y",
"mcp-server-laravel-database",
"--env",
"/absolute/path/to/your/laravel/.env",
"--readonly"
]
}
}
}配置选项
使用.env文件
服务器从Laravel中读取这些变量 .env 文件:
DB_CONNECTION=mysql # mysql, pgsql, mariadb, or sqlite
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=password
FORWARD_DB_PORT=13306 # Laravel Sail port (optional)命令行选项
| 选项 | 描述 | 默认值 |
|---|---|---|
--env | Laravel.env文件的路径 | - |
--db-connection | 数据库类型(mysql/pgsql/mariadb/sqlite) | mysql |
--db-host | 数据库主机 | localhost |
--db-port | 数据库端口 | 3306 |
--db-database | 数据库名称 | 必填 |
--db-username | 数据库用户名 | - |
--db-password | 数据库密码 | - |
--readonly | 启用只读模式 | false |
--max-rows | 要返回的最大行数 | - |
--ssl-mode | SSL模式(禁用/要求/验证ca/验证完整) | - |
--ssh-host | SSH隧道主机 | - |
--ssh-port | SSH隧道端口 | 22 |
--ssh-user | SSH用户名 | - |
--ssh-password | SSH密码 | - |
--ssh-key | SSH私钥路径 | - |
--transport | 传输模式(stdio/http) | stdio |
--listen | HTTP服务器侦听地址(仅限HTTP传输) | localhost |
--port | HTTP服务器端口(仅限HTTP传输) | 3333 |
--log-level | 日志级别(错误/警告/信息/调试) | 信息 |
配置优先级
- 命令行选项(最高优先级)
.env通过指定的文件--env- 当前shell会话中可用的实际环境变量
如果你忽略了 --env,服务器仍在读取 DB_* 值(例如。, DB_HOST, DB_DATABASE, DB_USERNAME, DB_PASSWORD, FORWARD_DB_PORT)直接来自环境。如果 --env 逐一覆盖这些值,同时仍允许任何剩余设置回退到环境中。
环境变量
当没有提供CLI标志时,会参考以下环境变量:
| 变量 | 描述 | 默认值 |
|---|---|---|
DB_CONNECTION | 数据库类型(mysql, pgsql, mariadb, sqlite) | mysql |
DB_HOST | 数据库主机(重写为 127.0.0.1 当 FORWARD_DB_PORT 使用) | localhost |
DB_PORT | 数据库端口(使用 .env Laravel Sail's FORWARD_DB_PORT) | 基于 DB_CONNECTION (3306/5432/0) |
DB_DATABASE | 数据库名称(必填) | - |
DB_USERNAME | 数据库用户名 | - |
DB_PASSWORD | 数据库密码 | - |
环境值与合并 .env 内容(如果提供),以便文件中丢失的任何密钥仍然可以从shell环境中获取。
运输方式
- 标准 (默认):最适合基于CLI的客户端,如Claude Desktop或Cursor。服务器将所有日志行发送到
stderr因此stdout保留用于MCP帧。不需要额外的配置。 - 超文本传输协议:实现MCP流式HTTP传输(
2024-11-05).所有操作都使用/mcp端点(POST用于请求,GET用于SSE流式响应,DELETE用于结束会话)Mcp-Session-Id头球会话ID是在服务器端生成的。
使用 --listen 在使用时为HTTP侦听器选择绑定地址 http 运输。默认情况下,服务器绑定到 localhost 和港口 3333,避免了典型的Laravel网络端口。
用法示例
MySQL连接
npx mcp-server-laravel-database \
--db-connection mysql \
--db-host localhost \
--db-port 3306 \
--db-database myapp \
--db-username root \
--db-password secret \
--readonlyPostgreSQL连接
npx mcp-server-laravel-database \
--db-connection pgsql \
--db-host localhost \
--db-port 5432 \
--db-database myapp \
--db-username postgres \
--db-password secret \
--readonlySQLite数据库
npx mcp-server-laravel-database \
--db-connection sqlite \
--db-database /path/to/database.sqlite \
--readonlyLaravel帆船
对于Laravel Sail项目,只需指向 .env file-服务器将自动检测并使用 FORWARD_DB_PORT:
npx mcp-server-laravel-database --env /path/to/laravel/.env使用SSH隧道
安全地连接到远程数据库:
npx mcp-server-laravel-database \
--env /path/to/.env \
--ssh-host remote.example.com \
--ssh-user deploy \
--ssh-key ~/.ssh/id_rsa \
--readonlyMCP资源
服务器为数据库自检提供了以下资源:
| 资源 | URI | 描述 |
|---|---|---|
| 架构 | db://schemas | 列出所有数据库架构 |
| 桌子 | db://schemas/{schema}/tables | 列出架构中的表 |
| 表结构 | db://schemas/{schema}/tables/{table} | 获取表列定义 |
| 指数 | db://schemas/{schema}/tables/{table}/indexes | 获取表索引 |
| 程序 | db://schemas/{schema}/procedures | 列出存储过程 |
| 程序详细信息 | db://schemas/{schema}/procedures/{proc} | 获取程序定义 |
MCP工具
execute_sql
使用可选分页执行SQL查询。
参数:
sql(字符串,必填):要执行的SQL查询max_rows(number,可选):要返回的最大行数offset(数字,可选):分页偏移量page(数字,可选):页码(从1开始)per_page(number,可选):每页的行数
例子:
{
"sql": "SELECT * FROM users WHERE active = 1",
"page": 1,
"per_page": 20
}只读模式
当 --readonly 已启用:
- 只允许使用SELECT、SHOW、DESCRIBE和EXPLAIN查询
- 写入操作(INSERT、UPDATE、DELETE、DROP等)被阻止
- 对于SQLite,使用数据库级只读模式
- 对于其他数据库,在执行之前验证查询
这是 强烈推荐 用于生产数据库。
安全最佳实践
- ✅ 始终使用
--readonly用于生产数据库 - ✅ 使用SSH隧道进行远程连接
- ✅ 使用具有最小权限的数据库用户
- ✅ 保持你的
.env文件安全(永远不要提交到Git) - ✅ 尽可能为数据库连接启用SSL/TLS
- ✅ 为数据库帐户使用强密码
发展
对于想要贡献或定制的开发人员:
- 看 Developpent.md 用于开发设置
- 看 建筑.md 用于系统设计
- 看 发布.md 出版指南
许可证
MIT许可证-请参阅 许可证 详细信息文件
