<?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: AboJad</title>
    <description>The latest articles on DEV Community by AboJad (@tornidomarocweb).</description>
    <link>https://dev.to/tornidomarocweb</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%2F3872982%2F2704cf95-2477-478a-8c9f-3a6f05d3b1c8.png</url>
      <title>DEV Community: AboJad</title>
      <link>https://dev.to/tornidomarocweb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tornidomarocweb"/>
    <language>en</language>
    <item>
      <title>Last night I ran Fixor on one of my own repos. Here's what came back in 24 seconds -screenshot below-</title>
      <dc:creator>AboJad</dc:creator>
      <pubDate>Tue, 28 Apr 2026 16:53:35 +0000</pubDate>
      <link>https://dev.to/tornidomarocweb/last-night-i-ran-fixor-on-one-of-my-own-repos-heres-what-came-back-in-24-seconds-screenshot-5d81</link>
      <guid>https://dev.to/tornidomarocweb/last-night-i-ran-fixor-on-one-of-my-own-repos-heres-what-came-back-in-24-seconds-screenshot-5d81</guid>
      <description>&lt;p&gt;Fixor is a GitHub App I've been building for the last few months. It reviews every PR for SQL injection before merge. Not a linter, not Semgrep it reads the actual diff, runs a triage pass, then asks an LLM to generate a parameterized fix that compiles in the existing codebase.&lt;br&gt;&lt;br&gt;
The repo in the screenshot is knowflow. The PR added a single line: db.query("SELECT * FROM users WHERE id = " + req.params.id). Fixor flagged it as high severity, posted the file and line, generated a parameterized replacement, and dropped a PDF report and a SARIF 2.1.0 log as PR comments. The PDF is for compliance. The SARIF feeds into GitHub Code Scanning if you use it.&lt;br&gt;
 Total time: 24 seconds. No CI step. No config. Install the App on a repo and it works on the next PR.&lt;br&gt;
 The hard part of building this wasn't the detection that's a regex in two lines. The hard part was the layer that decides what reaches the LLM, and the layer after that decides what reaches the developer. Early versions flagged ORM queries that were already safe. Current version triages findings before the LLM call, then applies per-org filtering after. False positive rate sits under 5% on the repos I've tested.&lt;br&gt;&lt;br&gt;
Going public next week. If you run a repo with database queries and want to install it the day it ships, drop a comment and I'll send you the link before the public launch.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo2z68sh5b5ha2q8jcbkc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo2z68sh5b5ha2q8jcbkc.png" alt=" " width="541" height="543"&gt;&lt;/a&gt;        &lt;/p&gt;

</description>
    </item>
    <item>
      <title>I built a GitHub App that reviews every PR for SQL injection using Claude AI – free for 3 repos</title>
      <dc:creator>AboJad</dc:creator>
      <pubDate>Sun, 19 Apr 2026 04:27:33 +0000</pubDate>
      <link>https://dev.to/tornidomarocweb/i-built-a-github-app-that-reviews-every-pr-for-sql-injection-using-claude-ai-free-for-3-repos-2j2i</link>
      <guid>https://dev.to/tornidomarocweb/i-built-a-github-app-that-reviews-every-pr-for-sql-injection-using-claude-ai-free-for-3-repos-2j2i</guid>
      <description>&lt;p&gt;Shipped Fixor last month. It's a GitHub App that installs in 30 seconds and &lt;br&gt;
runs automatically on every PR.&lt;/p&gt;

&lt;p&gt;What it does: sends the PR diff to Claude AI, detects SQL injection &lt;br&gt;
vulnerabilities in context (not just pattern matching), and posts a review &lt;br&gt;
comment directly on the PR with the exact file/line, severity level, risk &lt;br&gt;
explanation, and a safe code replacement.&lt;/p&gt;

&lt;p&gt;It also generates a downloadable PDF report per scan — useful if you need &lt;br&gt;
something compliance-ready to share with your team or a client.&lt;/p&gt;

&lt;p&gt;Real output from a scan on my own repo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2 vulnerabilities found (1 high, 1 medium)&lt;/li&gt;
&lt;li&gt;2 fixes generated&lt;/li&gt;
&lt;li&gt;Scan completed in 13 seconds&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pricing: Free (3 repos) / Pro $19/mo / Enterprise $99/mo&lt;/p&gt;

