<?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: Elvis Kurtnebiev</title>
    <description>The latest articles on DEV Community by Elvis Kurtnebiev (@elvis_kurtnebiev_1c6f57fd).</description>
    <link>https://dev.to/elvis_kurtnebiev_1c6f57fd</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3848250%2Ff86d51d1-ebc1-4c83-9207-99cd255d309a.png</url>
      <title>DEV Community: Elvis Kurtnebiev</title>
      <link>https://dev.to/elvis_kurtnebiev_1c6f57fd</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/elvis_kurtnebiev_1c6f57fd"/>
    <language>en</language>
    <item>
      <title>Knowledge Base That AI Agents Can Query via MCP</title>
      <dc:creator>Elvis Kurtnebiev</dc:creator>
      <pubDate>Wed, 01 Apr 2026 19:35:58 +0000</pubDate>
      <link>https://dev.to/elvis_kurtnebiev_1c6f57fd/knowledge-base-that-ai-agents-can-query-via-mcp-43n7</link>
      <guid>https://dev.to/elvis_kurtnebiev_1c6f57fd/knowledge-base-that-ai-agents-can-query-via-mcp-43n7</guid>
      <description>&lt;p&gt;We've all been there: you hit a cryptic error, paste it into Google, and end up on a Stack Overflow thread from 2019. The accepted answer uses a deprecated API. The comments say "this doesn't work anymore." And your AI assistant confidently generates a fix based on that same outdated answer.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;DevFix&lt;/strong&gt; to fix this loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is DevFix?
&lt;/h2&gt;

&lt;p&gt;DevFix is a structured &lt;strong&gt;problem → solution&lt;/strong&gt; knowledge base designed for two audiences simultaneously:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Developers&lt;/strong&gt; browsing via web UI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI coding agents&lt;/strong&gt; (Claude Code, Cursor, Windsurf) querying via MCP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every solution is versioned by tech stack, community-verified through voting, and searchable via semantic similarity — not keywords.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live at &lt;a href="https://devfix.tech" rel="noopener noreferrer"&gt;devfix.tech&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem With Existing Sources
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Stack Overflow&lt;/th&gt;
&lt;th&gt;GitHub Issues&lt;/th&gt;
&lt;th&gt;ChatGPT / LLMs&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Structured?&lt;/td&gt;
&lt;td&gt;Partially&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Version-aware?&lt;/td&gt;
&lt;td&gt;Rarely&lt;/td&gt;
&lt;td&gt;Sometimes&lt;/td&gt;
&lt;td&gt;Hallucinated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Machine-readable?&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Up-to-date?&lt;/td&gt;
&lt;td&gt;Often stale&lt;/td&gt;
&lt;td&gt;Buried in threads&lt;/td&gt;
&lt;td&gt;Training cutoff&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;DevFix solves this by enforcing structure: every solution has a &lt;strong&gt;problem&lt;/strong&gt;, &lt;strong&gt;symptoms&lt;/strong&gt;, &lt;strong&gt;tech stack with versions&lt;/strong&gt;, &lt;strong&gt;solution&lt;/strong&gt;, &lt;strong&gt;code snippet&lt;/strong&gt;, and &lt;strong&gt;caveats&lt;/strong&gt;. This structure makes solutions both human-readable and machine-queryable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture: MCP-First
&lt;/h2&gt;

&lt;p&gt;Most dev tools are built for humans first, with an API bolted on later. DevFix flips this — the &lt;strong&gt;MCP server is the primary interface&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI Agents (Claude Code, Cursor, Windsurf)     Developers (browser)
              │                                       │
              ▼                                       ▼
       MCP Server (SSE)                        Next.js Web UI
              │                                       │
              └──────────► REST API (Go/Gin) ◄────────┘
                                │
                       ┌────────┴────────┐
                       ▼                 ▼
                  PostgreSQL          pgvector
                  (data)           (semantic search)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both interfaces share the same API layer, so a solution submitted through the web UI is instantly available to agents, and vice versa.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 4 MCP Tools
&lt;/h2&gt;

