Go Back to Parent Doc

FAQ & Troubleshooting

General

What is MCP, in one paragraph?
The Model Context Protocol is a standard way for an AI client to talk to an external system. The system exposes tools — named operations with typed arguments — and the client’s model decides which to call. Sokket makes your WordPress site one of those systems, so instead of pasting error logs and post content into a chat window, the agent reads them itself.

Does this plugin send my content to an AI company?
No. Sokket makes no outbound requests to any AI provider or any other external service. AI clients that you configure connect to your site, authenticate with a credential you created, and can only use the tools you allowed. What the client’s own vendor does with the data you ask it to fetch is governed by their privacy policy, not by this plugin.

Do I need an OpenAI or Anthropic API key?
No. Sokket stores no AI credentials at all. Your AI client brings its own subscription and authenticates to your site with a token or an OAuth connection.

Is it free?
Yes — the plugin on WordPress.org is the complete MCP server, with all 20 tools, OAuth 2.1, per-token permissions, and the audit log. Sokket Pro adds file, database, WP-CLI, and administration tools.

Which AI clients work with it?
Any MCP-compatible client that supports remote servers over Streamable HTTP: Claude Code, Claude Desktop, ChatGPT, Cursor, VS Code, Windsurf, and others. See Connecting Your AI Client.

Is it safe on a production site?
That’s the design target. The server is disabled by default, every request needs a credential bound to a WordPress user, every call is capability-checked, every write tool is off until you enable it, and any credential can be revoked instantly. See Security & Privacy.

Can the AI break my site?
Only inside the permissions you granted. A read-only connection physically cannot write. A connection bound to an Editor can’t reach plugins or settings. And the free plugin ships no filesystem-write, database, or command-execution tools at all.

Can I use it on a multisite install?
Sokket runs per site. Each site in a network has its own settings, tokens, tables, and endpoint, so you connect clients to each one separately.

Connecting

"Test connection" says the endpoint didn’t return JSON.
Something between the internet and WordPress is intercepting the request. In order of likelihood: ① a security plugin or firewall blocking /wp-json/ or REST requests carrying an Authorization header; ② a plugin or snippet that disables the REST API entirely — Sokket cannot work without it; ③ permalinks: re-save Settings → Permalinks and try again; ④ a server rule (Nginx, ModSecurity, a CDN) stripping the Authorization header before PHP sees it. Sokket falls back to getallheaders() for the Apache/FastCGI case, but a rule that removes the header entirely is beyond its reach.

My client says 401 Unauthorized.
Work through these in order:

  • Is Enable MCP server actually ticked and saved? While it’s off, every request is rejected.
  • Was the token copied whole? It’s shown once, and a truncated paste is the most common cause. If in doubt, revoke it and create a new one.
  • Is the header exactly Authorization: Bearer YOUR_TOKEN — one space, correct case, no quotes around the value?
  • Was the token revoked? Check the Access tab.
  • Does the bound user still exist? A token whose user was deleted stops working.
  • For OAuth: is Enable OAuth 2.1 on? Turning it off invalidates every OAuth connection while leaving bearer tokens alone.

My client says 404.
Either the endpoint URL is wrong — copy it from the General tab rather than typing it — or your session expired. Sessions last 15 minutes of inactivity, and an unknown session id deliberately returns 404 so the client re-initializes. A well-behaved client reconnects on its own; if yours doesn’t, restart it.

405 Method Not Allowed when I open the endpoint in a browser.
That’s correct behaviour. GET returns 405 because this server offers no server-initiated stream — MCP traffic is POST. You cannot test the endpoint by visiting it.

429 Too Many Requests.
The rate limit is 120 requests per minute per credential. An agent in a tight loop will hit it; wait a minute. Developers can raise it with the sokket_rate_limit_per_minute filter.

Cross-origin requests are not allowed.
Sokket rejects requests whose Origin header names another host — DNS-rebinding protection. Native MCP clients don’t send one, so this usually means something browser-based is calling the endpoint from another site.

Tools & permissions

