<?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>Ask the Raw LLM API From Your Terminal. What Comes Back Is Junk, and That's the Point</title>
      <dc:creator>Jeremy Rivera</dc:creator>
      <pubDate>Sun, 13 Sep 2026 17:37:55 +0000</pubDate>
      <link>https://dev.to/seo-arcade-jeremy/ask-the-raw-llm-api-from-your-terminal-what-comes-back-is-junk-and-thats-the-point-5hh5</link>
      <guid>https://dev.to/seo-arcade-jeremy/ask-the-raw-llm-api-from-your-terminal-what-comes-back-is-junk-and-thats-the-point-5hh5</guid>
      <description>&lt;p&gt;What does the model actually know before the product dresses it up?&lt;/p&gt;

&lt;p&gt;You can find out in five minutes without an SEO tool. Martin McGarry gave me this as his top tip for anyone learning SEO right now, and it's the kind of thing a developer runs once and never sees ChatGPT the same way again. Martin runs &lt;a href="https://searchassistance.co.uk" rel="noopener noreferrer"&gt;Search Assistance&lt;/a&gt; out of Leeds, twenty years into SEO with the first ten on the black hat side. Most of what follows is him. The disavow story is mine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ask the raw API, then ask the chat product
&lt;/h2&gt;

&lt;p&gt;Here's the experiment in his words:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Anyone learning SEO right now, I've got a top tip, is to try the API. Do a little bit of learning. You can pop up Visual Studio, and you can access the API in your terminal. And just ask the raw API a question. So that's the OpenAI LLM, the Gemini LLM, whatever else you use. And just ask a raw question. What you get back is junk."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's it. No tools, no web search flag, no system prompt beyond the question. Something like this, with a question your actual customers ask:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://api.openai.com/v1/chat/completions &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$OPENAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"model":"gpt-4o","temperature":0,
       "messages":[{"role":"user","content":"Which precast concrete fence should I buy for a windy lot in Tennessee?"}]}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the answer. Then paste the identical question into ChatGPT or Gemini and save that answer too, along with every citation it shows you. Now diff them.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"And then you realize that there's some background process augmenting the chat results. So when you use ChatGPT or Gemini, there's something else working in the background."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Everything the chat product knew that the bare model didn't came from a fetch. Martin doesn't dress this up: "the standalone LLM on its own is rubbish, in my opinion. And there's definitely some, we know there's RAG in the background. OpenAI has been called Googling."&lt;/p&gt;

&lt;p&gt;You already knew a chat product is model plus retrieval. What you probably haven't done is measure the gap on your own money queries. That gap is the only part of the answer you can actually influence, and the citations tell you where it fetched from. Martin's version:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"we know SEO is not dead first of all, because these LLMs are having to go out and get extra information from somewhere. So if you learn how that happens, you still learn where you're needed and you still learn where your site needs to be positioned for that RAG or that augmentation to happen."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Three things that keep the experiment honest:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Temperature 0 on the raw call, so the junk is the same junk twice and the delta you record is retrieval, not sampling noise.&lt;/li&gt;
&lt;li&gt;Date every sample. The chat products change what they fetch without telling you.&lt;/li&gt;
&lt;li&gt;Keep the key in an environment variable. The spreadsheet you hand a client is not the place for it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Your RSS feed might be the next llms.txt
&lt;/h2&gt;

&lt;p&gt;This is the idea Martin thinks nobody else has said yet, and you can act on it this afternoon.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I've not really heard anyone say we should be optimizing our RSS feeds or API."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Everyone is arguing about &lt;code&gt;llms.txt&lt;/code&gt; and markdown mirrors. But if part of the retrieval step moves server-side, the machine-readable outputs you already publish (&lt;code&gt;/feed/&lt;/code&gt;, &lt;code&gt;/wp-json/wp/v2/posts&lt;/code&gt;, your XML) are the surfaces a fetch is most likely to read. And most WordPress feeds are actually a mess: truncated excerpts, missing images, junk categories.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"there's a lot of talk about .md files and llms.txt files at the minute and it may be simpler than that. Maybe we just all build RSS feeds"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;He's careful to call it a hunch. "Maybe I'm the first to go down that route. There'll be a whole raft of courses on it by next week on LinkedIn." So treat it as a hypothesis, not a result. But the cost of testing it is close to zero:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open your own &lt;code&gt;/feed/&lt;/code&gt; and read it the way a parser would. Is it full content or an excerpt? (In WordPress that's Settings, Reading, "For each post in a feed, include", or &lt;code&gt;rss_use_excerpt&lt;/code&gt; in the options table.)&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;/wp-json/wp/v2/posts?per_page=5&lt;/code&gt; and check the &lt;code&gt;content.rendered&lt;/code&gt; field isn't full of shortcodes that only your theme understands.&lt;/li&gt;
&lt;li&gt;Tail your access logs for feed and API hits from AI user agents. If something is reading it, you'll see it there before any dashboard tells you.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I've been running a static markdown experiment on my own podcast site. Martin's point is that I may have been building a new door when the machine was already coming in through the one WordPress installed in 2005.&lt;/p&gt;

