mcp-servers/mcp-gateway/MCP_STACK_UPDATE.md

6.9 KiB

MCP Stack Update - RFP Scraper & LinkedIn MCPs Added

Summary

Your MCP gateway has been updated to support two new MCP backends:

  • RFP Scraper - For discovering and scraping RFP opportunities
  • LinkedIn - For professional networking and opportunity discovery

These complement your existing stack:

  • ERPNext (98 tools)
  • TrueNAS (35 tools)
  • Home Assistant (18 tools)
  • Wave Finance (22 tools)

Changes Made

1. docker-compose.yml

Added two new service definitions:

rfpscraper-mcp:
  build:
    context: ./rfpscraper-mcp
    dockerfile: Dockerfile
  container_name: mcp-rfpscraper
  ports: [8400]
  environment:
    - PORT=8400
    - RFP_API_KEY=${RFP_API_KEY}
    - RFP_BASE_URL=${RFP_BASE_URL}

linkedin-mcp:
  build:
    context: ./linkedin-mcp
    dockerfile: Dockerfile
  container_name: mcp-linkedin
  ports: [8500]
  environment:
    - PORT=8500
    - LINKEDIN_ACCESS_TOKEN=${LINKEDIN_ACCESS_TOKEN}
    - LINKEDIN_API_KEY=${LINKEDIN_API_KEY}

Updated gateway service to register backends:

- MCP_BACKEND_RFPSCRAPER=http://mcp-rfpscraper:8400/mcp
- MCP_BACKEND_LINKEDIN=http://mcp-linkedin:8500/mcp

2. .env File

Added configuration variables for both new MCPs:

# RFP Scraper MCP Server
RFP_API_KEY=${RFP_API_KEY}
RFP_BASE_URL=https://rfp.example.com

# LinkedIn MCP Server
LINKEDIN_ACCESS_TOKEN=${LINKEDIN_ACCESS_TOKEN}
LINKEDIN_API_KEY=${LINKEDIN_API_KEY}

Action required: Fill in these values with your actual API credentials.

3. gateway-proxy.py

Updated DISPLAY_NAMES mapping:

DISPLAY_NAMES = {
    "erpnext": "ERPNext",
    "truenas": "TrueNAS",
    "homeassistant": "Home Assistant",
    "wave": "Wave Finance",
    "rfpscraper": "RFP Scraper",      # NEW
    "linkedin": "LinkedIn",            # NEW
}

No other changes needed - The gateway automatically detects all MCP_BACKEND_* environment variables and registers them.

4. Dashboard

The dashboard (http://10.0.0.25:4444/dashboard) now shows:

  • RFP Scraper service health and tool count
  • LinkedIn service health and tool count
  • Updated summary showing all 6 services
  • Real-time probing of new backends

5. User Management Dashboard

Updated user management (http://10.0.0.25:4444/admin) MCP access control:

Now includes RFP Scraper and LinkedIn in the allow/block toggles:

availableMcps: ['erpnext', 'truenas', 'homeassistant', 'wave', 'rfpscraper', 'linkedin']

Users can now:

  • Allow/block access to RFP Scraper
  • Allow/block access to LinkedIn
  • Mix and match with existing MCPs

Deployment Steps

Step 1: Update .env Credentials

Edit .env and add your API credentials:

nano .env

# Add your actual credentials:
RFP_API_KEY=your_rfp_api_key_here
RFP_BASE_URL=your_rfp_base_url_here
LINKEDIN_ACCESS_TOKEN=your_linkedin_token_here
LINKEDIN_API_KEY=your_linkedin_api_key_here

Step 2: Rebuild and Restart

cd /path/to/mcp-gateway

# Rebuild containers
docker-compose down
docker-compose build

# Start all services
docker-compose up -d

Step 3: Verify New Services

Check the dashboard:

# Access dashboard
http://10.0.0.25:4444/dashboard

# Or check status endpoint
curl http://10.0.0.25:4444/dashboard/status | jq

You should see:

{
  "services": [
    {"name": "ERPNext", "status": "healthy", "toolCount": 98},
    {"name": "TrueNAS", "status": "healthy", "toolCount": 35},
    {"name": "Home Assistant", "status": "healthy", "toolCount": 18},
    {"name": "Wave Finance", "status": "healthy", "toolCount": 22},
    {"name": "RFP Scraper", "status": "healthy", "toolCount": XX},
    {"name": "LinkedIn", "status": "healthy", "toolCount": XX}
  ],
  "summary": {
    "total": 6,
    "healthy": 6,
    "unhealthy": 0,
    "totalTools": YYYY
  }
}

Step 4: Grant User Access

In the user management dashboard (http://10.0.0.25:4444/admin):

  1. Select a user
  2. Toggle RFP Scraper and/or LinkedIn in the MCP Access Control section
  3. Save

Or via API:

curl -X PUT http://10.0.0.25:4444/users/alice/mcp-access \
  -H "Content-Type: application/json" \
  -d '{
    "allowed_mcps": ["erpnext", "rfpscraper", "linkedin"],
    "blocked_mcps": []
  }'

Architecture

Updated MCP stack diagram:

┌─────────────────────────────────────────────────────────┐
│                  MCP Gateway (port 4444)                │
│              (OAuth2 + User Management)                 │
└──────────────────────┬──────────────────────────────────┘
                       │
       ┌───────────────┼───────────────┐
       │               │               │
   ┌───▼────┐  ┌──────▼──┐  ┌────────▼────┐
   │ERPNext │  │TrueNAS  │  │Home Assistant│
   │(98)    │  │(35)     │  │(18)         │
   └────────┘  └─────────┘  └─────────────┘
       │               │               │
   ┌───▼────┐  ┌──────▼──┐  ┌────────▼────┐
   │Wave    │  │RFP      │  │LinkedIn     │
   │Finance │  │Scraper  │  │(NEW)        │
   │(22)    │  │(NEW)    │  │             │
   └────────┘  └─────────┘  └─────────────┘

Total Capacity

Your gateway now provides access to 6 independent MCP backends with:

  • 173+ tools from original 4 MCPs
  • XX+ tools from RFP Scraper
  • XX+ tools from LinkedIn
  • Total: XXX+ tools across all services

Troubleshooting

Services showing as unhealthy

  1. Check containers are running:

    docker-compose ps
    
  2. Check logs:

    docker-compose logs rfpscraper-mcp
    docker-compose logs linkedin-mcp
    
  3. Verify environment variables are set:

    docker-compose config | grep -E "RFP_|LINKEDIN_"
    

Dashboard not showing new services

  1. Hard refresh browser: Ctrl+Shift+R (or Cmd+Shift+R on Mac)
  2. Check /dashboard/status endpoint directly:
    curl http://10.0.0.25:4444/dashboard/status
    

API key not working for new MCPs

  1. Make sure user has access configured in user dashboard
  2. Check user's MCP access list:
    curl http://10.0.0.25:4444/users/{username} | jq .user.mcp_allowed
    

Next Steps

  1. Configure .env credentials for RFP Scraper and LinkedIn
  2. Deploy updated stack
  3. Verify services are healthy
  4. Grant users access to new MCPs
  5. Test API key authentication with new services

Your MCP gateway is now ready to integrate job search and professional networking capabilities!