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
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.
About
Reviews
Write a reviewNo 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_questionconsent_statuscontrol_checkcontrol_statusget_formget_jobhealthimprovement_reportlist_applicationssearch_jobssearch_statustune_status
Show 2 more tools
vault_statusverify_text
Write 11 · Create, change, send or run things.
apply_batchdraft_answersgrants_statusingest_confirmationsrecord_textresolve_submissionrun_applicationsseed_from_confirmationssubmit_applicationsync_confirmationstune_run
Not yet classified 10 · We could not tell from the name and description.
facts_reportgive_feedbackplan_applicationplaywrightprofile_questionsprovenanceprovide_verification_codereconcile_submissionsrequest_featurerun_report
Network hosts it talks to 11
api.anthropic.com· found in codeapi.ashbyhq.com· found in codeapi.lever.co· found in codeapi.smartrecruiters.com· found in codeboards-api.greenhouse.io· found in codegithub.com· found in codejob-boards.greenhouse.io· found in codejobs.ashbyhq.com· found in codejobs.lever.co· found in codejobs.smartrecruiters.com· found in codeollama.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_questionAsk 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_batchPlan + 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_statusActive 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_checkCheck 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_statusActive mode, quotas used/remaining, enabled controls and recent blocks.
draft_answersDraft 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_reportResume-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_formReturn the application form schema (keys, labels, kinds, required, options).
get_jobFetch one posting. Add 'description' to fields to include the (trimmed) description.
give_feedbackFeedback 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_statusActive 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.
healthReport enabled platforms, LLM providers and which local models are reachable.
improvement_reportRanked improvement proposals learned from recent run failures (compact). Page with `cursor` (= `next`).
ingest_confirmationsRecord 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_applicationsList recorded applications from the local store.
Show 20 more tools
plan_applicationRun 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…
playwrightprofile_questionsTop 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.
provenanceOrigin, model, prompt hash and ancestor chain for a text id.
provide_verification_codeThe 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_submissionsMatch 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_textRecord 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_featurePropose (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_submissionInspect (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_applicationsApply 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_reportReport 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_jobsSearch 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_statusProgress of a search_jobs session: status, boards done/total, rows, elapsed. Accepts a session id or cursor.
seed_from_confirmationsSeed 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_applicationSubmit 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_confirmationsPull 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_runTrain 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_statusLocal style-tuning state: backend, promoted/previous adapter, new user texts vs threshold, last run.
vault_statusWhich 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_textUser 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
- Repository
- github.com/tanmayagrawal21/job-apply-mcp
- 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)