&lt;h2&gt;
  
  
  The grace period is the hole the spam drives through
&lt;/h2&gt;

&lt;p&gt;Now the part that explains why a clean site falls off page one for no reason.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7sn9vpt8qbt4marbun40.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7sn9vpt8qbt4marbun40.jpg" alt="The spam grace-period loop: a spam page ranks for two or three days, gets tanked, another ten load behind it, and Google reassesses the incumbents while it decides." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Telegram link sellers have scaled an old trick, adding links to brands with their own anchor text advertising their services, to hundreds of thousands of sites. Google largely can't judge a page it hasn't seen ranking, so every new page gets a window:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I think the reason it fails and the reason the expired domains work is because there's a grace period where Google needs things in the SERPs to understand if it's what the user wants or what the user doesn't want."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Inside that window the loop runs like a queue:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"these spam sites can rank a page for two or three days. It gets tanked almost instantly, but there's another 10 waiting to be loaded. And what these spam links have done is made a system where Google is actually reassessing the organic listings that were already there."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That last sentence is the one to read twice. The collateral damage isn't the spam ranking. It's that while Google decides, it re-evaluates the incumbents, and a clean site with a suddenly diluted anchor profile goes under a temporary link penalty it never earned. "you've got 20 sites that are under a temporary link penalty, your expired domain just slots in instantly."&lt;/p&gt;

&lt;p&gt;I had this happen to a door manufacturer. Someone was standing up twenty domains a month on rotated themes and the same CMS content library, pointing junk anchors and image hotlinks at every site in the top 10. Our fix wasn't clever: "we had to develop a hygiene program of an aggressive disavow and check every week." They launched ten more, we disavowed ten more, and the rankings that had tanked climbed back. If you take one operational habit from this piece, make it a weekly job that pulls new referring domains and flags the batch that launched together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Perspective is the thing the fetch can't return
&lt;/h2&gt;

&lt;p&gt;Ask Martin what a company selling hard goods should do for AI search and he doesn't say schema.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0da8zr8dtephwzplsorc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0da8zr8dtephwzplsorc.jpg" alt="Facts versus perspective: the model can fetch size, scale and specs instantly; the buying angle for a specific persona is what a publisher still owns." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"You have a perspective on the product that you sell. And your opinion and your perspective is going to be your currency in the future."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The retrieval step can pull size, scale, colour and every spec in seconds. What it can't pull is a point of view that isn't on the page yet. His standing example: "Who buys a flip-flop for the rain?" Everyone assumes it's summer clothing; someone in a tropical country has a different answer, and that angle only shows up down in the granular buying personas for one product. "AI can't reproduce perspective or opinion."&lt;/p&gt;

&lt;p&gt;For a developer that turns the content problem into a data-modelling one. You don't need a general product page. You need a persona-by-use-case matrix, and a page (or a feed entry) for each cell that says something only you would say.&lt;/p&gt;

&lt;p&gt;So, three things to run this week. What does the raw model say about your best-selling product, and what did the chat product have to fetch to say more? What does your &lt;code&gt;/feed/&lt;/code&gt; actually look like to something that isn't a browser? And which of your pages says something about the product that only you could say?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is a developer's cut of the full interview. The complete recap, with Martin's read on the Helpful Content Update as entity-graph profiling and his iGaming war stories, is at &lt;a href="https://unscriptedseo.com/martin-mcgarry/" rel="noopener noreferrer"&gt;unscriptedseo.com/martin-mcgarry&lt;/a&gt;. The step-by-step version of the raw API experiment is an &lt;a href="https://seoarcade.com/seo-sop-query-the-raw-llm-api-to-see-what-retrieval-adds/" rel="noopener noreferrer"&gt;SEO SOP on SEO Arcade&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>seo</category>
      <category>ai</category>
      <category>webdev</category>
      <category>wordpress</category>
    </item>
    <item>
      <title>The $10 Canonical Loop: How Expired Domains Are Outranking You in Every Market</title>
      <dc:creator>Jeremy Rivera</dc:creator>
      <pubDate>Sun, 13 Sep 2026 14:45:05 +0000</pubDate>
      <link>https://dev.to/seo-arcade-jeremy/the-10-canonical-loop-how-expired-domains-are-outranking-you-in-every-market-1jif</link>
      <guid>https://dev.to/seo-arcade-jeremy/the-10-canonical-loop-how-expired-domains-are-outranking-you-in-every-market-1jif</guid>
      <description>&lt;p&gt;A domain name costs about $10. That is the entire marginal cost of the spam that is outranking legitimate sites in every market Timothy Malmros has checked.&lt;/p&gt;

