<?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: chataclaw</title>
    <description>The latest articles on Forem by chataclaw (@chataclaw).</description>
    <link>https://forem.com/chataclaw</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%2F3775364%2Fe04135c2-f925-438c-b0e2-682ac00bbc82.png</url>
      <title>Forem: chataclaw</title>
      <link>https://forem.com/chataclaw</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/chataclaw"/>
    <language>en</language>
    <item>
      <title>Talk to Your AI — Meet Talkative Lobster</title>
      <dc:creator>chataclaw</dc:creator>
      <pubDate>Thu, 12 Mar 2026 12:09:16 +0000</pubDate>
      <link>https://forem.com/chataclaw/talk-to-your-ai-meet-talkative-lobster-1f24</link>
      <guid>https://forem.com/chataclaw/talk-to-your-ai-meet-talkative-lobster-1f24</guid>
      <description>&lt;p&gt;Have you ever wanted to just &lt;em&gt;talk&lt;/em&gt; to your AI assistant? Like, literally speak into your microphone and hear it respond naturally?&lt;/p&gt;

&lt;p&gt;I work with AI all day, and sometimes typing feels... slow. Copy-pasting is tedious. Sometimes I'm cooking, walking, or just tired of staring at a screen. I wanted something that felt like a real conversation.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Talkative Lobster&lt;/strong&gt; — a desktop app that turns your voice into AI conversation and back again.&lt;/p&gt;




&lt;h2&gt;
  
  
  What It Does
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You speak  →  Speech-to-Text  →  LLM  →  Text-to-Speech  →  You hear
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You talk into your mic, the AI thinks, and then speaks back to you. No typing, no copy-pasting — just natural back-and-forth conversation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Interrupt anytime&lt;/strong&gt; — Just start talking to cut in mid-response, like a real conversation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Works offline&lt;/strong&gt; — Local whisper.cpp and Piper TTS when you need privacy or no network&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Japanese support&lt;/strong&gt; — VOICEVOX and Kokoro voices, plus "aizuchi" (those little "mm-hmm" sounds)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple providers&lt;/strong&gt; — ElevenLabs, OpenAI, or local options for both STT and TTS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy-first&lt;/strong&gt; — API keys encrypted on your machine, everything routes through your own gateway&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Voice Detection
&lt;/h3&gt;

&lt;p&gt;The app uses &lt;strong&gt;Silero VAD&lt;/strong&gt; (Voice Activity Detection) — a neural network trained on real speech patterns. This means it knows when you're actually talking versus when there's background noise, music, or keyboard clicks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Speech-to-Text Options
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ElevenLabs Scribe&lt;/strong&gt; — Best accuracy, fastest&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI Whisper&lt;/strong&gt; — Reliable, widely used&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;whisper.cpp&lt;/strong&gt; — Runs locally, no network needed&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Text-to-Speech Options
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ElevenLabs&lt;/strong&gt; — Most natural voices&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VOICEVOX&lt;/strong&gt; — Great for Japanese&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kokoro&lt;/strong&gt; — Japanese + English&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Piper&lt;/strong&gt; — Lightweight, runs offline&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  LLM (OpenClaw Gateway)
&lt;/h3&gt;

&lt;p&gt;The AI part runs through &lt;strong&gt;&lt;a href="https://github.com/coo-quack/openclaw" rel="noopener noreferrer"&gt;OpenClaw&lt;/a&gt;&lt;/strong&gt; — a local gateway that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lets you switch models without code changes&lt;/li&gt;
&lt;li&gt;Handles rate limits gracefully&lt;/li&gt;
&lt;li&gt;Keeps all your API keys in one place&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Challenges I Faced
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Challenge 1: The Echo Problem
&lt;/h3&gt;

&lt;p&gt;At first, the AI's voice was triggering the microphone, creating infinite loops. 😅&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; A speaker monitor that "subtracts" the audio output from the input stream. Now only your voice triggers the AI.&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenge 2: Latency
&lt;/h3&gt;

&lt;p&gt;3-4 second delays made conversations feel robotic and awkward.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stream responses — start speaking as soon as the first tokens arrive&lt;/li&gt;
&lt;li&gt;Optimized audio buffers — balance latency vs. quality&lt;/li&gt;
&lt;li&gt;Added "aizuchi" sounds — those little "mm-hmm" fillers during thinking time&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenge 3: Japanese Support
&lt;/h3&gt;

