Skip to main content

php-mcp-server-generator

Generate a complete PHP Model Context Protocol server project with tools, resources, prompts, and tests using the official PHP SDK

설치로 이동

소스 정보

저장소
github/awesome-copilot
최근 소스 활동
2026년 2월 24일 03:39
감지된 SKILL.md 언어
영어
스타
39,255
포크
4,987

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
php-mcp-server-generator
description
Generate a complete PHP Model Context Protocol server project with tools, resources, prompts, and tests using the official PHP SDK
# 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 ```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 /cache composer.lock .phpunit.cache phpstan.neon ``` ### README.md ```markdown # {Project Name} {Server description} ## Requirements - PHP 8.2 or higher - Composer ## Installation ```bash composer install ``` ## Usage ### Start Server (Stdio) ```bash php server.php ``` ### Configure in Claude Desktop ```json { "mcpServers": { "{project-name}": { "command": "php", "args": ["/absolute/path/to/server.php"] } } } ``` ## Testing ```bash vendor/bin/phpunit ``` ## Tools - **{tool_name}**: {Tool description} ## Development Test with MCP Inspector: ```bash npx @modelcontextprotocol/inspector php server.php ``` ``` ### server.php ```php #!/usr/bin/env php <?php declare(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 ```php <?php declare(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 ```php <?php declare(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 ```php <?php declare(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 ```php <?php declare(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}:\n\n```{$language}\n{$code}\n```" ] ]; } /** * Generates documentation prompt. */ #[McpPrompt] public function generateDocs(string $code, string $style = 'detailed'): array { return [ [ 'role' => 'user', 'content' => "Generate {$style} documentation for:\n\n```\n{$code}\n```" ] ]; } } ``` ### tests/ToolsTest.php ```php <?php declare(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 <?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 ```php #[McpTool] public function simpleAction(string $input): string { return "Processed: {$input}"; } ``` ### Tool with Validation ```php #[McpTool] public function validateEmail( #[Schema(format: 'email')] string $email ): bool { return filter_var($email, FILTER_VALIDATE_EMAIL) !== false; } ``` ### Tool with Enum ```php enum Status: string {
GitHub에서 보기
이 SKILL.md는 매우 커서 SkillsMP가 여기에는 첫 섹션만 미리 보여줍니다. GitHub에서 보기