Major additions: - Storage abstraction layer with filesystem and in-memory implementations - Gitea API integration with MCP tools for repository management - Console dialog mode with interactive command execution - WireGuard VPN DNS fix implementation and documentation - HTTP client streaming response support - Router generic result type - Parameter type validator for framework core Framework enhancements: - Console command registry improvements - Console dialog components - Method signature analyzer updates - Route mapper refinements - MCP server and tool mapper updates - Queue job chain and dependency commands - Discovery tokenizer improvements Infrastructure: - Deployment architecture documentation - Ansible playbook updates for WireGuard client regeneration - Production environment configuration updates - Docker Compose local configuration updates - Remove obsolete docker-compose.yml (replaced by environment-specific configs) Documentation: - PERMISSIONS.md for access control guidelines - WireGuard DNS fix implementation details - Console dialog mode usage guide - Deployment architecture overview Testing: - Multi-purpose attribute tests - Gitea Actions integration tests (typed and untyped)
MCP (Model Context Protocol) Module
This module implements the Model Context Protocol for the custom PHP framework, enabling AI assistants like Claude to interact with the framework through standardized tools and resources.
✅ TESTED & WORKING
This MCP module has been successfully tested and is fully functional. The server responds correctly to JSON-RPC requests and integrates seamlessly with the framework's discovery system.
Overview
The MCP module provides:
- Tools: Functions that AI can call to perform actions
- Resources: Data sources that AI can read
- Server: JSON-RPC server implementation for MCP communication
Architecture
Core Components
McpServer: Main server handling JSON-RPC requestsMcpToolRegistry: Registry for discovered toolsMcpResourceRegistry: Registry for discovered resourcesMcpInitializer: Automatic discovery and registration using framework's attribute system
Attributes
#[McpTool]: Mark methods as MCP tools#[McpResource]: Mark methods as MCP resources
Discovery and Mapping
McpToolMapper: Maps#[McpTool]attributes using framework's discovery systemMcpResourceMapper: Maps#[McpResource]attributes
Available Tools
Framework Tools (FrameworkTools)
analyze_routes: Get all registered routesanalyze_container_bindings: Analyze DI container bindingsdiscover_attributes: Discover attributes by typeframework_health_check: Health check of framework componentslist_framework_modules: List all framework modules
File System Tools (FileSystemTools)
list_directory: List directory contents (project-scoped)read_file: Read file contents with line limitsfind_files: Find files by pattern
Available Resources
framework://config: Framework configuration and environment
Usage
Starting the MCP Server
# Direct PHP execution
php console.php mcp:server
# Via Docker (recommended for WSL environments)
docker exec -i php php console.php mcp:server
This starts the STDIO-based MCP server for AI assistant integration.
Testing the MCP Server
# Test initialize
echo '{"jsonrpc": "2.0", "method": "initialize", "params": {}}' | docker exec -i php php console.php mcp:server
# Test tools list
echo '{"jsonrpc": "2.0", "method": "tools/list", "params": {}}' | docker exec -i php php console.php mcp:server
Creating Custom Tools
use App\Framework\Mcp\McpTool;
class MyCustomTools
{
#[McpTool(
name: 'my_custom_tool',
description: 'Description of what this tool does',
inputSchema: [
'type' => 'object',
'properties' => [
'param1' => ['type' => 'string', 'description' => 'First parameter'],
],
'required' => ['param1'],
]
)]
public function myCustomTool(string $param1): string
{
return "Result: $param1";
}
}
Creating Custom Resources
use App\Framework\Mcp\McpResource;
class MyCustomResources
{
#[McpResource(
uri: 'my://custom-resource',
name: 'My Custom Resource',
description: 'A custom data resource',
mimeType: 'application/json'
)]
public function getCustomData(): string
{
return json_encode(['data' => 'example']);
}
}
Claude Code Configuration
For Windows WSL Setup (Docker environment)
Create or edit: %APPDATA%\Claude\claude_desktop_config.json
RECOMMENDED (Clean MCP Server):
{
"mcpServers": {
"custom-php-framework": {
"command": "docker",
"args": ["exec", "-i", "php", "php", "mcp_server.php"],
"cwd": "\\\\wsl$\\Debian\\home\\michael\\dev\\michaelschiemer"
}
}
}
Alternative (Console Command):
{
"mcpServers": {
"custom-php-framework": {
"command": "docker",
"args": ["exec", "-i", "php", "php", "console.php", "mcp:server"],
"cwd": "\\\\wsl$\\Debian\\home\\michael\\dev\\michaelschiemer"
}
}
}
For Direct WSL/Linux Environment
{
"mcpServers": {
"custom-php-framework": {
"command": "docker",
"args": ["exec", "-i", "php", "php", "console.php", "mcp:server"],
"cwd": "/home/michael/dev/michaelschiemer"
}
}
}
Alternative PHP Direct Execution
{
"mcpServers": {
"custom-php-framework": {
"command": "php",
"args": ["console.php", "mcp:server"],
"cwd": "/home/michael/dev/michaelschiemer"
}
}
}
Integration with Framework
The MCP module integrates seamlessly with the framework's existing patterns:
- Automatic Discovery: Commands are automatically discovered via
ConsoleCommandMapper - Attribute Discovery: Tools and resources use the framework's attribute discovery system
- Dependency Injection: Tools and resources get dependencies through the container
- Console Commands: Includes console command for server startup
- Security: File system tools are scoped to project directory
Protocol Support
Implements MCP 2025-06-18 specification:
- JSON-RPC 2.0 over STDIO
tools/list,tools/callfor tool operationsresources/list,resources/readfor resource operationsinitializefor protocol initialization
Security
- File system access is restricted to project directory
- Input validation on all tool parameters
- Error handling prevents information leakage
- Safe execution with proper exception handling
Tested Functionality
✅ Initialize Request: Server responds with correct protocol version and capabilities
✅ Tools List: Returns empty list (ready for tool registration)
✅ Console Integration: Command mcp:server is automatically discovered
✅ Docker Compatibility: Works seamlessly with Docker PHP container
✅ JSON-RPC Protocol: Correct request/response handling
Benefits for AI Development
This allows Claude and other AI assistants to:
- Analyze your framework's routes and structure
- Read and understand your codebase
- Discover framework components and patterns
- Perform safe file system operations within your project
- Execute framework-specific commands and queries
- Monitor framework health and performance