Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
mcp-adapter
/
includes
/
Handlers
:
HandlerHelperTrait.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php /** * Helper trait for MCP handlers. * * @package McpAdapter */ declare( strict_types=1 ); namespace WP\MCP\Handlers; use WP\MCP\Infrastructure\ErrorHandling\McpErrorFactory; /** * Provides common helper methods for MCP handlers. */ trait HandlerHelperTrait { /** * Extracts parameters from a request message. * * Handles both direct params and nested params structure for backward compatibility. * This normalizes the dual parameter patterns found throughout handlers. * * @param array $data Request data that may have params at root or nested. * * @return array Extracted parameters. */ protected function extract_params( array $data ): array { return $data['params'] ?? $data; } /** * Creates a standardized error response. * * This helper ensures all error responses follow the same format and * properly extract the error field from McpErrorFactory responses. * * @param int $code Error code. * @param string $message Error message. * @param int $request_id Optional. Request ID for JSON-RPC. Default 0. * * @return array Error response array with 'error' key. */ protected function create_error_response( int $code, string $message, int $request_id = 0 ): array { return array( 'id' => $request_id, 'error' => array( 'code' => $code, 'message' => $message, ), ); } /** * Extracts error array from McpErrorFactory response. * * McpErrorFactory methods return ['error' => [...]] but handlers * often need just the error array itself. * * @param array $factory_response Response from McpErrorFactory method. * * @return array Error array (without wrapping 'error' key). */ protected function extract_error( array $factory_response ): array { return $factory_response['error'] ?? $factory_response; } /** * Creates missing parameter error response. * * @param string $param_name Missing parameter name. * @param int $request_id Optional. Request ID for JSON-RPC. Default 0. * * @return array Error response array. */ protected function missing_parameter_error( string $param_name, int $request_id = 0 ): array { return array( 'error' => McpErrorFactory::missing_parameter( $request_id, $param_name )['error'] ); } /** * Creates permission denied error response. * * @param string $denied_resource Resource that was denied. * @param int $request_id Optional. Request ID for JSON-RPC. Default 0. * * @return array Error response array. */ protected function permission_denied_error( string $denied_resource, int $request_id = 0 ): array { return array( 'error' => McpErrorFactory::permission_denied( $request_id, 'Access denied for: ' . $denied_resource )['error'] ); } /** * Creates internal error response. * * @param string $message Error message. * @param int $request_id Optional. Request ID for JSON-RPC. Default 0. * * @return array Error response array. */ protected function internal_error( string $message, int $request_id = 0 ): array { return array( 'error' => McpErrorFactory::internal_error( $request_id, $message )['error'] ); } /** * Creates a standardized success response. * * @param mixed $data Response data. * * @return array Success response array. */ protected function create_success_response( $data ): array { return array( 'result' => $data, ); } }