career-compass-mcp 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.md +368 -340
  2. package/build/bin/cli.d.ts +5 -5
  3. package/build/bin/cli.d.ts.map +1 -1
  4. package/build/bin/cli.js +55 -49
  5. package/build/bin/cli.js.map +1 -1
  6. package/build/src/dashboard-lite/render.d.ts +21 -0
  7. package/build/src/dashboard-lite/render.d.ts.map +1 -0
  8. package/build/src/dashboard-lite/render.js +216 -0
  9. package/build/src/dashboard-lite/render.js.map +1 -0
  10. package/build/src/dashboard-lite/server.d.ts +14 -0
  11. package/build/src/dashboard-lite/server.d.ts.map +1 -0
  12. package/build/src/dashboard-lite/server.js +50 -0
  13. package/build/src/dashboard-lite/server.js.map +1 -0
  14. package/build/src/schemas/career-schema.d.ts +108 -0
  15. package/build/src/schemas/career-schema.d.ts.map +1 -1
  16. package/build/src/schemas/career-schema.js +43 -0
  17. package/build/src/schemas/career-schema.js.map +1 -1
  18. package/build/src/server.d.ts.map +1 -1
  19. package/build/src/server.js +4 -1
  20. package/build/src/server.js.map +1 -1
  21. package/build/src/storage/file-store.d.ts +43 -0
  22. package/build/src/storage/file-store.d.ts.map +1 -1
  23. package/build/src/storage/file-store.js +133 -4
  24. package/build/src/storage/file-store.js.map +1 -1
  25. package/build/src/tools/career-kb.d.ts.map +1 -1
  26. package/build/src/tools/career-kb.js +94 -8
  27. package/build/src/tools/career-kb.js.map +1 -1
  28. package/build/src/tools/interview.d.ts.map +1 -1
  29. package/build/src/tools/interview.js +5 -2
  30. package/build/src/tools/interview.js.map +1 -1
  31. package/build/src/tools/opportunity.d.ts.map +1 -1
  32. package/build/src/tools/opportunity.js +5 -2
  33. package/build/src/tools/opportunity.js.map +1 -1
  34. package/build/src/tools/pipeline.d.ts.map +1 -1
  35. package/build/src/tools/pipeline.js +28 -15
  36. package/build/src/tools/pipeline.js.map +1 -1
  37. package/build/src/tools/resume.d.ts.map +1 -1
  38. package/build/src/tools/resume.js +6 -3
  39. package/build/src/tools/resume.js.map +1 -1
  40. package/build/src/tools/signal-digest.d.ts +15 -0
  41. package/build/src/tools/signal-digest.d.ts.map +1 -0
  42. package/build/src/tools/signal-digest.js +45 -0
  43. package/build/src/tools/signal-digest.js.map +1 -0
  44. package/build/src/untrusted.d.ts +63 -0
  45. package/build/src/untrusted.d.ts.map +1 -0
  46. package/build/src/untrusted.js +83 -0
  47. package/build/src/untrusted.js.map +1 -0
  48. package/build/src/version.d.ts +23 -0
  49. package/build/src/version.d.ts.map +1 -0
  50. package/build/src/version.js +66 -0
  51. package/build/src/version.js.map +1 -0
  52. package/data/example/career/education.yaml +20 -0
  53. package/data/example/career/journal.yaml +56 -0
  54. package/data/example/career/projects.yaml +47 -0
  55. package/package.json +3 -13
