<?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: Evan Lausier</title>
    <description>The latest articles on Forem by Evan Lausier (@evanlausier).</description>
    <link>https://forem.com/evanlausier</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%2F3612885%2Ff46ff15c-b967-473c-9a0a-e711f5b3c758.JPG</url>
      <title>Forem: Evan Lausier</title>
      <link>https://forem.com/evanlausier</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/evanlausier"/>
    <language>en</language>
    <item>
      <title>Why Build a Local MCP Server (And How to Do It in 15 Minutes)</title>
      <dc:creator>Evan Lausier</dc:creator>
      <pubDate>Tue, 14 Apr 2026 20:05:57 +0000</pubDate>
      <link>https://forem.com/evanlausier/why-build-a-local-mcp-server-and-how-to-do-it-in-15-minutes-1423</link>
      <guid>https://forem.com/evanlausier/why-build-a-local-mcp-server-and-how-to-do-it-in-15-minutes-1423</guid>
      <description>&lt;p&gt;I've been working with MCP servers for a few months now. If you're not familiar, MCP (Model Context Protocol) is Anthropic's open standard for connecting AI models to external tools and data sources. Think of it as the API layer between an LLM and the stuff it can actually do.&lt;/p&gt;

&lt;p&gt;There are already a bunch of prebuilt MCP servers out there. Ones that connect to GitHub, Slack, Google Drive, databases, you name it. You can plug them into Claude Desktop or VS Code and start using them immediately. So the obvious question is why would you build your own?&lt;/p&gt;

&lt;p&gt;Here's why. Because the prebuilt ones solve general problems. Your problems are specific.&lt;/p&gt;

&lt;p&gt;Maybe you have a local SQLite database with project data and you want Claude to query it conversationally. Maybe you have a folder full of markdown files that represent your team's internal documentation and you want an AI that can actually search them. Maybe you have a custom API at work that nobody outside your company will ever build an integration for.&lt;/p&gt;

&lt;p&gt;That's the gap. MCP lets you fill it yourself. And the local version is the fastest way to get something running without deploying anything, paying for anything, or asking anyone for permission.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What You Need&lt;/strong&gt;&lt;br&gt;
Python 3.10 or higher and the fastmcp library. That's it.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;shell pip install fastmcp&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you prefer TypeScript, there's an official MCP SDK for that too, but Python is the faster path for a first server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Simplest Possible Server&lt;/strong&gt;&lt;br&gt;
Here's a working MCP server in about 10 lines. This one exposes a single tool that searches through local text files in a directory.&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="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;fastmcp&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;FastMCP&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pathlib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;

&lt;span class="n"&gt;mcp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;FastMCP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Local Notes Search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;NOTES_DIR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;home&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;notes&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="nd"&gt;@mcp.tool&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;search_notes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Search through local notes files for a keyword.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;NOTES_DIR&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;glob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;*.md&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_text&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
            &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;**&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;No notes found matching &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'"&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's a complete MCP server. One file. One tool. When connected to Claude Desktop, you can say "search my notes for anything about project deadlines" and it will actually read your local files and respond.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connecting It to Claude Desktop&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Open your Claude Desktop config file.&lt;br&gt;
On Mac:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;plaintext ~/Library/Application Support/Claude/claude_desktop_config.json&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;On Windows:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;plaintext %APPDATA%\Claude\claude_desktop_config.json&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Add your server to the 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;"local-notes"&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;"python"&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;"/path/to/your/server.py"&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;Restart Claude Desktop. Your tool should show up in the tools menu. That's it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Making It More Useful&lt;/strong&gt;&lt;br&gt;
Once you've got the pattern down, you can add more tools to the same server. Here's what a slightly more practical version looks like with a few tools on one server.&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="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;fastmcp&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;FastMCP&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pathlib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;

&lt;span class="n"&gt;mcp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;FastMCP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;My Local Tools&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;NOTES_DIR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;home&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;notes&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;DATA_DIR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;home&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="nd"&gt;@mcp.tool&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;search_notes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Search local markdown notes for a keyword.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;NOTES_DIR&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;glob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;*.md&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_text&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
            &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;No matches found.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="nd"&gt;@mcp.tool&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;list_notes&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;List all available notes.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;files&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NOTES_DIR&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;glob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;*.md&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;No notes found.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="nd"&gt;@mcp.tool&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;read_note&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Read the full content of a specific note.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NOTES_DIR&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;filename&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;File &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; not found.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_text&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nd"&gt;@mcp.tool&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;query_json_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Look up a key in a local JSON data file.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;DATA_DIR&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;filename&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;File &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; not found.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_text&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;indent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Key &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; not found in &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Four tools, one file, no deployment. You can ask Claude to search your notes, read a specific file, or pull data from local JSON files. Everything runs on your machine. Nothing leaves your network.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to Go Local vs. Remote&lt;/strong&gt;&lt;br&gt;
