job_ops-mcp 0.3.0 → 0.4.1

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.
package/README.md CHANGED
@@ -20,23 +20,43 @@ npx job_ops-mcp init
20
20
 
21
21
  # 2. Open cv.md, config/profile.yml, portals.yml and replace every <TODO> placeholder.
22
22
 
23
- # 3. Confirm everything is wired
23
+ # 3. Rebuild the career_packet from your now-real cv.md
24
+ # (or just re-run `init` — it auto-reseeds when it detects cv.md changed)
25
+ npx job_ops-mcp reseed
26
+
27
+ # 4. Confirm everything is wired
24
28
  npx job_ops-mcp doctor
25
29
 
26
- # 4. Boot the server (Chromium auto-installs on first run)
30
+ # 5. Boot the server (Chromium auto-installs on first run)
27
31
  npx job_ops-mcp start
28
32
  # ▷ job_ops-mcp listening on http://127.0.0.1:7891
29
33
 
30
- # 5. Get a copy-paste config block for your MCP client
34
+ # 6. Get a copy-paste config block for your MCP client
31
35
  npx job_ops-mcp connect
32
36
 
33
- # 6. Paste a job URL or pasted JD into your chat — the chat calls evaluate_job, draws on
37
+ # 7. Paste a job URL or pasted JD into your chat — the chat calls evaluate_job, draws on
34
38
  # your rubric + career_packet + tailoring rules, and walks the rest of the workflow.
35
39
  ```
36
40
 
37
41
  That's the loop. Everything else (warm-intro finder, story bank, negotiation brief,
38
42
  batch rater, scheduler, …) is wired in but optional.
39
43
 
44
+ ### The edit-cv.md loop
45
+
46
+ Your `career_packet` is the source of truth the chat uses to score JDs and draft
47
+ materials. It's built from `cv.md` + `config/profile.yml`. Whenever you edit `cv.md`,
48
+ **re-run reseed** so the chat sees the new bullets:
49
+
50
+ ```bash
51
+ # After any edit to cv.md:
52
+ npx job_ops-mcp reseed
53
+ ```
54
+
55
+ `reseed` writes a NEW active version (the previous version is demoted, history kept).
56
+ The chat can also call the `reseed_career_packet` MCP tool to do the same thing without
57
+ leaving the conversation. `doctor` warns when `cv.md` changed since the last reseed, and
58
+ `init` auto-reseeds when it detects the mismatch.
59
+
40
60
  ---
41
61
 
42
62
  ## What it does
@@ -146,16 +166,16 @@ A working starter is at `.env.example`.
146
166
 
147
167
  ---
148
168
 
149
- ## Wiring it to Claude Desktop
169
+ ## Wiring it to Claude Desktop (stdio transport)
150
170
 
151
- `npx job_ops-mcp connect` prints the exact config block. The short version:
171
+ Claude Desktop's local MCP only speaks **stdio**, not HTTP. Use the `--stdio` flag:
152
172
 
153
173
  ```jsonc
