MCP Computrabajo
An MCP server that lets AI assistants search job openings, read the full detail of each posting, read the user’s own CV and apply on Computrabajo, the largest job board in Latin America.
Since August 2026 it runs as a remote server on Cloudflare Workers.
Connect
In Claude Desktop or claude.ai, Settings → Connectors → Add custom connector:
https://mcp-computrabajo.georgegiosue.dev/mcp
In Claude Code:
claude mcp add --transport http computrabajo https://mcp-computrabajo.georgegiosue.dev/mcp
Tools
| Tool | What it does | Needs a session |
|---|---|---|
search-jobs |
Searches openings by keyword and location | No |
get-job-detail |
Full posting: description, salary, benefits, company | No |
get-profile |
Your CV: summary, experience, education, languages, skills | Yes |
list-attached-cvs |
Your CVs in Word/PDF and which one is the default | Yes |
apply-to-job |
Sends your CV to an opening | Yes |
Multi-country support: Peru, Colombia, Mexico, Argentina, Chile and Ecuador.
The authentication problem
Applying requires Computrabajo’s session cookie, which is personal. On a public server that is a real problem: storing one shared cookie would mean anyone who finds the URL applies while impersonating whoever owns it.
The fix was to turn the Worker into its own OAuth 2.1 server. On connect, the user lands on a consent page hosted by the same Worker, where they paste their cookie. The provider encrypts it inside the grant and returns it on every request; it never travels in the URL, is never shared between users, and is discarded when the connector is disconnected.
Searching and reading openings needs no cookie, so the page offers a button to connect without one and use just those two tools.
Architecture
A single createServer() factory feeds both entry points: serveStdio() for the npm package and createMcpHandler() for the Worker. The HTTP repository takes its configuration through the constructor, so the same class serves a stdio process with fixed configuration and a Worker where the cookie changes on every request.
The core is free of Node APIs: reading environment variables and the cookie file lives in an isolated module that only the stdio entry point imports. The Worker bundle carries no node: import at all.
Details that only show up in real use
Three things you don’t see until the server is in production:
- The keyword decides the quality of the results. Computrabajo matches against the job title, and in Latin America “ingeniero de …” reads as civil, mechanical or mining engineering. Measured over real searches in Lima,
ingeniero-de-softwarereturns 3 useful results out of 20;desarrollador-de-software, 18 out of 20. The server instructions now translate that intent instead of transliterating the user’s phrasing. - An HTTP 200 does not mean the application went through. The site answers with its own code,
OfferAppliedOk, and still returns 200 when it rejects the application. Reporting success from the status code was lying at the worst possible moment. - An invalid cookie does not produce a 401, but a 200 page with no CV. Returning an empty profile would read as “your CV is blank”, so that is now treated as the authentication failure it actually is.
Tech
TypeScript, Bun, Model Context Protocol SDK v2, Cloudflare Workers, Workers OAuth Provider, KV, Zod, Cheerio.
Screenshots
Job search

Applying to a job

Confirmation on Computrabajo

Motivation
To make job searching and applying in Latin America easier through AI agents, removing the friction of navigating job portals by hand. With get-profile, the assistant can match openings against the user’s real experience instead of guessing at it.