Local MCP servers make sense when you're working with files on your machine, querying local databases, prototyping a tool before deploying it, or connecting to internal APIs that are only accessible from your network.&lt;/p&gt;

&lt;p&gt;If you need the server to be available across devices, shared with a team, or triggered by other services, that's when you look at hosting it remotely. But for personal productivity and experimentation, local is the move.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Bigger Picture&lt;/strong&gt;&lt;br&gt;
The reason MCP matters isn't the protocol itself. It's that it turns AI from a thing you type questions into to a thing that can actually interact with your environment. Every local tool you expose is one less copy and paste cycle between your terminal and your chat window.&lt;/p&gt;

&lt;p&gt;Start with one tool. Make it solve one problem you actually have. You'll find the second and third ones pretty quickly after that.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>python</category>
      <category>mcp</category>
    </item>
    <item>
      <title>FUNN</title>
      <dc:creator>Evan Lausier</dc:creator>
      <pubDate>Sun, 12 Apr 2026 03:38:20 +0000</pubDate>
      <link>https://forem.com/evanlausier/funn-2203</link>
      <guid>https://forem.com/evanlausier/funn-2203</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/francistrdev/forem-is-slow-so-i-deleti-mean-optimized-it-bln" class="crayons-story__hidden-navigation-link"&gt;Forem (Dev.to) is slow, so I del...optimized it.&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/francistrdev/forem-is-slow-so-i-deleti-mean-optimized-it-bln" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;April Fools Challenge Submission ☕️🤡&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/francistrdev" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F3711376%2F746cce1f-2c09-40fc-9742-387af1855b6d.gif" alt="francistrdev profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/francistrdev" class="crayons-story__secondary fw-medium m:hidden"&gt;
              FrancisTRᴅᴇᴠ (っ◔◡◔)っ
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                FrancisTRᴅᴇᴠ (っ◔◡◔)っ
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png"&gt;&lt;/a&gt;
              
              &lt;div id="story-author-preview-content-3467717" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/francistrdev" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F3711376%2F746cce1f-2c09-40fc-9742-387af1855b6d.gif" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;FrancisTRᴅᴇᴠ (っ◔◡◔)っ&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/francistrdev/forem-is-slow-so-i-deleti-mean-optimized-it-bln" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 7&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/francistrdev/forem-is-slow-so-i-deleti-mean-optimized-it-bln" id="article-link-3467717"&gt;
          Forem (Dev.to) is slow, so I del...optimized it.
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/showdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;showdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/418challenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;418challenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/discuss"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;discuss&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/francistrdev/forem-is-slow-so-i-deleti-mean-optimized-it-bln" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;77&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/francistrdev/forem-is-slow-so-i-deleti-mean-optimized-it-bln#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              45&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            5 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Congrats!</title>
      <dc:creator>Evan Lausier</dc:creator>
      <pubDate>Sat, 11 Apr 2026 11:55:12 +0000</pubDate>
      <link>https://forem.com/evanlausier/congrats-1ahh</link>
      <guid>https://forem.com/evanlausier/congrats-1ahh</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/devteam/top-7-featured-dev-posts-of-the-week-4idc" class="crayons-story__hidden-navigation-link"&gt;Top 7 Featured DEV Posts of the Week&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/devteam/top-7-featured-dev-posts-of-the-week-4idc" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;Beaver-powered databases and ancient AI&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;
          &lt;a class="crayons-logo crayons-logo--l" href="/devteam"&gt;
            &lt;img alt="The DEV Team logo" 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%2Forganization%2Fprofile_image%2F1%2Fd908a186-5651-4a5a-9f76-15200bc6801f.jpg" class="crayons-logo__image" width="800" height="800"&gt;
          &lt;/a&gt;

          &lt;a href="/jess" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&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%2Fuser%2Fprofile_image%2F264%2Fb75f6edf-df7b-406e-a56b-43facafb352c.jpg" alt="jess profile" class="crayons-avatar__image" width="400" height="400"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/jess" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Jess Lee
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Jess Lee
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png" width="166" height="102"&gt;&lt;/a&gt;
              
              &lt;div id="story-author-preview-content-3461619" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/jess" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F264%2Fb75f6edf-df7b-406e-a56b-43facafb352c.jpg" class="crayons-avatar__image" alt="" width="400" height="400"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Jess Lee&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

            &lt;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/devteam" class="crayons-story__secondary fw-medium"&gt;The DEV Team&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/devteam/top-7-featured-dev-posts-of-the-week-4idc" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 6&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/devteam/top-7-featured-dev-posts-of-the-week-4idc" id="article-link-3461619"&gt;
          Top 7 Featured DEV Posts of the Week
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/discuss"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;discuss&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/top7"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;top7&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/devteam/top-7-featured-dev-posts-of-the-week-4idc" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;77&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/devteam/top-7-featured-dev-posts-of-the-week-4idc#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              19&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Oracle, AI, and Who Actually Pays for the Race</title>
      <dc:creator>Evan Lausier</dc:creator>
      <pubDate>Sat, 04 Apr 2026 23:40:25 +0000</pubDate>
      <link>https://forem.com/evanlausier/oracle-ai-and-who-actually-pays-for-the-race-12g9</link>
      <guid>https://forem.com/evanlausier/oracle-ai-and-who-actually-pays-for-the-race-12g9</guid>
      <description>&lt;p&gt;At some point in the last six months or so, we quietly stopped arguing about whether AI was real ot just the next tech bubble waiting to pop.&lt;/p&gt;

