MCP Server Stacking: One Data Source is Data, Two is Intelligence

Table of content

A single MCP server gives Claude access to one data source. Two servers give it the ability to correlate across domains. Three or more create a personal operating system where AI understands context that spans your entire digital life.

This guide shows how to stack MCP servers for compounding intelligence, with configuration patterns that actually work.

Why stacking matters

Each MCP server is isolated. Garmin MCP knows your sleep data. Strava MCP knows your workout performance. Neither knows about the other.

When you connect both to Claude, something new happens: the AI can correlate sleep quality with next-day performance. It can identify patterns you would never find manually.

Single serverStacked servers
“Your HRV was 45 yesterday”“Your HRV dropped to 45 after three consecutive hard workout days”
“You rode 50km on Saturday”“Your Saturday rides average 20% slower when sleep dips below 7 hours”
Raw data retrievalCross-domain pattern recognition

Brian Christner’s Human OS demonstrates this with fitness data: stacking Garmin and Strava MCPs increased his PR attempt success rate from 35% to 71%. The servers individually could not predict readiness. Together, they could.

Architecture

Claude acts as the integration layer. Each MCP server exposes tools and resources through a standard protocol. Claude can call any combination of tools in a single response.

[You] → [Claude] → [MCP Server A] → External Service A
                 → [MCP Server B] → External Service B
                 → [MCP Server C] → External Service C

The key insight: servers do not communicate with each other. All correlation happens in Claude’s context window. This means you pay no engineering cost for integration between domains.

Configuration

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json on macOS:

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxx"
      }
    },
    "postgres": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "DATABASE_URL": "postgresql://user:pass@localhost/db"
      }
    },
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed/dir"]
    }
  }
}

Claude Code

# Add servers individually
claude mcp add github --command "npx -y @modelcontextprotocol/server-github"
claude mcp add postgres --command "npx -y @modelcontextprotocol/server-postgres"

# Or edit ~/.claude/mcp.json directly for complex configs

Verify your stack:

claude mcp list
claude mcp status

Effective stacks

Developer workflow

GitHub MCP + Postgres MCP + Filesystem MCP

What this enables:

Research and writing

Exa MCP + Obsidian MCP + Browser MCP

What this enables:

Simon Willison’s workflow shows how tools like llm and datasette connect through SQLite. MCP stacking follows the same principle: small tools composed into larger capabilities.

Business intelligence

CRM MCP + Calendar MCP + Slack MCP

What this enables:

Prompting stacked servers

Claude needs explicit instruction to use multiple servers together. Otherwise it may only query one.

Weak promptStrong prompt
“What’s my schedule?”“Check my calendar for today, then look up each meeting attendee in the CRM”
“How did I sleep?”“Get my sleep data from Garmin and correlate it with yesterday’s Strava workout”

The pattern: name the servers or data sources you want involved.

Common mistakes

MistakeWhy it failsFix
Too many servers at onceContext window fills with tool descriptions, less room for actual reasoningStart with 2-3 servers, add more as needed
Overlapping capabilitiesMultiple servers that do the same thing confuse tool selectionPick one server per domain
No explicit correlation requestClaude queries one server and stopsPrompt with “combine” or “correlate” or name both sources
Secrets in config fileCommitting API keys to version controlUse environment variables, add config to .gitignore
Servers that require different runtimesPython server mixed with Node server causes dependency confusionStandardize on one runtime where possible, or use Docker

Performance considerations

Each MCP server is a separate process. Ten servers means ten processes consuming memory. On a typical machine:

Server countMemory overheadStartup time
1-3NegligibleInstant
4-7~500MB2-3 seconds
8+1GB+5+ seconds

If you hit performance issues, remove servers you do not use daily. Add them back when needed for specific tasks.

Building your own stack

Week 1: Pick one domain (fitness, work, or research) and add two complementary servers. Ask questions that require both.

Week 2: Add a third server from a different domain. Practice prompts that span all three.

Week 3: Audit which servers you actually use. Remove dormant ones. Add new ones for gaps you notice.

The goal is not maximum servers. It is maximum insight per server.


Next: Building Your First MCP Server

Topics: mcp personal-os architecture