选项
首页首页 Skill MCP 工具 php-mcp-server-generator

php-mcp-server-generator

github/awesome-copilot github/awesome-copilot

使用官方 PHP SDK 生成一个包含工具、资源、提示和测试的完整 PHP 模型上下文协议(MCP)服务器项目

...展开全部
44
更新时间 2026-06-29

关于php-mcp-server-generator

php-mcp-server-generator 是一款功能强大的工具,旨在简化 PHP 模型上下文协议(MCP)服务器项目的创建流程。它解决了开发人员在搭建新服务器时常面临的挑战,例如确保与最新 PHP 版本的兼容性、管理依赖项以及正确构建项目结构。 通过利用官方 PHP SDK,该技能可自动生成一个完整且可投入生产使用的服务器项目,让开发者能够专注于构建功能,而非编写冗余的模板代码。

常见问题

项目有哪些要求?

该项目需要指定项目名称、服务器描述、传输类型(stdio、http 或两者兼有)、需包含的工具、是否包含资源和提示,以及 PHP 8.2 或更高版本。

如何启动服务器?

您可以在终端中运行“php server.php”命令来启动服务器。

是否包含测试框架?

是的,该项目包含用于测试的 PHPUnit,您可以通过 'vendor/bin/phpunit' 运行测试。

我可以自定义项目中包含的工具吗?

可以,在生成项目时,您可以指定要包含哪些工具。

此技能需要哪个 PHP 版本?

该技能要求 PHP 8.2 或更高版本。

在 GitHub 上查看

PHP MCP Server Generator

You are a PHP MCP server generator. Create a complete, production-ready PHP MCP server project using the official PHP SDK.

Project Requirements

Ask the user for:

  1. Project name (e.g., "my-mcp-server")
  2. Server description (e.g., "A file management MCP server")
  3. Transport type (stdio, http, or both)
  4. Tools to include (e.g., "file read", "file write", "list directory")
  5. Whether to include resources and prompts
  6. PHP version (8.2+ required)

Project Structure

{project-name}/├── composer.json├── .gitignore├── README.md├── server.php├── src/│   ├── Tools/│   │   └── {ToolClass}.php│   ├── Resources/│   │   └── {ResourceClass}.php│   ├── Prompts/│   │   └── {PromptClass}.php│   └── Providers/│       └── {CompletionProvider}.php└── tests/    └── ToolsTest.php

File Templates

composer.json

{    "name": "your-org/{project-name}",    "description": "{Server description}",    "type": "project",    "require": {        "php": "^8.2",        "mcp/sdk": "^0.1"    },    "require-dev": {        "phpunit/phpunit": "^10.0",        "symfony/cache": "^6.4"    },    "autoload": {        "psr-4": {            "App\\": "src/"        }    },    "autoload-dev": {        "psr-4": {            "Tests\\": "tests/"        }    },    "config": {        "optimize-autoloader": true,        "preferred-install": "dist",        "sort-packages": true    }}

.gitignore

/vendor/cachecomposer.lock.phpunit.cachephpstan.neon

README.md

# {Project Name}{Server description}## Requirements- PHP 8.2 or higher- Composer## Installation```bashcomposer install

Usage

Start Server (Stdio)

php server.php

Configure in Claude Desktop

{  "mcpServers": {    "{project-name}": {      "command": "php",      "args": ["/absolute/path/to/server.php"]    }  }}

Testing

vendor/bin/phpunit

Tools

  • {tool_name}: {Tool description}

Development

Test with MCP Inspector:

npx @modelcontextprotocol/inspector php server.php
### server.php```php#!/usr/bin/env php<?phpdeclare(strict_types=1);require_once __DIR__ . '/vendor/autoload.php';use Mcp\Server;use Mcp\Server\Transport\StdioTransport;use Symfony\Component\Cache\Adapter\FilesystemAdapter;use Symfony\Component\Cache\Psr16Cache;// Setup cache for discovery$cache = new Psr16Cache(new FilesystemAdapter('mcp-discovery', 3600, __DIR__ . '/cache'));// Build server with discovery$server = Server::builder()    ->setServerInfo('{Project Name}', '1.0.0')    ->setDiscovery(        basePath: __DIR__,        scanDirs: ['src'],        excludeDirs: ['vendor', 'tests', 'cache'],        cache: $cache    )    ->build();// Run with stdio transport$transport = new StdioTransport();$server->run($transport);

src/Tools/ExampleTool.php

<?phpdeclare(strict_types=1);namespace App\Tools;use Mcp\Capability\Attribute\McpTool;use Mcp\Capability\Attribute\Schema;class ExampleTool{    /**     * Performs a greeting with the provided name.     *      * @param string $name The name to greet     * @return string A greeting message     */    #[McpTool]    public function greet(string $name): string    {        return "Hello, {$name}!";    }        /**     * Performs arithmetic calculations.     */    #[McpTool(name: 'calculate')]    public function performCalculation(        float $a,        float $b,        #[Schema(pattern: '^(add|subtract|multiply|divide)$')]        string $operation    ): float {        return match($operation) {            'add' => $a + $b,            'subtract' => $a - $b,            'multiply' => $a * $b,            'divide' => $b != 0 ? $a / $b :                 throw new \InvalidArgumentException('Division by zero'),            default => throw new \InvalidArgumentException('Invalid operation')        };    }}

src/Resources/ConfigResource.php

<?phpdeclare(strict_types=1);namespace App\Resources;use Mcp\Capability\Attribute\McpResource;class ConfigResource{    /**     * Provides application configuration.     */    #[McpResource(        uri: 'config://app/settings',        name: 'app_config',        mimeType: 'application/json'    )]    public function getConfiguration(): array    {        return [            'version' => '1.0.0',            'environment' => 'production',            'features' => [                'logging' => true,                'caching' => true            ]        ];    }}

src/Resources/DataProvider.php

<?phpdeclare(strict_types=1);namespace App\Resources;use Mcp\Capability\Attribute\McpResourceTemplate;class DataProvider{    /**     * Provides data by category and ID.     */    #[McpResourceTemplate(        uriTemplate: 'data://{category}/{id}',        name: 'data_resource',        mimeType: 'application/json'    )]    public function getData(string $category, string $id): array    {        // Example data retrieval        return [            'category' => $category,            'id' => $id,            'data' => "Sample data for {$category}/{$id}"        ];    }}

src/Prompts/PromptGenerator.php

<?phpdeclare(strict_types=1);namespace App\Prompts;use Mcp\Capability\Attribute\McpPrompt;use Mcp\Capability\Attribute\CompletionProvider;class PromptGenerator{    /**     * Generates a code review prompt.     */    #[McpPrompt(name: 'code_review')]    public function reviewCode(        #[CompletionProvider(values: ['php', 'javascript', 'python', 'go', 'rust'])]        string $language,        string $code,        #[CompletionProvider(values: ['performance', 'security', 'style', 'general'])]        string $focus = 'general'    ): array {        return [            [                'role' => 'assistant',                'content' => 'You are an expert code reviewer specializing in best practices and optimization.'            ],            [                'role' => 'user',                'content' => "Review this {$language} code with focus on {$focus}:```{$language}{$code}```"            ]        ];    }        /**     * Generates documentation prompt.     */    #[McpPrompt]    public function generateDocs(string $code, string $style = 'detailed'): array    {        return [            [                'role' => 'user',                'content' => "Generate {$style} documentation for:```{$code}```"            ]        ];    }}

tests/ToolsTest.php

<?phpdeclare(strict_types=1);namespace Tests;use PHPUnit\Framework\TestCase;use App\Tools\ExampleTool;class ToolsTest extends TestCase{    private ExampleTool $tool;        protected function setUp(): void    {        $this->tool = new ExampleTool();    }        public function testGreet(): void    {        $result = $this->tool->greet('World');        $this->assertSame('Hello, World!', $result);    }        public function testCalculateAdd(): void    {        $result = $this->tool->performCalculation(5, 3, 'add');        $this->assertSame(8.0, $result);    }        public function testCalculateDivide(): void    {        $result = $this->tool->performCalculation(10, 2, 'divide');        $this->assertSame(5.0, $result);    }        public function testCalculateDivideByZero(): void    {        $this->expectException(\InvalidArgumentException::class);        $this->expectExceptionMessage('Division by zero');                $this->tool->performCalculation(10, 0, 'divide');    }        public function testCalculateInvalidOperation(): void    {        $this->expectException(\InvalidArgumentException::class);        $this->expectExceptionMessage('Invalid operation');                $this->tool->performCalculation(5, 3, 'modulo');    }}

phpunit.xml.dist

<?xml version="1.0" encoding="UTF-8"?><phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"         bootstrap="vendor/autoload.php"         colors="true">    <testsuites>        <testsuite name="Test Suite">            <directory>tests</directory>        </testsuite>    </testsuites>    <coverage>        <include>            <directory suffix=".php">src</directory>        </include>    </coverage></phpunit>

Implementation Guidelines

  1. Use PHP Attributes: Leverage #[McpTool], #[McpResource], #[McpPrompt] for clean code
  2. Type Declarations: Use strict types (declare(strict_types=1);) in all files
  3. PSR-12 Coding Standard: Follow PHP-FIG standards
  4. Schema Validation: Use #[Schema] attributes for parameter validation
  5. Error Handling: Throw specific exceptions with clear messages
  6. Testing: Write PHPUnit tests for all tools
  7. Documentation: Use PHPDoc blocks for all methods
  8. Caching: Always use PSR-16 cache for discovery in production

Tool Patterns

Simple Tool

#[McpTool]public function simpleAction(string $input): string{    return "Processed: {$input}";}

Tool with Validation

#[McpTool]public function validateEmail(    #[Schema(format: 'email')]    string $email): bool {    return filter_var($email, FILTER_VALIDATE_EMAIL) !== false;}

Tool with Enum

enum Status: string {    case ACTIVE = 'active';    case INACTIVE = 'inactive';}#[McpTool]public function setStatus(string $id, Status $status): array{    return ['id' => $id, 'status' => $status->value];}

Resource Patterns

Static Resource

#[McpResource(uri: 'config://settings', mimeType: 'application/json')]public function getSettings(): array{    return ['key' => 'value'];}

Dynamic Resource

#[McpResourceTemplate(uriTemplate: 'user://{id}')]public function getUser(string $id): array{    return $this->users[$id] ?? throw new \RuntimeException('User not found');}

Running the Server

# Install dependenciescomposer install# Run testsvendor/bin/phpunit# Start serverphp server.php# Test with inspectornpx @modelcontextprotocol/inspector php server.php

Claude Desktop Configuration

{  "mcpServers": {    "{project-name}": {      "command": "php",      "args": ["/absolute/path/to/server.php"]    }  }}

Now generate the complete project based on user requirements!

所有文件

1 个文件

安装 php-mcp-server-generator

下载技能文件并将其解压到 .claude/skills/ 目录下。

下载ZIP

克隆仓库并复制技能文件到您的项目中。

git clone https://github.com/github/awesome-copilot/blob/main/skills/php-mcp-server-generator/SKILL.md # Copy SKILL.md to your .claude/skills/ directory

复制 复制
快速设置: 将技能文件夹复制到 .claude/skills/ 目录下,Claude 会自动检测并使用该技能

相关技能

office-mcp
更新时间 2026-07-13
composio
更新时间 2026-06-29
connect-mcp-server
更新时间 2026-06-29
mcpgraph
更新时间 2026-06-29
OR