# 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 ```bash # 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. ```bash # 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: ```json { "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:** ```bash export RFP_SCRAPER_API_KEY=your_api_key # Optional, for enhanced features ``` **For LinkedIn:** ```bash 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: ```bash # 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: ```bash # 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 ```bash # 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:** ```bash npm install --production npm run build ``` 2. **Set environment variables:** ```bash export LINKEDIN_ACCESS_TOKEN=prod_token export RFP_SCRAPER_API_KEY=prod_key ``` 3. **Run MCPs via process manager (PM2):** ```bash pm2 start rfp-scraper-mcp-server/dist/index.js --name rfp-scraper pm2 start linkedin-mcp-server/dist/index.js --name linkedin ``` 4. **Monitor:** ```bash 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:** - Get LinkedIn access token: https://linkedin.com/developers - Set up any RFP API keys if needed 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