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
Recommended Setup for New Projects
- 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 - Configure essential MCP servers:
hermes mcp add github hermes mcp add filesystem --args "$PWD" - 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 - 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-developmentskill - Install
systematic-debuggingskill - 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.
