An open-source MCP server that discovers and AI-evaluates job offers against a configurable candidate profile — 100% local, private, and self-hosted.
18 tools with mostly complete schemas and descriptions, but significant gaps in error handling, output documentation, and parameter clarity. Tool names follow verb_noun convention well (evaluate_, discover_, update_, list_, get_). Descriptions average ~120 chars, meeting baseline minimums but lacking LLM-optimized guidance on WHEN to use each tool vs. similar ones. Schemas present for all tools with proper type definitions and enums (e.g., estado enum in update_job_status). However, output schemas are not documented, LLMs cannot predict response structure. No error recovery guidance. Parameter descriptions sometimes generic ('optional' without explaining consequences). Batch tools (evaluate_jobs_batch, discover_jobs_core) show good composition patterns but lack per-item error reporting.
Discovers jobs from multiple sources (Remotive, Greenhouse, Lever) in a single coordinated operation with optional error continuation.
Discovers job offers from Greenhouse job boards. Accepts a single board or array of boards.
Discovers job offers from Lever job boards. Accepts a single company or array of companies.
Discovers job offers from the Remotive API based on search keywords and limit.
Discovers job offers by scraping a provided URL and extracting job listings.
Evaluates a single job offer against the candidate profile using an LLM (Ollama) to generate a match score, apply recommendation, detected risks, strong points, and custom narrative angle.
Evaluates multiple job offers in batch mode, with optional error continuation. Returns evaluation results for each job.
No output schemas documented for any tool. LLMs cannot predict response structure, forcing them to guess at field names and types for downstream tool chaining. This violates pattern:tool and pattern:response-shaper.
Error handling absent. No guidance on retryability, user-fixable vs. fatal errors, or recovery steps. Violates pattern:recovery-guide and pattern:error-classification.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
Retrieves the current candidate profile used for job evaluations.
Retrieves a specific job offer from the database by its ID.
Retrieves funnel metrics for the job application pipeline (applications sent, feedback received, interviews scheduled).
Retrieves the current status of the job discovery scheduler (enabled, running, last run, next run).
Lists job offers from the database, optionally filtered by application status.
Prepares an application email for a specific job offer, generating personalized content based on the evaluation and candidate profile.
Registers feedback received for a job offer (e.g., rejection, interview feedback, offer details).
Sends a prepared application email via SMTP and marks the job as applied in the database.
Manually triggers a scheduler cycle to discover and evaluate jobs, optionally sending a digest email.
Updates the application status of a job offer in the database.
Updates scheduler configuration (recipient email, sender name).
Batch tools (evaluate_jobs_batch, discover_jobs_core) lack per-item error reporting. If one job fails, LLM cannot determine which succeeded and which failed, forcing full retry.
Parameter descriptions often generic ('optional' without explaining side effects). E.g., persistResult in evaluate_job lacks guidance on when to set false. Violates pattern:tool-description.
No confirmation/dry-run pattern for destructive operations (send_application_email, update_job_status). Agents can accidentally mark jobs as applied or send emails without verification.