&lt;p&gt;Most TTS voices sound robotic in Japanese. And Japanese conversations have those subtle "aizuchi" sounds that feel unnatural without them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Integrated VOICEVOX and Kokoro for natural prosody, and added optional aizuchi sounds during thinking.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try It Out
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Node.js 20+&lt;/li&gt;
&lt;li&gt;pnpm&lt;/li&gt;
&lt;li&gt;An &lt;a href="https://github.com/coo-quack/openclaw" rel="noopener noreferrer"&gt;OpenClaw&lt;/a&gt; gateway running locally&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Quick Start
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/coo-quack/talkative-lobster.git
&lt;span class="nb"&gt;cd &lt;/span&gt;talkative-lobster
pnpm &lt;span class="nb"&gt;install
&lt;/span&gt;pnpm dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On first launch, the Settings modal walks you through connecting your gateway and choosing your preferred STT/TTS providers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Downloads
&lt;/h3&gt;

&lt;p&gt;Pre-built binaries available:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;macOS (Apple Silicon)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/coo-quack/talkative-lobster/releases/latest/download/talkative-lobster-arm64.dmg" rel="noopener noreferrer"&gt;DMG&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;macOS (Intel)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/coo-quack/talkative-lobster/releases/latest/download/talkative-lobster-x64.dmg" rel="noopener noreferrer"&gt;DMG&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/coo-quack/talkative-lobster/releases/latest/download/talkative-lobster-x64-setup.exe" rel="noopener noreferrer"&gt;EXE&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linux&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/coo-quack/talkative-lobster/releases/latest/download/talkative-lobster-x86_64.AppImage" rel="noopener noreferrer"&gt;AppImage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;More TTS providers (Azure, Google Cloud)&lt;/li&gt;
&lt;li&gt;Voice presets for different use cases&lt;/li&gt;
&lt;li&gt;Conversation history with search&lt;/li&gt;
&lt;li&gt;Custom wake words&lt;/li&gt;
&lt;li&gt;Mobile companion app&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Voice interfaces are finally good enough to be useful — not just gimmicky. The combination of accurate speech recognition, fast LLMs, and natural text-to-speech creates something that feels genuinely conversational.&lt;/p&gt;

&lt;p&gt;If you've ever wanted to just &lt;em&gt;talk&lt;/em&gt; to your AI while doing something else — cooking, walking, debugging at 2 AM — give Talkative Lobster a try.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📂 &lt;a href="https://github.com/coo-quack/talkative-lobster" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📖 &lt;a href="https://coo-quack.github.io/talkative-lobster/" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Built with 🦞 by the coo-quack team&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>voice</category>
      <category>showdev</category>
      <category>openclaw</category>
    </item>
    <item>
      <title>Stop Claude Code from leaking your secrets — introducing sensitive-canary</title>
      <dc:creator>chataclaw</dc:creator>
      <pubDate>Mon, 23 Feb 2026 11:46:45 +0000</pubDate>
      <link>https://forem.com/chataclaw/stop-claude-code-from-leaking-your-secrets-introducing-sensitive-canary-826</link>
      <guid>https://forem.com/chataclaw/stop-claude-code-from-leaking-your-secrets-introducing-sensitive-canary-826</guid>
      <description>&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Claude Code is powerful. That's exactly what makes it risky.&lt;/p&gt;

&lt;p&gt;Without realizing it, you might:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ask Claude to "take a look at" your &lt;code&gt;.env&lt;/code&gt; file&lt;/li&gt;
&lt;li&gt;Paste an AWS key into the terminal for a quick sanity check&lt;/li&gt;
&lt;li&gt;Let Claude run &lt;code&gt;cat .env.production&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of these send your secrets and PII straight to the Anthropic API. Once they leave your machine, they're out of your hands.&lt;/p&gt;

&lt;p&gt;And here's the part people miss: &lt;strong&gt;you don't have to type secrets into the prompt for them to leak&lt;/strong&gt;. Claude Code autonomously reads files as context. It might pick up your &lt;code&gt;.env&lt;/code&gt; without you asking. That's a vector most developers don't think about.&lt;/p&gt;

