<?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>10 Git Commands I Wish I Learned Sooner</title>
      <dc:creator>z z</dc:creator>
      <pubDate>Mon, 15 Jun 2026 09:32:29 +0000</pubDate>
      <link>https://dev.to/z_z_c01afd7cf4c3764a2c73d/10-git-commands-i-wish-i-learned-sooner-5cjd</link>
      <guid>https://dev.to/z_z_c01afd7cf4c3764a2c73d/10-git-commands-i-wish-i-learned-sooner-5cjd</guid>
      <description>&lt;p&gt;We all learn Git the hard way. You start with &lt;code&gt;add&lt;/code&gt;, &lt;code&gt;commit&lt;/code&gt;, &lt;code&gt;push&lt;/code&gt; — and that works until the day you accidentally commit to &lt;code&gt;main&lt;/code&gt; or delete a branch you meant to keep.&lt;/p&gt;

&lt;p&gt;Here are 10 Git commands I discovered way later than I should have. Each one saved me from a real mess.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. &lt;code&gt;git switch&lt;/code&gt; — The Safe Checkout
&lt;/h2&gt;

&lt;p&gt;I used &lt;code&gt;git checkout&lt;/code&gt; for everything: switching branches, restoring files, creating new branches. Until one day I ran:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout some-file.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;expecting to switch to a branch, and instead wiped my working directory changes.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git switch&lt;/code&gt; separates branch switching from file restoration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git switch feature-branch      &lt;span class="c"&gt;# switch branches&lt;/span&gt;
git switch &lt;span class="nt"&gt;-c&lt;/span&gt; new-feature      &lt;span class="c"&gt;# create and switch&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;git restore&lt;/code&gt; handles the file side:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git restore some-file.txt      &lt;span class="c"&gt;# discard uncommitted changes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two commands, one job each. No more accidental wipes.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. &lt;code&gt;git log --oneline --graph&lt;/code&gt; — See the Story
&lt;/h2&gt;

&lt;p&gt;Plain &lt;code&gt;git log&lt;/code&gt; dumps a wall of text. Add &lt;code&gt;--oneline --graph&lt;/code&gt; and you see the actual branch topology:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git log &lt;span class="nt"&gt;--oneline&lt;/span&gt; &lt;span class="nt"&gt;--graph&lt;/span&gt; &lt;span class="nt"&gt;--all&lt;/span&gt; &lt;span class="nt"&gt;--decorate&lt;/span&gt;

&lt;span class="k"&gt;*&lt;/span&gt; 7a3f92e &lt;span class="o"&gt;(&lt;/span&gt;HEAD -&amp;gt; main&lt;span class="o"&gt;)&lt;/span&gt; fix: handle null pointer
| &lt;span class="k"&gt;*&lt;/span&gt; a8d2c11 &lt;span class="o"&gt;(&lt;/span&gt;feature-x&lt;span class="o"&gt;)&lt;/span&gt; feat: add retry logic
|/
&lt;span class="k"&gt;*&lt;/span&gt; b4e3391 chore: bump deps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I use &lt;code&gt;--all&lt;/code&gt; because branches you're not on matter too. Onboard this as an alias:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; alias.tree &lt;span class="s2"&gt;"log --oneline --graph --all --decorate"&lt;/span&gt;
git tree
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. &lt;code&gt;git commit --amend&lt;/code&gt; — Edit Without Clutter
&lt;/h2&gt;

&lt;p&gt;Pushed a typo in the last commit message? Forgot to stage that one file?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add forgotten-file.py
git commit &lt;span class="nt"&gt;--amend&lt;/span&gt; &lt;span class="nt"&gt;--no-edit&lt;/span&gt;      &lt;span class="c"&gt;# add file without changing message&lt;/span&gt;
git commit &lt;span class="nt"&gt;--amend&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Better message"&lt;/span&gt;  &lt;span class="c"&gt;# fix the message&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⚠️ Only amend commits you haven't pushed yet. Once pushed, &lt;code&gt;amend&lt;/code&gt; rewrites history and everyone who pulled will hate you.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. &lt;code&gt;git stash push -m "description"&lt;/code&gt; — Named Stashes
&lt;/h2&gt;

&lt;p&gt;Without a message, &lt;code&gt;git stash&lt;/code&gt; creates nameless entries. Three stashes later you have no idea which is which.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git stash push &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"WIP: login refactor"&lt;/span&gt;
git stash push &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"debug logging experiment"&lt;/span&gt;
git stash list
&lt;span class="c"&gt;# stash@{0}: On main: debug logging experiment&lt;/span&gt;
&lt;span class="c"&gt;# stash@{1}: On main: WIP: login refactor&lt;/span&gt;

git stash pop stash@&lt;span class="o"&gt;{&lt;/span&gt;1&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I now write a description every single time — saves me 5 minutes of "which stash was that" every week.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. &lt;code&gt;git rebase -i&lt;/code&gt; — Clean History Before You Share
&lt;/h2&gt;

&lt;p&gt;Your branch has 7 commits that say "wip", "fix", "fix again". Before merging, squash them into one meaningful commit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git rebase &lt;span class="nt"&gt;-i&lt;/span&gt; HEAD~7
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the editor, change &lt;code&gt;pick&lt;/code&gt; to &lt;code&gt;squash&lt;/code&gt; (or just &lt;code&gt;s&lt;/code&gt;) for the commits you want to merge upward. Keep the first commit's message.&lt;/p&gt;

&lt;p&gt;I rebase before every merge. The result is a linear, readable history that your future self and your teammates will thank you for.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. &lt;code&gt;git bisect&lt;/code&gt; — Find the Bug Automatically
&lt;/h2&gt;

&lt;p&gt;A feature that worked last week is broken today. You have 50 commits between "worked" and "broken".&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git bisect start
git bisect bad                 &lt;span class="c"&gt;# current commit is broken&lt;/span&gt;
git bisect good abc123         &lt;span class="c"&gt;# this commit worked&lt;/span&gt;

&lt;span class="c"&gt;# Git checks out a commit in the middle.&lt;/span&gt;
&lt;span class="c"&gt;# You test it:&lt;/span&gt;
git bisect good                &lt;span class="c"&gt;# if it works&lt;/span&gt;
git bisect bad                 &lt;span class="c"&gt;# if it's broken&lt;/span&gt;

&lt;span class="c"&gt;# Repeat 4-5 times. Git finds the exact commit.&lt;/span&gt;
git bisect reset
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;bisect&lt;/code&gt; runs a binary search. 50 commits → ~6 checks. 500 commits → ~9 checks. I use this monthly and it always finds the culprit.&lt;/p&gt;

&lt;p&gt;Automate it if you have a test command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git bisect run npm &lt;span class="nb"&gt;test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  7. &lt;code&gt;git worktree&lt;/code&gt; — Work on Two Branches at Once
&lt;/h2&gt;

&lt;p&gt;You're deep in &lt;code&gt;feature-x&lt;/code&gt; and someone says "urgent hotfix on main".&lt;/p&gt;

&lt;p&gt;Instead of stashing or force-closing your editor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git worktree add ../hotfix-fix main
&lt;span class="nb"&gt;cd&lt;/span&gt; ../hotfix-fix
&lt;span class="c"&gt;# fix the bug, commit, push&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ..
git worktree remove ../hotfix-fix
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each worktree is a full checkout in its own directory. Open it in another editor tab, work on it, switch back. No stash, no context loss.&lt;/p&gt;

&lt;p&gt;I keep 2-3 worktrees active during a typical dev day.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. &lt;code&gt;git diff --cached&lt;/code&gt; — Review Before You Commit
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;git diff&lt;/code&gt; shows unstaged changes. But I want to review what I'm about to commit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git diff &lt;span class="nt"&gt;--cached&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This shows only the staged diff. It's replaced by the &lt;code&gt;git commit -v&lt;/code&gt; experience:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;-v&lt;/span&gt;    &lt;span class="c"&gt;# opens editor with diff in the message area&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;See exactly what goes in before it goes in. Catches half-baked code every time.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. &lt;code&gt;git clean -nd&lt;/code&gt; — Preview Destructive Deletes
&lt;/h2&gt;

&lt;p&gt;Untracked files accumulate: build artifacts, .env.bak, node_modules you somehow regenerated.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clean &lt;span class="nt"&gt;-nd&lt;/span&gt;
&lt;span class="c"&gt;# Would remove .env.bak&lt;/span&gt;
&lt;span class="c"&gt;# Would remove dist/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;-n&lt;/code&gt; flag is a dry run. &lt;code&gt;-d&lt;/code&gt; targets directories. When you're sure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clean &lt;span class="nt"&gt;-fd&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I never run &lt;code&gt;git clean&lt;/code&gt; without &lt;code&gt;-n&lt;/code&gt; first. Too many stories of someone nuking a folder they needed two days ago.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. &lt;code&gt;git blame --ignore-revs-file&lt;/code&gt; — Skip Formatting Commits
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;git blame&lt;/code&gt; is the first thing I reach for when I see weird code. But auto-formatters and mass renames pollute the blame, pointing at the person who ran &lt;code&gt;prettier&lt;/code&gt; instead of the person who wrote the bug.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Save a file listing commits that are "noise"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"abc123def"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; .git-blame-ignore-revs
git blame &lt;span class="nt"&gt;--ignore-revs-file&lt;/span&gt; .git-blame-ignore-revs main.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Commit your &lt;code&gt;.git-blame-ignore-revs&lt;/code&gt; file to the repo so everyone benefits. GitHub even respects it natively when viewing blame on pull requests.&lt;/p&gt;




&lt;p&gt;These 10 commands won't make you a Git guru overnight. But they'll save you from the specific, painful moments we all hit: accidental deletions, messy histories, broken branches, and wasted hours tracking down bugs.&lt;/p&gt;

&lt;p&gt;Start with one: alias &lt;code&gt;git tree&lt;/code&gt; and run it on your current project. See your branches differently.&lt;/p&gt;

&lt;p&gt;Have a Git command that made you say "I wish I learned this sooner"? Drop it in the comments.&lt;/p&gt;

</description>
      <category>git</category>
      <category>productivity</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>I Built 10 MCP Servers in a Weekend — Here's the Template I Wish I Had Starting Out</title>
      <dc:creator>z z</dc:creator>
      <pubDate>Thu, 11 Jun 2026 10:18:45 +0000</pubDate>
      <link>https://dev.to/z_z_c01afd7cf4c3764a2c73d/i-built-10-mcp-servers-in-a-weekend-heres-the-template-i-wish-i-had-starting-out-1l70</link>
      <guid>https://dev.to/z_z_c01afd7cf4c3764a2c73d/i-built-10-mcp-servers-in-a-weekend-heres-the-template-i-wish-i-had-starting-out-1l70</guid>
      <description>&lt;p&gt;MCP (Model Context Protocol) is everywhere now. Every week there's a new server for GitHub, for databases, for APIs you've never heard of.&lt;/p&gt;

&lt;p&gt;But when I first started, I spent more time reading docs than writing code. The protocol isn't hard — it's just that every tutorial either shows you a toy example or dumps you straight into the full TypeScript SDK without explaining the basics.&lt;/p&gt;

&lt;p&gt;So I built a template. Then I built 10 servers off it in one weekend.&lt;/p&gt;

&lt;p&gt;Here's what I learned, and the template I now use for every MCP server.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Core Insight
&lt;/h2&gt;

&lt;p&gt;An MCP server is just a stdio or HTTP server that speaks JSON-RPC. That's it.&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="c1"&gt;# Minimal MCP server in 20 lines
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;handle_request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&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;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;method&lt;/span&gt;&lt;span class="sh"&gt;"&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;tools/list&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="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tools&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hello&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Say hello&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;inputSchema&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;object&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;properties&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{}}}]}&lt;/span&gt;
    &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;method&lt;/span&gt;&lt;span class="sh"&gt;"&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;tools/call&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;params&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{}).&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&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;hello&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="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello from MCP!&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="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;error&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;unknown method&lt;/span&gt;&lt;span class="sh"&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;line&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;msg&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;line&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;handle_request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdout&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&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;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&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="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="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdout&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;flush&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 working MCP server. 20 lines.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Template I Actually Use