&lt;p&gt;I have been doing SEO for close to twenty years. I still have conversations that shift how I see the search landscape, and my &lt;a href="https://unscriptedseo.com" rel="noopener noreferrer"&gt;Unscripted SEO Podcast&lt;/a&gt; episode with Timothy was one of them. He spent nearly two decades in gambling affiliate SEO, the vertical where every black hat technique gets field-tested first. He has since retired from active affiliation and now does something rare: he reverse-engineers how the current tricks work and posts the findings publicly, with nothing to sell.&lt;/p&gt;

&lt;p&gt;If you build or maintain websites, you should understand this mechanism, because it explains a lot of what you see in the results pages right now. It also explains why a &lt;code&gt;rel="canonical"&lt;/code&gt; tag, a thing most of us treat as boring hygiene, has become one of the most abused signals on the web.&lt;/p&gt;

&lt;h2&gt;
  
  
  The canonical trick, step by step
&lt;/h2&gt;

&lt;p&gt;Timothy calls it the canonical trick. Here is the loop as he described it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Buy an expired, high-authority domain.&lt;/strong&gt; His example: Carolina Partners, an old mental health clinic. The registrant let it lapse; someone picked it up. The old PDFs are still on it, which is the point. They look like trust.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bombard it with spam links.&lt;/strong&gt; "Links that look like something out of 2002," with anchor text like &lt;em&gt;sweepstakes casinos&lt;/em&gt; and &lt;em&gt;best sweepstakes casinos&lt;/em&gt;. The goal is topical relevance through links, not through content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Canonical the whole thing to a fresh domain.&lt;/strong&gt; Something like &lt;code&gt;toponlinesweeps.us.com&lt;/code&gt; or a throwaway subdomain. The expired domain's accumulated authority now points at the new one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wait about a week.&lt;/strong&gt; The fresh domain ranks. Then it dies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Canonical it again&lt;/strong&gt; to the next $10 domain. Repeat.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In his words: "A domain name costs 10 bucks. So it's infinite. An infinite loop. And it's in every market I've seen so far. Sweden, Germany, the Netherlands, Italy. It's worldwide. It's absolute spam that's ranking. And since it's everywhere, there's no solution in place."&lt;/p&gt;

&lt;p&gt;The part that should bother anyone who has ever written a canonical tag: this is the tag being used exactly as specified. Google's own guidance from 2008 describes consolidating signals from one URL to another. The spec is fine. The referee is missing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it works: the grace period
&lt;/h2&gt;

&lt;p&gt;The interesting question is not &lt;em&gt;whether&lt;/em&gt; Google can detect it. It is &lt;em&gt;when&lt;/em&gt;. Timothy's read is that Google has to put a page in the results before it can judge whether users want it:&lt;/p&gt;

&lt;p&gt;"There's a grace period where Google needs things in the SERPs to understand if it's what the user wants or what the user doesn't want. And it's the grace period that seems to help these tactics flood the SERPs."&lt;/p&gt;

&lt;p&gt;A spam page can rank for two or three days, get tanked, and there are ten more queued behind it. Automation makes the grace period a feature. And there is collateral damage: the same spam link networks that prop up the throwaway domains also fire junk anchors at the legitimate sites already ranking, which puts &lt;em&gt;those&lt;/em&gt; sites under review. "You've got 20 sites that are under a temporary link penalty, your expired domain just slots in instantly."&lt;/p&gt;

&lt;p&gt;So the incumbents get pushed down not by being outcompeted, but by being contaminated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it works at all: links still decide
&lt;/h2&gt;

&lt;p&gt;Timothy is blunt about the underlying model. "How many times can you write about sweepstakes? How do you know which one is the best? It's the same content. What determines the rankings are the links."&lt;/p&gt;