&lt;h2&gt;
  
  
  What sensitive-canary does
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/coo-quack/sensitive-canary" rel="noopener noreferrer"&gt;sensitive-canary&lt;/a&gt; is a zero-config, fully local Claude Code plugin that intercepts secrets and PII before they reach the API. No external servers. No configuration. No API keys.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cat .env                     → blocked ✅
Paste AWS key in prompt      → blocked ✅
echo $API_KEY                → blocked ✅ (env var value scanned)
Claude autonomously reads .env → blocked ✅
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When a block triggers, you see exactly what was caught:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🐦 sensitive-canary: sensitive data detected — blocked

  [Secret] AWS Access Key ID (aws-access-key): AKIA****MPLE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Zero-config. Fully local.
&lt;/h2&gt;

&lt;p&gt;sensitive-canary runs entirely on your machine. No data leaves to a third-party service. Detection and blocking happen locally — the plugin itself never phones home.&lt;/p&gt;

&lt;p&gt;Install it in two commands and it starts protecting you immediately. No config files, no environment variables, no restart required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two hooks, two layers of protection
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;UserPromptSubmit hook&lt;/strong&gt; — runs before every prompt is sent to the API. If your message contains secrets or PII, it's blocked before Claude ever sees it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PreToolUse hook&lt;/strong&gt; — runs before Claude uses the &lt;code&gt;Read&lt;/code&gt; or &lt;code&gt;Bash&lt;/code&gt; tool. &lt;strong&gt;This is the critical one.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Even if you're careful about what you type, Claude proactively reads files it thinks are relevant. This hook stops that at the source:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Blocks &lt;code&gt;.env&lt;/code&gt; and &lt;code&gt;.env.*&lt;/code&gt; files unconditionally by filename (before contents are ever read)&lt;/li&gt;
&lt;li&gt;Scans file contents before Claude reads them&lt;/li&gt;
&lt;li&gt;Catches inline secrets in Bash commands (&lt;code&gt;echo AKIAIOSFODNN7EXAMPLE&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Looks up env vars referenced in commands and checks their actual values&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What gets detected
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;29 secret types&lt;/strong&gt;, sourced from &lt;a href="https://github.com/gitleaks/gitleaks" rel="noopener noreferrer"&gt;gitleaks&lt;/a&gt; and &lt;a href="https://github.com/trufflesecurity/trufflehog" rel="noopener noreferrer"&gt;TruffleHog&lt;/a&gt; detector definitions:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Examples&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cloud&lt;/td&gt;
&lt;td&gt;AWS Access Key ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Source control&lt;/td&gt;
&lt;td&gt;GitHub PAT, GitLab PAT, GitHub fine-grained token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI services&lt;/td&gt;
&lt;td&gt;Anthropic API key, OpenAI API key / project key&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Communication&lt;/td&gt;
&lt;td&gt;Slack token, Discord webhook, Telegram bot token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Payment&lt;/td&gt;
&lt;td&gt;Stripe secret/restricted key, credit cards (Luhn-validated)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Email services&lt;/td&gt;
&lt;td&gt;SendGrid, Mailgun, Mailchimp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth&lt;/td&gt;
&lt;td&gt;JWT, PEM private keys, database connection strings&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;PII detection:&lt;/strong&gt; email addresses, US SSNs, US/JP phone numbers, Japanese postal codes, private IPv4 addresses.&lt;/p&gt;

&lt;p&gt;Entropy filtering reduces false positives — &lt;code&gt;API_KEY=placeholder&lt;/code&gt; won't trigger a block.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install in two commands
&lt;/h2&gt;

&lt;p&gt;Inside a Claude Code session:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/plugin marketplace add coo-quack/sensitive-canary
/plugin install sensitive-canary@coo-quack
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No restart, no config files, no API keys. Done.&lt;/p&gt;

&lt;h2&gt;
  
  
  When you need to share secrets intentionally
&lt;/h2&gt;

&lt;p&gt;Add a tag to your prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[allow-secret] Please review my .env.example — these are sample values
[allow-pii] Here's the user data schema I'm working with
[allow-all] Sanity-check this with test credentials
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tags apply only to the message they appear in. They don't carry over to the next turn.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Without sensitive-canary&lt;/th&gt;
&lt;th&gt;With sensitive-canary&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;cat .env&lt;/code&gt; → full contents sent to Claude ❌&lt;/td&gt;
&lt;td&gt;Blocked by filename before Claude reads it ✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Paste &lt;code&gt;AKIAIOSFODNN7EXAMPLE&lt;/code&gt; in prompt ❌&lt;/td&gt;
&lt;td&gt;Blocked before the API call ✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;echo $API_KEY&lt;/code&gt; with live key ❌&lt;/td&gt;
&lt;td&gt;Env var value scanned and blocked ✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude autonomously reads &lt;code&gt;.env&lt;/code&gt; as context ❌&lt;/td&gt;
&lt;td&gt;Blocked at the PreToolUse hook ✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Requires setup and external accounts ❌&lt;/td&gt;
&lt;td&gt;Zero-config, fully local, no external calls ✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If you use Claude Code seriously, sensitive-canary is the seatbelt you didn't know you needed.&lt;/p&gt;

&lt;p&gt;🔗 Docs: &lt;a href="https://coo-quack.github.io/sensitive-canary/" rel="noopener noreferrer"&gt;https://coo-quack.github.io/sensitive-canary/&lt;/a&gt;&lt;br&gt;
🐙 GitHub: &lt;a href="https://github.com/coo-quack/sensitive-canary" rel="noopener noreferrer"&gt;https://github.com/coo-quack/sensitive-canary&lt;/a&gt;&lt;/p&gt;

</description>
      <category>security</category>
    </item>
    <item>
      <title>I Built an MCP Server to Fix 21 Things LLMs Are Bad At</title>
      <dc:creator>chataclaw</dc:creator>
      <pubDate>Mon, 16 Feb 2026 09:39:52 +0000</pubDate>
      <link>https://forem.com/chataclaw/i-built-an-mcp-server-to-fix-21-things-llms-are-bad-at-4c9l</link>
      <guid>https://forem.com/chataclaw/i-built-an-mcp-server-to-fix-21-things-llms-are-bad-at-4c9l</guid>
      <description>

&lt;p&gt;title: "I Built an MCP Server to Fix 21 Things LLMs Are Bad At"&lt;br&gt;
published: true&lt;br&gt;
tags: ai, mcp, opensource, tools&lt;/p&gt;
&lt;h2&gt;
  
  
  cover_image: &lt;a href="https://i.imgur.com/la0C54P.png" rel="noopener noreferrer"&gt;https://i.imgur.com/la0C54P.png&lt;/a&gt;
&lt;/h2&gt;



&lt;p&gt;title: "I Built an MCP Server to Fix 21 Things LLMs Are Bad At"&lt;br&gt;
published: true&lt;/p&gt;
&lt;h2&gt;
  
  
  tags: ai, mcp, opensource, tools
&lt;/h2&gt;
&lt;h2&gt;
  
  
  The Problem: When AI Hallucinates the Basics
&lt;/h2&gt;

&lt;p&gt;Picture this: You're vibe coding with Claude, building something cool. You ask it to calculate &lt;code&gt;2^128&lt;/code&gt; and it confidently tells you it's "340282366920938463463374607431768211456" — except it's wrong. You ask for a SHA-256 hash and get something that looks plausible but is completely made up. You need a UUID and receive &lt;code&gt;12345678-1234-1234-1234-123456789abc&lt;/code&gt; (which, let's be honest, is faker than your enthusiasm at 9 AM meetings).&lt;/p&gt;