&lt;/h2&gt;

&lt;p&gt;After 10 iterations, this is the structure that scales:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mcp-server/
├── server.py        # JSON-RPC handler + tool registry
├── tools/           # One file per tool
│   ├── __init__.py
│   ├── search.py
│   └── transform.py
├── config.py        # Env vars, defaults
└── requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Key principles:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;One file per tool group&lt;/strong&gt; — keeps things testable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool registry pattern&lt;/strong&gt; — register tools with a decorator, no routing boilerplate&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stdio first, HTTP later&lt;/strong&gt; — start with stdio for local dev, add HTTP transport when you need remote access&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Over the weekend I made:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A GitHub issues fetcher&lt;/li&gt;
&lt;li&gt;A SQL query builder (safe, no injection)&lt;/li&gt;
&lt;li&gt;A markdown-to-HTML converter&lt;/li&gt;
&lt;li&gt;A web scraper tool&lt;/li&gt;
&lt;li&gt;A JSON transformer&lt;/li&gt;
&lt;li&gt;A code formatter wrapper&lt;/li&gt;
&lt;li&gt;A weather data server&lt;/li&gt;
&lt;li&gt;A text summarizer&lt;/li&gt;
&lt;li&gt;A URL shortener&lt;/li&gt;
&lt;li&gt;A Docker log parser&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tools that an AI assistant can actually use during development.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hardest Part Wasn't the Code
&lt;/h2&gt;

&lt;p&gt;It was packaging and distribution. Getting the server from "works on my machine" to "anyone can install and run it" takes more effort than writing the server itself.&lt;/p&gt;

&lt;p&gt;That's why I put everything I learned into a starter kit — the template, the 10 servers, the packaging scripts, and a setup guide so you can go from zero to deployed in 30 minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Fastest Way to Start
&lt;/h2&gt;

&lt;p&gt;If you want to build MCP servers without the packaging headache:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. &lt;a href="https://zhirenhun.gumroad.com/l/mcp-server-starter-kit" rel="noopener noreferrer"&gt;MCP Server Starter Kit&lt;/a&gt;&lt;/strong&gt; — The template, 10 example servers, deployment scripts, and a step-by-step guide. $0 minimum (pay what you want).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. &lt;a href="https://zhirenhun.gumroad.com/l/ai-dev-toolkit" rel="noopener noreferrer"&gt;AI Developer Toolkit&lt;/a&gt;&lt;/strong&gt; — If you're building AI workflows, this has the prompts and patterns I use daily. $9.99.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. &lt;a href="https://zhirenhun.gumroad.com/l/claude-skills-pack" rel="noopener noreferrer"&gt;Claude Code Skills Pack&lt;/a&gt;&lt;/strong&gt; — 50 production-tested prompts for Claude Code. $9.99.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I write about MCP, AI tooling, and developer workflows. Follow me for more practical guides — no fluff, just things that actually work.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>python</category>
      <category>ai</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>I Used 500 ChatGPT Prompts for 30 Days — Here's What I Learned About Getting AI to Actually Help</title>
      <dc:creator>z z</dc:creator>
      <pubDate>Wed, 10 Jun 2026 11:37:50 +0000</pubDate>
      <link>https://dev.to/z_z_c01afd7cf4c3764a2c73d/i-used-500-chatgpt-prompts-for-30-days-heres-what-i-learned-about-getting-ai-to-actually-help-4im1</link>
      <guid>https://dev.to/z_z_c01afd7cf4c3764a2c73d/i-used-500-chatgpt-prompts-for-30-days-heres-what-i-learned-about-getting-ai-to-actually-help-4im1</guid>
      <description>&lt;p&gt;For the past month, I ran an experiment. Instead of typing whatever came to mind into ChatGPT, I prepared prompts in advance — specific ones for specific situations.&lt;/p&gt;

&lt;p&gt;Not "help me write an email" prompts. I'm talking about prompts designed for the exact moment you need them: when you're stuck on a work problem, when you need to have a difficult conversation, when you're planning a trip and don't know where to start.&lt;/p&gt;

&lt;p&gt;Here's what I found.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Problem with "Freeform" ChatGPT&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most people use ChatGPT like a search engine with opinions. They type a vague question, get a vague answer, and conclude "AI isn't that useful."&lt;/p&gt;

&lt;p&gt;The truth is: ChatGPT is an amplifier. Garbage in, garbage out. Specific in, gold out.&lt;/p&gt;

&lt;p&gt;When I stopped asking "help me be more productive" and started asking "create a weekly planning template with columns for must-do, should-do, nice-to-do, and delegated tasks" — the output went from generic to immediately usable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The 10 Areas Where Prompts Made a Real Difference&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After testing across 10 categories of daily life, here's where structured prompts had the most impact:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Writing &amp;amp; Content Creation&lt;/strong&gt;&lt;br&gt;
Pre-written prompts for blog posts, emails, social media, and scripts saved me 2+ hours per week. Instead of staring at a blank screen, I paste a prompt and get a structured first draft in 30 seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Productivity Systems&lt;/strong&gt;&lt;br&gt;
The biggest surprise. Prompts for creating SOPs, designing workflows, and breaking down complex projects were more useful than any productivity app I've tried.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Career &amp;amp; Professional Growth&lt;/strong&gt;&lt;br&gt;
Interview prep prompts, salary negotiation scripts, and performance review templates. These are conversations where you can't afford to improvise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Personal Finance&lt;/strong&gt;&lt;br&gt;
Budget planning, debt repayment strategies, investment research frameworks. A well-structured prompt for financial analysis beats scrolling through Reddit threads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Health &amp;amp; Fitness&lt;/strong&gt;&lt;br&gt;
Meal prep plans, workout routines, sleep hygiene checklists. The prompts helped me be consistent because they removed the "what should I do?" decision every day.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Relationships &amp;amp; Communication&lt;/strong&gt;&lt;br&gt;
This surprised me most. Prompts for difficult conversations, apologies, and boundary-setting helped me prepare for talks I'd been avoiding for weeks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7-10. Learning, Travel, Mental Health, Creativity&lt;/strong&gt;&lt;br&gt;
Each area benefited from the same principle: a good prompt is a thinking framework, not just a question.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does This Scale?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes — but only if the prompts are specific enough. A generic "100 productivity prompts" list won't help because you won't use them in the moment.&lt;/p&gt;

&lt;p&gt;The key is coverage. You need prompts for the situations you actually face, organized so you can find them when you need them. A prompt you can find in 5 seconds is useful. A prompt buried in a PDF you have to search through is useless.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Built&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After the 30 days, I compiled the 500 prompts that actually worked into a structured guide organized by category. Each prompt is designed to be copy-pasted with minimal editing.&lt;/p&gt;

&lt;p&gt;It covers writing, productivity, health, finance, career, learning, relationships, travel, mental health, and creativity — 50 prompts per category.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Bottom Line&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ChatGPT is useless if you ask it nothing. It's mildly useful if you ask it random things. It's genuinely valuable if you build a system of prompts that match your actual needs.&lt;/p&gt;

&lt;p&gt;The effort isn't in using AI. It's in preparing how you use it. And that prep work, done once, pays for itself many times over.&lt;/p&gt;