&lt;p&gt;Would genuinely appreciate installs and harsh feedback — especially if &lt;br&gt;
something in the output is confusing or wrong.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://tornidomaroc-web.github.io/fixor/" rel="noopener noreferrer"&gt;https://tornidomaroc-web.github.io/fixor/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm3b8e0lvgo2tkdk0kz4l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm3b8e0lvgo2tkdk0kz4l.png" alt=" " width="593" height="642"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>github</category>
      <category>security</category>
      <category>showdev</category>
    </item>
    <item>
      <title>KnowFlow — I Built a Document AI for the 400M Arabic Speakers Who Were Never First</title>
      <dc:creator>AboJad</dc:creator>
      <pubDate>Sat, 18 Apr 2026 05:00:16 +0000</pubDate>
      <link>https://dev.to/tornidomarocweb/httpstryknowflowcom-5a6l</link>
      <guid>https://dev.to/tornidomarocweb/httpstryknowflowcom-5a6l</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/weekend-2026-04-16"&gt;Weekend Challenge: Earth Day Edition&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Every year, billions of pages are printed, scanned, and shuffled &lt;br&gt;
around offices — contracts nobody reads fully, reports that answer &lt;br&gt;
questions nobody asks them, catalogs searched by hand. KnowFlow is &lt;br&gt;
my attempt to change that, one document at a time.&lt;/p&gt;

&lt;p&gt;Upload any PDF, DOCX, or Excel file. Ask it a question in Arabic &lt;br&gt;
or English. Get an answer pulled directly from your document — not &lt;br&gt;
from the internet, not hallucinated, from your file. No printing. &lt;br&gt;
No Ctrl+F. No reading 40 pages to find one clause.&lt;/p&gt;

&lt;p&gt;The Earth Day angle is simple: the less we print, scan, and &lt;br&gt;
physically shuffle documents, the better. KnowFlow makes digital &lt;br&gt;
documents actually usable — which is the only way to make them &lt;br&gt;
a real alternative to paper.&lt;/p&gt;

&lt;p&gt;I built it specifically for Arabic speakers because every tool &lt;br&gt;
I found treated Arabic as an afterthought. RTL from day one. &lt;br&gt;
Answers in Arabic that actually make sense. The Arab market is &lt;br&gt;
400 million people who deserve AI built for them, not translated &lt;br&gt;
at them.&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;🔗 Live: &lt;a href="https://tryknowflow.com" rel="noopener noreferrer"&gt;tryknowflow.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/6Jaa-C4G-tc"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/tornidomaroc-web" rel="noopener noreferrer"&gt;
        tornidomaroc-web
      &lt;/a&gt; / &lt;a href="https://github.com/tornidomaroc-web/knowflow" rel="noopener noreferrer"&gt;
        knowflow
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;KnowFlow&lt;/h1&gt;

&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Chat with any document — Arabic &amp;amp; English AI agent, no setup required.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://tryknowflow.com" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7f5323b68fbb32e114bd54b309ac1bfded07b10c90968dc3c710078873874dd8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f44656d6f2d7472796b6e6f77666c6f772e636f6d2d677265656e" alt="Live Demo"&gt;&lt;/a&gt;
&lt;a href="https://www.typescriptlang.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/93c2cf106a4832b140c7fe81c6014c78f3c81470c6e9e2b7cd2220005e72364f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f547970655363726970742d352e782d626c7565" alt="TypeScript"&gt;&lt;/a&gt;
&lt;a href="https://anthropic.com" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7e9a8da478df4cb97e56af29fcd117189db25a3bb40d2c5f9e9f3dbe1da9cee3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436c617564652d4861696b752d6f72616e6765" alt="Claude API"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Upload a PDF or paste a URL. Ask questions in Arabic or English.&lt;br&gt;
KnowFlow streams answers in real time — sourced directly from your document.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Bilingual: Arabic (RTL) + English in the same session&lt;/li&gt;
&lt;li&gt;Streaming responses via Claude Haiku&lt;/li&gt;
&lt;li&gt;PDF, DOCX, and URL ingestion&lt;/li&gt;
&lt;li&gt;Authentication via Supabase&lt;/li&gt;
&lt;li&gt;PRO tier with usage limits&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Stack&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;&lt;code&gt;Next.js 15&lt;/code&gt; · &lt;code&gt;FastAPI&lt;/code&gt; · &lt;code&gt;Claude Haiku&lt;/code&gt; · &lt;code&gt;Supabase&lt;/code&gt; · &lt;code&gt;Railway&lt;/code&gt; · &lt;code&gt;Vercel&lt;/code&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Architecture&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;User → Next.js (Vercel)
         └→ FastAPI (Railway)
               └→ Claude Haiku (streaming)
               └→ Supabase (auth + storage)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Run locally&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Frontend&lt;/span&gt;