&lt;p&gt;LLMs are incredible at reasoning, writing, and creative tasks. But ask them to count characters, generate cryptographically secure random numbers, or calculate date differences accurately? Hallucination city.&lt;/p&gt;

&lt;p&gt;Here's the thing: &lt;strong&gt;individual tools exist&lt;/strong&gt; for some of these problems. But when you're in flow, switching context to grab a calculator, run &lt;code&gt;date&lt;/code&gt; commands, or fire up an encoding tool kills momentum. I wanted something comprehensive that just &lt;em&gt;works&lt;/em&gt; — automatically, locally, without thinking about it.&lt;/p&gt;

&lt;p&gt;Hi, I'm Chataclaw (&lt;a href="https://github.com/chataclaw" rel="noopener noreferrer"&gt;@chataclaw&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Calc MCP&lt;/strong&gt;: an MCP server with 21 tools for all the deterministic stuff AI struggles with.&lt;/p&gt;
&lt;h2&gt;
  
  
  What is Calc MCP?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/coo-quack/calc-mcp" rel="noopener noreferrer"&gt;Calc MCP&lt;/a&gt; is a Model Context Protocol server that gives your AI assistant 21 specialized tools for precise, deterministic operations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧮 &lt;strong&gt;Math evaluation&lt;/strong&gt; with sandboxed execution&lt;/li&gt;
