Skip to content
Agentmart
Submit a tool

ApplyWise

Job search and form filling; dry run by default, real submits need your approval or consent.

Connector by tanmayagrawal21 · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)
Write a review

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/tanmayagrawal21-applywise

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Job search and form filling; dry run by default, real submits need your approval or consent.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 26, 2026.

Tools
14 read · 11 write · 0 delete · 10 not yet classified
Secrets
None asked for
Install scripts
None found
Runs as
Python package

Tools by what they do 35

Read from the source code; the running server may list different tools.

Read 14 · Look things up without changing anything.

  • answer_profile_question
  • consent_status
  • control_check
  • control_status
  • get_form
  • get_job
  • health
  • improvement_report
  • list_applications
  • search_jobs
  • search_status
  • tune_status
Show 2 more tools
  • vault_status
  • verify_text

Write 11 · Create, change, send or run things.

  • apply_batch
  • draft_answers
  • grants_status
  • ingest_confirmations
  • record_text
  • resolve_submission
  • run_applications
  • seed_from_confirmations
  • submit_application
  • sync_confirmations
  • tune_run

Not yet classified 10 · We could not tell from the name and description.

  • facts_report
  • give_feedback
  • plan_application
  • playwright
  • profile_questions
  • provenance
  • provide_verification_code
  • reconcile_submissions
  • request_feature
  • run_report

Network hosts it talks to 11

  • api.anthropic.com · found in code
  • api.ashbyhq.com · found in code
  • api.lever.co · found in code
  • api.smartrecruiters.com · found in code
  • boards-api.greenhouse.io · found in code
  • github.com · found in code
  • job-boards.greenhouse.io · found in code
  • jobs.ashbyhq.com · found in code
  • jobs.lever.co · found in code
  • jobs.smartrecruiters.com · found in code
  • ollama.com · found in code

Files it touches

  • /dev/null
  • /proc/meminfo
  • %APPDATA%
  • %APPDATA%\\job-apply-mcp\\config.toml
  • %LOCALAPPDATA%
  • Your home directory (~)
  • ~/.cache
  • ~/.config
  • ~/.config/job-apply-mcp/config.toml
  • ~/.local/share
  • Any path the agent passes to its tools

