关于 Laravel MCP Server (bramato/laravel-mcp-server)
供开发者构建 MCP 服务的 Laravel 基础包,可通过 MCP 暴露应用数据和操作。它支持配置 Stdio、HTTP 与 WebSocket 传输;资源和工具由开发者实现并注册。
主要功能
- 01支持 Stdio、HTTP 和 WebSocket 传输
- 02可配置令牌身份验证
- 03注册资源与工具接口实现
- 04工具执行白名单
- 05可配置包日志
适用场景
- 01将 Laravel 应用数据公开为 MCP 资源
- 02将应用操作提供为 MCP 工具
- 03为 MCP 请求选择传输方式
MCP 相关
通过 Stdio、HTTP 和 WebSocket 使用 JSON-RPC 2.0 处理 MCP 请求。应用需实现并注册该包的接口,以公开资源和工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Laravel MCP 服务(bramato/laravel-mcp-server)
用于构建 Model Context Protocol (MCP) 服务的 Laravel 基础包。
此软件包提供基础设施,用于通过不同传输方式(Stdio、HTTP、通过 Reverb 实现的 WebSocket)处理 MCP 请求。它在内部使用出色的 sajya/server 库,以稳健地解析 JSON-RPC 2.0 请求并格式化响应。
你需要自行实现 ResourceInterface 和 ToolInterface 类(使用 Bramato\\LaravelMcpServer\\Mcp\\Interfaces 命名空间),并在配置文件中注册这些类,以便根据 MCP 规范公开应用程序的数据和功能。
安装
你可以通过 Composer 安装此软件包:
composer require bramato/laravel-mcp-server
接下来,你应使用 vendor:publish Artisan 命令发布配置文件:
php artisan vendor:publish --provider="Bramato\LaravelMcpServer\Providers\McpServiceProvider" --tag="config"
这将在应用程序的配置目录中创建 config/mcp.php 文件,你可以在其中自定义服务的行为。
配置
config/mcp.php 文件允许你配置:
enabled_transports:选择要启用的传输方式(stdio、http、websocket)。transports:配置各传输方式的详细信息(例如,transports.http.path中的 HTTP 路径)。authentication:设置基本身份验证(通过authentication.driver支持none或token)。若使用令牌身份验证,请在authentication.options.header中指定标头名称。resources:**注册 MCP 资源。**提供实现Bramato\\LaravelMcpServer\\Mcp\\Interfaces\\ResourceInterface的完全限定类名数组。tools:**注册 MCP 工具。**提供实现Bramato\\LaravelMcpServer\\Mcp\\Interfaces\\ToolInterface的完全限定类名数组。这会作为可执行工具的白名单。logging:配置软件包专用日志的日志通道和级别。
创建资源和工具
此软件包提供接口,但你需要实现实际逻辑。
示例:创建资源
-
创建你的资源类(例如,位于
app/Mcp/Resources/UserProfileResource.php):namespace App\Mcp\Resources; use Bramato\LaravelMcpServer\Mcp\Interfaces\ResourceInterface; use Illuminate\Support\Facades\Auth; class UserProfileResource implements ResourceInterface { public function getUri(): string { return 'user://profile'; } // Unique URI for this resource public function getName(): string { return 'User Profile'; } public function getDescription(): string { return 'Provides information about the authenticated user.'; } public function getMimeType(): string { return 'application/json'; } public function getContents(): mixed { $user = Auth::user(); // Example: Get authenticated user if (!$user) { return null; // Or throw an exception mapped to an error } return [ 'id' => $user->id, 'name' => $user->name, 'email' => $user->email, ]; } } -
在
config/mcp.php中注册:// config/mcp.php return [ // ... other config 'resources' => [ \App\Mcp\Resources\UserProfileResource::class, ], // ... ];
示例:创建工具
-
创建你的工具类(例如,位于
app/Mcp/Tools/SendNotificationTool.php):namespace App\Mcp\Tools; use Bramato\LaravelMcpServer\Mcp\Interfaces\ToolInterface; // use App\Jobs\ProcessNotificationJob; // Example Job use Illuminate\Support\Facades\Log; class SendNotificationTool implements ToolInterface { public function getName(): string { return 'sendNotification'; } public function getDescription(): string { return 'Sends a notification to a user.'; } public function getInputSchema(): array { // Define expected parameters using JSON Schema format return [ 'type' => 'object', 'properties' => [ 'user_id' => ['type' => 'integer', 'description' => 'ID of the target user'], 'message' => ['type' => 'string', 'description' => 'The notification message content'], ], 'required' => ['user_id', 'message'], ]; } public function execute(array $arguments): mixed { Log::info('Executing sendNotification tool', $arguments); // ** Add your logic here ** // Example: Validate input, find user, dispatch a Job // ProcessNotificationJob::dispatch($arguments['user_id'], $arguments['message']); return ['status' => 'queued', 'user_id' => $arguments['user_id']]; } } -
在
config/mcp.php中注册:// config/mcp.php return [ // ... other config 'tools' => [ \App\Mcp\Tools\SendNotificationTool::class, ], ];
使用
服务器的运行方式取决于启用的传输方式:
- Stdio:运行 Artisan 命令:
php artisan mcp:server --transport=stdio。 - HTTP:确保 Web 服务器(例如,
php artisan serve或 Nginx/Apache)正在运行。向mcp.transports.http.path中配置的路径(默认值:/mcp-rpc)发送 JSON-RPC POST 请求。 - WebSocket (Reverb):
- 在主应用程序中安装并配置 Laravel Reverb:
php artisan reverb:install。 - 确保
config/mcp.php的enabled_transports中列出了websocket传输方式。 - 启动 Reverb 服务:
php artisan reverb:start。 - 将 MCP WebSocket 客户端连接到 Reverb 服务端点(请查看你的 Reverb 配置)。
- 在主应用程序中安装并配置 Laravel Reverb:
测试
该软件包包含一个基于 PHPUnit 和 Orchestra Testbench 的基础测试套件。
# From the package directory (packages/bramato/laravel-mcp-server)
../../vendor/bin/phpunit
# Or from the project root
./vendor/bin/phpunit packages/bramato/laravel-mcp-server/tests
安全注意事项
MCP 规范未定义客户端与服务之间的身份验证或授权机制。该软件包提供了:
- 工具白名单:只有在
config/mcp.php的tools数组中明确列出的工具才能执行。 - 基础令牌身份验证:你可以通过
authentication配置部分启用基于令牌的身份验证。
重要提示:你有责任在 ToolInterface::execute 和 ResourceInterface::getContents 方法中实现细粒度的授权逻辑。使用 Laravel 的 Gates 和 Policies 或其他授权机制,确保请求的客户端拥有访问特定资源或执行特定工具所需的权限。
贡献
详情请参阅 CONTRIBUTING.md(如果有)。
许可证
MIT 许可证(MIT)。更多信息请参阅 LICENSE.md 文件。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。