Claude Works
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| JOBSEARCH_DATA_DIR | No | Directory holding the ledger, queue, and policy documents. Defaults to the package parent. | |
| JOBSEARCH_COMP_FLOOR | No | Base compensation floor in USD per year. | |
| JOBSEARCH_APPLY_EMAIL | No | Contact email, read at submission time only. | |
| JOBSEARCH_APPLY_PHONE | No | Contact phone, read at submission time only. | |
| JOBSEARCH_RESUMES_DIR | No | Directory holding the resume generator and render pipeline. | |
| JOBSEARCH_APPLY_LOCATION | No | Contact location, read at submission time only. | |
| JOBSEARCH_APPLY_PASSWORD | No | Portal credentials password, read from the environment only and never stored. | |
| JOBSEARCH_APPLY_USERNAME | No | Portal credentials username, read from the environment only and never stored. | |
| JOBSEARCH_PURSUE_THRESHOLD | No | The 0 to 10 score at or above which a role is pursued. |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| discover_jobsA | Find fresh roles from a discovery source, ranked by fit, de-duped by role. Args: angle: a search lens from SEARCH_ANGLES.md (e.g. "FDE", "IoT") to bias ranking toward that lane. Empty = the default lane. source: which sweep to run. "boards" (default) queries the public Ashby/Greenhouse/Lever posting APIs over the seed_boards org list in policy.json and works from a bare install. "demo" returns canned fictional roles offline. "newsource"/"getro"/"anthropic"/ "board_harvest" wrap private harvest scripts in the data dir and fail loudly when absent. For a much wider net, pair this with the JobDataLake MCP (search_jobs) and feed its results to score_job. limit: max roles to return. Returns a list of job dicts (title, company, url, source, location, remote, ats, role_key). Roles the rails hard-cap always rank below clean ones. |
| fetch_job_descriptionA | Fetch a posting's title, location, and plain-text JD from its ATS URL. Supports Ashby, Greenhouse, and Lever job URLs via their public posting APIs (the same ones the boards sweep uses). Use the returned text as score_job's jd_text: titles under- and over-sell, so scoring on the JD is sharper, and the body is the only reliable place to catch in-office requirements hiding behind a remote flag. Returns {error} when the URL is unrecognized or the org disabled its public API (a board 404 does NOT mean the role closed; check the live page before recording it closed). |
| fetch_verification_codeA | Read the newest ATS email-verification code from the applicant's own inbox. For the emailed-code gate some ATSes put in front of the final submit: this is email-OWNERSHIP verification of the applicant's own application, which the applicant has authorized, NOT a captcha. Scoped and read-only: only recent mail from known ATS sender domains is considered, via IMAP BODY.PEEK with a revocable app password from the environment. Returns {status, code?}. NO_CODE_FOUND right after submit usually means the mail is in transit; wait ~8s and retry (up to 3x) before parking. Never use this reasoning for captchas or no-AI attestations: those always park for the human. |
| curate_queueA | Triage the discovery queue into a fit-ranked active set and a parked set. Runs the curation pass over up to |
| score_jobA | Score one role 0-10 against FIT_RUBRIC.md and return the pursue verdict. Pass the JD text when available; titles under- and over-sell, so scoring on the JD is sharper. Returns value (0-10), pursue (bool, >= threshold and no hard cap), reasons (one line per signal), and hard_cap (set when a required-skill gap, over-level title, non-US-only, or excluded domain/company disqualifies it). |
| get_search_angleA | Look up one search angle (lens) by name or trigger from SEARCH_ANGLES.md. Empty name returns the default (FDE / converting-profile) lane. Returns the angle's name, trigger phrase, definition, and target titles, or null if no angle matches. |
| list_search_anglesA | List every search angle defined in SEARCH_ANGLES.md (name, trigger, definition). |
| list_claim_fragmentsA | List the verified resume building blocks from _genlib.py (roles, bullets, projects). Every fragment traces to CLAIMS_BANK.md. Build resumes only from these names (or text that traces to the claims bank); this is what keeps the output honest. |
| build_resumeA | Build a tailored one-page resume from verified fragments and run the static gates. Args: name: output file stem (becomes ".html" in the resumes dir). tagline: the header tagline (mid-level; no over-level words). summary: the summary paragraph. experience: list of [role_key, [bullet, ...]] where role_key is one of bnb / twinspires / upwork / humana / tesla / dojo / lifespring, and each bullet is a fragment NAME (e.g. "BNB_AI") or text tracing to CLAIMS_BANK. projects: list of project fragment names (e.g. "P_CASEK") or verified HTML. skills: list of [label, text] rows for the Skills block. Returns the resume with lint_ok / verify_ok and any findings. The 1-page render gate runs separately via render_resume (it needs Chrome). |
| render_resumeA | Render .html to PDF via _render.sh and report whether it is one page. Returns the resume with one_page set and the pdf_path. Requires Google Chrome and qpdf. This is the first of the 4 gates. |
| verify_resumeA | Run the two static gates (lint + anti-fabrication verify) on a resume HTML. Use this to check any resume on disk. Returns lint_ok, verify_ok, passed (their AND), and findings: every blocklist hit (C/C++, fabricated employer, model over-claim, ...) and style flag (banned words, em dashes, rule-of-three). |
| submit_applicationA | Build the fill-and-park submission plan for a role (no browser is driven here). Returns a plan an agent executes with the Playwright MCP: the ATS, the action ("auto_submit" for Ashby/Greenhouse, "fill_and_park" for Lever/Workday/captcha walls, or "blocked" for a rail violation), the standard field values and honest screening answers, the single human_step left when parked, and ATS-specific gotcha notes. Identity PII and credentials are read from the environment, never stored. Report the real outcome afterward with record_application. |
| record_applicationA | Append one row to the application ledger (applications.json), de-duped by role. Status mirrors the existing vocabulary ("submitted", "submitted-verified", "deferred-captcha", "skipped-overlevel", ...). Date defaults to today. Returns whether it was recorded (false if this company+role is already logged) and the new total. |
| list_queueA | List roles in the discovery queue (top300_jobs.json) by queue status. Status is the queue's own field ("todo" by default). Returns up to |
| list_applicationsA | List ledger rows, optionally filtered by status. Empty status = all rows. |
| ledger_summaryA | Return a count of ledger rows by status (a one-glance system summary). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/andrewaws26/claude-works'
If you have feedback or need assistance with the MCP directory API, please join our Discord server