<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: z z</title>
    <description>The latest articles on DEV Community by z z (@z_z_c01afd7cf4c3764a2c73d).</description>
    <link>https://dev.to/z_z_c01afd7cf4c3764a2c73d</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%2F3948826%2Ff7895476-82f1-42a4-989f-d4e582dcd4ae.png</url>
      <title>DEV Community: z z</title>
      <link>https://dev.to/z_z_c01afd7cf4c3764a2c73d</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/z_z_c01afd7cf4c3764a2c73d"/>
    <language>en</language>
    <item>
      <title>I built an MCP server that searches the web</title>
      <dc:creator>z z</dc:creator>
      <pubDate>Sun, 24 May 2026 09:47:32 +0000</pubDate>
      <link>https://dev.to/z_z_c01afd7cf4c3764a2c73d/i-built-an-mcp-server-that-searches-the-web-dd8</link>
      <guid>https://dev.to/z_z_c01afd7cf4c3764a2c73d/i-built-an-mcp-server-that-searches-the-web-dd8</guid>
      <description>&lt;p&gt;MCP servers become a lot more useful when they can reach the internet. A file-reader is nice. A tool that fetches live data is something else.&lt;/p&gt;

&lt;p&gt;I built a web search tool for MCP. It uses DuckDuckGo (free, no API key needed) and returns LLM-formatted results.&lt;/p&gt;

&lt;h3&gt;
  
  
  The tool
&lt;/h3&gt;

&lt;p&gt;The tool accepts a query and optional maxResults. It searches DuckDuckGo's HTML endpoint (no API key required) and returns titles, snippets, and URLs.&lt;/p&gt;

&lt;h3&gt;
  
  
  The code pattern
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;ypescript&lt;br&gt;
async function searchDuckDuckGo(query: string, maxResults = 5) {&lt;br&gt;
  const url = https://html.duckduckgo.com/html/?q=;&lt;br&gt;
  const res = await fetch(url);&lt;br&gt;
  const html = await res.text();&lt;br&gt;
  // parse results...&lt;br&gt;
}&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;DuckDuckGo's HTML endpoint works without API keys. No rate limiting for reasonable use.&lt;/p&gt;

&lt;h3&gt;
  
  
  Adding it to your server
&lt;/h3&gt;

&lt;p&gt;The full implementation with error handling, timeout, and result formatting is in the &lt;a href="https://zhirenhun.gumroad.com/l/utybwe" rel="noopener noreferrer"&gt;premium MCP kit&lt;/a&gt;. The free starter has the basic pattern.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why this matters
&lt;/h3&gt;

&lt;p&gt;An MCP server that stays local is a typewriter. An MCP server that reaches the web is a computer. Your LLM can check current prices, look up documentation, verify facts -- while you watch.&lt;/p&gt;

&lt;p&gt;The starter repo is &lt;a href="https://github.com/zhirenhun-stack/mcp-server-starter" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>webscraping</category>
      <category>typescript</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Connect your MCP server to Claude Desktop in 5 minutes</title>
      <dc:creator>z z</dc:creator>
      <pubDate>Sun, 24 May 2026 09:46:48 +0000</pubDate>
      <link>https://dev.to/z_z_c01afd7cf4c3764a2c73d/connect-your-mcp-server-to-claude-desktop-in-5-minutes-5h48</link>
      <guid>https://dev.to/z_z_c01afd7cf4c3764a2c73d/connect-your-mcp-server-to-claude-desktop-in-5-minutes-5h48</guid>
      <description>&lt;p&gt;You built an MCP server. Now what? Here's how to wire it up to Claude Desktop so you can actually use those tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Build it
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;ash&lt;br&gt;
git clone https://github.com/zhirenhun-stack/mcp-server-starter.git&lt;br&gt;
cd mcp-server-starter&lt;br&gt;
npm install &amp;amp;&amp;amp; npm run build&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Find Claude Desktop config
&lt;/h3&gt;

&lt;p&gt;On Mac:&lt;br&gt;
&lt;code&gt;json&lt;br&gt;
~/Library/Application Support/Claude/claude_desktop_config.json&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;On Windows:&lt;br&gt;
&lt;code&gt;json&lt;br&gt;
%APPDATA%\Claude\claude_desktop_config.json&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Add your server
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;json&lt;br&gt;
{&lt;br&gt;
  "mcpServers": {&lt;br&gt;
    "my-starter": {&lt;br&gt;
      "command": "node",&lt;br&gt;
      "args": ["/path/to/mcp-server-starter/dist/index.js"]&lt;br&gt;
    }&lt;br&gt;
  }&lt;br&gt;
}&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Restart Claude Desktop. You should see a hammer icon in the bottom right.&lt;/p&gt;