&lt;p&gt;DevFix exposes four tools via MCP:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;code&gt;search_solutions&lt;/code&gt; — Semantic Search
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;query:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Docker container cannot resolve host.docker.internal on Linux"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;tags:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"docker,linux"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;limit:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No keyword matching. The query is embedded into a 384-dimensional vector and compared against all solutions using cosine similarity via pgvector. Results come back ranked with similarity scores.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;code&gt;get_solution&lt;/code&gt; — Full Solution by ID
&lt;/h3&gt;

&lt;p&gt;Returns the complete solution record: problem, symptoms, stack, code snippet, caveats, vote counts, verification status.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;code&gt;submit_solution&lt;/code&gt; — Contribute Back
&lt;/h3&gt;

&lt;p&gt;Agents can submit solutions they've discovered — but with guardrails:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Solutions always start as &lt;strong&gt;"unverified"&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Agent submissions are labeled &lt;strong&gt;"submitted by agent"&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Duplicate detection&lt;/strong&gt;: if a &amp;gt;90% similar solution exists, it suggests voting on the existing one instead of creating a duplicate&lt;/li&gt;
&lt;li&gt;Agents never auto-submit — they must ask the user first&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. &lt;code&gt;vote_solution&lt;/code&gt; — Community Verification
&lt;/h3&gt;

&lt;p&gt;Three vote types: &lt;strong&gt;works&lt;/strong&gt;, &lt;strong&gt;outdated&lt;/strong&gt;, &lt;strong&gt;wrong&lt;/strong&gt;. When a solution reaches 3+ "works" votes, it automatically upgrades to "community_verified" status.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Actually Works: The Agent Flow
&lt;/h2&gt;

&lt;p&gt;Here's a real scenario:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You're debugging a Kotlin Multiplatform iOS build. The linker throws &lt;code&gt;Undefined symbols for architecture arm64&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Your AI agent (Claude Code) calls &lt;code&gt;search_solutions&lt;/code&gt; with the error text&lt;/li&gt;
&lt;li&gt;DevFix returns a ranked list of matching solutions with similarity scores&lt;/li&gt;
&lt;li&gt;The agent reads the top match via &lt;code&gt;get_solution&lt;/code&gt; — it includes a code fix for &lt;code&gt;build.gradle.kts&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The agent applies the fix&lt;/li&gt;
&lt;li&gt;Later, if the agent solves a &lt;em&gt;new&lt;/em&gt; problem, it asks you: "Want me to submit this solution to DevFix?" → calls &lt;code&gt;submit_solution&lt;/code&gt; with your approval&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The agent never leaves your terminal. No browser tab. No copy-paste.&lt;/p&gt;

&lt;h2&gt;
  
  
  Semantic Search With pgvector
&lt;/h2&gt;

&lt;p&gt;The secret sauce is vector search. Here's how it works under the hood:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Embeddings service&lt;/strong&gt; (Python/FastAPI) runs the &lt;code&gt;all-MiniLM-L6-v2&lt;/code&gt; Sentence Transformer model locally — no API calls to OpenAI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;SentenceTransformer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;all-MiniLM-L6-v2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nd"&gt;@app.post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/embed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;embed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EmbedRequest&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;vec&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;tolist&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;embedding&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;vec&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;# 384-dim vector
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;PostgreSQL + pgvector&lt;/strong&gt; stores and indexes the vectors:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;solutions&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="n"&gt;UUID&lt;/span&gt; &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="n"&gt;gen_random_uuid&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;problem&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;symptoms&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;
    &lt;span class="n"&gt;tags&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;
    &lt;span class="n"&gt;stack&lt;/span&gt; &lt;span class="n"&gt;JSONB&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;solution&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;code_snippet&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;embedding&lt;/span&gt; &lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;384&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;  &lt;span class="c1"&gt;-- pgvector column&lt;/span&gt;
    &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="s1"&gt;'unverified'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;votes_works&lt;/span&gt; &lt;span class="nb"&gt;INT&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="c1"&gt;-- ...&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;INDEX&lt;/span&gt; &lt;span class="n"&gt;idx_solutions_embedding&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;solutions&lt;/span&gt;
    &lt;span class="k"&gt;USING&lt;/span&gt; &lt;span class="n"&gt;ivfflat&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt; &lt;span class="n"&gt;vector_cosine_ops&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;WITH&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lists&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Search query&lt;/strong&gt; uses cosine distance:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;similarity&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;solutions&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;similarity&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result: you search with natural language ("my Docker container can't reach the host machine on Linux") and get back the right solution, even if it uses completely different wording.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect in 30 Seconds
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Claude Code
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; sse devfix https://devfix.tech/mcp/sse
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or add to your project's &lt;code&gt;.mcp.json&lt;/code&gt;:&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;"devfix"&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;"sse"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://devfix.tech/mcp/sse"&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;h3&gt;
  
  
  Cursor