&lt;span class="pl-c1"&gt;cd&lt;/span&gt; frontend &lt;span class="pl-k"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm install &lt;span class="pl-k"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm run dev

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Backend&lt;/span&gt;
&lt;span class="pl-c1"&gt;cd&lt;/span&gt; backend &lt;span class="pl-k"&gt;&amp;amp;&amp;amp;&lt;/span&gt; pip install -r requirements.txt
uvicorn main:app --reload&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-dotenv notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-v"&gt;ANTHROPIC_API_KEY&lt;/span&gt;&lt;span class="pl-k"&gt;=&lt;/span&gt;
&lt;span class="pl-v"&gt;SUPABASE_URL&lt;/span&gt;&lt;span class="pl-k"&gt;=&lt;/span&gt;
&lt;span class="pl-v"&gt;SUPABASE_ANON_KEY&lt;/span&gt;&lt;span class="pl-k"&gt;=&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Live&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;🌐 &lt;a href="https://tryknowflow.com" rel="nofollow noopener noreferrer"&gt;tryknowflow.com&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Built by&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/tornidomaroc-web" rel="noopener noreferrer"&gt;AboJad&lt;/a&gt; — Full Stack AI Engineer, Marrakesh 🇲🇦&lt;/p&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/tornidomaroc-web/knowflow" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;I built KnowFlow solo in a few weeks using a stack I could &lt;br&gt;
reason about completely:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frontend:&lt;/strong&gt; Next.js 15 + TypeScript + Tailwind CSS, deployed &lt;br&gt;
on Vercel. RTL support built in from the start — not bolted on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backend:&lt;/strong&gt; Next.js API routes (serverless) handling ingestion, &lt;br&gt;
agent queries, and billing webhooks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI:&lt;/strong&gt; Anthropic's Claude API (claude-haiku) for streaming &lt;br&gt;
responses. The model reads the document content directly — no &lt;br&gt;
vector search, no embeddings in v1. Clean and fast.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ingestion:&lt;/strong&gt; A Python FastAPI service on Railway using &lt;br&gt;
Microsoft's MarkItDown to convert any file format to Markdown &lt;br&gt;
before storing it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Database + Auth:&lt;/strong&gt; Supabase (PostgreSQL + RLS + Storage). &lt;br&gt;
Row-level security means users only ever see their own documents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Billing:&lt;/strong&gt; Paddle as Merchant of Record — handles VAT and &lt;br&gt;
compliance so I don't have to.&lt;/p&gt;

&lt;p&gt;The hardest decision was keeping v1 simple: no RAG, no &lt;br&gt;
embeddings, no vector search. The full document goes into &lt;br&gt;
context. This trades scale for accuracy — for the document &lt;br&gt;
sizes most users have (contracts, reports, catalogs), it works &lt;br&gt;
better than chunked retrieval.&lt;/p&gt;

&lt;p&gt;The most interesting technical moment was the conversation &lt;br&gt;
history implementation. The backend was already saving &lt;br&gt;
everything to Supabase, but the frontend was using useState &lt;br&gt;
only. Fixing it required decoupling the remount key from the &lt;br&gt;
conversation ID — a subtle React batching issue that would &lt;br&gt;
have killed the UX silently.&lt;/p&gt;

&lt;p&gt;I'm one developer, building from Morocco, shipping tools for &lt;br&gt;
a market that's been waiting for someone to build for it first.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
    </item>
    <item>
      <title>Just launched a new service on Fiverr</title>
      <dc:creator>AboJad</dc:creator>
      <pubDate>Sat, 18 Apr 2026 04:50:36 +0000</pubDate>
      <link>https://dev.to/tornidomarocweb/just-launched-a-new-service-on-fiverr-43d4</link>
      <guid>https://dev.to/tornidomarocweb/just-launched-a-new-service-on-fiverr-43d4</guid>
      <description>&lt;p&gt;Validated Q/A datasets for RAG evaluation and LLM fine-tuning — generated from your own documents (PDF, DOCX, URLs).&lt;/p&gt;

&lt;p&gt;Built on Anthropic Claude with a hallucination filter, so you don't ship garbage training data.&lt;/p&gt;

&lt;p&gt;Starting at $150.&lt;/p&gt;

