---
name: mcp-server-orchestrator
description: Configure, deploy, and troubleshoot Model Context Protocol (MCP) servers for AI agent workflows. Use when setting up MCP servers, debugging connection issues, managing multi-server configurations, integrating with Claude Desktop/Code/Cowork, or designing custom tool servers. Triggers on MCP configuration, tool server development, Claude integration issues, or agent infrastructure setup.
license: MIT
governance_phases: [build, ship]
organ_affinity: [organ-iv, meta]
triggers: [user-asks-about-mcp-server, user-asks-about-mcp-configuration, context:mcp-setup]
complements: [mcp-builder, mcp-integration-patterns]
---

# MCP Server Orchestrator

Manage MCP server infrastructure for AI-powered development workflows.

## MCP Architecture Overview

```
┌─────────────────┐     ┌──────────────────┐     ┌─────────────────┐
│   MCP Client    │────▶│   MCP Server     │────▶│  External APIs  │
│ (Claude, etc.)  │◀────│  (Tool Provider) │◀────│  (Services)     │
└─────────────────┘     └──────────────────┘     └─────────────────┘
         │                       │
         └───── JSON-RPC ────────┘
```

**Key concepts:**
- **Server**: Provides tools, resources, and prompts via MCP protocol
- **Client**: Consumes server capabilities (Claude Desktop, Claude Code, etc.)
- **Transport**: Communication layer (stdio, SSE, WebSocket)

## Configuration Locations

| Client | Config File | Platform |
|--------|------------|----------|
| Claude Desktop | `claude_desktop_config.json` | macOS: `~/Library/Application Support/Claude/` |
| | | Windows: `%APPDATA%\Claude\` |
| Claude Code | `settings.json` or MCP config | Project-level or user settings |
| Cline | `cline_mcp_settings.json` | VS Code extension settings |

## Server Configuration Schema

```json
{
  "mcpServers": {
    "server-name": {
      "command": "executable",
      "args": ["arg1", "arg2"],
      "env": {
        "API_KEY": "value"
      },
      "disabled": false
    }
  }
}
```

### Common Server Types

**Python Server (uvx)**:
```json
{
  "my-python-server": {
    "command": "uvx",
    "args": ["--from", "package-name", "server-command"]
  }
}
```

**Node Server (npx)**:
```json
{
  "my-node-server": {
    "command": "npx",
    "args": ["-y", "@scope/package-name"]
  }
}
```

**Local Development Server**:
```json
{
  "dev-server": {
    "command": "python",
    "args": ["-m", "my_server"],
    "env": {
      "DEBUG": "true"
    }
  }
}
```

## Troubleshooting Workflow

### Connection Issues

1. **Verify server starts independently**:
   ```bash
   # Test Python server
   python -m my_server
   
   # Test Node server
   npx -y @scope/package-name
   ```

2. **Check logs**:
   - Claude Desktop: `~/Library/Logs/Claude/mcp*.log`
   - Look for JSON-RPC errors, connection timeouts

3. **Validate JSON config**:
   ```bash
   python -c "import json; json.load(open('config.json'))"
   ```

4. **Common fixes**:
   - Use absolute paths for commands
   - Ensure dependencies installed in correct environment
   - Check API keys/env vars are set
   - Restart client after config changes

### Authentication Issues

1. **OAuth flows**: Ensure redirect URIs configured correctly
2. **API keys**: Verify env vars accessible to server process
3. **Token refresh**: Check token storage location and permissions

## Building Custom Servers

### Python Server (FastMCP)

```python
from fastmcp import FastMCP

mcp = FastMCP("my-server")

@mcp.tool()
def my_tool(param: str) -> str:
    """Tool description for the AI."""
    return f"Result: {param}"

@mcp.resource("resource://my-data")
def get_data() -> str:
    """Provide data as a resource."""
    return "Resource content"

if __name__ == "__main__":
    mcp.run()
```

### Node Server (MCP SDK)

```typescript
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";

const server = new Server({ name: "my-server", version: "1.0.0" }, {
  capabilities: { tools: {} }
});

server.setRequestHandler(ListToolsRequestSchema, async () => ({
  tools: [{
    name: "my_tool",
    description: "Tool description",
    inputSchema: { type: "object", properties: { param: { type: "string" } } }
  }]
}));

const transport = new StdioServerTransport();
await server.connect(transport);
```

## Multi-Server Orchestration

### Modular Architecture

Organize servers by domain:

```json
{
  "mcpServers": {
    "filesystem": { "command": "...", "args": ["--allowed-dirs", "/projects"] },
    "database": { "command": "...", "env": { "DB_URL": "..." } },
    "api-integrations": { "command": "...", "env": { "API_KEYS": "..." } },
    "custom-tools": { "command": "python", "args": ["-m", "my_tools"] }
  }
}
```

### Server Selection Strategy

Think of servers as modules in a synthesizer—patch them together based on workflow needs:

- **Development workflow**: filesystem + git + code-analysis servers
- **Research workflow**: web-search + document + note-taking servers
- **Data workflow**: database + visualization + export servers

## Performance Optimization

- **Lazy loading**: Only enable servers needed for current task
- **Caching**: Implement response caching for expensive operations
- **Timeout tuning**: Adjust timeouts for slow external APIs
- **Connection pooling**: Reuse connections in database servers

## References

- `references/server-templates.md` - Boilerplate for common server types
- `references/debugging-guide.md` - Detailed troubleshooting procedures
