Option
HeimHeim Skill MCP-Tools php-mcp-server-generator

php-mcp-server-generator

github/awesome-copilot github/awesome-copilot

Erstellen Sie mithilfe des offiziellen PHP-SDK ein vollständiges PHP-Model-Context-Protocol-Serverprojekt mit Tools, Ressourcen, Eingabeaufforderungen und Tests.

...Alle erweitern
44
Zeit aktualisiert 29. Juni 2026

Über „php-mcp-server-generator“

Das „php-mcp-server-generator“ ist ein leistungsstarkes Tool, das entwickelt wurde, um die Erstellung von PHP Model Context Protocol (MCP)-Serverprojekten zu optimieren. Es löst die typischen Herausforderungen, mit denen Entwickler beim Einrichten eines neuen Servers konfrontiert sind, wie beispielsweise die Gewährleistung der Kompatibilität mit den neuesten PHP-Versionen, die Verwaltung von Abhängigkeiten und die korrekte Strukturierung des Projekts. Durch die Nutzung des offiziellen PHP-SDK automatisiert dieses Skill die Erstellung eines vollständigen, produktionsreifen Serverprojekts, sodass sich Entwickler auf die Entwicklung von Funktionen statt auf Standardcode konzentrieren können.

FAQ

Was sind die Projektanforderungen?

Das Projekt erfordert einen Projektnamen, eine Serverbeschreibung, den Transporttyp (stdio, http oder beides), die einzubindenden Tools, die Angabe, ob Ressourcen und Eingabeaufforderungen enthalten sein sollen, sowie PHP-Version 8.2 oder höher.

Wie starte ich den Server?

Sie können den Server starten, indem Sie den Befehl „php server.php“ in Ihrem Terminal ausführen.

Ist ein Test-Framework enthalten?

Ja, das Projekt enthält PHPUnit zum Testen, und Sie können Tests mit „vendor/bin/phpunit“ ausführen.

Kann ich die im Projekt enthaltenen Tools anpassen?

Ja, du kannst bei der Projektgenerierung festlegen, welche Tools enthalten sein sollen.

Welche PHP-Version wird für dieses Skill benötigt?

Die Skill erfordert PHP-Version 8.2 oder höher.

Auf GitHub ansehen

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!

Alle Dateien

1 Dateien

php-mcp-server-generator installieren

Laden Sie die Skill-Dateien herunter und entpacken Sie sie in Ihr Verzeichnis „.claude/skills/“.

ZIP herunterladen

Klonen Sie das Repository und kopieren Sie die Skill-Dateien in Ihr Projekt.

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

Kopieren Kopieren
Schnelle Einrichtung: Kopiere den Skill-Ordner nach .claude/skills/. Claude erkennt den Skill automatisch und nutzt ihn.

Ähnliche Skills

office-mcp
Zeit aktualisiert 13. Juli 2026
composio
Zeit aktualisiert 29. Juni 2026
connect-mcp-server
Zeit aktualisiert 29. Juni 2026
mcpgraph
Zeit aktualisiert 29. Juni 2026
OR