PluginProbe
Search Atlas SEO – OTTO AI SEO Automation for WordPress / 2.6.20
Search Atlas SEO – OTTO AI SEO Automation for WordPress v2.6.20
2.6.26 2.6.25 2.6.24 2.6.23 2.6.22 2.6.21 2.6.20 2.6.19 2.6.18 2.6.17 2.6.16 2.6.15 2.6.14 2.6.13 2.6.12 2.6.11 2.6.10 2.6.9 2.6.8 2.6.7 2.6.6 2.6.5 2.6.4 2.6.3 2.5.23 All 138 releases
metasync / includes / mcp-server-bootstrap.php

mcp-server-bootstrap.php in Search Atlas SEO – OTTO AI SEO Automation for WordPress 2.6.20, at includes/mcp-server-bootstrap.php

284 lines 10.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * MetaSync — MCP Server Bootstrap
4 *
5 * Creates the MCP server instance and registers all MCP tools. Extracted from
6 * metasync.php to keep the plugin entry file a lean bootstrap. Loaded
7 * via require_once from metasync.php; registers metasync_init_mcp_server() on
8 * the WordPress 'init' hook. Function names and hook timing are unchanged.
9 *
10 * @package Search Atlas SEO
11 */
12
13 if (!defined('WPINC')) {
14 die;
15 }
16
17 /**
18 * Initialize WordPress MCP Server
19 *
20 * Safely register a single MCP tool class, logging failures without aborting
21 * subsequent registrations. Extracted as a named function so both production
22 * code and unit tests exercise the same logic.
23 *
24 * @param object $server The MCP server instance (must have register_tool()).
25 * @param string $class_name Fully-qualified tool class name.
26 */
27 function metasync_safe_register_mcp_tool($server, $class_name) {
28 static $logged_missing = [];
29 if (!class_exists($class_name)) {
30 if (empty($logged_missing[$class_name])) {
31 error_log('MetaSync MCP: ' . $class_name . ' class not found — skipping registration. Run composer dump-autoload to regenerate the classmap.');
32 $logged_missing[$class_name] = true;
33 }
34 return;
35 }
36 try {
37 $server->register_tool(new $class_name());
38 } catch (\Throwable $e) {
39 error_log('MetaSync MCP: Failed to register tool ' . $class_name . ': ' . $e->getMessage());
40 }
41 }
42
43 /**
44 * Creates and configures the MCP server instance,
45 * registers all available MCP tools for WordPress operations.
46 * Hooked to 'init' for proper WordPress lifecycle integration.
47 */
48 function metasync_init_mcp_server() {
49 if (metasync_is_non_metasync_admin_ajax()) {
50 return;
51 }
52 // Skip the heavy MCP boot (server + sync logger + REST inventory + 100+ tool objects)
53 // unless this request is actually targeting the MCP REST route or was loaded via
54 // the stdio/HTTP bridge.
55 if (!metasync_is_mcp_rest_request() && !defined('METASYNC_MCP_BRIDGE')) {
56 return;
57 }
58 // Initialize MCP server
59 global $metasync_mcp_server;
60
61 try {
62 $metasync_mcp_server = new Metasync_MCP_Server();
63
64 // Attach MCP sync logger so all write tool calls are recorded in Sync History.
65 new Metasync_MCP_Sync_Logger();
66
67 // SEO Inventory: shared builder + standalone REST endpoint
68 new Metasync_REST_SEO_Inventory();
69 } catch (\Throwable $e) {
70 error_log('MCP Server Initialization Error: ' . $e->getMessage());
71 return;
72 }
73
74 // Helper: register a single tool, logging failures without aborting subsequent registrations
75 $safe_register = function($class_name) use ($metasync_mcp_server) {
76 metasync_safe_register_mcp_tool($metasync_mcp_server, $class_name);
77 };
78
79 // Register MCP Tools — each safe_register() call below adds one tool.
80 // NEW in v2.8.0: +4 Taxonomy Meta tools, +4 Bulk Alt Text tools
81
82 // Post Meta Operations (4 tools)
83 $safe_register('MCP_Tool_Update_Post_Meta');
84 $safe_register('MCP_Tool_Get_Post_Meta');
85 $safe_register('MCP_Tool_Get_SEO_Meta');
86 $safe_register('MCP_Tool_Get_Hreflang_Links');
87
88 // Post Operations (4 tools)
89 $safe_register('MCP_Tool_Get_Post');
90 $safe_register('MCP_Tool_Get_Post_By_URL');
91 $safe_register('MCP_Tool_List_Posts');
92 $safe_register('MCP_Tool_Update_Post');
93 $safe_register('MCP_Tool_Get_Post_Types');
94
95 // SEO Analysis (3 tools)
96 $safe_register('MCP_Tool_Analyze_SEO');
97 $safe_register('MCP_Tool_Check_Indexability');
98 $safe_register('MCP_Tool_SEO_Health_Report');
99
100 // Search Operations (3 tools)
101 $safe_register('MCP_Tool_Search_Posts');
102 $safe_register('MCP_Tool_Search_By_Keyword');
103 $safe_register('MCP_Tool_Find_Missing_Meta');
104
105 // Redirect Management (5 tools)
106 $safe_register('MCP_Tool_Create_Redirect');
107 $safe_register('MCP_Tool_List_Redirects');
108 $safe_register('MCP_Tool_Delete_Redirect');
109 $safe_register('MCP_Tool_Update_Redirect');
110 $safe_register('MCP_Tool_Check_Redirects_Health');
111
112 // 404 Error Monitoring (5 tools)
113 $safe_register('MCP_Tool_List_404_Errors');
114 $safe_register('MCP_Tool_Get_404_Stats');
115 $safe_register('MCP_Tool_Delete_404_Error');
116 $safe_register('MCP_Tool_Clear_404_Errors');
117 $safe_register('MCP_Tool_Create_Redirect_From_404');
118
119 // Robots.txt & Sitemap Management (11 tools - 7 existing + 4 new)
120 $safe_register('MCP_Tool_Get_Robots_Txt');
121 $safe_register('MCP_Tool_Update_Robots_Txt');
122 $safe_register('MCP_Tool_Get_Sitemap_Status');
123 $safe_register('MCP_Tool_Regenerate_Sitemap');
124 $safe_register('MCP_Tool_Exclude_From_Sitemap');
125 $safe_register('MCP_Tool_Add_Robots_Rule');
126 $safe_register('MCP_Tool_Remove_Robots_Rule');
127 $safe_register('MCP_Tool_Parse_Robots_Txt');
128 $safe_register('MCP_Tool_Validate_Robots_Txt');
129 $safe_register('MCP_Tool_Get_News_Sitemap');
130 $safe_register('MCP_Tool_Get_Video_Sitemap');
131
132 // Plugin Settings Management (4 tools)
133 $safe_register('MCP_Tool_Get_Plugin_Settings');
134 $safe_register('MCP_Tool_Update_Plugin_Settings');
135 $safe_register('MCP_Tool_List_Plugin_Settings_Schema');
136 $safe_register('MCP_Tool_Get_MCP_Settings');
137
138 // Schema Markup Management (7 tools)
139 $safe_register('MCP_Tool_Get_Schema_Markup');
140 $safe_register('MCP_Tool_Update_Schema_Markup');
141 $safe_register('MCP_Tool_Add_Schema_Type');
142 $safe_register('MCP_Tool_Remove_Schema_Type');
143 $safe_register('MCP_Tool_Validate_Schema');
144 $safe_register('MCP_Tool_Get_Schema_Content');
145 $safe_register('MCP_Tool_Set_Schema_Content');
146
147 // Google Instant Index (6 tools)
148 $safe_register('MCP_Tool_Instant_Index_Update');
149 $safe_register('MCP_Tool_Instant_Index_Delete');
150 $safe_register('MCP_Tool_Instant_Index_Status');
151 $safe_register('MCP_Tool_Instant_Index_Bulk_Update');
152 $safe_register('MCP_Tool_Get_Instant_Index_Settings');
153 $safe_register('MCP_Tool_Update_Instant_Index_Settings');
154
155 // Custom HTML Pages (6 tools)
156 $safe_register('MCP_Tool_Create_Custom_Page');
157 $safe_register('MCP_Tool_Get_Custom_Page');
158 $safe_register('MCP_Tool_List_Custom_Pages');
159 $safe_register('MCP_Tool_Update_Custom_Page');
160 $safe_register('MCP_Tool_Delete_Custom_Page');
161 $safe_register('MCP_Tool_Import_LPS_Page');
162
163 // HTML to Builder Converter (3 tools)
164 $safe_register('MCP_Tool_Convert_HTML_To_Builder');
165 $safe_register('MCP_Tool_Create_Builder_Page_From_HTML');
166 $safe_register('MCP_Tool_Convert_Custom_Page_To_Builder');
167
168 // Code Snippets (6 tools)
169 $safe_register('MCP_Tool_Get_Header_Snippet');
170 $safe_register('MCP_Tool_Update_Header_Snippet');
171 $safe_register('MCP_Tool_Get_Footer_Snippet');
172 $safe_register('MCP_Tool_Update_Footer_Snippet');
173 $safe_register('MCP_Tool_Get_Post_Snippets');
174 $safe_register('MCP_Tool_Update_Post_Snippets');
175
176 // Categories & Taxonomies (15 tools)
177 $safe_register('MCP_Tool_List_Categories');
178 $safe_register('MCP_Tool_Get_Category');
179 $safe_register('MCP_Tool_Create_Category');
180 $safe_register('MCP_Tool_Update_Category');
181 $safe_register('MCP_Tool_Delete_Category');
182 $safe_register('MCP_Tool_Get_Post_Categories');
183 $safe_register('MCP_Tool_Set_Post_Categories');
184
185 // Tags (8 tools)
186 $safe_register('MCP_Tool_List_Tags');
187 $safe_register('MCP_Tool_Get_Tag');
188 $safe_register('MCP_Tool_Create_Tag');
189 $safe_register('MCP_Tool_Update_Tag');
190 $safe_register('MCP_Tool_Delete_Tag');
191 $safe_register('MCP_Tool_Get_Post_Tags');
192 $safe_register('MCP_Tool_Set_Post_Tags');
193
194 // Featured Images & Media (6 tools)
195 $safe_register('MCP_Tool_Get_Featured_Image');
196 $safe_register('MCP_Tool_Set_Featured_Image');
197 $safe_register('MCP_Tool_Upload_Featured_Image');
198 $safe_register('MCP_Tool_Remove_Featured_Image');
199 $safe_register('MCP_Tool_List_Media');
200 $safe_register('MCP_Tool_Get_Media_Details');
201
202 // Post CRUD Operations (1 tool - delete/restore disabled for safety)
203 $safe_register('MCP_Tool_Create_Post');
204 // $safe_register('MCP_Tool_Delete_Post'); // DISABLED - safety
205 // $safe_register('MCP_Tool_Restore_Post'); // DISABLED - safety
206
207 // Bulk Operations (3 tools - bulk delete disabled for safety)
208 $safe_register('MCP_Tool_Bulk_Update_Meta');
209 $safe_register('MCP_Tool_Bulk_Set_Categories');
210 $safe_register('MCP_Tool_Bulk_Change_Status');
211 // $safe_register('MCP_Tool_Bulk_Delete_Posts'); // DISABLED - safety
212
213 // WordPress Core SEO Settings (10 tools)
214 $safe_register('MCP_Tool_Get_Site_Info');
215 $safe_register('MCP_Tool_Update_Site_Info');
216 $safe_register('MCP_Tool_Get_Permalink_Structure');
217 $safe_register('MCP_Tool_Update_Permalink_Structure');
218 $safe_register('MCP_Tool_Get_Reading_Settings');
219 $safe_register('MCP_Tool_Update_Reading_Settings');
220 $safe_register('MCP_Tool_Get_Search_Visibility');
221 $safe_register('MCP_Tool_Update_Search_Visibility');
222 $safe_register('MCP_Tool_Get_Date_Format');
223 $safe_register('MCP_Tool_Get_Discussion_Settings');
224
225 // Taxonomy Meta Operations (4 tools - NEW in v2.8.0)
226 $safe_register('MCP_Tool_Get_Term_Meta');
227 $safe_register('MCP_Tool_Update_Term_Meta');
228 $safe_register('MCP_Tool_Bulk_Update_Term_Meta');
229 $safe_register('MCP_Tool_List_Terms_With_Meta');
230
231 // Bulk Alt Text Operations (4 tools - NEW in v2.8.0)
232 $safe_register('MCP_Tool_Audit_Alt_Text');
233 $safe_register('MCP_Tool_Bulk_Update_Alt_Text');
234 $safe_register('MCP_Tool_Generate_Alt_Text');
235 $safe_register('MCP_Tool_Validate_Alt_Text');
236
237 // OTTO Persistence Settings (2 tools)
238 $safe_register('MCP_Tool_Get_Otto_Persistence_Settings');
239 $safe_register('MCP_Tool_Update_Otto_Persistence_Settings');
240
241 // OTTO Pipeline Tools (3 tools)
242 $safe_register('MCP_Tool_Trigger_Otto_Optimization');
243 $safe_register('MCP_Tool_Get_Otto_Status');
244 $safe_register('MCP_Tool_Verify_SEO_Output');
245
246 // System Diagnostics & Plugin Info (4 tools)
247 $safe_register('MCP_Tool_System_Diagnostics');
248 $safe_register('MCP_Tool_List_All_Plugins');
249 $safe_register('MCP_Tool_Get_Cron_Jobs');
250 $safe_register('MCP_Tool_Get_WP_Option');
251
252 // SEO Inventory (1 tool)
253 $safe_register('MCP_Tool_List_Posts_SEO_Inventory');
254
255 // Read-Only Database Access (3 tools)
256 $safe_register('MCP_Tool_DB_Tables');
257 $safe_register('MCP_Tool_DB_Describe');
258 $safe_register('MCP_Tool_DB_Select');
259
260 // Breadcrumb Tools (1 tool)
261 $safe_register('MCP_Tool_Get_Breadcrumb_Path');
262
263 // Cache Purge (2 tools)
264 $safe_register('MCP_Tool_Cache_Purge_All');
265 $safe_register('MCP_Tool_Cache_Purge_URL');
266
267 // LLMs.txt Tools (5 tools)
268 $safe_register('MCP_Tool_Get_LLMs_Txt');
269 $safe_register('MCP_Tool_Regenerate_LLMs_Txt');
270 $safe_register('MCP_Tool_Get_LLMs_Txt_Settings');
271 $safe_register('MCP_Tool_Update_LLMs_Txt_Settings');
272 $safe_register('MCP_Tool_Get_Post_Markdown');
273
274 // SEO Plugin Audit (4 tools)
275 $safe_register('MCP_Tool_Read_SEO_Plugin_Data');
276 $safe_register('MCP_Tool_SEO_Plugin_Diff');
277 $safe_register('MCP_Tool_Sync_To_Active_Plugins');
278 $safe_register('MCP_Tool_Detect_SEO_Conflicts');
279
280 // Allow other plugins/themes to register tools
281 do_action('metasync_mcp_register_tools', $metasync_mcp_server);
282 }
283 add_action('init', 'metasync_init_mcp_server', 5);
284