From 1123b9f0fc1315c39650a8d9694a3afda861454d Mon Sep 17 00:00:00 2001 From: sontoriyama Date: Sat, 11 Oct 2025 05:33:23 +0200 Subject: [PATCH] docs: add comprehensive MCP Quick Start guides and examples - Add MCP Quick Start Guide with 5 practical examples - Add 30+ ready-to-use MCP configuration examples - Add MCP testing and validation guide - Update tools documentation index with MCP guide links This documentation makes it easier for users to get started with Model Context Protocol servers in Qwen Code, reducing setup time from hours to minutes. Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> --- docs/mcp-example-configs.md | 534 +++++++++++++++++++++++++++++++++ docs/mcp-quick-start.md | 418 ++++++++++++++++++++++++++ docs/mcp-testing-validation.md | 382 +++++++++++++++++++++++ docs/tools/index.md | 3 + 4 files changed, 1337 insertions(+) create mode 100644 docs/mcp-example-configs.md create mode 100644 docs/mcp-quick-start.md create mode 100644 docs/mcp-testing-validation.md diff --git a/docs/mcp-example-configs.md b/docs/mcp-example-configs.md new file mode 100644 index 00000000..9cd64d99 --- /dev/null +++ b/docs/mcp-example-configs.md @@ -0,0 +1,534 @@ +# MCP Example Configurations + +Ready-to-use MCP server configurations for common scenarios. + +## ๐Ÿ“ Local Development + +### Basic Setup + +```json +{ + "mcpServers": { + "workspace": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-filesystem", "./"], + "trust": true, + "description": "Full workspace access" + } + } +} +``` + +### Multi-Directory Project + +```json +{ + "mcpServers": { + "frontend": { + "command": "npx", + "args": [ + "-y", + "@modelcontextprotocol/server-filesystem", + "./src", + "./public", + "./tests" + ], + "trust": true, + "description": "Frontend development files" + }, + "config": { + "command": "npx", + "args": [ + "-y", + "@modelcontextprotocol/server-filesystem", + "./config", + "./.env.example" + ], + "trust": true, + "includeTools": ["read_file", "list_directory"], + "description": "Configuration files (read-only)" + } + } +} +``` + +## ๐Ÿง  Memory & Context + +### Persistent Memory + +```json +{ + "mcpServers": { + "project-memory": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-memory"], + "trust": true, + "description": "Remember project context across sessions" + } + } +} +``` + +### Combined with Filesystem + +```json +{ + "mcpServers": { + "files": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-filesystem", "./"], + "trust": true + }, + "memory": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-memory"], + "trust": true + } + } +} +``` + +## ๐ŸŒ Remote Servers (HTTP/SSE) + +### HTTP MCP Server + +```json +{ + "mcpServers": { + "remote-api": { + "httpUrl": "https://api.example.com/mcp", + "headers": { + "Authorization": "Bearer ${API_TOKEN}", + "Content-Type": "application/json" + }, + "timeout": 30000, + "description": "Remote MCP API" + } + } +} +``` + +### SSE Server with OAuth + +```json +{ + "mcpServers": { + "sse-service": { + "url": "https://mcp.example.com/sse", + "oauth": { + "enabled": true, + "scopes": ["read", "write"] + }, + "timeout": 60000, + "description": "SSE server with OAuth" + } + } +} +``` + +## ๐Ÿ Python MCP Servers + +### Simple Python Server + +```json +{ + "mcpServers": { + "python-tools": { + "command": "python", + "args": ["-m", "my_mcp_server"], + "env": { + "PYTHONPATH": "${PWD}", + "DEBUG": "false" + }, + "description": "Custom Python MCP tools" + } + } +} +``` + +### Python with Virtual Environment + +```json +{ + "mcpServers": { + "python-venv": { + "command": "./venv/bin/python", + "args": ["-m", "mcp_server"], + "cwd": "./", + "env": { + "VIRTUAL_ENV": "${PWD}/venv" + }, + "description": "Python server in virtual environment" + } + } +} +``` + +## ๐Ÿณ Docker Containers + +### Basic Docker Server + +```json +{ + "mcpServers": { + "docker-mcp": { + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "my-mcp-server:latest" + ], + "timeout": 45000, + "description": "MCP server in Docker" + } + } +} +``` + +### Docker with Volume Mounts + +```json +{ + "mcpServers": { + "docker-workspace": { + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "-v", + "${PWD}:/workspace", + "-w", + "/workspace", + "-e", + "API_KEY", + "mcp-tools:latest" + ], + "env": { + "API_KEY": "${MY_API_KEY}" + }, + "description": "Docker MCP with workspace access" + } + } +} +``` + +## ๐Ÿ›ก๏ธ Security-Focused Configs + +### Read-Only Filesystem + +```json +{ + "mcpServers": { + "readonly-docs": { + "command": "npx", + "args": [ + "-y", + "@modelcontextprotocol/server-filesystem", + "./docs", + "./README.md" + ], + "includeTools": ["read_file", "list_directory", "search_files"], + "excludeTools": [ + "write_file", + "create_directory", + "move_file", + "delete_file" + ], + "trust": true, + "description": "Read-only documentation access" + } + } +} +``` + +### Untrusted External Server + +```json +{ + "mcpServers": { + "external-api": { + "httpUrl": "https://external-mcp.example.com/api", + "trust": false, + "timeout": 15000, + "includeTools": ["search", "analyze"], + "description": "External API (requires confirmation)" + } + } +} +``` + +## ๐Ÿ“Š Database Access + +### PostgreSQL MCP Server + +```json +{ + "mcpServers": { + "postgres": { + "command": "npx", + "args": [ + "-y", + "@modelcontextprotocol/server-postgres", + "${DATABASE_URL}" + ], + "env": { + "DATABASE_URL": "$POSTGRES_CONNECTION_STRING" + }, + "timeout": 30000, + "trust": false, + "description": "PostgreSQL database access" + } + } +} +``` + +## ๐Ÿงช Testing & Development + +### Test Environment + +```json +{ + "mcpServers": { + "test-files": { + "command": "npx", + "args": [ + "-y", + "@modelcontextprotocol/server-filesystem", + "./tests", + "./fixtures" + ], + "trust": true, + "description": "Test files and fixtures" + }, + "test-memory": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-memory"], + "trust": true, + "description": "Test session memory" + } + } +} +``` + +### Debug Configuration + +```json +{ + "mcpServers": { + "debug-server": { + "command": "node", + "args": ["--inspect", "mcp-server.js"], + "env": { + "DEBUG": "*", + "LOG_LEVEL": "verbose" + }, + "timeout": 60000, + "description": "MCP server with debugging enabled" + } + } +} +``` + +## ๐Ÿ”„ CI/CD Integration + +### GitHub Actions Environment + +```json +{ + "mcpServers": { + "ci-workspace": { + "command": "npx", + "args": [ + "-y", + "@modelcontextprotocol/server-filesystem", + "${GITHUB_WORKSPACE}" + ], + "env": { + "GITHUB_TOKEN": "$GITHUB_TOKEN", + "CI": "true" + }, + "trust": true, + "description": "CI/CD workspace access" + } + } +} +``` + +## ๐ŸŒŸ Advanced Patterns + +### Multiple Servers Same Type + +```json +{ + "mcpServers": { + "project-a": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-filesystem", "../project-a"], + "description": "Project A files" + }, + "project-b": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-filesystem", "../project-b"], + "description": "Project B files" + }, + "shared-memory": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-memory"], + "description": "Shared knowledge across projects" + } + } +} +``` + +### Conditional Server Selection + +User-level config (`~/.qwen/settings.json`): +```json +{ + "mcpServers": { + "global-memory": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-memory"], + "trust": true, + "description": "Global memory across all projects" + } + } +} +``` + +Project-level config (`.qwen/settings.json`): +```json +{ + "mcpServers": { + "project-files": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-filesystem", "./"], + "trust": true, + "description": "Project-specific files" + } + } +} +``` + +## ๐Ÿ“ Configuration Validation + +### Check Your Config + +```bash +# List configured servers +qwen mcp list + +# Show server details and schemas +qwen mcp list --schema + +# Test connection +qwen mcp list --descriptions +``` + +### Common Mistakes + +โŒ **Wrong:** +```json +{ + "mcpServers": { + "server": { + "command": "mcp-server", // Not in PATH + "args": ["./"] + } + } +} +``` + +โœ… **Correct:** +```json +{ + "mcpServers": { + "server": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-filesystem", "./"], + "description": "Uses npx to ensure server is available" + } + } +} +``` + +## ๐ŸŽฏ Best Practices + +1. **Use descriptive names** - Make server purposes clear +2. **Set appropriate timeouts** - Match your server's response time +3. **Trust local servers** - Skip confirmation for your own tools +4. **Filter tools** - Use `includeTools`/`excludeTools` for security +5. **Document configs** - Add descriptions for team members +6. **Environment variables** - Keep secrets out of configs +7. **Test independently** - Verify servers work before configuring + +## ๐Ÿ”— Quick Copy-Paste Configs + +### Starter Pack + +```json +{ + "mcpServers": { + "files": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-filesystem", "./"], + "trust": true + }, + "memory": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-memory"], + "trust": true + } + } +} +``` + +### Documentation Project + +```json +{ + "mcpServers": { + "docs": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-filesystem", "./docs"], + "includeTools": ["read_file", "list_directory"], + "trust": true + } + } +} +``` + +### Full-Stack Development + +```json +{ + "mcpServers": { + "frontend": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-filesystem", "./frontend"], + "trust": true + }, + "backend": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-filesystem", "./backend"], + "trust": true + }, + "shared": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-filesystem", "./shared"], + "trust": true + }, + "memory": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-memory"], + "trust": true + } + } +} +``` + +--- + +**Need help?** Check `qwen mcp --help` or refer to the [complete MCP documentation](./tools/mcp-server.md). diff --git a/docs/mcp-quick-start.md b/docs/mcp-quick-start.md new file mode 100644 index 00000000..2256ddaf --- /dev/null +++ b/docs/mcp-quick-start.md @@ -0,0 +1,418 @@ +# MCP Quick Start Guide - Practical Examples + +This guide provides real-world examples to get you started with Model Context Protocol (MCP) servers in Qwen Code. + +## ๐Ÿš€ Getting Started in 5 Minutes + +### Step 1: Install MCP Servers + +Install official MCP servers from Anthropic: + +```bash +# Filesystem access +npm install -g @modelcontextprotocol/server-filesystem + +# Memory & Knowledge Graph +npm install -g @modelcontextprotocol/server-memory + +# Sequential thinking +npm install -g @modelcontextprotocol/server-sequential-thinking +``` + +### Step 2: Configure Your First MCP Server + +Create or edit `.qwen/settings.json` in your project: + +```json +{ + "mcpServers": { + "filesystem": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-filesystem", "./"], + "description": "Access project files" + } + } +} +``` + +### Step 3: Verify Connection + +```bash +qwen mcp list +``` + +You should see: +``` +โœ“ filesystem: npx -y @modelcontextprotocol/server-filesystem ./ (stdio) - Connected +``` + +## ๐Ÿ“š Practical Examples + +### Example 1: Local Development Assistant + +**Use Case:** Work on a Node.js project with file access and memory. + +**Configuration (`.qwen/settings.json`):** + +```json +{ + "mcpServers": { + "project-files": { + "command": "npx", + "args": [ + "-y", + "@modelcontextprotocol/server-filesystem", + "./src", + "./tests", + "./docs" + ], + "description": "Access source code, tests, and documentation", + "trust": true + }, + "project-memory": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-memory"], + "description": "Remember project decisions and context", + "trust": true + } + } +} +``` + +**Usage:** +```bash +qwen + +> Remember: This project uses React 18 with TypeScript and follows Airbnb style guide +> List all files in the src directory +> Read src/App.tsx and suggest improvements +``` + +### Example 2: Multi-Repository Development + +**Use Case:** Working across multiple codebases simultaneously. + +**Configuration:** + +```json +{ + "mcpServers": { + "frontend": { + "command": "npx", + "args": [ + "-y", + "@modelcontextprotocol/server-filesystem", + "../frontend-app" + ], + "description": "Frontend repository access" + }, + "backend": { + "command": "npx", + "args": [ + "-y", + "@modelcontextprotocol/server-filesystem", + "../backend-api" + ], + "description": "Backend repository access" + }, + "shared-memory": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-memory"], + "description": "Shared knowledge across repositories" + } + } +} +``` + +### Example 3: Documentation-Only Access + +**Use Case:** Safe access to documentation without risking code changes. + +**Configuration:** + +```json +{ + "mcpServers": { + "docs": { + "command": "npx", + "args": [ + "-y", + "@modelcontextprotocol/server-filesystem", + "./docs", + "./README.md" + ], + "description": "Read-only documentation access", + "trust": true, + "includeTools": ["read_file", "list_directory"] + } + } +} +``` + +### Example 4: Custom Python MCP Server + +**Use Case:** Integrate custom Python tools via MCP. + +**Server File (`mcp_server.py`):** + +```python +#!/usr/bin/env python3 +import sys +from mcp.server.stdio import stdio_server +from mcp.server import Server +from mcp.types import Tool, TextContent + +server = Server("custom-tools") + +@server.list_tools() +async def list_tools() -> list[Tool]: + return [ + Tool( + name="analyze_python_code", + description="Static analysis of Python code", + inputSchema={ + "type": "object", + "properties": { + "file_path": {"type": "string"} + }, + "required": ["file_path"] + } + ) + ] + +@server.call_tool() +async def call_tool(name: str, arguments: dict) -> list[TextContent]: + if name == "analyze_python_code": + # Your custom logic here + return [TextContent(type="text", text=f"Analysis of {arguments['file_path']}")] + +async def main(): + async with stdio_server() as (read_stream, write_stream): + await server.run(read_stream, write_stream, server.create_initialization_options()) + +if __name__ == "__main__": + import asyncio + asyncio.run(main()) +``` + +**Configuration:** + +```json +{ + "mcpServers": { + "python-tools": { + "command": "python", + "args": ["mcp_server.py"], + "env": { + "PYTHONPATH": "${PWD}" + }, + "description": "Custom Python analysis tools" + } + } +} +``` + +### Example 5: Docker-Based MCP Server + +**Use Case:** Run MCP servers in isolated containers. + +**Configuration:** + +```json +{ + "mcpServers": { + "containerized-tools": { + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "-v", + "${PWD}:/workspace", + "-w", + "/workspace", + "my-mcp-server:latest" + ], + "description": "MCP tools running in Docker" + } + } +} +``` + +## ๐Ÿ”ง Configuration Tips + +### Environment Variables + +Use environment variables for sensitive data: + +```json +{ + "mcpServers": { + "api-server": { + "command": "node", + "args": ["api-server.js"], + "env": { + "API_KEY": "${MY_API_KEY}", + "DATABASE_URL": "$DB_CONNECTION" + } + } + } +} +``` + +### Trust Settings + +Trust servers you control to skip confirmation dialogs: + +```json +{ + "mcpServers": { + "trusted-server": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-filesystem", "./"], + "trust": true + } + } +} +``` + +### Tool Filtering + +Limit which tools are available: + +```json +{ + "mcpServers": { + "filesystem": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-filesystem", "./"], + "includeTools": ["read_file", "list_directory"], + "excludeTools": ["write_file", "move_file"] + } + } +} +``` + +## ๐ŸŽฏ Common Use Cases + +### Code Review Assistant + +```json +{ + "mcpServers": { + "codebase": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-filesystem", "./"], + "description": "Full codebase access for reviews" + }, + "review-memory": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-memory"], + "description": "Remember review comments and patterns" + } + } +} +``` + +**Usage:** +```bash +qwen + +> Review the changes in src/components/ +> Remember: We follow the single responsibility principle +> Check if all new components have tests +``` + +### Documentation Generator + +```json +{ + "mcpServers": { + "source": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-filesystem", "./src"], + "includeTools": ["read_file", "list_directory"] + }, + "docs-writer": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-filesystem", "./docs"], + "includeTools": ["write_file", "create_directory"] + } + } +} +``` + +### Learning Assistant + +```json +{ + "mcpServers": { + "tutorials": { + "command": "npx", + "args": [ + "-y", + "@modelcontextprotocol/server-filesystem", + "./tutorials", + "./examples" + ], + "trust": true + }, + "learning-progress": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-memory"], + "description": "Track learning progress and concepts" + } + } +} +``` + +## ๐Ÿ› ๏ธ Troubleshooting + +### Server Won't Connect + +1. **Check the command is accessible:** + ```bash + npx -y @modelcontextprotocol/server-filesystem ./ + ``` + +2. **Verify directory permissions:** + ```bash + ls -la ./ + ``` + +3. **Check logs:** + ```bash + qwen --debug + ``` + +### No Tools Discovered + +Ensure the server actually provides tools: +```bash +qwen mcp list --schema +``` + +### Tools Not Executing + +- Check parameter schemas match +- Verify timeout settings (increase if needed) +- Test the server independently first + +## ๐Ÿ“– Further Reading + +- [MCP Server Documentation](./tools/mcp-server.md) - Complete reference +- [Official MCP Specification](https://modelcontextprotocol.io/) - Protocol details +- [MCP Server Examples](https://github.com/modelcontextprotocol/servers) - Community servers + +## ๐ŸŽ“ Next Steps + +1. โœ… Configure your first MCP server +2. โœ… Verify connection with `qwen mcp list` +3. โœ… Try basic file operations +4. โœ… Add memory for persistent context +5. โœ… Explore community MCP servers +6. โœ… Build your own custom server + +--- + +**Pro Tip:** Start with trusted local servers (`trust: true`) for faster iteration, then add confirmation for production use. diff --git a/docs/mcp-testing-validation.md b/docs/mcp-testing-validation.md new file mode 100644 index 00000000..32b61420 --- /dev/null +++ b/docs/mcp-testing-validation.md @@ -0,0 +1,382 @@ +# MCP Testing & Validation Guide + +This guide helps you test and validate your MCP server configurations. + +## โœ… Quick Validation Checklist + +### 1. Check MCP Servers Are Configured + +```bash +qwen mcp list +``` + +**Expected output:** +``` +Configured MCP servers: + +โœ“ filesystem: npx -y @modelcontextprotocol/server-filesystem ./ (stdio) - Connected +โœ“ memory: npx -y @modelcontextprotocol/server-memory (stdio) - Connected +``` + +**Status indicators:** +- โœ“ (green) - Connected successfully +- โœ— (red) - Connection failed or not connected + +### 2. Verify Server Is Installed + +Test the server command directly: + +```bash +# Filesystem server +npx -y @modelcontextprotocol/server-filesystem --help + +# Memory server +npx -y @modelcontextprotocol/server-memory --help + +# Custom server +python mcp_server.py --help +``` + +### 3. Check Configuration File Syntax + +Validate your JSON configuration: + +```bash +# Linux/macOS +cat .qwen/settings.json | jq . + +# Windows PowerShell +Get-Content .qwen/settings.json | ConvertFrom-Json | ConvertTo-Json +``` + +### 4. Test Within Qwen Code Session + +Start an interactive session and check MCP status: + +```bash +qwen + +# Inside the session: +/mcp # Show all MCP servers and tools +/mcp desc # Show tool descriptions +/mcp schema # Show tool parameter schemas +``` + +## ๐Ÿงช Test Cases + +### Test Case 1: Filesystem Server + +**Configuration:** +```json +{ + "mcpServers": { + "test-fs": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-filesystem", "./"], + "trust": true + } + } +} +``` + +**Validation:** +1. List files: Start `qwen` and ask "List all files in this directory" +2. Read file: "Read the README.md file" +3. Verify output contains actual file contents + +**Expected Tools:** +- `read_file` - Read file contents +- `write_file` - Write to files +- `list_directory` - List directory contents +- `create_directory` - Create directories +- `move_file` - Move/rename files +- `search_files` - Search for files +- `get_file_info` - Get file metadata + +### Test Case 2: Memory Server + +**Configuration:** +```json +{ + "mcpServers": { + "test-memory": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-memory"], + "trust": true + } + } +} +``` + +**Validation:** +1. Store information: "Remember that this project uses React 18" +2. Query: "What JavaScript framework does this project use?" +3. Verify it recalls the information from step 1 + +**Expected Tools:** +- `create_entities` - Create knowledge entities +- `create_relations` - Create relationships between entities +- `add_observations` - Add observations to entities +- `delete_entities` - Remove entities +- `delete_observations` - Remove observations +- `delete_relations` - Remove relationships +- `read_graph` - Read entire knowledge graph +- `search_nodes` - Search for specific nodes +- `open_nodes` - Open specific nodes by name + +### Test Case 3: Multiple Servers + +**Configuration:** +```json +{ + "mcpServers": { + "files": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-filesystem", "./"], + "trust": true + }, + "memory": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-memory"], + "trust": true + } + } +} +``` + +**Validation:** +1. Check both servers are connected: `qwen mcp list` +2. Use filesystem tool: "List all JavaScript files" +3. Use memory tool: "Remember that we prefer TypeScript" +4. Verify both tools work simultaneously + +### Test Case 4: Tool Filtering + +**Configuration:** +```json +{ + "mcpServers": { + "readonly-fs": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-filesystem", "./"], + "includeTools": ["read_file", "list_directory"], + "trust": true + } + } +} +``` + +**Validation:** +1. Start qwen session +2. Run `/mcp desc` to list available tools +3. Verify only `read_file` and `list_directory` are present +4. Verify `write_file`, `create_directory`, etc. are NOT available + +### Test Case 5: Untrusted Server Confirmation + +**Configuration:** +```json +{ + "mcpServers": { + "untrusted": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-filesystem", "./"], + "trust": false + } + } +} +``` + +**Validation:** +1. Ask qwen to read a file +2. Confirmation dialog should appear before execution +3. Options should include: + - Proceed once + - Always allow this tool + - Always allow this server + - Cancel + +## ๐Ÿ” Debugging Failed Connections + +### Issue: Server Shows "Disconnected" + +**Diagnostic steps:** + +1. **Test command manually:** + ```bash + npx -y @modelcontextprotocol/server-filesystem ./ + ``` + +2. **Check for errors:** + ```bash + qwen --debug + ``` + +3. **Verify paths are correct:** + ```bash + # Check if directory exists + ls ./ + + # Check if command is in PATH + which npx # Linux/macOS + where npx # Windows + ``` + +4. **Check permissions:** + ```bash + # Verify read/execute permissions + ls -la ./ + ``` + +5. **Review environment variables:** + ```bash + echo $PATH + echo $PYTHONPATH # For Python servers + ``` + +### Issue: No Tools Discovered + +**Diagnostic steps:** + +1. **Verify server implements MCP protocol:** + ```bash + # For stdio servers, test input/output manually + echo '{"jsonrpc": "2.0", "method": "initialize", "id": 1}' | npx -y @modelcontextprotocol/server-filesystem ./ + ``` + +2. **Check server logs:** + ```bash + # Some servers log to stderr + qwen --debug 2>&1 | grep MCP + ``` + +3. **Verify server version:** + ```bash + npm list -g @modelcontextprotocol/server-filesystem + ``` + +### Issue: Tools Fail to Execute + +**Diagnostic steps:** + +1. **Check parameter format:** + - Ensure parameters match the expected schema + - Verify JSON encoding is correct + +2. **Increase timeout:** + ```json + { + "mcpServers": { + "slow-server": { + "command": "...", + "timeout": 60000 + } + } + } + ``` + +3. **Check server implementation:** + - Verify the server actually implements the tool + - Test the tool independently if possible + +## ๐Ÿ“Š Validation Results + +### Expected Server Connection Times + +| Server Type | Typical Connection Time | Timeout Recommendation | +|-------------|------------------------|------------------------| +| Filesystem | < 1 second | 10-30 seconds | +| Memory | < 1 second | 10-30 seconds | +| HTTP/SSE | 1-3 seconds | 30-60 seconds | +| Custom Python | 2-5 seconds | 30-60 seconds | +| Docker | 5-10 seconds | 60-120 seconds | + +### Tool Execution Times + +| Tool Type | Typical Duration | Timeout Recommendation | +|-------------------|-----------------|------------------------| +| Read file | < 100ms | 5-10 seconds | +| List directory | < 500ms | 10-15 seconds | +| Search files | 1-5 seconds | 30-60 seconds | +| Memory operations | < 1 second | 10-30 seconds | +| API calls | 1-10 seconds | 30-120 seconds | + +## ๐ŸŽฏ Success Criteria + +Your MCP configuration is working correctly if: + +โœ… `qwen mcp list` shows all servers as "Connected" +โœ… `/mcp` command in qwen session displays tools +โœ… Tool executions complete without errors +โœ… Confirmation dialogs appear for untrusted servers (if `trust: false`) +โœ… Tool filtering works as expected (include/exclude) +โœ… Environment variables are properly substituted +โœ… Timeouts are appropriate for your server's response time + +## ๐Ÿš€ Performance Tips + +1. **Use `trust: true` for local servers** to skip confirmation dialogs +2. **Set appropriate timeouts** - too low causes failures, too high slows down errors +3. **Filter tools** - Only enable tools you actually need +4. **Test servers independently** before configuring in qwen +5. **Use `--debug` flag** during initial setup +6. **Monitor resource usage** for long-running or resource-intensive servers + +## ๐Ÿ“ Validation Script Example + +Create a test script to automate validation: + +```bash +#!/bin/bash +# validate-mcp.sh + +echo "Testing MCP configuration..." + +# Test 1: Check config file exists +if [ ! -f .qwen/settings.json ]; then + echo "โŒ Missing .qwen/settings.json" + exit 1 +fi +echo "โœ… Config file exists" + +# Test 2: Validate JSON syntax +if ! cat .qwen/settings.json | jq . > /dev/null 2>&1; then + echo "โŒ Invalid JSON in settings.json" + exit 1 +fi +echo "โœ… Valid JSON syntax" + +# Test 3: Check servers are configured +SERVER_COUNT=$(cat .qwen/settings.json | jq '.mcpServers | length') +if [ "$SERVER_COUNT" -eq 0 ]; then + echo "โŒ No MCP servers configured" + exit 1 +fi +echo "โœ… $SERVER_COUNT MCP server(s) configured" + +# Test 4: Check connection status +qwen mcp list | grep -q "Connected" +if [ $? -eq 0 ]; then + echo "โœ… At least one server is connected" +else + echo "โŒ No servers connected" + exit 1 +fi + +echo "" +echo "โœ… All validation checks passed!" +``` + +## ๐Ÿ“š Next Steps + +After validation: + +1. **Start using MCP tools** in your workflow +2. **Document your custom configurations** for team members +3. **Share your successful configs** with the community +4. **Monitor performance** and adjust timeouts as needed +5. **Explore more MCP servers** from the community + +--- + +**Having issues?** Check the [MCP troubleshooting guide](./tools/mcp-server.md#troubleshooting) or open an issue on GitHub. diff --git a/docs/tools/index.md b/docs/tools/index.md index 6c3cec3d..73d480df 100644 --- a/docs/tools/index.md +++ b/docs/tools/index.md @@ -54,4 +54,7 @@ Qwen Code's built-in tools can be broadly categorized as follows: Additionally, these tools incorporate: - **[MCP servers](./mcp-server.md)**: MCP servers act as a bridge between the model and your local environment or other services like APIs. + - **[MCP Quick Start Guide](../mcp-quick-start.md)**: Get started with MCP in 5 minutes with practical examples + - **[MCP Example Configurations](../mcp-example-configs.md)**: Ready-to-use configurations for common scenarios + - **[MCP Testing & Validation](../mcp-testing-validation.md)**: Test and validate your MCP server setups - **[Sandboxing](../sandbox.md)**: Sandboxing isolates the model and its changes from your environment to reduce potential risk.