Lesson 33 of 46 ~25 min
Course progress
0%

Official MCP Servers & Multi-Server Workflows

Tour the official MCP servers — filesystem, GitHub, PostgreSQL, Puppeteer, Slack, Google Maps, Sentry — and learn to chain them for complex workflows.

Anthropic and the open-source community maintain a growing library of official MCP servers. Each server wraps an external system with a standardized interface — install it, configure it, and Claude can use it immediately.

Official MCP Server Catalog

graph LR
    subgraph "Data & Storage"
        FS[Filesystem]
        PG[PostgreSQL]
        SQ[SQLite]
    end
    subgraph "Developer Tools"
        GH[GitHub]
        SE[Sentry]
        PP[Puppeteer]
    end
    subgraph "Communication"
        SL[Slack]
        GM[Google Maps]
    end
    subgraph "Claude Desktop"
        C[Claude]
    end
    C --- FS
    C --- PG
    C --- SQ
    C --- GH
    C --- SE
    C --- PP
    C --- SL
    C --- GM

Filesystem Server

Gives Claude controlled access to the local filesystem. The key security feature: you define exactly which directories are accessible.

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y", "@modelcontextprotocol/server-filesystem",
        "/Users/dev/project/src",
        "/Users/dev/project/docs"
      ]
    }
  }
}

Exposed tools:

  • read_file — Read contents of a file
  • write_file — Write content to a file
  • list_directory — List files and directories
  • search_files — Recursive content search
  • move_file — Rename or move a file
  • get_file_info — File metadata (size, timestamps)

Security: Only paths under the explicitly listed directories are accessible. Symlink traversal is blocked. This is how you give Claude write access without giving it your entire disk.

GitHub Server

Full GitHub API access — issues, pull requests, repositories, code search.

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_..."
      }
    }
  }
}

Key tools:

  • create_or_update_file — Commit file changes directly
  • search_repositories / search_code — GitHub search
  • create_issue / list_issues — Issue management
  • create_pull_request / get_pull_request_diff — PR workflows
  • create_branch / list_branches — Branch management

Token scoping: Create a fine-grained personal access token with only the permissions needed. For read-only analysis, the repo:read scope is sufficient.

PostgreSQL Server

Read-only database access with schema introspection.

{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": [
        "-y", "@modelcontextprotocol/server-postgres",
        "postgresql://readonly_user:password@localhost:5432/mydb"
      ]
    }
  }
}

Exposed tools:

  • query — Execute read-only SQL queries
  • list_tables — Show all tables
  • describe_table — Column definitions and constraints

Best practice: Always use a read-only database user. The server enforces SELECT-only at the application level, but a read-only database role provides defense in depth.

Puppeteer Server

Browser automation — Claude can navigate web pages, take screenshots, fill forms, and extract content.

{
  "mcpServers": {
    "puppeteer": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-puppeteer"]
    }
  }
}

Key tools:

  • puppeteer_navigate — Open a URL
  • puppeteer_screenshot — Capture the current page
  • puppeteer_click — Click an element by selector
  • puppeteer_fill — Type text into an input field
  • puppeteer_evaluate — Run JavaScript in the page context

Use case: Claude can visually inspect a deployed application, verify that a UI bug is fixed, or scrape data from pages that require JavaScript rendering.

Slack Server

Read and post messages in Slack workspaces.

{
  "mcpServers": {
    "slack": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-slack"],
      "env": {
        "SLACK_BOT_TOKEN": "xoxb-...",
        "SLACK_TEAM_ID": "T0123456789"
      }
    }
  }
}

Key tools:

  • slack_list_channels — List available channels
  • slack_post_message — Send a message to a channel
  • slack_reply_to_thread — Reply in a thread
  • slack_get_channel_history — Read recent messages
  • slack_search_messages — Search across channels

Scoping: Create a dedicated Slack app with minimal permissions. Post only to designated channels — never give Claude access to DMs or private channels without explicit need.

Google Maps Server

Geocoding, directions, and place search.

