Files
FoundryVTT/MCP_SERVERS_GUIDE.md
2025-11-06 14:04:48 +01:00

1828 lines
37 KiB
Markdown

# MCP Servers - Complete Guide
> **Comprehensive documentation for all Model Context Protocol (MCP) servers used in Claude Code**
> **Version**: 1.0.0 | **Last Updated**: 2025-10-20
---
## Table of Contents
1. [Overview](#overview)
2. [Quick Start](#quick-start)
3. [Installation & Setup](#installation--setup)
4. [Available MCP Servers](#available-mcp-servers)
5. [Usage Guide](#usage-guide)
6. [Configuration](#configuration)
7. [Best Practices](#best-practices)
8. [Troubleshooting](#troubleshooting)
9. [Advanced Topics](#advanced-topics)
---
## Overview
### What Are MCP Servers?
**Model Context Protocol (MCP)** servers extend Claude Code's capabilities by providing:
- External integrations (databases, browsers, desktop automation)
- Enhanced code navigation and analysis
- Persistent and temporary memory systems
- Real-time documentation access
- Complex reasoning capabilities
### MCP Servers in This Project
This project includes **8 fully configured MCP servers**:
| # | Server | Type | Purpose |
|---|--------|------|---------|
| 1 | **Serena** | Python (uvx) | Code navigation + persistent memory |
| 2 | **Sequential Thinking** | Node.js (npx) | Complex reasoning engine |
| 3 | **Database Server** | Node.js (npx) | SQL Server integration |
| 4 | **Context7** | Node.js (npx) | Library documentation |
| 5 | **Memory** | Node.js (npx) | Knowledge graph (session) |
| 6 | **Fetch** | Python (uvx) | Web content retrieval |
| 7 | **Windows MCP** | Python (uv) | Desktop automation |
| 8 | **Playwright** | Node.js (npx) | Browser automation |
### MCP vs Core Tools
**Core Tools** (built-in):
- Read, Write, Edit - File operations
- Glob, Grep - File search
- Bash - Shell commands
- WebSearch, WebFetch - Web access
**MCP Servers** (extended):
- Semantic code navigation
- Persistent knowledge storage
- Complex reasoning
- Browser/desktop automation
- Database access
---
## Quick Start
### One-Command Setup
**Windows (PowerShell)**:
```powershell
.\.claude\tools\setup-all-mcp-servers.ps1
```
**Linux/Mac (Bash)**:
```bash
./.claude/tools/setup-all-mcp-servers.sh
```
### Verify Installation
```bash
# Test all servers
.\.claude\tools\test-mcp-servers.ps1
# Or check individual servers
claude mcp list
claude mcp test serena
```
### Quick Test
```bash
# In Claude Code
> "Use Serena to find the UserService class"
> "Create a knowledge graph of the authentication flow"
> "Get the latest React documentation"
```
---
## Installation & Setup
### Prerequisites
The setup script checks for and guides installation of:
1. **Node.js** (v18+) - For npm-based servers
- Download: https://nodejs.org/
2. **Python 3** (3.8+) - For Python-based servers
- Download: https://www.python.org/
3. **uv** - Python package manager
- Auto-installed by setup script
- Manual: `curl -LsSf https://astral.sh/uv/install.sh | sh`
4. **Git** (optional, recommended)
- For cloning repositories
- Download: https://git-scm.com/
### Automated Setup Process
The setup script:
1. ✅ Checks prerequisites
2. ✅ Installs all 8 MCP servers
3. ✅ Creates required directories
4. ✅ Validates configuration
5. ✅ Provides next steps
**Time Required**: ~5-10 minutes
### Manual Installation
If automated setup fails, install servers individually:
#### Serena
```bash
uvx --from "git+https://github.com/oraios/serena" serena --help
```
#### Sequential Thinking
```bash
npx -y @modelcontextprotocol/server-sequential-thinking
```
#### Database Server
```bash
npx -y @executeautomation/database-server
```
#### Context7
```bash
npx -y @upstash/context7-mcp
```
#### Memory
```bash
npx -y @modelcontextprotocol/server-memory
```
#### Fetch
```bash
uvx mcp-server-fetch
```
#### Windows MCP
```bash
git clone https://github.com/lekt9/windows-mcp.git .windows-mcp
cd .windows-mcp
uv sync
```
#### Playwright
```bash
npx -y @playwright/mcp
npx playwright install # Install browsers
```
### Post-Setup Configuration
After running setup, configure secrets:
#### 1. Enable MCP Servers
Already configured in `.claude/settings.json`:
```json
{
"enableAllProjectMcpServers": true
}
```
#### 2. Context7 API Key (Optional)
Edit `.mcp.json`:
```json
"context7": {
"env": {
"CONTEXT7_API_KEY": "your-api-key-here"
}
}
```
Get key at: https://context7.com/
#### 3. Database Connection (Optional)
Edit `.mcp.json`:
```json
"database-server": {
"args": [
"--server", "your-server",
"--database", "your-database",
"--user", "your-username",
"--password", "your-password",
"--trustServerCertificate"
]
}
```
#### 4. Restart Claude Code
Close and reopen Claude Code to load servers.
---
## Available MCP Servers
### 1. Serena MCP
**Purpose**: Semantic code analysis and persistent memory
**Type**: Python (uvx)
**Repository**: https://github.com/oraios/serena
**Configuration**:
```json
{
"command": "uvx",
"args": [
"--from", "git+https://github.com/oraios/serena",
"serena", "start-mcp-server",
"--context", "ide-assistant",
"--project", "Claude Code Setup"
]
}
```
#### Code Navigation Tools
**`find_symbol`** - Locate code symbols by name/pattern
```bash
# Find a class
find_symbol("UserService")
# Find with pattern
find_symbol("*Service")
# Find with depth (include methods)
find_symbol("UserService", depth=1, include_body=true)
```
**`find_referencing_symbols`** - Find all references to a symbol
```bash
# Find who uses this function
find_referencing_symbols("authenticate", "src/auth/service.ts")
```
**`get_symbols_overview`** - Get file structure
```bash
# Get high-level view of file
get_symbols_overview("src/services/user.ts")
```
**`search_for_pattern`** - Search for code patterns
```bash
# Find pattern across codebase
search_for_pattern("async.*await", paths_include_glob="**/*.ts")
```
**`rename_symbol`** - Safely rename across codebase
```bash
# Rename everywhere
rename_symbol("oldName", "src/file.ts", "newName")
```
**`replace_symbol_body`** - Replace function/class body
```bash
# Replace entire method
replace_symbol_body("methodName", "src/file.ts", new_body)
```
**`insert_after_symbol`** / **`insert_before_symbol`** - Add code
```bash
# Add new method after existing one
insert_after_symbol("existingMethod", "src/file.ts", new_method_code)
```
#### Persistent Memory Tools
**Storage**: `.serena/memories/` (survives across sessions)
**`write_memory`** - Store persistent project information
```bash
write_memory("adr-001-architecture", "Decision: Use microservices...")
```
**`read_memory`** - Recall stored information
```bash
read_memory("adr-001-architecture")
```
**`list_memories`** - Browse all memories
```bash
list_memories()
```
**`delete_memory`** - Remove outdated information
```bash
delete_memory("outdated-info")
```
#### Use Serena Memory For
**Long-term project knowledge**:
- Architectural Decision Records (ADRs)
- Code review findings and summaries
- Lessons learned from implementations
- Project-specific patterns discovered
- Technical debt registry
- Security audit results
- Performance optimization notes
- Migration documentation
- Incident post-mortems
**Do NOT use for**:
- Temporary analysis state
- Current conversation context
- Session-specific tracking
#### Memory File Naming Conventions
**ADRs (Architectural Decision Records)**:
```
adr-001-database-choice-postgresql
adr-002-authentication-jwt-strategy
adr-003-api-versioning-approach
```
**Code Reviews**:
```
code-review-2024-10-15-payment-service
code-review-2025-10-20-auth-refactor
```
**Lessons Learned**:
```
lesson-async-error-handling
lesson-database-connection-pooling
lesson-api-rate-limiting
```
**Patterns**:
```
pattern-repository-implementation
pattern-error-response-format
pattern-logging-strategy
```
**Technical Debt**:
```
debt-legacy-api-authentication
debt-payment-service-refactor-needed
```
**Security**:
```
security-audit-2024-10-full
security-vulnerability-xss-fixed
security-pattern-input-validation
```
**Performance**:
```
performance-optimization-query-caching
performance-analysis-api-endpoints
```
---
### 2. Sequential Thinking MCP
**Purpose**: Chain-of-thought reasoning for complex problems
**Type**: Node.js (npx)
**Package**: `@modelcontextprotocol/server-sequential-thinking`
**Configuration**:
```json
{
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-sequential-thinking"]
}
```
#### Capabilities
**`sequentialthinking`** - Multi-step reasoning tool
**Features**:
- Dynamic thought count adjustment
- Revision of previous thoughts
- Branch exploration
- Hypothesis generation and verification
- Flexible problem-solving
**Parameters**:
- `thought` - Current thinking step
- `thought_number` - Current step number
- `total_thoughts` - Estimated total (adjustable)
- `next_thought_needed` - Continue or stop
- `is_revision` - Is this revising previous thought
- `branch_id` - Identifier for exploration branches
#### Use Cases
**Best for**:
- Complex architectural decisions
- Multi-step debugging
- Design pattern selection
- Security threat analysis
- Algorithm optimization
- System design problems
**Example Flow**:
1. Start with initial estimate of needed thoughts
2. Work through problem step-by-step
3. Revise previous thoughts if needed
4. Adjust total thoughts as understanding deepens
5. Generate hypothesis
6. Verify hypothesis
7. Provide final answer
---
### 3. Database Server MCP
**Purpose**: SQL Server database interaction
**Type**: Node.js (npx)
**Package**: `@executeautomation/database-server`
**Configuration**:
```json
{
"command": "npx",
"args": [
"-y", "@executeautomation/database-server",
"--sqlserver",
"--server", "your-server",
"--database", "your-database",
"--user", "your-username",
"--password", "your-password",
"--trustServerCertificate"
]
}
```
#### Available Tools
**`read_query`** - Execute SELECT queries
```sql
SELECT * FROM Users WHERE active = 1
```
**`write_query`** - Execute INSERT, UPDATE, DELETE
```sql
UPDATE Users SET last_login = GETDATE() WHERE id = 123
```
**`create_table`** - Create new tables
```sql
CREATE TABLE Products (
id INT PRIMARY KEY,
name VARCHAR(255),
price DECIMAL(10,2)
)
```
**`alter_table`** - Modify table schema
```sql
ALTER TABLE Products ADD description TEXT
```
**`drop_table`** - Remove tables (with confirmation)
```bash
drop_table("old_table", confirm=true)
```
**`list_tables`** - Get all tables in database
```bash
list_tables()
```
**`describe_table`** - View table schema
```bash
describe_table("Users")
```
**`export_query`** - Export results to CSV/JSON
```bash
export_query("SELECT * FROM Users", format="csv")
```
**`append_insight`** - Add business insight to memo
```bash
append_insight("Sales increased 20% after new feature")
```
**`list_insights`** - View all insights
```bash
list_insights()
```
#### Use Cases
**Best for**:
- Database schema exploration
- Query development and testing
- Data analysis
- Business intelligence
- Database migrations
- Performance testing
---
### 4. Context7 MCP
**Purpose**: Real-time library documentation access
**Type**: Node.js (npx)
**Package**: `@upstash/context7-mcp`
**Website**: https://context7.com/
**Configuration**:
```json
{
"command": "npx",
"args": ["-y", "@upstash/context7-mcp"],
"env": {
"CONTEXT7_API_KEY": "your-api-key-here"
}
}
```
#### Available Tools
**`resolve-library-id`** - Find library identifier
```bash
# Find library ID
resolve-library-id("react")
# Returns: "/facebook/react"
resolve-library-id("next.js")
# Returns: "/vercel/next.js"
```
**Selection Criteria**:
- Name similarity (exact matches prioritized)
- Description relevance
- Documentation coverage (code snippets count)
- Trust score (7-10 prioritized)
**`get-library-docs`** - Get current documentation
```bash
# Get React docs
get-library-docs("/facebook/react", topic="hooks")
# Get specific version
get-library-docs("/vercel/next.js/v14.3.0", topic="routing")
# Control token usage
get-library-docs("/mongodb/docs", tokens=10000)
```
**Parameters**:
- `context7CompatibleLibraryID` - Library ID from resolve-library-id
- `topic` - Focus area (optional)
- `tokens` - Max tokens (default: 5000)
#### Use Cases
**Best for**:
- Learning new frameworks
- Getting up-to-date API references
- Finding best practices
- Code examples from official docs
- Version-specific documentation
**Example Workflow**:
```bash
# 1. Find library
resolve-library-id("supabase")
# 2. Get docs
get-library-docs("/supabase/supabase", topic="authentication")
# 3. Use in code
# Claude now has current Supabase auth docs
```
---
### 5. Memory MCP (Knowledge Graph)
**Purpose**: Temporary in-memory knowledge graph
**Type**: Node.js (npx)
**Package**: `@modelcontextprotocol/server-memory`
**Storage**: In-memory, **cleared after session ends**
**Configuration**:
```json
{
"command": "powershell",
"args": [
"-ExecutionPolicy", "Bypass",
"-File", ".\.claude\tools\start-memory.ps1"
]
}
```
#### Available Tools
**`create_entities`** - Create entities in graph
```javascript
create_entities([
{
name: "PaymentService",
entityType: "Service",
observations: [
"Handles Stripe integration",
"Located in src/services/payment.ts",
"Depends on DatabaseService"
]
},
{
name: "UserAuthentication",
entityType: "Feature",
observations: [
"Uses JWT tokens",
"Session timeout: 24 hours"
]
}
])
```
**`create_relations`** - Define relationships
```javascript
create_relations([
{
from: "PaymentService",
to: "DatabaseService",
relationType: "depends_on"
},
{
from: "UserAuthentication",
to: "SessionManager",
relationType: "uses"
}
])
```
**`add_observations`** - Add details to entities
```javascript
add_observations([
{
entityName: "PaymentService",
contents: [
"Implemented retry logic",
"Added webhook support"
]
}
])
```
**`search_nodes`** - Search knowledge graph
```bash
search_nodes("payment")
```
**`read_graph`** - View entire graph
```bash
read_graph()
```
**`open_nodes`** - Retrieve specific entities
```bash
open_nodes(["PaymentService", "UserAuthentication"])
```
**`delete_entities`** - Remove entities
```bash
delete_entities(["OldFeature"])
```
**`delete_relations`** - Remove relationships
```javascript
delete_relations([
{from: "A", to: "B", relationType: "uses"}
])
```
**`delete_observations`** - Remove specific observations
```javascript
delete_observations([
{
entityName: "PaymentService",
observations: ["outdated info"]
}
])
```
#### Use Cases
**Best for**:
- Current conversation context
- Temporary analysis during task
- Entity relationships in current work
- Cross-file refactoring state (temporary)
- Session-specific tracking
**Do NOT use for**:
- Long-term knowledge (use Serena instead)
- ADRs or lessons learned
- Project patterns
- Anything needed next week
#### Memory vs Serena Decision Tree
**Question**: Should this information exist next week?
- **YES** → Use Serena `write_memory`
- **NO** → Use Memory graph
**Storage Location**: `.memory-mcp/knowledge_graph.json` (managed by PowerShell script)
---
### 6. Fetch MCP
**Purpose**: Web content retrieval and conversion
**Type**: Python (uvx)
**Package**: `mcp-server-fetch`
**Configuration**:
```json
{
"command": "uvx",
"args": ["mcp-server-fetch"]
}
```
#### Available Tools
**`fetch`** - Retrieve and process URLs
**Parameters**:
- `url` - URL to fetch (required)
- `max_length` - Max characters (default: 5000)
- `start_index` - Start position (for pagination)
- `raw` - Get raw HTML instead of markdown
**Features**:
- Converts HTML to markdown
- Pagination support for long content
- Automatic HTTPS upgrade
- Self-cleaning 15-minute cache
**Examples**:
```bash
# Fetch documentation
fetch("https://docs.example.com/api")
# Get raw HTML
fetch("https://example.com", raw=true)
# Paginated content
fetch("https://long-page.com", start_index=5000, max_length=5000)
```
#### Use Cases
**Best for**:
- API documentation scraping
- Web content analysis
- Integration documentation
- Blog post research
- Technical article retrieval
**Note**: When URL redirects to different host, tool informs you. Make new request with redirect URL.
---
### 7. Windows MCP
**Purpose**: Windows desktop automation
**Type**: Python (uv)
**Repository**: https://github.com/lekt9/windows-mcp
**Platform**: Windows only (won't affect other servers on Mac/Linux)
**Configuration**:
```json
{
"command": "uv",
"args": [
"--directory", "./.windows-mcp",
"run", "main.py"
]
}
```
#### Available Tools
**`Launch-Tool`** - Launch applications
```bash
Launch-Tool("notepad")
Launch-Tool("calculator")
Launch-Tool("chrome")
```
**`Powershell-Tool`** - Execute PowerShell commands
```bash
Powershell-Tool("Get-Process | Where-Object {$_.Name -like 'chrome*'}")
```
**`State-Tool`** - Capture desktop state
```bash
# Get UI elements, focused apps, interactive elements
State-Tool(use_vision=false)
# Include visual screenshot
State-Tool(use_vision=true)
```
**`Clipboard-Tool`** - Clipboard operations
```bash
# Copy text
Clipboard-Tool(mode="copy", text="Hello World")
# Paste (retrieve)
Clipboard-Tool(mode="paste")
```
**`Click-Tool`** - Click UI elements
```bash
# Left click at coordinates
Click-Tool(loc=[100, 200])
# Right click
Click-Tool(loc=[100, 200], button="right")
# Double click
Click-Tool(loc=[100, 200], clicks=2)
```
**`Type-Tool`** - Type text into fields
```bash
# Type text (append)
Type-Tool(loc=[100, 200], text="Hello")
# Clear and type
Type-Tool(loc=[100, 200], text="Hello", clear=true)
# Type and press Enter
Type-Tool(loc=[100, 200], text="search query", press_enter=true)
```
**`Resize-Tool`** - Resize/move windows
```bash
# Resize window
Resize-Tool(size=[800, 600])
# Move window
Resize-Tool(loc=[100, 100])
```
**`Switch-Tool`** - Switch to application
```bash
Switch-Tool("notepad")
Switch-Tool("chrome")
```
**`Scroll-Tool`** - Scroll content
```bash
# Scroll down at location
Scroll-Tool(loc=[400, 300], direction="down", wheel_times=3)
# Scroll horizontally
Scroll-Tool(type="horizontal", direction="right")
```
**`Drag-Tool`** - Drag and drop
```bash
Drag-Tool(from_loc=[100, 100], to_loc=[200, 200])
```
**`Move-Tool`** - Move mouse cursor
```bash
Move-Tool(to_loc=[300, 400])
```
**`Shortcut-Tool`** - Keyboard shortcuts
```bash
# Copy
Shortcut-Tool(["ctrl", "c"])
# Alt+Tab
Shortcut-Tool(["alt", "tab"])
# Windows+R
Shortcut-Tool(["win", "r"])
```
**`Key-Tool`** - Press individual keys
```bash
Key-Tool("enter")
Key-Tool("escape")
Key-Tool("f5")
```
**`Wait-Tool`** - Pause execution
```bash
Wait-Tool(duration=5) # Wait 5 seconds
```
**`Scrape-Tool`** - Scrape webpage to markdown
```bash
Scrape-Tool("https://example.com")
```
#### Use Cases
**Best for**:
- GUI automation
- Desktop testing
- Windows-specific operations
- Application interaction
- Screen automation workflows
---
### 8. Playwright MCP
**Purpose**: Browser automation and testing
**Type**: Node.js (npx)
**Package**: `@playwright/mcp`
**Website**: https://playwright.dev/
**Configuration**:
```json
{
"command": "npx",
"args": ["-y", "@playwright/mcp"]
}
```
**Additional Setup**: Run `npx playwright install` to install browsers
#### Available Tools
**Navigation**:
- `browser_navigate` - Navigate to URL
- `browser_navigate_back` - Go back
**Interaction**:
- `browser_click` - Click elements
- `browser_type` - Type text
- `browser_fill_form` - Fill multiple form fields
- `browser_select_option` - Select dropdown options
- `browser_hover` - Hover over elements
- `browser_drag` - Drag and drop
**Keyboard**:
- `browser_press_key` - Press keys
- `browser_evaluate` - Execute JavaScript
**Capture**:
- `browser_snapshot` - Accessibility snapshot (better than screenshot)
- `browser_take_screenshot` - Take visual screenshot
**Monitoring**:
- `browser_console_messages` - Get console logs
- `browser_network_requests` - View network traffic
**Window Management**:
- `browser_tabs` - Manage tabs (list, create, close, select)
- `browser_resize` - Resize browser window
- `browser_close` - Close browser
**Advanced**:
- `browser_file_upload` - Upload files
- `browser_handle_dialog` - Handle alerts/confirms
- `browser_wait_for` - Wait for conditions
#### Usage Examples
**Basic Navigation**:
```javascript
// Navigate and capture
browser_navigate("https://example.com")
browser_snapshot()
// Take screenshot
browser_take_screenshot(filename="page.png")
```
**Form Interaction**:
```javascript
// Fill form
browser_fill_form([
{name: "username", type: "textbox", ref: "input#user", value: "john"},
{name: "password", type: "textbox", ref: "input#pass", value: "secret"},
{name: "remember", type: "checkbox", ref: "input#rem", value: "true"}
])
// Click submit
browser_click(element="Submit button", ref="button[type='submit']")
```
**Testing Workflow**:
```javascript
// 1. Navigate
browser_navigate("https://app.example.com/login")
// 2. Fill and submit
browser_type(element="Username field", ref="input#user", text="test@example.com")
browser_type(element="Password field", ref="input#pass", text="password")
browser_click(element="Login button", ref="button.login")
// 3. Wait and verify
browser_wait_for(text="Welcome")
browser_snapshot()
// 4. Check network
browser_network_requests()
```
**Tab Management**:
```javascript
// List tabs
browser_tabs(action="list")
// Create new tab
browser_tabs(action="new")
// Switch to tab
browser_tabs(action="select", index=1)
// Close tab
browser_tabs(action="close", index=2)
```
#### Use Cases
**Best for**:
- E2E testing
- Web scraping
- UI automation
- Browser-based workflows
- Screenshot capture
- Network monitoring
- Console debugging
---
## Usage Guide
### Quick Decision Tree
**Need to navigate code?**
→ Use **Serena** code functions
**Need to store knowledge long-term?**
→ Use **Serena** `write_memory`
**Building temporary context for current task?**
→ Use **Memory** graph
**Need current library docs?**
→ Use **Context7**
**Complex problem requiring deep thought?**
→ Use **Sequential Thinking**
**Need to automate browser?**
→ Use **Playwright**
**Need Windows desktop automation?**
→ Use **Windows MCP**
**Need to query database?**
→ Use **Database Server**
**Need to scrape web content?**
→ Use **Fetch**
### Usage by Agent Type
#### Architect Agent
```markdown
## MCP Usage
**Serena**:
- `get_symbols_overview` - Understand current architecture
- `find_symbol` - Locate key components
- `write_memory` - Store ADRs:
- "adr-001-microservices-architecture"
- "adr-002-database-choice-postgresql"
**Memory**:
- `create_entities` - Components being designed
- `create_relations` - Model dependencies
- `add_observations` - Document design rationale
Note: After design finalized, store in Serena memory as ADR
```
#### Code Reviewer Agent
```markdown
## MCP Usage
**Serena**:
- `find_symbol` - Locate reviewed code
- `find_referencing_symbols` - Impact analysis
- `write_memory` - Store review findings:
- "code-review-2024-10-payment-service"
**Memory**:
- `create_entities` - Issues found (Critical, Warning, Suggestion)
- `create_relations` - Link issues to code locations
- `add_observations` - Fix recommendations
Note: Summary stored in Serena memory after review
```
#### Security Analyst Agent
```markdown
## MCP Usage
**Serena**:
- `find_symbol` - Locate security-sensitive code
- `search_for_pattern` - Find potential vulnerabilities
- `write_memory` - Store audit results:
- "security-audit-2024-10-full-scan"
- "vulnerability-sql-injection-fixed"
**Memory**:
- `create_entities` - Vulnerabilities found
- `create_relations` - Link to affected code
- `add_observations` - Document severity and remediation
```
#### Test Engineer Agent
```markdown
## MCP Usage
**Serena**:
- `find_symbol` - Locate code to test
- `find_referencing_symbols` - Understand dependencies
- `write_memory` - Store test patterns:
- "test-pattern-async-handlers"
- "test-pattern-database-mocking"
**Memory**:
- `create_entities` - Test cases being generated
- `create_relations` - Link tests to code under test
**Playwright**:
- Browser testing automation
```
### Usage in Slash Commands
#### /implement Command
```markdown
## MCP Usage
**Serena**:
- `find_symbol` - Locate existing patterns
- `find_referencing_symbols` - Understand dependencies
- `rename_symbol` - Refactor safely
- `write_memory` - Store lessons:
- "lesson-payment-integration-stripe"
- "pattern-error-handling-async"
**Memory**:
- `create_entities` - Track features being implemented
- `create_relations` - Model integration points
**Context7**:
- `get-library-docs` - Current framework docs
```
#### /analyze Command
```markdown
## MCP Usage
**Serena**:
- `get_symbols_overview` - Understand structure
- `find_symbol` - Locate complex code
- `search_for_pattern` - Find duplicates
- `write_memory` - Store findings:
- "analysis-2024-10-technical-debt"
- "analysis-complexity-hotspots"
**Memory**:
- `create_entities` - Files/functions analyzed
- `create_relations` - Model dependencies
- `add_observations` - Document metrics
```
---
## Configuration
### Main Configuration File
**Location**: `.mcp.json` (project root)
**Format**:
```json
{
"mcpServers": {
"serena": {
"command": "uvx",
"args": [
"--from", "git+https://github.com/oraios/serena",
"serena", "start-mcp-server",
"--context", "ide-assistant",
"--project", "ProjectName"
]
},
"sequential-thinking": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-sequential-thinking"]
},
"database-server": {
"command": "npx",
"args": [
"-y", "@executeautomation/database-server",
"--sqlserver",
"--server", "server-name",
"--database", "db-name",
"--user", "username",
"--password", "password",
"--trustServerCertificate"
]
},
"context7": {
"command": "npx",
"args": ["-y", "@upstash/context7-mcp"],
"env": {
"CONTEXT7_API_KEY": "your-key"
}
},
"memory": {
"command": "powershell",
"args": [
"-ExecutionPolicy", "Bypass",
"-File", ".\.claude\tools\start-memory.ps1"
]
},
"fetch": {
"command": "uvx",
"args": ["mcp-server-fetch"]
},
"windows-mcp": {
"command": "uv",
"args": [
"--directory", "./.windows-mcp",
"run", "main.py"
]
},
"playwright": {
"command": "npx",
"args": ["-y", "@playwright/mcp"]
}
}
}
```
### Claude Settings Configuration
**Location**: `.claude/settings.json`
**Enable MCP Servers**:
```json
{
"enableAllProjectMcpServers": true
}
```
**Enable Specific Servers**:
```json
{
"mcpServers": {
"serena": {"enabled": true},
"memory": {"enabled": true},
"context7": {"enabled": true}
}
}
```
### Environment Variables
**Context7 API Key**:
```bash
# Option 1: In .mcp.json (not recommended for git)
"env": {"CONTEXT7_API_KEY": "ctx7sk-..."}
# Option 2: System environment variable (recommended)
export CONTEXT7_API_KEY="ctx7sk-..."
```
**Database Credentials**:
```bash
# Use environment variables for security
export DB_SERVER="server-name"
export DB_USER="username"
export DB_PASSWORD="password"
# Reference in .mcp.json
"args": ["--server", "${DB_SERVER}", "--user", "${DB_USER}"]
```
---
## Best Practices
### Memory Management
**Use Serena Memory For**:
- ✅ Architectural Decision Records
- ✅ Code review summaries
- ✅ Lessons learned
- ✅ Project patterns
- ✅ Technical debt tracking
- ✅ Security findings
- ✅ Performance notes
**Use Memory Graph For**:
- ✅ Current conversation context
- ✅ Temporary analysis state
- ✅ Session-specific tracking
- ✅ Cross-file refactoring state
**DON'T Mix Them**:
- ❌ Don't store temporary info in Serena
- ❌ Don't expect Memory graph to persist
### Code Navigation Efficiency
**Good Practice** (efficient):
```bash
# 1. Get overview first
get_symbols_overview("src/service.ts")
# 2. Target specific symbols
find_symbol("UserService/authenticate", include_body=true)
# 3. Find references if needed
find_referencing_symbols("authenticate", "src/service.ts")
```
**Bad Practice** (wasteful):
```bash
# Reading entire files unnecessarily
Read("src/service.ts") # 1000 lines
Read("src/utils.ts") # 500 lines
Read("src/auth.ts") # 800 lines
```
### Documentation Lookup Pattern
**Correct Workflow**:
```bash
# 1. Always resolve library ID first
resolve-library-id("react")
# Returns: /facebook/react
# 2. Then get docs
get-library-docs("/facebook/react", topic="hooks")
```
**Incorrect** (won't work):
```bash
# Don't skip resolve step
get-library-docs("react") # ERROR: not a valid ID
```
### Browser Automation Best Practices
**Use Snapshots, Not Screenshots**:
```bash
# Good: Accessibility snapshot (faster, more data)
browser_snapshot()
# Use screenshots only when visual verification needed
browser_take_screenshot()
```
**Wait for Content**:
```bash
# Good: Wait for specific text
browser_wait_for(text="Welcome")
# Avoid arbitrary delays
browser_wait_for(time=5) # Use only when necessary
```
### Database Query Safety
**Always Use Parameterized Queries**:
```sql
-- Good
SELECT * FROM Users WHERE id = @userId
-- Bad (SQL injection risk)
SELECT * FROM Users WHERE id = ${userInput}
```
**Test Before Write**:
```bash
# 1. Test with read_query
read_query("SELECT * FROM Users WHERE ...")
# 2. Verify results
# 3. Then write_query
write_query("UPDATE Users SET ...")
```
---
## Troubleshooting
### MCP Server Not Starting
**Problem**: Server fails to connect
**Solutions**:
1. Check `.mcp.json` syntax:
```bash
cat .mcp.json | jq .
```
2. Test command manually:
```bash
npx -y @modelcontextprotocol/server-memory
uvx mcp-server-fetch
```
3. Check Claude Code logs:
- Windows: `.claude\logs\`
- Linux/Mac: `.claude/logs/`
4. Verify prerequisites installed:
```bash
node --version # Should be 18+
python --version # Should be 3.8+
npm --version
uv --version
```
5. Restart Claude Code after config changes
### Serena Memory Not Persisting
**Problem**: Memories disappear between sessions
**Check**:
1. Verify storage location exists:
```bash
ls .serena/memories/
```
2. Check memory was actually written:
```bash
list_memories()
```
3. Ensure using `write_memory`, not Memory graph:
```bash
# Correct (persists)
write_memory("my-memory", "content")
# Wrong (session only)
create_entities([{name: "my-memory", ...}])
```
### Memory Graph Empty After Restart
**This is normal!** Memory graph is **session-only storage**.
**If you need persistence**: Use Serena `write_memory` instead.
### Context7 Not Working
**Problem**: Library docs not retrieved
**Solutions**:
1. Check API key configured:
```bash
cat .mcp.json | jq '.mcpServers.context7.env'
```
2. Get free API key: https://context7.com/
3. Always resolve library ID first:
```bash
# Required first step
resolve-library-id("library-name")
```
4. Use correct ID format:
```bash
# Correct
get-library-docs("/facebook/react")
# Wrong
get-library-docs("react")
```
### Playwright Browsers Not Installed
**Problem**: Browser automation fails
**Solution**:
```bash
npx playwright install
npx playwright install chromium # Just Chromium
```
**Verify**:
```bash
npx playwright --version
```
### Windows MCP Not Working on Mac/Linux
**This is normal!** Windows MCP is Windows-only.
**It won't break other servers** - they'll continue working.
**On Mac/Linux**: Simply ignore Windows MCP server errors.
### Database Connection Failed
**Problem**: Cannot connect to SQL Server
**Solutions**:
1. Verify connection details:
```bash
# Test connection manually
sqlcmd -S server -U user -P password -d database
```
2. Check `.mcp.json` configuration:
```json
"--server", "correct-server-name",
"--database", "correct-db-name",
"--user", "correct-username",
"--password", "correct-password"
```
3. Add `--trustServerCertificate` if using self-signed certs
4. Check network connectivity and firewall rules
### Permission Errors
**Problem**: MCP server command denied
**Solutions**:
1. Check file permissions:
```bash
# Linux/Mac
chmod +x .claude/tools/*.sh
# Windows PowerShell
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
```
2. Verify tool allowed in `.claude/settings.json`:
```json
{
"permissions": {
"allowed": ["mcp__serena__*", "mcp__memory__*"]
}
}
```
### Command Not Found (npx/uvx)
**Problem**: Setup script can't find package managers
**Solutions**:
1. Install Node.js: https://nodejs.org/
2. Install Python and uv:
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
```
3. Restart terminal after installation
4. Verify installation:
```bash
npx --version
uvx --version
```
---
## Advanced Topics
### Custom MCP Server Configuration
You can add your own MCP servers to `.mcp.json`:
```json
{
"mcpServers": {
"my-custom-server": {
"command": "node",
"args": ["./my-server/index.js"],
"env": {
"MY_CONFIG": "value"
}
}
}
}
```
### MCP Server Development
Create custom MCP servers:
- **Documentation**: https://modelcontextprotocol.io/
- **SDK**: https://github.com/modelcontextprotocol/servers
- **Examples**: https://github.com/modelcontextprotocol/servers/tree/main/src
### Performance Optimization
**Parallel MCP Calls**:
```bash
# Claude can call multiple MCP servers in parallel
# when operations are independent
```
**Token Efficiency**:
- Use Serena symbols instead of full file reads
- Use Memory graph for temporary context
- Leverage Grep/Glob before reading
**Caching**:
- Context7 and Fetch have built-in caching
- Memory graph caches for session duration
### Security Considerations
**Secrets Management**:
- ❌ Never commit API keys to git
- ✅ Use environment variables
- ✅ Use `.claude/settings.local.json` (gitignored)
**Database Access**:
- Use read-only accounts when possible
- Parameterize all queries
- Audit database operations
**Browser Automation**:
- Be cautious with authentication in Playwright
- Don't expose credentials in screenshots
- Review captured network requests
### Integration with CI/CD
**Headless Mode** (optional):
```bash
# Run Claude Code in CI pipeline
claude --headless --session ci-build
# Use MCP servers in automation
# Example: Database migrations, E2E tests
```
### Updating MCP Servers
**Update All Servers**:
```bash
# Re-run setup script (idempotent)
.\.claude\tools\setup-all-mcp-servers.ps1
```
**Update Individual Server**:
```bash
# npm-based servers (auto-update with -y flag)
npx -y @modelcontextprotocol/server-memory
# Python-based servers
uvx --from "git+https://github.com/oraios/serena" serena
# Windows MCP (git-based)
cd .windows-mcp
git pull
uv sync
```
### Monitoring and Logging
**Check Server Status**:
```bash
claude mcp list
claude mcp test <server-name>
```
**View Logs**:
```bash
# All logs
ls .claude/logs/
# MCP-specific logs
cat .claude/logs/mcp-*.log
```
**Debug Mode**:
Add to `.claude/settings.json`:
```json
{
"debug": true,
"logLevel": "debug"
}
```
---
## Additional Resources
### Official Documentation
- **Claude Code**: https://docs.claude.com/en/docs/claude-code/
- **MCP Specification**: https://modelcontextprotocol.io/
- **Serena**: https://github.com/oraios/serena
- **Context7**: https://context7.com/
- **Playwright**: https://playwright.dev/
### Project Documentation
- **Quick Start**: [QUICKSTART.md](QUICKSTART.md)
- **Complete Setup**: [CLAUDE_CODE_SETUP_COMPLETE.md](CLAUDE_CODE_SETUP_COMPLETE.md)
- **Usage Templates**: [.claude/agents/MCP_USAGE_TEMPLATES.md](.claude/agents/MCP_USAGE_TEMPLATES.md)
### Setup Scripts
- **Windows Setup**: [.claude/tools/setup-all-mcp-servers.ps1](.claude/tools/setup-all-mcp-servers.ps1)
- **Linux/Mac Setup**: [.claude/tools/setup-all-mcp-servers.sh](.claude/tools/setup-all-mcp-servers.sh)
- **Test Script**: [.claude/tools/test-mcp-servers.ps1](.claude/tools/test-mcp-servers.ps1)
---
## Summary
This guide covers all 8 MCP servers configured in this project:
1. ✅ **Serena** - Code navigation + persistent memory
2. ✅ **Sequential Thinking** - Complex reasoning
3. ✅ **Database Server** - SQL Server integration
4. ✅ **Context7** - Library documentation
5. ✅ **Memory** - Knowledge graph (session)
6. ✅ **Fetch** - Web content retrieval
7. ✅ **Windows MCP** - Desktop automation
8. ✅ **Playwright** - Browser automation
### Quick Commands Reference
```bash
# Setup
.\.claude\tools\setup-all-mcp-servers.ps1
# Test
.\.claude\tools\test-mcp-servers.ps1
# Check status
claude mcp list
claude mcp test <server-name>
# View logs
cat .claude/logs/mcp-*.log
```
### Key Takeaways
- **Serena Memory** = Long-term knowledge (persists)
- **Memory Graph** = Session-only context (temporary)
- **Context7** = Real-time library docs (requires API key)
- **Playwright** = Browser automation (requires browser install)
- **Windows MCP** = Windows-only (safe to ignore on Mac/Linux)
---
**Version**: 1.0.0
**Last Updated**: 2025-10-20
**Maintained by**: Claude Code Setup Project
**For latest information**: See official documentation at https://docs.claude.com/en/docs/claude-code/
---
*This comprehensive guide consolidates all MCP server documentation from multiple sources into a single reference. For setup automation, see the tools in `.claude/tools/`.*