Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

ApplyWise

PYPI · APPLYWISE

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

Available components

0 this week 77 Trust /100

Last scanned (2 hours ago)

Scores higher than 74% of PyPI servers

Category CRM and Sales

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
  • 0 of 28 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency100
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to tanmayagrawal21/job-apply-mcp). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 12 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability62
  • AI-judged instruction clarity (fair).Partial
  • Tool/resource definitions use about 2885 tokens (~87/item across 33 items; 33 tools + 0 resources), lean.Pass
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
  • Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage71
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 0% of tool parameters carry a description.Fail
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 33 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 33 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass

Unverified: 1 category

A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 24 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
  • 23 Oct 26 62

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Analysed pypi/applywise@0.1.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem pypi
Reason Verified
Discovered via Registry attestation endpoint
Source repo tanmayagrawal21/job-apply-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/tanmayagrawal21/job-apply-mcp/.github/workflows/release.yml@refs/tags/v0.1.0
Rekor log index 3417432944
Predicate type PyPI publish attestation https://docs.pypi.org/attestations/publish/v1
Subject digest sha256:b7077e7e207d52236f885e3a6e04aa6a7ae642e19b89eaa66203b61e56b75a72

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 28 packages
Packages resolved 28
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 33 exposed · ~2,885 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
answer_profile_question ~127

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.

NameTypeReqDescription
keystringyes–
scopestring––
scope_valuestring––
NameTypeReqDescription
resultstringyes–

No examples provided.

apply_batch ~60

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).

NameTypeReqDescription
dry_run–––
max_parallel–––
refsarrayyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

consent_status ~56

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`.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes–

No examples provided.

control_check ~87

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}.

NameTypeReqDescription
actionstringyes–
payload–––
NameTypeReqDescription
resultstringyes–

No examples provided.

control_status ~22

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

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes–

No examples provided.

draft_answers ~86

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).

NameTypeReqDescription
cursorinteger––
ref_or_urlstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

facts_report ~47

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).

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes–

No examples provided.

get_form ~33

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

NameTypeReqDescription
ref_or_urlstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

get_job ~41

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

NameTypeReqDescription
fields–––
ref_or_urlstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

give_feedback ~247

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 below the configured floor, capped at intake.salary_max_multiple. {"kind":"run_size","value"|"delta"}. Free text is shown in the next run's plan_context. Answers given here (and pay changes in human approval mode) apply only after the USER confirms them on a terminal: `job-apply-mcp feedback --confirm <id>`.

NameTypeReqDescription
feedback–yes–
ref–––
run_idstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

grants_status ~49

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.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes–

No examples provided.

health ~21

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

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes–

No examples provided.

improvement_report ~43

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

NameTypeReqDescription
cursorinteger––
limitinteger––
NameTypeReqDescription
resultstringyes–

No examples provided.

ingest_confirmations ~102

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.

NameTypeReqDescription
messagesarrayyes–
previewboolean––
NameTypeReqDescription
resultstringyes–

No examples provided.

list_applications ~38

List recorded applications from the local store.

NameTypeReqDescription
cursorinteger––
limitinteger––
statusstring––
NameTypeReqDescription
resultstringyes–

No examples provided.

plan_application ~174

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 (elicitation) before planning.

NameTypeReqDescription
cursorinteger––
ref_or_urlstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

profile_questions ~56

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.

NameTypeReqDescription
limitinteger––
NameTypeReqDescription
resultstringyes–

No examples provided.

provenance ~36

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

NameTypeReqDescription
idstringyes–
include_textboolean––
NameTypeReqDescription
resultstringyes–

No examples provided.

provide_verification_code ~121

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`.

NameTypeReqDescription
codestringyes–
pending_idstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

reconcile_submissions ~137

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.

NameTypeReqDescription
forceboolean––
messages–––
NameTypeReqDescription
resultstringyes–

No examples provided.

record_text ~96

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.

NameTypeReqDescription
context–––
kindstringyes–
model–––
originstringyes–
parent–––
prompt–––
textstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

request_feature ~66

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).

NameTypeReqDescription
descriptionstringyes–
kind–––
NameTypeReqDescription
resultstringyes–

No examples provided.

run_applications ~382

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 mode; skipped and ineligible ones do not count. Every URL goes through adapter detection, plan, gates, dedupe and submit. Prose is deferred: jobs needing unapproved prose are skipped, not blocking. With the client mail source pass `messages` [{id, from, to, subject, date, body}]. Pending feedback is applied first (see plan_context). Returns the run report: one status per posting, each with `why`: submitted, confirmed, dry_run_ok (a live run would submit it), needs_human (the owner must act: unresolved fields, review gate, awaiting approval), quota_blocked (a live quota refused it), skipped (policy, duplicate, prose not approved, max_applications reached), unsupported_site, unknown (verify by hand), failed. A dry run adds `live_preview` (would_submit, quota_blocked, warning) from the live quotas.

NameTypeReqDescription
discovery–––
dry_run–––
links–––
links_file–––
mail–––
max_applications–––
messages–––
sources–––
NameTypeReqDescription
resultstringyes–

No examples provided.

run_report ~100

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).

NameTypeReqDescription
categorystring––
limitinteger––
run_idstring––
NameTypeReqDescription
resultstringyes–

No examples provided.

search_jobs ~111

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).

NameTypeReqDescription
apply_policyboolean––
boards–––
cursorstring––
limitinteger––
locationstring––
platforms–––
querystring––
since_daysinteger––
NameTypeReqDescription
resultstringyes–

No examples provided.

search_status ~42

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

NameTypeReqDescription
session_idstringyes–
NameTypeReqDescription
resultstringyes–

No examples provided.

seed_from_confirmations ~91

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.

NameTypeReqDescription
messages–––
previewboolean––
since_days–––
NameTypeReqDescription
resultstringyes–

No examples provided.

submit_application ~108

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>`).

NameTypeReqDescription
answers–––
approval_id–––
dry_run–––
ref_or_urlstringyes–
token–––
NameTypeReqDescription
resultstringyes–

No examples provided.

sync_confirmations ~73

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.

NameTypeReqDescription
previewboolean––
since_days–––
source–––
NameTypeReqDescription
resultstringyes–

No examples provided.

tune_run ~75

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.

NameTypeReqDescription
triggerstring––
waitboolean––
NameTypeReqDescription
resultstringyes–

No examples provided.

tune_status ~30

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

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes–

No examples provided.

vault_status ~76

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`.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes–

No examples provided.

verify_text ~52

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

NameTypeReqDescription
edited_text–––
idstringyes–
verified_bystring––
NameTypeReqDescription
resultstringyes–

No examples provided.

Install

How do I install the ApplyWise MCP server?

ApplyWise runs locally as a PyPI package, launched with uvx applywise. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · applywise

# add to Claude Code
claude mcp add tanmayagrawal21-applywise -- uvx applywise
Common questions

What is the ApplyWise MCP server?

ApplyWise is an MCP server listed in the public MCP registry as io.github.tanmayagrawal21/applywise. Job search and form filling; dry run by default, real submits need your approval or consent. This page covers its PyPI package (applywise).

Is the ApplyWise MCP server safe to use?

ApplyWise scores 77 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the ApplyWise MCP server expose?

ApplyWise exposes 33 tools: search_jobs, search_status, get_job, get_form, plan_application, and 28 more. Their descriptions and schemas cost roughly 2,885 tokens of context every time the server is loaded.

Is the ApplyWise MCP server still maintained?

ApplyWise is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the ApplyWise MCP server under?

ApplyWise declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.