=== AcrossAI MCP Manager === Contributors: raftaar1191 Tags: mcp, ai, copilot, vscode, claude Requires at least: 7.0 Requires PHP: 8.1 Tested up to: 7.0 Stable tag: 0.2.0 License: GPL-2.0-or-later License URI: https://www.gnu.org/licenses/gpl-2.0.html Connect WordPress to MCP clients like VS Code, Claude, and Copilot using secure application passwords. == Description == MCP Manager uses the standard `@automattic/mcp-wordpress-remote@latest` package with WordPress Application Passwords for the default remote flow. It also includes an optional experimental direct Claude Connectors mode backed by a WordPress-hosted OAuth approval flow. MCP Manager is a WordPress plugin that enables seamless integration with Model Context Protocol (MCP) servers, allowing AI assistants and code editors to safely access your WordPress instance through secure application passwords. = Key Features = * **Multi-Client Support**: Configure MCP for: - VS Code with Copilot - Claude Desktop App - GitHub Copilot & Codex - OpenAI ChatGPT Codex - Custom MCP Clients * **Secure Authentication**: Uses WordPress native Application Passwords system - One-click password generation - Secure credential management - Password revocation support - Per-server Access Control still enforced after authentication * **Easy Configuration**: - Copy-paste ready JSON configurations - Per-provider configuration file paths - Automatic top-level key detection * **Format #1 Standard**: Uses the Automattic-recommended MCP configuration format - npx command execution - @automattic/mcp-wordpress-remote@latest package - Full environment variable support = How It Works = 1. Navigate to Settings → MCP Manager 2. Select your MCP client (VS Code, Claude, GitHub Copilot, ChatGPT, or Custom) 3. Click "Generate New Application Password" 4. Copy the ready-to-use JSON configuration 5. Paste into your client's configuration file 6. Restart your MCP client All application passwords are managed through WordPress's native Application Passwords system and appear in your profile under Account Management. = CLI Connection and Authorization Flow = MCP Manager also supports a browser-assisted CLI connection flow for local MCP clients. Typical command: `npx -y @acrossai/mcp-manager --siteurl=https://example.com --server=default-mcp-server` Flow summary: 1. The CLI checks `/wp-json/acrossai-mcp-manager/v1/health` 2. The CLI starts auth with `/wp-json/acrossai-mcp-manager/v1/auth/start` 3. WordPress returns an `auth_code` and frontend `auth_url` 4. The CLI opens the frontend approval page at `/acrossai-mcp-manager/` 5. If needed, the user signs in through normal WordPress login 6. The signed-in user approves access in the browser 7. The CLI polls `/auth/status` until the request is approved 8. The CLI fetches the approved user's accessible servers from `/servers` 9. The CLI exchanges the approved code at `/auth/exchange` 10. WordPress creates a one-time Application Password and the CLI writes the MCP client config Terminology: * **Sign in / Log in** = WordPress account authentication * **Connect** = starting the CLI-to-site linking flow * **Authorize / Approve access** = granting the CLI permission in the browser Important notes: * The frontend authorization page must never be cached * Auth codes are single-use * `/servers` and `/auth/exchange` respect per-server access control * User-facing copy should say **CLI Connections** rather than **npm Login** * Generated remote MCP configs use Application Passwords and explicitly disable OAuth discovery in `@automattic/mcp-wordpress-remote` = Experimental Direct Claude Connectors = An optional **Claude Connectors Screen (Experimental)** setting can enable a direct OAuth flow for Claude's hosted connectors. When the global feature toggle is enabled and a specific server is configured in its **Claude Connector** tab, the plugin exposes: * `/.well-known/oauth-authorization-server` * `/.well-known/oauth-protected-resource?resource=` * `/acrossai-mcp-connectors/oauth/authorize/` * `/wp-json/acrossai-mcp-manager/v1/connector/oauth/token` Important notes: * Disabled by default * The Application Password flow remains available and supported * The master experimental toggle is global, but OAuth client settings are stored per server * Direct connector approval signs Claude in as a WordPress user * Per-server Access Control still applies to every MCP request after OAuth * Public HTTPS is recommended for hosted connector usage = Provider Configuration Paths = * **VS Code**: ~/.config/Code/User/globalStorage/Copilot.copilot-chat/mcp.json (top-level key: "servers") * **Claude**: ~/Library/Application Support/Claude/claude_desktop_config.json (top-level key: "mcpServers") * **GitHub Copilot**: ~/.gh-copilot/config.json (top-level key: "servers") * **OpenAI ChatGPT**: ~/.config/chatgpt/config.json (top-level key: "servers") * **Custom**: ./your-project/.mcp/config.json (top-level key: configurable) = Requirements = * WordPress 5.9 or higher * PHP 7.4 or higher * WordPress Application Passwords support (built-in since WP 5.6) == Installation == 1. Upload the plugin directory to `/wp-content/plugins/` 2. Activate the plugin through the 'Plugins' menu in WordPress 3. Navigate to Settings → MCP Manager to configure Or: 1. Go to Admin → Plugins → Add New 2. Search for "MCP Manager" 3. Click "Install Now" then "Activate" == Frequently Asked Questions == = Is my password secure? = Yes! MCP Manager uses WordPress's native Application Passwords system. Each password is: - Generated using WordPress's secure methods - Associated with your user account - Visible in your profile for management - Revocable at any time = Can I use this with multiple MCP clients? = Yes! You can generate separate passwords for each client (VS Code, Claude, GitHub Copilot, ChatGPT, and any custom client). = Where are my application passwords saved? = All application passwords are managed through WordPress's native Application Passwords system. View and manage them at: User Profile → Account Management → Application Passwords = What MCP clients are supported? = - Visual Studio Code (with Copilot) - Anthropic Claude Desktop App - GitHub Copilot - OpenAI ChatGPT Codex - Any custom MCP client supporting the standard format = Can I revoke a password? = Yes! You can revoke any application password from your profile page under Account Management → Application Passwords. = Is this compatible with multisite? = Yes! MCP Manager works with WordPress multisite installations. Each site can be configured independently. = Do I need to install additional software? = No additional software is needed on the WordPress side. Your MCP clients (VS Code extension, Claude app, etc.) handle the integration. == Screenshots == 1. Settings page with client tabs for easy configuration 2. Copy-paste ready JSON configuration 3. One-click password generation 4. Per-provider configuration file locations and top-level keys == Changelog == = 0.2.0 = * **Dependencies: bump `acrossai-co/main-menu` `0.0.27` → `0.0.29`.** Picks up the shared main-menu package's latest baseline for the 0.2.0 release cycle. * **Feature 040 — Migrated the AI Connectors + OAuth stack to the companion plugin `acrossai-ai-connectors` (v0.5.0+).** MCP Manager now ships only the free-tier `tab=npm` and `tab=clients` connection paths; the OAuth click-to-connect flow (Claude Web, ChatGPT connectors, Grok) plus the AI Connectors admin tab now live in the paid `acrossai-ai-connectors` add-on. Token / client / auth_code storage is unchanged — same table names (`wp_acrossai_mcp_oauth_clients`, `_tokens`, `_auth_codes`, `wp_acrossai_mcp_connector_approved_users`), same BerlinDB `db_version_key`s, no data migration. REST namespace kept as `acrossai-mcp-manager/v1` for RFC 8414 discovery compatibility. Existing Claude/ChatGPT/Grok OAuth connections continue to authenticate transparently when the add-on is installed — zero re-authorization required. **Free users updating without the add-on are undisturbed** (mcp-manager remains standalone-activatable; the AI Connectors tab simply doesn't appear). **Deletions**: entire `includes/OAuth/`, `includes/Connectors/`, `includes/Database/{OAuthClients,OAuthTokens,OAuthAuthCodes,ConnectorApprovedUsers}/`, `admin/Partials/ServerTabs/AIConnectorsTab.php`, `templates/oauth/consent.php`, `src/js/ai-connectors.js`, `src/scss/ai-connectors.scss`, all `build/js/ai-connectors.*` artifacts, and all associated PHPUnit tests. **Modifications**: `Activator.php`, `Deactivator.php` (retains unconditional cron-clear as belt-and-suspenders per FR-004), `Main.php` (drops all OAuth REST route + infra wiring + 4 OAuth-table bootstrap/reconcile calls), `admin/Main.php` (drops `maybe_enqueue_ai_connectors_app()`), `admin/Partials/ServerTabs/Registry.php` (drops built-in `AIConnectorsTab` entry — companion re-registers via existing `acrossai_mcp_manager_server_tabs` filter at priority 35), `uninstall.php` (drops OAuth DROP TABLE lines + cron-clear + narrows the `acrossai_mcp_%` option sweep to exclude `acrossai_mcp_connector_%`), `webpack.config.js` (drops `js/ai-connectors` entry), and `public/Discovery/ConnectionMethodRegistry.php` (FR-019: swaps `ConnectorProfileRegistry` FQN to the companion namespace and guards with `class_exists()` so the discovery API returns an empty `ai_connector` category when the add-on is absent). **Coordination invariant**: the companion at v0.5.0+ has been audited across 44 checks (23 structural readiness + 21 wiring counterparts) and is deployable — the migration is atomic via the companion's `class_exists( '\AcrossAI_MCP_Manager\Includes\OAuth\AuthorizationController' )` self-disable probe. **No compat shim, no `Requires Plugins:` header, no admin notice** — per clarifications Q4/Q5/Q6, this feature adds ZERO new code (pure deletions + header version bump). Durable lesson captured: when a subsystem gets its own plugin, prefer code-only migration (identical table names, identical version keys, byte-identical BerlinDB Table subclass declarations) over data-migration. = 0.1.9 = * **Feature 038 — User-accessible MCP servers shortcode + reusable base class.** New shortcode `[acrossai_mcp_servers]` lists every MCP server the current logged-in user can reach (F015 access-control gate) whose F037 Embeds tab has the master toggle ON and at least one enabled connection method — surfacing per server every enabled NPM / MCP Client / AI Connector DTO from F035. Attributes: `heading=""`, `show_description="1"`, `empty_message="…"` (all optional). Ships with a data-only abstract base class `\AcrossAI_MCP_Manager\Public\Renderers\UserServers\AbstractUserServersRenderer` under `public/Renderers/UserServers/` so companion plugins (planned BuddyBoss add-on, WooCommerce My Account, WPUM, MemberPress) can subclass and consume the enumeration primitive `get_accessible_servers( ?int $user_id = null ): array` without re-implementing the F015 + F037 gate cascade. Concrete `UserServersBlock` shortcode child is `final` per D36 (extend by filter, not subclass). Two new extension filters: `acrossai_mcp_user_accessible_servers` (reshape the payload per context; **NOT a gate-bypass surface** — consumers appending entries MUST replay the gate cascade themselves per SEC-004) and `acrossai_mcp_servers_shortcode_html` (override markup without subclassing; **NOT re-sanitized** — listener plugins trusted at filter boundary per SEC-002). Anonymous visitors get silent no-render (empty string). Logged-in users with zero accessible servers get an empty-state wrapper with a translatable message. Inline scoped `