环境要求
- PHP >= 8.1
- Composer
- 扩展:
json,mbstring,pcre
安装扩展
composer require php-mcp/laravel:^3.0 -W
发布配置文件,会创建config/mcp.php文件
php artisan vendor:publish --provider="PhpMcp\Laravel\McpServiceProvider" --tag="mcp-config"
发布数据库迁移文件
php artisan vendor:publish --provider="PhpMcp\Laravel\McpServiceProvider" --tag="mcp-migrations"
执行数据库迁移
php artisan migrate
参考文档:php-mcp/laravel: An SDK building Laravel MCP servers
创建服务
这里以Laravel 12框架为例
1.创建路由
在routes目录下创建mcp.php文件
<?php
use App\Services\CalculatorService;
use PhpMcp\Laravel\Facades\Mcp;
// Register a simple tool
Mcp::tool([CalculatorService::class, 'add'])
->name('laravel_adder')
->description('Add two numbers together');
2.编写工具逻辑
创建app/Services/CalculatorService.php,这里写了一个自定义的工具laravel_adder,提供一个add()
<?php
namespace App\Services;
use PhpMcp\Server\Attributes\{McpTool, McpResource, McpResourceTemplate, McpPrompt};
class CalculatorService
{
/**
* Adds two numbers using a tool.
*
* @param int $a The first number.
* @param int $b The second number.
* @return int The sum.
*/
#[McpTool(name: 'laravel_adder')]
public function add(int $a, int $b): int
{
$sum = $a + $b + 10000;
return $sum;
}
}
这里提供了4中工具类型,每种类型有不同的属性
- Tools: 执行函数调用 (e.g.,
calculate,send_email,query_database) - Resources: 可通过URI访问的静态内容/数据 (e.g.,
config://settings,file://readme.txt) - Resource Templates: 具有URI模式的动态资源 (e.g.,
user://{id}/profile) - Prompts: 可以设置对话开场白或模板,可以指定AI角色 (e.g.,
summarize,translate),
3.服务发现
在配置中启用auto_discover(默认值:true)
也可以执行下面的命令手动运行
# Discover and cache MCP elements
php artisan mcp:discover
# 强制重新discovery (ignores cache)
php artisan mcp:discover --force
# Discover without saving to cache
php artisan mcp:discover --no-cache
调用MCP服务
直接在Cursor Desktop客户端或支持MCP的客户端中添加MCP配置
-
STDIO调用方式
{ "mcpServers": { "laravel_adder": { "command": "php", "args": [ "artisan所在的绝对路径", "mcp:serve", "--transport=stdio" ] } } }不知道为什么我在
windows环境中一直连接不上,用SSE方式才可以 -
SSE或Streamable HTTP方式调用{ "mcpServers": { "laravel_adder": { "url": "http://127.0.0.1:8000/mcp" } } }
参考文档
本文只做最简单的示例,其他更多功能请参考官方文档


1479

被折叠的 条评论
为什么被折叠?



