# MCP Setup

> This skill handles Model Context Protocol (MCP) server configuration, troubleshooting, and integration for StepCountLeague v3. Use this when:

- Skill: `majiayu000/mcp-setup` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add majiayu000/mcp-setup`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/mcp-setup/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/mcp-setup

---


---
name: mcp-setup
description: MCP server configuration and management. Use when setting up MCP servers, troubleshooting MCP issues, or adding new integrations. Keywords: MCP, model context protocol, supabase, posthog, playwright, gtm, analytics, mcp.json, environment variables, oauth
compatibility: Claude Code
metadata:
  version: "1.0"
  project: "stepleague"
  last_updated: "2026-01-24"
---

# MCP Setup Skill

## Overview

This skill handles Model Context Protocol (MCP) server configuration, troubleshooting, and integration for StepCountLeague v3. Use this when:
- Setting up new MCP servers
- Debugging MCP connection issues
- Managing authentication for MCP services
- Updating MCP configurations

## Key Files

| File | Purpose |
|------|---------|
| `.mcp.json` | Primary Claude Code MCP configuration |
| `.vscode/mcp.json` | VS Code MCP extension compatibility |
| `.env.local` | Environment variables for MCP authentication |
| `.agent/MCP.md` | Comprehensive MCP documentation |

## Configured MCP Servers

### Active Servers (5 total)

1. **Supabase MCP** - Database access
   - Type: HTTP Remote
   - Auth: Project reference in URL
   - Config: `.mcp.json`, `.vscode/mcp.json`

2. **PostHog MCP** - Analytics querying
   - Type: HTTP with Bearer token
   - Auth: `POSTHOG_MCP_TOKEN` environment variable
   - Config: `.mcp.json`, `.vscode/mcp.json`

3. **Google Tag Manager MCP** - GTM management
   - Type: stdio via mcp-remote
   - Auth: Google OAuth (browser popup)
   - Config: `.mcp.json`, `.vscode/mcp.json`

4. **Google Analytics 4 MCP** - GA4 reporting
   - Type: stdio via mcp-remote
   - Auth: Google OAuth (browser popup)
   - Config: `.mcp.json`, `.vscode/mcp.json`

5. **Playwright MCP** - Browser automation
   - Type: stdio via npx
   - Auth: None (local tool)
   - Config: `.mcp.json`, `.vscode/mcp.json`

## Critical Rules

> [!WARNING]
> **Always follow these rules when working with MCP servers:**

### 1. Never Hardcode Tokens

**❌ WRONG:**
```json
{
  "posthog": {
    "headers": {
      "Authorization": "Bearer phx_hardcoded_token_here"
    }
  }
}
```

**✅ CORRECT:**
```json
{
  "posthog": {
    "headers": {
      "Authorization": "Bearer ${POSTHOG_MCP_TOKEN}"
    }
  }
}
```

### 2. Keep Both Config Files in Sync

When adding/updating MCP servers:
1. Update `.mcp.json` (Claude Code)
2. Update `.vscode/mcp.json` (VS Code MCP extension)
3. Keep server names and configurations consistent

### 3. Document New Servers

When adding a new MCP server:
1. Add configuration to `.mcp.json`
2. Add environment variables to `.env.local` (if needed)
3. Document in `.agent/MCP.md`
4. Test with `/mcp` command in Claude Code

### 4. Use Environment Variables

All sensitive tokens must be in `.env.local`:
```env
# ❌ Never in .mcp.json
# ✅ Always in .env.local
POSTHOG_MCP_TOKEN=phx_xxx...
SUPABASE_MCP_ACCESS_TOKEN=sbp_xxx...
```

## Common Tasks

### Adding a New MCP Server

**Step 1:** Choose the server type

**HTTP Server with Bearer Token:**
```json
{
  "server-name": {
    "type": "http",
    "url": "https://api.example.com/mcp",
    "headers": {
      "Authorization": "Bearer ${SERVER_TOKEN}"
    },
    "description": "Brief description of what this server does"
  }
}
```

**stdio Server via npx:**
```json
{
  "server-name": {
    "type": "stdio",
    "command": "npx",
    "args": ["-y", "package-name@version"],
    "description": "Brief description of what this server does"
  }
}
```

**Step 2:** Add to `.mcp.json`

Edit: `D:\Vasso\coding projects\SCL v3 AG\scl-v3\.mcp.json`

**Step 3:** Add environment variables (if needed)

Edit: `D:\Vasso\coding projects\SCL v3 AG\scl-v3\.env.local`
```env
# New MCP Server
# Get from: [URL to token generation]
# Description of what the token is for
SERVER_TOKEN=xxx...
```

**Step 4:** Document the server

Edit: `D:\Vasso\coding projects\SCL v3 AG\scl-v3\.agent\MCP.md`

Add a new section describing:
- Purpose and capabilities
- Authentication method
- Environment variables used
- Official documentation links

**Step 5:** Test the connection

In Claude Code CLI:
```bash
/mcp
# Verify the server appears in the list with status
```

### Troubleshooting MCP Connection Issues

#### Issue: Server Not Listed in `/mcp`

**Diagnostic Steps:**
1. Check `.mcp.json` syntax:
   ```bash
   # Validate JSON syntax
   node -e "JSON.parse(require('fs').readFileSync('.mcp.json', 'utf8'))"
   ```

2. Verify environment variables:
   ```bash
   # Check if token is set (Windows)
   echo %POSTHOG_MCP_TOKEN%
   ```

3. Restart Claude Code CLI completely

4. Check for typos in server name

**Fix:**
- Ensure `.mcp.json` is valid JSON
- Verify environment variable names match exactly (case-sensitive)
- Check for trailing commas in JSON

#### Issue: Authentication Failed (HTTP Servers)

**Diagnostic Steps:**
1. Verify environment variable is set and loaded
2. Check token format (e.g., PostHog uses `phx_` not `phc_`)
3. Test token manually with curl:
   ```bash
   curl -H "Authorization: Bearer $POSTHOG_MCP_TOKEN" https://mcp.posthog.com/mcp
   ```

**Fix:**
- Generate new token from service provider
- Update `.env.local` with correct token
- Restart Claude Code to reload environment variables

#### Issue: OAuth Popup Blocked (GTM/GA4)

**Diagnostic Steps:**
1. Check browser popup blocker settings
2. Verify default browser is set correctly
3. Check if OAuth redirect URL is allowed

**Fix:**
- Disable popup blocker for localhost/Claude Code
- Use a different browser as default temporarily
- Clear browser cache and try again

#### Issue: npx Command Fails (Playwright)

**Diagnostic Steps:**
1. Verify npx is in PATH:
   ```bash
   where npx
   # Should return: C:\Program Files\nodejs\npx.cmd
   ```

2. Test manual execution:
   ```bash
   npx -y @executeautomation/playwright-mcp-server
   ```

3. Check internet connection (first run downloads package)

**Fix:**
- Reinstall Node.js if npx not found
- Clear npx cache: `npx clear-npx-cache`
- Check Windows Firewall settings

### Updating MCP Server Configurations

**Scenario:** Update PostHog MCP endpoint or token

**Step 1:** Update `.mcp.json`:
```json
{
  "posthog": {
    "type": "http",
    "url": "https://new-endpoint.posthog.com/mcp",
    "headers": {
      "Authorization": "Bearer ${POSTHOG_MCP_TOKEN}"
    }
  }
}
```

**Step 2:** Update `.vscode/mcp.json` to match (if needed)

**Step 3:** Update environment variable:
```env
# .env.local
POSTHOG_MCP_TOKEN=phx_new_token_here
```

**Step 4:** Restart Claude Code CLI

**Step 5:** Verify with `/mcp`

### Rotating MCP Tokens

**Best Practice:** Rotate tokens every 90 days

**Step 1:** Generate new token from service provider:
- PostHog: https://app.posthog.com/settings/user-api-keys
- Supabase: https://supabase.com/dashboard/account/tokens

**Step 2:** Update `.env.local`:
```env
# Old token (keep temporarily for rollback)
# POSTHOG_MCP_TOKEN=phx_old_token

