Skip to main content
Glama
Andrem19

Work Researcher MCP

by Andrem19

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
WORK_RESEARCHER_PROFILENoOptional profile ID to use for this MCP server instance. Equivalent to the --profile CLI flag. Overrides the active_profile setting in config.toml. Profile IDs are limited to letters, numbers, _ and -.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
manage_profilesA

List candidate profiles or switch the active candidate.

    ``switch`` persists [general].active_profile in config.toml and takes
    effect immediately. It closes the old candidate's browser first, then
    changes the isolated CV folder, database/application history and
    browser-login folder. Always list/verify profiles before a
    search or application task for a named person.
    
get_statusA

Health/config snapshot: active candidate, local CV directory, DB stats, providers, API keys and saved searches. Call first in a session.

search_jobsA

Run a UK job search OR page an earlier one. Fresh search: pass query ('Data Analyst'…) or profile ('data_analytics'/'field_geologist'). Paging: pass search_id (+offset from next_offset), preferably by copying the returned next_page object. Response sizing: pass context_window and auto selects compact (<=80k), balanced (80k-300k), or wide (>=300k). Local Qwen 3.8 27B uses context_window=78000. You may instead pass response_profile explicitly. Optional limit requests a page size within that profile's safety cap (8/20/50). With no sizing signal the default is balanced (12). All remaining results stay stored. Results are ranked, cross-board duplicates merged (sources[]), with memory flags (already_applied, application_status) and location intelligence (work_mode, distance_miles from the active profile's home, location_status ok|mismatch|caution|unknown). PAID TRAINING/COURSE ADS (where you pay them, e.g. Netcom-style 'trainee' course marketing) are excluded automatically — training_offers_skipped shows how many; set include_training=true only if the user explicitly wants courses. location_policy: 'auto' (default), 'uk_wide', 'commute_only'. work_from_home=true restricts to remote.

get_jobA

Details for selected jobs with adaptive batch sizing. Pass the same context_window/response_profile used for search_jobs. Compact returns up to 5 summaries or 2 full descriptions; balanced 12/5; wide 30/12. Request full descriptions only for plausible finalists. No job is deleted when a supplied job_ids list is truncated; request the remainder later.

manage_blocklistA

Employer/recruiter exclusion memory. When the user says 'never apply to ' → action=add, kind=company, value=, reason=. kind=keyword blocks any vacancy whose title/description contains it. action: add | remove | list. Blocked jobs are hidden from search results and start_application refuses them until removed.

fetch_job_descriptionA

Fetch FULL job descriptions by opening pages in the browser. Accepts 1-10 job_ids (BATCH - prefer batching to save round-trips). Use for jobs where the parser returned null/short descriptions (common on Totaljobs/Reed). Stores descriptions back and re-runs the requirements check against your CVs. Also detects closed vacancies ("no longer accepting applications").

list_stored_jobsA

Search the LOCAL job database by criteria (no board calls). Use INSTEAD of Bash/sqlite: find all jobs from a company, filter by title keyword, location, source board, or freshness. Returns job_ids + titles + requirements status - then get_job / fetch_job_description for detail.

submit_job_observationsA

Feed jobs found via the harness's own browser (Indeed, CV-Library, LinkedIn, Glassdoor) into the same dedup + ranking store. Each observation: {source, url, title, company, location_text, salary_raw, description, posted_at?}. Returns stored count + duplicates merged.

list_cvsA

CVs indexed from the active profile's local folder. Pass job_id to get per-CV recommendation scores for that job.

sync_cvsA

Index CV files manually copied into the active profile's cv_dir. Unchanged files are skipped unless force=true. There is no cloud sync.

start_applicationA

Begin applying to a job. Returns the full plan: URL, apply method + site playbook, chosen CV (+alternatives), applicant profile values, step list, cautions (location mismatch, LinkedIn ToS…). REFUSES to create a second application for a job that already has one — that is the anti-double-apply memory (works across boards via dedup).

record_applicationA

Update an application: status planned|applying|submitted|interview| offer|rejected|withdrawn|failed; notes; evidence {screenshot: path,…}; cover_letter text.

list_applicationsB

Application history (job, company, status, dates) — the long-term memory of everything already applied to.

check_appliedA

'Have we already applied here?' — by job_id, exact URL, or fuzzy title+company (catches the same vacancy re-found on another board). ALWAYS call before a manual browser application.

make_cover_letterA

Write a cover letter as a DOCX file into CV_collection and return its path — ready for browser_upload as a supporting file. Boards like Totaljobs reject files smaller than 8KB, so the document is padded through metadata if the text alone is too short. Prefer DOCX over PDF here (PDFs from minimal text are usually under the limit).

browser_loginA

Ensure we're signed in on a job board before applying. Opens the site; if signed out, walks 'Continue with Google' and picks the pre-approved account (active profile auth.google_account — the user allows this WITHOUT asking). Returns logged_in; needs_user=true on 2FA/ captcha/consent — then stop and ask the user to finish in the window.

browser_openA

Open a URL in the persistent application browser; returns the first snapshot. Logins survive between runs. Headed by default so the user can handle 2FA/captcha.

browser_snapshotA

Look at the page: numbered interactive elements + text. focus: 'inputs'|'buttons'|'links'; filter_text narrows by name (find 'Apply'); text_chars=0 → elements only, 6000 → reading mode. modal_only=true → ONLY the active dialog/wizard (question text + controls, hidden templates excluded) — use for apply wizards, then browser_set/click by number.

browser_formA

The dominant form with human labels per field (n, tag, type, label, required, options) + likely submit buttons. Use once per application page, then browser_set fields by number.

browser_clickA

Click element #n → returns the FRESH snapshot (popups become the active tab automatically).

browser_setA

Set element #n to a value — one verb for every control: inputs → fill; selects → pick option value; checkboxes/radios → true/false → returns fresh snapshot.

browser_typeA

Type into #n key-by-key (fires JS handlers); submit=true presses Enter → fresh snapshot. Use for search boxes and chat fields.

browser_uploadA

Click upload control #n and send a local file (the CV path from start_application) → fresh snapshot.

browser_pressA

Press a page-level key (Enter, Tab, Escape) → fresh snapshot.

browser_waitB

Wait for time / text to appear ('Application submitted') / text to disappear (spinners) → returns a snapshot.

browser_screenshotA

Save a PNG to data/screenshots — pass the path as evidence to record_application.

browser_evalA

Evaluate JS on the page (extract hidden JSON, scroll, dismiss cookie banners).

browser_tabsA

Tabs: list / select / close. Click-opened popups become active automatically — use this to switch back.

browser_closeA

Close the browser (the login profile persists on disk).

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

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/Andrem19/work-researcher-bot'

If you have feedback or need assistance with the MCP directory API, please join our Discord server