From 8395f67bfdb3f1bf5b649a743d87ccea32a5ebd0 Mon Sep 17 00:00:00 2001 From: Justin Spahr-Summers Date: Thu, 21 Nov 2024 14:37:18 +0000 Subject: [PATCH] Update debugging.mdx --- docs/tools/debugging.mdx | 101 ++++++++++++++++++++++----------------- 1 file changed, 58 insertions(+), 43 deletions(-) diff --git a/docs/tools/debugging.mdx b/docs/tools/debugging.mdx index 126630b..b0f6f83 100644 --- a/docs/tools/debugging.mdx +++ b/docs/tools/debugging.mdx @@ -1,10 +1,14 @@ --- -title: Debugging MCP servers -description: A comprehensive guide to debugging Model Context Protocol (MCP) servers and integrations +title: Debugging +description: A comprehensive guide to debugging Model Context Protocol (MCP) integrations --- Effective debugging is essential when developing MCP servers or integrating them with applications. This guide covers the debugging tools and approaches available in the MCP ecosystem. + + This guide is for macOS. Guides for other platforms are coming soon. + + ## Debugging tools overview MCP provides several tools for debugging at different levels: @@ -12,9 +16,9 @@ MCP provides several tools for debugging at different levels: 1. **MCP Inspector** - Interactive debugging interface - Direct server testing - - See the [Inspector Guide](docs/tools/inspector) for details + - See the [Inspector guide](/docs/tools/inspector) for details -2. **Claude.app Developer Tools** +2. **Claude Desktop Developer Tools** - Integration testing - Log collection - Chrome DevTools integration @@ -24,7 +28,7 @@ MCP provides several tools for debugging at different levels: - Error tracking - Performance monitoring -## Debugging in Claude.app +## Debugging in Claude Desktop ### Checking server status @@ -32,20 +36,18 @@ The Claude.app interface provides basic server status information: 1. Click the 🔌 icon to view: - Connected servers - - Available prompts - - Accessible resources - - Supported tools + - Available prompts and resources -### Enabling logging +2. Click the 🔨 icon to view: + - Tools made available to the model -Get detailed logs from Claude.app: +### Viewing logs + +Review detailed MCP logs from Claude Desktop: ```bash -# Launch with logging enabled -open /Applications/Claude.app --stdout ~/Claude.log --stderr ~/Claude.log - # Follow logs in real-time -tail -n 100 -f ~/Claude.log +tail -n 20 -f ~/Logs/Claude/mcp*.log ``` The logs capture: @@ -56,7 +58,7 @@ The logs capture: ### Using Chrome DevTools -Access Chrome's developer tools for deeper inspection: +Access Chrome's developer tools inside Claude Desktop to investigate client-side errors: 1. Enable DevTools: ```bash @@ -70,9 +72,9 @@ Note: You'll see two DevTools windows: - Main content window - App title bar window +Use the Console panel to inspect client-side errors. + Use the Network panel to inspect: -- WebSocket connections -- Server-sent events - Message payloads - Connection timing @@ -80,15 +82,16 @@ Use the Network panel to inspect: ### Environment variables -MCP servers don't inherit environment variables automatically. Configure them in `claude_desktop_config.json`: +MCP servers inherit only a subset of environment variables automatically, like `USER`, `HOME`, and `PATH`. + +To override the default variables or provide your own, you can specify an `env` key in `claude_desktop_config.json`: ```json { "myserver": { "command": "mcp-server-myapp", "env": { - "HOME": "/Users/username", - "PATH": "/usr/local/bin:/usr/bin:/bin" + "MYAPP_API_KEY": "some_key", } } } @@ -117,23 +120,41 @@ Common initialization problems: When servers fail to connect: -1. Check Claude.app logs +1. Check Claude Desktop logs 2. Verify server process is running -3. Test standalone with Inspector -4. Check network connectivity -5. Verify protocol compatibility +3. Test standalone with [Inspector](/docs/tools/inspector) +4. Verify protocol compatibility ## Implementing logging ### Server-side logging -Implement custom logging in your server: +When building a server that uses the local stdio [transport](/docs/concepts/transports), all messages logged to stderr (standard error) will be captured by the client (e.g., Claude Desktop) automatically. -```typescript -server.setNotificationHandler(LoggingMessageNotificationSchema, (notification) => { - console.log(`[${notification.params.level}] ${notification.params.data}`); -}); -``` + + Local MCP servers should not log messages to stdout (standard out), as this will interfere with protocol operation. + + +For all [transports](/docs/concepts/transports), you can also provide logging to the client by sending a log message notification: + + + + ```python + server.request_context.session.send_log_message( + level="info", + data="Server started successfully", + ) + ``` + + + ```typescript + server.sendLoggingMessage({ + level: "info", + data: "Server started successfully", + }); + ``` + + Important events to log: - Initialization steps @@ -156,27 +177,22 @@ In client applications: ### Development cycle 1. Initial Development - - Use Inspector for basic testing + - Use [Inspector](/docs/tools/inspector) for basic testing - Implement core functionality - Add logging points 2. Integration Testing - - Test in Claude.app + - Test in Claude Desktop - Monitor logs - Check error handling -3. Production Deployment - - Verify logging - - Monitor performance - - Track errors - ### Testing changes To test changes efficiently: -- **Configuration changes**: Restart Claude.app +- **Configuration changes**: Restart Claude Desktop - **Server code changes**: Use Command-R to reload -- **Quick iteration**: Use Inspector during development +- **Quick iteration**: Use [Inspector](/docs/tools/inspector) during development ## Best practices @@ -220,14 +236,13 @@ When encountering issues: 1. **First Steps** - Check server logs - - Test with Inspector + - Test with [Inspector](/docs/tools/inspector) - Review configuration - Verify environment 2. **Support Channels** - - #mcp-sig channel - GitHub issues - - MCP Asana project + - GitHub discussions 3. **Providing Information** - Log excerpts @@ -239,4 +254,4 @@ When encountering issues: - Learn to use the [MCP Inspector](/docs/tools/inspector) - Review [Protocol Overview](/api-reference/protocol-overview) -- Study [Error Handling](/api-reference/error-handling) \ No newline at end of file +- Study [Error Handling](/api-reference/error-handling)