<?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: David Hamilton</title>
    <description>The latest articles on DEV Community by David Hamilton (@david_hamilton).</description>
    <link>https://dev.to/david_hamilton</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%2F3916751%2F05e8e6cb-676e-4eb4-aca0-718014cdb7b9.jpg</url>
      <title>DEV Community: David Hamilton</title>
      <link>https://dev.to/david_hamilton</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/david_hamilton"/>
    <language>en</language>
    <item>
      <title>Nobody Reads Your llms.txt. Except Claude Code.</title>
      <dc:creator>David Hamilton</dc:creator>
      <pubDate>Fri, 24 Jul 2026 10:51:10 +0000</pubDate>
      <link>https://dev.to/david_hamilton/nobody-reads-your-llmstxt-except-claude-code-581d</link>
      <guid>https://dev.to/david_hamilton/nobody-reads-your-llmstxt-except-claude-code-581d</guid>
      <description>&lt;p&gt;Ask a room of SEOs whether you need an llms.txt file and you will get an argument. Ask what actually fetches the file and the room goes quiet.&lt;/p&gt;

&lt;p&gt;There is data now, and it is not kind. Ahrefs pulled server logs from 137,210 domains. 28% of them publish an llms.txt. In May 2026, &lt;strong&gt;97% of those files received zero requests.&lt;/strong&gt; Around 1,100 domains saw any traffic to the file at all.&lt;/p&gt;

&lt;p&gt;That sounds like the end of the story. It is not, because the small slice of requests that did land tells you exactly who this file is for, and it is not who anybody was optimizing for.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the file actually is
&lt;/h2&gt;

&lt;p&gt;llms.txt is a Markdown file at the root of your domain, at &lt;code&gt;/llms.txt&lt;/code&gt;, listing your most important pages with a one-line description of each. Jeremy Howard published the proposal on September 3, 2024.&lt;/p&gt;

&lt;p&gt;The reasoning is good. A docs page rendered as HTML is mostly not documentation. It is nav bars, sidebars, cookie banners, and framework wrapper divs. Make a model chew through all of that and it spends most of a fetch on nothing. A Markdown index costs a fraction of the tokens and points straight at the pages that matter.&lt;/p&gt;

&lt;p&gt;The format is simple and only the H1 is required. Cloudflare publishes a clean example, trimmed here:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Cloudflare Developer Documentation&lt;/span&gt;
&lt;span class="gt"&gt;
&amp;gt; Each product below links to its own llms.txt, which contains a full index&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; of that product's documentation pages.&lt;/span&gt;

&lt;span class="gu"&gt;## Application performance&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Argo Smart Routing&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://developers.cloudflare.com/argo-smart-routing/llms.txt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;: Route web traffic across the fastest, most reliable network paths
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Cache / CDN&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://developers.cloudflare.com/cache/llms.txt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;: Make websites faster by caching content across our global network
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two things worth stealing from that. Cloudflare nests the format, so every product gets its own llms.txt and the root file becomes a directory of directories. And every link carries a description, which is the part most people skip and the part that does the actual work. A bare list of URLs tells a model nothing about which one to open.&lt;/p&gt;

&lt;p&gt;There is a sibling file, &lt;code&gt;llms-full.txt&lt;/code&gt;, which is the whole docs set flattened into one large Markdown file so an agent can load everything in a single request. It is not in the original proposal. It grew out of documentation platforms, Mintlify in particular, and it spread because it is what an agent actually wants when you point it at a docs site.&lt;/p&gt;

&lt;h2&gt;
  
  
  The SEO question is settled, and the answer is no
&lt;/h2&gt;

&lt;p&gt;Google's AI features documentation says you do not need to create new machine readable files or AI text files to appear in AI Overviews or AI Mode. John Mueller has separately called llms.txt speculative, compared it to the keywords meta tag, and pointed out the awkward fact that no AI system uses it.&lt;/p&gt;

&lt;p&gt;robots.txt works because crawlers agreed to obey it. sitemap.xml works because search engines agreed to consume it. llms.txt is a good idea that shipped without a counterparty. If you added one hoping to appear in more AI answers, you did not get what you paid for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Now the interesting half
&lt;/h2&gt;

&lt;p&gt;Ahrefs did not just count the zeros. They named the requests that landed.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Fetcher&lt;/th&gt;
&lt;th&gt;Share of requests&lt;/th&gt;
&lt;th&gt;What it is doing&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SEO audit tools&lt;/td&gt;
&lt;td&gt;21.7%&lt;/td&gt;
&lt;td&gt;Checking whether the file exists, for a report&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;General web crawlers&lt;/td&gt;
&lt;td&gt;13.1%&lt;/td&gt;
&lt;td&gt;Indiscriminate crawling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPTBot&lt;/td&gt;
&lt;td&gt;4.51%&lt;/td&gt;
&lt;td&gt;OpenAI's crawler&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude-Code indexer&lt;/td&gt;
&lt;td&gt;3.52%&lt;/td&gt;
&lt;td&gt;A developer's coding agent reading docs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ClaudeBot&lt;/td&gt;
&lt;td&gt;0.8%&lt;/td&gt;
&lt;td&gt;Anthropic's web crawler&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OAI-SearchBot&lt;/td&gt;
&lt;td&gt;0.74%&lt;/td&gt;
&lt;td&gt;OpenAI's search-facing bot&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Read that table twice.&lt;/p&gt;

&lt;p&gt;The single largest consumer of llms.txt is SEO tooling checking whether you have an llms.txt. A snake eating its own tail.&lt;/p&gt;

&lt;p&gt;And the second largest named AI fetcher is Claude Code. That is not a search engine discovering your brand. That is a developer sitting in a terminal who already knows your product exists, pointing an agent at your documentation and telling it to go read the auth flow.&lt;/p&gt;

&lt;p&gt;Every IDE agent has converged on the same behavior. Point Cursor, Windsurf, Claude Code, or Copilot at a docs site and the first thing it reaches for is &lt;code&gt;/llms.txt&lt;/code&gt; and &lt;code&gt;/llms-full.txt&lt;/code&gt;, because that is the cheapest possible way to load a doc set.&lt;/p&gt;