&lt;p&gt;That shift matters more than most people realize. Not because the debate was resolved cleanly. It wasn’t. The hype merchants are still out there, still pitching dashboards and slide decks to executives who want to look smart at board meetings. The valuations are still stretched in places. The AI wrapper startups are still going to die by the hundreds.&lt;/p&gt;

&lt;p&gt;But the underlying technology…. That part stopped being a question. We can debate the semantics around it, but it different forms of it are likely to be around for a while.&lt;/p&gt;

&lt;p&gt;And now we are finding out what happens when tens of thousands of people wake up to the answer.&lt;/p&gt;

&lt;p&gt;On March 31st, somewhere around 30,000 Oracle employees started their day the same way. An email arrived at 6 a.m., signed not by anyone they knew, not by a manager, not even by an executive with a name attached to it, but by something called “Oracle Leadership.” By the time most of them finished reading it, their system access was already gone. Their unvested stock was already forfeited. Their careers at one of the largest enterprise software companies in the world were already over.&lt;/p&gt;

&lt;p&gt;This happened, by the way, in the same quarter Oracle posted a 95% jump in net income. $6.13 billion in profit.&lt;/p&gt;

&lt;p&gt;I want to sit with that for a second… because it sounds so strange when you say it outloud…&lt;/p&gt;

&lt;p&gt;Oracle is not the exception here. It is the clearest example of a pattern playing out in plain sight across the entire tech industry. The global tech sector has eliminated nearly 60,000 jobs in the first three months of 2026. That works out to roughly 700 jobs gone every single day. Amazon fired 16,000 people after posting record revenue of $716 billion in 2025. Meta is cutting up to 15,000 workers while simultaneously doubling its AI capital expenditure to $135 billion. Block, Jack Dorsey’s company, cut 40% of its entire workforce and framed it as a competitive necessity.&lt;/p&gt;

&lt;p&gt;The companies doing the cutting are not struggling. They are thriving. They just need cash.&lt;/p&gt;

&lt;p&gt;Specifically, they need cash for data centers.&lt;/p&gt;

&lt;p&gt;Here is the uncomfortable part. The people losing their jobs right now cannot really console themselves with the idea that this is all going to blow over.&lt;/p&gt;

&lt;p&gt;For the past couple of years, there has been a comforting narrative available. The bubble will burst. The dot-com comparison will hold. The breathless valuations will correct, the vaporware startups will vanish, and things will return to something recognizable. That narrative still has some truth in it. The hype bubble will deflate. The me-too AI companies with no moat and no margin will disappear. Stock prices will correct in places.&lt;/p&gt;

&lt;p&gt;But the technology itself is not going anywhere.&lt;/p&gt;

&lt;p&gt;The distinction matters and it is getting lost in the noise. The dot-com crash was built on ideas running on air. Pets.com. Webvan. Companies that were essentially PowerPoint presentations with server rooms attached. Today’s AI infrastructure buildout is different in kind. Oracle currently sits on $523 billion in remaining performance obligations, up 433% year over year. The contracts are real. The data centers being built are physical, steel-and-concrete, take-years-to-construct infrastructure. The demand is real. The technology works.&lt;/p&gt;

&lt;p&gt;That is exactly why the layoffs are happening. Not despite AI succeeding. Because of it.&lt;/p&gt;

&lt;p&gt;When a company like Oracle commits to $156 billion in AI capital spending, it has to find that money somewhere. According to analysis from TD Cowen, the layoffs free up somewhere between $8 billion and $10 billion in annual cash flow. In other words, the salaries, benefits, and unvested equity of 30,000 people are the down payment on the data centers Oracle needs to stay competitive in a race it cannot afford to lose.&lt;/p&gt;

&lt;p&gt;I spent years working inside enterprise software. I know what the teams at a company like Oracle actually build and how long it takes to develop the institutional knowledge that makes a product work for the businesses depending on it. The people who just got that 6 a.m. email were not passengers. They were the product.&lt;/p&gt;

&lt;p&gt;And the AI race ate them.&lt;/p&gt;

&lt;p&gt;The hardest-hit divisions were Revenue and Health Sciences, SaaS operations, and the NetSuite India Development Centre. That last one matters to me specifically. NetSuite is the product that tens of thousands of mid-market businesses run their entire operations on. The people building it, supporting it, and extending it are not interchangeable. You cannot fire a development centre and replace it with a GPU cluster and get the same outcome. Not yet anyway.&lt;/p&gt;