# New token
POSTHOG_MCP_TOKEN=phx_new_token
```

**Step 3:** Test connection

**Step 4:** Delete old token from provider once confirmed working

**Step 5:** Remove old token comment from `.env.local`

## Verification Checklist

After any MCP configuration changes:

- [ ] `.mcp.json` is valid JSON
- [ ] Environment variables set in `.env.local`
- [ ] Both `.mcp.json` and `.vscode/mcp.json` updated (if applicable)
- [ ] Documentation updated in `.agent/MCP.md`
- [ ] Claude Code CLI restarted
- [ ] `/mcp` command shows server with ✅ status
- [ ] Server tools loadable via ToolSearch
- [ ] Test query/command executed successfully

## Environment Variable Reference

Current MCP-related environment variables:

```env
# Supabase MCP (optional - project_ref provides read-only)
SUPABASE_MCP_ACCESS_TOKEN=sbp_xxx...

# PostHog MCP (required for MCP server)
# NOTE: Different from app token (phc_ prefix)
POSTHOG_MCP_TOKEN=phx_xxx...

# No environment variables needed for:
# - Google Tag Manager MCP (OAuth)
# - Google Analytics 4 MCP (OAuth)
# - Playwright MCP (local tool)
```

## Server Configuration Template

Use this template when adding new MCP servers:

```json
{
  "mcpServers": {
    "existing-servers": "...",

    "new-server-name": {
      "type": "http|stdio",
      "url": "https://api.example.com/mcp",
      "command": "npx",
      "args": ["-y", "package-name"],
      "headers": {
        "Authorization": "Bearer ${ENV_VAR_NAME}"
      },
      "env": {
        "CUSTOM_ENV": "${CUSTOM_ENV_VAR}"
      },
      "description": "Clear description of server purpose"
    }
  }
}
```

**Choose type:**
- `http` - For HTTP/HTTPS MCP servers
- `stdio` - For command-line MCP servers (npx, python, etc.)

**HTTP servers need:**
- `url` - The MCP endpoint URL
- `headers` (optional) - Authentication headers
- `description` - Brief purpose description

**stdio servers need:**
- `command` - The executable (e.g., "npx", "python")
- `args` - Command arguments
- `env` (optional) - Environment variables for the command
- `description` - Brief purpose description

## Windows-Specific Notes

### Path Handling
- Use forward slashes: `/` not `\`
- Environment variables: `${VAR_NAME}`
- User profile: `${USERPROFILE}` or `%USERPROFILE%`

### Command Execution
- npx commands run via Git Bash (if available)
- Claude Code handles Windows/Unix path translation
- No need for `cmd /c` prefix

### OAuth Flows
- Default browser must be set in Windows
- OAuth redirects to localhost
- Check Windows Firewall for localhost blocking

### Debugging
```bash
# Check environment variable (PowerShell)
$env:POSTHOG_MCP_TOKEN