&lt;p&gt;That is uncomfortable for people who have spent years on content quality, and it matches what I have seen in verticals where the content is functionally identical across competitors. When the words cannot differentiate, the link graph does, and the link graph is exactly what expired domains let you buy.&lt;/p&gt;

&lt;p&gt;He is also honest about the limits of his own model. Some drop domains work and some do not, and he cannot always tell why. Tori Spelling's old site, repurposed as a crypto casino portal with a monster backlink profile, does not rank. An old UV-armband store in Sweden, with an unimpressive link profile, dominated Swedish gambling queries with the same trick. "Either it's roulette, or there's something I'm missing." Anyone who claims to know precisely which signals Google weighs here is probably selling something.&lt;/p&gt;

&lt;h2&gt;
  
  
  The referee left the building
&lt;/h2&gt;

&lt;p&gt;The historical context is what turns this from a curiosity into a structural problem. Timothy used to do the old-school version of this himself:&lt;/p&gt;

&lt;p&gt;"I must have snapped 2,000 domains, easy. But then it stopped working, because there was a referee. And this is the big problem here. There's no referee now. Google used to have a huge anti-spam team, so they would stop this very quickly. Now it takes years."&lt;/p&gt;

&lt;p&gt;His theory on why is provocative but worth sitting with: the moment ChatGPT launched, Google had a real competitor, resources moved to the AI race, and the manual spam-fighting capacity went with them. Whether or not that is the full story, the observable result is a long lag between a tactic appearing and Google acting on it. Parasite SEO took roughly six years to get a real crackdown. He expects the canonical trick to last another five or six.&lt;/p&gt;

&lt;h2&gt;
  
  
  Faking brand signals for rent
&lt;/h2&gt;

&lt;p&gt;One more layer, because it connects to something in the Google leak: click metrics matter, and they can be bought.&lt;/p&gt;

&lt;p&gt;"You can rent a box of Android phones, just a motherboard, each connected to a VPN, managed from home. You can send bots to go through the search results, click on your site, and increase bounce rate. And it's not that expensive."&lt;/p&gt;

&lt;p&gt;The bots are simulating what a real brand earns. Timothy's example is Ninja Casino in Sweden: terrible backlink profile, but so much TV advertising that brand searches pushed it to position one or two for &lt;em&gt;casino&lt;/em&gt;. When Swedish regulation hit and the ads stopped, it fell off a cliff. The bot farms are counterfeiting that curve. Borrowed time, but it works until it does not.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do with this if you run a real site
&lt;/h2&gt;

&lt;p&gt;I am not going to tell you to canonical your way into a gambling SERP. Here is what I actually take from it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Watch your inbound anchor text weekly.&lt;/strong&gt; I had a manufacturing client in the door niche where someone was standing up ten to twenty junk domains a month and firing irrelevant anchors at everyone in the top ten. An aggressive weekly disavow routine brought the rankings back. If your anchor profile suddenly fills with garbage, you may be collateral damage in someone else's grace-period play.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treat canonical tags as a security surface, not just an SEO setting.&lt;/strong&gt; A compromised site with an injected canonical is a quiet way to hand your authority to someone else. Audit them the way you audit redirects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Own something Google cannot reshuffle.&lt;/strong&gt; An email list, a community, a podcast audience. The channel where a $10 domain can outrank you for a week at a time is not a foundation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stay off the shortcuts.&lt;/strong&gt; The Ninja Casino arc is the whole lesson. Signals that simulate a brand collapse the moment the simulation stops.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Timothy's closing line is the one I keep coming back to: "Whatever works, you see it in gambling first, because that's where the money is. The more lucrative it is, the shadier it gets."&lt;/p&gt;




&lt;p&gt;The full conversation is on the &lt;a href="https://unscriptedseo.com/timothy-malmros-on-black-hat-seo-drop-domains-the-canonical-trick/" rel="noopener noreferrer"&gt;Unscripted SEO Podcast&lt;/a&gt;, and the longer write-up with the Medic-update and SEO-tools tangents is on &lt;a href="https://jeremyriveraseo.com/what-timothy-malmros-taught-me-about-the-10-loop-ranking-spam-in-every-market-on-earth/" rel="noopener noreferrer"&gt;my site&lt;/a&gt;. Timothy posts his ongoing black hat research on &lt;a href="https://www.linkedin.com/in/timothy-m-59a216b/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>google</category>
      <category>webdev</category>
      <category>security</category>
    </item>
    <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>