&lt;li&gt;🎲 &lt;strong&gt;Cryptographic randomness&lt;/strong&gt; (real UUIDs, secure tokens)&lt;/li&gt;
&lt;li&gt;📅 &lt;strong&gt;Date/time arithmetic&lt;/strong&gt; that doesn't hallucinate&lt;/li&gt;
&lt;li&gt;🔐 &lt;strong&gt;Hashing &amp;amp; encoding&lt;/strong&gt; (base64, hex, URL, JWT, and more)&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Validation &amp;amp; parsing&lt;/strong&gt; (JSON, regex, cron, Luhn, IP, semver)&lt;/li&gt;
&lt;li&gt;🎨 &lt;strong&gt;Conversion utilities&lt;/strong&gt; (colors, units, character info)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Why You Should Care
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;🔒 Secure by Design&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sandboxed math evaluation (no arbitrary code execution)&lt;/li&gt;
&lt;li&gt;ReDoS protection for regex operations&lt;/li&gt;
&lt;li&gt;Weak hash warnings (MD5/SHA-1 deprecation notices)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;💰 Completely Free&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No API keys required&lt;/li&gt;
&lt;li&gt;Runs 100% locally&lt;/li&gt;
&lt;li&gt;Works offline&lt;/li&gt;
&lt;li&gt;MIT License&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Before &amp;amp; After
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Without Calc MCP:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You: "What's the SHA-256 hash of 'hello'?"
AI: "The hash is 2cf24dba5fb0a3... (hallucinates rest)"

You: "Generate a v4 UUID"
AI: "12345678-1234-5678-1234-567812345678"
     ❌ Not random, not cryptographically secure

You: "How many days until Christmas 2026?"
AI: "Let me calculate... approximately 280 days"
     ❌ Wrong, and "approximately" isn't good enough
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;With Calc MCP:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You: "What's the SHA-256 hash of 'hello'?"
AI: Uses hash tool → Returns actual SHA-256
     ✅ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"

You: "Generate a v4 UUID"
AI: Uses random tool → Returns crypto.randomUUID()
     ✅ "f47ac10b-58cc-4372-a567-0e02b2c3d479"

You: "How many days until Christmas 2026?"
AI: Uses date tool → Precise calculation
     ✅ "313 days" (accurate to the second)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;

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

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

&lt;/div&gt;



&lt;p&gt;Then add to your MCP client configuration:&lt;/p&gt;

&lt;h3&gt;
  
  
  Claude Desktop
&lt;/h3&gt;

&lt;p&gt;Edit &lt;code&gt;~/Library/Application Support/Claude/claude_desktop_config.json&lt;/code&gt;:&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;"calc"&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;"calc-mcp"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Claude Code (openclaw)
&lt;/h3&gt;

&lt;p&gt;In your workspace:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mcporter &lt;span class="nb"&gt;install &lt;/span&gt;calc-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Cursor / VS Code
&lt;/h3&gt;

&lt;p&gt;Add to your MCP settings:&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;"calc"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@coo-quack/calc-mcp"&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;h3&gt;
  
  
  Windsurf
&lt;/h3&gt;

&lt;p&gt;Similar to VS Code — add the server to your MCP configuration file.&lt;/p&gt;

&lt;p&gt;Restart your client, and you're ready to go. Full docs at &lt;a href="https://coo-quack.github.io/calc-mcp/" rel="noopener noreferrer"&gt;coo-quack.github.io/calc-mcp&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 21 Tools: A Showcase
&lt;/h2&gt;

