<?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>Forem: Wannavf</title>
    <description>The latest articles on Forem by Wannavf (@wannavf).</description>
    <link>https://forem.com/wannavf</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%2F3917730%2F8db35a4f-5906-4406-84d5-d32f2a755cd5.png</url>
      <title>Forem: Wannavf</title>
      <link>https://forem.com/wannavf</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/wannavf"/>
    <language>en</language>
    <item>
      <title>MCP Sentinel v1.0 Is Out: A Lockfile for MCP Tool Schemas</title>
      <dc:creator>Wannavf</dc:creator>
      <pubDate>Sat, 09 May 2026 08:51:32 +0000</pubDate>
      <link>https://forem.com/wannavf/mcp-sentinel-v10-is-out-a-lockfile-for-mcp-tool-schemas-3hb5</link>
      <guid>https://forem.com/wannavf/mcp-sentinel-v10-is-out-a-lockfile-for-mcp-tool-schemas-3hb5</guid>
      <description>&lt;p&gt;A few days ago I posted about a problem I hit with MCP tool schema drift.&lt;/p&gt;

&lt;p&gt;The short version:&lt;/p&gt;

&lt;p&gt;An MCP server changed a parameter from &lt;code&gt;location&lt;/code&gt; to &lt;code&gt;city&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;My agent kept sending &lt;code&gt;location&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Nothing warned me before runtime.&lt;/p&gt;

&lt;p&gt;That first version of MCP Sentinel was just the basic idea:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sentinel init
sentinel snapshot
sentinel check
sentinel diff
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Since then, I shipped &lt;strong&gt;MCP Sentinel v1.0.0&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;GitHub:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://github.com/Wannavf/mcp-sentinel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;npm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @wannavf/mcp-sentinel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The framing changed a bit
&lt;/h2&gt;

&lt;p&gt;The original problem was annoying because it broke my tools silently.&lt;/p&gt;

&lt;p&gt;But after feedback, I think the bigger point is this:&lt;/p&gt;

&lt;p&gt;MCP tool schemas are contracts.&lt;/p&gt;

&lt;p&gt;If a tool changes its parameters, required fields, enum values, return shape, or descriptions, that is not just a small implementation detail.&lt;/p&gt;

&lt;p&gt;It changes what an agent can ask for.&lt;/p&gt;

&lt;p&gt;It can also change when the agent decides to use that tool.&lt;/p&gt;

&lt;p&gt;That matters a lot for MCP servers around:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;databases
filesystems
cloud infrastructure
admin tools
internal APIs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A broken weather tool is annoying.&lt;/p&gt;

&lt;p&gt;A silently changed database or infrastructure tool can be much worse.&lt;/p&gt;

&lt;h2&gt;
  
  
  What v1.0 adds
&lt;/h2&gt;

&lt;p&gt;The first version was basically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;snapshot
check
diff
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;v1.0 now has a fuller workflow.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sentinel init
sentinel discover &lt;span class="nt"&gt;--write&lt;/span&gt;
sentinel doctor
sentinel snapshot
sentinel check
sentinel diff
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Discovery
&lt;/h2&gt;

&lt;p&gt;You can now ask Sentinel to find MCP servers from common config locations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sentinel discover
sentinel discover &lt;span class="nt"&gt;--write&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It can look for MCP-shaped configs and help import servers into &lt;code&gt;sentinel.config.json&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This makes onboarding less manual.&lt;/p&gt;

&lt;h2&gt;
  
  
  Doctor
&lt;/h2&gt;

&lt;p&gt;There is now a setup check:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sentinel doctor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It checks whether Sentinel can see your config, whether servers are configured correctly, and whether the lockfile exists.&lt;/p&gt;

&lt;p&gt;Instead of guessing why something does not work, you get a quick sanity check.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dashboard
&lt;/h2&gt;

&lt;p&gt;There is also a terminal dashboard:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sentinel dashboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sentinel db
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It lets you inspect configured servers, snapshots, checks, activity, and drift locally.&lt;/p&gt;

&lt;p&gt;It is not the main feature, but it is useful when testing MCP servers during development.&lt;/p&gt;

&lt;h2&gt;
  
  
  CI
&lt;/h2&gt;

&lt;p&gt;The main use case is still CI.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sentinel check
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If a server changed its tool contract, CI can fail before the agent discovers the break at runtime.&lt;/p&gt;

&lt;p&gt;There is also a GitHub Action:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;MCP Schema Check&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;pull_request&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;drift&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Wannavf/mcp-sentinel@main&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;fail-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;MAJOR&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Reports
&lt;/h2&gt;

