关于 PHP MCP Server for Laravel
Laravel MCP Server SDK 是一个用于构建 MCP 服务的 Laravel 开发包,可将 Laravel 应用的功能以工具、资源、提示词和资源模板的形式暴露给 AI 助手。
主要功能
- 01基于 Laravel 容器、配置和日志的集成
- 02通过 Mcp 门面以流式 API 注册元素
- 03支持 PHP 8 属性自动发现与缓存
- 04提供 STDIO、集成 HTTP 和独立 HTTP 三种传输
- 05提供 Artisan 命令用于服务、发现和列表
适用场景
- 01将 Laravel 应用的业务逻辑暴露为 MCP 工具供 AI 助手调用
- 02为 Cursor 等客户端通过 STDIO 方式接入 Laravel 应用
- 03在生产环境中使用独立 HTTP 服务运行 MCP 服务
MCP 相关
该项目是一个用于构建 MCP 服务的 SDK,可将 Laravel 应用的工具、资源、提示词和资源模板暴露给 MCP 客户端。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Laravel MCP 服务 SDK
一款功能全面的 Laravel SDK,可用于构建具备企业级功能和 Laravel 原生集成能力的 模型上下文协议(MCP) 服务。
此 SDK 为强大的 php-mcp/server 库提供了针对 Laravel 优化的封装,让你能够将 Laravel 应用的功能作为标准化的 MCP 工具、资源、提示词和资源模板公开给 Anthropic 的 Claude、Cursor IDE、OpenAI 的 ChatGPT 等 AI 助手使用。
主要功能
- Laravel 原生集成:深度集成 Laravel 的服务容器、配置、缓存、日志记录、会话和 Artisan 控制台
- 流畅的元素定义:通过
Mcp门面,使用优雅的 Laravel 风格 API 定义 MCP 元素 - 基于属性的发现:使用 PHP 8 属性(
#[McpTool]、#[McpResource]等)实现自动发现和缓存 - 高级会话管理:采用 Laravel 原生会话处理程序(文件、数据库、缓存、redis),并支持自动垃圾回收
- 灵活的传输选项:
- 集成式 HTTP:通过 Laravel 路由提供服务,并支持中间件
- 专用 HTTP 服务:高性能的独立 ReactPHP 服务
- STDIO:用于直接集成客户端的命令行接口
- 可流式传输:增强型 HTTP 传输,支持续传和事件溯源
- Artisan 命令:用于服务、发现和元素管理的命令
- 全面的测试覆盖:完善的测试套件,确保可靠性
此软件包支持 2025-03-26 版本的模型上下文协议。
要求
- PHP >= 8.1
- Laravel >= 10.0
- 扩展:
json、mbstring、pcre(通常默认启用)
安装
通过 Composer 安装软件包:
composer require php-mcp/laravel:^3.0 -W
发布配置文件:
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
配置
所有 MCP 服务设置均通过 config/mcp.php 管理,该文件包含每个选项的详细说明。配置涵盖服务身份、功能、发现设置、会话管理、传输选项、缓存和日志记录。所有设置都支持环境变量,便于管理部署。
主要配置区域包括:
- 服务信息:名称、版本和基本身份信息
- 功能:控制启用哪些 MCP 功能(工具、资源、提示词等)
- 发现:如何从代码库中查找和缓存元素
- 会话管理:多种存储后端(文件、数据库、缓存、redis),并支持自动垃圾回收
- 传输:STDIO、集成式 HTTP 和专用 HTTP 服务选项
- 性能:缓存策略和分页限制
请查看已发布的 config/mcp.php 文件,了解所有可用选项及其环境变量覆盖项的详细说明。
定义 MCP 元素
Laravel MCP 提供了两种强大的 MCP 元素定义方式:手动注册(使用流畅的 Mcp 门面)和基于属性的发现(使用 PHP 8 属性)。两种方式可以组合使用,手动注册的优先级更高。
元素类型
- 工具:可执行函数/操作(例如,
calculate、send_email、query_database) - 资源:可通过 URI 访问的静态内容/数据(例如,
config://settings、file://readme.txt) - 资源模板:具有 URI 模式的动态资源(例如,
user://{id}/profile) - 提示词:对话开场白/模板(例如,
summarize、translate)
1. 手动注册
使用优雅的 Mcp 门面在 routes/mcp.php 中定义 MCP 元素:
<?php
use PhpMcp\Laravel\Facades\Mcp;
use App\Services\{CalculatorService, UserService, EmailService, PromptService};
// Register a simple tool
Mcp::tool([CalculatorService::class, 'add'])
->name('add_numbers')
->description('Add two numbers together');
// Register an invokable class as a tool
Mcp::tool(EmailService::class)
->description('Send emails to users');
// Register a closure as a tool with custom input schema
Mcp::tool(function(float $x, float $y): float {
return $x * $y;
})
->name('multiply')
->description('Multiply two numbers')
->inputSchema([
'type' => 'object',
'properties' => [
'x' => ['type' => 'number', 'description' => 'First number'],
'y' => ['type' => 'number', 'description' => 'Second number'],
],
'required' => ['x', 'y'],
]);
// Register a resource with metadata
Mcp::resource('config://app/settings', [UserService::class, 'getAppSettings'])
->name('app_settings')
->description('Application configuration settings')
->mimeType('application/json')
->size(1024);
// Register a closure as a resource
Mcp::resource('system://time', function(): string {
return now()->toISOString();
})
->name('current_time')
->description('Get current server time')
->mimeType('text/plain');
// Register a resource template for dynamic content
Mcp::resourceTemplate('user://{userId}/profile', [UserService::class, 'getUserProfile'])
->name('user_profile')
->description('Get user profile by ID')
->mimeType('application/json');
// Register a closure as a resource template
Mcp::resourceTemplate('file://{path}', function(string $path): string {
if (!file_exists($path) || !is_readable($path)) {
throw new \InvalidArgumentException("File not found or not readable: {$path}");
}
return file_get_contents($path);
})
->name('file_reader')
->description('Read file contents by path')
->mimeType('text/plain');
// Register a prompt generator
Mcp::prompt([PromptService::class, 'generateWelcome'])
->name('welcome_user')
->description('Generate a personalized welcome message');
// Register a closure as a prompt
Mcp::prompt(function(string $topic, string $tone = 'professional'): array {
return [
[
'role' => 'user',
'content' => "Write a {$tone} summary about {$topic}. Make it informative and engaging."
]
];
})
->name('topic_summary')
->description('Generate topic summary prompts');
可用的 Fluent 方法:
适用于所有元素:
name(string $name):覆盖推断出的名称description(string $description):设置自定义描述
适用于工具:
annotations(ToolAnnotations $annotations):添加 MCP 工具注解inputSchema(array $schema):为参数定义自定义 JSON 架构
适用于资源:
mimeType(string $mimeType):指定内容类型size(int $size):设置内容大小(以字节为单位)annotations(Annotations $annotations):添加 MCP 注解
适用于资源模板:
mimeType(string $mimeType):指定内容类型annotations(Annotations $annotations):添加 MCP 注解
处理程序格式:
[ClassName::class, 'methodName']- 类方法InvokableClass::class- 带有__invoke()方法的可调用类function(...) { ... }- 可调用对象(v3.2+)
2. 基于属性的发现
或者,你可以使用 PHP 8 属性将方法或类标记为 MCP 元素。在这种情况下,无需在 routes/mcp.php 中注册它们:
<?php
namespace App\Services;
use PhpMcp\Server\Attributes\{McpTool, McpResource, McpResourceTemplate, McpPrompt};
class UserService
{
/**
* Create a new user account.
*/
#[McpTool(name: 'create_user')]
public function createUser(string $email, string $password, string $role = 'user'): array
{
// Create user logic
return [
'id' => 123,
'email' => $email,
'role' => $role,
'created_at' => now()->toISOString(),
];
}
/**
* Get application configuration.
*/
#[McpResource(
uri: 'config://app/settings',
mimeType: 'application/json'
)]
public function getAppSettings(): array
{
return [
'theme' => config('app.theme', 'light'),
'timezone' => config('app.timezone'),
'features' => config('app.features', []),
];
}
/**
* Get user profile by ID.
*/
#[McpResourceTemplate(
uriTemplate: 'user://{userId}/profile',
mimeType: 'application/json'
)]
public function getUserProfile(string $userId): array
{
return [
'id' => $userId,
'name' => 'John Doe',
'email' => '[email protected]',
'profile' => [
'bio' => 'Software developer',
'location' => 'New York',
],
];
}
/**
* Generate a welcome message prompt.
*/
#[McpPrompt(name: 'welcome_user')]
public function generateWelcome(string $username, string $role = 'user'): array
{
return [
[
'role' => 'user',
'content' => "Create a personalized welcome message for {$username} with role {$role}. Be warm and professional."
]
];
}
}
发现流程:
带有属性标记的元素会在以下情况下自动发现:
- 在配置中启用
auto_discover(默认值:true) - 手动运行
php artisan mcp:discover
# Discover and cache MCP elements
php artisan mcp:discover
# Force re-discovery (ignores cache)
php artisan mcp:discover --force
# Discover without saving to cache
php artisan mcp:discover --no-cache
元素优先级
- 手动注册始终会覆盖具有相同标识符的已发现元素
- 已发现的元素会缓存以提升性能
- 在重新运行发现时会自动使缓存失效
运行 MCP 服务
Laravel MCP 提供三种传输选项,分别针对不同的部署场景进行了优化:
1. STDIO 传输
最适合: 直接客户端执行、Cursor IDE、命令行工具
php artisan mcp:serve --transport=stdio
客户端配置(Cursor IDE):
{
"mcpServers": {
"my-laravel-app": {
"command": "php",
"args": [
"/absolute/path/to/your/laravel/project/artisan",
"mcp:serve",
"--transport=stdio"
]
}
}
}
⚠️ 重要: 使用 STDIO 传输时,处理程序中绝不能写入
STDOUT(调试时请使用 Laravel 日志记录器或STDERR)。STDOUT专用于 JSON-RPC 通信。
2. 集成式 HTTP 传输
最适合: 开发、已有 Web 服务的应用、快速设置
集成式传输通过 Laravel 应用的路由提供 MCP 服务:
// Routes are automatically registered at:
// GET /mcp - Streamable connection endpoint
// POST /mcp - Message sending endpoint
// DELETE /mcp - Session termination endpoint
// Legacy mode (if enabled):
// GET /mcp/sse - Server-Sent Events endpoint
// POST /mcp/message - Message sending endpoint
CSRF 保护配置:
将 MCP 路由添加到 CSRF 排除项中:
Laravel 11+:
// bootstrap/app.php
->withMiddleware(function (Middleware $middleware) {
$middleware->validateCsrfTokens(except: [
'mcp', // For streamable transport (default)
'mcp/*', // For legacy transport (if enabled)
]);
})
Laravel 10 及以下版本:
// app/Http/Middleware/VerifyCsrfToken.php
protected $except = [
'mcp', // For streamable transport (default)
'mcp/*', // For legacy transport (if enabled)
];
配置选项:
'http_integrated' => [
'enabled' => true,
'route_prefix' => 'mcp', // URL prefix
'middleware' => ['api'], // Applied middleware
'domain' => 'api.example.com', // Optional domain
'legacy' => false, // Use legacy SSE transport instead
],
客户端配置:
{
"mcpServers": {
"my-laravel-app": {
"url": "https://your-app.test/mcp"
}
}
}
服务端环境注意事项:
标准同步服务端难以处理持久 SSE 连接,因为每个活动连接都会占用一个工作进程。这会影响开发和生产环境。
开发环境:
- PHP 内置服务端(
php artisan serve)无法正常工作——SSE 流会锁定唯一的进程 - Laravel Herd(推荐用于本地开发)
- 配置正确且拥有多个 PHP-FPM 工作进程的 Nginx
- 使用 Swoole/RoadRunner 进行异步处理的 Laravel Octane
- 专用 HTTP 服务端(
php artisan mcp:serve --transport=http)
生产环境:
- 专用 HTTP 服务端(强烈推荐)
- 使用 Swoole/RoadRunner 的 Laravel Octane
- 配置正确且拥有足够 PHP-FPM 工作进程的 Nginx
3. 专用 HTTP 服务(生产环境推荐)
适用场景: 生产环境、高流量应用、多个并发客户端
启动一个独立的、基于 ReactPHP 的 HTTP 服务:
# Start dedicated server
php artisan mcp:serve --transport=http
# With custom configuration
php artisan mcp:serve --transport=http \
--host=0.0.0.0 \
--port=8091 \
--path-prefix=mcp_api
配置选项:
'http_dedicated' => [
'enabled' => true,
'host' => '127.0.0.1', // Bind address
'port' => 8090, // Port number
'path_prefix' => 'mcp', // URL path prefix
'legacy' => false, // Use legacy transport
'enable_json_response' => false, // JSON mode vs SSE streaming
'event_store' => null, // Event store for resumability
'ssl_context_options' => [], // SSL configuration
],
传输模式:
- 流式模式(
legacy: false):增强型传输,支持可恢复性和事件溯源 - 传统模式(
legacy: true):已弃用的 HTTP+SSE 传输方式。
JSON 响应模式:
'enable_json_response' => true, // Returns immediate JSON responses
'enable_json_response' => false, // Uses SSE streaming (default)
- JSON 模式:立即返回响应,最适合快速执行的工具
- SSE 模式:流式传输响应,非常适合长时间运行的操作
生产环境部署:
这会创建一个长时间运行的进程,应使用以下工具进行管理:
- Supervisor(推荐)
- systemd
- Docker 容器
- 进程管理器
Supervisor 配置示例:
[program:laravel-mcp]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/laravel/artisan mcp:serve --transport=http
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
numprocs=1
redirect_stderr=true
stdout_logfile=/var/log/laravel-mcp.log
如需查看完整的生产环境部署指南,请参阅 php-mcp/server 文档。
Artisan 命令
Laravel MCP 提供了多个 Artisan 命令,用于管理 MCP 服务:
发现命令
发现并缓存代码库中的 MCP 元素:
# Discover elements and update cache
php artisan mcp:discover
# Force re-discovery (ignore existing cache)
php artisan mcp:discover --force
# Discover without updating cache
php artisan mcp:discover --no-cache
输出示例:
Starting MCP element discovery...
Discovery complete.
┌─────────────────────┬───────┐
│ Element Type │ Count │
├─────────────────────┼───────┤
│ Tools │ 5 │
│ Resources │ 3 │
│ Resource Templates │ 2 │
│ Prompts │ 1 │
└─────────────────────┴───────┘
MCP element definitions updated and cached.
列表命令
查看已注册的 MCP 元素:
# List all elements
php artisan mcp:list
# List specific type
php artisan mcp:list tools
php artisan mcp:list resources
php artisan mcp:list prompts
php artisan mcp:list templates
# JSON output
php artisan mcp:list --json
输出示例:
Tools:
┌─────────────────┬──────────────────────────────────────────────┐
│ Name │ Description │
├─────────────────┼──────────────────────────────────────────────┤
│ add_numbers │ Add two numbers together │
│ send_email │ Send email to specified recipient │
│ create_user │ Create a new user account with validation │
└─────────────────┴──────────────────────────────────────────────┘
Resources:
┌─────────────────────────┬───────────────────┬─────────────────────┐
│ URI │ Name │ MIME │
├─────────────────────────┼───────────────────┼─────────────────────┤
│ config://app/settings │ app_settings │ application/json │
│ file://readme.txt │ readme_file │ text/plain │
└─────────────────────────┴───────────────────┴─────────────────────┘
服务命令
使用各种传输选项启动 MCP 服务:
# Interactive mode (prompts for transport selection)
php artisan mcp:serve
# STDIO transport
php artisan mcp:serve --transport=stdio
# HTTP transport with defaults
php artisan mcp:serve --transport=http
# HTTP transport with custom settings
php artisan mcp:serve --transport=http \
--host=0.0.0.0 \
--port=8091 \
--path-prefix=api/mcp
命令选项:
--transport:选择传输类型(stdio或http)--host:HTTP 传输的主机地址--port:HTTP 传输的端口号--path-prefix:HTTP 传输的 URL 路径前缀
动态更新与事件
Laravel MCP 与 Laravel 的事件系统集成,可向已连接的客户端提供实时更新:
列表变更事件
当可用元素发生变化时通知客户端:
use PhpMcp\Laravel\Events\{ToolsListChanged, ResourcesListChanged, PromptsListChanged};
// Notify clients that available tools have changed
ToolsListChanged::dispatch();
// Notify about resource list changes
ResourcesListChanged::dispatch();
// Notify about prompt list changes
PromptsListChanged::dispatch();
资源更新事件
当特定资源的内容发生变化时通知客户端:
use PhpMcp\Laravel\Events\ResourceUpdated;
// Update a file and notify subscribers
file_put_contents('/path/to/config.json', json_encode($newConfig));
ResourceUpdated::dispatch('file:///path/to/config.json');
// Update database content and notify
User::find(123)->update(['status' => 'active']);
ResourceUpdated::dispatch('user://123/profile');
高级功能
Schema 验证
服务会根据 PHP 类型提示和文档块自动为工具参数生成 JSON Schema。你可以使用 #[Schema] 属性增强验证能力:
use PhpMcp\Server\Attributes\Schema;
class PostService
{
public function createPost(
#[Schema(minLength: 5, maxLength: 200)]
string $title,
#[Schema(minLength: 10)]
string $content,
#[Schema(enum: ['draft', 'published', 'archived'])]
string $status = 'draft',
#[Schema(type: 'array', items: ['type' => 'string'])]
array $tags = []
): array {
return Post::create([
'title' => $title,
'content' => $content,
'status' => $status,
'tags' => $tags,
])->toArray();
}
}
Schema 功能:
- 根据 PHP 类型提示和文档块自动推断
- 使用
#[Schema]属性进行参数级验证 - 支持字符串约束、数值范围、枚举、数组和对象
- 适用于手动注册和基于属性的发现
如需查看完整的 Schema 文档和高级功能,请参阅 php-mcp/server Schema 文档。
补全提供程序
为资源模板变量和提示词参数提供自动补全建议,帮助用户发现可用选项:
use PhpMcp\Server\Contracts\CompletionProviderInterface;
use PhpMcp\Server\Contracts\SessionInterface;
use PhpMcp\Server\Attributes\CompletionProvider;
class UserIdCompletionProvider implements CompletionProviderInterface
{
public function getCompletions(string $currentValue, SessionInterface $session): array
{
return User::where('username', 'like', $currentValue . '%')
->limit(10)
->pluck('username')
->toArray();
}
}
class UserService
{
public function getUserData(
#[CompletionProvider(UserIdCompletionProvider::class)]
string $userId
): array {
return User::where('username', $userId)->first()->toArray();
}
}
补全功能:
- 为资源模板变量和提示词参数提供自动补全
- 与 Laravel 集成——可使用 Eloquent 模型、集合等
- 感知会话——补全结果可根据用户会话变化
- 根据用户输入进行实时筛选
如需查看补全提供程序的详细文档,请参阅 php-mcp/server Completion 文档。
依赖注入
MCP 处理程序会自动受益于 Laravel 的服务容器:
class OrderService
{
public function __construct(
private PaymentGateway $gateway,
private NotificationService $notifications,
private LoggerInterface $logger
) {}
#[McpTool(name: 'process_order')]
public function processOrder(array $orderData): array
{
$this->logger->info('Processing order', $orderData);
$payment = $this->gateway->charge($orderData['amount']);
if ($payment->successful()) {
$this->notifications->sendOrderConfirmation($orderData['email']);
return ['status' => 'success', 'order_id' => $payment->id];
}
throw new \Exception('Payment failed: ' . $payment->error);
}
}
异常处理
工具处理程序可以抛出异常,这些异常会自动转换为适当的 JSON-RPC 错误响应:
#[McpTool(name: 'get_user')]
public function getUser(int $userId): array
{
$user = User::find($userId);
if (!$user) {
throw new \InvalidArgumentException("User with ID {$userId} not found");
}
if (!$user->isActive()) {
throw new \RuntimeException("User account is deactivated");
}
return $user->toArray();
}
日志记录与调试
为 MCP 服务配置全面的日志记录:
// config/mcp.php
'logging' => [
'channel' => 'mcp', // Use dedicated log channel
'level' => 'debug', // Set appropriate log level
],
在 config/logging.php 中创建专用日志通道:
'channels' => [
'mcp' => [
'driver' => 'daily',
'path' => storage_path('logs/mcp.log'),
'level' => env('MCP_LOG_LEVEL', 'info'),
'days' => 14,
],
],
迁移指南
从 v3.0 升级到 v3.1
新增处理器类型:
Laravel MCP v3.1 新增了闭包处理器支持,不再局限于类方法和可调用类:
// v3.0 and earlier - Class-based handlers only
Mcp::tool([CalculatorService::class, 'add'])
->name('add_numbers');
Mcp::tool(EmailService::class) // Invokable class
->name('send_email');
// v3.1+ - Now supports closures
Mcp::tool(function(float $x, float $y): float {
return $x * $y;
})
->name('multiply')
->description('Multiply two numbers');
Mcp::resource('system://time', function(): string {
return now()->toISOString();
})
->name('current_time');
输入架构支持:
现在,工具可以为参数验证定义自定义 JSON 架构:
// v3.1+ - Custom input schema
Mcp::tool([CalculatorService::class, 'calculate'])
->inputSchema([
'type' => 'object',
'properties' => [
'operation' => [
'type' => 'string',
'enum' => ['add', 'subtract', 'multiply', 'divide']
],
'numbers' => [
'type' => 'array',
'items' => ['type' => 'number'],
'minItems' => 2
]
],
'required' => ['operation', 'numbers']
]);
增强的 Blueprint 方法:
Blueprint 现已提供新的流式方法:
->inputSchema(array $schema) // Define custom parameter schema
无破坏性变更:
所有现有的 v3.0 代码均可继续运行,无需修改。这些新功能都是增量增强。
从 v2.x 升级到 v3.x
配置变更:
// Old structure
'capabilities' => [
'tools' => ['enabled' => true, 'listChanged' => true],
'resources' => ['enabled' => true, 'subscribe' => true],
],
// New structure
'capabilities' => [
'tools' => true,
'toolsListChanged' => true,
'resources' => true,
'resourcesSubscribe' => true,
],
会话配置:
// Old: Basic configuration
'session' => [
'driver' => 'cache',
'ttl' => 3600,
],
// New: Enhanced configuration
'session' => [
'driver' => 'cache',
'ttl' => 3600,
'store' => config('cache.default'),
'lottery' => [2, 100],
],
传输更新:
- 默认传输方式从 sse 改为 streamable
- 新的 CSRF 排除模式:使用
mcp替代mcp/* - 增强会话管理,并支持自动垃圾回收
破坏性变更:
- 移除已弃用的方法,改用新的注册表 API
- 更新元素注册方式,使用新的架构格式
- 更改配置结构,以便更好地组织
示例与用例
电商集成
class EcommerceService
{
#[McpTool(name: 'get_product_info')]
public function getProductInfo(int $productId): array
{
return Product::with(['category', 'reviews'])
->findOrFail($productId)
->toArray();
}
#[McpTool(name: 'search_products')]
public function searchProducts(
string $query,
?string $category = null,
int $limit = 10
): array {
return Product::search($query)
->when($category, fn($q) => $q->where('category', $category))
->limit($limit)
->get()
->toArray();
}
#[McpResource(uri: 'config://store/settings', mimeType: 'application/json')]
public function getStoreSettings(): array
{
return [
'currency' => config('store.currency'),
'tax_rate' => config('store.tax_rate'),
'shipping_zones' => config('store.shipping_zones'),
];
}
}
内容管理
class ContentService
{
#[McpResourceTemplate(uriTemplate: 'post://{slug}', mimeType: 'text/markdown')]
public function getPostContent(string $slug): string
{
return Post::where('slug', $slug)
->firstOrFail()
->markdown_content;
}
#[McpPrompt(name: 'content_summary')]
public function generateContentSummary(string $postSlug, int $maxWords = 50): array
{
$post = Post::where('slug', $postSlug)->firstOrFail();
return [
[
'role' => 'user',
'content' => "Summarize this blog post in {$maxWords} words or less:\n\n{$post->content}"
]
];
}
}
API 集成
class ApiService
{
#[McpTool(name: 'send_notification')]
public function sendNotification(
#[Schema(format: 'email')]
string $email,
string $subject,
string $message
): array {
$response = Http::post('https://api.emailservice.com/send', [
'to' => $email,
'subject' => $subject,
'body' => $message,
]);
if ($response->failed()) {
throw new \RuntimeException('Failed to send notification: ' . $response->body());
}
return $response->json();
}
}
参与贡献
欢迎贡献!请参阅 CONTRIBUTING.md 了解相关指南。
开发环境设置
# Clone the repository
git clone https://github.com/php-mcp/laravel.git
cd laravel
# Install dependencies
composer install
# Run tests
./vendor/bin/pest
# Check code style
./vendor/bin/pint
许可证
MIT 许可证(MIT)。详情请参阅 LICENSE。
致谢
- 基于 Model Context Protocol 规范构建
- 依托
php-mcp/server提供核心 MCP 功能 - 利用 Laravel 框架功能,实现无缝集成
- 使用 ReactPHP 实现高性能异步操作
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。