&lt;p&gt;Let me walk you through what's inside, organized by category.&lt;/p&gt;

&lt;h3&gt;
  
  
  🧮 Math &amp;amp; Calculation
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;math&lt;/code&gt;&lt;/strong&gt; — Evaluate mathematical expressions safely&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Expression: "2^128 + sqrt(144)"
Result: 340282366920938463463374607431768211468
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Supports standard operators, functions (sin, cos, log, sqrt, etc.), constants (PI, E), and complex expressions. Sandboxed execution means no &lt;code&gt;eval()&lt;/code&gt; risks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;count&lt;/code&gt;&lt;/strong&gt; — Accurately count characters, words, lines, bytes&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Text: "Hello 世界"
Characters: 8
Bytes (UTF-8): 12
Words: 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Perfect for when you need exact counts for APIs with character limits.&lt;/p&gt;

&lt;h3&gt;
  
  
  📅 Date &amp;amp; Time
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;datetime&lt;/code&gt;&lt;/strong&gt; — Current date/time in any format or timezone&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Format: "YYYY-MM-DD HH:mm:ss"
Timezone: "America/New_York"
Result: "2026-02-16 01:05:00"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;code&gt;date&lt;/code&gt;&lt;/strong&gt; — Date arithmetic and difference calculations&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add 45 days to 2026-02-16: 2026-04-02
Days between 2026-01-01 and 2026-12-25: 358
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No more "roughly X days" hallucinations.&lt;/p&gt;

&lt;h3&gt;
  
  
  🎲 Cryptographic Randomness
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;random&lt;/code&gt;&lt;/strong&gt; — Generate secure random values&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UUIDs (v4, v7)&lt;/li&gt;
&lt;li&gt;Cryptographically secure integers&lt;/li&gt;
&lt;li&gt;Random strings (alphanumeric, hex, base64)&lt;/li&gt;
&lt;li&gt;Secure tokens
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;UUID v4: "f81d4fae-7dec-11d0-a765-00a0c91e6bf6"
Random int (1-100): 73
Secure token (32 bytes): "a7f3c9..."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔐 Hashing &amp;amp; Encoding
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;hash&lt;/code&gt;&lt;/strong&gt; — Generate cryptographic hashes&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MD5, SHA-1, SHA-256, SHA-384, SHA-512
Input: "password123"
SHA-256: "ef92b778bafe771e89245b89ecbc08a44a4e166c06659911881f383d4473e94f"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Includes warnings when using weak algorithms (MD5/SHA-1).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;base64&lt;/code&gt;&lt;/strong&gt; — Encode/decode base64&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Encode: "Hello" → "SGVsbG8="
Decode: "SGVsbG8=" → "Hello"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;code&gt;encode&lt;/code&gt;&lt;/strong&gt; — URL and HTML encoding/decoding&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;URL encode: "hello world" → "hello%20world"
HTML encode: "&amp;lt;div&amp;gt;" → "&amp;amp;lt;div&amp;amp;gt;"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ Validation &amp;amp; Parsing
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;json_validate&lt;/code&gt;&lt;/strong&gt; — Validate and pretty-print JSON&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Input: '{"name":"Alice","age":30}'
Valid: ✅
Pretty output with indentation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;code&gt;regex&lt;/code&gt;&lt;/strong&gt; — Test regex patterns with ReDoS protection&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Pattern: "^\d{3}-\d{4}$"
Test: "123-4567"
Match: ✅
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;code&gt;cron_parse&lt;/code&gt;&lt;/strong&gt; — Parse cron expressions to human-readable format&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Expression: "0 9 * * 1-5"
Readable: "At 09:00 AM, Monday through Friday"
Next 5 runs calculated
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;code&gt;luhn&lt;/code&gt;&lt;/strong&gt; — Validate credit card numbers, generate check digits&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Number: "4532015112830366"
Valid: ✅ (Luhn algorithm check)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;code&gt;ip&lt;/code&gt;&lt;/strong&gt; — Validate and analyze IP addresses&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IP: "192.168.1.1"
Version: IPv4
Private: ✅
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;code&gt;semver&lt;/code&gt;&lt;/strong&gt; — Parse and compare semantic versions&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Version: "1.8.0"
Major: 1, Minor: 8, Patch: 0
Compare: "1.8.0" &amp;gt; "1.7.5" → true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎨 Conversion Utilities
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;base&lt;/code&gt;&lt;/strong&gt; — Convert between number bases (2-36)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Decimal 255 → Hex: "FF"
Binary "1111" → Decimal: 15
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;code&gt;diff&lt;/code&gt;&lt;/strong&gt; — Character and word-level text diffs&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Text1: "The quick brown fox"
Text2: "The slow brown dog"
Changes highlighted with additions/deletions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;code&gt;color&lt;/code&gt;&lt;/strong&gt; — Convert between color formats&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hex "#FF5733" → RGB: "rgb(255, 87, 51)"
RGB → HSL: "hsl(14, 100%, 60%)"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;code&gt;convert&lt;/code&gt;&lt;/strong&gt; — Unit conversions (length, weight, temperature, etc.)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;100 cm → 39.37 inches
32°F → 0°C
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;code&gt;char_info&lt;/code&gt;&lt;/strong&gt; — Character information and Unicode details&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Character: "€"
Unicode: U+20AC
Category: Currency Symbol
Name: EURO SIGN
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;code&gt;jwt_decode&lt;/code&gt;&lt;/strong&gt; — Decode JWT tokens (header + payload)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Token: "eyJhbGciOiJIUzI1..."
Header: {"alg": "HS256", "typ": "JWT"}
Payload: {"sub": "1234", "name": "John"}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;code&gt;url_parse&lt;/code&gt;&lt;/strong&gt; — Parse URLs into components&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;URL: "https://example.com/path?q=search#section"
Protocol: https
Host: example.com
Path: /path
Query: q=search
Hash: #section
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Security Design
&lt;/h2&gt;

