<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jeremy Rivera</title>
    <description>The latest articles on DEV Community by Jeremy Rivera (@seo-arcade-jeremy).</description>
    <link>https://dev.to/seo-arcade-jeremy</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4056819%2F61f763d8-a7b7-4109-ad33-aebc97ab1101.png</url>
      <title>DEV Community: Jeremy Rivera</title>
      <link>https://dev.to/seo-arcade-jeremy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/seo-arcade-jeremy"/>
    <language>en</language>
    <item>
      <title>I Wired 11 WordPress Sites to an LLM With MCP. Here’s Some Things That Broke.</title>
      <dc:creator>Jeremy Rivera</dc:creator>
      <pubDate>Fri, 31 Jul 2026 15:08:39 +0000</pubDate>
      <link>https://dev.to/seo-arcade-jeremy/i-wired-11-wordpress-sites-to-an-llm-with-mcp-heres-everything-that-broke-2ch0</link>
      <guid>https://dev.to/seo-arcade-jeremy/i-wired-11-wordpress-sites-to-an-llm-with-mcp-heres-everything-that-broke-2ch0</guid>
      <description>&lt;p&gt;I’m not a developer by trade. I’ve spent about twenty years in SEO — Raven Tools, TapClicks, now my own &lt;a href="https://seoarcade.com" rel="noopener noreferrer"&gt;seo agency shop&lt;/a&gt; and a &lt;a href="https://unscriptedseo.com" rel="noopener noreferrer"&gt;podcast network&lt;/a&gt;. But somewhere in the last year I ended up maintaining a production content pipeline that runs on Model Context Protocol servers, publishes to eleven WordPress installs, schedules across eight social platforms, and composites video with ffmpeg in a sandboxed container.&lt;/p&gt;

&lt;p&gt;It works. It also broke in about a dozen ways that no MCP tutorial mentions, because every MCP tutorial stops at “and now the model can read your files!”&lt;br&gt;
Here’s the part after that.&lt;br&gt;
MCP is trivially easy. That’s the trap.&lt;/p&gt;

&lt;p&gt;An MCP server is a thin wrapper around an HTTP call. That’s genuinely it. If you can write an Express route, you can write an MCP server. I’ve watched Claude Code scaffold one in an afternoon.&lt;/p&gt;

&lt;p&gt;Which means the moment you start planning an integration, the protocol is not your constraint. The constraint is always one of these:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Will the platform issue you a token?&lt;/li&gt;
&lt;li&gt;What does the tool do when it’s half working?&lt;/li&gt;
&lt;li&gt;What does the model do when the tool lies to it?&lt;/li&gt;
&lt;li&gt;What happens when Claude pretends something is working when it’s broken?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Number one is a business problem. &lt;/p&gt;

&lt;p&gt;Numbers two, three and four are where I lost actual weeks.&lt;/p&gt;

&lt;p&gt;Eg I spent two whole weeks where Desktop Claude pretended to access my Obsidian Vault but was just mining my previous chats for answers, the lie surfaced when I got deeper into using terminal and stopped feeding Desktop materials&lt;/p&gt;

&lt;p&gt;Failure mode Confident Liar: the connector that’s registered but not connected&lt;br&gt;
The single most disorienting bug in my whole setup. A connector appears in your server list. It shows up in config. The model can see its name. And it exposes zero callable tools.&lt;/p&gt;

&lt;p&gt;You get some variation of “Server X is not connected — the user needs to connect this integration.” But it’s listed. It’s right there.&lt;br&gt;
Ten of my sites run one WordPress MCP adapter at /wp-json/royal-mcp/v1/mcp. One site ran a different default adapter at /wp-json/mcp/mcp-adapter-default-server. The odd one out was the only one that wouldn’t handshake — and it took me an embarrassingly long time to notice the URL pattern difference, because “it’s in the list” reads as “it’s connected.”&lt;br&gt;
Lesson: registration and authentication are separate states, and most tooling collapses them into one green dot. When you’re standardizing a fleet, standardize the adapter, not just the endpoint. One-off integrations are where your debugging time goes to die.&lt;/p&gt;

&lt;p&gt;Failure mode Ghost Problems: transient failures that look permanent&lt;/p&gt;

&lt;p&gt;Two of my connectors regularly return No approval received on the first call and succeed on an immediate retry. Same payload. Same session. Seconds apart.&lt;br&gt;
If you’re building agentic workflows, this matters more than it sounds. A human sees a failure, shrugs, hits it again. A model sees a failure and reasons about it — it’ll write you a beautifully argued paragraph about how your authentication has lapsed and you should check your plugin settings. It’s confidently wrong, and now you’re chasing a ghost.&lt;/p&gt;

&lt;p&gt;Lesson: bake retry-with-backoff into your tool layer, not your prompt layer. Do not make the model responsible for distinguishing flaky from broken. It’s bad at it, and it’s bad at it persuasively.&lt;/p&gt;

&lt;p&gt;Failure mode Capability Mismatch: tools that are narrower than they look&lt;/p&gt;

&lt;p&gt;wp_upload_media sounds like it uploads media. It uploads images. Hand it a .pptx and you get an instant rejection on MIME type — not a size limit, not a timeout, a type check firing before a single byte transfers.&lt;br&gt;
That restriction lives in the connector, not in WordPress. And WordPress also blocks .pptx in its default allowlist. Two independent gates, one generic-sounding tool name.&lt;br&gt;
Similarly: wp_update_post overwrites the entire content field. Not a patch. Not a merge. The whole thing. If you’re feeding it partial content, you just deleted a page.&lt;/p&gt;

&lt;p&gt;Lesson: tool descriptions are marketing copy for the model. They describe the happy path. Read the actual implementation, or probe the edges deliberately before you trust anything destructive.&lt;/p&gt;

&lt;p&gt;Failure Mode Wrong Tool Use: MCP is a fragile toy&lt;/p&gt;

&lt;p&gt;At the end of the day I wasted SOOOO much time rejoicing for my “unlock” of using MCP for my wordpress sites. &lt;/p&gt;

&lt;p&gt;Truth: it was the wrong tool, broke on plugin updates and was not consistent.&lt;/p&gt;

&lt;p&gt;Honestly the solution was REST access the whole time. Claude code could do 10000x what the limited MCP could deliver and was insanely easy to setup immediately and has not had a fraction of the problems.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>seo</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