&lt;p&gt;But Oracle is making a bet that the math works out. That building the infrastructure to power the next decade of AI contracts is worth more than preserving the teams that built the last decade of enterprise software. Maybe they are right. Maybe the contract backlog and the data center revenue prove it out over the next few years.&lt;/p&gt;

&lt;p&gt;The people who got that email at 6 a.m. will not be around to find out.&lt;/p&gt;

&lt;p&gt;I am not arguing that AI is bad, or that the race should stop, or that any of this was avoidable given the competitive dynamics at play. I genuinely believe the technology is going to matter in ways we are still figuring out how to articulate. I use it every day. It is already embedded in how I work.&lt;/p&gt;

&lt;p&gt;But I think we owe it to ourselves to be honest about what the cost actually looks like.&lt;/p&gt;

&lt;p&gt;The question was never really whether AI would arrive. It was always who would pay for it.&lt;/p&gt;

&lt;p&gt;Right now the answer is turning out to be the same people it usually is. The ones who built the thing in the first place.&lt;/p&gt;

&lt;p&gt;A race this expensive has to be funded by someone. We just found out who.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://www.cnbc.com/2026/03/31/oracle-layoffs-ai-spending.html" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>culture</category>
      <category>workplace</category>
    </item>
    <item>
      <title>Really Fun!</title>
      <dc:creator>Evan Lausier</dc:creator>
      <pubDate>Fri, 03 Apr 2026 10:26:33 +0000</pubDate>
      <link>https://forem.com/evanlausier/really-fun-252m</link>
      <guid>https://forem.com/evanlausier/really-fun-252m</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/francistrdev/what-is-your-wpm-words-per-minute-1af7" class="crayons-story__hidden-navigation-link"&gt;What is your WPM (Words per Minute)? #1&lt;/a&gt;
    &lt;div class="crayons-article__cover crayons-article__cover__image__feed"&gt;
      &lt;iframe src="https://www.youtube.com/embed/Z9G1Mf6TZRs" title="What is your WPM (Words per Minute)? #1"&gt;&lt;/iframe&gt;
    &lt;/div&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/francistrdev/what-is-your-wpm-words-per-minute-1af7" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;Top scores will feature in a monthly report&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/francistrdev" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F3711376%2F746cce1f-2c09-40fc-9742-387af1855b6d.gif" alt="francistrdev profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/francistrdev" class="crayons-story__secondary fw-medium m:hidden"&gt;
              FrancisTRᴅᴇᴠ (っ◔◡◔)っ
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                FrancisTRᴅᴇᴠ (っ◔◡◔)っ
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png"&gt;&lt;/a&gt;
              
              &lt;div id="story-author-preview-content-3432178" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/francistrdev" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F3711376%2F746cce1f-2c09-40fc-9742-387af1855b6d.gif" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;FrancisTRᴅᴇᴠ (っ◔◡◔)っ&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/francistrdev/what-is-your-wpm-words-per-minute-1af7" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 30&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/francistrdev/what-is-your-wpm-words-per-minute-1af7" id="article-link-3432178"&gt;
          What is your WPM (Words per Minute)? #1
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/discuss"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;discuss&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/watercooler"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;watercooler&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/challenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;challenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/community"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;community&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/francistrdev/what-is-your-wpm-words-per-minute-1af7" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;77&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/francistrdev/what-is-your-wpm-words-per-minute-1af7#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              89&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            1 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Very Helpful!</title>
      <dc:creator>Evan Lausier</dc:creator>
      <pubDate>Sun, 29 Mar 2026 12:00:19 +0000</pubDate>
      <link>https://forem.com/evanlausier/very-helpful-565o</link>
      <guid>https://forem.com/evanlausier/very-helpful-565o</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/lessonsfromproduction/how-to-talk-to-managers-so-they-actually-listen-to-you-44hm" class="crayons-story__hidden-navigation-link"&gt;How to Talk to Managers (So They Actually Listen to You)&lt;/a&gt;
    &lt;div class="crayons-article__cover crayons-article__cover__image__feed"&gt;
      &lt;iframe src="https://www.youtube.com/embed/Vem4mUOgBBI" title="How to Talk to Managers (So They Actually Listen to You)"&gt;&lt;/iframe&gt;
    &lt;/div&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/lessonsfromproduction" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F3164700%2F965947eb-b708-4462-bfbe-6eed765a45cc.jpg" alt="lessonsfromproduction profile" class="crayons-avatar__image" width="640" height="1024"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/lessonsfromproduction" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Mark
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Mark
                
              
              &lt;div id="story-author-preview-content-3417191" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/lessonsfromproduction" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F3164700%2F965947eb-b708-4462-bfbe-6eed765a45cc.jpg" class="crayons-avatar__image" alt="" width="640" height="1024"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Mark&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/lessonsfromproduction/how-to-talk-to-managers-so-they-actually-listen-to-you-44hm" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 27&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/lessonsfromproduction/how-to-talk-to-managers-so-they-actually-listen-to-you-44hm" id="article-link-3417191"&gt;
          How to Talk to Managers (So They Actually Listen to You)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/career"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;career&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/beginners"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;beginners&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/lessonsfromproduction/how-to-talk-to-managers-so-they-actually-listen-to-you-44hm" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;10&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/lessonsfromproduction/how-to-talk-to-managers-so-they-actually-listen-to-you-44hm#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              3&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            6 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>career</category>
      <category>beginners</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>Great Read! Very Relatable!</title>
      <dc:creator>Evan Lausier</dc:creator>
      <pubDate>Sat, 28 Mar 2026 13:49:21 +0000</pubDate>
      <link>https://forem.com/evanlausier/great-read-very-relatable-5486</link>
      <guid>https://forem.com/evanlausier/great-read-very-relatable-5486</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/sylwia-lask/how-i-almost-burned-out-doing-everything-right-31j6" class="crayons-story__hidden-navigation-link"&gt;How I Almost Burned Out Doing Everything “Right”&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/sylwia-lask/how-i-almost-burned-out-doing-everything-right-31j6" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;The irony of ignoring our own advice&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/sylwia-lask" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F3535771%2Fe22860d5-274b-43c9-819b-56b162e5bd5a.jpeg" alt="sylwia-lask profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/sylwia-lask" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Sylwia Laskowska
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Sylwia Laskowska
                
              
              &lt;div id="story-author-preview-content-3381788" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/sylwia-lask" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F3535771%2Fe22860d5-274b-43c9-819b-56b162e5bd5a.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Sylwia Laskowska&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/sylwia-lask/how-i-almost-burned-out-doing-everything-right-31j6" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 26&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/sylwia-lask/how-i-almost-burned-out-doing-everything-right-31j6" id="article-link-3381788"&gt;
          How I Almost Burned Out Doing Everything “Right”
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/discuss"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;discuss&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/career"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;career&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mentalhealth"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mentalhealth&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/sylwia-lask/how-i-almost-burned-out-doing-everything-right-31j6" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;192&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/sylwia-lask/how-i-almost-burned-out-doing-everything-right-31j6#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              112&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            6 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>discuss</category>
      <category>career</category>
      <category>productivity</category>
      <category>mentalhealth</category>
    </item>
    <item>
      <title>What is MCP?</title>
      <dc:creator>Evan Lausier</dc:creator>
      <pubDate>Sat, 21 Mar 2026 21:40:33 +0000</pubDate>
      <link>https://forem.com/evanlausier/what-is-mcp-443b</link>
      <guid>https://forem.com/evanlausier/what-is-mcp-443b</guid>
      <description>&lt;p&gt;If you've been anywhere near developer Twitter or LinkedIn lately, you've probably seen this diagram floating around. Credit to &lt;a href="https://www.linkedin.com/posts/alexxubyte_systemdesign-coding-interviewtips-share-7441153714280800256-sYCp?utm_source=social_share_send&amp;amp;utm_medium=member_desktop_web&amp;amp;rcm=ACoAABTQGW4BBR8GJa2Y1_38Rb1pMgrCd8S37no" rel="noopener noreferrer"&gt;Alex Xu at ByteByteGo&lt;/a&gt; for putting it together so cleanly. It stopped me mid-scroll because it finally gave a clear visual to something I had been reading about in pieces.&lt;/p&gt;

