MCP-Server-Tutorial
This tutorial provides a detailed, hands-on guide for learning MCP server development. It covers how MCP servers work, debugging techniques, diagnosing common issues, registering servers with Claude Desktop, and building your own MCP tools and servers. Requires Python 3.10 or higher.
GitHub Stars
0
User Rating
Not Rated
Favorites
0
Views
38
Forks
0
Issues
0
MCP Server Tutorial
A detailed, hands-on tutorial for learning MCP (Model Context Protocol) server development with working examples and debugging tools.
Project Overview
This tutorial project creates a minimal, well-documented MCP server designed to help you understand:
- How MCP servers work
- How to debug MCP servers with VS Code
- How to diagnose common MCP issues
- How to register servers with Claude Desktop
- How to build your own MCP tools and servers
Requirements: Python 3.10+ (MCP library requirement)
Quick Start
1. Setup Environment
# Run the setup script
scripts\setup.bat
# Or manually:
python -m venv venv
venv\Scripts\activate.bat
pip install mcp
2. Test the Server
# Activate virtual environment
venv\Scripts\activate.bat
# Run tests (basic test without Unicode issues)
python tests\test_simple.py
# Or run full test suite (may have Unicode display issues on Windows)
python tests\test_server.py
# Or use the safe test runner for Windows
scripts\test_safe.bat
Note for Windows users: If you see Unicode encoding errors, use scripts\test_safe.bat which redirects output to test_output.log.
3. Debug the Server
- Open this folder in VS Code
- Go to Run and Debug (Ctrl+Shift+D)
- Select "Debug MCP Server"
- Press F5 to start debugging
Key breakpoints to set:
server.py:89- Tool discoveryserver.py:110- Tool executionhandlers.py:25- Individual tool handlers
4. Register with Claude Code
- Copy the configuration from
config\claude_desktop.json - Add to your Claude Desktop configuration file
- Restart Claude Desktop
- The server should appear as "simple-mcp-debug"
Project Structure
MCPDebugTest/
├── CLAUDE.md # Detailed learning documentation
├── README.md # This file
├── setup.bat # Windows setup script
├── requirements.txt # Python dependencies
├── simple_mcp_server/ # Main MCP server code
│ ├── server.py # MCP server implementation
│ ├── tools.py # Tool definitions
│ ├── handlers.py # Tool handlers
│ └── debug_utils.py # Debugging utilities
├── tests/ # Test scripts
│ └── test_server.py # Server validation tests
├── config/ # Configuration files
│ └── claude_desktop.json # Claude Desktop config
├── .vscode/ # VS Code configuration
│ └── launch.json # Debug configurations
└── logs/ # Debug logs (created on first run)
Available Tools
The MCP server exposes these tools for testing:
1. hello_world
Simple greeting tool
- Parameters:
name(optional) - Purpose: Basic functionality test
2. echo
Echo back messages with optional prefix
- Parameters:
message(required),prefix(optional) - Purpose: Input/output testing
3. get_time
Get current time in various formats
- Parameters:
format(iso/readable/timestamp),timezone(optional) - Purpose: System interaction testing
4. math_add
Add two numbers together
- Parameters:
a(required),b(required) - Purpose: Parameter validation testing
5. debug_info
Get server debug information
- Parameters:
include_tools(boolean),include_stats(boolean) - Purpose: Server introspection
Debugging Features
Logging
- Detailed MCP protocol message logging
- Performance metrics
- Error tracking with stack traces
- Separate log files for different aspects
VS Code Integration
- Pre-configured debug launch configurations
- Breakpoint-friendly code structure
- Variable inspection capabilities
- Step-through debugging
Test Suite
- Automated tool discovery testing
- Parameter validation testing
- Error handling validation
- Handler functionality testing
Understanding MCP Protocol
Tool Discovery Flow
- Client connects to server
- Client calls
list_tools()RPC - Server returns available tools with schemas
- Client can now call individual tools
Tool Execution Flow
- Client calls
call_tool(name, arguments)RPC - Server validates arguments against schema
- Server routes to appropriate handler
- Handler processes request and returns result
- Server formats response and sends back
Key Debugging Points
- Tool Registration: Set breakpoints in
get_all_tools() - Tool Discovery: Set breakpoints in
handle_list_tools() - Tool Execution: Set breakpoints in
handle_call_tool() - Individual Handlers: Set breakpoints in specific tool handlers
Common Issues and Solutions
Issue: Tools Not Appearing in Claude Code
Debug Steps:
- Check Claude Desktop configuration
- Verify server starts without errors
- Check
list_tools()response in logs - Restart Claude Desktop
Issue: Tool Execution Fails
Debug Steps:
- Check parameter validation in logs
- Set breakpoints in tool handlers
- Verify handler return format
- Check error handling paths
Issue: Server Won't Start
Debug Steps:
- Check Python environment
- Verify MCP library installation
- Check import paths
- Review startup logs
Issue: Unicode/Emoji Characters in Windows Console
Problem: Windows Command Prompt may not display Unicode characters properly
Solutions:
- Use
scripts\test_safe.batwhich redirects output to a file - Use Windows Terminal or PowerShell instead of Command Prompt
- Set console code page:
chcp 65001before running tests - Check
test_output.logfor full test results
Issue: Test Suite Crashes with UnicodeEncodeError
Problem: Python logging fails when trying to output Unicode characters to Windows console
Solutions:
- Run tests with
scripts\test_safe.batto redirect output - Use the simplified test runner:
python tests\test_simple.py - Check log files in the
logs\directory for detailed output - The server functionality works correctly; only the console output has Unicode issues
Next Steps
Once you understand this tutorial server:
- Build Your Own Server: Use the same patterns to create your own MCP server
- Explore Advanced Features: Add more complex tools and state management
- Deploy to Production: Follow the production deployment guide in the docs
- Contribute Back: Share improvements and additional examples with the community
Learning Resources
Helpful Tutorial
This project includes a complete step-by-step tutorial covering all aspects of MCP development:
Tutorial Chapters:
Understanding MCP Architecture
- MCP protocol fundamentals and client-server communication
- Core concepts: tools, resources, prompts, and protocol flow
- How MCP fits into the AI assistant ecosystem
-
- Message exchange patterns and protocol handshake
- Tool discovery and execution lifecycle
- Error handling and response formatting
-
- Defining tools with JSON Schema validation
- Best practices for tool naming and parameter design
- Advanced tool features and capabilities
-
- Different error handling strategies
- Debugging common failure scenarios
- Protocol-compliant error responses
-
- VS Code debugging setup and breakpoint strategies
- Test suite development and automated validation
- Protocol-level debugging techniques
-
- Security considerations for MCP servers
- Authentication patterns and access control
- Best practices for production deployment
-
- Managing server state and session data
- Persistence strategies and data consistency
- Advanced state management patterns
-
- Claude Desktop configuration and setup
- Integration troubleshooting and optimization
- Cross-platform deployment considerations
-
- Production-ready server configuration
- Monitoring, logging, and maintenance
- Scaling and performance optimization
Additional Documentation
- Debugging Guide - Various debugging strategies and troubleshooting
- Project Creation Process - Complete development journey and decision rationale
- Completion Report - Project status and implementation details
External Resources
Contributing
This is a learning project. Feel free to:
- Add more test tools
- Enhance debugging capabilities
- Improve documentation
- Add more extensive tests
Happy debugging! 🐛🔍
mcp-devbrain-stdio is a library designed for handling standard input and output in Python. It allows developers to easily read and write data, making it particularly useful for automation and scripting tasks. With a focus on usability and flexibility, it can be adapted to various projects.
mcp-server-devpod is a pod environment for server development built with Python. This project aims to provide developers with tools to quickly set up server environments and conduct tests. The features are simple yet extensible, making it particularly suitable for intermediate users.