--- name: laravel-mcp description: Laravel v12 - The PHP Framework For Web Artisans (project, gitignored) --- # Laravel MCP Skill Comprehensive assistance with Laravel MCP (Model Context Protocol) development. Laravel MCP provides a simple and elegant way for AI clients to interact with your Laravel application through the Model Context Protocol, enabling you to define servers, tools, resources, and prompts for AI-powered interactions. ## When to Use This Skill This skill should be triggered when: - Building MCP servers for Laravel applications - Creating AI tools that perform actions in Laravel - Defining reusable prompts for AI interactions - Exposing Laravel resources (data/content) to AI clients - Implementing OAuth 2.1 or Sanctum authentication for MCP - Registering and configuring MCP routes (web or local) - Testing MCP servers and tools - Working with Laravel JSON Schema builder for tool inputs - Implementing streaming responses or progress notifications - Building AI-powered Laravel features using MCP ## Key Concepts ### Core Components **MCP Server**: The central communication point that exposes MCP capabilities. Each server has: - `name`: Server identifier - `version`: Server version - `instructions`: Description of the server's purpose - `tools`: Array of tool classes - `resources`: Array of resource classes - `prompts`: Array of prompt classes **Tools**: Enable AI clients to perform actions. Tools can: - Define input schemas using Laravel's JSON Schema builder - Validate arguments with Laravel validation rules - Support dependency injection - Return single or multiple responses - Stream responses using generators - Use annotations like `#[IsReadOnly]` and `#[IsIdempotent]` **Prompts**: Reusable prompt templates that provide a standardized way to structure common queries with argument definitions and validation. **Resources**: Enable your server to expose data and content that AI clients can read, including text and blob responses with customizable MIME types and URIs. ## Quick Reference ### 1. Basic MCP Server Definition ```php get('location'); // Get weather... return Response::text('The weather is...'); } public function schema(JsonSchema $schema): array { return [ 'location' => $schema->string() ->description('The location to get the weather for.') ->required(), ]; } } ``` ### 3. Tool with Validation ```php public function handle(Request $request): Response { $validated = $request->validate([ 'location' => 'required|string|max:100', 'units' => 'in:celsius,fahrenheit', ], [ 'location.required' => 'You must specify a location.', 'units.in' => 'You must specify either "celsius" or "fahrenheit".', ]); // Fetch weather data... } ``` ### 4. Tool with Dependency Injection ```php get('location'); $forecast = $weather->getForecastFor($location); // ... } } ``` ### 5. Tool with Annotations ```php array('locations'); foreach ($locations as $index => $location) { yield Response::notification('processing/progress', [ 'current' => $index + 1, 'total' => count($locations), 'location' => $location, ]); yield Response::text($this->forecastFor($location)); } } } ``` ### 7. Prompt Definition ```php string('tone'); return [ Response::text("You are a weather assistant. Provide a {$tone} tone.")->asAssistant(), Response::text("What is the current weather like in New York City?"), ]; } } ``` ### 8. Resource Definition ```php middleware(['throttle:mcp']); ``` ### 10. Server Registration (Local) ```php use App\Mcp\Servers\WeatherServer; use Laravel\Mcp\Facades\Mcp; Mcp::local('weather', WeatherServer::class); ``` ### 11. OAuth 2.1 Authentication Setup ```php use App\Mcp\Servers\WeatherExample; use Laravel\Mcp\Facades\Mcp; Mcp::oauthRoutes(); Mcp::web('/mcp/weather', WeatherExample::class) ->middleware('auth:api'); ``` ### 12. Sanctum Authentication ```php use App\Mcp\Servers\WeatherExample; use Laravel\Mcp\Facades\Mcp; Mcp::web('/mcp/demo', WeatherExample::class) ->middleware('auth:sanctum'); ``` ## Reference Files This skill includes comprehensive documentation in `references/`: - **other.md** - Complete Laravel MCP documentation from Laravel 12.x official docs, including: - Installation and setup instructions - Server, tool, resource, and prompt creation - Input schema definition using JSON Schema builder - Validation and dependency injection - Streaming responses and progress notifications - Authentication (OAuth 2.1 and Sanctum) - Registration (web and local routes) - Testing and inspection Use `view` to read specific reference files when detailed information is needed. ## Working with This Skill ### For Beginners Start by understanding the core concepts: 1. **Installation**: Install Laravel MCP via `composer require laravel/mcp` 2. **Setup**: Run `php artisan vendor:publish --tag=ai-routes` to create `routes/ai.php` 3. **First Server**: Generate your first server with `php artisan make:mcp-server` 4. **Register**: Add your server to `routes/ai.php` using `Mcp::web()` or `Mcp::local()` Begin with simple read-only tools using the `#[IsReadOnly]` annotation before moving to tools that modify data. ### For Intermediate Users Focus on building robust tools: - Use JSON Schema builder for precise input validation - Leverage Laravel's validation rules for complex constraints - Implement dependency injection for clean, testable code - Use prompts to create reusable AI interaction patterns - Expose resources to provide context to AI clients ### For Advanced Users Implement production-ready features: - Add OAuth 2.1 or Sanctum authentication to secure your MCP servers - Use streaming responses for long-running operations with progress notifications - Apply middleware for rate limiting and custom authentication - Create idempotent tools using `#[IsIdempotent]` annotation - Build complex multi-tool workflows - Use the MCP Inspector for debugging and testing ### Navigation Tips - **Quick implementation**: Use the Quick Reference section above for common patterns - **Detailed learning**: Read `references/other.md` for comprehensive documentation - **Examples**: All code examples include proper namespaces and imports - **Testing**: Refer to documentation for MCP Inspector usage and unit testing ## Common Patterns ### Creating a New MCP Server ```bash # Generate server class php artisan make:mcp-server WeatherServer # Edit app/Mcp/Servers/WeatherServer.php # Add tools, resources, and prompts # Register in routes/ai.php Mcp::web('/mcp/weather', WeatherServer::class); ``` ### Input Schema Patterns ```php // Simple required string 'location' => $schema->string()->required() // Optional with default 'units' => $schema->string()->default('celsius') // Number with constraints 'temperature' => $schema->number()->minimum(0)->maximum(100) // Array of items 'cities' => $schema->array()->items($schema->string()) // Object with properties 'forecast' => $schema->object()->properties([ 'temperature' => $schema->number(), 'humidity' => $schema->number(), ]) ``` ### Response Patterns ```php // Text response return Response::text('The weather is sunny'); // Multiple responses return [ Response::text('First message'), Response::text('Second message'), ]; // Notification (streaming) yield Response::notification('processing/progress', ['status' => 'processing']); ``` ## Resources ### Installation ```bash composer require laravel/mcp php artisan vendor:publish --tag=ai-routes ``` ### Official Documentation - **Laravel MCP Docs**: https://laravel.com/docs/12.x/mcp - **Model Context Protocol Spec**: https://modelcontextprotocol.io/ ### Related Laravel Features - **JSON Schema Builder**: For defining tool input schemas - **Validation**: For validating tool arguments - **Service Container**: For dependency injection in tools and resources - **OAuth/Sanctum**: For authentication ## Notes - This skill was generated from official Laravel 12.x MCP documentation - All code examples use proper PHP 8+ syntax with typed properties - Examples demonstrate Laravel's elegant API design - Tools support both synchronous and streaming responses - Authentication is optional but recommended for production use - Both web (HTTP) and local (CLI) server registration are supported ## Tips & Best Practices 1. **Start Simple**: Begin with read-only tools marked with `#[IsReadOnly]` 2. **Validate Input**: Always define schemas and use validation for user input 3. **Use DI**: Leverage dependency injection for repositories and services 4. **Stream Progress**: For long operations, use generators to stream progress 5. **Secure Your Servers**: Add authentication middleware for production 6. **Test Thoroughly**: Use the MCP Inspector and unit tests to validate functionality 7. **Document Well**: Write clear descriptions for servers, tools, prompts, and resources 8. **Follow Conventions**: Use Laravel's service container patterns and naming conventions