&lt;h3&gt;
  
  
  What you can do now
&lt;/h3&gt;

&lt;p&gt;Once connected, Claude can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read files from your machine&lt;/li&gt;
&lt;li&gt;List directories&lt;/li&gt;
&lt;li&gt;Search for code patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All through natural language. Ask "find all TODO comments in my project" and it runs grep, reads the files, and summarizes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Add your own tools
&lt;/h3&gt;

&lt;p&gt;The starter has three tools. You'll want more. The pattern is always:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ypescript&lt;br&gt;
server.setRequestHandler(CallToolRequestSchema, async (request) =&amp;gt; {&lt;br&gt;
  const { name, arguments: args } = request.params;&lt;br&gt;
  // your code here&lt;br&gt;
});&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Each tool needs: a name, an input schema (JSON Schema describing what arguments it expects), and a handler function. That's it.&lt;/p&gt;

&lt;h3&gt;
  
  
  From starter to production
&lt;/h3&gt;

&lt;p&gt;The free starter gives you the basics. If you're building something for clients or production, the &lt;a href="https://zhirenhun.gumroad.com/l/utybwe" rel="noopener noreferrer"&gt;premium version&lt;/a&gt; adds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API integration with timeout handling&lt;/li&gt;
&lt;li&gt;Web search via DuckDuckGo&lt;/li&gt;
&lt;li&gt;Dockerfile for deployment&lt;/li&gt;
&lt;li&gt;One-command VPS deploy script&lt;/li&gt;
&lt;li&gt;Commercial license&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where MCP is going
&lt;/h3&gt;

&lt;p&gt;Every major LLM client is adding MCP support. Claude Desktop has it. Cursor is adding it. VS Code has it via extensions. Write your tools once, and they work everywhere.&lt;/p&gt;

&lt;p&gt;The protocol is simple enough that the starter is about 80 lines of TypeScript. You can read the whole thing in 10 minutes.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>claude</category>
      <category>typescript</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>I built a minimal MCP server starter so you don't have to</title>
      <dc:creator>z z</dc:creator>
      <pubDate>Sun, 24 May 2026 09:09:06 +0000</pubDate>
      <link>https://dev.to/z_z_c01afd7cf4c3764a2c73d/i-built-a-minimal-mcp-server-starter-so-you-dont-have-to-1j71</link>
      <guid>https://dev.to/z_z_c01afd7cf4c3764a2c73d/i-built-a-minimal-mcp-server-starter-so-you-dont-have-to-1j71</guid>
      <description>&lt;p&gt;MCP (Model Context Protocol) is what Anthropic built so LLMs can talk to your tools. Write your server once, connect it to Claude Desktop, Cursor, VS Code -- anything that speaks MCP.&lt;/p&gt;

&lt;p&gt;I got tired of copying the same boilerplate, so I stripped it down to the bare minimum.&lt;/p&gt;

&lt;h3&gt;
  
  
  What you get
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
npm install &amp;amp;&amp;amp; npm run build &amp;amp;&amp;amp; npm start&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Three tools out of the box:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;read_file&lt;/strong&gt; - read any text file&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;list_directory&lt;/strong&gt; - list files with sizes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;grep_search&lt;/strong&gt; - search for text across your codebase&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;TypeScript, official MCP SDK, stdio transport. No HTTP server, no config files.&lt;/p&gt;

&lt;h3&gt;
  
  
  The pattern
&lt;/h3&gt;

&lt;p&gt;Every MCP tool follows the same shape: a name, an input schema (JSON Schema), and a handler function. The SDK handles the protocol plumbing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Open source
&lt;/h3&gt;

&lt;p&gt;The starter is on &lt;a href="https://github.com/zhirenhun-stack/mcp-server-starter" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. MIT licensed.&lt;/p&gt;

&lt;p&gt;I also sell a premium version with API integration, web search, Dockerfile, and one-command deploy. If that saves you an afternoon: &lt;a href="https://zhirenhun.gumroad.com/l/utybwe" rel="noopener noreferrer"&gt;Gumroad&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>typescript</category>
      <category>opensource</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
