Comprehensive Model Context Protocol server for managing Home Assistant through AI assistants.
ATSPrep is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Free resume tools: ATS score, job match, bullet and LinkedIn checks, tailoring, interview prep.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http atsprep-mcp https://atsprep.com/mcp
# 2 — ask your agent for something these tools do
# check_resume, match_job, check_bullets and 15 more
ATSPrep costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http atsprep-mcp https://atsprep.com/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
18 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Score a resume from 0 to 100 with ATSPrep's fixed rules and list each issue with a stable code, where it is and how to fix it. Also reports how the text parsed (roles, experience and project bullets, education, skills and skill groups, input and scored word counts, with definitions). Role-specific advice, such as seniority signals, is given only when the resume names a target title or you pass tar
| Parameter | Type | Required | Notes |
|---|---|---|---|
| resume_text | string | yes | The whole resume as plain text, one heading, role or bullet per line. |
| target_role | string | no | Optional. The job title the candidate is applying for. |
| job_description | string | no | The full job posting as plain text, including its requirements (120–20,000 characters). For a link, call fetch_job_post first. |
Compare a resume with a job posting: the posting's keywords found in the resume (with how they matched: exact, normalized, alias or stem, and the matched span), the ones missing with the posting sentence they come from, each term's weight and whether the posting lists it as required or preferred, and weighted overall, required and preferred coverage. Posting 120–20,000 characters. Rules version 20
| Parameter | Type | Required | Notes |
|---|---|---|---|
| resume_text | string | yes | The whole resume as plain text, one heading, role or bullet per line. |
| job_description | string | yes | The full job posting as plain text, including its requirements (120–20,000 characters). For a link, call fetch_job_post first. |
Give each resume bullet a score, a verdict and specific fixes with stable codes: weak openers, missing scale or result, numbers that show neither, hard-to-believe claims, first person, vague claims. The same rules and severities as check_resume. Up to 30 bullets of up to 600 characters each; blank items are skipped and reported by index. Rules version 2026-10-19.2.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| bullets | array | yes | One resume bullet per item, at most 30. |
Make a link that opens this resume in ATSPrep Studio, the free editor, so the user can fix it, pick a template and download a PDF. The text travels in the link's #fragment, which is never sent to a server.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| resume_text | string | yes | The whole resume as plain text, one heading, role or bullet per line. |
List ATSPrep's resume designs, each with a link that opens Studio in that design, and the example resumes by role, each with a link that opens it in Studio and a preview image.
No parameter schema on file.
Read a public job posting from its link and return the title, company, location and full description as plain text, ready for match_job, tailor_resume, keyword_scan or interview_questions. Reads LinkedIn, Greenhouse, Lever, Ashby, SmartRecruiters, Workable, Workday and most company careers pages. Some sites block reading; then ask the user to paste the text.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| url | string | yes | The job posting's public link (https). |
List the skills, tools and requirements a job posting asks for, ranked by how hard it leans on each (repetition, position, required or preferred headings), with the high-priority ones flagged. Use match_job to see which a resume already shows. Posting 120–20,000 characters. Rules version 2026-10-19.2.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| job_description | string | yes | The full job posting as plain text, including its requirements (120–20,000 characters). For a link, call fetch_job_post first. |
Tailor a resume to a job posting: the posting's keywords the resume is missing (from match_job's rules) and suggested rewrites of the user's own summary and bullets that bring in the posting's terms only where the existing line already supports them. Each suggestion lists the posting terms it borrowed and confirm_with_user lists terms to ask about, never to add unasked. End the reply with next_ste
| Parameter | Type | Required | Notes |
|---|---|---|---|
| resume_text | string | yes | The whole resume as plain text, one heading, role or bullet per line. |
| job_description | string | yes | The full job posting as plain text, including its requirements (120–20,000 characters). For a link, call fetch_job_post first. |
Check one resume bullet with the fixed rules (score, verdict, fixes) and suggest up to three stronger rewrites that keep every fact as given. Where a number would help, the rewrite leaves a slot such as [X%] for the user to fill. Part of the answer is drafted by an AI model (Gemma 4, with Llama 3.3 70B as a backup, on Cloudflare Workers AI) behind ATSPrep's guard, which drops any figure, name or t
| Parameter | Type | Required | Notes |
|---|---|---|---|
| bullet | string | yes | One resume bullet. |
| role | string | no | Optional. The job title this bullet sits under. |
| company | string | no | Optional. The employer this bullet sits under. |
Draft professional summaries from a resume: rule-based drafts built from its title, skills and the bullets that carry a figure, plus AI drafts that use only facts in the resume. Part of the answer is drafted by an AI model (Gemma 4, with Llama 3.3 70B as a backup, on Cloudflare Workers AI) behind ATSPrep's guard, which drops any figure, name or tool the user's text doesn't contain. If the AI part
| Parameter | Type | Required | Notes |
|---|---|---|---|
| resume_text | string | yes | The whole resume as plain text, one heading, role or bullet per line. |
| target_title | string | no | Optional. The job title the summary should aim at. |
Suggest resume action verbs. Pass a weak opener ("responsible for", "helped") for direct swaps and why they read weak, or the work in plain words ("trained new staff", "cut costs") for the matching verb groups with an example bullet. Leave query empty for every group.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | no | Optional. A weak verb or phrase, or the kind of work in plain words. |
Write LinkedIn headline options from the user's answers, each in a proven pattern (title and focus, title and result, title and who you help…), with its length and roughly what shows in search before the cut. Uses only the answers given.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| role | string | yes | The job title the user wants to be found for. |
| years | string | no | Optional. Years of experience, as a number. |
| focus | string | no | Optional. Their specialty or industry, e.g. "B2B SaaS onboarding". |
| skills | string | no | Optional. Main skills, comma separated. |
| results | string | no | Optional. One or two real results, one per line, with the numbers the user gave. |
| audience | string | no | Optional. Who they help, e.g. "early-stage startups". |
| next | string | no | Optional. What they want next, e.g. "open to product roles in London". |
Check a LinkedIn headline: length against the 220-character limit, what shows in search results before the cut, whether it leads with a searchable job title, and buzzwords or vague claims to replace.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| headline | string | yes | The headline as it reads now. |
| role | string | no | Optional. The job title the user wants to be found for. |
| focus | string | no | Optional. Their specialty or industry. |
| skills | string | no | Optional. Main skills, comma separated. |
Check a LinkedIn About section: what shows before "see more" on a phone and on a computer, whether the opening says who they are, results with numbers, buzzwords, a clear next step, and the 2,600-character limit.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| about | string | yes | The whole About section. |
| role | string | no | Optional. The job title the user wants to be found for. |
Draft a cover letter from the user's resume and the job posting with fixed rules: name, contact details and up to two results from the resume, the job title and top keywords from the posting. Facts that are missing show as [square-bracket] gaps for the user to fill, never as stand-ins. Returns the letter, the gaps and a checklist.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| resume_text | string | no | The whole resume as plain text, one heading, role or bullet per line. |
| job_description | string | no | The full job posting as plain text, including its requirements (120–20,000 characters). For a link, call fetch_job_post first. |
| style | string | no | classic (default), direct, or career-change. |
| name | string | no | Optional. Overrides the name read from the resume. |
| string | no | Optional. | |
| phone | string | no | Optional. |
| current_title | string | no | Optional. The user's current or last job title. |
| company | string | no | Optional. The company they are applying to. |
| role | string | no | Optional. The job title they are applying for. |
| hiring_manager | string | no | Optional. The hiring manager's name, if known. |
| results | string | no | Optional. One or two real results, one per line. |
| why | string | no | Optional. Why this company, in the user's words. |
Draft a short, professional resignation letter and work out the last working day from the notice period. Missing facts show as [square-bracket] gaps. Returns the letter, the last day and a checklist (notice stated, no complaints, length).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tone | string | no | formal (default), warm or short. |
| name | string | no | Optional. The user's name. |
| manager | string | no | Optional. Their manager's name. |
| company | string | no | Optional. |
| role | string | no | Optional. Their job title. |
| notice | string | no | Notice period: 1w, 2w (default) or 4w. Use notice_days for anything else. |
| notice_days | integer | no | Optional. A notice period in days, instead of notice. |
| working_days_only | boolean | no | Count notice in working days (Monday to Friday). Default false: calendar days. |
| date | string | no | Optional. The day the letter is handed in, YYYY-MM-DD. Default today (UTC). |
| reason | string | no | Optional. A one-line reason; none (default) gives no reason. |
| offer_handover | boolean | no | Offer to help hand over. Default true. |
| thanks | string | no | Optional. Something specific to thank them for. |
Interview questions to practise, each with what the interviewer is listening for, plus STAR answer tips. With a job_description, questions come from its skills and duties, along with what to research and questions to ask; with resume_text, from the user's own roles. Rule-based.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| job_description | string | no | Optional. The job posting as plain text. |
| resume_text | string | no | The whole resume as plain text, one heading, role or bullet per line. |
| kind | string | no | Optional. One group: posting, resume, about, behavioural, role or closing. Default all. |
| limit | integer | no | How many questions. Default 12. |
Review the user's answer to an interview question: a rating, length and speaking time, STAR coverage for stories, filler words, specific checks, the follow-up an interviewer would likely ask, and a stronger version that keeps to the user's own facts. Part of the answer is drafted by an AI model (Gemma 4, with Llama 3.3 70B as a backup, on Cloudflare Workers AI) behind ATSPrep's guard, which drops
| Parameter | Type | Required | Notes |
|---|---|---|---|
| question | string | yes | The interview question. |
| answer | string | yes | The user's answer, as they would say it. |
| kind | string | no | story (default: a past example, scored on STAR), pitch (tell me about yourself), plan (how would you…), number (salary or a figure) or close (questions for them). |
| resume_text | string | no | Optional. The resume, so the stronger answer can use real facts from it. |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install ATSPrep or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | moderate | capability blast radius (moderate) — client exposure if the model is manipulated | −3 |
| coverage-honesty | manifest | inspection depth (manifest) — how much of the target the scan could see | −4 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
The scan read each tool’s name, description, input schema and annotations exactly as the server listed them the last time it answered us; no code was reviewed. We ask the server again about once a month, and a list that changed is graded again.
The implementation source was not read — this reflects the declared tool metadata only.
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. moderate is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| check_resume | no tags | |
| match_job | no tags | |
| check_bullets | no tags | |
| open_in_studio | untrusted-input | untrusted-input: keyword "download" |
| list_templates | no tags | |
| fetch_job_post | untrusted-input | untrusted-input: keyword "fetch", declares openWorldHint: true (interacts with entities outside the server) |
| keyword_scan | no tags | |
| tailor_resume | untrusted-input | untrusted-input: keyword "download" |
| improve_bullet | no tags | |
| write_summary | no tags | |
| action_verbs | no tags | |
| generate_linkedin_headline | no tags | |
| check_linkedin_headline | no tags | |
| check_linkedin_about | no tags | |
| draft_cover_letter | no tags | |
| draft_resignation_letter | no tags | |
| interview_questions | no tags | |
| review_interview_answer | no tags |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
The public result for this release does not print the flow graph, so there is nothing to show here. That is not the same as "no paths were found": what the scan did read is above, under coverage.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 2.0.0.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish ATSPrep can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.