Skip to content

基于 PHP 实现的 MCP (Model Control Protocol) 服务器框架,支持Stdio、Sse 两种 transport。

License

Notifications You must be signed in to change notification settings

he426100/mcp-sdk-php

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

中文 | English

安装

您可以通过 composer 安装此包:

composer require he426100/mcp-sdk-php

要求

  • PHP 8.1 或更高版本
  • ext-curl
  • ext-pcntl (可选,在 CLI 环境中推荐使用)
  • ext-swowext-swoole (用于 sse 和 websocket 传输)

基本用法

创建 MCP 服务器

以下是创建提供 prompts 的 MCP 服务器的完整示例:

<?php

// 一个带有测试用 prompts 列表的基本示例服务器

require 'vendor/autoload.php';

use Mcp\Server\Server;
use Mcp\Server\ServerRunner;
use Mcp\Types\Prompt;
use Mcp\Types\PromptArgument;
use Mcp\Types\PromptMessage;
use Mcp\Types\ListPromptsResult;
use Mcp\Types\TextContent;
use Mcp\Types\Role;
use Mcp\Types\GetPromptResult;
use Mcp\Types\GetPromptRequestParams;

// 创建服务器实例
$server = new Server('example-server');

// 注册 prompt 处理器
$server->registerHandler('prompts/list', function($params) {
    $prompt = new Prompt(
        name: 'example-prompt',
        description: 'An example prompt template',
        arguments: [
            new PromptArgument(
                name: 'arg1',
                description: 'Example argument',
                required: true
            )
        ]
    );
    return new ListPromptsResult([$prompt]);
});

$server->registerHandler('prompts/get', function(GetPromptRequestParams $params) {

    $name = $params->name;
    $arguments = $params->arguments;

    if ($name !== 'example-prompt') {
        throw new \InvalidArgumentException("Unknown prompt: {$name}");
    }

    // 安全获取参数值
    $argValue = $arguments ? $arguments->arg1 : 'none';

    $prompt = new Prompt(
        name: 'example-prompt',
        description: 'An example prompt template',
        arguments: [
            new PromptArgument(
                name: 'arg1',
                description: 'Example argument',
                required: true
            )
        ]
    );

    return new GetPromptResult(
        messages: [
            new PromptMessage(
                role: Role::USER,
                content: new TextContent(
                    text: "Example prompt text with argument: $argValue"
                )
            )
        ],
        description: 'Example prompt'
    );
});

// 创建初始化选项并运行服务器
$initOptions = $server->createInitializationOptions();
$runner = new ServerRunner();
$runner->run($server, $initOptions);

将此代码保存为 example_server.php

使用注解

<?php

require 'vendor/autoload.php';

use Mcp\Server\Server;
use Mcp\Server\ServerRunner;
use Mcp\Annotation\Prompt;
use Mcp\Tool\McpHandlerRegistrar;

$server = new Server('example-server');

// 使用注解定义处理 prompt 的类
class ExamplePrompts 
{
    #[Prompt(
        name: 'example-prompt',
        description: 'An example prompt template',
        arguments: [
            'arg1' => [
                'description' => 'Example argument',
                'required' => true
            ]
        ]
    )]
    public function generatePrompt(string $arg1): string
    {
        return "Example prompt text with argument: $arg1";
    }
}

// 注册注解处理器
(new McpHandlerRegistrar)->registerHandler($server, new ExamplePrompts());

// 创建初始化选项并运行服务器
$initOptions = $server->createInitializationOptions();
$runner = new ServerRunner();
$runner->run($server, $initOptions);

示例项目

文档

有关 Model Context Protocol 的详细信息,请访问官方文档

致谢

这个 PHP SDK 由以下人员开发:

附加调试和重构由 Josh Abbott 使用 OpenAI ChatGPT o1 专业模式完成。

基于 Model Context Protocol 的原始 Python SDK

许可证

MIT 许可证 (MIT)。更多信息请查看许可证文件

About

基于 PHP 实现的 MCP (Model Control Protocol) 服务器框架,支持Stdio、Sse 两种 transport。

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • PHP 100.0%