<?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: techreone</title>
    <description>The latest articles on DEV Community by techreone (@techreone).</description>
    <link>https://dev.to/techreone</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%2F4150189%2Fa277e1d1-7e70-4fc5-9ca5-6667a0806cee.png</url>
      <title>DEV Community: techreone</title>
      <link>https://dev.to/techreone</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/techreone"/>
    <language>en</language>
    <item>
      <title>I gave my AI coding agent a research-backed SEO knowledge base over MCP</title>
      <dc:creator>techreone</dc:creator>
      <pubDate>Tue, 29 Sep 2026 16:38:20 +0000</pubDate>
      <link>https://dev.to/techreone/i-gave-my-ai-coding-agent-a-research-backed-seo-knowledge-base-over-mcp-2021</link>
      <guid>https://dev.to/techreone/i-gave-my-ai-coding-agent-a-research-backed-seo-knowledge-base-over-mcp-2021</guid>
      <description>&lt;p&gt;Every AI assistant I use — Claude Code, Cursor, opencode — will happily answer SEO questions. The problem is &lt;em&gt;where the answer comes from&lt;/em&gt;. Ask "does keyword stuffing still matter?" and you get a confident paragraph assembled from training-data soup: partly right, partly 2019, partly invented. Ask it for a number and it will make one up with total sincerity.&lt;/p&gt;

&lt;p&gt;I build &lt;a href="https://xknow.org/mcp" rel="noopener noreferrer"&gt;XKnow&lt;/a&gt;, a research-backed SEO/SaaS knowledge base, and the obvious fix was to stop &lt;em&gt;chatting&lt;/em&gt; about SEO and let agents &lt;strong&gt;search and cite&lt;/strong&gt; a curated corpus instead. This post is about the plumbing: an MCP server that ships a whole knowledge base to any local agent, in about ten seconds of setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  What MCP gives you here
&lt;/h2&gt;

&lt;p&gt;MCP (Model Context Protocol) is the emerging standard for giving tools to AI clients. Most MCP servers wrap an API: search, weather, your database. That works less well for knowledge, because the valuable part is not the lookup — it's the &lt;em&gt;curation&lt;/em&gt;: which sources you trust, how notes cross-reference each other, and whether claims carry evidence.&lt;/p&gt;

&lt;p&gt;So instead of a thin wrapper, the server ships the corpus itself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;search_knowledge&lt;/code&gt; — ranked search over the whole knowledge base, returning titles, snippets and URLs&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get_page&lt;/code&gt; — full text of one note, preserving the original &lt;code&gt;[[wikilinks]]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;explore_concept&lt;/code&gt; — a note plus its outbound links and backlinks, so the agent can walk the graph instead of getting a flat list&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;list_topics&lt;/code&gt; — every note grouped by section&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cite&lt;/code&gt; — the canonical citation (title, description, URL) for a note&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;lint_rules&lt;/code&gt; — a self-check rubric for SEO/SaaS content writing, each rule backed by knowledge-base notes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The graph-aware part matters more than I expected. SEO topics form a web — canonical URLs link to crawl budget, which links to log-file analysis, which links to faceted navigation. A flat keyword search returns five unrelated pages; walking the graph reads like a person learning the territory.&lt;/p&gt;

&lt;h2&gt;
  
  
  The ten-second setup
&lt;/h2&gt;

&lt;p&gt;The server is open source (MIT) and runs locally over stdio. For Claude Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add xknow &lt;span class="nt"&gt;--&lt;/span&gt; npx &lt;span class="nt"&gt;-y&lt;/span&gt; xknow-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Claude Desktop, Cursor, Cline and most other clients:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"xknow"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"xknow-mcp"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For opencode:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"xknow"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"local"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"xknow-mcp"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No server, no account, no API key. The free layer is a static snapshot bundled with the npm package — nothing is fetched at query time, so it works offline and your queries never leave the machine.&lt;/p&gt;

&lt;p&gt;Then you can just ask things like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Use the xknow tools to explain keyword difficulty and cite the source."&lt;br&gt;
"Search XKnow for SaaS pricing models and summarise the trade-offs."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Two knowledge layers
&lt;/h2&gt;

&lt;p&gt;The default layer is the free one: the public guides and posts, bundled as a snapshot. If you own the full &lt;a href="https://xknow.org/vaults/seo" rel="noopener noreferrer"&gt;XKnow Knowledge Base&lt;/a&gt; — 500+ cross-linked notes — the same server can serve &lt;em&gt;your purchased copy&lt;/em&gt; locally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx &lt;span class="nt"&gt;-y&lt;/span&gt; xknow-mcp &lt;span class="nt"&gt;--vault&lt;/span&gt; /path/to/SEO-SaaS-Vault
&lt;span class="c"&gt;# or export XKNOW_VAULT=/path/to/SEO-SaaS-Vault&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vault mode parses the Markdown notes from your local folder on the fly. The purchased copy never leaves your machine — the same local-first logic as the free layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this beats pasting docs into a prompt
&lt;/h2&gt;

&lt;p&gt;I tried the obvious alternatives first:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paste the docs into context.&lt;/strong&gt; Works until you blow the context window on a topic the agent only glances at. MCP tools let the agent &lt;em&gt;pull&lt;/em&gt; what it needs, when it needs it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RAG with embeddings.&lt;/strong&gt; Fine for recall, but the infrastructure bill is real: vector store, chunking pipeline, re-ranking. For a corpus of hundreds of curated notes, a small dependency-free ranking pass over structured notes turned out to be enough — and it runs on a laptop with zero network calls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Just trust the model.&lt;/strong&gt; This is the one that quietly costs the most. SEO is a domain where stale and invented facts &lt;em&gt;look&lt;/em&gt; identical to fresh ones in a chat bubble. When every claim can be traced back to a note with sources, "the agent said so" becomes "the knowledge base says so, here's the citation".&lt;/p&gt;

&lt;h2&gt;
  
  
  Under the hood
&lt;/h2&gt;

&lt;p&gt;The server is a small Node.js stdio process. The free layer ships a static JSON snapshot generated from the public site; search is a compact ranking pass over the bundled notes; vault mode reads Markdown from disk. No vector database, no telemetry, no network calls. The whole thing is one npm package: &lt;a href="https://www.npmjs.com/package/xknow-mcp" rel="noopener noreferrer"&gt;&lt;code&gt;xknow-mcp&lt;/code&gt;&lt;/a&gt;, with the source on &lt;a href="https://github.com/techreone/xknow-mcp" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; if you want to see how the graph walk works.&lt;/p&gt;

&lt;p&gt;If you're building agent workflows that touch SEO or SaaS growth questions — content audits, brief writing, competitor analysis — I'd rather have the agent answer from a curated, cited corpus than from memory. Setup is one command; unfork it if it doesn't earn its keep.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Links: &lt;a href="https://xknow.org/mcp" rel="noopener noreferrer"&gt;XKnow MCP&lt;/a&gt; · &lt;a href="https://xknow.org/vaults/seo" rel="noopener noreferrer"&gt;Knowledge base&lt;/a&gt; · &lt;a href="https://github.com/techreone/xknow-mcp" rel="noopener noreferrer"&gt;Source&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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