- Update all main markdown files (INDEX.md, LEARNING-ROADMAP.md, QUICK_REFERENCE.md, CONTRIBUTING.md, claude_concepts_guide.md, resources.md) with new responsive picture element - Add logo to all subdirectory README files in feature folders (01-10) and plugins - Replace old markdown image syntax with HTML picture element for dark/light mode adaptation - Logo automatically displays dark mode version when system prefers dark mode - Maintain correct relative paths for all nesting levels (../, ../../, etc.) - Update README.md with new logo syntax All markdown files now use the new V2.0 starburst logo design with professional dark/light mode support. |
||
|---|---|---|
| .. | ||
| database-mcp.json | ||
| filesystem-mcp.json | ||
| github-mcp.json | ||
| multi-mcp.json | ||
| README.md | ||
MCP (Model Context Protocol)
This folder contains comprehensive documentation and examples for MCP server configurations and usage with Claude Code.
Overview
MCP (Model Context Protocol) is a standardized way for Claude to access external tools, APIs, and real-time data sources. Unlike Memory, MCP provides live access to changing data.
Key characteristics:
- Real-time access to external services
- Live data synchronization
- Extensible architecture
- Secure authentication
- Tool-based interactions
MCP Architecture
graph TB
A["Claude"]
B["MCP Server"]
C["External Service"]
A -->|Request: list_issues| B
B -->|Query| C
C -->|Data| B
B -->|Response| A
A -->|Request: create_issue| B
B -->|Action| C
C -->|Result| B
B -->|Response| A
MCP Ecosystem
graph TB
A["Claude"] -->|MCP| B["Filesystem<br/>MCP Server"]
A -->|MCP| C["GitHub<br/>MCP Server"]
A -->|MCP| D["Database<br/>MCP Server"]
A -->|MCP| E["Slack<br/>MCP Server"]
A -->|MCP| F["Google Docs<br/>MCP Server"]
B -->|File I/O| G["Local Files"]
C -->|API| H["GitHub Repos"]
D -->|Query| I["PostgreSQL/MySQL"]
E -->|Messages| J["Slack Workspace"]
F -->|Docs| K["Google Drive"]
MCP Installation Methods
Claude Code supports multiple transport protocols for MCP server connections:
HTTP Transport (Recommended)
# Basic HTTP connection
claude mcp add --transport http notion https://mcp.notion.com/mcp
# HTTP with authentication header
claude mcp add --transport http secure-api https://api.example.com/mcp \
--header "Authorization: Bearer your-token"
Stdio Transport (Local)
For locally running MCP servers:
# Local Node.js server
claude mcp add --transport stdio myserver -- npx @myorg/mcp-server
# With environment variables
claude mcp add --transport stdio myserver --env KEY=value -- npx server
SSE Transport (Deprecated)
Server-Sent Events transport is deprecated but still supported:
claude mcp add --transport sse legacy-server https://example.com/sse
Windows-Specific Note
On native Windows (not WSL), use cmd /c for npx commands:
claude mcp add --transport stdio my-server -- cmd /c npx -y @some/package
MCP Setup Process
sequenceDiagram
participant User
participant Claude as Claude Code
participant Config as Config File
participant Service as External Service
User->>Claude: Type /mcp
Claude->>Claude: List available MCP servers
Claude->>User: Show options
User->>Claude: Select GitHub MCP
Claude->>Config: Update configuration
Config->>Claude: Activate connection
Claude->>Service: Test connection
Service-->>Claude: Authentication successful
Claude->>User: ✅ MCP connected!
MCP Scopes
MCP configurations can be stored at different scopes with varying levels of sharing:
| Scope | Location | Description | Shared With | Requires Approval |
|---|---|---|---|---|
| Local (default) | ~/.claude.json |
Private to current user | Just you | No |
| Project | .mcp.json |
Checked into git repository | Team members | Yes (first use) |
| User | ~/.claude.json |
Available across all projects | Just you | No |
Using Project Scope
Store project-specific MCP configurations in .mcp.json:
{
"mcpServers": {
"github": {
"type": "http",
"url": "https://api.github.com/mcp"
}
}
}
Team members will see an approval prompt on first use of project MCPs.
MCP Configuration Management
Adding MCP Servers
# Add HTTP-based server
claude mcp add --transport http github https://api.github.com/mcp
# Add local stdio server
claude mcp add --transport stdio database -- npx @company/db-server
# List all MCP servers
claude mcp list
# Get details on specific server
claude mcp get github
# Remove an MCP server
claude mcp remove github
# Reset project-specific approval choices
claude mcp reset-project-choices
# Import from Claude Desktop
claude mcp add-from-claude-desktop
Available MCP Servers Table
| MCP Server | Purpose | Common Tools | Auth | Real-time |
|---|---|---|---|---|
| Filesystem | File operations | read, write, delete | OS permissions | ✅ Yes |
| GitHub | Repository management | list_prs, create_issue, push | OAuth | ✅ Yes |
| Slack | Team communication | send_message, list_channels | Token | ✅ Yes |
| Database | SQL queries | query, insert, update | Credentials | ✅ Yes |
| Google Docs | Document access | read, write, share | OAuth | ✅ Yes |
| Asana | Project management | create_task, update_status | API Key | ✅ Yes |
| Stripe | Payment data | list_charges, create_invoice | API Key | ✅ Yes |
| Memory | Persistent memory | store, retrieve, delete | Local | ❌ No |
Practical Examples
Example 1: GitHub MCP Configuration
File: .claude/mcp.json
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["@modelcontextprotocol/server-github"],
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}"
}
}
}
}
Available GitHub MCP Tools:
Pull Request Management
list_prs- List all PRs in repositoryget_pr- Get PR details including diffcreate_pr- Create new PRupdate_pr- Update PR description/titlemerge_pr- Merge PR to main branchreview_pr- Add review comments
Example request:
/mcp__github__get_pr 456
# Returns:
Title: Add dark mode support
Author: @alice
Description: Implements dark theme using CSS variables
Status: OPEN
Reviewers: @bob, @charlie
Issue Management
list_issues- List all issuesget_issue- Get issue detailscreate_issue- Create new issueclose_issue- Close issueadd_comment- Add comment to issue
Repository Information
get_repo_info- Repository detailslist_files- File tree structureget_file_content- Read file contentssearch_code- Search across codebase
Commit Operations
list_commits- Commit historyget_commit- Specific commit detailscreate_commit- Create new commit
Setup:
export GITHUB_TOKEN="your_github_token"
cp github-mcp.json ~/.claude/mcp.json
Environment Variable Expansion in Configuration
MCP configurations support environment variable expansion with fallback defaults:
{
"mcpServers": {
"api-server": {
"type": "http",
"url": "${API_BASE_URL:-https://api.example.com}/mcp",
"headers": {
"Authorization": "Bearer ${API_KEY}",
"X-Custom-Header": "${CUSTOM_HEADER:-default-value}"
}
}
}
}
Variables are expanded at runtime:
${VAR}- Uses environment variable, error if not set${VAR:-default}- Uses environment variable, falls back to default if not set
Example 2: Database MCP Setup
Configuration:
{
"mcpServers": {
"database": {
"command": "npx",
"args": ["@modelcontextprotocol/server-database"],
"env": {
"DATABASE_URL": "postgresql://user:pass@localhost/mydb"
}
}
}
}
Example Usage:
User: Fetch all users with more than 10 orders
Claude: I'll query your database to find that information.
# Using MCP database tool:
SELECT u.*, COUNT(o.id) as order_count
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
GROUP BY u.id
HAVING COUNT(o.id) > 10
ORDER BY order_count DESC;
# Results:
- Alice: 15 orders
- Bob: 12 orders
- Charlie: 11 orders
Setup:
export DATABASE_URL="postgresql://user:pass@localhost/mydb"
cp database-mcp.json ~/.claude/mcp.json
Example 3: Multi-MCP Workflow
Scenario: Daily Report Generation
# Daily Report Workflow using Multiple MCPs
## Setup
1. GitHub MCP - fetch PR metrics
2. Database MCP - query sales data
3. Slack MCP - post report
4. Filesystem MCP - save report
## Workflow
### Step 1: Fetch GitHub Data
/mcp__github__list_prs completed:true last:7days
Output:
- Total PRs: 42
- Average merge time: 2.3 hours
- Review turnaround: 1.1 hours
### Step 2: Query Database
SELECT COUNT(*) as sales, SUM(amount) as revenue
FROM orders
WHERE created_at > NOW() - INTERVAL '1 day'
Output:
- Sales: 247
- Revenue: $12,450
### Step 3: Generate Report
Combine data into HTML report
### Step 4: Save to Filesystem
Write report.html to /reports/
### Step 5: Post to Slack
Send summary to #daily-reports channel
Final Output:
✅ Report generated and posted
📊 47 PRs merged this week
💰 $12,450 in daily sales
Setup:
export GITHUB_TOKEN="your_github_token"
export DATABASE_URL="postgresql://user:pass@localhost/mydb"
export SLACK_TOKEN="your_slack_token"
cp multi-mcp.json ~/.claude/mcp.json
Example 4: Filesystem MCP Operations
Configuration:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["@modelcontextprotocol/server-filesystem", "/home/user/projects"]
}
}
}
Available Operations:
| Operation | Command | Purpose |
|---|---|---|
| List files | ls ~/projects |
Show directory contents |
| Read file | cat src/main.ts |
Read file contents |
| Write file | create docs/api.md |
Create new file |
| Edit file | edit src/app.ts |
Modify file |
| Search | grep "async function" |
Search in files |
| Delete | rm old-file.js |
Delete file |
Setup:
cp filesystem-mcp.json ~/.claude/mcp.json
MCP vs Memory: Decision Matrix
graph TD
A["Need external data?"]
A -->|No| B["Use Memory"]
A -->|Yes| C["Does it change frequently?"]
C -->|No/Rarely| B
C -->|Yes/Often| D["Use MCP"]
B -->|Stores| E["Preferences<br/>Context<br/>History"]
D -->|Accesses| F["Live APIs<br/>Databases<br/>Services"]
style B fill:#e1f5ff
style D fill:#fff9c4
Request/Response Pattern
sequenceDiagram
participant App as Claude
participant MCP as MCP Server
participant DB as Database
App->>MCP: Request: "SELECT * FROM users WHERE id=1"
MCP->>DB: Execute query
DB-->>MCP: Result set
MCP-->>App: Return parsed data
App->>App: Process result
App->>App: Continue task
Note over MCP,DB: Real-time access<br/>No caching
Environment Variables
Store sensitive credentials in environment variables:
# ~/.bashrc or ~/.zshrc
export GITHUB_TOKEN="ghp_xxxxxxxxxxxxx"
export DATABASE_URL="postgresql://user:pass@localhost/mydb"
export SLACK_TOKEN="xoxb-xxxxxxxxxxxxx"
Then reference them in MCP config:
{
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}"
}
}
Claude as MCP Server
Claude Code itself can act as an MCP server for other applications:
claude mcp serve
This starts Claude Code in MCP server mode, allowing other MCP clients to connect and use Claude's capabilities as a service.
Managed MCP Configuration (Enterprise)
For enterprise deployments, MCP servers can be managed centrally via configuration files:
Location:
- macOS:
/Library/Application Support/ClaudeCode/managed-mcp.json - Linux:
~/.config/ClaudeCode/managed-mcp.json - Windows:
%APPDATA%\ClaudeCode\managed-mcp.json
Features:
- Allowlist/denylist controls
- Restrict by server name, command, or URL
- Organization-wide MCP policies
- Prevents unauthorized server connections
Example configuration:
{
"allowlist": [
{
"serverName": "github",
"serverUrl": "https://api.github.com/mcp"
},
{
"serverName": "company-internal",
"serverCommand": "company-mcp-server"
}
],
"denylist": [
{
"serverName": "untrusted-*"
}
]
}
Best Practices
Security Considerations
Do's ✅
- Use environment variables for all credentials
- Rotate tokens and API keys regularly (monthly recommended)
- Use read-only tokens when possible
- Limit MCP server access scope to minimum required
- Monitor MCP server usage and access logs
- Use OAuth for external services when available
- Implement rate limiting on MCP requests
- Test MCP connections before production use
- Document all active MCP connections
- Keep MCP server packages updated
Don'ts ❌
- Don't hardcode credentials in config files
- Don't commit tokens or secrets to git
- Don't share tokens in team chats or emails
- Don't use personal tokens for team projects
- Don't grant unnecessary permissions
- Don't ignore authentication errors
- Don't expose MCP endpoints publicly
- Don't run MCP servers with root/admin privileges
- Don't cache sensitive data in logs
- Don't disable authentication mechanisms
Configuration Best Practices
- Version Control: Keep
.claude/mcp.jsonin git but use environment variables for secrets - Least Privilege: Grant minimum permissions needed for each MCP server
- Isolation: Run different MCP servers in separate processes when possible
- Monitoring: Log all MCP requests and errors for audit trails
- Testing: Test all MCP configurations before deploying to production
Performance Tips
- Cache frequently accessed data at the application level
- Use MCP queries that are specific to reduce data transfer
- Monitor response times for MCP operations
- Consider rate limiting for external APIs
- Use batching when performing multiple operations
Installation Instructions
Prerequisites
- Node.js and npm installed
- Claude Code CLI installed
- API tokens/credentials for external services
Step-by-Step Setup
- Create MCP configuration file:
mkdir -p ~/.claude
touch ~/.claude/mcp.json
- Add your first MCP server (example: GitHub):
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["@modelcontextprotocol/server-github"],
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}"
}
}
}
}
- Set environment variables:
export GITHUB_TOKEN="your_github_personal_access_token"
- Test the connection:
claude /mcp
- Use MCP tools:
/mcp__github__list_prs
/mcp__github__create_issue "Title" "Description"
Installation for Specific Services
GitHub MCP:
npm install -g @modelcontextprotocol/server-github
Database MCP:
npm install -g @modelcontextprotocol/server-database
Filesystem MCP:
npm install -g @modelcontextprotocol/server-filesystem
Slack MCP:
npm install -g @modelcontextprotocol/server-slack
Troubleshooting
MCP Server Not Found
# Verify MCP server is installed
npm list -g @modelcontextprotocol/server-github
# Install if missing
npm install -g @modelcontextprotocol/server-github
Authentication Failed
# Verify environment variable is set
echo $GITHUB_TOKEN
# Re-export if needed
export GITHUB_TOKEN="your_token"
# Verify token has correct permissions
# Check GitHub token scopes at: https://github.com/settings/tokens
Connection Timeout
- Check network connectivity:
ping api.github.com - Verify API endpoint is accessible
- Check rate limits on API
- Try increasing timeout in config
- Check for firewall or proxy issues
MCP Server Crashes
- Check MCP server logs:
~/.claude/logs/ - Verify all environment variables are set
- Ensure proper file permissions
- Try reinstalling the MCP server package
- Check for conflicting processes on the same port
Related Concepts
Memory vs MCP
- Memory: Stores persistent, unchanging data (preferences, context, history)
- MCP: Accesses live, changing data (APIs, databases, real-time services)
When to Use Each
- Use Memory for: User preferences, conversation history, learned context
- Use MCP for: Current GitHub issues, live database queries, real-time data
Integration with Other Claude Features
- Combine MCP with Memory for rich context
- Use MCP tools in prompts for better reasoning
- Leverage multiple MCPs for complex workflows