&lt;p&gt;If you want the full set of 500 prompts I used during this experiment, they're available in my profile. But even if you don't grab them — take 30 minutes this week to write down 10 situations where you wish you had better answers, and write a specific prompt for each one. You'll thank yourself later.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;💡 **Tools I use:&lt;/em&gt;* &lt;a href="https://zhirenhun.gumroad.com/l/mcp-server-starter-kit" rel="noopener noreferrer"&gt;MCP Server Starter Kit&lt;/a&gt; (PWYW) • &lt;a href="https://zhirenhun.gumroad.com/l/500-chatgpt-prompts-life-work" rel="noopener noreferrer"&gt;500 ChatGPT Prompts&lt;/a&gt; ($12.99) • &lt;a href="https://zhirenhun.gumroad.com/l/ai-dev-toolkit" rel="noopener noreferrer"&gt;AI Developer Toolkit&lt;/a&gt; ($9.99)*&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>chatgpt</category>
      <category>ai</category>
      <category>beginners</category>
    </item>
    <item>
      <title>I Spent a Month Pair-Programming with Claude Code — Here's What Actually Worked</title>
      <dc:creator>z z</dc:creator>
      <pubDate>Wed, 10 Jun 2026 10:25:51 +0000</pubDate>
      <link>https://dev.to/z_z_c01afd7cf4c3764a2c73d/i-spent-a-month-pair-programming-with-claude-code-heres-what-actually-worked-4fne</link>
      <guid>https://dev.to/z_z_c01afd7cf4c3764a2c73d/i-spent-a-month-pair-programming-with-claude-code-heres-what-actually-worked-4fne</guid>
      <description>&lt;p&gt;Six weeks ago I started using Claude Code as my daily pair programmer. Not for demos, not for "look what AI can do" — for actual, ship-to-production work.&lt;/p&gt;

&lt;p&gt;The internet is full of hot takes. Either AI will replace all developers, or it's a toy that writes broken code. After a month of real use, neither is true. Here's what actually works.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Setup&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I run Claude Code from my terminal with a few custom MCP servers for web search, file operations, and database queries. No IDE plugin, no chat interface — just &lt;code&gt;/usr/bin/claude&lt;/code&gt; and a terminal split.&lt;/p&gt;

&lt;p&gt;Key config decisions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Always start with a clear goal file (&lt;code&gt;goal.md&lt;/code&gt;) before any session&lt;/li&gt;
&lt;li&gt;Use MCP tools for context (search docs, check logs, read schemas) — raw Claude Code without tools hallucinates too much&lt;/li&gt;
&lt;li&gt;Break every task into 15-minute chunks max&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Where It Shines&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Refactoring with confidence.&lt;/strong&gt; I had a 600-line Express.js route handler that had grown organically over two years. "Split this into controller/service/repository layers, preserve all existing behavior, don't break the session middleware." Claude Code did it in one pass. I reviewed the diff in 10 minutes. Zero regressions.&lt;/p&gt;

&lt;p&gt;The trick: be specific about what NOT to change. "Don't touch the error handling pattern in line 120-180" is better than "refactor this properly".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Writing boilerplate I'd normally procrastinate.&lt;/strong&gt; Database migrations, CRUD routes for a new model, API tests for an existing endpoint — these are the tasks I'd estimate as "2 hours" and take 4 because I get distracted. Claude Code finishes them in one shot with 90% accuracy. The last 10% is trivial fixes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Debugging cryptic errors.&lt;/strong&gt; A WASM WebGL project was rendering a black screen with zero console errors. I pasted the shader code and build config into Claude. It spotted a missing &lt;code&gt;@interpolate(flat)&lt;/code&gt; qualifier in the WGSL vertex shader that I'd stared at for an hour. Saved me an evening.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where It Falls Short&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Complex multi-step logic.&lt;/strong&gt; "Implement a new authentication flow with OAuth, session management, rate limiting, and audit logging" — Claude Code produces working code but misses edge cases. CSRF token rotation on password change. Rate limit headers in error responses. Things a senior dev knows from experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Design decisions.&lt;/strong&gt; Claude Code is great at "how" but bad at "whether". Should we use WebSocket or SSE for this feature? Should this be a new microservice or an endpoint in the existing API? It will happily implement whichever approach you suggest, even if it's wrong.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Large refactors with no tests.&lt;/strong&gt; Without a test suite to validate against, Claude Code makes plausible-looking changes that break silently. Always have at least one integration test that exercises the critical path before letting it loose.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Workflow That Works&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My current routine:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Goal.md first&lt;/strong&gt; — Write 3-5 sentences about what needs to happen, including explicit constraints&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code takes the first pass&lt;/strong&gt; — I review the diff, not the conversation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I fix the subtle stuff&lt;/strong&gt; — Error handling, edge cases, naming conventions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commit with a good message&lt;/strong&gt; — Claude Code writes the commit message boilerplate, I add the "why"&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The biggest productivity gain isn't speed. It's &lt;strong&gt;flow state&lt;/strong&gt;. When Claude Code handles the mechanical parts, I stay in the zone for the parts that matter — architecture decisions, edge case thinking, code review.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Honest Bottom Line&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Claude Code saves me about 2-3 hours per day, mostly on tasks I'd procrastinate anyway. It doesn't eliminate the need for senior engineers — it makes them more effective by removing the grunt work.&lt;/p&gt;

&lt;p&gt;The developers who get the most value aren't the ones who use it for everything. They're the ones who know exactly when to use it and when to type the code themselves.&lt;/p&gt;

&lt;p&gt;I've been collecting the specific prompts and workflows that work best in practice. If you're curious, I wrote up my complete set of reusable Claude Code configurations and MCP server setups.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;💡 **Tools I use:&lt;/em&gt;* &lt;a href="https://zhirenhun.gumroad.com/l/mcp-server-starter-kit" rel="noopener noreferrer"&gt;MCP Server Starter Kit&lt;/a&gt; (PWYW) • &lt;a href="https://zhirenhun.gumroad.com/l/500-chatgpt-prompts-life-work" rel="noopener noreferrer"&gt;500 ChatGPT Prompts&lt;/a&gt; ($12.99) • &lt;a href="https://zhirenhun.gumroad.com/l/ai-dev-toolkit" rel="noopener noreferrer"&gt;AI Developer Toolkit&lt;/a&gt; ($9.99)*&lt;/p&gt;

</description>
      <category>claude</category>
      <category>productivity</category>
      <category>programming</category>
      <category>ai</category>
    </item>
    <item>
      <title>10 MCP Servers That Actually Improve Your Development Workflow in 2026</title>
      <dc:creator>z z</dc:creator>
      <pubDate>Wed, 10 Jun 2026 09:23:19 +0000</pubDate>
      <link>https://dev.to/z_z_c01afd7cf4c3764a2c73d/10-mcp-servers-that-actually-improve-your-development-workflow-in-2026-277d</link>
      <guid>https://dev.to/z_z_c01afd7cf4c3764a2c73d/10-mcp-servers-that-actually-improve-your-development-workflow-in-2026-277d</guid>
      <description>&lt;p&gt;If you've been following the AI-assisted development space, you've heard about the Model Context Protocol (MCP). But let's be honest—most MCP server lists are either too abstract or filled with niche tools you'll never use. In 2026, the ecosystem has matured, and I've curated 10 MCP servers that deliver &lt;strong&gt;real, measurable improvements&lt;/strong&gt; to your daily coding workflow.&lt;/p&gt;

&lt;p&gt;Each entry includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;What it does&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why it's useful&lt;/strong&gt; (with a concrete scenario)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Example config&lt;/strong&gt; (using the standard &lt;code&gt;.mcp.json&lt;/code&gt; or &lt;code&gt;claude_desktop_config.json&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's dive in.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. &lt;strong&gt;GitHub MCP Server&lt;/strong&gt; (by modelcontextprotocol)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Full read/write access to GitHub repos—issues, PRs, code reviews, and releases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why useful:&lt;/strong&gt; Instead of switching between your IDE and GitHub, your AI assistant can create a PR, request a review, and merge after CI passes—all from a single prompt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example config:&lt;/strong&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;"github"&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;"@modelcontextprotocol/server-github"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&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;"GITHUB_TOKEN"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ghp_xxxxxxxxxxxxxxxxxxxx"&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;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;&lt;strong&gt;Scenario:&lt;/strong&gt; "Create a new branch, add a fix for issue #42, push, and open a draft PR with a description."&lt;/p&gt;




&lt;h2&gt;
  
  
  2. &lt;strong&gt;Filesystem MCP Server&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Read, write, search, and manipulate files and directories on your local machine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why useful:&lt;/strong&gt; Your AI can now scaffold an entire project structure, rename files in bulk, or refactor code across multiple files without manual intervention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example config:&lt;/strong&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;"filesystem"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@modelcontextprotocol/server-filesystem"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&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;"ALLOWED_DIRS"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/home/user/projects"&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;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;&lt;strong&gt;Scenario:&lt;/strong&gt; "Create a Next.js project with this folder structure, add a components folder, and move all page files into a pages directory."&lt;/p&gt;




&lt;h2&gt;
  
  
  3. &lt;strong&gt;PostgreSQL MCP Server&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Connect to PostgreSQL databases, run queries, and return results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why useful:&lt;/strong&gt; Debugging SQL queries or exploring a production database becomes a conversation. You can ask "Show me the last 10 orders with user details" and get the result directly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example config:&lt;/strong&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;"postgres"&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;"@anthropic/mcp-server-postgres"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&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;"DATABASE_URL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"postgresql://user:pass@localhost:5432/mydb"&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;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;&lt;strong&gt;Scenario:&lt;/strong&gt; "Find all users who signed up in the last 7 days and haven't placed an order."&lt;/p&gt;




&lt;h2&gt;
  
  
  4. &lt;strong&gt;Docker MCP Server&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Manage Docker containers, images, volumes, and compose stacks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why useful:&lt;/strong&gt; No more copying and pasting Docker commands. Your assistant can spin up a dev environment, run tests inside a container, and tear it down when done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example config:&lt;/strong&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;"docker"&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;"@modelcontextprotocol/server-docker"&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;&lt;strong&gt;Scenario:&lt;/strong&gt; "Build the Dockerfile in this directory, tag it as myapp:latest, and run it with port mapping 3000:3000."&lt;/p&gt;




