PluginProbe
ZIP AI – AI Website Builder & AI Agent / 0.0.13
ZIP AI – AI Website Builder & AI Agent v0.0.13
0.0.14 0.0.13 0.0.12 0.0.11 0.0.10 0.0.9 trunk 0.0.4 0.0.5 0.0.6 0.0.7 0.0.8
zip-ai / lib / mcp-adapter / includes / Core / McpTransportFactory.php

McpTransportFactory.php in ZIP AI – AI Website Builder & AI Agent 0.0.13, at lib/mcp-adapter/includes/Core/McpTransportFactory.php

120 lines 3.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * MCP Transport Factory for initializing MCP transports.
4 *
5 * @package McpAdapter
6 */
7
8 declare( strict_types=1 );
9
10 namespace WP\MCP\Core;
11
12 use WP\MCP\Handlers\Initialize\InitializeHandler;
13 use WP\MCP\Handlers\Prompts\PromptsHandler;
14 use WP\MCP\Handlers\Resources\ResourcesHandler;
15 use WP\MCP\Handlers\System\SystemHandler;
16 use WP\MCP\Handlers\Tools\ToolsHandler;
17 use WP\MCP\Transport\Contracts\McpTransportInterface;
18 use WP\MCP\Transport\Infrastructure\McpTransportContext;
19
20 /**
21 * Factory for creating and initializing MCP transports.
22 */
23 class McpTransportFactory {
24 /**
25 * MCP Server instance.
26 *
27 * @var \WP\MCP\Core\McpServer
28 */
29 private McpServer $mcp_server;
30
31 /**
32 * Constructor.
33 *
34 * @param \WP\MCP\Core\McpServer $mcp_server MCP server instance.
35 */
36 public function __construct( McpServer $mcp_server ) {
37 $this->mcp_server = $mcp_server;
38 }
39
40 /**
41 * Initialize MCP transports for the server.
42 *
43 * @param array<class-string<\WP\MCP\Transport\Contracts\McpTransportInterface>> $mcp_transports Array of MCP transport class names to initialize.
44 */
45 public function initialize_transports( array $mcp_transports ): void {
46 foreach ( $mcp_transports as $mcp_transport ) {
47 // Check if the class exists
48 if ( ! class_exists( $mcp_transport ) ) {
49 _doing_it_wrong(
50 __FUNCTION__,
51 sprintf(
52 /* translators: %s: Transport class name */
53 esc_html__( 'Transport class "%s" does not exist. Make sure the class is properly autoloaded or included.', 'mcp-adapter' ),
54 esc_html( $mcp_transport )
55 ),
56 '0.1.0'
57 );
58 // Log error and continue processing other transports
59 $this->mcp_server->get_error_handler()->log(
60 sprintf( 'Transport class "%s" does not exist.', $mcp_transport ),
61 array( 'McpTransportFactory::initialize_transports' )
62 );
63 continue;
64 }
65
66 // Check for interface implementation
67 if ( ! in_array( McpTransportInterface::class, class_implements( $mcp_transport ) ?: array(), true ) ) {
68 _doing_it_wrong(
69 __FUNCTION__,
70 sprintf(
71 /* translators: %s: Transport class name */
72 esc_html__( 'Transport class "%s" must implement McpTransportInterface. Check your transport implementation.', 'mcp-adapter' ),
73 esc_html( $mcp_transport )
74 ),
75 '0.1.0'
76 );
77 // Log error and continue processing other transports
78 $this->mcp_server->get_error_handler()->log(
79 sprintf( 'MCP transport class "%s" must implement the McpTransportInterface.', $mcp_transport ),
80 array( 'McpTransportFactory::initialize_transports' )
81 );
82 continue;
83 }
84
85 // Interface-based instantiation with dependency injection
86 $context = $this->create_transport_context();
87 new $mcp_transport( $context );
88 }
89 }
90
91 /**
92 * Create the transport context with all required dependencies.
93 *
94 * @return \WP\MCP\Transport\Infrastructure\McpTransportContext
95 */
96 public function create_transport_context(): McpTransportContext {
97 // Create handlers
98 $initialize_handler = new InitializeHandler( $this->mcp_server );
99 $tools_handler = new ToolsHandler( $this->mcp_server );
100 $resources_handler = new ResourcesHandler( $this->mcp_server );
101 $prompts_handler = new PromptsHandler( $this->mcp_server );
102 $system_handler = new SystemHandler();
103
104 // Create the context - the router will be created automatically
105 return new McpTransportContext(
106 array(
107 'mcp_server' => $this->mcp_server,
108 'initialize_handler' => $initialize_handler,
109 'tools_handler' => $tools_handler,
110 'resources_handler' => $resources_handler,
111 'prompts_handler' => $prompts_handler,
112 'system_handler' => $system_handler,
113 'observability_handler' => $this->mcp_server->get_observability_handler(),
114 'error_handler' => $this->mcp_server->get_error_handler(),
115 'transport_permission_callback' => $this->mcp_server->get_transport_permission_callback(),
116 )
117 );
118 }
119 }
120