| 开发者 | dudaster |
|---|---|
| 更新时间 | 2026年8月21日 04:10 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 7.1 |
| 版权: | GPL-2.0-or-later |
| 版权网址: | 版权信息 |
"confirm": true parameter. Accidental deletions are prevented by design.content field for full client compatibility, protocol errors use standard integer codes, and errors from a tool that actually ran are reported as isError so your agent can see and react to them. Pass an idempotency_key on any write call and a retried request (dropped connection, flaky client) returns the original result instead of repeating the action — no duplicate posts from an accidental double-send. Responses are hardened against corrupted output, so your agent always gets valid JSON back.
Accessibility Audits — New in v3.2.0
AICOM now includes a dedicated Accessibility module so your AI agent can audit and fix WCAG issues across your entire site — no external tools or services required:
aria-hidden). Full dry-run support so you can preview changes before saving.AI Agent → AICOM Endpoint → WordPress
API Key Scopes
Each API key is granted specific scopes — you control exactly what each AI agent can and cannot do:
read.wp, write.wp.posts, manage.taxonomies, manage.meta, manage.wordpress.settings, manage.media, manage.files, manage.users, manage.plugins, manage.backups, manage.a11y, manage.woocommerce.products, manage.woocommerce.settings, manage.elementor, manage.polylang, manage.yoast, manage.clautron
Endpoint
REST API:
POST /wp-json/aicom/v1/mcp
Fallback (no mod_rewrite required):
POST /?aicom=1
Health check:
GET /?aicom=1
Authentication
Authorization: Bearer aicom_XXXXXXXX_<secret>
or:
X-API-Key: aicom_XXXXXXXX_<secret>
MCP Request Example
{"jsonrpc":"2.0","method":"tools/call","params":{"name":"wp.posts.list","arguments":{"post_type":"post","posts_per_page":10}},"id":1}
aicom folder to /wp-content/plugins/ or install directly from Plugins → Add New by searching for "AICOM"https://yoursite.com/wp-json/aicom/v1/mcpAuthorization: Bearer <your-key> in every request.htaccess:
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
Safety tip: Start with Soft Lock enabled to limit the agent to read-only operations, then unlock once you're confident in the integration.No. Every request must include a valid API key. Keys are bcrypt-hashed in the database and scoped — each key only has access to the specific operations you explicitly grant it. Without a valid key, the endpoint returns 401 Unauthorized.
Yes. The fallback endpoint /?aicom=1 works on any server configuration, with or without pretty permalinks or Apache mod_rewrite.
Yes. Each plugin's tools are loaded automatically only if the corresponding plugin is active. If WooCommerce is not installed, no WooCommerce tools appear in the tool list or audit log.
Yes, in two ways: (1) assign only read.wp scopes to the API key, or (2) enable Soft Lock or Hard Lock mode from the Safety page — this blocks write and destructive operations site-wide regardless of key scopes.
Soft Lock permits public, discovery and read class tools only — agents can browse and read content but cannot write, delete or change settings. Hard Lock permits only public tools (like server.status) — the site is effectively frozen from an AI perspective. Hard Lock overrides Soft Lock.
Yes. Send "dry_run": true in your request parameters. The operation will be validated and simulated but no data will be changed. The audit log will record it as a dry run.
No. AICOM automatically snapshots a post, term, or Elementor page before your agent updates, trashes, deletes, or edits it — this happens at the plugin level regardless of what the agent does or forgets to do. You can restore any individual snapshot, or undo an entire session (every post, term, and Elementor page it touched) in one click from the Snapshots page.
Pass an "idempotency_key" in the request arguments. If AICOM sees the same key again — from a dropped connection, a retry, or a duplicate send — it returns the original result instead of repeating the action, so you never end up with two copies of the same post from one intended change.
Yes. Every request is logged to the audit log with timestamp, remote IP, API key label, tool name, parameters, result summary, and response duration. The log is accessible from AICOM → Audit Logs and can be filtered by date, key, or tool name.
MCP is an open standard created by Anthropic for connecting AI models to external tools and data sources. AICOM implements the MCP standard so any MCP-compatible AI client — Claude, OpenClaw, and others — can communicate with your WordPress site natively without custom integrations.
Yes, completely free and open source under the GPL-2.0-or-later license.
Yes. Each API key has an optional IP allowlist. If set, requests from any other IP will be rejected even if the key is valid.
tools/list invoked as an ordinary tool call (rather than the standard tools/list request) was missing the required content field, causing strict MCP clients to reject it.tools/list now only shows the tools an API key can actually call — a key without a given scope no longer sees (and can't waste a round-trip on) tools it would immediately get denied for. Every tool list is scoped to the calling key's real permissions.retryable hint, so an agent can tell whether hammering the same call again could ever help, instead of assuming the server is unreachable.pll.create_bilingual_pair: create a translated draft, set its language, link it to the source post, optionally assign a category and featured image, and verify every step — all in one call. Works from an existing source post, or from scratch (pass source_language + source_post_title to create both language versions in a single call, with no pre-existing post needed).dry_run and idempotency_key are now documented directly in every eligible tool's schema, instead of being accepted but invisible — some strict MCP clients validate outgoing calls against the schema and would silently refuse to send an undocumented parameter.wp.posts.create now reports requested/persisted/verified so you can see exactly what WordPress actually stored versus what was asked for (e.g. a duplicate slug getting a "-2" suffix). Extended the same pattern to wp.posts.update, wp.terms.create, wp.terms.update, wp.meta.set, and wp.meta.set_many.tools/list compatibility bug: a tool with no parameters (e.g. session.close, pll.languages.list) serialized its empty schema as [] instead of {}. Strict MCP clients (Pydantic-based, including Hermes) reject the entire tool list over this single type mismatch, breaking tool discovery — and every tool call — completely. Reported and diagnosed with a full client-side validation log from a user; thank you.class field that was present on every tool in tools/list since v3.8.8. It was never part of the MCP Tool schema and could trip the same kind of strict-client rejection; the same information is now exposed the spec-compliant way via annotations (readOnlyHint/destructiveHint), only included when the negotiated protocol version supports it.tools/list response body for both issues, across both supported protocol versions, so a future change can't silently reintroduce either one.wp.posts.update and wp.terms.update no longer report updated: true when no actual field was supplied — they now return updated: false with a clear warning, and changed_fields listing exactly what changed when something did.slug, media_id) and now reported back in the response as _aliases_applied, so you can see exactly what the plugin auto-corrected instead of it happening silently.requested/persisted/verified, with a warning if they don't match — catches cases like WordPress re-assigning a default category, or Polylang silently rejecting a language change.session.open now reports available_scopes and missing_scopes for the key, scoped to the site's active modules, so an agent can tell upfront whether it has what it needs for a task like a translation workflow — before it starts, not after hitting a scope error partway through.content field on successful tool calls, for full compatibility with strict MCP clients.isError with a description, so agents can see and react to them directly.idempotency_key argument on write/destructive tools — pass the same key on a retried call and AICOM returns the original result instead of repeating the action (e.g. no duplicate post from a dropped connection and retry).manage.polylang.settings being unusable: it was required by pll.term.set_language and pll.string.set but was never registered as a grantable scope, so no API key — not even Full Admin — could hold it.manage.polylang is now "Manage Polylang Post translations" and manage.polylang.settings is "Manage Polylang Term & String translations", each with a tooltip explaining exactly what it does and does not allow.{} instead of [], and added components.schemas required by strict validators. Thanks allanantoni for the detailed report and fix.rest_pre_dispatch intercept bypasses WordPress JSON validation so weak models can connect without "rest_invalid_json" errors.session.status tool — check whether a session is open before calling session.open, avoiding SESSION_ALREADY_OPEN errors.TOOL_NOT_FOUND now includes fuzzy name suggestions ("Did you mean: wp.posts.create?") to guide models that hallucinate tool names.status, content, post_id) are resolved automatically with a hint.manage.polylang scope: post language assignment and translation linking remain under manage.polylang; string translations and term language/linking now require the new manage.polylang.settings scope.inputSchema now returned in tools/list — each tool includes parameter types, descriptions, and required flags so models can call tools correctly without prior knowledge.tools or list_tools method for small-context models.method:"tools/wp.posts.create" pattern and return a corrected JSON-RPC example.tools/call is sent without a name field.aicom.recipes tool returns step-by-step task recipes filtered to the key's actual permissions and active modules.initialize instructions — three exact steps with copy-paste JSON-RPC format.session.status registered as a discovery tool (no session required, no scope required).session_id column on fresh installs — every request was failing the INSERT silently, leaving the Activity tab empty. The fix repairs existing installs automatically on update.initialize, notifications/initialized, and ping now return spec-compliant responses, so strict MCP clients can connect.tools/call and tools/list methods/?aicom=1 for servers without mod_rewrite