&lt;h2&gt;
  
  
  5. &lt;strong&gt;Supabase MCP Server&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Full CRUD access to Supabase projects—database, storage, auth, and Edge Functions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why useful:&lt;/strong&gt; If you're building with Supabase, your AI can create tables, write RLS policies, upload files, and manage user authentication directly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example config:&lt;/strong&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;"supabase"&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;"@supabase/mcp-server"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&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;"SUPABASE_URL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://yourproject.supabase.co"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"SUPABASE_SERVICE_KEY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."&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;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;&lt;strong&gt;Scenario:&lt;/strong&gt; "Create a 'profiles' table with columns for username, avatar_url, and bio. Add Row Level Security so users can only update their own profile."&lt;/p&gt;




&lt;h2&gt;
  
  
  6. &lt;strong&gt;Redis MCP Server&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Interact with Redis instances—keys, sets, streams, pub/sub, and more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why useful:&lt;/strong&gt; Debugging caching issues or inspecting session data becomes trivial. You can ask "What's the current value of the rate limit key for user 123?" and get an instant answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example config:&lt;/strong&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;"redis"&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;"@modelcontextprotocol/server-redis"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&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;"REDIS_URL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"redis://localhost:6379"&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;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;&lt;strong&gt;Scenario:&lt;/strong&gt; "Delete all keys matching 'session:*' that are older than 24 hours."&lt;/p&gt;




&lt;h2&gt;
  
  
  7. &lt;strong&gt;Playwright MCP Server&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Headless browser automation—click, type, screenshot, and extract data from web pages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why useful:&lt;/strong&gt; Your AI can test UI interactions, take screenshots for documentation, or scrape data without you writing a single line of Playwright code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example config:&lt;/strong&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;"playwright"&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;"@anthropic/mcp-server-playwright"&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;&lt;strong&gt;Scenario:&lt;/strong&gt; "Go to localhost:3000, click the login button, fill in the form with test credentials, and take a screenshot of the dashboard."&lt;/p&gt;




&lt;h2&gt;
  
  
  8. &lt;strong&gt;Slack MCP Server&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Send messages, read channels, search history, and post to threads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why useful:&lt;/strong&gt; Your AI can notify your team when a deployment finishes, fetch context from past conversations, or even help you draft a message.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example config:&lt;/strong&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;"slack"&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;"@modelcontextprotocol/server-slack"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&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;"SLACK_BOT_TOKEN"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"xoxb-xxxxxxxxxxxx-xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"SLACK_TEAM_ID"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TXXXXXXXXXX"&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;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;&lt;strong&gt;Scenario:&lt;/strong&gt; "Post a message in #deployments saying 'Frontend v2.3.1 deployed to production successfully.'"&lt;/p&gt;




&lt;h2&gt;
  
  
  9. &lt;strong&gt;Linear MCP Server&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Full access to Linear issues, projects, teams, and cycles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why useful:&lt;/strong&gt; If you use Linear for project management, your AI can create issues, update statuses, assign tasks, and generate sprint reports.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example config:&lt;/strong&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;"linear"&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;"@anthropic/mcp-server-linear"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&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;"LINEAR_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"lin_api_xxxxxxxxxxxxxxxxxxxx"&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;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;&lt;strong&gt;Scenario:&lt;/strong&gt; "Create a new issue in the 'Frontend' team for the current cycle titled 'Fix mobile nav overflow' with priority P1."&lt;/p&gt;




&lt;h2&gt;
  
  
  10. &lt;strong&gt;Jira MCP Server&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Interact with Jira—issues, sprints, boards, and projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why useful:&lt;/strong&gt; For teams stuck in Jira, this is a lifesaver. Your AI can transition issues, update custom fields, or generate burndown chart data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example config:&lt;/strong&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;"jira"&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;"@modelcontextprotocol/server-jira"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&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;"JIRA_URL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://yourdomain.atlassian.net"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"JIRA_EMAIL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"you@example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"JIRA_API_TOKEN"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"xxxxxxxxxxxxxxxxxxxxxxxx"&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;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;&lt;strong&gt;Scenario:&lt;/strong&gt; "Move all issues in the 'In Progress' column to 'Done' and add a comment that they were completed in the current sprint."&lt;/p&gt;




&lt;h2&gt;
  
  
  Bonus: How to Combine MCP Servers
&lt;/h2&gt;

&lt;p&gt;The real power emerges when you chain servers. For example:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use &lt;strong&gt;GitHub&lt;/strong&gt; to create a PR&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;Slack&lt;/strong&gt; to notify the team&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;Linear&lt;/strong&gt; to update the associated issue&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;All from a single prompt: "Deploy the hotfix, update the Linear ticket, and let the team know in Slack."&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Most MCP servers in this list are one &lt;code&gt;npx&lt;/code&gt; command away from working. Pick the two or three that solve your biggest pain points and start with those. The MCP ecosystem is still evolving, but investing time now means your AI assistant becomes genuinely useful—not just a code generator, but a teammate that interacts with your entire development stack.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I publish developer tool templates and skills packs at &lt;a href="https://zhirenhun.gumroad.com" rel="noopener noreferrer"&gt;zhirenhun.gumroad.com&lt;/a&gt;. If you found this useful, check out my &lt;a href="https://zhirenhun.gumroad.com/l/claude-code-skills-50" rel="noopener noreferrer"&gt;Claude Code Skills Pack&lt;/a&gt; — 50 production-ready prompts for AI-assisted development.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>tools</category>
    </item>
    <item>
      <title>10 Git Mistakes That Waste Hours — And How to Fix Them in Seconds</title>
      <dc:creator>z z</dc:creator>
      <pubDate>Mon, 08 Jun 2026 08:25:56 +0000</pubDate>
      <link>https://dev.to/z_z_c01afd7cf4c3764a2c73d/10-git-mistakes-that-waste-hours-and-how-to-fix-them-in-seconds-65h</link>
      <guid>https://dev.to/z_z_c01afd7cf4c3764a2c73d/10-git-mistakes-that-waste-hours-and-how-to-fix-them-in-seconds-65h</guid>
      <description>&lt;p&gt;Here are 10 Git mistakes I've made (or cleaned up for teammates) that cost real time — and the exact commands to fix them.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Committed to the wrong branch
&lt;/h2&gt;

&lt;p&gt;You're on &lt;code&gt;main&lt;/code&gt;, made changes, committed. Then you realize: this should have been a feature branch.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create the branch you meant to use, point it at your commit&lt;/span&gt;
git branch feature/new-api
&lt;span class="c"&gt;# Reset main back to where it was&lt;/span&gt;
git reset &lt;span class="nt"&gt;--hard&lt;/span&gt; origin/main
&lt;span class="c"&gt;# Switch to the new branch&lt;/span&gt;
git checkout feature/new-api
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;git branch &amp;lt;name&amp;gt;&lt;/code&gt; creates a branch at your current commit without switching. Then &lt;code&gt;git reset --hard&lt;/code&gt; moves your current branch back.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. "I need the last commit's changes but not the commit itself"
&lt;/h2&gt;

&lt;p&gt;You made a commit but want to undo the commit while keeping the changes in your working directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git reset &lt;span class="nt"&gt;--soft&lt;/span&gt; HEAD~1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;--soft&lt;/code&gt; moves the branch pointer back one commit but leaves all changes staged. You can re-commit them differently, split them, or discard.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Accidentally committed a massive file
&lt;/h2&gt;

&lt;p&gt;You added a 200MB video file, committed it, and now &lt;code&gt;git push&lt;/code&gt; hangs forever.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Remove the file from ALL commits (rewrites history)&lt;/span&gt;
git filter-branch &lt;span class="nt"&gt;--index-filter&lt;/span&gt; &lt;span class="s1"&gt;'git rm --cached --ignore-unmatch path/to/bigfile.mp4'&lt;/span&gt; HEAD
&lt;span class="c"&gt;# Force push&lt;/span&gt;
git push origin &lt;span class="nt"&gt;--force&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Better yet, catch it before commit with a pre-commit hook that blocks files over a threshold.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. "I need that commit I made before I reset"
&lt;/h2&gt;