A tool I enabled isn’t in my client’s list.
Three possibilities, in order:

  1. The client cached the list. Tool lists come from the handshake, and this server doesn’t push change notifications. Reconnect the server in your client, or restart it.
  2. The bound user lacks the capability. tools/list hides tools the user can’t call, so an Editor-bound token never shows list_plugins no matter what’s ticked. Check the Tool Reference for the capability each tool needs.
  3. The connection is read-only. Every write tool is hidden and blocked. Untick Read-only on the token to release them.

"This token is not permitted to call this tool."
Gate 1: the tool isn’t ticked on that token. Edit it on Settings → Access. Note that revoking and re-granting is not needed — allowlist changes apply on the very next request.

"The connected user lacks the capability required by this tool."
Gate 3: the tool is allowed, but the bound WordPress user cannot do it. Either bind a new token to a higher-privileged user, or accept the limit — that’s the model working as intended.

I updated the plugin and the new tools aren’t available.
Bearer tokens keep exactly the tools they were granted; new tools arrive unticked, on purpose, so an update never widens a decision you already made. Edit the token and tick what you want.

OAuth connections are different: they’re scope-based, not per-tool, so they pick up new tools automatically — within their access level. A read-only OAuth connection will not gain new write tools; the user has to reconnect and choose Full access. In both cases, reconnect the server in your client so it refreshes its cached tool list.

Can I restrict an OAuth connection to specific tools?
Not today — OAuth grants carry a read-only or full-access scope, not a tool list. When you need per-tool control, issue a bearer token instead. See OAuth 2.1 Connections.

"You are not allowed to publish this post type."
create_post and update_post accept publish and private only when the bound user can publish that post type — a Contributor-bound connection gets this error rather than a silent downgrade to draft. Bind the connection to a user with publishing rights, ask for draft or pending, or publish it yourself.

Can it delete posts, terms, or comments?
No. There is no delete tool for posts or terms, and moderate_comment can trash a comment but never permanently delete one — and it can untrash it again.

Uploads

upload_media refuses my file.
The likely reasons, in order: it isn’t a raster image (only JPEG, PNG, GIF, WebP, and AVIF are accepted, and SVG is always refused); the decoded bytes aren’t really the image type the name claims — the type is read from the content, not the filename; the file exceeds the per-file cap (8 MB by default); or the hourly budget is used up (20 files / 25 MB per user per hour by default). All the numbers are filterable — see the Developer Reference.

Can I have it fetch an image from a URL?
No, and this is deliberate. Sokket makes no outbound requests, which is what keeps "no external service calls" literally true and keeps SSRF off the table. The client sends the bytes base64-encoded over the connection it already opened.

OAuth

Claude Desktop won’t connect.
Check that Enable OAuth 2.1 is on and the MCP server itself is enabled — the OAuth toggle does nothing on its own. Then confirm your site is on HTTPS, and leave Client ID and Client Secret blank in the connector dialog so the client can register itself.

The consent screen says the form expired.
The nonce timed out or the flow was restarted mid-way. Start the connection again from your client.

"This account may not authorize MCP connections."
The sokket_oauth_user_can_authorize filter is restricting who may approve. By default any logged-in user can, for their own account, so a site with this message has a snippet or add-on tightening it.

A connection stopped working after a while.
Access tokens last an hour and refresh tokens 30 days. Clients refresh silently, but a connection unused for over 30 days needs to be approved again. Also check that the grant wasn’t revoked on Connections → OAuth, and that OAuth is still enabled.

A redirect URI error.
Redirect URIs are matched byte for byte against the registered set. A trailing slash the client doesn’t send is enough to break it. For a manually added client, copy the URI exactly as the client’s documentation gives it.

Data & privacy

What does the audit log store?
Timestamp, user, tool name, outcome, and the object id acted on. Never the arguments — no post content, no search terms, no upload bytes. See Audit Log.

Does the AI client see personal data?
Whatever the bound user can see through the tools you enabled. Two to think about: list_comments returns commenter email addresses, and get_site_settings includes the site’s admin email. Leave those off if you’d rather not share them.

What happens if I delete the plugin?
Everything goes: the tokens, audit log, and OAuth tables are dropped, the options are deleted, and the transients are cleared. Every credential stops working immediately.

Still stuck?

Open a support ticket with your WordPress and PHP versions, the plugin version, which AI client you’re connecting, whether you’re using a bearer token or OAuth, and the exact error your client shows. We read every ticket.

Shopping Cart
  • Your cart is empty.