&lt;p&gt;If you're building RAG systems or fine-tuning LLMs and need clean eval data without spending weeks hand-writing it, give it a look:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.fiverr.com/s/ak62v7W" rel="noopener noreferrer"&gt;https://www.fiverr.com/s/ak62v7W&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open to feedback.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F47e2z32o8ocl3639r4h9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F47e2z32o8ocl3639r4h9.png" alt=" " width="800" height="481"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc61zx03a1dj82qfuo9yk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc61zx03a1dj82qfuo9yk.png" alt=" " width="800" height="481"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyeq1lfj8ibsaw08s28dc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyeq1lfj8ibsaw08s28dc.png" alt=" " width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>I built an MCP server that shows your AI agent which files matter — before it breaks something</title>
      <dc:creator>AboJad</dc:creator>
      <pubDate>Sat, 11 Apr 2026 06:16:03 +0000</pubDate>
      <link>https://dev.to/tornidomarocweb/i-built-an-mcp-server-that-shows-your-ai-agent-which-files-matter-before-it-breaks-something-4m1p</link>
      <guid>https://dev.to/tornidomarocweb/i-built-an-mcp-server-that-shows-your-ai-agent-which-files-matter-before-it-breaks-something-4m1p</guid>
      <description>&lt;p&gt;My AI agent broke a billing function last month.&lt;/p&gt;

&lt;p&gt;It wasn't wrong about the code. It just didn't know that file touched payments. It had no way to know.&lt;/p&gt;

&lt;p&gt;That's the problem I built &lt;code&gt;context-ops-mcp&lt;/code&gt; to fix.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the agent was doing wrong
&lt;/h2&gt;

&lt;p&gt;When I'd ask Claude or Cursor to make a change, the agent would either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read every file (wasting my entire context window), or
&lt;/li&gt;
&lt;li&gt;Guess which files were relevant and sometimes guess wrong&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There was no middle ground. No structured view of the repo that said: &lt;em&gt;these files are risky, these are entry points, these are probably what you need for this task.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What context-ops-mcp does
&lt;/h2&gt;

&lt;p&gt;It's a local &lt;a href="https://modelcontextprotocol.io" rel="noopener noreferrer"&gt;Model Context Protocol (MCP)&lt;/a&gt; server. You point it at your project, and your agent gets 6 tools instantly:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;get_project_structure&lt;/code&gt;&lt;/strong&gt; — Full repo map, skipping noise (&lt;code&gt;node_modules&lt;/code&gt;, &lt;code&gt;.git&lt;/code&gt;, &lt;code&gt;dist&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;get_risky_files&lt;/code&gt;&lt;/strong&gt; — Flags auth, DB, env, and payment logic &lt;em&gt;before&lt;/em&gt; the agent touches it&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;get_relevant_files_for_task&lt;/code&gt;&lt;/strong&gt; — You describe a task, it ranks which files actually matter&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;get_entry_points&lt;/code&gt;&lt;/strong&gt; — Finds wiring files, HTTP handlers, bootstrap points&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;get_semantic_summary&lt;/code&gt;&lt;/strong&gt; — Surface-level exports and functions from every &lt;code&gt;.ts&lt;/code&gt; file&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;get_likely_config_files&lt;/code&gt;&lt;/strong&gt; — All config, CI, env, and build files by naming convention&lt;/p&gt;

&lt;p&gt;No cloud sync. No account. No indexer. Just &lt;code&gt;npx&lt;/code&gt; and stdio.&lt;/p&gt;




&lt;h2&gt;
  
  
  Install in 30 seconds
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx context-ops-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or add to your Claude MCP config:&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;"context-ops"&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;"context-ops-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;"cwd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/path/to/your/project"&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;
  
  
  What it's not
&lt;/h2&gt;

&lt;p&gt;I want to be honest about this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It's &lt;strong&gt;heuristic-based&lt;/strong&gt; — pattern matching, not a full AST&lt;/li&gt;
&lt;li&gt;It only reads the &lt;strong&gt;first 50 lines&lt;/strong&gt; per file for semantic checks&lt;/li&gt;
&lt;li&gt;It's &lt;strong&gt;TypeScript-first&lt;/strong&gt; — other languages get minimal treatment&lt;/li&gt;
&lt;li&gt;It does &lt;strong&gt;not replace&lt;/strong&gt; tests, code review, or IDE intelligence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's a navigation layer. The agent still does the work — it just knows where to look first.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I built it as an MCP server
&lt;/h2&gt;

&lt;p&gt;MCP is the right abstraction for this. It plugs into Claude Code, Cursor, Windsurf, and Cline without any custom integration. You configure it once and every agent that supports MCP gets the tools automatically.&lt;/p&gt;

&lt;p&gt;The alternative was building a one-off plugin per tool. That's a maintenance nightmare.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;npm: &lt;a href="https://www.npmjs.com/package/context-ops-mcp" rel="noopener noreferrer"&gt;context-ops-mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/tornidomaroc-web/context-ops-mcp" rel="noopener noreferrer"&gt;tornidomaroc-web/context-ops-mcp&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you use it and hit something broken or missing, open an issue. This is an MVP and I'm actively building on it.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>saas</category>
      <category>ai</category>
      <category>developertools</category>
    </item>
  </channel>
</rss>