154
174
  {
155
175
  "mcpServers": {
156
176
  "job_ops-mcp": {
157
177
  "command": "npx",
158
- "args": ["-y", "job_ops-mcp", "start"],
178
+ "args": ["-y", "job_ops-mcp", "start", "--stdio"],
159
179
  "env": {
160
180
  "MCP_JSA_PORT": "7891",
161
181
  "MCP_JSA_PROJECT_ROOT": "/absolute/path/to/your/job-search/dir"
@@ -168,8 +188,16 @@ A working starter is at `.env.example`.
168
188
  (Drop into `~/Library/Application Support/Claude/claude_desktop_config.json` on macOS,
169
189
  `%APPDATA%/Claude/claude_desktop_config.json` on Windows. Restart Claude Desktop.)
170
190
 
171
- Generic MCP clients that take a streamable-HTTP URL: point them at
172
- `http://127.0.0.1:7891/mcp` after `npx job_ops-mcp start` is running.
191
+ In `--stdio` mode the MCP transport rides stdin/stdout (which Claude Desktop drives via
192
+ the `npx` spawn); the HTTP file server still binds to `MCP_JSA_PORT` in the background
193
+ so the `http://127.0.0.1:7891/files/*` links the server returns continue to resolve in
194
+ your browser.
195
+
196
+ Generic MCP clients that take a streamable-HTTP URL: skip the `--stdio` flag, run
197
+ `npx job_ops-mcp start` in a terminal, and point your client at
198
+ `http://127.0.0.1:7891/mcp`.
199
+
200
+ `npx job_ops-mcp connect` prints both blocks ready to paste.
173
201
 
174
202
  ### LibreChat
175
203
 
package/dist/cli.js CHANGED
@@ -84,11 +84,26 @@ async function cmdInit(flags) {
84
84
  const { config: cfg } = await import('./config.js');
85
85
  const { getDb } = await import('./db.js');
86
86
  getDb();
87
- const { ensureActiveCareerPacket } = await import('./core/profile.js');
88
- const seed = ensureActiveCareerPacket();
87
+ const { ensureActiveCareerPacket, getActiveCareerPacket, loadProjectFiles, packetStatus, seedCareerPacketFromFiles, } = await import('./core/profile.js');
88
+ const seed = await ensureActiveCareerPacket();
89
89
  console.log(`\n ${tick()} data dir: ${cfg.dataDir}`);
90
90
  console.log(` ${tick()} SQLite migrations applied`);
91
91
  console.log(` ${tick()} career_packet ${seed.created ? 'seeded' : 'present'} (v${seed.version})`);
92
+ // Stale check: cv.md was edited after the last reseed? Rebuild and tell the user
93
+ // clearly. The previous active row is demoted (history retained).
94
+ const status = packetStatus({ active: getActiveCareerPacket(), cvMd: loadProjectFiles().cvMd });
95
+ if (status === 'cv_edited_since_seed') {
96
+ console.log(` ${warn()} cv.md was edited after the last reseed.`);
97
+ console.log(` ${c.dim('→ auto-reseeding now (previous active row demoted, version bumped, history kept)…')}`);
98
+ const r = await seedCareerPacketFromFiles({ mode: 'reseed' });
99
+ console.log(` ${tick()} reseeded → v${r.version} (${r.sections_with_cv_content}/6 sections populated from cv.md)`);
100
+ }
101
+ else if (status === 'cv_is_example') {
102
+ console.log(` ${warn()} cv.md still looks like the example template — fill it in, then run ${c.bold('npx job_ops-mcp reseed')}.`);
103
+ }
104
+ else if (status === 'packet_is_template') {
105
+ console.log(` ${warn()} active packet still has TODO markers. Run ${c.bold('npx job_ops-mcp reseed')} to rebuild from cv.md.`);
106
+ }
92
107
  }
93
108
  catch (e) {
94
109
  console.log(` ${cross()} migration error: ${e?.message ?? e}`);
@@ -109,10 +124,15 @@ async function cmdStart(flags) {
109
124
  // Default project root = cwd, so users who ran `init` get their files picked up.
110
125
  if (!process.env.MCP_JSA_PROJECT_ROOT)
111
126
  process.env.MCP_JSA_PROJECT_ROOT = process.cwd();
127
+ const stdio = !!flags.get('stdio');
112
128
  const skipBrowserCheck = !!flags.get('skip-chromium-check');
113
- if (!skipBrowserCheck)
129
+ // In stdio mode we MUST keep stdout clean — `npx playwright install` writes
130
+ // to stdout and would corrupt the JSON-RPC channel. Force-skip the prompt
131
+ // there and let the user run `doctor` first to confirm Chromium is installed.
132
+ if (!skipBrowserCheck && !stdio)
114
133
  await ensureChromium();
115
- await import('./server.js');
134
+ const { bootServer } = await import('./server.js');
135
+ await bootServer({ stdio });
116
136
  }
117
137
  async function ensureChromium() {
118
138
  // Detect a previously-installed Chromium by attempting `playwright.chromium.executablePath()`.
@@ -193,6 +213,41 @@ async function cmdDoctor() {
193
213
  // 5. Visa scoring flag
194
214
  const visaOn = (process.env.MCP_JSA_VISA_SCORING ?? 'true').toLowerCase() !== 'false';
195
215
  console.log(` ${tick()} visa scoring: ${visaOn ? 'on (0.5/0.3/0.2)' : 'off (0.6/0.4, visa tools hidden)'}`);
216
+ // 6. Career-packet staleness check (only meaningful if the DB exists).
217
+ try {
218
+ const { getDb } = await import('./db.js');
219
+ getDb();
220
+ const { getActiveCareerPacket, loadProjectFiles, packetStatus } = await import('./core/profile.js');
221
+ const active = getActiveCareerPacket();
222
+ const status = packetStatus({ active, cvMd: loadProjectFiles().cvMd });
223
+ const fixReseed = c.bold('npx job_ops-mcp reseed');
224
+ const fixInit = c.bold('npx job_ops-mcp init');
225
+ switch (status) {
226
+ case 'no_packet':
227
+ console.log(` ${cross()} no active career_packet. Fix: ${fixInit}`);
228
+ failures++;
229
+ break;
230
+ case 'no_cv':
231
+ console.log(` ${warn()} cv.md missing — packet is identity-only. Fix: create cv.md, then ${fixReseed}.`);
232
+ break;
233
+ case 'cv_is_example':
234
+ console.log(` ${warn()} cv.md is still the example template. Fill it in, then ${fixReseed}.`);
235
+ break;
236
+ case 'cv_edited_since_seed':
237
+ console.log(` ${cross()} cv.md was edited after the last reseed. Run ${fixReseed} to refresh.`);
238
+ failures++;
239
+ break;
240
+ case 'packet_is_template':
241
+ console.log(` ${warn()} career_packet v${active.version} still has TODO markers. Run ${fixReseed}.`);
242
+ break;
243
+ case 'ok':
244
+ console.log(` ${tick()} career_packet v${active.version} matches current cv.md`);
245
+ break;
246
+ }
247
+ }
248
+ catch {
249
+ console.log(` ${warn()} career_packet check skipped — DB not initialized (run ${c.bold('npx job_ops-mcp init')} first).`);
250
+ }
196
251
  console.log('');
197
252
  if (failures > 0) {
198
253
  console.log(c.red(`${failures} check(s) failed.`));
@@ -218,14 +273,16 @@ async function cmdConnect(flags) {
218
273
  transport: 'streamable-http',
219
274
  url,
220
275
  }, null, 2));
221
- console.log(c.bold('\nClaude Desktop — claude_desktop_config.json:'));
222
- console.log(c.dim('macOS: ~/Library/Application Support/Claude/claude_desktop_config.json'));
276
+ console.log(c.bold('\nClaude Desktop — claude_desktop_config.json (stdio transport):'));
277
+ console.log(c.dim('macOS: ~/Library/Application Support/Claude/claude_desktop_config.json'));
223
278
  console.log(c.dim('Windows: %APPDATA%/Claude/claude_desktop_config.json\n'));
279
+ console.log(c.dim('Claude Desktop only speaks MCP over stdio. The --stdio flag binds MCP to'));
280
+ console.log(c.dim('stdin/stdout; the HTTP file server still runs on the port so /files/* links work.\n'));
224
281
  console.log(JSON.stringify({
225
282
  mcpServers: {
226
283
  'job_ops-mcp': {
227
284
  command: 'npx',
228
- args: ['-y', PKG.name, 'start'],
285
+ args: ['-y', PKG.name, 'start', '--stdio'],
229
286
  env: {
230
287
  MCP_JSA_PORT: port,
231
288
  MCP_JSA_HOST: host,
@@ -234,13 +291,6 @@ async function cmdConnect(flags) {
234
291
  },
235
292
  },
236
293
  }, null, 2));
237
- console.log(c.bold('\nClaude Desktop — manual streamable-HTTP (if the npx form is unsupported):'));
238
- console.log(c.dim('First boot the server in a separate terminal: `npx job_ops-mcp start`, then:'));
239
- console.log(JSON.stringify({
240
- mcpServers: {
241
- 'job_ops-mcp': { transport: { type: 'streamable-http', url } },
242
- },
243
- }, null, 2));
244
294
  // ── LibreChat ────────────────────────────────────────────────────────────
245
295
  // LibreChat's MCP transport for HTTP endpoints is `type: streamable-http`
246
296
  // (NOT `sse` — that's a separate legacy transport). Add to `librechat.yaml`
@@ -311,6 +361,35 @@ function yamlBlock(o, indent = 0) {
311
361
  }
312
362
  return JSON.stringify(o);
313
363
  }
364
+ // ── reseed ──────────────────────────────────────────────────────────────────
365
+ async function cmdReseed(flags) {
366
+ if (!process.env.MCP_JSA_PROJECT_ROOT)
367
+ process.env.MCP_JSA_PROJECT_ROOT = process.cwd();
368
+ console.log(c.bold('\njob_ops-mcp reseed\n'));
369
+ console.log(c.dim('Rebuilds the active career_packet from the current cv.md + config/profile.yml.'));
370
+ console.log(c.dim('Bumps version; the previous active row is demoted (history kept).\n'));
371
+ const { loadProjectFiles, cvHasRealContent, seedCareerPacketFromFiles, packetPreview } = await import('./core/profile.js');
372
+ const { cvMd, profile } = loadProjectFiles();
373
+ if (!profile && !flags.get('force')) {
374
+ console.error(` ${cross()} config/profile.yml not found. Run ${c.bold('npx job_ops-mcp init')} first, or pass --force.`);
375
+ process.exit(1);
376
+ }
377
+ if (!cvHasRealContent(cvMd) && !flags.get('force')) {
378
+ console.error(` ${warn()} cv.md is missing or looks like the <TODO> example template.`);
379
+ console.error(` ${c.dim('Fill it in first, then re-run.')}`);
380
+ console.error(` ${c.dim('Or pass --force to reseed anyway (identity-only — most sections stay as <TODO>).')}`);
381
+ process.exit(1);
382
+ }
383
+ const r = await seedCareerPacketFromFiles({ mode: 'reseed' });
384
+ console.log(` ${tick()} active career_packet → version ${c.bold(`v${r.version}`)} (${r.bytes} bytes)`);
385
+ console.log(` ${tick()} ${r.sections_with_cv_content}/6 sections populated from cv.md (sections 3-8)`);
386
+ console.log('');
387
+ console.log(c.dim('Preview (first ~400 chars):'));
388
+ console.log(c.dim('─'.repeat(64)));
389
+ console.log(packetPreview(r.preview, 600));
390
+ console.log(c.dim('─'.repeat(64)));
391
+ console.log('');
392
+ }
314
393
  // ── help ────────────────────────────────────────────────────────────────────
315
394
  function cmdHelp() {
316
395
  console.log(`
@@ -323,8 +402,12 @@ COMMANDS
323
402
  init Scaffold cv.md / config/profile.yml / portals.yml from examples
324
403
  and run SQLite migrations. Idempotent.
325
404
  start Boot the MCP + HTTP server. Auto-installs Chromium on first run.
405
+ start --stdio Same server, but MCP rides stdin/stdout (for Claude Desktop).
406
+ HTTP file server still runs on the port so /files/* links work.
407
+ reseed Rebuild the active career_packet from the current cv.md +
408
+ config/profile.yml. Run this after editing cv.md.
326
409
  doctor Diagnose Node version, Chromium, config files, LLM key.
327
- connect Print copy-paste MCP client config (Claude Desktop + generic).
410
+ connect Print copy-paste MCP client config (Claude Desktop + LibreChat).
328
411
  help Show this message.
329
412
 
330
413
  ENV
@@ -358,6 +441,9 @@ async function main() {
358
441
  case 'connect':
359
442
  await cmdConnect(flags);
360
443
  break;
444
+ case 'reseed':
445
+ await cmdReseed(flags);
446
+ break;
361
447
  case '--version':
362
448
  case '-v':
363
449
  case 'version':
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,22 @@
1
- // Loads cv.md + config/profile.yml + portals.yml from the configured project root.
2
- // Seeds career_packet table with an active row on first run.
1
+ // Loads cv.md + config/profile.yml + portals.yml from the configured project root,
2
+ // and rebuilds the active career_packet from those files.
3
+ //
4
+ // The packet content is built from THREE inputs:
5
+ // 1. modes/career_packet.md — the structural template (sections, hard rules)
6
+ // 2. config/profile.yml — identity → Section 1
7
+ // 3. cv.md — parsed via parseCV() → Sections 3-8 (work, projects,
8
+ // skills, education) so the chat sees real bullets,
9
+ // not <TODO> placeholders.
10
+ //
11
+ // The hard rule from the brief stays intact: NOTHING in the packet is invented; every
12
+ // bullet, project, skill, and degree comes verbatim from cv.md.
3
13
  import { existsSync, readFileSync } from 'node:fs';
4
- import { createHash } from 'node:crypto';
14
+ import { createHash, randomUUID } from 'node:crypto';
5
15
  import { resolve } from 'node:path';
6
16
  import yaml from 'js-yaml';
7
- import { randomUUID } from 'node:crypto';
8
17
  import { config } from '../config.js';
9
- import { getDb } from '../db.js';
18
+ import { getDb, runInWriteLock } from '../db.js';
19
+ import { parseCV } from './cv_parse.js';
10
20
  // ── Loaders ──────────────────────────────────────────────────────────────────
11
21
  export function pathInProject(...parts) {
12
22
  return resolve(config.projectRoot, ...parts);
@@ -27,38 +37,177 @@ export function loadProjectFiles() {
27
37
  }
28
38
  return { cvMd, profile, portalsYml };
29
39
  }
30
- // ── Career packet seeding ─────────────────────────────────────────────────────
31
- /**
32
- * On first startup, ensure exactly one `is_active = 1` row exists in `career_packet`.
33
- * If none exists, seed it from `modes/career_packet.md` (the markdown source of truth)
34
- * combined with the candidate identity block from `config/profile.yml`. The cv.md hash
35
- * is stored so we can detect drift later (`cv-sync-check` equivalent in milestone 2).
36
- */
37
- export function ensureActiveCareerPacket() {
38
- const db = getDb();
39
- const existing = db
40
- .prepare('SELECT version FROM career_packet WHERE is_active = 1')
41
- .get();
42
- if (existing)
43
- return { version: existing.version, created: false };
44
- const packetTemplatePath = resolve(config.modesDir, 'career_packet.md');
45
- const packetBody = readIfExists(packetTemplatePath) ?? '# Career Packet (empty)';
46
- const { cvMd, profile } = loadProjectFiles();
47
- const identityBlock = renderIdentityBlock(profile);
48
- const content = packetBody.replace(/## 1\. Identity[\s\S]*?(?=^## )/m, `## 1. Identity\n\n${identityBlock}\n\n`);
49
- const sourceHash = cvMd ? sha256(cvMd) : null;
50
- db.prepare(`
51
- INSERT INTO career_packet (id, version, content, taglines, is_active, source_cv_hash, notes)
52
- VALUES (?, 1, ?, NULL, 1, ?, 'seeded on first run')
53
- `).run(randomUUID(), content, sourceHash);
54
- return { version: 1, created: true };
40
+ // ── Staleness detection ──────────────────────────────────────────────────────
41
+ const TODO_MARKER = /<TODO[\s>]/g;
42
+ const MIN_REAL_CV_BYTES = 500; // anything smaller is probably still the example
43
+ /** True when the packet body still has 3+ literal `<TODO ...>` markers (template-y). */
44
+ export function isPlaceholderPacket(content) {
45
+ if (!content)
46
+ return true;
47
+ return (content.match(TODO_MARKER) || []).length >= 3;
55
48
  }
49
+ /** True when cv.md exists with non-trivial, non-example content. */
50
+ export function cvHasRealContent(cvMd) {
51
+ if (!cvMd)
52
+ return false;
53
+ if (cvMd.length < MIN_REAL_CV_BYTES)
54
+ return false;
55
+ // The example template has every bullet starting with `<...>` (placeholder).
56
+ // A real CV has at least a few bullets that don't start with an angle bracket.
57
+ const realBullets = (cvMd.match(/^[ \t]*-[ \t]+[^<\n]/gm) || []).length;
58
+ return realBullets >= 3;
59
+ }
60
+ export function packetStatus(args) {
61
+ if (!args.active)
62
+ return 'no_packet';
63
+ if (!args.cvMd)
64
+ return 'no_cv';
65
+ if (!cvHasRealContent(args.cvMd))
66
+ return 'cv_is_example';
67
+ // cv has real content — now check it matches what we built the packet from.
68
+ if (args.active.source_cv_hash && sha256(args.cvMd) !== args.active.source_cv_hash) {
69
+ return 'cv_edited_since_seed';
70
+ }
71
+ if (isPlaceholderPacket(args.active.content))
72
+ return 'packet_is_template';
73
+ return 'ok';
74
+ }
75
+ // ── Active-packet accessor ──────────────────────────────────────────────────
56
76
  export function getActiveCareerPacket() {
57
77
  const row = getDb()
58
78
  .prepare(`SELECT id, version, content, source_cv_hash FROM career_packet WHERE is_active = 1`)
59
79
  .get();
60
80
  return row ?? null;
61
81
  }
82
+ /**
83
+ * Rebuild the active career packet from cv.md + profile.yml using the template at
84
+ * modes/career_packet.md. Always writes a NEW row (bumps version, demotes previous)
85
+ * unless `mode: 'ensure_active'` and an active row already exists.
86
+ *
87
+ * mode='reseed' — always writes a new version. The default.
88
+ * mode='ensure_active' — only seeds if no active row exists (used by first-run boot).
89
+ */
90
+ export async function seedCareerPacketFromFiles(opts = {}) {
91
+ const mode = opts.mode ?? 'reseed';
92
+ const db = getDb();
93
+ if (mode === 'ensure_active') {
94
+ const existing = db.prepare(`SELECT version, content FROM career_packet WHERE is_active = 1`).get();
95
+ if (existing) {
96
+ return {
97
+ version: existing.version, created: false, reused: true,
98
+ bytes: existing.content.length, sections_with_cv_content: countSectionsWithCvContent(existing.content),
99
+ preview: existing.content.slice(0, 400),
100
+ };
101
+ }
102
+ }
103
+ const { content, sectionsWithContent, cvHash } = buildPacketContent();
104
+ const id = randomUUID();
105
+ const result = await runInWriteLock(() => {
106
+ const lastV = db.prepare(`SELECT COALESCE(MAX(version), 0) AS v FROM career_packet`).get().v;
107
+ const newV = lastV + 1;
108
+ db.prepare(`UPDATE career_packet SET is_active = 0 WHERE is_active = 1`).run();
109
+ db.prepare(`
110
+ INSERT INTO career_packet (id, version, content, taglines, is_active, source_cv_hash, notes)
111
+ VALUES (?, ?, ?, NULL, 1, ?, ?)
112
+ `).run(id, newV, content, cvHash, mode === 'ensure_active' ? 'seeded on first run' : 'reseeded from cv.md + profile.yml');
113
+ return { version: newV };
114
+ });
115
+ return {
116
+ version: result.version, created: true, reused: false,
117
+ bytes: content.length, sections_with_cv_content: sectionsWithContent,
118
+ preview: content.slice(0, 400),
119
+ };
120
+ }
121
+ /** Back-compat thin wrapper around seedCareerPacketFromFiles for boot-time callers. */
122
+ export async function ensureActiveCareerPacket() {
123
+ const r = await seedCareerPacketFromFiles({ mode: 'ensure_active' });
124
+ return { version: r.version, created: r.created };
125
+ }
126
+ function buildPacketContent() {
127
+ const { cvMd, profile } = loadProjectFiles();
128
+ const templatePath = resolve(config.modesDir, 'career_packet.md');
129
+ let content = readIfExists(templatePath) ?? '# Career Packet (empty template)';
130
+ // Always inject identity from profile.yml into Section 1.
131
+ content = replaceSectionBody(content, '1.', renderIdentityBlock(profile));
132
+ let sectionsWithContent = 0;
133
+ if (cvMd) {
134
+ const cv = parseCV(); // parseCV reads cv.md via loadProjectFiles() internally
135
+ // Sections 3, 4, 5 — experience bullet banks. The template ships three: most recent,
136
+ // previous, earlier. If cv.md has more roles, fold the extras into Section 5.
137
+ const exp = cv.experiences;
138
+ if (exp[0]) {
139
+ content = replaceSectionBody(content, '3.', renderRoleSection(exp[0]));
140
+ sectionsWithContent++;
141
+ }
142
+ if (exp[1]) {
143
+ content = replaceSectionBody(content, '4.', renderRoleSection(exp[1]));
144
+ sectionsWithContent++;
145
+ }
146
+ if (exp.slice(2).length) {
147
+ content = replaceSectionBody(content, '5.', exp.slice(2).map(renderRoleSection).join('\n\n'));
148
+ sectionsWithContent++;
149
+ }
150
+ // Section 6 — projects bank.
151
+ if (cv.projects.length) {
152
+ content = replaceSectionBody(content, '6.', renderProjectsBank(cv.projects));
153
+ sectionsWithContent++;
154
+ }
155
+ // Section 7 — skills bank.
156
+ if (cv.skills.length) {
157
+ content = replaceSectionBody(content, '7.', renderSkillsBank(cv.skills));
158
+ sectionsWithContent++;
159
+ }
160
+ // Section 8 — education.
161
+ if (cv.education.length) {
162
+ content = replaceSectionBody(content, '8.', renderEducationBank(cv.education));
163
+ sectionsWithContent++;
164
+ }
165
+ }
166
+ return {
167
+ content,
168
+ sectionsWithContent,
169
+ cvHash: cvMd ? sha256(cvMd) : null,
170
+ };
171
+ }
172
+ function countSectionsWithCvContent(content) {
173
+ // Heuristic: count Sections 3-8 whose body still contains a <TODO marker (meaning NOT
174
+ // populated from cv.md). Real sections = 6 - count(TODO sections).
175
+ const sections = splitNumberedSections(content);
176
+ let withContent = 0;
177
+ for (const n of ['3.', '4.', '5.', '6.', '7.', '8.']) {
178
+ const body = sections.get(n) ?? '';
179
+ if (body && !TODO_MARKER.test(body))
180
+ withContent++;
181
+ TODO_MARKER.lastIndex = 0; // reset global regex
182
+ }
183
+ return withContent;
184
+ }
185
+ // ── Section parsing + rewriting ─────────────────────────────────────────────
186
+ /** Replace the body of `## N. ...` (keep the heading line) with newBody. */
187
+ function replaceSectionBody(content, prefix, newBody) {
188
+ // Match the heading line (## N. ...) and capture everything after it until the next
189
+ // `## ` heading or end-of-document. We anchor the prefix to start-of-line.
190
+ const escaped = prefix.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
191
+ const re = new RegExp(`(^## ${escaped}[^\\n]*\\n)([\\s\\S]*?)(?=^## |\\z)`, 'm');
192
+ if (!re.test(content))
193
+ return content; // section not in template — leave content alone
194
+ return content.replace(re, (_match, heading) => `${heading}\n${newBody.trim()}\n\n`);
195
+ }
196
+ function splitNumberedSections(content) {
197
+ const out = new Map();
198
+ const re = /^## (\d+\.)[^\n]*$/gm;
199
+ const matches = [];
200
+ let m;
201
+ while ((m = re.exec(content))) {
202
+ matches.push({ prefix: m[1], start: m.index + m[0].length, end: -1 });
203
+ }
204
+ for (let i = 0; i < matches.length; i++) {
205
+ matches[i].end = i + 1 < matches.length ? matches[i + 1].start - (`## ${matches[i + 1].prefix}`.length + 1) : content.length;
206
+ out.set(matches[i].prefix, content.slice(matches[i].start, matches[i].end).trim());
207
+ }
208
+ return out;
209
+ }
210
+ // ── Renderers ───────────────────────────────────────────────────────────────
62
211
  function renderIdentityBlock(profile) {
63
212
  if (!profile?.candidate)
64
213
  return '_No `config/profile.yml` found — populate it to enrich._';
@@ -82,7 +231,38 @@ function renderIdentityBlock(profile) {
82
231
  lines.push(`- **Twitter:** ${c.twitter}`);
83
232
  return lines.length ? lines.join('\n') : '_Profile present but no candidate fields filled._';
84
233
  }
234
+ function renderRoleSection(exp) {
235
+ const meta = [exp.location, exp.period].filter(Boolean).join(' · ');
236
+ const head = `**${exp.company}** — ${exp.role}` + (meta ? ` \n_${meta}_` : '');
237
+ const bullets = exp.bullets.length
238
+ ? exp.bullets.map(b => `- ${b}`).join('\n')
239
+ : '- _(no bullets in cv.md for this role)_';
240
+ return `${head}\n\n${bullets}`;
241
+ }
242
+ function renderProjectsBank(projects) {
243
+ return projects.map(p => {
244
+ const badge = p.badge ? ` (${p.badge})` : '';
245
+ const tech = p.tech ? ` \n _${p.tech}_` : '';
246
+ return `- **${p.title}**${badge} — ${p.description}${tech}`;
247
+ }).join('\n');
248
+ }
249
+ function renderSkillsBank(skills) {
250
+ return skills.map(s => `- **${s.category}:** ${s.items}`).join('\n');
251
+ }
252
+ function renderEducationBank(edus) {
253
+ return edus.map(e => {
254
+ const year = e.year ? ` (${e.year})` : '';
255
+ const desc = e.desc ? `. ${e.desc}` : '';
256
+ const orgPart = e.org ? ` — ${e.org}` : '';
257
+ return `- **${e.title}**${orgPart}${year}${desc}`;
258
+ }).join('\n');
259
+ }
85
260
  function sha256(s) {
86
261
  return createHash('sha256').update(s, 'utf-8').digest('hex');
87
262
  }
263
+ // Used by callers (CLI doctor, MCP tool) — preview = first ~400 chars of the active packet.
264
+ export function packetPreview(content, max = 400) {
265
+ const trimmed = content.trim();
266
+ return trimmed.length <= max ? trimmed : trimmed.slice(0, max) + '\n…';
267
+ }
88
268
  //# sourceMappingURL=profile.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/core/profile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/core/profile.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@
9
9
  // below, and add it to ALL_TOOLS. resources/list comes from src/core/resources.ts.
10
10
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
11
11
  import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
12
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
12
13
  import { config } from '../config.js';
13
14
  import { listResources } from '../core/resources.js';
14
15
  import { registerTools } from './define.js';
@@ -33,6 +34,7 @@ import { batchEvaluateTool } from './tools/batch_evaluate.js';
33
34
  import { generateMaterialsTool } from './tools/generate_materials.js';
34
35
  // G7 — training/project/research/digest + profile ops
35
36
  import { evaluateTrainingTool, evaluateProjectTool, deepResearchTool, dailyDigestTool, getCareerPacketTool, updateCareerPacketTool, enrichCompanyTool, costEstimateTool, } from './tools/ops.js';
37
+ import { reseedCareerPacketTool } from './tools/reseed.js';
36
38
  // G8 — apply prefill
37
39
  import { applyPrefillTool } from './tools/apply_prefill.js';
38
40
  // G9 — scheduler
@@ -51,7 +53,7 @@ const FULL_TOOLSET = [
51
53
  extractStoriesTool, getStoryBankTool, negotiationBriefTool,
52
54
  batchEvaluateTool, generateMaterialsTool,
53
55
  evaluateTrainingTool, evaluateProjectTool, deepResearchTool, dailyDigestTool,
54
- getCareerPacketTool, updateCareerPacketTool, enrichCompanyTool, costEstimateTool,
56
+ getCareerPacketTool, updateCareerPacketTool, reseedCareerPacketTool, enrichCompanyTool, costEstimateTool,
55
57
  applyPrefillTool,
56
58
  schedulerStatusTool, schedulerEnableTool, schedulerDisableTool,
57
59
  ];
@@ -100,4 +102,17 @@ export function mountMcp(app, path = '/mcp') {
100
102
  app.delete(path, (_req, res) => res.status(405).end());
101
103
  }
102
104
  export function listAllTools() { return ALL_TOOLS; }
105
+ // ── stdio transport ─────────────────────────────────────────────────────────
106
+ // Used by Claude Desktop and any other MCP client that only speaks stdio.
107
+ // Blocks until stdin closes (the client disconnects). In stdio mode the caller
108
+ // must keep stdout clean — all logging in this process already goes to stderr.
109
+ export async function serveStdio() {
110
+ const server = getMcpServer();
111
+ const transport = new StdioServerTransport();
112
+ await server.connect(transport);
113
+ // Server runs until transport closes; transport.onclose fires when stdin EOFs.
114
+ await new Promise((resolve) => {
115
+ transport.onclose = () => resolve();
116
+ });
117
+ }
103
118
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ // reseed_career_packet — rebuild the active career_packet from the current cv.md +
2
+ // config/profile.yml. Bumps version, demotes the previous active row (history kept).
3
+ // Same underlying logic as the CLI `reseed` subcommand.
4
+ import { z } from 'zod';
5
+ import { defineTool, okResult, errResult } from '../define.js';
6
+ import { seedCareerPacketFromFiles, loadProjectFiles, cvHasRealContent, packetPreview } from '../../core/profile.js';
7
+ export const reseedCareerPacketTool = defineTool({
8
+ name: 'reseed_career_packet',
9
+ title: 'Rebuild the career packet from cv.md + profile.yml',
10
+ description: 'Re-reads cv.md and config/profile.yml and writes a NEW active career_packet ' +
11
+ 'version, demoting the previous one (history retained). Use after editing cv.md so ' +
12
+ 'the chat sees your real bullets, not the <TODO> template. Identity comes from ' +
13
+ 'profile.yml; bullets / projects / skills / education come from cv.md.',
14
+ inputSchema: {
15
+ confirm_empty_cv: z.boolean().optional()
16
+ .describe('cv.md missing or trivially small? Set true to seed identity-only anyway. Default false (errors instead).'),
17
+ },
18
+ handler: async (args) => {
19
+ const { cvMd } = loadProjectFiles();
20
+ if (!cvHasRealContent(cvMd) && !args.confirm_empty_cv) {
21
+ return errResult('cv.md is missing or still looks like the <TODO> example template. ' +
22
+ 'Fill it in first, then re-run. Pass confirm_empty_cv=true to reseed anyway ' +
23
+ '(identity-only — most sections will stay as <TODO> placeholders).');
24
+ }
25
+ const r = await seedCareerPacketFromFiles({ mode: 'reseed' });
26
+ return okResult({
27
+ ok: true,
28
+ new_version: r.version,
29
+ bytes: r.bytes,
30
+ sections_with_cv_content: r.sections_with_cv_content,
31
+ sections_max: 6,
32
+ preview: packetPreview(r.preview, 400),
33
+ note: 'previous active packet demoted; history retained in career_packet table',
34
+ });
35
+ },
36
+ });
37
+ //# sourceMappingURL=reseed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reseed.js","sourceRoot":"","sources":["../../../src/mcp/tools/reseed.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,qFAAqF;AACrF,wDAAwD;AAExD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAErH,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAC;IAC/C,IAAI,EAAE,sBAAsB;IAC5B,KAAK,EAAE,oDAAoD;IAC3D,WAAW,EACT,8EAA8E;QAC9E,oFAAoF;QACpF,gFAAgF;QAChF,uEAAuE;IACzE,WAAW,EAAE;QACX,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;aACrC,QAAQ,CAAC,0GAA0G,CAAC;KACxH;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,EAAE,IAAI,EAAE,GAAG,gBAAgB,EAAE,CAAC;QACpC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtD,OAAO,SAAS,CACd,oEAAoE;gBACpE,6EAA6E;gBAC7E,mEAAmE,CACpE,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,GAAG,MAAM,yBAAyB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9D,OAAO,QAAQ,CAAC;YACd,EAAE,EAAE,IAAI;YACR,WAAW,EAAgB,CAAC,CAAC,OAAO;YACpC,KAAK,EAAsB,CAAC,CAAC,KAAK;YAClC,wBAAwB,EAAG,CAAC,CAAC,wBAAwB;YACrD,YAAY,EAAe,CAAC;YAC5B,OAAO,EAAoB,aAAa,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC;YACxD,IAAI,EAAuB,yEAAyE;SACrG,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC"}
package/dist/server.js CHANGED
@@ -1,40 +1,67 @@
1
- // Entrypoint. One process: SQLite migrations, Express + file server, MCP HTTP transport.
1
+ // Entrypoint. One process, two transport modes:
2
+ //
3
+ // HTTP (default) — npx job_ops-mcp start
4
+ // MCP transport + file server + tracker dashboard, all on MCP_JSA_PORT.
5
+ //
6
+ // stdio (Claude Desktop) — npx job_ops-mcp start --stdio
7
+ // MCP transport on stdin/stdout; HTTP file server still runs on the port
8
+ // so /files/* artifact links the chat returns still resolve in a browser.
9
+ //
10
+ // In stdio mode all logging MUST go to stderr — stdout is the MCP channel.
2
11
  import { buildHttpApp } from './http/app.js';
3
- import { mountMcp } from './mcp/server.js';
12
+ import { mountMcp, serveStdio } from './mcp/server.js';
4
13
  import { config } from './config.js';
5
14
  import { getDb } from './db.js';
6
15
  import { ensureActiveCareerPacket, loadProjectFiles } from './core/profile.js';
7
16
  import { closeBrowser } from './core/render.js';
8
17
  import { shutdownScanResources } from './core/scan_engine.js';
9
18
  import { applyState as applySchedulerState, readEnabledJobs } from './core/scheduler.js';
10
- async function main() {
11
- // Trigger migrations (side effect of getDb()).
19
+ export async function bootServer(opts = {}) {
20
+ // Migrations + first-run seeding (side-effect of getDb()).
12
21
  getDb();
13
- const seed = ensureActiveCareerPacket();
22
+ const seed = await ensureActiveCareerPacket();
14
23
  const files = loadProjectFiles();
15
24
  const app = buildHttpApp();
16
- mountMcp(app, '/mcp');
25
+ // In stdio mode we DON'T mount /mcp — MCP rides stdin/stdout instead.
26
+ // The Express server still runs so /files/* artifact links resolve.
27
+ if (!opts.stdio) {
28
+ mountMcp(app, '/mcp');
29
+ }
17
30
  applySchedulerState();
18
31
  const enabled = readEnabledJobs();
19
32
  const server = app.listen(config.port, config.host, () => {
20
- const baseUrl = config.baseUrl;
33
+ const lines = opts.stdio
34
+ ? [
35
+ '',
36
+ `▷ job_ops-mcp stdio mode`,
37
+ ` · MCP transport: stdin/stdout`,
38
+ ` · File server: ${config.baseUrl}/files/* (for artifact links)`,
39
+ ` · Tracker UI: ${config.baseUrl}/`,
40
+ ` · DB: ${config.dbPath}`,
41
+ ` · Project root: ${config.projectRoot}`,
42
+ ` · career_packet: ${seed.created ? `seeded v${seed.version}` : `existing v${seed.version}`}`,
43
+ ` · scheduler: ${enabled.length ? enabled.join(', ') : 'off'}`,
44
+ ` · visa scoring: ${config.visaScoringEnabled ? 'on (0.5/0.3/0.2)' : 'off (0.6/0.4, visa tools hidden)'}`,
45
+ '',
46
+ ]
47
+ : [
48
+ '',
49
+ `▷ job_ops-mcp listening on ${config.baseUrl}`,
50
+ ` · MCP endpoint: ${config.baseUrl}/mcp`,
51
+ ` · Tracker UI: ${config.baseUrl}/`,
52
+ ` · File server: ${config.baseUrl}/files/*`,
53
+ ` · DB: ${config.dbPath}`,
54
+ ` · Project root: ${config.projectRoot}`,
55
+ ` · cv.md present: ${!!files.cvMd}`,
56
+ ` · profile.yml: ${!!files.profile}`,
57
+ ` · portals.yml: ${!!files.portalsYml}`,
58
+ ` · career_packet: ${seed.created ? `seeded v${seed.version}` : `existing v${seed.version}`}`,
59
+ ` · scheduler: ${enabled.length ? enabled.join(', ') : 'off'}`,
60
+ ` · visa scoring: ${config.visaScoringEnabled ? 'on (0.5/0.3/0.2)' : 'off (0.6/0.4, visa tools hidden)'}`,
61
+ '',
62
+ ];
21
63
  // eslint-disable-next-line no-console
22
- console.error([
23
- '',
24
- `▷ mcp-jsa listening on ${baseUrl}`,
25
- ` · MCP endpoint: ${baseUrl}/mcp`,
26
- ` · Tracker UI: ${baseUrl}/`,
27
- ` · File server: ${baseUrl}/files/*`,
28
- ` · DB: ${config.dbPath}`,
29
- ` · Project root: ${config.projectRoot}`,
30
- ` · cv.md present: ${!!files.cvMd}`,
31
- ` · profile.yml: ${!!files.profile}`,
32
- ` · portals.yml: ${!!files.portalsYml}`,
33
- ` · career_packet: ${seed.created ? `seeded v${seed.version}` : `existing v${seed.version}`}`,
34
- ` · scheduler: ${enabled.length ? enabled.join(', ') : 'off'}`,
35
- ` · visa scoring: ${config.visaScoringEnabled ? 'on (0.5/0.3/0.2)' : 'off (0.6/0.4, visa tools hidden)'}`,
36
- '',
37
- ].join('\n'));
64
+ console.error(lines.join('\n'));
38
65
  });
39
66
  const shutdown = async (signal) => {
40
67
  // eslint-disable-next-line no-console
@@ -46,10 +73,16 @@ async function main() {
46
73
  };
47
74
  process.on('SIGINT', () => { void shutdown('SIGINT'); });
48
75
  process.on('SIGTERM', () => { void shutdown('SIGTERM'); });
76
+ if (opts.stdio) {
77
+ // Block here until the stdio client disconnects (stdin EOFs).
78
+ // The HTTP file server keeps serving /files/* in parallel.
79
+ await serveStdio();
80
+ // eslint-disable-next-line no-console
81
+ console.error('[shutdown] stdio client disconnected');
82
+ server.close();
83
+ await closeBrowser();
84
+ await shutdownScanResources();
85
+ process.exit(0);
86
+ }
49
87
  }
50
- main().catch((err) => {
51
- // eslint-disable-next-line no-console
52
- console.error('[fatal]', err);
53
- process.exit(1);
54
- });
55
88
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "job_ops-mcp",
3
- "version": "0.3.0",
3
+ "version": "0.4.1",
4
4
  "description": "Self-hosted MCP server for the full job-search loop: portal scanning, JD evaluation, tailored resume + cover PDFs, outreach drafting, story bank, negotiation brief — chat-driven, human-in-the-loop.",
5
5
  "type": "module",
6
6
  "private": false,
@@ -14,8 +14,16 @@
14
14
  "url": "https://github.com/mohith-das/job_ops-mcp/issues"
15
15
  },
16
16
  "keywords": [
17
- "mcp", "model-context-protocol", "claude", "job-search", "resume",
18
- "cover-letter", "ats", "career", "agent", "playwright"
17
+ "mcp",
18
+ "model-context-protocol",
19
+ "claude",
20
+ "job-search",
21
+ "resume",
22
+ "cover-letter",
23
+ "ats",
24
+ "career",
25
+ "agent",
26
+ "playwright"
19
27
  ],
20
28
  "bin": {
21
29
  "job_ops-mcp": "dist/cli.js",