From 3de7a9d493df1bb93962a9213038bbad6d01b4e8 Mon Sep 17 00:00:00 2001 From: zgaetano Date: Tue, 31 Mar 2026 15:29:21 -0400 Subject: [PATCH] Add DEPLOYMENT_GUIDE.md --- DEPLOYMENT_GUIDE.md | 304 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 304 insertions(+) create mode 100644 DEPLOYMENT_GUIDE.md diff --git a/DEPLOYMENT_GUIDE.md b/DEPLOYMENT_GUIDE.md new file mode 100644 index 0000000..24e5e4e --- /dev/null +++ b/DEPLOYMENT_GUIDE.md @@ -0,0 +1,304 @@ +# 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