&lt;p&gt;MCP, or Model Context Protocol, is an open standard from Anthropic that gives AI models a structured way to connect to external tools, data sources, and services. Think of it as a universal adapter layer between the model and the rest of your stack. Instead of writing one-off integrations every time you want Claude to touch a database or call an API, MCP gives you a consistent protocol to build against.&lt;/p&gt;

&lt;p&gt;The diagram breaks it down into two layers worth understanding. The top half shows the host architecture, where an MCP host like Claude Desktop or an IDE runs multiple MCP clients, each speaking to a dedicated MCP server that fronts a specific resource. The bottom half gets into the core building blocks, which are the five primitives the whole thing runs on.&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%2Ffs8m6p2ddidvj6unq9se.gif" 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%2Ffs8m6p2ddidvj6unq9se.gif" alt=" " width="800" height="939"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>llm</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Nobody Is Reading Your Blog Post. They Weren't Going To Read Mine Either.</title>
      <dc:creator>Evan Lausier</dc:creator>
      <pubDate>Fri, 06 Mar 2026 19:16:10 +0000</pubDate>
      <link>https://forem.com/evanlausier/nobody-is-reading-your-blog-post-they-werent-going-to-read-mine-either-42j8</link>
      <guid>https://forem.com/evanlausier/nobody-is-reading-your-blog-post-they-werent-going-to-read-mine-either-42j8</guid>
      <description>&lt;p&gt;I was building a slide deck last week... technical content, thoughtful structure, a solid wall of text I was genuinely proud of. Somewhere around slide four I had a moment of uncomfortable clarity.&lt;/p&gt;