&lt;/h3&gt;

&lt;p&gt;Settings → MCP Servers → Add Server → SSE → &lt;code&gt;https://devfix.tech/mcp/sse&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Windsurf
&lt;/h3&gt;

&lt;p&gt;Add to &lt;code&gt;~/.codeium/windsurf/mcp_config.json&lt;/code&gt;:&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;"devfix"&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;"serverUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://devfix.tech/mcp/sse"&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;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Tech&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;Go + Gin&lt;/td&gt;
&lt;td&gt;Fast, single binary, minimal dependencies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;Next.js 16 + React 19&lt;/td&gt;
&lt;td&gt;SSR for SEO, dark theme&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;PostgreSQL 16 + pgvector&lt;/td&gt;
&lt;td&gt;Proven reliability + vector search&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Embeddings&lt;/td&gt;
&lt;td&gt;Sentence Transformers (all-MiniLM-L6-v2)&lt;/td&gt;
&lt;td&gt;Local inference, no API costs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP Transport&lt;/td&gt;
&lt;td&gt;SSE (Server-Sent Events)&lt;/td&gt;
&lt;td&gt;HTTP-based, works through proxies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hosting&lt;/td&gt;
&lt;td&gt;Hetzner + Docker Compose&lt;/td&gt;
&lt;td&gt;Full control, ~€5/month&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What I Learned Building This
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;MCP is surprisingly straightforward.&lt;/strong&gt; Using the &lt;code&gt;mcp-go&lt;/code&gt; SDK, defining a tool is just a function with typed parameters. The hardest part was configuring Nginx for SSE — you need &lt;code&gt;proxy_buffering off&lt;/code&gt; and long read timeouts, or the connection drops silently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;pgvector is production-ready.&lt;/strong&gt; With ivfflat indexing, semantic search over thousands of solutions takes &amp;lt;50ms. No need for a separate vector database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structure beats volume.&lt;/strong&gt; 20 well-structured solutions with version info and caveats are more useful than 2,000 unstructured forum threads. The constraint of filling out symptoms, stack versions, and caveats forces contributors to think about what actually matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Auto-submit workflow&lt;/strong&gt;: agents can propose solutions inline, with one-click approval&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CI/CD integration&lt;/strong&gt;: surface relevant solutions when your build fails&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reputation system&lt;/strong&gt;: track contributor reliability over time&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More seed data&lt;/strong&gt;: growing the initial solution set across ecosystems&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Browse&lt;/strong&gt;: &lt;a href="https://devfix.tech" rel="noopener noreferrer"&gt;devfix.tech&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connect your agent&lt;/strong&gt;: &lt;code&gt;claude mcp add --transport sse devfix https://devfix.tech/mcp/sse&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contribute&lt;/strong&gt;: submit solutions through the web UI or via MCP&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/elvis-kurtnebiiev/dev-fix" rel="noopener noreferrer"&gt;elvis-kurtnebiiev/dev-fix&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you've solved a problem that took you hours, someone else is hitting it right now. DevFix makes sure that fix is findable — by humans &lt;em&gt;and&lt;/em&gt; machines.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;DevFix is open-source. Check out the repo at &lt;a href="https://github.com/elvis-kurtnebiiev/dev-fix" rel="noopener noreferrer"&gt;github.com/elvis-kurtnebiiev/dev-fix&lt;/a&gt;. If you have questions or want to contribute, drop a comment below or open an issue.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>opensource</category>
      <category>devtools</category>
    </item>
  </channel>
</rss>
