mcp-servers/DEPLOYMENT_GUIDE.md
2026-03-31 15:29:21 -04:00

7.3 KiB

MCP Job Search Stack - Deployment Guide

This guide walks you through setting up and deploying your two new MCPs for job searching and RFP discovery.

Overview

You now have two complementary MCPs:

  1. rfp-scraper-mcp-server - Discovers RFPs and freelance opportunities for control room and broadcast studio projects
  2. linkedin-mcp-server - Searches LinkedIn jobs and manages professional networking

Quick Start

1. Build Both MCPs

# Build RFP Scraper MCP
cd /sessions/focused-busy-tesla/mnt/MCP\ Servers/rfp-scraper-mcp-server
npm install
npm run build

# Build LinkedIn MCP
cd /sessions/focused-busy-tesla/mnt/MCP\ Servers/linkedin-mcp-server
npm install
npm run build

2. Verify Build Success

Both should complete without errors and create a dist/ directory with compiled JavaScript.

# Test RFP Scraper
node rfp-scraper-mcp-server/dist/index.js --version

# Test LinkedIn
node linkedin-mcp-server/dist/index.js --version

Integration with mcp-gateway

Your MCPs are designed to integrate with your existing mcp-gateway at mcp.wilddragon.net.

Configuration

Add to your mcp-gateway configuration:

{
  "mcpServers": {
    "rfp-scraper": {
      "command": "node",
      "args": ["/path/to/rfp-scraper-mcp-server/dist/index.js"],
      "env": {
        "RFP_SCRAPER_API_KEY": "${RFP_SCRAPER_API_KEY}"
      }
    },
    "linkedin": {
      "command": "node",
      "args": ["/path/to/linkedin-mcp-server/dist/index.js"],
      "env": {
        "LINKEDIN_ACCESS_TOKEN": "${LINKEDIN_ACCESS_TOKEN}"
      }
    }
  }
}

Environment Variables

For RFP Scraper:

export RFP_SCRAPER_API_KEY=your_api_key  # Optional, for enhanced features

For LinkedIn:

export LINKEDIN_ACCESS_TOKEN=your_access_token  # Required for connection requests

Get your LinkedIn access token from: https://linkedin.com/developers

Features by MCP

RFP Scraper MCP (rfp-scraper-mcp-server)

Tools available:

  • rfp_search_projects - Search for RFP opportunities
  • rfp_get_project_details - Get detailed project information
  • rfp_filter_by_budget - Filter projects by budget range

Example Usage:

Search for control room projects:
  keywords: ["control room", "broadcast studio"]
  limit: 20

Find high-budget opportunities:
  minBudget: 10000
  maxBudget: 50000

LinkedIn MCP (linkedin-mcp-server)

Tools available:

  • linkedin_search_jobs - Search for jobs
  • linkedin_get_job_details - Get job information
  • linkedin_search_profiles - Find professionals
  • linkedin_send_connection - Connect with professionals
  • linkedin_get_profile - View profiles

Example Usage:

Search for broadcast jobs:
  keywords: "broadcast engineer"
  jobType: "FREELANCE"

Find industry professionals:
  keywords: "broadcast systems"
  industry: "Broadcasting"

Development Mode

For local testing and development:

# Terminal 1: RFP Scraper
cd rfp-scraper-mcp-server
npm run dev

# Terminal 2: LinkedIn
cd linkedin-mcp-server
npm run dev

This uses tsx to watch for changes and auto-reload.

Testing the MCPs

Using MCP Inspector

Test individual MCPs with the MCP Inspector:

# Test RFP Scraper
npx @modelcontextprotocol/inspector node rfp-scraper-mcp-server/dist/index.js

# Test LinkedIn
npx @modelcontextprotocol/inspector node linkedin-mcp-server/dist/index.js

The inspector provides a web interface to:

  • List available tools
  • Test tool calls
  • View responses
  • Debug issues

Manual Testing

# Build both
npm run build

# Run and test
node rfp-scraper-mcp-server/dist/index.js

# In another terminal, send test request via stdin
echo '{"jsonrpc":"2.0","id":1,"method":"resources/list"}' | node rfp-scraper-mcp-server/dist/index.js

Architecture Notes

RFP Scraper

  • Service: services/scraper.ts - Core scraping and filtering logic
  • Transport: stdio (local) - designed for mcp-gateway integration
  • Error Handling: Graceful handling of API errors and timeouts
  • Pagination: Supports offset-based pagination for large result sets

LinkedIn

  • Service: services/linkedin-client.ts - LinkedIn API client
  • Transport: stdio (local) - designed for mcp-gateway integration
  • Mock Data: Currently uses mock data for development. Replace with real API calls once authenticated.
  • Authentication: Supports LinkedIn OAuth tokens

Production Deployment

Prerequisites

  • Node.js 18+
  • npm or yarn
  • Valid API credentials (LinkedIn token, etc.)

Deployment Steps

  1. Install dependencies on production server:

    npm install --production
    npm run build
    
  2. Set environment variables:

    export LINKEDIN_ACCESS_TOKEN=prod_token
    export RFP_SCRAPER_API_KEY=prod_key
    
  3. Run MCPs via process manager (PM2):

    pm2 start rfp-scraper-mcp-server/dist/index.js --name rfp-scraper
    pm2 start linkedin-mcp-server/dist/index.js --name linkedin
    
  4. Monitor:

    pm2 logs
    pm2 status
    

Troubleshooting

Build Fails

  • Ensure Node.js 18+ is installed: node --version
  • Clear npm cache: npm cache clean --force
  • Rebuild: rm -rf node_modules dist && npm install && npm run build

Tools Not Appearing

  • Check server started successfully: npm start
  • Verify no TypeScript errors: npm run build
  • Check tool names match exactly in your calls

API Errors

  • Verify environment variables are set: echo $LINKEDIN_ACCESS_TOKEN
  • Check API credentials are valid
  • Review error messages for guidance on next steps

Connection Issues

  • Ensure mcp-gateway can reach the servers
  • Check firewall rules if using remote deployment
  • Verify stdio transport is properly configured

Next Steps

  1. Authenticate with APIs:

  2. Test Integration:

    • Run MCPs locally first
    • Test with MCP Inspector
    • Verify with mcp-gateway
  3. Customize:

    • Modify scraper keywords and sources as needed
    • Adjust job search filters
    • Add additional tools based on your workflow
  4. Monitor Usage:

    • Track API rate limits
    • Monitor performance metrics
    • Adjust pagination limits if needed

File Structure

MCP Servers/
├── rfp-scraper-mcp-server/
│   ├── src/
│   │   ├── index.ts
│   │   ├── types.ts
│   │   ├── constants.ts
│   │   └── services/
│   │       └── scraper.ts
│   ├── dist/
│   │   └── index.js (generated)
│   ├── package.json
│   ├── tsconfig.json
│   └── README.md
├── linkedin-mcp-server/
│   ├── src/
│   │   ├── index.ts
│   │   ├── types.ts
│   │   ├── constants.ts
│   │   └── services/
│   │       └── linkedin-client.ts
│   ├── dist/
│   │   └── index.js (generated)
│   ├── package.json
│   ├── tsconfig.json
│   └── README.md
└── DEPLOYMENT_GUIDE.md (this file)

Support

For issues or questions:

  1. Check individual README files in each MCP directory
  2. Review error messages - they include suggested next steps
  3. Check TypeScript compilation for type errors
  4. Verify environment variables are set correctly

Last Updated: 2026-03-31 Version: 1.0.0