package/README.md CHANGED
@@ -1,340 +1,368 @@
1
- # Career Compass MCP
2
-
3
- [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
4
- [![npm](https://img.shields.io/npm/v/career-compass-mcp.svg)](https://www.npmjs.com/package/career-compass-mcp)
5
- [![Node](https://img.shields.io/badge/node-%3E%3D18-green.svg)](https://nodejs.org)
6
- [![MCP](https://img.shields.io/badge/MCP-server-7c4dff.svg)](https://modelcontextprotocol.io)
7
-
8
- **Your AI-native career co-pilot, built for Claude.**
9
-
10
- Career Compass turns Claude into a full job-search partner — one that knows your entire career history, tailors every resume and cover letter, tracks every application, and preps you for every interview. Initiate via conversation, onboard, and track multiple applications in moments.
11
-
12
- ---
13
-
14
- ## Your data stays on your machine
15
-
16
- Career Compass is local-first. Your career history lives in plain YAML files on your own disk, under the directory you point `CAREER_DATA_PATH` at (default `~/.career-compass`). There is no account, no cloud sync, and no telemetry — nothing phones home.
17
-
18
- Your real data is never committed to git: the `.gitignore` excludes `data/career/` and `data/pipeline/`, so the only career data in this repo is the fictional sample under `data/example/` (meet Alex Rivera). Read it, edit it, delete it it's all just files you own. And nothing real ever ships in the npm package — a publish-time guard (`npm-pack-leak-guard`) scans the exact tarball and fails the publish if any real-career marker appears.
19
-
20
- ---
21
-
22
- ## What it feels like
23
-
24
- ```
25
- You: I have a panel interview at Veridian Health on Friday Director of Operations role.
26
- Can you prep me?
27
-
28
- Claude: On it. Reading your career history now...
29
-
30
- [Generates 90-second pitch, 8 STAR stories matched to likely panel questions,
31
- company research brief, 10 questions to ask them, and a list of watch-outs
32
- based on gaps in your backgroundall in one response]
33
- ```
34
-
35
- ```
36
- You: Here's a job posting I just found. [pastes posting]
37
- How well do I fit?
38
-
39
- Claude: Fit score: 8.1/10. Here's why and here's what they'll probe you on...
40
-
41
- [Returns matched strengths, honest gap analysis, talking points in their language,
42
- and a "day in the life" of what the role actually looks like]
43
- ```
44
-
45
- ```
46
- You: Show me what needs attention in my pipeline today.
47
-
48
- Claude: 3 things:
49
- - Meridian Logistics follow-up is overdue (8 days since you applied, referral from Marcus Chen)
50
- - Veridian panel is Friday — prep above
51
- - Novare rejection arrived — want me to draft a keep-the-door-open response?
52
- ```
53
-
54
- ---
55
-
56
- ## Architecture
57
-
58
- ```
59
- ┌─────────────┐ ┌──────────────────────────────────────┐
60
- MCP │ MCP Server (Node.js)
61
- Claude │◄────────►│
62
- │ │ stdio │ Tools ─── Resume, Pipeline, Interview│
63
- │ │ │ Resources ─ Career KB, Pipeline data │
64
- └─────────────┘ Prompts ── Power-user shortcuts │
65
- │ │
66
- ┌──────────────┐
67
- File Store │ │
68
- (YAML files)
69
- └──────┬───────┘
70
- └────────────────┼─────────────────────┘
71
- │ reads
72
- ┌────────────────┼─────────────────────┐
73
- │ Dashboard │ (Next.js) │
74
- │ ▼ │
75
- │ Pipeline Kanban · Career KB Overview
76
- │ Analytics · Onboarding Wizard │
77
- └──────────────────────────────────────┘
78
- ```
79
-
80
- ---
81
-
82
- ## Your data stays on your machine
83
-
84
- Career Compass is local-first by design. Your real career data — résumé history, the
85
- companies you're talking to, salary numbers, interview notes lives in **plain YAML
86
- files on your own disk** and never leaves it.
87
-
88
- - **Where your data lives:** `~/.career-compass/` by default (override with the
89
- `CAREER_DATA_PATH` environment variable). This directory is created and read on *your*
90
- machine. It is **never** uploaded anywhere, and it is **not** part of this npm package.
91
- - **What ships in the package:** only the MCP server code and a small set of **fictional
92
- example files** (`data/example/` the "Alex Rivera" persona). There is no real career
93
- data in the published package, and none can be the package and your data live in
94
- different places, and the publish-time leak guard enforces it.
95
- - **The dashboard reads your data at request time, locally.** The Next.js routes are
96
- `force-dynamic`, so the dashboard server reads your YAML *when you open a page*, from a
97
- server running on your own `localhost`. Your data is **never baked into a build**, never
98
- prerendered into static HTML, and never sent over the network. *(There's a regression
99
- test, `standalone-dynamic.test.ts`, that guards exactly this.)*
100
- - **No telemetry.** Career Compass makes no analytics or phone-home calls. The only thing
101
- that ever sees your career data is the Claude conversation *you* start, through the MCP
102
- server *you* run.
103
-
104
- In short: this is a tool you run, on your machine, over your files. Treat
105
- `~/.career-compass/` like any private notebook — back it up, don't commit it to a public
106
- repo, and it stays yours.
107
-
108
- ---
109
-
110
- ## Quick Start
111
-
112
- Career Compass is on npm — point Claude straight at it, no clone or build required.
113
-
114
- ### 1. Add to Claude
115
-
116
- Add this to your `~/.claude.json` (Claude Code) or equivalent MCP config:
117
-
118
- ```json
119
- {
120
- "mcpServers": {
121
- "career-compass": {
122
- "command": "npx",
123
- "args": ["-y", "career-compass-mcp"],
124
- "env": {
125
- "CAREER_DATA_PATH": "/Users/you/career-data"
126
- }
127
- }
128
- }
129
- }
130
- ```
131
-
132
- `npx -y career-compass-mcp` fetches and runs the latest server on demand. Point
133
- `CAREER_DATA_PATH` anywhere you like Career Compass initializes the directory on first
134
- run. Leave it unset to use the default, `~/.career-compass`.
135
-
136
- Prefer a global install? Run `npm install -g career-compass-mcp`, then set
137
- `"command": "career-compass-mcp"` with no args.
138
-
139
- ### 2. Onboard (first conversation)
140
-
141
- Open Claude and say:
142
-
143
- > **"Set up my Career KB. Here's my resume:"** [paste your resume]
144
-
145
- Claude will:
146
- - Extract your work history, achievements, and skills into structured YAML
147
- - Ask clarifying questions about gaps or unclear metrics
148
- - Save everything to your `CAREER_DATA_PATH`
149
-
150
- That's it. From there, every tool has full context on who you are.
151
-
152
- ---
153
-
154
- ## Data structure
155
-
156
- Career Compass stores all data as YAML files under `CAREER_DATA_PATH` (default `~/.career-compass`):
157
-
158
- ```
159
- ~/.career-compass/
160
- ├── career/
161
- │ ├── profile.yaml # who you are, what you're targeting
162
- │ ├── experience.yaml # roles, achievements (metrics + context + impact)
163
- ├── skills.yaml # skills with proficiency and recency
164
- │ ├── education.yaml # degrees, certifications, coursework
165
- │ ├── projects.yaml # portfolio projects
166
- │ └── testimonials.yaml # quotes and recommendations
167
- └── pipeline/
168
- └── applications.yaml # all job applications
169
- ```
170
-
171
- This is your single source of truth — built once, enriched over time, read by every tool. You never need to edit these files by hand: use `ingest_document` to add data by pasting documents, or just ask Claude to update specific sections.
172
-
173
- See [`data/example/`](data/example/) in this repo for a fully populated sample (the fictional Alex Rivera).
174
-
175
- ---
176
-
177
- ## Dashboard
178
-
179
- v2.0 includes a local web dashboard — a visual layer on top of your Career KB and pipeline data. Open it alongside Claude or use it standalone to review and manage your search.
180
-
181
- ![Pipeline Kanban](docs/screenshots/pipeline-kanban-dark.png)
182
- ![Application Detail](docs/screenshots/application-detail-dark.png)
183
- ![Career KB](docs/screenshots/career-kb-dark.png)
184
- ![Analytics](docs/screenshots/analytics-dark.png)
185
-
186
- Four views:
187
-
188
- **Pipeline kanban board** — All your applications laid out by stage (Exploring → Applied → Screening → Interviewing → Offer → Closed). Drag to advance stages. See stale applications at a glance. Click any card to drill in.
189
-
190
- **Application detail view** — Full timeline for a single application: every status change, contacts associated with the role, notes from conversations, and next action. Everything Claude knows about that opportunity in one place.
191
-
192
- **Career KB overview** — Visual summary of your career data: skills radar (proficiency × recency), experience timeline, testimonials, and a completeness indicator showing what Claude has to work with. Useful for spotting gaps before you onboard a new role.
193
-
194
- **Analytics** — Funnel conversion rates, response rates by source, time-in-stage averages, and source effectiveness. See which channels are actually working.
195
-
196
- ### Running the dashboard
197
-
198
- > **The dashboard runs from a source build today.** It's a Next.js standalone server, so it
199
- > isn't part of the npm package yet — a packaged-for-npm dashboard is coming in a follow-up
200
- > release. For now, build it from source:
201
-
202
- ```bash
203
- git clone https://github.com/benskamps/career-compass-mcp.git
204
- cd career-compass-mcp
205
- npm install
206
- npm run build
207
-
208
- # Try it with the bundled Alex Rivera sample (no setup, ~1 minute):
209
- CAREER_DATA_PATH=data/example npm run dashboard
210
- ```
211
-
212
- This opens the dashboard at `http://localhost:3141` (or the next available port). Point
213
- `CAREER_DATA_PATH` at your own data directory to use it for real. The onboarding wizard
214
- walks you through job targets, salary expectations, and confirming your skills inventory —
215
- the gaps a resume doesn't naturally contain.
216
-
217
- ---
218
-
219
- ## Tools
220
-
221
- | Tool | What it does |
222
- |------|-------------|
223
- | `explore_opportunity` | Analyzes a job posting against your Career KB fit score, matched strengths, gaps, talking points, day-in-the-life, red flags |
224
- | `research_company` | Builds an intelligence brief: product, culture, funding, interview process, strategic fit |
225
- | `tailor_resume` | Generates an ATS-optimized, tailored resume from your KB standard, federal, academic, or functional formats |
226
- | `generate_cover_letter` | Writes a personalized cover letter with your actual achievements woven in |
227
- | `format_for_ats` | Reformats resume content for specific ATS systems: Workday, Greenhouse, Lever, LinkedIn, iCIMS, Taleo |
228
- | `manage_pipeline` | Tracks applications from discovery through offer — add, update, list, stats, next actions |
229
- | `classify_email` | Classifies a job-search email and extracts contacts, dates, and suggested pipeline updates |
230
- | `prepare_interview` | Full interview prep: opening pitch, STAR stories, likely questions, company alignment, questions to ask |
231
- | `evaluate_offer` | Breaks down total comp, compares to market, builds negotiation strategy, drafts counter scripts |
232
- | `ingest_document` | Extracts achievements from any document: performance review, award email, LinkedIn recommendation, project summary |
233
- | `generate_rejection_response` | Drafts a graceful response that keeps the door open and maintains the relationship |
234
-
235
- ## Resources
236
-
237
- Claude can read these directly (e.g., "read my career profile"):
238
-
239
- | Resource | URI | Contents |
240
- |----------|-----|----------|
241
- | Career Profile | `career://profile` | Name, contact, summary, targets, preferences |
242
- | Work Experience | `career://experience` | Full history with achievements |
243
- | Skills Inventory | `career://skills` | Skills with proficiency and recency |
244
- | Projects | `career://projects` | Portfolio with outcomes |
245
- | Education | `career://education` | Degrees, certifications, coursework |
246
- | Testimonials | `career://testimonials` | Quotes, recommendations |
247
- | Full KB | `career://full` | Everything above in one read |
248
- | Pipeline | `career://pipeline` | All applications with status |
249
-
250
- ## Prompts
251
-
252
- Power-user shortcuts (appear in Claude's prompt menu):
253
-
254
- | Prompt | What it does |
255
- |--------|-------------|
256
- | `resume-tailor` | Drop in a posting get a tailored resume |
257
- | `interview-coach` | Company + role + interview type full prep package |
258
- | `negotiation-coach` | Paste an offer get analysis, strategy, and counter scripts |
259
-
260
- ---
261
-
262
- ## Configuration
263
-
264
- | Env var | Default | Description |
265
- |---------|---------|-------------|
266
- | `CAREER_DATA_PATH` | `~/.career-compass` | Directory where your career and pipeline YAML files are stored |
267
-
268
- ---
269
-
270
- ## Building from Source
271
-
272
- ```bash
273
- git clone https://github.com/benskamps/career-compass-mcp
274
- cd career-compass-mcp
275
- npm install
276
- npm run build
277
- ```
278
-
279
- `npm run build` compiles both the MCP server (TypeScript → `build/`) and the Next.js dashboard (`dashboard/.next/`). To work on just the MCP server, use `npm run build:mcp`. For dashboard development with hot reload, use `npm run dev:dashboard`.
280
-
281
- Then point your MCP config to `node /path/to/career-compass-mcp/build/src/index.js` (or just use the published package via `npx -y career-compass-mcp`).
282
-
283
- Use `npm run dev` during development TypeScript watch mode recompiles on save.
284
- Use `npm run inspect` to open the MCP Inspector (web UI for testing tools interactively).
285
-
286
- ---
287
-
288
- ## Why Career Compass
289
-
290
- Job searching is one of the highest-stakes, most document-intensive activities most people do — and most tools treat it as a data entry problem. Spreadsheets for tracking. Templates for resumes. Generic advice for interviews.
291
-
292
- Career Compass treats it as a knowledge problem. Your career history is a corpus. Every application is a retrieval and synthesis task. Every interview is a pattern-matching problem against a known dataset (the posting) and a known corpus (your KB).
293
-
294
- The Career KB is your single source of truth — built once, enriched over time, and used by every tool. A tailored resume draws from it. Interview prep draws from it. Cover letters draw from it. The pipeline tracks against it. Nothing gets lost because it's never in a tab you'll close.
295
-
296
- ---
297
-
298
- ## Development
299
-
300
- ```bash
301
- git clone https://github.com/benskamps/career-compass-mcp.git
302
- cd career-compass-mcp
303
- npm install
304
- cd dashboard && npm install && cd ..
305
-
306
- # MCP server (TypeScript watch)
307
- npm run dev
308
-
309
- # Dashboard (Next.js + Turbopack)
310
- npm run dev:dashboard
311
-
312
- # MCP Inspector (test tools interactively)
313
- npm run inspect
314
-
315
- # Tests
316
- npm run test:mcp # MCP server tests
317
- npm run test # Dashboard tests
318
-
319
- # Storybook (component library)
320
- npm run storybook
321
-
322
- # Use example data for development
323
- CAREER_DATA_PATH=data/example npm run dev:dashboard
324
- ```
325
-
326
- ---
327
-
328
- ## Contributing
329
-
330
- Issues and PRs welcome. If you add a new tool, register it in `src/server.ts` and follow the pattern in any existing tool file — each tool returns a structured prompt that Claude acts on with the full KB in context.
331
-
332
- ---
333
-
334
- ## License
335
-
336
- MIT
337
-
338
- ---
339
-
340
- *Part of the [Brokenbranch Lab](https://www.brokenbranch.dev/lab/) — Ben Schippers' workshop of AI-native tools and research.*
1
+ # Career Compass MCP
2
+
3
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
4
+ [![npm](https://img.shields.io/npm/v/career-compass-mcp.svg)](https://www.npmjs.com/package/career-compass-mcp)
5
+ [![Node](https://img.shields.io/badge/node-%3E%3D18-green.svg)](https://nodejs.org)
6
+ [![MCP](https://img.shields.io/badge/MCP-server-7c4dff.svg)](https://modelcontextprotocol.io)
7
+
8
+ **Your AI-native career co-pilot, built for Claude.**
9
+
10
+ Career Compass turns Claude into a full job-search partner — one that knows your entire career history, tailors every resume and cover letter, tracks every application, and preps you for every interview. Initiate via conversation, onboard, and track multiple applications in moments.
11
+
12
+ ---
13
+
14
+
15
+ ## What it feels like
16
+
17
+ ```
18
+ You: I have a panel interview at Veridian Health on FridayDirector of Operations role.
19
+ Can you prep me?
20
+
21
+ Claude: On it. Reading your career history now...
22
+
23
+ [Generates 90-second pitch, 8 STAR stories matched to likely panel questions,
24
+ company research brief, 10 questions to ask them, and a list of watch-outs
25
+ based on gaps in your backgroundall in one response]
26
+ ```
27
+
28
+ ```
29
+ You: Here's a job posting I just found. [pastes posting]
30
+ How well do I fit?
31
+
32
+ Claude: Fit score: 8.1/10. Here's whyand here's what they'll probe you on...
33
+
34
+ [Returns matched strengths, honest gap analysis, talking points in their language,
35
+ and a "day in the life" of what the role actually looks like]
36
+ ```
37
+
38
+ ```
39
+ You: Show me what needs attention in my pipeline today.
40
+
41
+ Claude: 3 things:
42
+ - Meridian Logistics follow-up is overdue (8 days since you applied, referral from Marcus Chen)
43
+ - Veridian panel is Friday — prep above
44
+ - Novare rejection arrived — want me to draft a keep-the-door-open response?
45
+ ```
46
+
47
+ ---
48
+
49
+ ## Architecture
50
+
51
+ ```
52
+ ┌─────────────┐ ┌──────────────────────────────────────┐
53
+ │ │ MCP │ MCP Server (Node.js) │
54
+ │ Claude │◄────────►│ │
55
+ │ │ stdio │ Tools ─── Resume, Pipeline, Interview│
56
+ │ │ │ Resources ─ Career KB, Pipeline data │
57
+ └─────────────┘ │ Prompts ── Power-user shortcuts │
58
+ │ │
59
+ ┌──────────────┐ │
60
+ File Store
61
+ (YAML files) │ │
62
+ └──────┬───────┘
63
+ └────────────────┼─────────────────────┘
64
+ reads
65
+ ┌────────────────┼─────────────────────┐
66
+ Dashboard │ (Next.js)
67
+
68
+ Pipeline Kanban · Career KB Overview
69
+ Analytics · Onboarding Wizard
70
+ └──────────────────────────────────────┘
71
+ ```
72
+
73
+ ---
74
+
75
+ ## Your data stays on your machine
76
+
77
+ Career Compass is local-first by design. Your real career data — résumé history, the
78
+ companies you're talking to, salary numbers, interview notes — lives in **plain YAML
79
+ files on your own disk** and never leaves it.
80
+
81
+ - **Where your data lives:** `~/.career-compass/` by default (override with the
82
+ `CAREER_DATA_PATH` environment variable). This directory is created and read on *your*
83
+ machine. It is **never** uploaded anywhere, and it is **not** part of this npm package.
84
+ - **Never committed to git:** `.gitignore` excludes `data/career/` and `data/pipeline/`, so
85
+ the only career data in this repo is the fictional sample under `data/example/` (meet Alex
86
+ Rivera). Read it, edit it, delete it it's all just files you own.
87
+ - **No account, no cloud sync, no telemetry.** Nothing phones home.
88
+ - **What ships in the package:** only the MCP server code and a small set of **fictional
89
+ example files** (`data/example/` the "Alex Rivera" persona). There is no real career
90
+ data in the published package, and none can be the package and your data live in
91
+ different places, and the publish-time leak guard enforces it.
92
+ - **The dashboard reads your data at request time, locally.** The Next.js routes are
93
+ `force-dynamic`, so the dashboard server reads your YAML *when you open a page*, from a
94
+ server running on your own `localhost`. Your data is **never baked into a build**, never
95
+ prerendered into static HTML, and never sent over the network. *(There's a regression
96
+ test, `standalone-dynamic.test.ts`, that guards exactly this.)*
97
+ - **No telemetry.** Career Compass makes no analytics or phone-home calls. The only thing
98
+ that ever sees your career data is the Claude conversation *you* start, through the MCP
99
+ server *you* run.
100
+
101
+ In short: this is a tool you run, on your machine, over your files. Treat
102
+ `~/.career-compass/` like any private notebook — back it up, don't commit it to a public
103
+ repo, and it stays yours.
104
+
105
+ ---
106
+
107
+ ## Quick Start
108
+
109
+ Career Compass is on npm — point Claude straight at it, no clone or build required.
110
+
111
+ ### 1. Add to Claude
112
+
113
+ Add this to your `~/.claude.json` (Claude Code) or equivalent MCP config:
114
+
115
+ ```json
116
+ {
117
+ "mcpServers": {
118
+ "career-compass": {
119
+ "command": "npx",
120
+ "args": ["-y", "career-compass-mcp"],
121
+ "env": {
122
+ "CAREER_DATA_PATH": "/Users/you/career-data"
123
+ }
124
+ }
125
+ }
126
+ }
127
+ ```
128
+
129
+ `npx -y career-compass-mcp` fetches and runs the latest server on demand. Point
130
+ `CAREER_DATA_PATH` anywhere you like — Career Compass initializes the directory on first
131
+ run. Leave it unset to use the default, `~/.career-compass`.
132
+
133
+ Prefer a global install? Run `npm install -g career-compass-mcp`, then set
134
+ `"command": "career-compass-mcp"` with no args.
135
+
136
+ ### 2. Onboard (first conversation)
137
+
138
+ Open Claude and say:
139
+
140
+ > **"Set up my Career KB. Here's my resume:"** [paste your resume]
141
+
142
+ Claude will:
143
+ - Extract your work history, achievements, and skills into structured YAML
144
+ - Ask clarifying questions about gaps or unclear metrics
145
+ - Save everything to your `CAREER_DATA_PATH`
146
+
147
+ That's it. From there, every tool has full context on who you are.
148
+
149
+ ---
150
+
151
+ ## Data structure
152
+
153
+ Career Compass stores all data as YAML files under `CAREER_DATA_PATH` (default `~/.career-compass`):
154
+
155
+ ```
156
+ ~/.career-compass/
157
+ ├── career/
158
+ │ ├── profile.yaml # who you are, what you're targeting
159
+ │ ├── experience.yaml # roles, achievements (metrics + context + impact)
160
+ ├── skills.yaml # skills with proficiency and recency
161
+ │ ├── education.yaml # degrees, certifications, coursework
162
+ │ ├── projects.yaml # portfolio projects
163
+ └── testimonials.yaml # quotes and recommendations
164
+ └── pipeline/
165
+ └── applications.yaml # all job applications
166
+ ```
167
+
168
+ This is your single source of truth — built once, enriched over time, read by every tool. You never need to edit these files by hand: use `ingest_document` to add data by pasting documents, or just ask Claude to update specific sections.
169
+
170
+ See [`data/example/`](data/example/) in this repo for a fully populated sample (the fictional Alex Rivera).
171
+
172
+ ---
173
+
174
+ ## Dashboard
175
+
176
+ v2.0 includes a local web dashboard — a visual layer on top of your Career KB and pipeline data. Open it alongside Claude or use it standalone to review and manage your search.
177
+
178
+ ![Pipeline Kanban](docs/screenshots/pipeline-kanban-dark.png)
179
+ ![Application Detail](docs/screenshots/application-detail-dark.png)
180
+ ![Career KB](docs/screenshots/career-kb-dark.png)
181
+ ![Analytics](docs/screenshots/analytics-dark.png)
182
+
183
+ Four views:
184
+
185
+ **Pipeline kanban board** — All your applications laid out by stage (Exploring → Applied → Screening → Interviewing → Offer → Closed). Drag to advance stages. See stale applications at a glance. Click any card to drill in.
186
+
187
+ **Application detail view** — Full timeline for a single application: every status change, contacts associated with the role, notes from conversations, and next action. Everything Claude knows about that opportunity in one place.
188
+
189
+ **Career KB overview** — Visual summary of your career data: skills radar (proficiency × recency), experience timeline, testimonials, and a completeness indicator showing what Claude has to work with. Useful for spotting gaps before you onboard a new role.
190
+
191
+ **Analytics** — Funnel conversion rates, response rates by source, time-in-stage averages, and source effectiveness. See which channels are actually working.
192
+
193
+ ### Running the dashboard
194
+
195
+ >**Two dashboards ship now.** A built-in **lite dashboard** (zero-build, pure HTML) is bundled
196
+ > in the npm package and starts automatically when the full dashboard isn't built - so
197
+ > `career-compass-mcp dashboard` always works. The **full dashboard** (Next.js: kanban drag,
198
+ > analytics, Career KB views, onboarding wizard) still runs from a source build:
199
+
200
+ ```bash
201
+ git clone https://github.com/benskamps/career-compass-mcp.git
202
+ cd career-compass-mcp
203
+ npm install # MCP server deps
204
+ cd dashboard && npm install && cd .. # dashboard deps (its own package.json)
205
+ npm run build
206
+
207
+ # Try it with the bundled Alex Rivera sample (no setup, ~1 minute):
208
+ CAREER_DATA_PATH=data/example npm run dashboard
209
+ ```
210
+
211
+ This opens the dashboard at `http://localhost:3141` (or the next available port). Point
212
+ `CAREER_DATA_PATH` at your own data directory to use it for real. The onboarding wizard
213
+ walks you through job targets, salary expectations, and confirming your skills inventory
214
+ the gaps a resume doesn't naturally contain.
215
+
216
+
217
+ ### Lite dashboard (zero-build)
218
+
219
+ Don't want to build the Next.js app? The **lite dashboard** ships inside the npm package and
220
+ needs no build step. It's a single self-contained HTML page - pipeline KPIs, a kanban board by
221
+ stage, a next-actions panel (overdue follow-ups, upcoming interviews, expiring offers), and a
222
+ stage-distribution chart - served by a dependency-free Node server that **re-reads your YAML on
223
+ every request**, so a browser refresh always reflects the current state of `~/.career-compass`.
224
+
225
+ > Requires **v2.1.0 or newer**. On 2.0.0 the flag does not exist and plain
226
+ > `dashboard` reports that no dashboard is available.
227
+
228
+ ```bash
229
+ # Ships in the package - no clone, no build:
230
+ npx -y career-compass-mcp dashboard --lite
231
+
232
+ # Or try it against the bundled Alex Rivera sample:
233
+ CAREER_DATA_PATH=data/example npx -y career-compass-mcp dashboard --lite
234
+ ```
235
+
236
+ Plain `career-compass-mcp dashboard` uses the full dashboard when it's been built and falls back
237
+ to the lite one otherwise. Data never leaves your machine - the page has no external assets and
238
+ makes no network calls. Clicking a card copies a ready-to-paste prompt for Claude (in Cowork, the
239
+ same board is available as a live artifact that dispatches the prompt straight into chat).
240
+
241
+ ---
242
+
243
+ ## Tools
244
+
245
+ | Tool | What it does |
246
+ |------|-------------|
247
+ | `explore_opportunity` | Analyzes a job posting against your Career KB fit score, matched strengths, gaps, talking points, day-in-the-life, red flags |
248
+ | `research_company` | Builds an intelligence brief: product, culture, funding, interview process, strategic fit |
249
+ | `tailor_resume` | Generates an ATS-optimized, tailored resume from your KB — standard, federal, academic, or functional formats |
250
+ | `generate_cover_letter` | Writes a personalized cover letter with your actual achievements woven in |
251
+ | `format_for_ats` | Reformats resume content for specific ATS systems: Workday, Greenhouse, Lever, LinkedIn, iCIMS, Taleo |
252
+ | `manage_pipeline` | Tracks applications from discovery through offer — add, update, list, stats, next actions |
253
+ | `classify_email` | Classifies a job-search email and extracts contacts, dates, and suggested pipeline updates |
254
+ | `prepare_interview` | Full interview prep: opening pitch, STAR stories, likely questions, company alignment, questions to ask |
255
+ | `evaluate_offer` | Breaks down total comp, compares to market, builds negotiation strategy, drafts counter scripts |
256
+ | `ingest_document` | Extracts achievements from any document: performance review, award email, LinkedIn recommendation, project summary |
257
+ | `generate_rejection_response` | Drafts a graceful response that keeps the door open and maintains the relationship |
258
+ | `capture_insight` | Appends a dated signal to your career journal — fit signals, interview insights, offer reflections, rejection patterns, skill evidence, wins — which later resume, interview, and fit prompts read back |
259
+
260
+ ## Resources
261
+
262
+ Claude can read these directly (e.g., "read my career profile"):
263
+
264
+ | Resource | URI | Contents |
265
+ |----------|-----|----------|
266
+ | Career Profile | `career://profile` | Name, contact, summary, targets, preferences |
267
+ | Work Experience | `career://experience` | Full history with achievements |
268
+ | Skills Inventory | `career://skills` | Skills with proficiency and recency |
269
+ | Projects | `career://projects` | Portfolio with outcomes |
270
+ | Education | `career://education` | Degrees, certifications, coursework |
271
+ | Testimonials | `career://testimonials` | Quotes, recommendations |
272
+ | Full KB | `career://full` | Everything above in one read |
273
+ | Pipeline | `career://pipeline` | All applications with status |
274
+
275
+ ## Prompts
276
+
277
+ Power-user shortcuts (appear in Claude's prompt menu):
278
+
279
+ | Prompt | What it does |
280
+ |--------|-------------|
281
+ | `resume-tailor` | Drop in a posting get a tailored resume |
282
+ | `interview-coach` | Company + role + interview type → full prep package |
283
+ | `negotiation-coach` | Paste an offer get analysis, strategy, and counter scripts |
284
+
285
+ ---
286
+
287
+ ## Configuration
288
+
289
+ | Env var | Default | Description |
290
+ |---------|---------|-------------|
291
+ | `CAREER_DATA_PATH` | `~/.career-compass` | Directory where your career and pipeline YAML files are stored |
292
+
293
+ ---
294
+
295
+ ## Building from Source
296
+
297
+ ```bash
298
+ git clone https://github.com/benskamps/career-compass-mcp
299
+ cd career-compass-mcp
300
+ npm install # MCP server deps
301
+ cd dashboard && npm install && cd .. # dashboard deps (its own package.json)
302
+ npm run build
303
+ ```
304
+
305
+ The dashboard is a separate package with its own `package.json` and lockfile, so it needs its own `npm install` — the root install deliberately does not carry Next.js or React (that kept 166 MB out of every `npm i career-compass-mcp`).
306
+
307
+ `npm run build` compiles both the MCP server (TypeScript → `build/`) and the Next.js dashboard (`dashboard/.next/`). To work on just the MCP server, use `npm run build:mcp`. For dashboard development with hot reload, use `npm run dev:dashboard`.
308
+
309
+ Then point your MCP config to `node /path/to/career-compass-mcp/build/src/index.js` (or just use the published package via `npx -y career-compass-mcp`).
310
+
311
+ Use `npm run dev` during development — TypeScript watch mode recompiles on save.
312
+ Use `npm run inspect` to open the MCP Inspector (web UI for testing tools interactively).
313
+
314
+ ---
315
+
316
+ ## Why Career Compass
317
+
318
+ Job searching is one of the highest-stakes, most document-intensive activities most people do — and most tools treat it as a data entry problem. Spreadsheets for tracking. Templates for resumes. Generic advice for interviews.
319
+
320
+ Career Compass treats it as a knowledge problem. Your career history is a corpus. Every application is a retrieval and synthesis task. Every interview is a pattern-matching problem against a known dataset (the posting) and a known corpus (your KB).
321
+
322
+ The Career KB is your single source of truth — built once, enriched over time, and used by every tool. A tailored resume draws from it. Interview prep draws from it. Cover letters draw from it. The pipeline tracks against it. Nothing gets lost because it's never in a tab you'll close.
323
+
324
+ ---
325
+
326
+ ## Development
327
+
328
+ ```bash
329
+ git clone https://github.com/benskamps/career-compass-mcp.git
330
+ cd career-compass-mcp
331
+ npm install
332
+ cd dashboard && npm install && cd ..
333
+
334
+ # MCP server (TypeScript watch)
335
+ npm run dev
336
+
337
+ # Dashboard (Next.js + Turbopack)
338
+ npm run dev:dashboard
339
+
340
+ # MCP Inspector (test tools interactively)
341
+ npm run inspect
342
+
343
+ # Tests
344
+ npm run test:mcp # MCP server tests
345
+ npm run test # Dashboard tests
346
+
347
+ # Storybook (component library)
348
+ npm run storybook
349
+
350
+ # Use example data for development
351
+ CAREER_DATA_PATH=data/example npm run dev:dashboard
352
+ ```
353
+
354
+ ---
355
+
356
+ ## Contributing
357
+
358
+ Issues and PRs welcome. If you add a new tool, register it in `src/server.ts` and follow the pattern in any existing tool file — each tool returns a structured prompt that Claude acts on with the full KB in context.
359
+
360
+ ---
361
+
362
+ ## License
363
+
364
+ MIT
365
+
366
+ ---
367
+
368
+ *Part of the [Brokenbranch Lab](https://www.brokenbranch.dev/lab/) — Ben Schippers' workshop of AI-native tools and research.*