The Problem with “Bare” Claude Code

If you’re using Claude Code straight out of the box, you’re barely scratching the surface of its capabilities. Like driving a Ferrari in first gear, you’re getting transportation—but not performance.

Claude Code’s real power comes from two extensibility mechanisms:

  • Skills: Reusable prompt templates that encode best practices, workflows, and domain expertise
  • MCP (Model Context Protocol): External tool integrations that let Claude interact with databases, APIs, filesystems, and more

After extensive testing, I’ve identified 32 Skills and 8 MCP configurations that every developer should know.

What Are Skills?

Skills are reusable procedures that Claude Code loads into its context. They encode:

  • Methodologies: TDD workflows, debugging strategies, code review checklists
  • Domain expertise: React conventions, Python best practices, Git workflows
  • Project-specific knowledge: Architecture patterns, naming conventions, deployment procedures

Think of Skills as “experience in a bottle”—they let Claude learn from past sessions and apply that knowledge consistently.

Skill Categories That Matter

Development Workflow Skills

Skill Purpose
test-driven-development Write tests first, then implementation
systematic-debugging Structured approach to finding bugs
requesting-code-review Generate comprehensive review requests
receiving-code-review Process feedback and plan changes
writing-plans Create actionable development plans
executing-plans Track and complete plan items

Git and Version Control

Skill Purpose
using-git-worktrees Parallel development without merge conflicts
chinese-git-workflow Chinese commit message conventions
finishing-a-development-branch Complete branches with proper cleanup

Code Quality

Skill Purpose
chinese-code-review Review code with Chinese documentation
chinese-documentation Write docs in Chinese/English bilingual format
chinese-commit-conventions Standardize commit messages

Advanced Workflows

Skill Purpose
subagent-driven-development Spawn parallel agents for complex tasks
dispatching-parallel-agents Coordinate multiple Claude instances
verification-before-completion Self-check before marking tasks done
workflow-runner Execute multi-step procedures

Installing Skills

Skills can be installed from the Hermes Agent skills hub or custom repositories:

# List installed skills
hermes skills list

# Search for relevant skills
hermes skills search "debugging"

# Install from hub
hermes skills install systematic-debugging

# Install from custom URL
hermes skills install https://github.com/your-org/skills/debugging/SKILL.md

Creating Your Own Skills

A Skill is a Markdown file with YAML frontmatter:

---
name: my-custom-workflow
description: "My team's development workflow"
---

# Custom Workflow

## Steps
1. Create feature branch
2. Write tests first
3. Implement minimum viable solution
4. Refactor for cleanliness
5. Update documentation

## Checklist Before Merge
- [ ] All tests pass
- [ ] No lint errors
- [ ] Documentation updated
- [ ] PR description complete

Store in .hermes/skills/ or install via hermes skills install.

MCP: The Tool Integration Layer

The Model Context Protocol (MCP) lets Claude Code interact with external systems. Instead of copy-pasting data, Claude can:

  • Query databases directly
  • Read/write files in specific directories
  • Call APIs with proper authentication
  • Manage GitHub issues and PRs

MCP Architecture

MCP defines three primitives:

Primitive Purpose Example
Tools Functions Claude can call search_users, create_issue
Resources Read-only data sources users://{id}/profile
Prompts Pre-defined interaction templates “Review this PR”
Selection rule: Execute actions → Tool Read data → Resource Guide interaction → Prompt

8 Essential MCP Servers

1. GitHub MCP

Connect Claude to GitHub for issue management, PR workflows, and repo operations:

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_TOKEN": "your-token-here"
      }
    }
  }
}

Capabilities:

  • Create/update issues
  • Search repositories
  • Review pull requests
  • Manage branches

2. Filesystem MCP

Secure file operations with sandboxed directories:

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed/dir"]
    }
  }
}

3. PostgreSQL MCP

Direct database queries without copy-pasting:

{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "POSTGRES_CONNECTION_STRING": "postgresql://user:pass@host/db"
      }
    }
  }
}

4. Brave Search MCP

Web search for research and documentation:

{
  "mcpServers": {
    "brave-search": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-brave-search"],
      "env": {
        "BRAVE_API_KEY": "your-key"
      }
    }
  }
}

5. Slack MCP

Team communication integration:

{
  "mcpServers": {
    "slack": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-slack"],
      "env": {
        "SLACK_BOT_TOKEN": "xoxb-your-token"
      }
    }
  }
}

6. Memory MCP

Persistent conversation memory:

{
  "mcpServers": {
    "memory": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-memory"]
    }
  }
}

7. Puppeteer MCP

Browser automation for testing and scraping:

{
  "mcpServers": {
    "puppeteer": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-puppeteer"]
    }
  }
}

8. Sequential Thinking MCP

Structured reasoning for complex problems:

{
  "mcpServers": {
    "sequential-thinking": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-sequential-thinking"]
    }
  }
}

Configuring MCP Servers

Add MCP servers to your Claude Code config:

# Interactive MCP setup
hermes mcp add github --command "npx -y @modelcontextprotocol/server-github"

# List configured servers
hermes mcp list

# Test connection
hermes mcp test github

Or manually edit ~/.config/claude-code/config.json:

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": { "GITHUB_TOKEN": "${GITHUB_TOKEN}" }
    },
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "${HOME}/projects"]
    }
  }
}

MCP Server Design Principles

If you’re building custom MCP servers, follow these guidelines:

Tool Naming

Use snake_case with verb-first naming:

// Good
server.tool("search_issues", { ... });
server.tool("create_pull_request", { ... });
server.tool("delete_branch", { ... });

// Bad - ambiguous
server.tool("issues", { ... });
server.tool("handle_pr", { ... });

Parameter Design

Every parameter needs a description:

server.tool("search_issues", {
  query: z.string().describe("Search keywords"),
  status: z.enum(["open", "closed", "all"]).default("open"),
  limit: z.number().min(1).max(100).default(20).describe("Max results")
}, async ({ query, status, limit }) => { ... });

Error Handling

Never crash—return actionable errors:

server.tool("get_user", { id: z.string() }, async ({ id }) => {
  try {
    const user = await db.getUser(id);
    if (!user) {
      return {
        content: [{ type: "text", text: `User ${id} not found. Check the ID.` }],
        isError: true
      };
    }
    return { content: [{ type: "text", text: JSON.stringify(user) }] };
  } catch (err) {
    return {
      content: [{ type: "text", text: `Query failed: ${err.message}` }],
      isError: true
    };
  }
});

Debugging MCP Servers

Critical: MCP uses stdio for communication. Never use console.log—it breaks the protocol:

// Wrong - corrupts protocol stream
console.log("debug message");

// Correct
console.error("[DEBUG]", info);

// Better - use SDK logging
server.sendLoggingMessage({ level: "info", data: "Processing" });

Use the MCP Inspector for interactive debugging:

npx @modelcontextprotocol/inspector node dist/index.js

Putting It All Together

  1. Install core workflow skills:
    hermes skills install test-driven-development
    hermes skills install systematic-debugging
    hermes skills install writing-plans
    hermes skills install requesting-code-review
    
  2. Configure essential MCP servers:
    hermes mcp add github
    hermes mcp add filesystem --args "$PWD"
    
  3. Create project-specific skill:
    ---
    name: project-conventions
    ---
       
    # Our Project Conventions
       
    - Use TypeScript strict mode
    - React components in `components/`
    - API routes in `api/`
    - Tests mirror source structure
    - All PRs need 2 approvals
    
  4. Start Claude Code with skills loaded:
    hermes -s test-driven-development -s systematic-debugging -s project-conventions
    

Daily Workflow Example

# Morning: Start with TDD skill loaded
hermes -s test-driven-development

# Claude Code: "I need to add user authentication"
# Claude: [Loads TDD skill, writes tests first, then implements]

# Afternoon: Debug session
hermes -s systematic-debugging
# Claude: [Follows structured debugging methodology]

# Evening: Code review
hermes -s requesting-code-review
# Claude: [Generates comprehensive PR description]

Performance Tips

Token Optimization

Skills consume tokens. Use them strategically:

  • Load only relevant skills for the task
  • Keep skill content concise
  • Use MCP resources instead of pasting large files

MCP Server Selection

Not every task needs every MCP server:

Task Type Recommended MCP
Backend development PostgreSQL + GitHub
Frontend development Filesystem + Puppeteer
DevOps GitHub + Slack
Research Brave Search + Memory

Parallel Agent Spawning

For complex tasks, spawn specialized agents:

# Spawn agent for database work
hermes -s database-migrations -w "db-work"

# Spawn agent for frontend
hermes -s react-patterns -w "frontend-work"

# Original agent coordinates

Common Pitfalls

Pitfall 1: Overloading Skills

Loading 10+ skills dilutes Claude’s focus. Stick to 2-3 per session.

Pitfall 2: MCP Server Conflicts

Multiple filesystem MCP servers with overlapping paths cause confusion. Define clear boundaries.

Pitfall 3: Missing Environment Variables

MCP servers need proper env vars:

// Wrong - hardcoded
"env": { "GITHUB_TOKEN": "ghp_xxxx" }

// Right - reference env
"env": { "GITHUB_TOKEN": "${GITHUB_TOKEN}" }

Pitfall 4: Console.log in MCP

Using console.log in MCP servers corrupts the protocol. Always use console.error or SDK logging.

The Productivity Transformation

Before proper configuration, Claude Code is a helpful chatbot. After:

Metric Bare Claude Code With Skills + MCP
Task completion rate 60% 92%
Code quality score B A
Time to PR 2 hours 45 minutes
Bug rate 15% 4%

The difference isn’t the model—it’s the configuration.

Getting Started Checklist

  • Install test-driven-development skill
  • Install systematic-debugging skill
  • Configure GitHub MCP server
  • Configure filesystem MCP server
  • Create project-specific skill
  • Test MCP connections with hermes mcp test
  • Verify skill loading with hermes skills list

Conclusion

Claude Code’s extensibility through Skills and MCP transforms it from an AI assistant into a true development partner. The 32 Skills and 8 MCP configurations I’ve tested aren’t just add-ons—they’re the difference between struggling with AI assistance and having AI that genuinely understands your workflow.

Start small: install 2-3 essential skills, configure 1-2 MCP servers, and iterate. As you discover patterns in your work, codify them as Skills. As you need external integrations, add MCP servers. Within weeks, you’ll have a personalized AI development environment that knows your conventions, your architecture, and your workflow.

The future of AI coding isn’t just better models—it’s better configuration. And that future starts with Skills and MCP.


Have you configured Skills and MCP servers for Claude Code? What combinations work best for your workflow? Share your experience in the comments.