djdarcy/MCP-Server-Tutorial
If you are the rightful owner of MCP-Server-Tutorial and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
This document provides a comprehensive overview of the Model Context Protocol (MCP) server, detailing its features, tools, and usage across different platforms.
hello_world
Simple greeting tool for basic functionality testing.
echo
Echoes back messages with an optional prefix for input/output testing.
get_time
Retrieves the current time in various formats for system interaction testing.
math_add
Adds two numbers together for parameter validation testing.
debug_info
Provides server debug information for introspection.
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.bat
which redirects output to a file - Use Windows Terminal or PowerShell instead of Command Prompt
- Set console code page:
chcp 65001
before running tests - Check
test_output.log
for 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.bat
to 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:
-
- 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
- - Various debugging strategies and troubleshooting
- - Complete development journey and decision rationale
- - 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! šš