php-mcp-server-generator
github/awesome-copilot
Создать полный проект сервера на основе протокола PHP Model Context Protocol с инструментами, ресурсами, подсказками и тестами с использованием официального SDK для PHP
...Расширить всеО «php-mcp-server-generator»
php-mcp-server-generator — это мощный инструмент, предназначенный для оптимизации создания серверных проектов на основе протокола PHP Model Context Protocol (MCP). Он решает типичные проблемы, с которыми сталкиваются разработчики при настройке нового сервера, такие как обеспечение совместимости с последними версиями PHP, управление зависимостями и правильная структуризация проекта. Благодаря использованию официального SDK для PHP этот навык автоматизирует генерацию полноценного, готового к производственному использованию серверного проекта, позволяя разработчикам сосредоточиться на реализации функциональности, а не на написании шаблонного кода.
Часто задаваемые вопросы
Каковы требования к проекту?
Для проекта требуется название проекта, описание сервера, тип транспорта (stdio, http или оба), инструменты для включения, указание на необходимость включения ресурсов и подсказок, а также версия PHP 8.2 или выше.
Как запустить сервер?
Вы можете запустить сервер, выполнив в терминале команду «php server.php».
Включена ли в проект среда тестирования?
Да, в проект включен PHPUnit для тестирования, и вы можете запускать тесты с помощью команды «vendor/bin/phpunit».
Можно ли настроить инструменты, включённые в проект?
Да, при генерации проекта вы можете указать, какие инструменты следует включить.
Какая версия PHP требуется для этого навыка?
Для этого навыка требуется PHP версии 8.2 или выше.
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:
- Project name (e.g., "my-mcp-server")
- Server description (e.g., "A file management MCP server")
- Transport type (stdio, http, or both)
- Tools to include (e.g., "file read", "file write", "list directory")
- Whether to include resources and prompts
- 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.phpFile 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.neonREADME.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
- Use PHP Attributes: Leverage
#[McpTool],#[McpResource],#[McpPrompt]for clean code - Type Declarations: Use strict types (
declare(strict_types=1);) in all files - PSR-12 Coding Standard: Follow PHP-FIG standards
- Schema Validation: Use
#[Schema]attributes for parameter validation - Error Handling: Throw specific exceptions with clear messages
- Testing: Write PHPUnit tests for all tools
- Documentation: Use PHPDoc blocks for all methods
- 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!
Установить 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
Копировать





Дом