&lt;p&gt;Nobody is reading this.&lt;/p&gt;

&lt;p&gt;Not because it's bad. Because nobody reads &lt;em&gt;anything&lt;/em&gt; anymore. And AI-generated content isn't causing that. It's just proving it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Research Was Telling Us This for Decades
&lt;/h2&gt;

&lt;p&gt;Back in 1997, Jakob Nielsen and the Nielsen Norman Group published eye-tracking research showing that users read roughly 20–28% of words on a typical webpage. They scan in an F-pattern: a horizontal sweep across the top, a shorter sweep a bit further down, then a vertical skim down the left edge. That's it.&lt;/p&gt;

&lt;p&gt;The research has been replicated and updated many times since. The pattern holds.&lt;/p&gt;

&lt;p&gt;Then in 2014, Tony Haile at Chartbeat — analyzing data across billions of page views — reported that 55% of visitors spent fewer than 15 seconds on a page. Scroll depth data from the same era consistently showed most readers never made it past the midpoint of an article.&lt;/p&gt;

&lt;p&gt;So let's be precise about what AI-generated content actually revealed: the bar for "good enough to publish" was always lower than we wanted to admit, because the bar for "read carefully" was already underground.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your README Is Unread. Your Docs Are Unread. Your Blog Post Was Unread.
&lt;/h2&gt;

&lt;p&gt;If you've been writing technical content for any meaningful stretch of time, you've felt this. The PR where you wrote a detailed description that someone clearly didn't read before commenting. The documentation page that generates the same support ticket every week. The README with a Prerequisites section that people routinely skip until something breaks.&lt;/p&gt;

&lt;p&gt;This isn't a character flaw in your users. It's a behavior pattern baked in by information overload. We all do it. I do it. You do it.&lt;/p&gt;

&lt;p&gt;We skim for the thing that matches our immediate problem. We ctrl+F. We scroll until something catches our eye. We open five tabs and read none of them completely.&lt;/p&gt;

&lt;p&gt;AI content farms figured this out before most publishers did, which is why they're effective at scale. They're not fooling careful readers. There aren't enough careful readers to matter for their metrics.&lt;/p&gt;

&lt;h2&gt;
  
  
  So What Actually Works
&lt;/h2&gt;

&lt;p&gt;None of this means writing is pointless. It means the format has to do work that the reader won't.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Front-load everything.&lt;/strong&gt; TL;DRs, key takeaways at the top, summary sections before the detail. If the most important sentence is in paragraph six, it will be missed by most people.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Headers are navigation, not decoration.&lt;/strong&gt; Someone scanning your post is making micro-decisions at every header: &lt;em&gt;is this the part I need?&lt;/em&gt; Write headers that answer that question directly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Short paragraphs aren't just stylistic.&lt;/strong&gt; White space gives the eye a place to land. Walls of text read as "skip this block" to a scanner.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code blocks are a rest stop.&lt;/strong&gt; For a technical audience, a well-formatted code snippet is often more read than the paragraphs around it. Use them strategically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The first and last sentence of every section carries disproportionate weight.&lt;/strong&gt; That's where scanners pay attention. Write accordingly.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Uncomfortable Part
&lt;/h2&gt;

&lt;p&gt;Here's what I keep coming back to: the AI content problem isn't really an AI problem.&lt;/p&gt;

&lt;p&gt;It's a publishing-into-a-vacuum problem that we've been doing for years and only now have a mirror for. When a GPT-generated article with thin sourcing and a generic structure outperforms a carefully researched post, that's not AI winning. That's formatting, SEO, and headline copy winning — the same things that were always winning.&lt;/p&gt;

&lt;p&gt;The slide deck I was building? I'm still going to make it. But I rebuilt it with one idea per slide, tight headlines, and the details pushed to speaker notes where they belong.&lt;/p&gt;

