CareerProof MCP Server
AI-powered career intelligence and workforce analytics via the Model Context Protocol. Connect from Claude Desktop, Cursor, Windsurf, or any MCP-compatible client.
⚡ Quick Start
Get connected in three steps. No SDK or local installation required — the MCP server runs on Cloudflare's edge.
Get your API token
Sign in at careerproof.ai and copy your API key from Config → Settings. API keys start with cpk_.
Choose your connection method
OAuth 2.0 at /mcp — interactive login (Claude Desktop, Windsurf).
Bearer token at /mcp/bearer — pass your API key directly (Cursor, programmatic).
Start using tools
Once connected, your AI client discovers all 60 tools automatically. Try: atlas_create_context (free) or ceevee_upload_cv (free) to get started.
🔒 Authentication
Two authentication methods are available. Choose based on your MCP client.
OAuth 2.0
Full OAuth 2.0 authorization code flow with PKCE. Your MCP client handles the flow automatically — you just log in.
- Automatic token refresh
- Session persistence via KV
- Supports email/password and API key login
Bearer Token
Pass your API key or JWT directly in the Authorization header. No OAuth flow needed.
- Header:
Authorization: Bearer cpk_... - Or query param:
?token=cpk_... - Validates against the CareerProof backend
cpk_ prefix) also work on the OAuth /mcp endpoint via the resolveExternalToken fallback. Pass Bearer cpk_... in the Authorization header and it'll validate directly against the backend.
🔌 Connect Your Client
Step-by-step setup for popular MCP clients.
Claude Desktop
Go to Claude.ai → Settings → Connectors. Add a new Custom Connector with the URL:
Claude handles OAuth automatically. You'll be prompted to log in on first use.
Cursor
In Cursor settings, add a new MCP server:
Windsurf
In Windsurf MCP settings, add a remote server:
Windsurf supports OAuth — you'll be prompted to authorize.
MCP Inspector
For testing and debugging:
🛠 Workflows
Two tool namespaces serve different users. All 60 tools are available through a single connection.
Atlas — Workforce Intelligence
Upload candidates, create job descriptions, run competency analyses, batch rank against JDs, and generate research reports.
CeeVee — Career Optimization
Upload your CV, run market positioning analysis, choose a narrative lens, and get targeted optimization edits.
Or use ceevee_full_review for a single-call autonomous review.
↻ Async Pattern
Long-running tools (GEM analysis, batch jobs, reports) use an async pattern. Tools marked Async return a task_id immediately.
instructions field in the server manifest tells the AI to poll. You don't need to manage this yourself.
💰 Credits & Billing
Tools are metered with credits. CRUD and status tools are always free. Analysis, chat, and batch tools have credit costs shown in each tool's badge.
| Category | Example Tools | Cost |
|---|---|---|
| CRUD & Status | atlas_create_context, ceevee_list_versions, careerproof_task_status | Free |
| Chat | atlas_advisor_chat, ceevee_chat | 1-3 cr |
| Analysis | ceevee_analyze_positioning, atlas_start_jd_analysis | 5 cr |
| Deep Analysis | atlas_start_gem_analysis (gem_full), ceevee_full_review | 10 cr |
| Matching | atlas_start_fit_match, atlas_generate_interview | 8 cr |
| Reports | atlas_start_report | 15+ cr |
| Batch | atlas_start_batch_gem, atlas_start_jd_fit_batch | 3-10 cr/candidate |
careerproof://account resource.
Credit Plans
| Plan | Rate | Value |
|---|---|---|
| Individual | 1 SGD = 15 credits | Best for occasional use |
| Pro | 1 SGD = 20 credits | For regular professionals |
| Pro+ | 1 SGD = 25 credits | Best value for power users |
📚 Tool Reference
All 60 tools with parameters, types, and credit costs. Click any tool name to copy its anchor link.
Universal 2
Async task polling — works with any async tool across Atlas and CeeVee.
careerproof_task_status
Check the status of any async task. Returns status (pending/running/completed/failed), progress percentage, and current stage.
| Parameter | Type | Description | |
|---|---|---|---|
task_id |
string |
required | Task ID returned by any async start tool |
careerproof_task_result
Retrieve the full result of a completed async task. Supports analysis, batch_gem, jd_fit_batch, report, custom_eval_inference, custom_eval_batch, and dialogue_assessment result types.
| Parameter | Type | Description | |
|---|---|---|---|
task_id |
string |
required | Task ID of a completed async task |
result_type |
enum: analysis | batch_gem | jd_fit_batch | report | custom_eval_inference | custom_eval_batch | dialogue_assessment |
required | Type of result to fetch (determines backend endpoint) |
resource_id |
number |
optional | Resource-specific ID (analysis_id, job_id, report_id, etc.) |
context_id |
number |
optional | Context ID (required for jd_fit_batch) |
Atlas — CRUD 9
Manage hiring contexts, candidates, and job descriptions. All free.
atlas_create_context
Create a new hiring context (company profile) for organizing candidates and JDs.
| Parameter | Type | Description | |
|---|---|---|---|
company_name |
string |
required | Company name (1-255 chars) |
industry |
string |
optional | Industry (max 100 chars) |
company_size |
enum: startup | small | medium | large | enterprise |
optional | Company size |
location |
string |
optional | Location (max 255 chars) |
company_website |
string |
optional | Website URL (max 500 chars) |
hiring_context |
object |
optional | Hiring details: open_roles, team_structure, budget_ranges, hiring_goals, hiring_timeline, key_requirements, competitor_context |
is_default |
boolean |
optional | Set as default context (default: false) |
atlas_list_contexts
List all hiring contexts for the authenticated user.
| Parameter | Type | Description | |
|---|---|---|---|
include_inactive |
boolean |
optional | Include inactive contexts (default: false) |
atlas_update_context
Update a hiring context's details (name, industry, size, hiring context).
| Parameter | Type | Description | |
|---|---|---|---|
context_id |
number |
required | Context ID |
company_name |
string |
optional | New company name |
industry |
string |
optional | New industry |
company_size |
enum: startup | small | medium | large | enterprise |
optional | New company size |
location |
string |
optional | New location |
company_website |
string |
optional | New website |
hiring_context |
object |
optional | Updated hiring details |
is_default |
boolean |
optional | Set as default |
is_active |
boolean |
optional | Activate/deactivate |
atlas_upload_candidate
Upload a candidate CV (PDF/DOCX) to a hiring context. CV parsing starts asynchronously.
| Parameter | Type | Description | |
|---|---|---|---|
context_id |
number |
required | Hiring context ID |
file |
string (base64) |
required | CV file as base64 encoded string |
candidate_name |
string |
optional | Candidate name (max 255) |
candidate_email |
string |
optional | Candidate email (max 255) |
filename |
string |
optional | Original filename for content-type detection |
tags |
string[] |
optional | Tags for filtering (e.g. ['senior', 'engineering']) |
notes |
string |
optional | Notes about the candidate |
atlas_list_candidates
List all candidates in a hiring context.
| Parameter | Type | Description | |
|---|---|---|---|
context_id |
number |
required | Context ID |
atlas_get_candidate
Get full candidate detail including parsed CV content and parse status.
| Parameter | Type | Description | |
|---|---|---|---|
context_id |
number |
required | Context ID |
candidate_id |
number |
required | Candidate ID |
atlas_create_jd
Create a job description from text within a hiring context.
| Parameter | Type | Description | |
|---|---|---|---|
context_id |
number |
required | Context ID |
title |
string |
required | JD title (1-255 chars) |
content |
string |
required | Full JD text (min 10 chars) |
atlas_list_jds
List all job descriptions for a hiring context.
| Parameter | Type | Description | |
|---|---|---|---|
context_id |
number |
required | Context ID |
atlas_get_analytics
Get comprehensive talent analytics dashboard data (candidate stats, analysis coverage, fit score distributions).
| Parameter | Type | Description | |
|---|---|---|---|
context_id |
number |
required | Context ID |
Atlas — Analysis 4
AI-powered competency analysis and JD assessment.
atlas_start_gem_analysis
Start an async GEM (10-factor competency) analysis on a candidate. Poll with careerproof_task_status, then fetch with atlas_get_analysis.
| Parameter | Type | Description | |
|---|---|---|---|
context_id |
number |
required | Context ID |
candidate_id |
number |
required | Candidate ID |
analysis_type |
enum: gem_full | gem_lite | career_path |
optional | Analysis depth (default: gem_full) |
atlas_get_analysis
Retrieve a completed analysis result by analysis ID. Returns scores, competency breakdown, and recommendations.
| Parameter | Type | Description | |
|---|---|---|---|
analysis_id |
number |
required | Analysis ID |
atlas_list_analyses
List all analyses for a candidate with optional type filtering.
| Parameter | Type | Description | |
|---|---|---|---|
context_id |
number |
required | Context ID |
candidate_id |
number |
required | Candidate ID |
analysis_type |
enum: gem_full | gem_lite | career_path | jd_fit |
optional | Filter by type |
atlas_start_jd_analysis
Analyze a JD for market competitiveness, clarity, bias detection, salary benchmarking, and skills extraction. Synchronous.
| Parameter | Type | Description | |
|---|---|---|---|
jd_text |
string |
required | Full JD text (min 50 chars) |
include_live_search |
boolean |
optional | Include live web search for salary data (default: true) |
industry_hint |
string |
optional | Industry hint (max 100) |
location_hint |
string |
optional | Location hint (max 255) |
Atlas — Batch & Reports 16
Bulk processing: batch GEM, JD-FIT batch, custom eval, reports, dialogue assessment.
atlas_start_batch_gem
Start a batch GEM analysis across multiple candidates. Poll with atlas_get_batch_gem_status.
| Parameter | Type | Description | |
|---|---|---|---|
context_id |
number |
required | Context ID |
candidate_ids |
number[] |
required | Candidate IDs (min 1) |
analysis_type |
enum: gem_full | gem_lite | career_path |
optional | Analysis type (default: gem_full) |
atlas_get_batch_gem_status
Check progress of a batch GEM job.
| Parameter | Type | Description | |
|---|---|---|---|
job_id |
number |
required | Batch job ID |
atlas_get_batch_gem_results
Get all results from a completed batch GEM job.
| Parameter | Type | Description | |
|---|---|---|---|
job_id |
number |
required | Batch job ID |
atlas_start_jd_fit_batch
Match multiple candidates against a JD. Poll with atlas_get_jd_fit_batch_status.
| Parameter | Type | Description | |
|---|---|---|---|
context_id |
number |
required | Context ID |
candidate_ids |
number[] |
required | Candidate IDs (min 1) |
jd_title |
string |
optional | JD title (max 255) |
jd_content |
string |
optional | JD text (falls back to context active JD) |
use_kb_enhancement |
boolean |
optional | Use KB enhancement (default: true) |
atlas_get_jd_fit_batch_status
Check progress of a JD-FIT batch job.
| Parameter | Type | Description | |
|---|---|---|---|
context_id |
number |
required | Context ID |
batch_id |
number |
required | Batch ID |
atlas_get_jd_fit_results
Get JD-FIT results for a context. Returns ranked candidates with fit scores.
| Parameter | Type | Description | |
|---|---|---|---|
context_id |
number |
required | Context ID |
atlas_start_custom_eval_batch
Batch evaluate candidates using a custom evaluation model. Poll with atlas_get_custom_eval_batch_status.
| Parameter | Type | Description | |
|---|---|---|---|
custom_model_id |
number |
required | Custom eval model ID |
candidate_ids |
number[] |
required | Candidate IDs (min 1) |
context_id |
number |
required | Context ID |
detail_level |
enum: brief | standard | deep |
optional | Detail level (default: standard) |
template_id |
number |
optional | Evaluation template ID |
atlas_get_custom_eval_batch_status
Check progress of a custom evaluation batch.
| Parameter | Type | Description | |
|---|---|---|---|
batch_id |
number |
required | Batch ID |
atlas_get_custom_eval_batch_results
Get results from a completed custom eval batch.
| Parameter | Type | Description | |
|---|---|---|---|
batch_id |
number |
required | Batch ID |
atlas_start_report
Generate a research report (market_research, competitor_analysis, or talent_landscape). Poll with careerproof_task_status.
| Parameter | Type | Description | |
|---|---|---|---|
report_type |
string |
required | Report type: market_research | competitor_analysis | talent_landscape |
inputs |
object |
required | Report-specific inputs (varies by report_type) |
atlas_get_report
Get report status and metadata.
| Parameter | Type | Description | |
|---|---|---|---|
report_id |
number |
required | Report ID |
atlas_download_report
Download a completed report as base64-encoded PDF.
| Parameter | Type | Description | |
|---|---|---|---|
report_id |
number |
required | Report ID |
atlas_list_reports
List all generated reports with status and summary.
| Parameter | Type | Description | |
|---|---|---|---|
| No parameters | |||
atlas_start_dialogue_assessment
Assess dialogue/interview transcripts in a session. Poll with careerproof_task_status.
| Parameter | Type | Description | |
|---|---|---|---|
session_id |
number |
required | Dialogue session ID |
atlas_get_dialogue_results
Get assessment results for a dialogue session.
| Parameter | Type | Description | |
|---|---|---|---|
session_id |
number |
required | Dialogue session ID |
atlas_start_custom_eval_inference
Auto-generate evaluation dimensions for a custom eval model. Poll with careerproof_task_status.
| Parameter | Type | Description | |
|---|---|---|---|
model_id |
number |
required | Custom eval model ID |
Atlas — Custom Eval Models 12
Create and manage custom evaluation models: CRUD, artifacts, rubric inference, and overrides. All free.
atlas_create_custom_eval_model
Create a new custom evaluation model for a hiring context.
| Parameter | Type | Description | |
|---|---|---|---|
client_context_id |
number |
required | Client context ID |
name |
string |
required | Model name (1-255 chars) |
description |
string |
optional | Model description (max 2000) |
atlas_list_custom_eval_models
List all custom evaluation models for the authenticated user.
| Parameter | Type | Description | |
|---|---|---|---|
| No parameters | |||
atlas_get_custom_eval_model
Get full detail for a custom eval model including dimensions, weights, and rubric status.
| Parameter | Type | Description | |
|---|---|---|---|
model_id |
number |
required | Model ID |
atlas_update_custom_eval_model
Update a custom eval model's metadata (name, description, dimensions, weights).
| Parameter | Type | Description | |
|---|---|---|---|
model_id |
number |
required | Model ID |
name |
string |
optional | Updated name |
description |
string |
optional | Updated description |
inferred_dimensions |
array |
optional | Updated dimensions |
inferred_weights |
object |
optional | Updated weights |
atlas_delete_custom_eval_model
Delete a custom evaluation model and all its artifacts and rubrics.
| Parameter | Type | Description | |
|---|---|---|---|
model_id |
number |
required | Model ID |
atlas_upload_custom_eval_artifact
Upload a file artifact (CV, JD, template) as base64 to teach the model.
| Parameter | Type | Description | |
|---|---|---|---|
model_id |
number |
required | Model ID |
file |
string (base64) |
required | File as base64 string (PDF/DOCX) |
artifact_type |
enum: cv_with_notes | template | free_text | jd |
required | Artifact type |
filename |
string |
optional | Original filename |
notes |
string |
optional | Notes about this artifact |
label |
enum: strong | weak | mixed |
optional | Quality label |
atlas_add_custom_eval_text_artifact
Add a plain text artifact to teach the model (rubric notes, criteria, descriptions).
| Parameter | Type | Description | |
|---|---|---|---|
model_id |
number |
required | Model ID |
artifact_type |
enum: cv_with_notes | template | free_text | jd |
required | Artifact type |
text_content |
string |
required | Text content |
notes |
string |
optional | Notes about this artifact |
label |
enum: strong | weak | mixed |
optional | Quality label |
atlas_list_custom_eval_artifacts
List all artifacts uploaded to a custom eval model.
| Parameter | Type | Description | |
|---|---|---|---|
model_id |
number |
required | Model ID |
atlas_infer_custom_eval_rubric
AI infers evaluation rubric from artifacts. Sync call, may take 30-60 seconds.
| Parameter | Type | Description | |
|---|---|---|---|
model_id |
number |
required | Model ID |
atlas_get_custom_eval_rubric
Get the current rubric including dimensions, scoring criteria, and any overrides.
| Parameter | Type | Description | |
|---|---|---|---|
model_id |
number |
required | Model ID |
atlas_set_custom_eval_rubric_overrides
Set rubric overrides to customize AI-inferred rubric (adjust weights, rename dimensions).
| Parameter | Type | Description | |
|---|---|---|---|
model_id |
number |
required | Model ID |
overrides |
object |
required | Override configs keyed by dimension name |
atlas_clear_custom_eval_rubric_overrides
Clear all rubric overrides, reverting to AI-inferred rubric.
| Parameter | Type | Description | |
|---|---|---|---|
model_id |
number |
required | Model ID |
Atlas — Chat 2
Conversational AI for workforce intelligence and hiring strategy.
atlas_chat
Full-featured Atlas AI assistant with live tool use (salary benchmarks, talent supply/demand, competitor intel). May take 2-3 min for complex queries.
| Parameter | Type | Description | |
|---|---|---|---|
message |
string |
required | User message |
conversation_id |
number |
optional | Continue existing thread (omit to start new) |
context_id |
number |
optional | Hiring context for context-aware responses |
atlas_advisor_chat
Lightweight hiring advice — faster and cheaper than atlas_chat, no tool use.
| Parameter | Type | Description | |
|---|---|---|---|
message |
string |
required | User message |
conversation_id |
number |
optional | Continue existing thread (omit to start new) |
Atlas — Utilities 4
Real-time matching, ranking, and interview question generation.
atlas_start_fit_match
Start async fit match for a single candidate against a JD. Returns task_id and analysis_id.
| Parameter | Type | Description | |
|---|---|---|---|
context_id |
number |
required | Context ID |
candidate_id |
number |
required | Candidate ID |
jd_text |
string |
required | JD text to match against |
atlas_fit_match_enhanced
Enhanced FIT match with knowledge base augmentation for deeper analysis and market context.
| Parameter | Type | Description | |
|---|---|---|---|
context_id |
number |
required | Context ID |
candidate_id |
number |
required | Candidate ID |
jd_text |
string |
required | JD text to match against |
atlas_start_fit_rank
Start async fit rank for multiple candidates against a JD. Returns task_id and analysis_id.
| Parameter | Type | Description | |
|---|---|---|---|
context_id |
number |
required | Context ID |
candidate_ids |
number[] |
required | Candidate IDs (min 2) |
jd_text |
string |
required | JD text to rank against |
atlas_generate_interview
Generate interview questions with suggested answers and scoring rubrics, tailored to a candidate's profile. SSE-buffered (30-60s).
| Parameter | Type | Description | |
|---|---|---|---|
context_id |
number |
required | Context ID |
candidate_id |
number |
required | Candidate ID |
jd_text |
string |
optional | Optional JD text for role-targeted questions |
pressure_level |
enum: supportive | standard | aggressive |
optional | Pressure level (default: standard) |
num_questions |
number (1-15) |
optional | Number of questions (default: 5) |
CeeVee — CRUD 5
CV upload, version management, and positioning session retrieval. All free.
ceevee_upload_cv
Upload a CV file (PDF/DOCX). Parses the document and creates a CV version with structured sections.
| Parameter | Type | Description | |
|---|---|---|---|
file |
string (base64) |
required | CV file as base64 encoded string |
filename |
string |
optional | Original filename for content-type detection |
ceevee_list_versions
List all CV versions for the authenticated user.
| Parameter | Type | Description | |
|---|---|---|---|
| No parameters | |||
ceevee_get_version
Get detailed CV version including structured content, sections, word count, and audience profile.
| Parameter | Type | Description | |
|---|---|---|---|
cv_version_id |
number |
required | CV version ID |
ceevee_list_positioning_sessions
List all positioning sessions (market analysis through lens selection to targeted edits).
| Parameter | Type | Description | |
|---|---|---|---|
| No parameters | |||
ceevee_get_positioning_session
Get full positioning session detail including analysis, lens, opportunities, targeted edits, and PDF URLs.
| Parameter | Type | Description | |
|---|---|---|---|
session_id |
number |
required | Session ID |
CeeVee — Analysis 4
Market positioning pipeline and CV optimization tools.
ceevee_analyze_positioning
Step 1/3 — Run market positioning analysis. Returns snapshot, detected lens, recruiter inference, and session_id.
| Parameter | Type | Description | |
|---|---|---|---|
cv_version_id |
number |
required | CV version ID |
session_id |
number |
optional | Resume existing session |
ceevee_get_opportunities
Step 2/3 — Get career pivot opportunities based on a selected narrative lens.
| Parameter | Type | Description | |
|---|---|---|---|
cv_version_id |
number |
required | CV version ID |
lens |
string |
required | Narrative lens from step 1 (e.g. 'Technical Leader') |
session_id |
number |
optional | Session ID from step 1 |
ceevee_confirm_lens
Step 3/3 — Confirm lens and generate targeted CV edits with trade-offs and optional PDF output.
| Parameter | Type | Description | |
|---|---|---|---|
cv_version_id |
number |
required | CV version ID |
confirmed_lens |
string |
required | Confirmed narrative lens |
custom_positioning |
string |
optional | Custom positioning description |
session_id |
number |
optional | Session ID from step 1 |
positioning_snapshot |
object |
optional | Snapshot from step 1 |
detected_lens_full |
object |
optional | Lens data from step 1 |
recruiter_inference |
object |
optional | Recruiter inference from step 1 |
selected_opportunities |
object[] |
optional | Opportunities from step 2 |
ceevee_full_review
Autonomous full CV review in one call: positioning + lens + edits + optional opportunities. Alternative to the 3-step pipeline.
| Parameter | Type | Description | |
|---|---|---|---|
cv_version_id |
number |
required | CV version ID |
requested_lens |
string |
optional | Specific lens (null = auto-infer) |
jd_text |
string |
optional | Optional JD for targeted optimization |
include_opportunities |
boolean |
optional | Include opportunity analysis (default: false) |
session_id |
number |
optional | Session ID |
CeeVee — Chat 2
Conversational CV optimization assistant with edit explanations.
ceevee_chat
CV optimization guidance with context-aware conversations linked to a CV version.
| Parameter | Type | Description | |
|---|---|---|---|
message |
string |
required | User message |
cv_version_id |
number |
required | CV version ID from ceevee_upload_cv or ceevee_list_versions |
conversation_id |
number |
optional | Continue existing thread (omit to start new) |
ceevee_explain_change
Detailed explanation of a specific edit from a positioning review.
| Parameter | Type | Description | |
|---|---|---|---|
cv_version_id |
number |
required | CV version ID |
change_id |
string |
required | Edit ID from ceevee_confirm_lens or ceevee_full_review output |