&lt;p&gt;llms.txt is a documentation delivery format that got marketed as an SEO tactic. That mismatch is why every study of it reads like a failure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Writing one, in about ten minutes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. List the pages you would send a new hire:&lt;/strong&gt; Not every page. The ones that say what the thing is, how to install it, and how to do the three most common jobs. Fifteen to fifty links is a normal range. A file with 400 links is a sitemap with extra steps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Write the H1 and the blockquote:&lt;/strong&gt; The H1 is your project name. The blockquote is one or two sentences that let a model understand what you are before it reads anything else. Be concrete. "MCP-native tools that connect Claude and Cursor to the data they are missing" beats "a platform for modern teams".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Group the links under H2 headings:&lt;/strong&gt; By product, by job, or by section of your docs. The heading is context, so name it something a model can reason about. "Getting started" and "API reference" are useful. "Resources" is not.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Give every link a description:&lt;/strong&gt; The format is &lt;code&gt;[Page title](https://example.com/page/): what this page covers&lt;/code&gt;. If your pages already have meta descriptions, reuse them. This is the highest-value part of the file and the part most published examples get lazy about.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Generate it, do not hand-maintain it:&lt;/strong&gt; A hand-written llms.txt goes stale in a month. Generate it from your docs navigation and each page's frontmatter at build time and it cannot drift from the real doc set. On a static site that is twenty lines of build code.&lt;/p&gt;

&lt;p&gt;Serve it as &lt;code&gt;text/plain&lt;/code&gt; at &lt;code&gt;https://yourdomain.com/llms.txt&lt;/code&gt; and use absolute URLs. Relative links are the most common mistake and they break the file for any agent that fetched it from somewhere else.&lt;/p&gt;

&lt;h2&gt;
  
  
  So should you ship one
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Ship it if you have documentation:&lt;/strong&gt; If developers point AI tools at your docs, this is the difference between an agent reading a clean index and an agent scraping four rendered HTML pages to find your auth flow. That is a real improvement for the exact person most likely to become a customer, and it costs a build script.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Skip it if you run a marketing site and want AI visibility:&lt;/strong&gt; A ten-page site about your agency does not need a machine-readable index of ten pages. Nothing will fetch it, and the hour costs you an hour of the work that does move citations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Never treat it as a substitute for the fundamentals:&lt;/strong&gt; It cannot make thin content citable, it cannot fix a page that renders as an empty shell without JavaScript, and it grants no crawl permission you did not already give in robots.txt.&lt;/p&gt;

&lt;p&gt;The uncomfortable version, since somebody should say it. A lot of llms.txt advice exists because "add this file" is an easy thing to sell and an easy thing to check off. It has the shape of a deliverable, it takes minutes, and nobody can prove it did nothing. That combination is exactly how the keywords meta tag survived for a decade after it stopped mattering. Ship the file for the coding agents. Do not put it in a strategy deck.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to tell whether yours is doing anything
&lt;/h2&gt;

&lt;p&gt;Grep your access logs for &lt;code&gt;llms.txt&lt;/code&gt; and look at the user agents. That is the only measurement that answers the real question. Coding-agent traffic means the file is doing its job. Three months of nothing but audit tools tells you exactly what it is worth to you.&lt;/p&gt;

&lt;p&gt;If your goal was AI visibility, measure the outcome instead of the tactic. Ask your target questions in ChatGPT, Claude, and Perplexity and record whether you get named at all.&lt;/p&gt;

&lt;p&gt;Full disclosure, I build tooling in this space. &lt;a href="https://contextbolt.com/seo/" rel="noopener noreferrer"&gt;ContextBolt SEO&lt;/a&gt; is a hosted SEO MCP server. You paste one URL into Claude Code, Cursor, or Codex, then ask in plain language whether AI tools are mentioning you and how your share of voice is moving against named competitors, plus the keyword, rank, and backlink work you would otherwise open a $129 tool for. It is $35 a month, month to month.&lt;/p&gt;

&lt;p&gt;The longer version of this, with the full spec table and a copyable example, is my guide on &lt;a href="https://contextbolt.com/blog/llms-txt/" rel="noopener noreferrer"&gt;how to write an llms.txt file&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;llms.txt is a good file with a bad reputation, earned by the people who oversold it. It is not a ranking signal and it never was. It is how you hand a coding agent your documentation without making it read your nav bar. Judged as that, it works.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>seo</category>
      <category>webdev</category>
      <category>documentation</category>
    </item>
    <item>
      <title>Your Site Audit Found 400 Issues. You'll Fix Four.</title>
      <dc:creator>David Hamilton</dc:creator>
      <pubDate>Wed, 22 Jul 2026 10:34:38 +0000</pubDate>
      <link>https://dev.to/david_hamilton/your-site-audit-found-400-issues-youll-fix-four-3p7j</link>
      <guid>https://dev.to/david_hamilton/your-site-audit-found-400-issues-youll-fix-four-3p7j</guid>
      <description>&lt;p&gt;Ask Claude to audit a page and it does a genuinely good job. Ask it to audit your site and something quietly goes wrong. It reads your homepage, tells you the title is a bit long, and calls that a site audit.&lt;/p&gt;

&lt;p&gt;You have not audited a site. You have audited one page and rounded up.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problems that cost you traffic are never on one page
&lt;/h2&gt;

&lt;p&gt;They live in the pattern. Forty posts sharing one meta description because the template forgot to fill it in. Every product page rendering three H1s. A sitemap full of URLs that redirect.&lt;/p&gt;

&lt;p&gt;None of that is visible from inside one page, because the bug is the relationship between pages, not the page itself.&lt;/p&gt;

&lt;p&gt;Four kinds of problem only show up when you look at many pages together.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Duplicates across pages:&lt;/strong&gt; Two pages with the same title compete with each other. You cannot see that from either page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Template bugs:&lt;/strong&gt; If your blog layout drops the H1, every post is missing an H1. A page audit reports one missing H1 and you fix one page. A site audit reports "no H1 on 38 pages" and you fix the layout file. Same effort, forty times the result.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Broken plumbing:&lt;/strong&gt; Sitemap entries that 404, canonicals pointing at pages that no longer exist, redirect chains three hops deep.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scale, so you can prioritize:&lt;/strong&gt; "Your title is long" is a shrug. "Your title is long on 61 pages, and 9 have no H1 at all" is a work order.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why "audit my site" only audits one page
&lt;/h2&gt;

&lt;p&gt;Hand Claude a URL and it fetches that page. That is the whole behavior. No crawler, no sitemap parser, no memory of the last forty pages it read. So when you say "audit my site," it does the only thing it can.&lt;/p&gt;

&lt;p&gt;This is the same limitation behind every other SEO job. Claude is excellent at judgment and blind to live data. MCP is how you close that gap. An SEO MCP server gives Claude a tool that takes a domain, reads its sitemap, fetches a batch of pages, and returns structured data instead of a wall of HTML.&lt;/p&gt;

&lt;p&gt;Once that tool exists, "audit my site" becomes a real instruction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nobody fixes 400 issues
&lt;/h2&gt;

&lt;p&gt;Here is the uncomfortable part, and it applies to nearly every audit product on the market, mine included until I built the thing that fixes it.&lt;/p&gt;

&lt;p&gt;Run a classic site audit and you get a number. 400 issues found. It feels thorough. It is also the most useless output in SEO, because nobody has ever fixed 400 issues. You skim it, fix the four that look easy, promise to come back, and never do.&lt;/p&gt;

&lt;p&gt;The scary first-run number is a marketing asset. It sells the subscription. It does not improve the site.&lt;/p&gt;

&lt;p&gt;The run that improves the site is the second one. You fix a template, you re-audit, and you find out whether the number moved. That loop is where the work happens, and it is the part almost nothing is designed for. Most tools return you to a static report from last Tuesday, or worse, silently crawl a fresh set of pages so the comparison is meaningless.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An audit you run once is a to-do list. An audit you run twice is a system.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If your audit cannot answer "did my fix work," it is a report, not a tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  The five-move workflow
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Point it at the domain:&lt;/strong&gt; "Audit mysite.com." It discovers the sitemap, ranks pages by structural importance, and audits the top batch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read the fix list from the top:&lt;/strong&gt; Order by severity times pages affected. The top item is almost always a template bug, which is one edit with a large blast radius.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix the top item in the same session:&lt;/strong&gt; This is the advantage of auditing inside an agent instead of a browser tab. Claude already has your repo open. Say "fix the missing H1s" and it edits the layout file rather than describing the edit. Review the diff like any other change.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Re-audit and read the delta:&lt;/strong&gt; Same pages, not a fresh crawl. Health 74 to 89. Missing H1 fixed on 38 pages. One new issue introduced. That line is the whole point.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Then go page by page:&lt;/strong&gt; Now that nothing is systematically broken, per-page work is worth doing.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Audit 25 pages, not 5,000
&lt;/h2&gt;

&lt;p&gt;The instinct is to crawl everything. Resist it.&lt;/p&gt;

&lt;p&gt;Almost every site is a handful of templates wearing different content. Audit 25 pages chosen across those templates and you find nearly every repeating problem the site has. Auditing 5,000 finds the same ten problems five hundred times each and buries the two genuinely unique ones.&lt;/p&gt;

&lt;p&gt;Google puts the crawl-budget threshold at roughly a million pages changing weekly. If that is you, a dedicated crawler earns its place. For everyone else, the twenty-sixth page rarely tells you anything the first twenty-five did not.&lt;/p&gt;

&lt;p&gt;There is a second reason. A fix list you can finish is worth more than a complete one you will not start.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this will not do
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It is not an unlimited scheduled crawler:&lt;/strong&gt; If you need a nightly crawl of every URL you own with historical graphs, a dedicated crawler is the right tool and I would say so.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It grades mechanics, not quality:&lt;/strong&gt; An automated check catches a missing H1 or a 404. It cannot tell you your post is boring or off-intent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speed is a separate pass:&lt;/strong&gt; Core Web Vitals need field data from real visitors. Reading your HTML is not measuring what your users experience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It cannot tell you what to care about:&lt;/strong&gt; The audit sorts by severity and reach. It does not know that one of those 38 pages earns 80% of your traffic. Bring your own Search Console data and the priorities change.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How I run it
&lt;/h2&gt;

&lt;p&gt;Full disclosure, I build one of these. &lt;a href="https://contextbolt.com/seo/" rel="noopener noreferrer"&gt;ContextBolt SEO&lt;/a&gt; is a hosted SEO MCP server. You get one URL, you paste it into Claude Code, Claude Desktop, Cursor, or Codex, and your agent can run both audits. &lt;code&gt;page_audit&lt;/code&gt; covers one URL, &lt;code&gt;site_audit&lt;/code&gt; covers the site.&lt;/p&gt;

&lt;p&gt;It reads the sitemap, picks the structurally important pages, checks titles over 60 characters, descriptions outside 120 to 155, missing or multiple H1s, thin content, broken pages, redirecting sitemap entries, canonicals pointing nowhere, and missing alt text, then hands back a score out of 100 with a fix list sorted worst first. Cross-page duplicates come free, because it holds every page at once. The default run is 25 pages. It costs $35 a month.&lt;/p&gt;

&lt;p&gt;The part I care about is the second run. Ask again and it re-checks the pages already in your report, least recently checked first, and leads with the delta rather than a fresh report. It never quietly audits new pages and bills you for it.&lt;/p&gt;

&lt;p&gt;Every run writes to one living report per site at &lt;code&gt;./seo-findings/audits/&lt;/code&gt; as plain markdown, growing in place rather than spawning a new file each time. The audit trail sits in the repo next to the code it is grading.&lt;/p&gt;

&lt;p&gt;If you would rather not pay for anything, you still get most of the way there. Search Console flags indexing problems across your whole site for free and it is your own data, which makes it the most trustworthy source you have. A free desktop crawler covers a few hundred URLs. The method works either way.&lt;/p&gt;

&lt;p&gt;The longer walkthrough, with the full check list and the page-level companion, is in my &lt;a href="https://contextbolt.com/blog/site-audit-with-claude/" rel="noopener noreferrer"&gt;site audit with Claude&lt;/a&gt; guide.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The version of a site audit worth running is not the one that finds the most problems. It is the one you run twice.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>seo</category>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>AI Answers Name a Few Brands. Is Yours One?</title>
      <dc:creator>David Hamilton</dc:creator>
      <pubDate>Fri, 17 Jul 2026 13:13:25 +0000</pubDate>
      <link>https://dev.to/david_hamilton/ai-answers-name-a-few-brands-is-yours-one-1no8</link>
      <guid>https://dev.to/david_hamilton/ai-answers-name-a-few-brands-is-yours-one-1no8</guid>
      <description>&lt;p&gt;More people start their research by asking an AI than by typing into a search box. And the AI does not hand back ten blue links. It answers in a paragraph, names two or three tools, and moves on.&lt;/p&gt;

&lt;p&gt;If your brand is one of the names, you win the buyer before they ever reach a search result. If it is not, you are invisible, and the worst part is you cannot see it happening. Nothing shows up in your analytics. There is no impression count for "times an AI recommended someone else."&lt;/p&gt;

&lt;p&gt;That gap is what AI search visibility measures. Not "do I rank on Google," but "when a buyer asks an AI in my category, does it say my name."&lt;/p&gt;

&lt;h2&gt;
  
  
  Why one prompt tells you nothing
&lt;/h2&gt;

&lt;p&gt;The instinct is to open ChatGPT, ask "what are the best tools for X," and see if you show up. Do not trust that answer. It is one roll of the dice.&lt;/p&gt;

&lt;p&gt;Two things make a single check meaningless.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The engines barely agree.&lt;/strong&gt; One 2026 study found only about 11 percent of the domains ChatGPT cites overlap with the ones Perplexity cites. Showing up in one says almost nothing about the others.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The engines behave differently.&lt;/strong&gt; An analysis of 2.4 million answers found Claude names brands in about 97 percent of its responses, while Perplexity does so in under half. Same question, completely different odds of any brand getting named at all.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So real visibility is not a lucky reply. It is a measurement across many prompts and several engines, counted.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three questions a real check answers
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Do I appear at all?&lt;/strong&gt; For the prompts a buyer would actually type, does your brand surface anywhere.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How do I compare?&lt;/strong&gt; Out of all the brands named in your category, what share of the mentions are yours. This is your AI share of voice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where am I missing?&lt;/strong&gt; The specific prompts and engines where a rival gets named and you do not. That list is your content and PR to-do.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Answer those three and you have gone from a vague worry to a scoreboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  The free way to do it
&lt;/h2&gt;

&lt;p&gt;You can run this by hand today, no tools.&lt;/p&gt;

&lt;p&gt;Write 5 to 10 prompts a real buyer would ask. Not "is [your brand] good," that one is cheating. Ask the neutral category questions, like "what is the best affordable SEO tool for a solo founder." Run each one across ChatGPT, Claude, and Perplexity in fresh sessions. Tally who gets named.&lt;/p&gt;

&lt;p&gt;That gives you an honest baseline. The catch is it is slow, and it does not repeat cleanly. Do it again next month and the wording drift and session randomness make the two runs hard to compare. Which is a problem, because the whole point is the trend.&lt;/p&gt;

&lt;h2&gt;
  
  
  Doing it inside the agent
&lt;/h2&gt;

&lt;p&gt;This is the job I moved into my AI agent so it repeats without the manual grind.&lt;/p&gt;

&lt;p&gt;I use &lt;a href="https://contextbolt.com/seo/" rel="noopener noreferrer"&gt;ContextBolt SEO&lt;/a&gt;. Two tools cover it. &lt;code&gt;ai_visibility&lt;/code&gt; checks whether a brand surfaces for a set of prompts. &lt;code&gt;ai_share_of_voice&lt;/code&gt; measures your mention percentage against named competitors. I ask in plain language, the agent runs the checks, and because it lives in the same chat, I go straight from the numbers into "so which prompts am I losing, and what would I write to fix it." It is $35 a month flat, and it keeps the history, so month two is actually comparable to month one.&lt;/p&gt;

&lt;p&gt;The honest framing I hold it to. AI visibility is a sample, not a census. It is estimates from a batch of prompts, not a reading of every answer every engine gives. The same tool can wobble week to week because the engines are not deterministic. So I watch the trend over months, never a single snapshot. Trend beats the snapshot every single time.&lt;/p&gt;

&lt;h2&gt;
  
  
  The takeaway
&lt;/h2&gt;

&lt;p&gt;Search used to end with a ranked list you could go read. More and more it ends with a sentence that names a few brands and stops. Whether you are in that sentence is now a real metric, and right now only around 14 percent of marketers track it, even though a lot more say AI search is a 2026 priority.&lt;/p&gt;

&lt;p&gt;The ones checking will know which prompts they are losing and go fix them. Everyone else will keep guessing why the pipeline is quiet. Pick a handful of buyer prompts, run them across a few engines, and count. Whether you use a tool or a spreadsheet, start counting before your competitors do.&lt;/p&gt;

&lt;p&gt;If you want the longer version with the full workflow and the honest limits, I wrote up &lt;a href="https://contextbolt.com/blog/ai-search-visibility-with-claude/" rel="noopener noreferrer"&gt;AI search visibility&lt;/a&gt; here.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>ai</category>
      <category>marketing</category>
      <category>startup</category>
    </item>
    <item>
      <title>n8n MCP Means Three Things. Here's Each One (2026)</title>
      <dc:creator>David Hamilton</dc:creator>
      <pubDate>Mon, 13 Jul 2026 14:06:28 +0000</pubDate>
      <link>https://dev.to/david_hamilton/n8n-mcp-means-three-things-heres-each-one-2026-2ah9</link>
      <guid>https://dev.to/david_hamilton/n8n-mcp-means-three-things-heres-each-one-2026-2ah9</guid>
      <description>&lt;p&gt;You built an n8n workflow that does something genuinely useful. It watches a form, enriches a lead, posts to Slack, whatever. Then you sit down in Claude or Cursor to work, and your agent has no idea that workflow exists. You are back to copy-pasting between two tools that should be talking to each other.&lt;/p&gt;

&lt;p&gt;That gap is what MCP closes. But if you search "n8n mcp" you land on three different setups wearing the same name, and people wire up the wrong one all the time. Here is each one, in plain English.&lt;/p&gt;

&lt;h2&gt;
  
  
  n8n MCP means three things
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. n8n as an MCP server.&lt;/strong&gt; You expose one or more of your workflows as tools an outside AI agent can call. You add the MCP Server Trigger node, give it a clear name and description, attach the workflow tools you want to expose, activate it, and copy the URL plus bearer token. Now Claude or Cursor can call your automation as if it were a native tool. In 2026 n8n also shipped a native instance-level MCP server (public preview) that exposes selected workflows without you building the trigger by hand.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. n8n as an MCP client.&lt;/strong&gt; The other direction. Inside an n8n AI Agent workflow you drop the MCP Client Tool node, point it at some external MCP server, and now your workflow can reach that server's tools mid-run. This is how you give an n8n automation live data or actions it did not have before.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The community server that builds workflows for you.&lt;/strong&gt; Separate from both. The &lt;code&gt;czlonkowski/n8n-mcp&lt;/code&gt; server teaches your coding agent n8n's roughly 2,000 nodes, so you can describe an automation in a sentence and the agent drafts a validated workflow you import. Treat the output as a first draft you review, not a finished build.&lt;/p&gt;

&lt;p&gt;Most "n8n mcp" tutorials pick one of these and never tell you the other two exist. When your setup does not behave the way a guide promised, it is usually because you followed instructions for a different one of the three.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which one do you actually want
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;You want your AI agent to run your existing automations -&amp;gt; n8n as a &lt;strong&gt;server&lt;/strong&gt; (role 1).&lt;/li&gt;
&lt;li&gt;You want an n8n workflow to reach outside tools -&amp;gt; n8n as a &lt;strong&gt;client&lt;/strong&gt; (role 2).&lt;/li&gt;
&lt;li&gt;You want the agent to build the workflow for you -&amp;gt; the &lt;strong&gt;community server&lt;/strong&gt; (role 3).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They compose. A single AI Agent workflow can be a client of three servers and be exposed as a server itself. That is the whole point of the protocol, but it is also why the terminology trips people up.&lt;/p&gt;

&lt;h2&gt;
  
  
  A few things that break setups
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Wrong node.&lt;/strong&gt; The MCP Server Trigger and the MCP Client Tool are not interchangeable. Server exposes, client consumes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skipping auth.&lt;/strong&gt; An exposed n8n instance is an attack surface. Lock every endpoint. The instance-level server is a broad grant, so scope it deliberately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The 5-minute timeout.&lt;/strong&gt; n8n caps MCP-triggered executions at five minutes even if the workflow itself is set higher. Long jobs need a different pattern.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weak tool descriptions.&lt;/strong&gt; The agent picks tools by their descriptions. Vague names in, wrong tool called out.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Your instance is only half your context
&lt;/h2&gt;

&lt;p&gt;Here is the part worth sitting with. Once your workflows are callable from your agent, the agent is smarter about your &lt;em&gt;systems&lt;/em&gt;. It still knows nothing about your &lt;em&gt;research&lt;/em&gt;. The gotcha you saved on X last week, the Reddit thread that solved this exact auth error, the LinkedIn post with the pattern you meant to steal. That context lives in three apps with no export button and no way for an agent to read it.&lt;/p&gt;

&lt;p&gt;I build &lt;a href="https://contextbolt.com/bookmarks/" rel="noopener noreferrer"&gt;ContextBolt Bookmarks&lt;/a&gt; to close that side. It captures automatically from X, Reddit, and LinkedIn, AI-tags every save so you find things by meaning, and on Pro ($6/month) gives your library a personal MCP endpoint. So you wire two connectors into your n8n agent, not one. Your workflows on one side, the research you already saved on the other. The free tier holds 150 bookmarks with the same tagging and search, so you can test the shape before paying anything.&lt;/p&gt;

&lt;p&gt;If you want the full setup walkthrough for all three roles, with the config blocks per client, I keep a running &lt;a href="https://contextbolt.com/tools/mcp-server-directory/n8n/" rel="noopener noreferrer"&gt;n8n MCP server&lt;/a&gt; reference here.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one opinion worth holding
&lt;/h2&gt;

&lt;p&gt;Keep n8n boring and reliable, and use MCP to connect it. Three deliberate connections beat one AI agent holding the keys to your entire instance. Wire the specific workflows you trust, name them well, and let the agent call them. That is the version of this that survives contact with a real workflow you depend on.&lt;/p&gt;

</description>
      <category>n8n</category>
      <category>mcp</category>
      <category>ai</category>
      <category>automation</category>
    </item>
    <item>
      <title>Local-first bookmark managers are back. Two ideals most of them quietly skip.</title>
      <dc:creator>David Hamilton</dc:creator>
      <pubDate>Fri, 10 Jul 2026 16:12:38 +0000</pubDate>
      <link>https://dev.to/david_hamilton/local-first-bookmark-managers-are-back-two-ideals-most-of-them-quietly-skip-1p5b</link>
      <guid>https://dev.to/david_hamilton/local-first-bookmark-managers-are-back-two-ideals-most-of-them-quietly-skip-1p5b</guid>
      <description>&lt;p&gt;Two of the most loved read-later apps on the internet shut down inside eight months of each other. Omnivore went first, acquihired by ElevenLabs and switched off on November 15, 2024. Then Pocket, after Mozilla let it wither for years, shut on July 8, 2025 and took roughly 35 million libraries with it.&lt;/p&gt;

&lt;p&gt;Neither died because the technology failed. They died because the business around them stopped making sense to somebody in a meeting.&lt;/p&gt;

&lt;p&gt;So a whole category of bookmark tools came back with a single promise. Run it yourself. Self-hosted, Docker-composed, SQLite on a disk you can hold. Nobody can take this away from you.&lt;/p&gt;

&lt;p&gt;I build a bookmark tool, so I have skin in this. And I think the people building the self-hosted wave are right about the problem and slightly wrong about the fix. Local-first won the argument. It has not yet won the job.&lt;/p&gt;

&lt;h2&gt;
  
  
  What local-first actually means
&lt;/h2&gt;

&lt;p&gt;The phrase is not marketing. It comes from a 2019 essay by Ink &amp;amp; Switch, and it is specific enough to argue with. Local-first software keeps the primary copy of your data on your own device. The network is an enhancement, not a dependency.&lt;/p&gt;

&lt;p&gt;The manifesto lays out seven ideals a local-first app should hit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fast&lt;/strong&gt;, because reads and writes never wait on a server&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-device&lt;/strong&gt;, so your stuff follows you&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline&lt;/strong&gt;, meaning full function with the wifi off&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collaboration&lt;/strong&gt;, so other people can still work with you&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Longevity&lt;/strong&gt;, meaning the software outlives the company&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy&lt;/strong&gt;, because the data never has to leave your machine&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User control&lt;/strong&gt;, the right to take your data and go&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Seven. Read that list again, because almost every conversation about local-first bookmarks only ever discusses three of them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Grade a self-hosted bookmark app honestly
&lt;/h2&gt;

&lt;p&gt;Take a typical self-hosted bookmark manager (Karakeep, Linkwarden, both genuinely excellent) and grade it against the seven ideals it is implicitly claiming.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ideal&lt;/th&gt;
&lt;th&gt;Typical self-hosted app&lt;/th&gt;
&lt;th&gt;Honest grade&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fast&lt;/td&gt;
&lt;td&gt;Local database, no round trip&lt;/td&gt;
&lt;td&gt;Excellent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Offline&lt;/td&gt;
&lt;td&gt;Works with the network unplugged&lt;/td&gt;
&lt;td&gt;Excellent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Privacy&lt;/td&gt;
&lt;td&gt;Data never leaves your box&lt;/td&gt;
&lt;td&gt;Excellent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User control&lt;/td&gt;
&lt;td&gt;Your disk, your file&lt;/td&gt;
&lt;td&gt;Excellent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-device&lt;/td&gt;
&lt;td&gt;Needs a server, a domain, a VPN, or all three&lt;/td&gt;
&lt;td&gt;Depends on your patience&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Collaboration&lt;/td&gt;
&lt;td&gt;Rarely a goal, often absent&lt;/td&gt;
&lt;td&gt;Weak&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Longevity&lt;/td&gt;
&lt;td&gt;Survives the vendor. Does not survive you.&lt;/td&gt;
&lt;td&gt;The quiet failure&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Four straight wins. Those are real, and they are why the category deserves its comeback. The bottom row is where it gets uncomfortable.&lt;/p&gt;

&lt;h2&gt;
  
  
  The longevity everyone cites and nobody tests
&lt;/h2&gt;

&lt;p&gt;"The software works in ten years even if the vendor is gone." Fine. Does it work in ten years if &lt;em&gt;you&lt;/em&gt; are gone? Not dead. Just busy.&lt;/p&gt;

&lt;p&gt;A self-hosted bookmark manager you stopped patching, whose Docker image is three majors behind, whose backup cron job silently broke in March, is not safer than Pocket was. It is a shutdown with extra steps. Pocket at least emailed you. Your unmaintained container will not.&lt;/p&gt;

&lt;p&gt;Self-hosting does not delete the risk of losing your library. It moves the risk from a company with a status page and a paid ops team to a person who has a day job. For the folks who already run a NAS and have actually restored from a backup, not just configured one, that trade is clearly correct, and they know who they are. For everybody else, "I own the data" quietly means "I am now the single point of failure."&lt;/p&gt;

&lt;h2&gt;
  
  
  The saves a local-first app cannot reach
&lt;/h2&gt;

&lt;p&gt;There is a second gap, and it is bigger than the first.&lt;/p&gt;

&lt;p&gt;Open your phone and think about where you actually save things now. You are not copying URLs into a self-hosted web app. You are tapping the bookmark icon on a post in X, hitting save on a Reddit thread, tapping save on a LinkedIn article. That is where saving happens now, inside the platform, one tap, twenty times a week.&lt;/p&gt;

&lt;p&gt;Local-first bookmark managers cannot see any of it. There is no export button on your X bookmarks. Reddit shows you roughly your last thousand saves and no more. And these saves are pointers, not copies, so when the original post is deleted your bookmark quietly rots.&lt;/p&gt;

&lt;p&gt;So the sovereign, private, offline library you built contains the twelve links you were motivated enough to file by hand. The four hundred things you actually saved are still trapped in three apps that do not care about them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Escapable and machine-readable beat local and cloud
&lt;/h2&gt;

&lt;p&gt;I think local-versus-cloud is the wrong axis to organize your choice around. Two other properties predict whether a library survives and stays useful, and they cut across both camps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Escapable.&lt;/strong&gt; Can you get everything out today, in a format another tool will read, without asking permission? Not "is there an export feature buried in settings." Have you run it? A cloud app with a one-click complete export is more escapable than a self-hosted app whose data sits in a schema only it understands. Pocket's failure was not that it was cloud. It was that 35 million people had never tested the exit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Machine-readable.&lt;/strong&gt; Can something other than the app's own search box read your library? For the last twenty years this did not matter much. It matters enormously now, because the thing you most want to do with a decade of saved links is ask an AI about them. A library your agent cannot reach is an archive, not a tool. This is what MCP exists to solve, a standard way for an AI agent to read a data source directly.&lt;/p&gt;

&lt;p&gt;A private SQLite file nothing can read is sovereignty with nothing to show for it. You own it completely and it does nothing for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where I land
&lt;/h2&gt;

&lt;p&gt;I build &lt;a href="https://contextbolt.com/bookmarks/" rel="noopener noreferrer"&gt;ContextBolt Bookmarks&lt;/a&gt;, so let me be straight rather than clever. It is not local-first. Pro syncs your saves to encrypted cloud storage. If you want the seven ideals in full, run Karakeep. I mean that. It is a good piece of software and the people building it are serious.&lt;/p&gt;

&lt;p&gt;It optimizes for the two gaps above instead. It captures automatically from X, Reddit, and LinkedIn, which is where saving actually happens and which no local-first tool reaches. It AI-tags every save with a topic so you find things by meaning rather than remembering a keyword. And Pro ($6/month) gives your library a personal MCP endpoint, so Claude, Cursor, and Windsurf can query your saves mid-conversation. The free Basic tier holds 150 bookmarks with the same tagging and semantic search.&lt;/p&gt;

&lt;p&gt;That is a trade, and I would rather name it than pretend it away. If vendor independence is the thing you care about most in the world, this is the wrong tool and you should not buy it.&lt;/p&gt;

&lt;p&gt;What I would push back on is the idea that self-hosting settles the question. It answers one risk loudly and leaves the other two untouched. The library still has to be findable, and it still has to be readable by the machine you now ask everything.&lt;/p&gt;

&lt;p&gt;Local-first got the diagnosis right. The prescription is still being written.&lt;/p&gt;

&lt;p&gt;If you want the longer version, with the full seven-ideal scorecard and the self-hosted graveyard nobody talks about, I wrote it up here: &lt;a href="https://contextbolt.com/blog/local-first-bookmark-apps/" rel="noopener noreferrer"&gt;local-first bookmark managers&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>localfirst</category>
      <category>selfhosted</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
    <item>
      <title>What Competitor Monitoring Looks Like When It Judges the Change for You</title>
      <dc:creator>David Hamilton</dc:creator>
      <pubDate>Mon, 06 Jul 2026 14:29:38 +0000</pubDate>
      <link>https://dev.to/david_hamilton/what-competitor-monitoring-looks-like-when-it-judges-the-change-for-you-6ij</link>
      <guid>https://dev.to/david_hamilton/what-competitor-monitoring-looks-like-when-it-judges-the-change-for-you-6ij</guid>
      <description>&lt;p&gt;Most competitor monitoring tools have the same flaw. They tell you something changed, then hand the thinking back to you.&lt;/p&gt;

&lt;p&gt;You get a red-highlighted diff in your inbox. A rival's pricing page moved. Great. Was it a real price change, or did they swap a testimonial and bump the copyright year? You open the tab, squint at the two versions, work out that it was nothing, and close it again. Do that for five competitors across pricing, homepage, changelog, and sitemap, and the tool that was supposed to save you time is now a second inbox you dread.&lt;/p&gt;

&lt;p&gt;The data was never the hard part. Judging it was. And judging it is exactly the part a raw diff refuses to do.&lt;/p&gt;

&lt;p&gt;Here is the workflow I moved to instead, and why it stuck.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The idea in one line&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Move the monitoring into the AI agent you already work in, and let the agent do the judging.&lt;/p&gt;

&lt;p&gt;That is what &lt;a href="https://contextbolt.com/blog/competitor-monitoring-with-ai/" rel="noopener noreferrer"&gt;competitor monitoring with AI&lt;/a&gt; actually means once you strip the hype off it. Not "a dashboard with a chatbot bolted on." An assistant that watches the competition, decides what is signal and what is noise, and tells you in plain language what a change means.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What changes when the tool judges&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A change detector can only point. It says "this pixel is different." An AI monitor reads the change and calls it. Cosmetic churn dies silently. A real move arrives with four things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what changed&lt;/li&gt;
&lt;li&gt;what it means&lt;/li&gt;
&lt;li&gt;a link to the page&lt;/li&gt;
&lt;li&gt;a suggested response&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last one is the part a dashboard structurally cannot reach. A dashboard does not have your files, your voice, or your product. An agent does. So it does not stop at "Acme raised their Pro tier from $29 to $39." It can go on to "here is the pricing-page tweak that presses that gap, want it in review." The alert becomes a first draft.&lt;/p&gt;

&lt;p&gt;I have started calling that last step the counter-move, because "alert" undersells it. The whole reason to watch a competitor is to do something about what you see. Every other tool stops one step short of the only step that matters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is actually worth watching&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not everything. Five surfaces carry almost all the real signal for a software competitor:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pricing pages.&lt;/strong&gt; The highest-signal page there is, and the worst one to point a dumb detector at (currency toggles, A/B tests, and rotating promo banners all trip a raw diff).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Homepage.&lt;/strong&gt; Positioning shifts. A headline moving from "for solo founders" to "built for teams" is a strategy telegraph.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Changelog / releases.&lt;/strong&gt; What they are shipping, and how fast.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sitemap.&lt;/strong&gt; Unannounced pages show up here before they show up anywhere else. This is how you see a launch coming.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search footprint.&lt;/strong&gt; The terms they are starting to rank for tell you where they are aiming next.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The judging is what makes watching five surfaces across five competitors survivable. Without it, you drown.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why inside the agent, specifically&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Because the monitoring and the reaction stop being two separate jobs. The thing that spots the move is the thing that drafts the response, in the same conversation. No exporting a diff, no pasting it into a doc, no writing the counter-move from scratch an hour later when the urgency has drained out of it.&lt;/p&gt;

&lt;p&gt;It does not replace an enterprise competitive-intelligence platform if you have a sales team and an analyst to run a battlecard program. It replaces the gap most founders actually live in, which is "I know I should watch my competitors and I never do, because every tool I tried became noise."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How I set it up&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I use &lt;a href="https://contextbolt.com/radar/" rel="noopener noreferrer"&gt;ContextBolt Radar&lt;/a&gt;. You name up to five competitor domains once. It checks their pricing, homepage, changelog, sitemap, and search footprint every night, judges each change, and emails one briefing every Monday. There is no dashboard. When nothing meaningful happened, it stays quiet, which turns out to be most weeks and is the point. Any time you are curious you just ask your agent "what did my competitors do this week." It runs inside Claude, Codex, or Cursor, and it is $39 a month.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The takeaway&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Competitor monitoring was never a detection problem. Detection is easy and mostly free. The expensive part is judgment, and the only useful part is the response. Put both of those where you already do your thinking, and watching the competition stops being a chore you skip.&lt;/p&gt;

&lt;p&gt;If you want the longer version, with the two-kinds-of-monitoring map and the honest limits, I wrote it up here: &lt;a href="https://contextbolt.com/blog/competitor-monitoring-with-ai/" rel="noopener noreferrer"&gt;competitor monitoring with AI&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>startup</category>
      <category>productivity</category>
    </item>
    <item>
      <title>What Is an SEO MCP Server? (And Why I Stopped Opening a Dashboard)</title>
      <dc:creator>David Hamilton</dc:creator>
      <pubDate>Tue, 30 Jun 2026 15:18:15 +0000</pubDate>
      <link>https://dev.to/david_hamilton/what-is-an-seo-mcp-server-and-why-i-stopped-opening-a-dashboard-5hjc</link>
      <guid>https://dev.to/david_hamilton/what-is-an-seo-mcp-server-and-why-i-stopped-opening-a-dashboard-5hjc</guid>
      <description>&lt;p&gt;For two years my SEO workflow was the same loop: think of a question, open a browser tab, log into a dashboard, click around, export a CSV, paste it somewhere my AI assistant could read it, then ask the actual question. The dashboard was the bottleneck, not the data.&lt;/p&gt;

&lt;p&gt;So I moved the data to where I already work. These days I ask Claude a keyword question and it answers from live SEO data directly, no tab, no export. The thing that made that possible is an &lt;a href="https://contextbolt.com/blog/seo-mcp-server/" rel="noopener noreferrer"&gt;SEO MCP server&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here is what that actually means.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP in one paragraph
&lt;/h2&gt;

&lt;p&gt;MCP (the Model Context Protocol) is an open standard that lets an AI assistant call external tools in a structured way. If you have used a "connector" in Claude or Cursor, that is MCP underneath. An MCP server exposes a set of tools, the model decides when to call them, and the result comes back as context the model can reason over. It is the difference between pasting a spreadsheet into a chat and letting the assistant fetch the numbers itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  So what is an SEO MCP server?
&lt;/h2&gt;

&lt;p&gt;It is an MCP server whose tools are SEO operations instead of, say, file reads or calendar events. A good one gives the model things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;keyword research and difficulty scoring&lt;/li&gt;
&lt;li&gt;SERP results and ranking data for a query&lt;/li&gt;
&lt;li&gt;domain and competitor overviews&lt;/li&gt;
&lt;li&gt;backlink data (referring domains, gap analysis)&lt;/li&gt;
&lt;li&gt;Google Search Console data for your own site&lt;/li&gt;
&lt;li&gt;AI visibility, how often your brand shows up in ChatGPT and Google's AI answers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The model calls those tools mid-conversation. You stay in one window and ask follow-ups in plain language: "compare the difficulty of these five terms," "which of my pages is closest to page one," "what does the top result for this query have that I don't." The assistant runs the lookups and reasons over the results together, which is the part a dashboard cannot do because a dashboard does not know what you asked last.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this beats the dashboard for day-to-day work
&lt;/h2&gt;

&lt;p&gt;Three reasons it stuck for me:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;No context switching.&lt;/strong&gt; The question and the answer happen in the same place I was already thinking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Composability.&lt;/strong&gt; Because the model can chain tool calls, "find my striking-distance pages, then pull the SERP for each, then tell me which is most winnable" is one request, not forty clicks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It writes as it analyzes.&lt;/strong&gt; The assistant that just pulled the data is the one drafting the brief, the meta description, or the internal-link plan off the back of it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It does not replace a full audit suite for enterprise teams. For a solo founder or a small team that lives inside an AI assistant anyway, it removes the most annoying step in the loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I set it up
&lt;/h2&gt;

&lt;p&gt;I use &lt;a href="https://contextbolt.com/seo/" rel="noopener noreferrer"&gt;ContextBolt SEO&lt;/a&gt;. It is a hosted SEO MCP server: you add one connector to Claude, Cursor, or Codex, and the SEO tools show up. The data is DataForSEO under the hood (the same provider behind a lot of SEO products), so it is real keyword, SERP, and backlink data, not a model guessing. Search Console connects read-only, and it keeps a small memory layer so your past lookups are still there next session. It is $35 a month, which is what pushed me off the bigger suites for this particular workflow.&lt;/p&gt;

&lt;p&gt;If you want to try the concept without paying, you can wire up the public DataForSEO MCP yourself and point your assistant at it, that is the DIY version of the same idea. I went with the hosted one because I did not want to babysit credits and config.&lt;/p&gt;

&lt;h2&gt;
  
  
  The takeaway
&lt;/h2&gt;

&lt;p&gt;An SEO MCP server is not a new kind of SEO tool. It is the same data, delivered to the place where you already ask questions. Once the analyst lives inside the assistant, "open the dashboard" stops being step one, and that turns out to be most of the value.&lt;/p&gt;

&lt;p&gt;If you want the longer version with the exact tools and prompts, I wrote it up here: &lt;a href="https://contextbolt.com/blog/seo-mcp-server/" rel="noopener noreferrer"&gt;SEO MCP server&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>mcp</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The MCP Servers I Actually Use With Claude in 2026</title>
      <dc:creator>David Hamilton</dc:creator>
      <pubDate>Sat, 30 May 2026 20:28:20 +0000</pubDate>
      <link>https://dev.to/david_hamilton/the-mcp-servers-i-actually-use-with-claude-in-2026-13da</link>
      <guid>https://dev.to/david_hamilton/the-mcp-servers-i-actually-use-with-claude-in-2026-13da</guid>
      <description>&lt;p&gt;The MCP ecosystem went from a handful of servers to thousands in under a year. Most of them are demos you connect once and forget. A few have quietly become part of how I work every day.&lt;/p&gt;

&lt;p&gt;This is the short list that earned a permanent spot in my Claude setup as a solo founder, grouped by what I am actually trying to get done. No affiliate links, no rankings for the sake of it. Just the ones I would reconnect first on a new machine.&lt;/p&gt;

&lt;h3&gt;
  
  
  The two every setup needs
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Filesystem&lt;/strong&gt; (the official server) lets Claude read and write local files. Boring, essential, and the first thing I connect anywhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt; brings issues, PRs, and code search into the chat. If you write code, it is the highest-leverage connection after filesystem.&lt;/p&gt;

&lt;h3&gt;
  
  
  Marketing and growth
&lt;/h3&gt;

&lt;p&gt;This is where MCP stopped being a novelty for me and started saving real hours.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://contextbolt.com/tools/mcp-server-directory/search-console/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=mcp-directory" rel="noopener noreferrer"&gt;Google Search Console MCP&lt;/a&gt; pulls my live query and impression data into Claude, so I can ask "which pages slipped this week" and get an answer without opening the GSC dashboard.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://contextbolt.com/tools/mcp-server-directory/google-analytics/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=mcp-directory" rel="noopener noreferrer"&gt;Google Analytics MCP server&lt;/a&gt; does the same for GA4: sessions, events, and conversions, all queryable in plain English.&lt;/p&gt;

&lt;p&gt;If you run sales, the &lt;a href="https://contextbolt.com/tools/mcp-server-directory/hubspot/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=mcp-directory" rel="noopener noreferrer"&gt;HubSpot MCP server&lt;/a&gt; lets Claude read and update contacts, deals, and companies. That turns "draft a follow-up for everyone in the pipeline who went quiet" into a single prompt.&lt;/p&gt;

&lt;p&gt;Connecting all three means one question can span search data, analytics, and CRM, and Claude stitches it together. That is the part that still feels like magic.&lt;/p&gt;

&lt;h3&gt;
  
  
  Automation glue
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://contextbolt.com/tools/mcp-server-directory/n8n/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=mcp-directory" rel="noopener noreferrer"&gt;n8n MCP server&lt;/a&gt; is the one I reach for when a workflow needs to run on a schedule instead of whenever I happen to be in a chat. Weekly digests, smart routing, alerts. n8n already connects to almost everything, and MCP lets Claude drive it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Knowledge and memory
&lt;/h3&gt;

&lt;p&gt;Claude forgets everything between chats. These servers fix that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Obsidian and Notion&lt;/strong&gt; servers expose your notes so Claude can search them and write back.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ContextBolt&lt;/strong&gt; (full disclosure: I built this one) gives Claude semantic recall over the things I save from X, Reddit, and LinkedIn. I save a thread, and three weeks later I can ask "what was that take on pricing I saved" and get it back with the source. It exists because I kept saving things and never finding them again.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to pick
&lt;/h3&gt;

&lt;p&gt;Two rules that have served me well:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Connect for a job, not for a demo. A server you use once is clutter.&lt;/li&gt;
&lt;li&gt;Read the setup notes before you wire up auth. Half of these put a token in a config file or a URL, and the gotchas vary by server.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That second rule is why I keep a running directory of the &lt;a href="https://contextbolt.com/tools/mcp-server-directory/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=mcp-directory" rel="noopener noreferrer"&gt;best MCP servers&lt;/a&gt; with per-server setup steps, auth notes, and the gotchas I hit, sorted by category. It started as my own notes. Now it is a public &lt;a href="https://contextbolt.com/tools/mcp-server-directory/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=mcp-directory" rel="noopener noreferrer"&gt;MCP server directory&lt;/a&gt; you can browse by job instead of scrolling one giant list.&lt;/p&gt;

&lt;p&gt;If you are just getting started, connect filesystem, then add one server for the job in front of you. Build from there.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>productivity</category>
      <category>claude</category>
    </item>
    <item>
      <title>I deleted the chat feature from my own AI product. Here's what I built instead.</title>
      <dc:creator>David Hamilton</dc:creator>
      <pubDate>Wed, 06 May 2026 22:09:56 +0000</pubDate>
      <link>https://dev.to/david_hamilton/i-deleted-the-chat-feature-from-my-own-ai-product-heres-what-i-built-instead-3d60</link>
      <guid>https://dev.to/david_hamilton/i-deleted-the-chat-feature-from-my-own-ai-product-heres-what-i-built-instead-3d60</guid>
      <description>&lt;p&gt;I deleted the chat feature from my AI product.&lt;br&gt;
The irony writes itself. A small Chrome extension whose entire purpose is bringing AI to your saved content. The first thing I cut was the AI-shaped feature.&lt;br&gt;
It was the easiest call I've made on this build.&lt;br&gt;
Three reasons. Each one obvious in hindsight.&lt;br&gt;
API costs. A back-and-forth chat conversation eats £1-2 a month in tokens per active user. My Pro tier is £4 a month. The maths doesn't work the day you launch. It only gets worse with scale.&lt;br&gt;
Product bloat. A chat box is the kind of thing you build because every other AI product has one. It looks like the AI feature. It isn't.&lt;br&gt;
V2. If users actually want to chat with their bookmarks, they'll tell me. I'd rather build it then than guess now.&lt;br&gt;
The product is called ContextBolt. It captures your bookmarks from X, Reddit, and LinkedIn. It auto-tags each one with Claude. And then it does something most products in 2026 still don't.&lt;br&gt;
It exposes itself to Claude.&lt;br&gt;
Pro users get a personal MCP endpoint. They paste one URL into Claude Desktop. From that moment on, Claude can search their entire bookmark library mid-conversation. You ask Claude something. Claude reads your saved content. The answer arrives with the context already in it.&lt;br&gt;
The dashboard I built first turned out to be the legacy interface. The MCP endpoint is the actual product.&lt;br&gt;
That's the irony resolved. The chat box was never the AI part. The integration was the AI part. I just couldn't see it until I deleted what I thought it was.&lt;br&gt;
Here's the part I find harder to explain.&lt;br&gt;
I'm one person. I have a day job. I get about ten hours a week on this thing, mostly evenings and weekends. The amount of code in this product is not the amount of code one person could write in ten hours a week.&lt;br&gt;
I didn't write most of it.&lt;br&gt;
Claude did.&lt;br&gt;
I use Claude Code. I describe what I want in plain English. Claude writes the service worker. Claude writes the Cloudflare Worker. Claude writes the React dashboard. Claude writes the SQL migrations. I read what comes back, push back where the taste is off, and ship it.&lt;br&gt;
Two days ago Google approved the extension on the Chrome Web Store. I downloaded my own production build. Within an hour I'd found four bugs in real-world testing. The LinkedIn dashboard didn't refresh on save. The X popup showed a scraped count instead of a deduplicated one. The auto-scroll stalled at twenty bookmarks. The licence-key save flow failed silently.&lt;br&gt;
I described each symptom out loud. Claude found the wrong file (a content script that was dead code, while the loaded one had no listener). Claude wrote each patch. We shipped five extension versions and two worker deploys that evening. I never opened a debugger.&lt;br&gt;
That is what working with Claude actually looks like in 2026. It is not autocomplete. It is a colleague who reads the whole codebase faster than you can blink, fixes the thing, and writes the commit message while it's at it.&lt;br&gt;
The infrastructure is the other surprise.&lt;br&gt;
The whole product runs on Cloudflare. Pages for the website. Workers for the API. D1 for the database. KV for the rate limits. Vectorize for the semantic search. There is no AWS bill. There is no Vercel bill. There is no managed database bill.&lt;br&gt;
Including Claude API spend, the entire stack costs me under £5 a month at current usage. I keep waiting for that to be a lie. So far it isn't.&lt;br&gt;
The marketing flywheel is the same recursive shape.&lt;br&gt;
Thirty-three blog posts on the site. Sixty-six programmatic SEO pages. Every post drafted with Claude. Every meta description checked by Claude. Every internal link suggested by Claude. The site's scheduled tasks run with Claude reading my Search Console and writing the next thing to fix.&lt;br&gt;
I review. I edit. I ship.&lt;br&gt;
The asymmetric stack is the only reason a one-person, ten-hour-a-week build can keep up with funded teams. Claude does the parts that scale linearly with effort. Writing. Debugging. Testing. Drafting. I do the parts that don't. Taste. Decisions. Picking what to ship. Picking what to delete.&lt;br&gt;
I keep coming back to that last one.&lt;br&gt;
The chat box was never the AI part. It was the legacy UI we used while we figured out what the AI part actually was. The AI part is the integration. The AI part is your existing tools getting access to context they didn't have before.&lt;br&gt;
Most AI products in two years will look like ContextBolt. A small piece of software that does one thing well and exposes itself to whatever model the user already pays for. The product team doesn't have to ship the chat box. The user already has one.&lt;br&gt;
That's why deleting the chat was easy. Once you see it, you can't unsee it.&lt;br&gt;
ContextBolt is live on the Chrome Web Store today. The site is at &lt;a href="https://dev.tourl"&gt;contextbolt.com&lt;/a&gt;. If you save more than you read, you'll feel it the first time Claude finds something for you that you'd already given up on.&lt;br&gt;
I'd love to know what you'd connect it to.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>devops</category>
      <category>buildinpublic</category>
    </item>
  </channel>
</rss>