&lt;p&gt;You ran &lt;code&gt;git reset --hard&lt;/code&gt; and now the commit is gone. Not really — Git keeps it for 30 days:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Find your "lost" commit&lt;/span&gt;
git reflog
&lt;span class="c"&gt;# You'll see something like: HEAD@{2}: commit: Added user authentication&lt;/span&gt;
&lt;span class="c"&gt;# Restore it&lt;/span&gt;
git cherry-pick HEAD@&lt;span class="o"&gt;{&lt;/span&gt;2&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="c"&gt;# Or checkout the whole state&lt;/span&gt;
git checkout HEAD@&lt;span class="o"&gt;{&lt;/span&gt;2&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The reflog is your safety net. It records every HEAD movement for 30 days.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Committed with the wrong author name
&lt;/h2&gt;

&lt;p&gt;Your commit shows "Unknown" or your work email instead of your GitHub email:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Fix the last commit's author&lt;/span&gt;
git commit &lt;span class="nt"&gt;--amend&lt;/span&gt; &lt;span class="nt"&gt;--author&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Your Name &amp;lt;email@example.com&amp;gt;"&lt;/span&gt; &lt;span class="nt"&gt;--no-edit&lt;/span&gt;

&lt;span class="c"&gt;# Fix multiple commits&lt;/span&gt;
git rebase &lt;span class="nt"&gt;-i&lt;/span&gt; HEAD~5
&lt;span class="c"&gt;# Mark commits as "edit", then for each one run:&lt;/span&gt;
git commit &lt;span class="nt"&gt;--amend&lt;/span&gt; &lt;span class="nt"&gt;--author&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"... "&lt;/span&gt; &lt;span class="nt"&gt;--no-edit&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; git rebase &lt;span class="nt"&gt;--continue&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fix your global config to prevent this: &lt;code&gt;git config --global user.name "..."&lt;/code&gt; and &lt;code&gt;git config --global user.email "..."&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Merge conflict nightmare
&lt;/h2&gt;

&lt;p&gt;A merge created conflicts in 15 files and you're not sure which changes to keep:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Abort the merge entirely&lt;/span&gt;
git merge &lt;span class="nt"&gt;--abort&lt;/span&gt;

&lt;span class="c"&gt;# Or use a visual diff tool&lt;/span&gt;
git mergetool

&lt;span class="c"&gt;# Or accept all "theirs" or "ours" for specific files&lt;/span&gt;
git checkout &lt;span class="nt"&gt;--theirs&lt;/span&gt; path/to/file.js   &lt;span class="c"&gt;# Accept incoming changes&lt;/span&gt;
git checkout &lt;span class="nt"&gt;--ours&lt;/span&gt; path/to/file.js     &lt;span class="c"&gt;# Accept your changes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When in doubt, abort and re-approach with a cleaner strategy.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. "I need to undo a pushed commit"
&lt;/h2&gt;

&lt;p&gt;You pushed a bad commit and need to undo it without rewriting public history:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create a new commit that reverses the bad one&lt;/span&gt;
git revert HEAD
&lt;span class="c"&gt;# Push the revert&lt;/span&gt;
git push origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;git revert&lt;/code&gt; is safe for shared branches because it doesn't rewrite history. Use &lt;code&gt;git reset&lt;/code&gt; only for commits that haven't been pushed.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. "I deleted a branch I still need"
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Find the deleted branch's last commit hash&lt;/span&gt;
git reflog
&lt;span class="c"&gt;# Look for "Branch: deleted feature/login" or the last commit message&lt;/span&gt;
&lt;span class="c"&gt;# Restore the branch at that commit&lt;/span&gt;
git branch feature/login &amp;lt;commit-hash&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you haven't garbage-collected, the commits are still there.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. "I committed on main instead of a branch" (the panic version)
&lt;/h2&gt;

&lt;p&gt;You made several commits on main before realizing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create branch at current position&lt;/span&gt;
git branch feature/new-api
&lt;span class="c"&gt;# Reset main to origin (safe because we have a branch pointing to our work)&lt;/span&gt;
git reset &lt;span class="nt"&gt;--hard&lt;/span&gt; origin/main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The branch you created preserves all your commits. Main is clean.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. "The commit message is terrible"
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;--amend&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Actually descriptive commit message"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Only works for the most recent commit. For older commits, use &lt;code&gt;git rebase -i&lt;/code&gt; and mark them as "reword".&lt;/p&gt;




&lt;h2&gt;
  
  
  The One Command That Saves All of This
&lt;/h2&gt;

&lt;p&gt;I got tired of remembering these commands, so I wrote a Claude Code skill called &lt;strong&gt;Git Rescue&lt;/strong&gt; that handles all 10 scenarios automatically. You invoke it with &lt;code&gt;/git-rescue&lt;/code&gt; and it walks you through the recovery step by step.&lt;/p&gt;

&lt;p&gt;The full pack includes this plus 49 other skills for code review, debugging, security, and refactoring.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://zhirenhun.gumroad.com/l/claude-code-skills-50" rel="noopener noreferrer"&gt;50 Claude Code Skills Pack — $9.99&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Git's safety net (reflog, the 30-day commit retention) is incredibly forgiving once you know it. What Git mistakes have you made? Drop them in the comments.&lt;/p&gt;

</description>
      <category>git</category>
      <category>productivity</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>I Wrote 50 Claude Code Prompts and Used Them for a Week -- Here's What Actually Works</title>
      <dc:creator>z z</dc:creator>
      <pubDate>Mon, 08 Jun 2026 03:32:27 +0000</pubDate>
      <link>https://dev.to/z_z_c01afd7cf4c3764a2c73d/i-wrote-50-claude-code-prompts-and-used-them-for-a-week-heres-what-actually-works-3l2k</link>
      <guid>https://dev.to/z_z_c01afd7cf4c3764a2c73d/i-wrote-50-claude-code-prompts-and-used-them-for-a-week-heres-what-actually-works-3l2k</guid>
      <description>&lt;p&gt;Last week I did something dumb: I sat down and wrote 50 Claude Code prompts in one sitting.&lt;/p&gt;

&lt;p&gt;Halfway through I was sure most would never get used. But I finished and forced myself to use them for a week.&lt;/p&gt;

&lt;h2&gt;
  
  
  7 Skills That Actually Saved Hours
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Code Review Assistant (saved ~3h)
&lt;/h3&gt;

&lt;p&gt;On a 400-line PR it caught 2 security issues I would have missed.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Bug Investigator (saved ~2h)
&lt;/h3&gt;

&lt;p&gt;Structured debugging instead of guessing.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Dependency Audit (saved ~1h)
&lt;/h3&gt;

&lt;p&gt;2 CVEs, 8 unused deps (21 MB) in a 3-year old project.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Auto Commit Messages (saved ~30m)
&lt;/h3&gt;

&lt;p&gt;15 commits, 2 minutes saved each.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Test Generator (saved ~2h)
&lt;/h3&gt;

&lt;p&gt;5-8 test cases per function in seconds.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Refactoring Planner (saved ~1h)
&lt;/h3&gt;

&lt;p&gt;Dependency-ordered plan, just execute.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Performance Audit (saved ~30m)
&lt;/h3&gt;

&lt;p&gt;Unoptimized 3 MB hero image found.&lt;/p&gt;

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

&lt;p&gt;Analysis skills (review, debug, audit) beat generation skills. They save hours, not minutes.&lt;/p&gt;

&lt;p&gt;Skills are habit. Hardest part was remembering to use them.&lt;/p&gt;




&lt;p&gt;Free: &lt;a href="https://github.com/zhirenhun-stack/claude-code-skills" rel="noopener noreferrer"&gt;https://github.com/zhirenhun-stack/claude-code-skills&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Full pack with 40 more skills available on Gumroad.&lt;/p&gt;

&lt;p&gt;Drop your most-used prompts in the comments.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;💡 **Tools I use:&lt;/em&gt;* &lt;a href="https://zhirenhun.gumroad.com/l/mcp-server-starter-kit" rel="noopener noreferrer"&gt;MCP Server Starter Kit&lt;/a&gt; (PWYW) • &lt;a href="https://zhirenhun.gumroad.com/l/500-chatgpt-prompts-life-work" rel="noopener noreferrer"&gt;500 ChatGPT Prompts&lt;/a&gt; ($12.99) • &lt;a href="https://zhirenhun.gumroad.com/l/ai-dev-toolkit" rel="noopener noreferrer"&gt;AI Developer Toolkit&lt;/a&gt; ($9.99)*&lt;/p&gt;

</description>
      <category>claude</category>
      <category>productivity</category>
      <category>programming</category>
      <category>devtools</category>
    </item>
    <item>
      <title>I Wrote 50 Claude Code Prompts and Used Them for a Week -- Here's What Actually Works</title>
      <dc:creator>z z</dc:creator>
      <pubDate>Mon, 08 Jun 2026 03:23:10 +0000</pubDate>
      <link>https://dev.to/z_z_c01afd7cf4c3764a2c73d/i-wrote-50-claude-code-prompts-and-used-them-for-a-week-heres-what-actually-works-44k4</link>
      <guid>https://dev.to/z_z_c01afd7cf4c3764a2c73d/i-wrote-50-claude-code-prompts-and-used-them-for-a-week-heres-what-actually-works-44k4</guid>
      <description>&lt;p&gt;Last week I did something dumb: I sat down and wrote 50 Claude Code prompts in one sitting.&lt;/p&gt;

&lt;p&gt;Halfway through I was sure most of them would never get used. But I finished, pushed them to GitHub, and made myself use them for an entire week -- no ad-hoc prompting allowed.&lt;/p&gt;

&lt;p&gt;The result surprised me. Some skills were life-changing. Others were useless. Here is the honest breakdown.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Methodology
&lt;/h2&gt;

&lt;p&gt;I categorized the 50 skills into 5 types: Analysis (12), Generation (14), Debugging (8), Planning (10), Maintenance (6).&lt;/p&gt;

&lt;p&gt;Rule: every time I hit a task, I must use a skill file or admit I did not have one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 7 That Actually Saved Me Hours
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Code Review Assistant (saved ~3h)
&lt;/h3&gt;

&lt;p&gt;This was the biggest surprise. I usually review PRs by gut feel -- scan the diff, look for obvious bugs, approve. The Code Review skill forced me to be systematic:&lt;/p&gt;

&lt;p&gt;On a 400-line PR it caught 2 security issues I would have missed. That alone justified the experiment.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Bug Investigator (saved ~2h)
&lt;/h3&gt;

&lt;p&gt;Instead of pasting errors and asking "why?", this skill forces you to provide: error message, file context, hypothesis.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Dependency Audit (saved ~1h)
&lt;/h3&gt;

&lt;p&gt;Scanned a 3-year old Node project. Found 2 CVEs, 8 unused devDependencies (21 MB).&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Auto Commit Messages (saved ~30m)
&lt;/h3&gt;

&lt;p&gt;Saves 2 minutes per commit. Over 15 commits in a week that is 30 minutes.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Test Generator (saved ~2h)
&lt;/h3&gt;

&lt;p&gt;Generates 5-8 test cases per function in seconds.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Refactoring Planner (saved ~1h)
&lt;/h3&gt;

&lt;p&gt;Reads the function, identifies extraction candidates, outputs a dependency-ordered plan.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Performance Audit (saved ~30m)
&lt;/h3&gt;

&lt;p&gt;Found an unoptimized 3 MB hero image and a render-blocking script.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Ones I Never Touched
&lt;/h2&gt;

&lt;p&gt;About 8 out of 50 were "not this week" -- Database Migrations, API Documentation, CI/CD Pipeline.&lt;/p&gt;

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

&lt;p&gt;The ROI is in the analysis skills. Code review, bug investigation, dependency audit -- these are high-judgment tasks where Claude thoroughness beats speed.&lt;/p&gt;

&lt;p&gt;Skills are habit, not technology. The hardest part was not writing the prompts -- it was remembering to use them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Should You Do This?
&lt;/h2&gt;

&lt;p&gt;If you use Claude Code daily, writing 5-10 custom skills for your most common tasks will pay back in 2 weeks.&lt;/p&gt;

&lt;p&gt;I published all 50 skills on GitHub (free): &lt;a href="https://github.com/zhirenhun-stack/claude-code-skills" rel="noopener noreferrer"&gt;https://github.com/zhirenhun-stack/claude-code-skills&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The full pack has 40 more covering security, DevOps, and cloud infrastructure -- available on Gumroad if you find the free ones useful.&lt;/p&gt;

&lt;p&gt;What skills would you add? Drop your most-used prompts in the comments.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;💡 **Tools I use:&lt;/em&gt;* &lt;a href="https://zhirenhun.gumroad.com/l/mcp-server-starter-kit" rel="noopener noreferrer"&gt;MCP Server Starter Kit&lt;/a&gt; (PWYW) • &lt;a href="https://zhirenhun.gumroad.com/l/500-chatgpt-prompts-life-work" rel="noopener noreferrer"&gt;500 ChatGPT Prompts&lt;/a&gt; ($12.99) • &lt;a href="https://zhirenhun.gumroad.com/l/ai-dev-toolkit" rel="noopener noreferrer"&gt;AI Developer Toolkit&lt;/a&gt; ($9.99)*&lt;/p&gt;

</description>
      <category>claude</category>
      <category>productivity</category>
      <category>programming</category>
      <category>devtools</category>
    </item>
    <item>
      <title>50 Reusable Claude Code Skills That'll Save You Hours Every Week</title>
      <dc:creator>z z</dc:creator>
      <pubDate>Sun, 07 Jun 2026 13:55:49 +0000</pubDate>
      <link>https://dev.to/z_z_c01afd7cf4c3764a2c73d/50-reusable-claude-code-skills-thatll-save-you-hours-every-week-do1</link>
      <guid>https://dev.to/z_z_c01afd7cf4c3764a2c73d/50-reusable-claude-code-skills-thatll-save-you-hours-every-week-do1</guid>
      <description>&lt;p&gt;Every developer I know has that one task they do so often it's muscle memory — but still manual. You type the same &lt;code&gt;git log&lt;/code&gt; incantation, the same review checklist, the same debugging incantation. You copy-paste your review template from an old PR. You re-explain "please analyze this crash" to the LLM for the fifth time this week.&lt;/p&gt;

&lt;p&gt;What if you never had to ask twice?&lt;/p&gt;

&lt;p&gt;Claude Code has a &lt;strong&gt;skills system&lt;/strong&gt; that lets you save reusable instructions as named files. Once saved, you invoke them with a slash command — &lt;code&gt;/skill-name&lt;/code&gt; — and the entire instruction set loads instantly. The result? Your best workflows become one keystroke away.&lt;/p&gt;

&lt;p&gt;After curating 50 skills across real production projects, here are the five most impactful ones — with the actual code and scenarios that make them indispensable.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Git Rescue — &lt;code&gt;/git-rescue&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The scenario:&lt;/strong&gt; You've been hacking for an hour, made 14 commits on the wrong branch, and now &lt;code&gt;git log&lt;/code&gt; looks like a crime scene. You need to clean it up without losing work — and fast.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The skill file (&lt;code&gt;git-rescue.skill.md&lt;/code&gt;):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Git Rescue&lt;/span&gt;

You are a Git recovery specialist. The user has a messy git history
and needs to clean it up.

Rules:
&lt;span class="p"&gt;-&lt;/span&gt; Always confirm destructive commands (reset --hard, push --force)
  before execution
&lt;span class="p"&gt;-&lt;/span&gt; Prefer &lt;span class="sb"&gt;`git rebase -i`&lt;/span&gt; over &lt;span class="sb"&gt;`reset`&lt;/span&gt; when commits have meaningful messages
&lt;span class="p"&gt;-&lt;/span&gt; Suggest &lt;span class="sb"&gt;`git reflog`&lt;/span&gt; first when the user says "I lost work"
&lt;span class="p"&gt;-&lt;/span&gt; For "wrong branch" scenarios: suggest cherry-pick or merge, not replay

Workflow:
&lt;span class="p"&gt;1.&lt;/span&gt; Run &lt;span class="sb"&gt;`git log --oneline -20`&lt;/span&gt; to assess the situation
&lt;span class="p"&gt;2.&lt;/span&gt; Run &lt;span class="sb"&gt;`git branch -a`&lt;/span&gt; to check for recovery targets
&lt;span class="p"&gt;3.&lt;/span&gt; Propose a plan before executing
&lt;span class="p"&gt;4.&lt;/span&gt; After cleanup, verify with &lt;span class="sb"&gt;`git log --oneline -5`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why it saves hours:&lt;/strong&gt; That moment of panic when you &lt;code&gt;git reset --hard&lt;/code&gt; the wrong thing is uniquely costly. A well-structured skill turns panic into a calm, step-by-step checklist. It's saved my team over an hour of collective "oh no" time.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Code Review — &lt;code&gt;/code-review&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The scenario:&lt;/strong&gt; Someone drops a 1,200-line PR on your desk at 4 PM. You need to review it thoroughly, but you also need to be done before dinner.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The skill file (&lt;code&gt;code-review.skill.md&lt;/code&gt;):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Code Review&lt;/span&gt;

You are a senior code reviewer. Focus on correctness, security,
and maintainability — not style.

Checklist (run in order):
&lt;span class="p"&gt;1.&lt;/span&gt; &lt;span class="sb"&gt;`git diff main...HEAD --stat`&lt;/span&gt; — understand scope
&lt;span class="p"&gt;2.&lt;/span&gt; &lt;span class="sb"&gt;`git diff main...HEAD`&lt;/span&gt; — full diff walkthrough
&lt;span class="p"&gt;3.&lt;/span&gt; For each changed file, flag:
&lt;span class="p"&gt;   -&lt;/span&gt; Unsanitized user input → SQL injection / XSS risk
&lt;span class="p"&gt;   -&lt;/span&gt; Hardcoded secrets or API keys
&lt;span class="p"&gt;   -&lt;/span&gt; Error paths that swallow exceptions
&lt;span class="p"&gt;   -&lt;/span&gt; State mutations inside pure functions
&lt;span class="p"&gt;4.&lt;/span&gt; Security: check for &lt;span class="sb"&gt;`eval`&lt;/span&gt;, &lt;span class="sb"&gt;`exec`&lt;/span&gt;, raw SQL concat, missing auth
&lt;span class="p"&gt;5.&lt;/span&gt; Performance: N+1 queries, O(n²) in hot paths, unnecessary allocations
&lt;span class="p"&gt;6.&lt;/span&gt; Summarize: list blocking issues first, then nits, then praise
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; The best review skills have three output sections — "Blocking," "Should Fix," and "Nit" — so the author knows exactly what to prioritise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it saves hours:&lt;/strong&gt; A junior reviewer spends 45 minutes on a PR and misses three security issues. A senior spends 10 minutes and catches all of them. This skill closes that gap.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Refactor Helper — &lt;code&gt;/refactor-helper&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The scenario:&lt;/strong&gt; You have a 300-line "utils" function that grew organically over two years. Everyone is afraid to touch it. But now you need to add a feature, and you can't stomach adding another parameter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The skill file (&lt;code&gt;refactor-helper.skill.md&lt;/code&gt;):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Refactor Helper&lt;/span&gt;

You are a code refactoring specialist. Your goal is to decompose
large functions into smaller, testable units without changing
external behaviour.

Rules:
&lt;span class="p"&gt;1.&lt;/span&gt; Start by reading the full function — &lt;span class="sb"&gt;`cat`&lt;/span&gt; or read the file
&lt;span class="p"&gt;2.&lt;/span&gt; Identify: pure computations, I/O, error handling, side effects
&lt;span class="p"&gt;3.&lt;/span&gt; Group related logic into candidate helper functions
&lt;span class="p"&gt;4.&lt;/span&gt; For each candidate, write a minimal signature and docstring
&lt;span class="p"&gt;5.&lt;/span&gt; After extracting, verify: &lt;span class="sb"&gt;`diff`&lt;/span&gt; the before/after on sample inputs
&lt;span class="p"&gt;6.&lt;/span&gt; Never change behaviour — if the output changes, revert and retry
&lt;span class="p"&gt;7.&lt;/span&gt; Suggest test cases for each extracted function
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Real-world example:&lt;/strong&gt; I used this on a 280-line Python function that parsed 3 different log formats. The skill extracted 4 focused functions in under 5 minutes. Every one passed the existing test suite on the first run. The original author — who'd been "meaning to refactor" for six months — was speechless.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Debug Analyzer — &lt;code&gt;/debug-analyzer&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The scenario:&lt;/strong&gt; A test fails intermittently. The stack trace is 40 lines deep. &lt;code&gt;console.log&lt;/code&gt; shows it enters the right branch, but the output is wrong. You've been staring at it for an hour.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The skill file (&lt;code&gt;debug-analyzer.skill.md&lt;/code&gt;):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Debug Analyzer&lt;/span&gt;

You are a debugging specialist. The user has a failing test or a
runtime error. Walk through it systematically.

Workflow:
&lt;span class="p"&gt;1.&lt;/span&gt; Read the full error output and traceback
&lt;span class="p"&gt;2.&lt;/span&gt; Identify: exception type, what was expected vs what happened
&lt;span class="p"&gt;3.&lt;/span&gt; Trace the data flow: where does the incorrect value originate?
&lt;span class="p"&gt;4.&lt;/span&gt; Check the three most common sources:
&lt;span class="p"&gt;   -&lt;/span&gt; Off-by-one errors in loops or array slicing
&lt;span class="p"&gt;   -&lt;/span&gt; Async timing (missing await, race condition)
&lt;span class="p"&gt;   -&lt;/span&gt; Mutable state sharing (object mutated in place)
&lt;span class="p"&gt;5.&lt;/span&gt; Propose a hypothesis → minimal reproduction → fix → verify
&lt;span class="p"&gt;6.&lt;/span&gt; If stuck after 3 attempts, suggest adding structured logging
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why it saves hours:&lt;/strong&gt; Debugging is the most unpredictable time sink in software. A systematic approach — exactly what this skill enforces — turns "stare at the problem" into "follow the checklist." The structure alone saves at least 30 minutes per session.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Test Generator — &lt;code&gt;/test-generator&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The scenario:&lt;/strong&gt; You just wrote a new module with 12 exported functions. You know you should write tests. You also know you won't — unless it's painless.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The skill file (&lt;code&gt;test-generator.skill.md&lt;/code&gt;):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Test Generator&lt;/span&gt;

You are a test generation specialist. Given a source file, produce
comprehensive unit tests.

Rules:
&lt;span class="p"&gt;-&lt;/span&gt; One &lt;span class="sb"&gt;`describe`&lt;/span&gt; block per exported function
&lt;span class="p"&gt;-&lt;/span&gt; Cover: happy path, error path, edge cases (empty/null/zero/boundary)
&lt;span class="p"&gt;-&lt;/span&gt; Mock external dependencies (network calls, file I/O, DB)
&lt;span class="p"&gt;-&lt;/span&gt; Use the same test framework as the project (detect from package.json / config)
&lt;span class="p"&gt;-&lt;/span&gt; Write assertions that test behaviour, not implementation
&lt;span class="p"&gt;-&lt;/span&gt; After generating, run: &lt;span class="sb"&gt;`npx vitest run --reporter=verbose`&lt;/span&gt;

Output format:
&lt;span class="p"&gt;-&lt;/span&gt; Create &lt;span class="sb"&gt;`__tests__/&amp;lt;filename&amp;gt;.test.js`&lt;/span&gt; (or adjacent &lt;span class="sb"&gt;`.test.ts`&lt;/span&gt;)
&lt;span class="p"&gt;-&lt;/span&gt; Include a header comment with the source file path and date
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The result:&lt;/strong&gt; I generated 45 unit tests for a 400-line TypeScript module in one &lt;code&gt;/test-generator&lt;/code&gt; call. They caught three edge cases I hadn't thought of — and the whole thing took under 2 minutes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Building Your Own Skill Library
&lt;/h2&gt;

&lt;p&gt;These five skills took me about 20 minutes total to write. The ROI is absurd: every time you use one, you save more time than it cost to create.&lt;/p&gt;

&lt;p&gt;Here's how to start:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create a &lt;code&gt;~/.claude/skills/&lt;/code&gt; directory&lt;/strong&gt; (or wherever your Claude Code config lives)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write your first skill&lt;/strong&gt; — start with the task you do most often and hate the most&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Name it descriptively&lt;/strong&gt; — &lt;code&gt;git-rescue.skill.md&lt;/code&gt;, &lt;code&gt;deploy-check.skill.md&lt;/code&gt;, &lt;code&gt;migration-rollback.skill.md&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run &lt;code&gt;/skill-name&lt;/code&gt; in Claude Code&lt;/strong&gt; to use it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Iterate&lt;/strong&gt; — after 3 uses, you'll know exactly what to add or remove&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The trick is to keep skills small and focused. One task per file. A clear trigger ("when this happens"), a checklist, and a verification step.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; Version-control your skills directory. A shared &lt;code&gt;.claude/skills/&lt;/code&gt; repo in your organisation means every team member benefits from the collective debugging and review expertise of the entire group. Onboarding new engineers goes from "here's our wiki" to "here's our skills repo."&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Your future self — the one staring at a cryptic stack trace at 6 PM on a Friday — will thank you.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Check out the full pack of 50 ready-to-use Claude Code skills on Gumroad:&lt;/strong&gt; &lt;a href="https://zhirenhun.gumroad.com/l/claude-code-skills" rel="noopener noreferrer"&gt;https://zhirenhun.gumroad.com/l/claude-code-skills&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This pack covers Git workflows, code review, debugging, refactoring, testing, deployment checks, database migrations, incident response, and more — each one battle-tested in real production environments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>5 AI Coding Prompts That Changed How I Ship Software</title>
      <dc:creator>z z</dc:creator>
      <pubDate>Sun, 07 Jun 2026 13:36:10 +0000</pubDate>
      <link>https://dev.to/z_z_c01afd7cf4c3764a2c73d/5-ai-coding-prompts-that-changed-how-i-ship-software-4b22</link>
      <guid>https://dev.to/z_z_c01afd7cf4c3764a2c73d/5-ai-coding-prompts-that-changed-how-i-ship-software-4b22</guid>
      <description>&lt;p&gt;1|---&lt;br&gt;
2|title: "5 AI Coding Prompts That Changed How I Ship Software"&lt;br&gt;
3|published: true&lt;br&gt;
4|description: "After shipping 10+ projects with AI assistance, here are the 5 prompts that actually save me hours every week"&lt;br&gt;
5|tags: ai, productivity, programming, webdev&lt;br&gt;
6|---&lt;br&gt;
7|&lt;br&gt;
8|After a year of using AI coding agents daily, I've learned one thing the hard way: &lt;strong&gt;the prompt is the product&lt;/strong&gt;.&lt;br&gt;
9|&lt;br&gt;
10|A vague prompt gets you boilerplate. A sharp prompt gets you production code.&lt;br&gt;
11|&lt;br&gt;
12|Here are the 5 prompts I use every day that actually move the needle.&lt;br&gt;
13|&lt;br&gt;
14|---&lt;br&gt;
15|&lt;br&gt;
16|## 1. The Context Sandwich&lt;br&gt;
17|&lt;br&gt;
18|Most developers dump a task and expect magic. Instead:&lt;br&gt;
19|&lt;br&gt;
20|&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;21|CONTEXT: This is a Next.js 14 app with Prisma + PostgreSQL.
22|I have a schema for "orders" with status enum (pending, paid, shipped, cancelled).
23|GOAL: Create an API route that filters orders by status, with pagination (20 per page).
24|CONSTRAINTS: Must use cursor-based pagination. Must include total count.
25|OUTPUT: Full route code + curl examples.
26|```


27|
28|Why it works: You're telling the AI **where to work, what to build, and how to verify**. No guesswork.
29|
30|---
31|
32|## 2. The Refactor Blueprint
33|
34|Instead of "refactor this file":
35|
36|

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;37|FILE: components/UserDashboard.tsx (342 lines)&lt;br&gt;
38|PROBLEM: Too many responsibilities — renders profile, orders list, and settings.&lt;br&gt;
39|TARGET: Split into 3 files: UserProfile.tsx, OrderList.tsx, UserSettings.tsx&lt;br&gt;
40|OUTPUT: Each file with full imports, keeping the same API shape so the parent doesn't break.&lt;br&gt;
41|VERIFY: The original import path &lt;code&gt;./UserDashboard&lt;/code&gt; should still export the same component (as a thin wrapper).&lt;br&gt;
42|```&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;43|&lt;br&gt;
44|The AI generates the split, and the verification step catches common mistakes like missing exports or broken imports.&lt;br&gt;
45|&lt;br&gt;
46|---&lt;br&gt;
47|&lt;br&gt;
48|## 3. The Error-First Debug&lt;br&gt;
49|&lt;br&gt;
50|When debugging, most people paste an error and ask "why?". Better:&lt;br&gt;
51|&lt;br&gt;
52|&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;53|ERROR: TypeError: Cannot read properties of undefined (reading 'map')
54|FILE: src/hooks/useProducts.ts, line 42
55|CONTEXT: This is called after a fetch from /api/products. The API returns { data: Product[] } but sometimes data is null.
56|HYPOTHESIS: The error happens when data is null before the fetch completes.
57|FIX: Add a guard clause. Also check: is the loading state being handled in the component?
58|OUTPUT: The fix + why it happened + how to prevent it next time.
59|```


60|
61|The hypothesis gives the AI a starting point. The "also check" catches secondary issues.
62|
63|---
64|
65|## 4. The Test Generator
66|
67|Tests are boring but necessary. This prompt makes them fast:
68|
69|

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;70|FILE: src/utils/priceCalculator.ts&lt;br&gt;
71|EXPORTS: calculateTotal(items: CartItem[], discountCode?: string): number&lt;br&gt;
72|TEST FRAMEWORK: Vitest&lt;br&gt;
73|COVER:&lt;br&gt;
74|  - Empty cart → returns 0&lt;br&gt;
75|  - Single item with no discount → correct total&lt;br&gt;
76|  - Multiple items with percentage discount&lt;br&gt;
77|  - Expired discount code → no discount applied&lt;br&gt;
78|  - Edge case: negative quantity → throws error&lt;br&gt;
79|STYLE: describe/it blocks, no mocks unless necessary.&lt;br&gt;
80|```&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;81|&lt;br&gt;
82|I get 5-8 test cases in seconds, covering the happy path and the edge cases I'd forget to write myself.&lt;br&gt;
83|&lt;br&gt;
84|---&lt;br&gt;
85|&lt;br&gt;
86|## 5. The Documentation First&lt;br&gt;
87|&lt;br&gt;
88|Before writing any code for a new feature, I prompt:&lt;br&gt;
89|&lt;br&gt;
90|&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;91|FEATURE: Add a "compare products" sidebar that lets users select 2-4 products and see a side-by-side comparison table.
92|DESIGN DOC: Write a brief spec covering:
93|  - Component tree (what renders what)
94|  - State management (selected products, comparison data)
95|  - API shape (what the comparison endpoint returns)
96|  - Loading / empty / error states
97|  - Mobile vs desktop layout
98|KEEP IT SHORT: One paragraph per section. Bullet points for states.
99|```


100|
101|This alone has saved me from building the wrong thing at least 5 times. The AI surfaces edge cases you haven't thought of, and you catch them before writing a single line of implementation code.
102|
103|---
104|
105|## Why This Matters
106|
107|The difference between a junior and a senior using AI tools isn't the tool — it's the **prompt architecture**. These 5 patterns alone cut my implementation time by about 40% on most features.
108|
109|I've compiled 50 more battle-tested prompts like these — covering debugging, refactoring, testing, documentation, and architecture — into a Claude Code Skills Pack. Each skill is a reusable prompt template you can drop into your workflow.
110|
111|👉 [50 Claude Code Skills Pack – Prompts That Ship](https://zhirenhun.gumroad.com/l/izhcu)
112|
113|The free version gives you 10 skills to try. If they save you even one debugging session, it's paid for itself.
114|
115|---
116|
117|*What prompts have you found that consistently save time? Drop them in the comments — I'm always looking to level up my kit.*
118|
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>webdev</category>
    </item>
    <item>
      <title>I Just Made 50 Claude Code Prompts Free — Here's Why</title>
      <dc:creator>z z</dc:creator>
      <pubDate>Thu, 04 Jun 2026 14:30:37 +0000</pubDate>
      <link>https://dev.to/z_z_c01afd7cf4c3764a2c73d/i-just-made-50-claude-code-prompts-free-heres-why-27mf</link>
      <guid>https://dev.to/z_z_c01afd7cf4c3764a2c73d/i-just-made-50-claude-code-prompts-free-heres-why-27mf</guid>
      <description>&lt;p&gt;Claude Code is incredible at coding. But let's be honest — most of us use it the same way: type a question, get an answer, move on.&lt;/p&gt;

&lt;p&gt;You are leaving 80% of its capability on the table.&lt;/p&gt;

&lt;p&gt;I spent weeks building a collection of &lt;strong&gt;50 specific, battle-tested prompts&lt;/strong&gt; that turn Claude Code into specialized tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A code reviewer that catches SQL injection, memory leaks, and race conditions&lt;/li&gt;
&lt;li&gt;A bug investigator that traces root causes instead of guessing&lt;/li&gt;
&lt;li&gt;A performance auditor that finds bottlenecks in your stack&lt;/li&gt;
&lt;li&gt;A refactoring planner that shows you exactly which files to touch (in what order)&lt;/li&gt;
&lt;li&gt;A dependency auditor that flags security risks before they reach production&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Most developers use Claude Code with ad-hoc prompts. "Review this code" — and you get a shallow pass. "Debug this" — and you get random guesses.&lt;/p&gt;

&lt;p&gt;The secret is &lt;strong&gt;specificity&lt;/strong&gt;. A prompt like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are a senior security engineer. Review this diff for:
1. SQL injection in string interpolation
2. XSS in unescaped template variables
3. Memory leaks from unclosed event listeners
4. Race conditions in async operations

For each finding, provide: severity (🔴/🟡/🟢), file:line, exploit scenario, and exact fix code.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not the same as "review this code." The difference is night and day.&lt;/p&gt;

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

&lt;p&gt;I compiled 50 such prompts into single-file markdown documents. Each one is a specific tool:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Skill&lt;/th&gt;
&lt;th&gt;What It Does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Auto Commit Messages&lt;/td&gt;
&lt;td&gt;Generates conventional commits from staged changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Code Review Assistant&lt;/td&gt;
&lt;td&gt;Catches bugs, security holes, design issues&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Project Context Builder&lt;/td&gt;
&lt;td&gt;Understands any codebase in 2 minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Test Generator&lt;/td&gt;
&lt;td&gt;Creates comprehensive test suites&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Bug Investigator&lt;/td&gt;
&lt;td&gt;Root cause analysis, not random fixes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;API Documentation&lt;/td&gt;
&lt;td&gt;Generates docs from source code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Database Migrations&lt;/td&gt;
&lt;td&gt;Safe schema change planning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Refactoring Planner&lt;/td&gt;
&lt;td&gt;Incremental, reversible refactoring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;Dependency Audit&lt;/td&gt;
&lt;td&gt;Security + license + bloat analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;Performance Audit&lt;/td&gt;
&lt;td&gt;Find bottlenecks and config issues&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;... and 40 more covering CI/CD, Docker, security, monitoring, and production ops&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How to Use
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/zhirenhun-stack/claude-code-skills.git
claude &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;skills/02-code-review.md&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;git diff main&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why Free?
&lt;/h2&gt;

&lt;p&gt;I believe these prompts should be accessible to everyone who codes. The free GitHub repo has 10 prompts. The &lt;a href="https://zhirenhun.gumroad.com/l/claude-code-skills-50" rel="noopener noreferrer"&gt;full pack of 50&lt;/a&gt; is pay-what-you-want ($0 minimum) — you decide.&lt;/p&gt;

&lt;p&gt;If you find even 2-3 prompts that save you time, share them with a teammate. That is the only "payment" I ask for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real Example: Dependency Audit
&lt;/h2&gt;

&lt;p&gt;Yesterday I ran the Dependency Audit on a 3-year-old Node.js project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🔴 HIGH — CVE-2024-XXXX in lodash@4.17.15
  → Server-side prototype pollution via crafted JSON
  → Fix: npm install lodash@4.17.21

🟡 MEDIUM — Leftpad-style pattern in 3 dependencies
  → These packages have 1 maintainer and 0 test coverage
  → Consider inlining or replacing

🟢 LOW — 8 unused devDependencies
  → Removed: node-sass, gulp, coffeescript (21 MB saved)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It took 10 seconds. It would have taken 30 minutes to audit manually.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get It
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free (10 prompts):&lt;/strong&gt; &lt;a href="https://github.com/zhirenhun-stack/claude-code-skills" rel="noopener noreferrer"&gt;github.com/zhirenhun-stack/claude-code-skills&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full Pack (50 prompts):&lt;/strong&gt; &lt;a href="https://zhirenhun.gumroad.com/l/claude-code-skills-50" rel="noopener noreferrer"&gt;Gumroad — Pay What You Want ($0+)&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Drop a comment if there is a specific skill you want me to add. I am actively maintaining this collection.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;P.S. If this saves you even one debugging session, star the repo. It helps others find it.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>claude</category>
      <category>productivity</category>
      <category>ai</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Build Your Own MCP Server in 5 Minutes — TypeScript Starter Template</title>
      <dc:creator>z z</dc:creator>
      <pubDate>Wed, 03 Jun 2026 12:29:14 +0000</pubDate>
      <link>https://dev.to/z_z_c01afd7cf4c3764a2c73d/build-your-own-mcp-server-in-5-minutes-typescript-starter-template-17ap</link>
      <guid>https://dev.to/z_z_c01afd7cf4c3764a2c73d/build-your-own-mcp-server-in-5-minutes-typescript-starter-template-17ap</guid>
      <description>&lt;p&gt;I've been building MCP servers for my own projects, and I realized something: everyone keeps reimplementing the same boilerplate. File reads, directory listings, grep — you write them once, then again in the next server.&lt;/p&gt;

&lt;p&gt;So I put together a minimal &lt;strong&gt;MCP Server Starter&lt;/strong&gt; in TypeScript. Three tools to get you started:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Example from src/index.ts&lt;/span&gt;
&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setRequestHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ListToolsRequestSchema&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;read_file&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Read contents of a text file&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;inputSchema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;object&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Absolute path to the file&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="c1"&gt;// list_directory, grep_search — same pattern&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run build
npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then add to Claude Desktop 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;"my-server"&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;"node"&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/mcp-server-starter/dist/index.js"&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;h2&gt;
  
  
  Why MCP?
&lt;/h2&gt;

&lt;p&gt;MCP (Model Context Protocol) is Anthropic's open protocol that lets LLMs talk to external tools. Write your server once and any MCP-aware client can use it — Claude Desktop, Cursor, VS Code, and more.&lt;/p&gt;

&lt;p&gt;Instead of writing a custom integration for every LLM, you write your MCP server once and it works everywhere. Standard I/O transport — no HTTP server, no open ports, no Docker required.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Inside (Free Version)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;read_file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Read any text file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_directory&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;List files in a folder with sizes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;grep_search&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Search for text across your codebase&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All TypeScript with the official MCP SDK. Compiles to a single Node entry point. MIT licensed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pro Version ($9.99)
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;&lt;a href="https://zhirenhun.gumroad.com/l/utybwe" rel="noopener noreferrer"&gt;Pro Kit&lt;/a&gt;&lt;/strong&gt; adds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;File metadata operations&lt;/strong&gt; — stat, permissions, timestamps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API integration&lt;/strong&gt; — fetch any URL with timeout handling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web search&lt;/strong&gt; — DuckDuckGo integration with LLM-optimized formatting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dockerfile&lt;/strong&gt; — containerized deployment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VPS deploy script&lt;/strong&gt; — one-command deployment with systemd + rsync&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Commercial license&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub (free):&lt;/strong&gt; &lt;a href="https://github.com/zhirenhun-stack/mcp-server-starter" rel="noopener noreferrer"&gt;github.com/zhirenhun-stack/mcp-server-starter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live demo / landing page:&lt;/strong&gt; &lt;a href="https://zhirenhun-stack.github.io/mcp-server-starter/" rel="noopener noreferrer"&gt;zhirenhun-stack.github.io/mcp-server-starter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pro Kit ($9.99):&lt;/strong&gt; &lt;a href="https://zhirenhun.gumroad.com/l/utybwe" rel="noopener noreferrer"&gt;Gumroad&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Also check out &lt;a href="https://github.com/zhirenhun-stack/git-copilot" rel="noopener noreferrer"&gt;git-copilot&lt;/a&gt; — AI-free conventional commit message generator, and &lt;a href="https://github.com/zhirenhun-stack/claude-code-skills" rel="noopener noreferrer"&gt;Claude Code Skills&lt;/a&gt; — battle-tested skills for developers.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>typescript</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
