<?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: Chrysostomos Koumides</title>
    <description>The latest articles on DEV Community by Chrysostomos Koumides (@chrysostomos_koumides_bf8).</description>
    <link>https://dev.to/chrysostomos_koumides_bf8</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%2F3648289%2F0a919657-7075-440e-8be6-fd6f4f6b5355.jpg</url>
      <title>DEV Community: Chrysostomos Koumides</title>
      <link>https://dev.to/chrysostomos_koumides_bf8</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chrysostomos_koumides_bf8"/>
    <language>en</language>
    <item>
      <title>Building SpecSync: How I Extended Kiro with Custom MCP Tools</title>
      <dc:creator>Chrysostomos Koumides</dc:creator>
      <pubDate>Fri, 05 Dec 2025 17:00:32 +0000</pubDate>
      <link>https://dev.to/chrysostomos_koumides_bf8/building-specsync-how-i-extended-kiro-with-custom-mcp-tools-2ilg</link>
      <guid>https://dev.to/chrysostomos_koumides_bf8/building-specsync-how-i-extended-kiro-with-custom-mcp-tools-2ilg</guid>
      <description>&lt;h2&gt;
  
  
  I Built a Tool That Stops Your Code and Docs From Lying to Each Other
&lt;/h2&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%2Fp5jtx6y7xp39ci63ppzy.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%2Fp5jtx6y7xp39ci63ppzy.png" alt="Logo of SpecSync" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Picture this: It's 2 AM. Production is down. Your frontend is calling &lt;code&gt;GET /users/{id}/posts&lt;/code&gt;. The backend removed that endpoint three weeks ago. The tests? All green. The docs? Still show the endpoint exists.&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%2Fpjuk27jfz0h613vw0gun.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpjuk27jfz0h613vw0gun.jpg" alt="Programmer without SpecSync holding its head in despair" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How did this happen?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Someone updated the code. Forgot to update the tests. Definitely forgot the docs. The spec? Nobody's looked at that in months.&lt;/p&gt;

&lt;p&gt;This is &lt;strong&gt;drift&lt;/strong&gt;, when your code, tests, docs, and specs slowly become strangers to each other. And it's killing your velocity.&lt;/p&gt;
&lt;h2&gt;
  
  
  What if Your Git Commits Just... Refused to Lie?
&lt;/h2&gt;

&lt;p&gt;That's SpecSync. It's a pre-commit hook on &lt;strong&gt;steroids&lt;/strong&gt; that validates everything stays in sync, before the commit even happens.&lt;/p&gt;
&lt;h2&gt;
  
  
  Here's What Happens
&lt;/h2&gt;

&lt;p&gt;You add a new endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add backend/handlers/user.py
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Add user posts endpoint.
"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SpecSync blocks you:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;❌ Hold up. You added an endpoint, but:
   - No spec for it
   - No tests for it  
   - No docs for it

Fix these and try again.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You fix it. Commit succeeds. &lt;strong&gt;Zero lies in your git history.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Microservices Problem
&lt;/h2&gt;

&lt;p&gt;Your backend team ships a breaking change. Your frontend? Still calling the old endpoint. You find out in production.&lt;/p&gt;

&lt;p&gt;SpecSync Bridge fixes this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backend:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;specsync-bridge extract  &lt;span class="c"&gt;# Extracts API contract&lt;/span&gt;
git push                 &lt;span class="c"&gt;# Shares it&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Frontend (auto-syncs every hour):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;specsync-bridge validate

❌ You&lt;span class="s1"&gt;'re calling GET /users/{id}/posts
   Backend removed it last week.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;You find out in development, not production.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Three Things That Make This Actually Usable
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Setup is One Command
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;specsync-bridge setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It auto-detects everything, asks a few questions, and you're done. No YAML hell.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Auto-Sync Just Works
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;specsync-bridge auto-sync &lt;span class="nt"&gt;--enable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Contracts sync every hour automatically. Silent. In the background. You get notified only when something breaks.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. It Uses Git (No New Infrastructure)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;specsync-bridge add-dependency backend &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--git-url&lt;/span&gt; https://github.com/org/backend.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. No Kafka. No service mesh. No databases. Just git.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real Talk: Does This Actually Work?
&lt;/h2&gt;

&lt;p&gt;I tested it on a microservices project with 5 services. Here's what happened:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Week 1:&lt;/strong&gt; Found 23 drift issues we didn't know existed. Ouch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Week 2:&lt;/strong&gt; Caught 3 breaking changes before they hit staging.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Week 3:&lt;/strong&gt; New developer onboarded. Trusted the docs. They were actually correct. Mind blown.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Week 4:&lt;/strong&gt; Zero production incidents from API mismatches.&lt;/p&gt;

&lt;p&gt;The team's reaction? "Why didn't this exist before?"&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It (Takes 2 Minutes)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;specsync-bridge
specsync-bridge setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Answer a few questions. Done.&lt;/p&gt;

&lt;p&gt;It's open source: &lt;a href="https://github.com/chryskoum/specsync" rel="noopener noreferrer"&gt;github.com/chryskoum/specsync&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Motto of SpecSync
&lt;/h2&gt;

&lt;p&gt;Your code lies. Your docs lie. Your tests lie. They don't mean to, they just drift apart over time.&lt;/p&gt;

&lt;p&gt;SpecSync makes them tell the truth. At commit time. Automatically. Forever.&lt;/p&gt;

&lt;p&gt;No drift in git = no drift in production.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Questions? Roast my code? Let me know in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>kiro</category>
      <category>mcp</category>
      <category>api</category>
      <category>testing</category>
    </item>
  </channel>
</rss>