{
  "mcpServers": {
    "google-maps": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-google-maps"],
      "env": {
        "GOOGLE_MAPS_API_KEY": "AIza..."
      }
    }
  }
}

Key tools:

  • maps_geocode — Convert address to coordinates
  • maps_reverse_geocode — Convert coordinates to address
  • maps_directions — Route between two points
  • maps_search_places — Search for businesses and landmarks

Sentry Server

Error tracking and issue management directly from Claude.

{
  "mcpServers": {
    "sentry": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-sentry"],
      "env": {
        "SENTRY_AUTH_TOKEN": "sntrys_...",
        "SENTRY_ORG": "my-org"
      }
    }
  }
}

Key tools:

  • list_projects — List Sentry projects
  • list_issues — List error issues with frequency data
  • get_issue_details — Full stack trace and context
  • resolve_issue — Mark an issue as resolved

Workflow: Claude reads Sentry errors, cross-references with the codebase (via filesystem server), and proposes fixes.

Full Multi-Server Configuration

Here is a production Claude Desktop configuration that chains multiple servers:

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y", "@modelcontextprotocol/server-filesystem",
        "/Users/dev/project/src",
        "/Users/dev/project/tests",
        "/Users/dev/project/docs"
      ]
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_..."
      }
    },
    "postgres": {
      "command": "npx",
      "args": [
        "-y", "@modelcontextprotocol/server-postgres",
        "postgresql://readonly:pass@localhost:5432/myapp"
      ]
    },
    "sentry": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-sentry"],
      "env": {
        "SENTRY_AUTH_TOKEN": "sntrys_...",
        "SENTRY_ORG": "my-org"
      }
    }
  }
}

Chaining Servers — Real Workflow Examples

The power of MCP is composition. With multiple servers configured, Claude can execute multi-step workflows that span systems.

Workflow 1: Bug Diagnosis and Fix

User: "Fix the top Sentry error in the payments module"

Claude's tool chain:
1. sentry → list_issues (filter: payments, sort: frequency)
2. sentry → get_issue_details (top issue — get stack trace)
3. filesystem → read_file (read the file from the stack trace)
4. filesystem → search_files (find related callers)
5. filesystem → write_file (apply the fix)
6. github → create_branch ("fix/payment-timeout")
7. github → create_or_update_file (commit the change)
8. github → create_pull_request (open PR with Sentry link)

Workflow 2: Database-Driven Documentation

User: "Document the schema of our user tables and update the wiki"

Claude's tool chain:
1. postgres → list_tables (find all user-related tables)
2. postgres → describe_table (for each: users, user_roles, user_sessions)
3. postgres → query (sample data to understand relationships)
4. filesystem → write_file (generate docs/schema/users.md)
5. github → create_pull_request (submit documentation PR)

Workflow 3: Incident Response

User: "We're getting 500 errors on /api/orders — investigate"

Claude's tool chain:
1. sentry → list_issues (filter: /api/orders, last 1 hour)
2. sentry → get_issue_details (get stack trace and request data)
3. postgres → query (check orders table for anomalies)
4. filesystem → read_file (read the orders endpoint code)
5. filesystem → search_files (find the failing dependency)
6. slack → slack_post_message (#incidents: post initial findings)
7. filesystem → write_file (apply fix)
8. slack → slack_reply_to_thread (update: fix deployed)

Performance Considerations

FactorImpactMitigation
Server startup timeEach stdio server spawns a processUse persistent HTTP servers for latency-sensitive workflows
Sequential tool callsEach call is a round tripDesign tools that return rich data to reduce call count
Token overheadTool schemas consume input tokensKeep descriptions concise — every word counts
Concurrent serversMemory usage scales with server countOnly enable servers you actively use

Discovering More Servers

The MCP ecosystem is growing rapidly:

# Browse the official registry
npx @modelcontextprotocol/registry list

# Search for a specific integration
npx @modelcontextprotocol/registry search "jira"

Community servers follow the same protocol — if it implements MCP, it works with Claude.

In the next lesson, you will learn how to secure MCP servers for enterprise deployments — path restrictions, sandboxing, audit logging, and token scoping.