Use this skill for Laravel MCP development only. Trigger when creating or editing MCP tools, resources, prompts, or servers in Laravel projects. Covers: artisan make:mcp-* generators, mcp:inspector, routes/ai.php, Tool/Resource/Prompt classes, schema validation, shouldRegister(), OAuth setup, URI te
Install
mkdir -p .claude/skills/mcp-development && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/15879" && unzip -o skill.zip -d .claude/skills/mcp-development && rm skill.zipInstalls to .claude/skills/mcp-development
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Use this skill for Laravel MCP development only. Trigger when creating or editing MCP tools, resources, prompts, or servers in Laravel projects. Covers: artisan make:mcp-* generators, mcp:inspector, routes/ai.php, Tool/Resource/Prompt classes, schema validation, shouldRegister(), OAuth setup, URI templates, read-only attributes, and MCP debugging. Do not use for non-Laravel MCP projects or generic AI features without MCP.About this skill
MCP Development
Documentation First
CRITICAL: Always use search-docs BEFORE writing MCP code. The documentation is version-specific, comprehensive, and always up-to-date.
# Example searches
search-docs(['mcp tools', 'mcp resources', 'mcp validation'])
Quick Reference
Artisan Commands
Create MCP Primitives
php artisan make:mcp-tool ToolName
php artisan make:mcp-resource ResourceName
php artisan make:mcp-prompt PromptName
php artisan make:mcp-server ServerName
Basic Tool Implementation
<!-- Tool Example -->use Illuminate\Contracts\JsonSchema\JsonSchema;
use Laravel\Mcp\Request;
use Laravel\Mcp\Response;
use Laravel\Mcp\Server\Tool;
class MyTool extends Tool
{
protected string $description = 'Tool description for LLM';
public function schema(JsonSchema $schema): array
{
return [
'param' => $schema->string()->required(),
];
}
public function handle(Request $request): Response
{
return Response::text($request->get('param'));
}
}
Basic Resource Implementation
<!-- Resource Example -->use Laravel\Mcp\Response;
use Laravel\Mcp\Server\Resource;
class MyResource extends Resource
{
protected string $description = 'Resource description';
protected string $uri = 'file://path/to/resource';
protected string $mimeType = 'text/markdown';
public function handle(): Response
{
return Response::text($content);
}
}
Response Methods
<!-- Available Responses -->Response::text('Text content');
Response::error('Error message');
Response::structured(['key' => 'value']);
Testing MCP Primitives
Test tools, resources, and prompts directly on their server:
<!-- Test MCP Primitives -->// Test a tool
$response = MyServer::tool(MyTool::class, ['param' => 'value']);
$response->assertOk()->assertSee('Expected text');
// Test as authenticated user
$response = MyServer::actingAs($user)->tool(MyTool::class, [...]);
// Available assertions
$response->assertOk();
$response->assertSee('text');
$response->assertHasErrors();
$response->assertHasNoErrors();
$response->assertName('tool-name');
$response->assertSentNotification('event/type', ['data' => 'value']);
MCP Inspector
Test interactively using the inspector:
<!--Launch MCP Inspector-->php artisan mcp:inspector mcp/my-server # Web server
php artisan mcp:inspector my-server # Local server
Available Features
The following features exist—use search-docs for implementation details:
- Tools:
schema(), validation, annotations (#[IsReadOnly],#[IsDestructive], etc.) - Resources: URI templates (
HasUriTemplate), Dynamic resources - Prompts: Arguments, multi-message responses
- All primitives: Dependency injection,
shouldRegister(), validation - Responses: Text, error, structured, streaming, metadata
- Server registration: Web routes, local routes, OAuth
Critical Imports
<!-- Correct Imports -->use Laravel\Mcp\Request; // NOT Laravel\Mcp\Server\Request
use Laravel\Mcp\Response; // NOT Laravel\Mcp\Server\Response
use Laravel\Mcp\Server\Tool;
use Laravel\Mcp\Server\Resource;
use Laravel\Mcp\Server\Prompt;
use Illuminate\Contracts\JsonSchema\JsonSchema;
Common Pitfalls
- Not using
search-docsbefore implementation - Wrong imports:
Laravel\Mcp\Server\Request(wrong) vsLaravel\Mcp\Request(correct) - Forgetting
schema()method for tools with parameters - Missing required properties:
$description,$uri,$mimeType - Wrong response pattern:
new Response()instead ofResponse::text() - Running
mcp:startcommand locally (hangs waiting for stdin)