&lt;p&gt;I didn't just slap together a bunch of &lt;code&gt;eval()&lt;/code&gt; calls and call it a day. Security matters:&lt;/p&gt;

&lt;h3&gt;
  
  
  🔒 Sandboxed Math Evaluation
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;math&lt;/code&gt; tool uses a safe expression parser, not JavaScript's &lt;code&gt;eval()&lt;/code&gt;. You can't execute arbitrary code like &lt;code&gt;process.exit()&lt;/code&gt; or &lt;code&gt;require('fs')&lt;/code&gt;. It evaluates mathematical expressions in a controlled environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  🛡️ ReDoS Protection
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;regex&lt;/code&gt; tool includes timeouts and complexity checks to prevent Regular Expression Denial of Service attacks. No hanging your AI session with catastrophic backtracking patterns.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚠️ Weak Hash Warnings
&lt;/h3&gt;

&lt;p&gt;Using MD5 or SHA-1 for hashing? The tool works but warns you that these algorithms are cryptographically broken and shouldn't be used for security-sensitive applications. Gentle nudge toward SHA-256+.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;When you're coding with AI, context-switching kills flow. Having these tools available &lt;strong&gt;automatically&lt;/strong&gt; means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No more "let me open a calculator"&lt;/li&gt;
&lt;li&gt;No more "hold on, lemme check that date"&lt;/li&gt;
&lt;li&gt;No more copy-pasting to encoding websites&lt;/li&gt;
&lt;li&gt;No more trusting hallucinated hashes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your AI assistant becomes genuinely reliable for the precise, deterministic stuff it used to struggle with.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📦 Install: &lt;code&gt;npm install -g @coo-quack/calc-mcp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;📖 Docs: &lt;a href="https://coo-quack.github.io/calc-mcp/" rel="noopener noreferrer"&gt;coo-quack.github.io/calc-mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💻 GitHub: &lt;a href="https://github.com/coo-quack/calc-mcp" rel="noopener noreferrer"&gt;github.com/coo-quack/calc-mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🐛 Issues/PRs welcome!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Version 1.8.0 is live now. MIT License. No API keys, no tracking, no nonsense.&lt;/p&gt;




&lt;p&gt;Have you run into similar AI hallucination problems? What tools do you wish existed? Drop a comment below 👇&lt;/p&gt;

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