Tools (35)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • answer_profile_question

    Ask the USER (MCP elicitation) to type the answer for a gap key from profile_questions. This tool takes no value: the answer comes only from the user's own input and is stored as user_written. If the client cannot elicit, nothing is stored; tell the user to run `job-apply-mcp profile ask`. Scope: global | company | role_family (+ scope_value, or 'company:Acme'). Demographics are never stored here.

  • apply_batch

    Plan + submit many applications concurrently. Returns one compact status row per ref. Open profile questions are asked once, before the batch starts (never mid-batch).

  • consent_status

    Active consent windows (mode, scopes, seconds left, submissions left). Read-only: only a human can consent, in a terminal: `job-apply-mcp consent --for 24h` or `--per-run`.

  • control_check

    Check a side-effecting action against the control layer. action: apply|submit|send_message| write_prose|merge. payload: ref, platform, company, dry_run, text, recipient, page_text, form_labels, attestations. Returns {decision: pass|block|needs_human, violations, warnings}.

  • control_status

    Active mode, quotas used/remaining, enabled controls and recent blocks.

  • draft_answers

    Draft the prose fields a plan left open (writing.mode="deferred", or ones that timed out): local writer + reviewer under writing.timeout_s. Returns the same shape as plan_application with a fresh approval_id, paged the same way (`cursor=next` pages the last draft from memory).

  • facts_report

    Resume-first fact precedence: counts, profile/resume conflicts, and user-letter facts excluded because they conflict with or are outdated relative to the resume (with the reason and the resume's version).

  • get_form

    Return the application form schema (keys, labels, kinds, required, options).

  • get_job

    Fetch one posting. Add 'description' to fields to include the (trimmed) description.

  • give_feedback

    Feedback on a run (optionally on one `ref` of it), applied at the start of the next run. Structured: {"kind":"deny_company"|"deny_title", "pattern"?} (no pattern + ref = that item's company/title), {"kind":"answer","pattern","value"} for plain questions only; any authorization, demographic, consent, attestation, legal or AI-use question (or {"kind":"profile_answer","key"|"question","value","scope": "global|company|role_family","scope_value"}) goes to the profile builder's answer_profile_question. {"kind":"salary","salary_floor"|"base_salary"|"default_ask"|"expected"|"delta"|"percent"}: never b…

  • grants_status

    Active human-issued grants (scope, seconds left, uses left). Read-only: only a human can create or revoke a grant, via `job-apply-mcp grant` in a terminal.

  • health

    Report enabled platforms, LLM providers and which local models are reachable.

  • improvement_report

    Ranked improvement proposals learned from recent run failures (compact). Page with `cursor` (= `next`).

  • ingest_confirmations

    Record the user's own application-confirmation emails so those jobs are never re-applied to. Pass message summaries from the user's mail tool: [{sender, subject, date, snippet}] (snippet = first ~500 chars, optional). Read-only on mail; the server stores only company, title and date. Returns counts plus up to a few new matches. preview=true parses without writing.

  • list_applications

    List recorded applications from the local store.

Show 20 more tools
  • plan_application

    Run policy gates + duplicate check, fill answers from the profile and local LLMs, and list unresolved fields. Unresolved free-text fields come back as `client_tasks` for the calling agent to write. `src` names the source of every answer that is not "profile". A result too large for one response is paged: it carries `next` and `total`; call again with `cursor=next` to get the next page of the SAME plan (from memory, no re-plan) until `next` is null. Pages keep the shape (answers/src stay dicts) so they merge. The first call of a session may ask the user the top open profile questions (elicitati…

  • playwright
  • profile_questions

    Top open profile gaps (questions the tool could not answer, or answered with a default), ranked by frequency x impact (blocked applications weigh most). Ask the user these, then call answer_profile_question.

  • provenance

    Origin, model, prompt hash and ancestor chain for a text id.

  • provide_verification_code

    The user types the code they received (email/SMS) for a submission in status `awaiting_code`. Ask the USER; never try to read their mail or guess. Only the format is checked; the code is typed into the open page, the page's verify button is clicked once, then the normal confirmation check runs. One attempt per code; the application is never resubmitted; after `verification.code_ttl_s` it becomes a `handoff`.

  • reconcile_submissions

    Match open submissions (submitted/unknown/submitting/handoff) to confirmation emails and mark confident matches `confirmed` (evidence = email subject/date; never bodies). Checks run at ingest.reconcile_delays_min after each submit; force=true checks now. With the default client mail source and no `messages`, returns a `client_task`: fetch recent confirmation-email summaries and pass them here or to ingest_confirmations. An unknown with no match after the last window stays unknown and is listed under `unresolved`. Read-only on mail; never resubmits.

  • record_text

    Record provenance for a text artifact (kind: resume_bullet|cover_letter|answer|profile_fact). origin: user_written | llm_generated (llm_generated needs `model`). `context` = job/question the text answers.

  • request_feature

    Propose (and, if a coder backend is configured, implement as a PR for human review) a change to this tool. kind: platform_adapter | control | config | new_tool | bug (auto-detected if omitted).

  • resolve_submission

    Inspect (no outcome) or resolve a submission stuck in submitting/unknown. outcome: submitted|failed| handoff. Requires `evidence` = the evidence folder path reported for the ref. Audit-logged.

  • run_applications

    Apply from any mix of sources in one run: explicit `links` (or `links_file`, one URL per line), job links the user emailed to themselves (read-only mail; sender, recipient and label come from config only; `mail` may only narrow with {query, since, since_days}), and discovery (`discovery` = search_jobs arguments). Priority: links, then mail, then discovery. `sources` subsets ["links","mail","discovery"]. `max_applications` (whole number >= 1; default intake.max_applications or run_size feedback, capped at intake.max_applications_cap) caps the eligible postings handled, the same in dry and live …

  • run_report

    Report of a run (default: the latest): counts plus rows per status (submitted, confirmed, dry_run_ok, needs_human, quota_blocked, skipped, unsupported_site, unknown, failed; see run_applications), each with `why`. `category` shows one only (the old names handed_off and dry_run still work).

  • search_jobs

    Search postings across enabled platforms in parallel. Returns compact rows: ref, co, title, loc, pay, flags. The first call runs the whole search once; pass the returned `next` as `cursor` for more pages (instant).

  • search_status

    Progress of a search_jobs session: status, boards done/total, rows, elapsed. Accepts a session id or cursor.

  • seed_from_confirmations

    Seed dedupe from confirmation-email history (default ingest.seed_since_days=180) before a run, so no side files are needed. mbox/imap sources are read directly; with the client source and no `messages` this returns a `client_task` to fetch summaries and call it again with them.

  • submit_application

    Submit using the best available path (platform API, else browser driver). Honors global dry_run; a per-call dry_run can only make it safer. `approval_id` is the server-issued id from plan_application. With approval_mode=human a person must approve (dialog, or `job-apply-mcp approve <id>`).

  • sync_confirmations

    Pull confirmation emails from the configured read-only source (ingest.source: mbox or imap) for the last `since_days` days and record them as already applied. Never sends, moves, flags or deletes mail.

  • tune_run

    Train a LoRA on the user's own texts, gate it against the incumbent, promote only if better. trigger: manual | new_data (skips below the configured threshold) | rollback (restore previous adapter). wait=False starts in the background; poll tune_status.

  • tune_status

    Local style-tuning state: backend, promoted/previous adapter, new user texts vs threshold, last run.

  • vault_status

    Which ATS hosts have a stored login (host and count only, never a username's password), whether the credentials consent window is open, accounts awaiting email verification, and this run's login flags (lockout, wrong_password, captcha). Read-only: logins are added by a human with `job-apply-mcp vault add`.

  • verify_text

    User approves LLM text. Without edited_text -> user_verified; with it -> user_edited child plus diff.

Compare and alternatives

    Featured in

    Signals

    Stars
    0
    Forks
    0
    Open issues
    15
    Weekly downloads
    93
    Last commit
    Oct 23, 2026 (5 days ago)
    Last release
    Oct 23, 2026 (5 days ago)
    Last package publish
    Oct 23, 2026 (5 days ago)

    From GitHub (fetched Oct 24, 2026) and the package registry.

    Details

    Registry name
    io.github.tanmayagrawal21/applywise
    Version
    0.1.0
    Auth
    No auth
    Packages
    pypi applywise
    License
    MIT
    First seen
    Oct 24, 2026
    Last checked
    Oct 24, 2026
    Cite this page

    ApplyWise MCP server. Agent Mart. https://agentmart.dev/connectors/tanmayagrawal21-applywise (last updated 2026-10-24)