# Run the MCP server
cd /path/to/pathwise && python server.py
# Test server with tools/list
printf '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}\n{"jsonrpc":"2.0","method":"notifications/initialized","params":{}}\n{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}\n' | python server.py
- FastMCP stdio transport — Requires proper initialize handshake before tools/list calls.
- Profile auto-seeded — On first run, a default profile with Jonatthan's data is created.
- 24 tools total — Profile (5), Jobs (2), Applications (7), Cover Letters (2), CV (1), Auto-Apply (5), Status (1), Linkedin Search/Scroll (2).
- RouteMCP dependency — AI features (cover letters, persona generation, AI CV parsing, AI job matching) require RouteMCP running.
ROUTEMCP_ENABLED env var controls this.
- BrowserMCP dependency —
linkedin_search, auto_apply_pipeline, fill_application_field, click_application_button require BrowserMCP with Selenium engine (Chromium via snap).
- 7 job scrapers — ChileTrabajos, CompuTrabajo, Laborum, Indeed, GetOnBoard, Trabajando.cl, RemoteOK. All async httpx+bs4 except Laborum which uses JSON API with JWT auth. May break if job board HTML changes.
- AI matching —
job_search(use_ai=True) sends top 15 jobs to RouteMCP for smart scoring (0-100) with reasons.
- LinkedIn — Uses BrowserMCP+Selenium subprocess to navigate LinkedIn Jobs. LinkedIn may show login wall; try
linkedin_scroll to load more.
- Database — SQLite with WAL mode at
pathwise.db. Auto-created on first run with seeded profile.
- camelCase conversion —
database/repos/profiles.py converts snake_case DB columns to camelCase.
- Auto-apply pipeline —
auto_apply_pipeline generates cover letter, navigates to form, tracks application. Use fill_application_field + click_application_button for each page of the form.