&lt;p&gt;The audience was always skimming. The only new thing is that I stopped pretending otherwise.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Has your approach to technical writing or documentation changed as you've gotten more honest about reading behavior? I'm curious what's actually worked — drop it in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>writing</category>
      <category>discuss</category>
    </item>
    <item>
      <title>MCP Servers Are the New Microservices Sprawl (And We're Making All the Same Mistakes)</title>
      <dc:creator>Evan Lausier</dc:creator>
      <pubDate>Tue, 17 Feb 2026 15:05:45 +0000</pubDate>
      <link>https://forem.com/evanlausier/mcp-servers-are-the-new-microservices-sprawl-and-were-making-all-the-same-mistakes-4mmm</link>
      <guid>https://forem.com/evanlausier/mcp-servers-are-the-new-microservices-sprawl-and-were-making-all-the-same-mistakes-4mmm</guid>
      <description>&lt;p&gt;Remember 2016? When every team decided their monolith needed to be 47 microservices? And then two years later everyone was writing blog posts titled "Maybe We Didn't Need Microservices" while quietly hiring a platform team to wrangle the mess?&lt;/p&gt;

&lt;p&gt;Yeah. We're doing it again. Except this time it's MCP servers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Pattern We Keep Repeating&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's how this plays out every single time in our industry:&lt;br&gt;
New thing emerges. New thing is genuinely useful. New thing is easy to spin up. Every developer spins one up. Nobody tracks them. &lt;/p&gt;

&lt;p&gt;Nobody governs them. Eighteen months later, someone with "Platform" in their title gets hired to clean it up.&lt;/p&gt;

&lt;p&gt;Containers. Microservices. Lambdas. Kubernetes clusters. And now, MCP servers.&lt;/p&gt;

&lt;p&gt;The Model Context Protocol has become the standard way AI agents talk to external tools and data sources. Anthropic open-sourced it, Google launched managed MCP servers in December, and the Linux Foundation just stood up the Agentic AI Foundation around it. It's real. It's not going anywhere.&lt;/p&gt;

&lt;p&gt;But the adoption curve is outpacing the governance curve by a mile. And if you've been in this industry long enough, you know exactly what that means.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Numbers Are Already Ugly&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Unofficial registries like mcp.so are indexing over 16,000 MCP servers. GitHub likely has north of 20,000 repositories implementing them. And that's just what's public.&lt;/p&gt;

&lt;p&gt;Inside enterprises? It's worse. Any developer can spin up an MCP server in minutes. Which means they are. Across teams, across projects, with no central catalog, no consistent auth, and no visibility into what's actually running.&lt;/p&gt;

&lt;p&gt;Here's the stat that should concern you: a large-scale analysis of over 5,200 open-source MCP server implementations found that 88% require credentials to operate. Of those, 53% rely on long-lived static secrets — API keys and personal access tokens sitting in environment variables or, let's be honest, hardcoded in config files. Only 8.5% use OAuth.&lt;/p&gt;

&lt;p&gt;That's not a security posture. That's a collection of future incident reports.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"But It's Just a Protocol"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the thing I keep hearing. "MCP is just a protocol. It's fine."&lt;/p&gt;

&lt;p&gt;Sure. HTTP is just a protocol too. And we still managed to build entire categories of security tooling around the fact that people used it carelessly.&lt;/p&gt;

&lt;p&gt;MCP doesn't solve authentication. It doesn't solve identity management. It doesn't provide audit trails, observability, compliance, rate limiting, or error handling. It describes how servers and clients communicate. That's it. Everything else is your problem.&lt;/p&gt;

&lt;p&gt;And right now, most organizations are treating that "everything else" as someone else's job. Security teams can't monitor what they don't know exists. And most companies don't even have an internal MCP registry — which, to me, is the absolute bare minimum.&lt;/p&gt;

&lt;p&gt;So what actually happens? Two things:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shadow MCP.&lt;/strong&gt; Developers introduce servers that IT has no idea about. Works fine until it doesn't. And when it doesn't, security has no context on what that server touches, who owns it, or what credentials it holds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Server sprawl.&lt;/strong&gt; Multiple teams build slightly different MCP servers for the same API. Nobody decommissions the old ones. The attack surface expands quietly, like mold behind drywall.&lt;/p&gt;

&lt;p&gt;Sound familiar? It should. We had the exact same conversation about microservices in 2018 and Kubernetes namespaces in 2020.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real Vulnerabilities, Right Now&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This isn't theoretical. Researchers have already found serious vulnerabilities in some of the most popular MCP servers, including ones from Microsoft and Anthropic themselves.&lt;/p&gt;

&lt;p&gt;Path validation bypasses. Arbitrary file overwrites. Credential exposure through cloud metadata services. And the fun one: chaining multiple medium-severity issues into full remote code execution.&lt;/p&gt;

&lt;p&gt;These aren't exotic zero-days. They're the boring, predictable result of moving fast without governance. The same kind of bugs we've been finding in rushed microservice deployments for years.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Actually Needs to Happen&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'm not here to say "MCP bad, don't use it." MCP is genuinely useful. My team uses it. The protocol itself is solid. The problem is the operational model around it.&lt;/p&gt;

&lt;p&gt;If you're adopting MCP at any kind of scale, here's my short list:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build an internal registry.&lt;/strong&gt; If you don't know what MCP servers exist in your org, you can't secure them. This doesn't need to be fancy. A spreadsheet with owner, purpose, permissions, and last review date is better than nothing. But build toward something with automated discovery.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Standardize on OAuth 2.1.&lt;/strong&gt; The 53% of servers running on static API keys need to stop. Short-lived tokens, PKCE for user-facing apps, mutual TLS for service accounts. This is solved work. We just need to actually do it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deploy a gateway.&lt;/strong&gt; An MCP gateway is the same pattern as an API gateway — single entry point, centralized policy enforcement, consistent logging. It turns a chaotic multi-server topology into something you can actually operate. If you learned anything from the microservices era, it's that you need a control plane before you need more services.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Treat MCP servers like infrastructure, not experiments.&lt;/strong&gt; The moment an MCP server touches production data, it's infrastructure. It needs an owner, a lifecycle, and a decommission plan. The "I'll just spin one up real quick" mindset is how you end up with 200 unmanaged endpoints and a SOC 2 auditor asking questions you can't answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Part Nobody Wants to Hear&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Gartner is predicting 40% of agentic AI projects will fail by 2027. Not because the tech doesn't work, but because organizations are automating broken processes. MCP sprawl is a symptom of that exact problem.&lt;/p&gt;

&lt;p&gt;We keep doing this thing where we adopt the technology first and figure out the operations later. And every time, we act surprised when it gets messy. Microservices taught us that distributed systems need centralized governance. MCP is a distributed system. The lesson applies.&lt;/p&gt;

&lt;p&gt;The organizations that get this right won't be the ones with the most MCP servers. They'll be the ones that actually know how many they have.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Love it!</title>
      <dc:creator>Evan Lausier</dc:creator>
      <pubDate>Wed, 11 Feb 2026 11:21:31 +0000</pubDate>
      <link>https://forem.com/evanlausier/love-it-19j1</link>
      <guid>https://forem.com/evanlausier/love-it-19j1</guid>
      <description>&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/sylwia-lask/how-seriously-should-we-take-state-of-js-and-other-developer-surveys-9ce" class="crayons-story__hidden-navigation-link"&gt;How Seriously Should We Take State of JS and Other Developer Surveys?&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/sylwia-lask" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F3535771%2Fe22860d5-274b-43c9-819b-56b162e5bd5a.jpeg" alt="sylwia-lask profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/sylwia-lask" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Sylwia Laskowska
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Sylwia Laskowska
                
              
              &lt;div id="story-author-preview-content-3244629" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/sylwia-lask" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F3535771%2Fe22860d5-274b-43c9-819b-56b162e5bd5a.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Sylwia Laskowska&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/sylwia-lask/how-seriously-should-we-take-state-of-js-and-other-developer-surveys-9ce" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Feb 10&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/sylwia-lask/how-seriously-should-we-take-state-of-js-and-other-developer-surveys-9ce" id="article-link-3244629"&gt;
          How Seriously Should We Take State of JS and Other Developer Surveys?
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/javascript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;javascript&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/node"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;node&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/frontend"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;frontend&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/sylwia-lask/how-seriously-should-we-take-state-of-js-and-other-developer-surveys-9ce" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;89&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/sylwia-lask/how-seriously-should-we-take-state-of-js-and-other-developer-surveys-9ce#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              72&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;




</description>
      <category>javascript</category>
      <category>node</category>
      <category>frontend</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Enter Ant Man!</title>
      <dc:creator>Evan Lausier</dc:creator>
      <pubDate>Wed, 04 Feb 2026 12:32:23 +0000</pubDate>
      <link>https://forem.com/evanlausier/enter-ant-man-51n7</link>
      <guid>https://forem.com/evanlausier/enter-ant-man-51n7</guid>
      <description>&lt;p&gt;Well this was too fun not to share! I am still waiting for Ant Man to pop out somewhere!! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://x.com/NightSkyToday/status/2018441295065395398?s=20" rel="noopener noreferrer"&gt;https://x.com/NightSkyToday/status/2018441295065395398?s=20&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Core Claim:&lt;/p&gt;

&lt;p&gt;On December 9, 2024, Google Quantum AI announced its Willow processor, a 105-qubit superconducting quantum chip. The headline achievement: Willow completed a Random Circuit Sampling (RCS) benchmark computation in under 5 minutes that would take today's fastest supercomputers (like Frontier) approximately 10 septillion (10²⁵) years — a timeframe vastly exceeding the age of the universe (~13.8 billion years).&lt;/p&gt;

&lt;p&gt;Google's Hartmut Neven suggested the chip's performance "lends credence to the notion that quantum computation occurs in many parallel universes, in line with the idea that we live in a multiverse." EDRM&lt;/p&gt;

&lt;p&gt;Its important to note, this claim is highly contested. That said, I personally think this technology is so cool. Google's chip sort of working cannot be interpreted as evidence for parallel universes because its function is entirely consistent with theories in which ours is the only universe. But its still fun to watch as the technology grow.&lt;/p&gt;

</description>
      <category>computerscience</category>
      <category>quantum</category>
      <category>science</category>
      <category>fun</category>
    </item>
  </channel>
</rss>
