<essential_principles>
<the_5_rules> Every MCP server must follow these:
- Never Hardcode Secrets - Use
${VAR}expansion in configs, environment variables in code - Use
cwdProperty - Isolates dependencies (not--cwdin args) - Always Absolute Paths -
which uvto find paths, never relative - One Server Per Directory -
~/Developer/mcp/{server-name}/ - Use
uvfor Python - Better than pip, handles venvs automatically </the_5_rules>
<security_checklist>
- Never ask user to paste secrets into chat
- Always use environment variables for credentials
- Use ${VAR} expansion in configs
- Provide exact commands for user to run in terminal
- Verify environment variable existence without showing values
- Never hardcode API keys in code or configs </security_checklist>
<architecture_decision> Operation count determines architecture:
- 1-2 operations → Traditional pattern (flat tools)
- 3+ operations → On-demand discovery pattern (meta-tools)
Traditional: Each operation is a separate tool On-demand: 4 meta-tools (discover, get_schema, execute, continue) + operations.json </architecture_decision>
<context> MCP servers expose: - **Tools**: Functions Claude can call (API requests, file operations, calculations) - **Resources**: Data Claude can read (files, database records, API responses) - **Prompts**: Reusable prompt templates with argumentsStandard location: ~/Developer/mcp/{server-name}/
</context>
</essential_principles>
<routing> Based on user intent, route to appropriate workflow:No context provided (skill invoked without description): Use AskUserQuestion:
- header: "Mode"
- question: "What would you like to do?"
- options:
- "Create a new MCP server" → workflows/create-new-server.md
- "Update an existing MCP server" → workflows/update-existing-server.md
- "Troubleshoot a server" → workflows/troubleshoot-server.md
Context provided (user described what they want): Route directly to workflows/create-new-server.md </routing>
<workflows_index>
| Workflow | Purpose |
|---|---|
| create-new-server.md | Full 8-step workflow from intake to verification |
| update-existing-server.md | Modify or extend an existing server |
| troubleshoot-server.md | Diagnose and fix connection/runtime issues |
| </workflows_index> |
<templates_index>
| Template | Purpose |
|---|---|
| python-server.py | Traditional pattern starter for Python |
| typescript-server.ts | Traditional pattern starter for TypeScript |
| operations.json | On-demand discovery operations definition |
| </templates_index> |
<scripts_index>
| Script | Purpose |
|---|---|
| setup-python-project.sh | Initialize Python MCP project with uv |
| setup-typescript-project.sh | Initialize TypeScript MCP project with npm |
| </scripts_index> |
<references_index> Core workflow:
- creation-workflow.md - Complete step-by-step with exact commands
Architecture patterns:
- traditional-pattern.md - For 1-2 operations (flat tools)
- large-api-pattern.md - For 3+ operations (on-demand discovery)
Language-specific:
- python-implementation.md - Async patterns, type hints
- typescript-implementation.md - Type safety, SDK features
Advanced topics:
- oauth-implementation.md - OAuth with stdio isolation
- response-optimization.md - Field truncation, pagination
- tools-and-resources.md - Resources API, prompts, streaming
- testing-and-deployment.md - Unit tests, packaging, publishing
- validation-checkpoints.md - All validation checks
- adaptive-questioning-guide.md - Question templates for intake
- api-research-template.md - API research document format </references_index>
<quick_reference>
bash1# List servers 2claude mcp list 3 4# Add server (Python) 5claude mcp add --transport stdio <name> \ 6 --env API_KEY='${API_KEY}' \ 7 -- uv --directory ~/Developer/mcp/<name> run python -m src.server 8 9# Add server (TypeScript) 10claude mcp add --transport stdio <name> \ 11 --env API_KEY='${API_KEY}' \ 12 -- node ~/Developer/mcp/<name>/build/index.js 13 14# Remove server 15claude mcp remove <name> 16 17# Check logs 18tail -f ~/Library/Logs/Claude/mcp-server-<name>.log 19 20# Find paths 21which uv && which node && which python
</quick_reference>
<troubleshooting_quick>
Server not appearing: Check claude mcp list, verify config in ~/.claude/settings.json
"command not found": Use absolute paths from which uv / which node
Environment variable not found:
bash1echo $MY_API_KEY # Check if set 2echo 'export MY_API_KEY="value"' >> ~/.zshrc && source ~/.zshrc
Secrets visible in conversation: STOP. Delete conversation. Rotate credentials. Never paste secrets in chat.
Full troubleshooting: workflows/troubleshoot-server.md </troubleshooting_quick>
<success_criteria> A production-ready MCP server has:
- Valid configuration in Claude Code (
claude mcp listshows ✓ Connected) - Valid configuration in Claude Desktop config
- Environment variables set securely in ~/.zshrc
- Architecture matches operation count
- OAuth stdio isolation if applicable
- Response optimization for list/search operations
- All validation checkpoints passed
- No errors in logs </success_criteria>