php使用Laravel创建MCP服务

环境要求

  • 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 方式才可以

  • SSEStreamable HTTP方式调用

    {
      "mcpServers": {
        "laravel_adder": {
          "url": "http://127.0.0.1:8000/mcp"
        }
      }
    }
    

参考文档

本文只做最简单的示例,其他更多功能请参考官方文档

php-mcp/laravel: An SDK building Laravel MCP servers

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值