# Check environment variable (Git Bash)
echo $POSTHOG_MCP_TOKEN

# List environment variables
env | grep MCP
```

## Related Skills

- **supabase-patterns** - Using Supabase MCP for database operations
- **analytics-tracking** - Integrating PostHog/GA4 MCP for analytics queries
- **testing-patterns** - Using Playwright MCP for E2E testing

## References

**Documentation:**
- `.agent/MCP.md` - Comprehensive MCP documentation
- `CLAUDE.md` - Project context including MCP servers

**External Resources:**
- [MCP Specification](https://spec.modelcontextprotocol.io/)
- [Claude Code MCP Docs](https://docs.anthropic.com/en/docs/claude-code/mcp)
- [MCP Registry](https://mcp.directory/)

**Configured Servers:**
- [Supabase MCP](https://supabase.com/docs/guides/getting-started/mcp)
- [PostHog MCP](https://posthog.com/docs/model-context-protocol)
- [Stape GTM MCP](https://stape.io/helpdesk/documentation/how-to-set-up-mcp-server-for-gtm)
- [Stape GA4 MCP](https://stape.io/helpdesk/documentation/how-to-set-up-mcp-server-for-ga4)
- [Playwright MCP](https://github.com/executeautomation/mcp-playwright)

---

**Version:** 1.0
**Last Updated:** 2026-01-24
**Compatibility:** Claude Code
**Project:** StepCountLeague v3

