> id => [name, group, steps[], code, file].
*/
public static function all(): array {
$token = __( 'Create an access token under Access tokens and put it where the config says YOUR_TOKEN.', 'handymcp' );
$env = __( 'Create an access token under Access tokens and use it as the value of WP_MCP_TOKEN.', 'handymcp' );
$chat = __( 'Chat apps', 'handymcp' );
$code = __( 'Coding agents and IDEs', 'handymcp' );
$agent = __( 'Agents and other apps', 'handymcp' );
return array(
'claude' => array(
'name' => 'Claude',
'group' => $chat,
'steps' => array(
__( 'In Claude (web, desktop or mobile) open Settings › Connectors and choose Add custom connector.', 'handymcp' ),
__( 'Give it a name, paste the server URL and click Add. On Team and Enterprise plans an owner adds it first, then everyone clicks Connect.', 'handymcp' ),
__( 'Sign in to this site on the page that opens, pick what Claude may do, and approve.', 'handymcp' ),
),
),
'chatgpt' => array(
'name' => 'ChatGPT',
'group' => $chat,
'steps' => array(
__( 'In ChatGPT open Settings › Apps (or Security) and turn on Developer mode.', 'handymcp' ),
__( 'Create an app, paste the server URL and choose OAuth.', 'handymcp' ),
__( 'Sign in to this site and approve the access you want to give.', 'handymcp' ),
),
),
'grok' => array(
'name' => 'Grok (grok.com)',
'group' => $chat,
'steps' => array(
__( 'Open grok.com/connectors, choose New Connector › Custom and paste the server URL.', 'handymcp' ),
__( 'Sign in to this site and approve.', 'handymcp' ),
),
),
'lechat' => array(
'name' => 'Mistral Le Chat',
'group' => $chat,
'steps' => array(
__( 'An admin opens Connectors › Add Connector › Custom MCP Connector and pastes the server URL.', 'handymcp' ),
__( 'Choose OAuth and approve on this site, or choose HTTP Bearer and paste an access token.', 'handymcp' ),
),
),
'perplexity' => array(
'name' => 'Perplexity',
'group' => $chat,
'steps' => array(
__( 'Where your plan offers custom connectors, open Settings › Connectors, add a custom connector and paste the server URL, then approve on this site.', 'handymcp' ),
__( 'In the Perplexity Mac app you can instead add a local server that runs the bridge shown under "Any other app".', 'handymcp' ),
),
),
'claude-code' => array(
'name' => 'Claude Code',
'group' => $code,
'steps' => array(
__( 'Run this in a terminal. Leave out the header line to sign in with OAuth instead (then run /mcp in Claude Code).', 'handymcp' ),
$token,
),
'code' => "claude mcp add --transport http wordpress {URL} \\\n --header \"Authorization: Bearer YOUR_TOKEN\" --scope user",
'file' => __( 'Terminal', 'handymcp' ),
),
'codex' => array(
'name' => 'OpenAI Codex',
'group' => $code,
'steps' => array(
__( 'Add this to ~/.codex/config.toml (CLI, IDE extension and desktop app share it) and set the environment variable WP_MCP_TOKEN to your token.', 'handymcp' ),
__( 'Or skip the token and run codex mcp login wordpress to sign in with OAuth.', 'handymcp' ),
$env,
),
'code' => "[mcp_servers.wordpress]\nurl = \"{URL}\"\nbearer_token_env_var = \"WP_MCP_TOKEN\"",
'file' => '~/.codex/config.toml',
),
'cursor' => array(
'name' => 'Cursor',
'group' => $code,
'steps' => array(
__( 'Open Settings › MCP or edit ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project). Without the headers block Cursor signs in with OAuth.', 'handymcp' ),
$token,
),
'code' => "{\n \"mcpServers\": {\n \"wordpress\": {\n \"url\": \"{URL}\",\n \"headers\": { \"Authorization\": \"Bearer YOUR_TOKEN\" }\n }\n }\n}",
'file' => '~/.cursor/mcp.json',
),
'vscode' => array(
'name' => 'VS Code and GitHub Copilot',
'group' => $code,
'steps' => array(
__( 'Run MCP: Open User Configuration (or create .vscode/mcp.json) and add this. VS Code asks for the token once and stores it securely. Without headers it signs in with OAuth.', 'handymcp' ),
$token,
),
'code' => "{\n \"inputs\": [\n { \"type\": \"promptString\", \"id\": \"wp-token\", \"description\": \"WordPress MCP token\", \"password\": true }\n ],\n \"servers\": {\n \"wordpress\": {\n \"type\": \"http\",\n \"url\": \"{URL}\",\n \"headers\": { \"Authorization\": \"Bearer \${input:wp-token}\" }\n }\n }\n}",
'file' => 'mcp.json',
),
'windsurf' => array(
'name' => 'Windsurf',
'group' => $code,
'steps' => array(
__( 'Open Cascade › MCP servers › View raw config and add this.', 'handymcp' ),
$token,
),
'code' => "{\n \"mcpServers\": {\n \"wordpress\": {\n \"serverUrl\": \"{URL}\",\n \"headers\": { \"Authorization\": \"Bearer YOUR_TOKEN\" }\n }\n }\n}",
'file' => 'mcp_config.json',
),
'gemini' => array(
'name' => 'Gemini CLI',
'group' => $code,
'steps' => array(
__( 'Run this, or add the JSON below to ~/.gemini/settings.json. Note the key is httpUrl. Without the header Gemini CLI signs in with OAuth (/mcp auth wordpress).', 'handymcp' ),
$token,
),
'code' => "gemini mcp add --transport http -H \"Authorization: Bearer YOUR_TOKEN\" --scope user wordpress {URL}\n\n{\n \"mcpServers\": {\n \"wordpress\": {\n \"httpUrl\": \"{URL}\",\n \"headers\": { \"Authorization\": \"Bearer YOUR_TOKEN\" }\n }\n }\n}",
'file' => '~/.gemini/settings.json',
),
'antigravity' => array(
'name' => 'Google Antigravity',
'group' => $code,
'steps' => array(
__( 'Open Settings › Customizations › Installed MCP Servers and edit the raw config, or ~/.gemini/config/mcp_config.json. Without headers Antigravity signs in with OAuth.', 'handymcp' ),
$token,
),
'code' => "{\n \"mcpServers\": {\n \"wordpress\": {\n \"serverUrl\": \"{URL}\",\n \"headers\": { \"Authorization\": \"Bearer YOUR_TOKEN\" }\n }\n }\n}",
'file' => 'mcp_config.json',
),
'grok-build' => array(
'name' => 'Grok Build (terminal)',
'group' => $code,
'steps' => array(
__( 'Run this in a terminal. Grok Build also picks up servers from Claude Code and Cursor configs.', 'handymcp' ),
$token,
),
'code' => "grok mcp add --transport http wordpress {URL} \\\n --header 'Authorization: Bearer YOUR_TOKEN'",
'file' => __( 'Terminal', 'handymcp' ),
),
'cline' => array(
'name' => 'Cline',
'group' => $code,
'steps' => array(
__( 'Open MCP Servers › Configure and add this. Keep "type": "streamableHttp", otherwise Cline uses the old SSE transport.', 'handymcp' ),
$token,
),
'code' => "{\n \"mcpServers\": {\n \"wordpress\": {\n \"type\": \"streamableHttp\",\n \"url\": \"{URL}\",\n \"headers\": { \"Authorization\": \"Bearer YOUR_TOKEN\" }\n }\n }\n}",
'file' => 'cline_mcp_settings.json',
),
'zed' => array(
'name' => 'Zed',
'group' => $code,
'steps' => array(
__( 'Run zed: open settings file and add this. Without headers Zed signs in with OAuth.', 'handymcp' ),
$token,
),
'code' => "\"context_servers\": {\n \"wordpress\": {\n \"url\": \"{URL}\",\n \"headers\": { \"Authorization\": \"Bearer YOUR_TOKEN\" }\n }\n}",
'file' => 'settings.json',
),
'jetbrains' => array(
'name' => 'JetBrains Junie and AI Assistant',
'group' => $code,
'steps' => array(
__( 'Junie: add this to ~/.junie/mcp/mcp.json. AI Assistant (2025.3 or later): Settings › Tools › AI Assistant › Model Context Protocol, add a server as JSON.', 'handymcp' ),
$token,
),
'code' => "{\n \"mcpServers\": {\n \"wordpress\": {\n \"url\": \"{URL}\",\n \"headers\": { \"Authorization\": \"Bearer YOUR_TOKEN\" }\n }\n }\n}",
'file' => 'mcp.json',
),
'continue' => array(
'name' => 'Continue',
'group' => $code,
'steps' => array(
__( 'Add this to ~/.continue/config.yaml and store the token as a Continue secret named WP_MCP_TOKEN.', 'handymcp' ),
$env,
),
'code' => "mcpServers:\n - name: wordpress\n type: streamable-http\n url: {URL}\n requestOptions:\n headers:\n Authorization: Bearer \${{ secrets.WP_MCP_TOKEN }}",
'file' => '~/.continue/config.yaml',
),
'openclaw' => array(
'name' => 'OpenClaw',
'group' => $agent,
'steps' => array(
__( 'Add this to ~/.openclaw/openclaw.json, then check it with openclaw mcp doctor wordpress --probe. For OAuth use auth: "oauth" and openclaw mcp login wordpress instead of headers.', 'handymcp' ),
$token,
),
'code' => "{\n mcp: {\n servers: {\n wordpress: {\n url: \"{URL}\",\n transport: \"streamable-http\",\n headers: { Authorization: \"Bearer YOUR_TOKEN\" }\n }\n }\n }\n}",
'file' => '~/.openclaw/openclaw.json',
),
'hermes' => array(
'name' => 'Hermes Agent',
'group' => $agent,
'steps' => array(
__( 'Add this to ~/.hermes/config.yaml and put WP_MCP_TOKEN=YOUR_TOKEN in ~/.hermes/.env. For OAuth use auth: oauth instead of headers.', 'handymcp' ),
$env,
),
'code' => "mcp_servers:\n wordpress:\n url: \"{URL}\"\n headers:\n Authorization: \"Bearer \${WP_MCP_TOKEN}\"",
'file' => '~/.hermes/config.yaml',
),
'goose' => array(
'name' => 'Goose',
'group' => $agent,
'steps' => array(
__( 'Run goose configure › Add Extension › Remote Extension (Streamable HTTP), or add this to ~/.config/goose/config.yaml.', 'handymcp' ),
$token,
),
'code' => "extensions:\n wordpress:\n enabled: true\n type: streamable_http\n name: wordpress\n uri: {URL}\n headers:\n Authorization: Bearer YOUR_TOKEN\n timeout: 300",
'file' => '~/.config/goose/config.yaml',
),
'lmstudio' => array(
'name' => 'LM Studio',
'group' => $agent,
'steps' => array(
__( 'In the Program tab choose Edit mcp.json and add this.', 'handymcp' ),
$token,
),
'code' => "{\n \"mcpServers\": {\n \"wordpress\": {\n \"url\": \"{URL}\",\n \"headers\": { \"Authorization\": \"Bearer YOUR_TOKEN\" }\n }\n }\n}",
'file' => 'mcp.json',
),
'copilot-studio' => array(
'name' => 'Microsoft Copilot Studio',
'group' => $agent,
'steps' => array(
__( 'In your agent open Tools › Add a tool › New tool › Model Context Protocol and paste the server URL.', 'handymcp' ),
__( 'Choose OAuth 2.0 with dynamic discovery, or API key in a header named X-MCP-Authorization with your access token as the key.', 'handymcp' ),
),
),
'claude-desktop' => array(
'name' => __( 'Any other app (local bridge)', 'handymcp' ),
'group' => $agent,
'steps' => array(
__( 'For apps that only run local (stdio) servers, such as older Claude Desktop configs: add this server, which uses the mcp-remote bridge (needs Node.js).', 'handymcp' ),
__( 'Leave out the header lines to sign in with OAuth in the browser instead.', 'handymcp' ),
$token,
),
'code' => "{\n \"mcpServers\": {\n \"wordpress\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"mcp-remote\", \"{URL}\", \"--header\", \"Authorization:\${AUTH_HEADER}\"],\n \"env\": { \"AUTH_HEADER\": \"Bearer YOUR_TOKEN\" }\n }\n }\n}",
'file' => 'claude_desktop_config.json',
),
);
}
}