# 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: ```yaml 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: ```env # 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: ```python 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: ```javascript 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: ```bash 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 ```bash 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: ```bash # 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: ```json { "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: ```bash 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: ```bash docker-compose ps ``` 2. Check logs: ```bash docker-compose logs rfpscraper-mcp docker-compose logs linkedin-mcp ``` 3. Verify environment variables are set: ```bash 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: ```bash 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: ```bash 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!