Tailor your resume to any job, score it against the ATS, and practice interviews. 7-day free trial;
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
What CareerPro does and what is free Pricing: {"unit": "call", "price_usd": 0, "free_quota": "200 per day per IP", "note": "Keyed volume pricing is published at https://careerpro.tech/pricing.json"}.
This tool takes no arguments.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http careerpro https://careerpro.tech/mcp
What CareerPro does and what is free Pricing: {"unit": "call", "price_usd": 0, "free_quota": "200 per day per IP", "note": "Keyed volume pricing is published at https://careerpro.tech/pricing.json"}.
No arguments.
{
"type": "object",
"required": [],
"properties": {}
}Returns a 0 to 100 keyword match, the terms you matched and the ones missing. Pricing: {"unit": "call", "price_usd": 0, "free_quota": "200 per day per IP", "note": "Keyed volume pricing is published at https://careerpro.tech/pricing.json"}.
| Argument | Type | Description |
|---|---|---|
| resume_text* | string | |
| job_description* | string |
{
"type": "object",
"required": [
"job_description",
"resume_text"
],
"properties": {
"resume_text": {
"type": "string",
"maxLength": 20000
},
"job_description": {
"type": "string",
"maxLength": 20000
}
}
}Returns base.json rules, visa rules and the profile block the desktop helper writes next to the runners. Only an approved bank is returned; approval happens once on careerpro.tech/auto-apply. Pricing: {"unit": "call", "price_usd": 0, "free_quota": "200 per day per IP", "note": "Keyed volume pricing is published at https://careerpro.tech/pricing.json"}.
No arguments.
{
"type": "object",
"required": [],
"properties": {}
}Openings gathered from the employer boards you watch, ranked by keyword fit, with the screen verdict for each. Key from careerpro.tech/auto-apply. Scope read. Pricing: {"unit": "call", "price_usd": 0, "free_quota": "200 per day per IP", "note": "Keyed volume pricing is published at https://careerpro.tech/pricing.json"}.
| Argument | Type | Description |
|---|---|---|
| limit | integer | limit |
| stage | string | stage |
| verdict | string | verdict |
{
"type": "object",
"required": [],
"properties": {
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "limit"
},
"stage": {
"type": "string",
"description": "stage"
},
"verdict": {
"type": "string",
"description": "verdict"
}
}
}Cover letter for one opening as text and PDF (base64) Pricing: {"unit": "call", "price_usd": 0, "free_quota": "200 per day per IP", "note": "Keyed volume pricing is published at https://careerpro.tech/pricing.json"}.
| Argument | Type | Description |
|---|---|---|
| job_id* | integer | job_id |
{
"type": "object",
"required": [
"job_id"
],
"properties": {
"job_id": {
"type": "integer",
"description": "job_id"
}
}
}Everything needed to apply: posting text, screen verdict with evidence, tailored resume text, cover letter, pre-mapped answers from your approved answer bank, unanswered questions, dedupe receipt and the per-ATS mode (submit, fill_only, headed, skip). Builds the pack when it does not exist yet; tailoring uses only facts from your own resume. Pricing: {"unit": "call", "price_usd": 0, "free_quota": "200 per day per IP", "note": "Keyed volume pricing is published at https://careerpro.tech/pricing.json"}.
| Argument | Type | Description |
|---|---|---|
| ai | string | ai |
| job_id* | integer | job_id |
{
"type": "object",
"required": [
"job_id"
],
"properties": {
"ai": {
"type": "string",
"description": "ai"
},
"job_id": {
"type": "integer",
"description": "job_id"
}
}
}Where prices live and what costs nothing Pricing: {"unit": "call", "price_usd": 0, "free_quota": "200 per day per IP", "note": "Keyed volume pricing is published at https://careerpro.tech/pricing.json"}.
No arguments.
{
"type": "object",
"required": [],
"properties": {}
}FIT packs with an approved answer bank, ordered, with the per-ATS mode. The submit step never runs on our servers: your desktop helper or your own agent executes it in your browser, with your logins. LinkedIn Easy Apply, CAPTCHA solving and attestation checkboxes are never automated. Pricing: {"unit": "call", "price_usd": 0, "free_quota": "200 per day per IP", "note": "Keyed volume pricing is published at https://careerpro.tech/pricing.json"}.
| Argument | Type | Description |
|---|---|---|
| limit | integer | limit |
{
"type": "object",
"required": [],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "limit"
}
}
}Reads each watched employer board's own public ATS feed (Greenhouse, Lever, Ashby, Workable) and files new matches. An account that watches no boards yet is first given the top 20 registry boards for its target titles (a shared registry of employers' public feeds; LinkedIn, Indeed and similar sites are never used). Returns seeded, fetched, matched, new and packs_built. Pricing: {"unit": "call", "price_usd": 0, "free_quota": "200 per day per IP", "note": "Keyed volume pricing is published at https://careerpro.tech/pricing.json"}.
No arguments.
{
"type": "object",
"required": [],
"properties": {}
}Tailored resume for one opening as PDF (base64) and text Pricing: {"unit": "call", "price_usd": 0, "free_quota": "200 per day per IP", "note": "Keyed volume pricing is published at https://careerpro.tech/pricing.json"}.
| Argument | Type | Description |
|---|---|---|
| job_id* | integer | job_id |
{
"type": "object",
"required": [
"job_id"
],
"properties": {
"job_id": {
"type": "integer",
"description": "job_id"
}
}
}Logs the exact answers that were filled and the outcome (applied, dry_run_ready, owner_required, submission_unconfirmed, duplicate_refused, error). 'applied' with submitted=true moves the opening to Applied and sets a follow-up date. Unconfirmed results are never retried automatically. Pricing: {"unit": "call", "price_usd": 0, "free_quota": "200 per day per IP", "note": "Keyed volume pricing is published at https://careerpro.tech/pricing.json"}.
| Argument | Type | Description |
|---|---|---|
| ats | string | |
| mode | string | |
| node | string | |
| job_id* | integer | |
| status* | string | |
| answers | array | |
| pack_id | string | |
| final_url | string | |
| submitted | boolean | |
| engine_sha256 | string |
Usage for the calling key (last 30 days)
No arguments.
{
"type": "object",
"required": [],
"properties": {}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 10, 2026.
| owner_required | array |
{
"type": "object",
"required": [
"job_id",
"status"
],
"properties": {
"ats": {
"type": "string"
},
"mode": {
"type": "string"
},
"node": {
"type": "string",
"maxLength": 80
},
"job_id": {
"type": "integer"
},
"status": {
"type": "string"
},
"answers": {
"type": "array",
"items": {
"type": "object"
}
},
"pack_id": {
"type": "string"
},
"final_url": {
"type": "string"
},
"submitted": {
"type": "boolean"
},
"engine_sha256": {
"type": "string"
},
"owner_required": {
"type": "array",
"items": {
"type": "string"
}
}
}
}