&lt;p&gt;Sentinel can output diffs in multiple formats:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sentinel diff &lt;span class="nt"&gt;--format&lt;/span&gt; json
sentinel diff &lt;span class="nt"&gt;--format&lt;/span&gt; markdown
sentinel diff &lt;span class="nt"&gt;--format&lt;/span&gt; sarif
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SARIF can be uploaded to GitHub Code Scanning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Transports
&lt;/h2&gt;

&lt;p&gt;v1.0 supports:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;stdio
Streamable HTTP
SSE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example stdio 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;"compatibility"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BACKWARD"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"failOn"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MAJOR"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"servers"&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;"filesystem"&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;"transport"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"stdio"&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;"@modelcontextprotocol/server-filesystem"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&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;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;Example HTTP 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;"servers"&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;"remote"&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;"transport"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http"&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;"http://localhost:3000/mcp"&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 catches
&lt;/h2&gt;

&lt;p&gt;Sentinel classifies changes as &lt;code&gt;MAJOR&lt;/code&gt;, &lt;code&gt;MINOR&lt;/code&gt;, or &lt;code&gt;PATCH&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Examples of &lt;code&gt;MAJOR&lt;/code&gt; changes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tool removed
required parameter removed
parameter type changed
optional parameter made required
constraint tightened
enum value removed
output field removed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Examples of safer changes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;optional parameter added
tool added
enum value added
description updated
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The goal is not to block every change.&lt;/p&gt;

&lt;p&gt;The goal is to make tool contract changes explicit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I think this matters
&lt;/h2&gt;

&lt;p&gt;Without a lockfile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MCP server changes
agent breaks later
you debug at runtime
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With a lockfile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MCP server changes
CI detects drift
you review the contract change
you decide whether to accept it
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That feels like a missing piece in MCP tooling.&lt;/p&gt;

&lt;p&gt;Package managers have lockfiles.&lt;/p&gt;

&lt;p&gt;APIs have contracts.&lt;/p&gt;

&lt;p&gt;MCP tool schemas should have a review point too.&lt;/p&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @wannavf/mcp-sentinel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&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; @wannavf/mcp-sentinel &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GitHub:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://github.com/Wannavf/mcp-sentinel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;npm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://www.npmjs.com/package/@wannavf/mcp-sentinel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I would especially like feedback from people using MCP with database, filesystem, infrastructure, or internal admin tools.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>devtools</category>
      <category>opensource</category>
    </item>
    <item>
      <title>My MCP Tools Broke Silently; So I Built a Lockfile for MCP</title>
      <dc:creator>Wannavf</dc:creator>
      <pubDate>Thu, 07 May 2026 11:00:49 +0000</pubDate>
      <link>https://forem.com/wannavf/my-mcp-tools-broke-silently-so-i-built-a-lockfile-for-mcp-2dah</link>
      <guid>https://forem.com/wannavf/my-mcp-tools-broke-silently-so-i-built-a-lockfile-for-mcp-2dah</guid>
      <description>&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;I run AI agents that depend on MCP servers. One morning, everything broke. No error message. No warning. Just silent failures.&lt;/p&gt;

&lt;p&gt;After 4 hours of debugging, I found it: the MCP server updated and renamed a parameter from &lt;code&gt;location&lt;/code&gt; to &lt;code&gt;city&lt;/code&gt;. My agent was still sending &lt;code&gt;location&lt;/code&gt;. The server returned a cryptic &lt;code&gt;-32602&lt;/code&gt; error.&lt;/p&gt;

&lt;p&gt;The MCP spec has 9,400+ servers and 97 million SDK downloads per month. But it has &lt;strong&gt;zero per-tool versioning&lt;/strong&gt;. When a server changes its tool schemas, nothing tells you what changed or whether it matters.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;MCP Sentinel&lt;/strong&gt; a lockfile for MCP servers. Think &lt;code&gt;package-lock.json&lt;/code&gt;, but for MCP tool schemas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @wannavf/mcp-sentinel

sentinel init          &lt;span class="c"&gt;# Setup wizard&lt;/span&gt;
sentinel snapshot      &lt;span class="c"&gt;# Lock current schemas&lt;/span&gt;
sentinel check         &lt;span class="c"&gt;# Detect drift → exit code for CI&lt;/span&gt;
sentinel diff          &lt;span class="c"&gt;# See exactly what changed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/Wannavf/mcp-sentinel" rel="noopener noreferrer"&gt;github.com/Wannavf/mcp-sentinel&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;npm:&lt;/strong&gt; &lt;code&gt;npm install -g @wannavf/mcp-sentinel&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;License:&lt;/strong&gt; MIT&lt;/p&gt;

&lt;p&gt;Issues and PRs welcome.&lt;/p&gt;

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