stackprep-pro 0.2.4__tar.gz → 0.2.6__tar.gz
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.
- stackprep_pro-0.2.6/CLAUDE.md +42 -0
- {stackprep_pro-0.2.4 → stackprep_pro-0.2.6}/PKG-INFO +2 -2
- {stackprep_pro-0.2.4 → stackprep_pro-0.2.6}/README.md +1 -1
- {stackprep_pro-0.2.4 → stackprep_pro-0.2.6}/pyproject.toml +1 -1
- {stackprep_pro-0.2.4 → stackprep_pro-0.2.6}/src/stackprep_pro/server.py +9 -1
- {stackprep_pro-0.2.4 → stackprep_pro-0.2.6}/src/stackprep_pro/skills/certification.md +26 -4
- {stackprep_pro-0.2.4 → stackprep_pro-0.2.6}/src/stackprep_pro/skills/interview.md +22 -5
- {stackprep_pro-0.2.4 → stackprep_pro-0.2.6}/uv.lock +1 -1
- {stackprep_pro-0.2.4 → stackprep_pro-0.2.6}/.claude/settings.json +0 -0
- {stackprep_pro-0.2.4 → stackprep_pro-0.2.6}/.githooks/pre-commit +0 -0
- {stackprep_pro-0.2.4 → stackprep_pro-0.2.6}/.github/workflows/publish.yml +0 -0
- {stackprep_pro-0.2.4 → stackprep_pro-0.2.6}/.gitignore +0 -0
- {stackprep_pro-0.2.4 → stackprep_pro-0.2.6}/.mcp.json +0 -0
- {stackprep_pro-0.2.4 → stackprep_pro-0.2.6}/scripts/bump_version.sh +0 -0
- {stackprep_pro-0.2.4 → stackprep_pro-0.2.6}/scripts/generate_readme.py +0 -0
- {stackprep_pro-0.2.4 → stackprep_pro-0.2.6}/src/stackprep_pro/__init__.py +0 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# CLAUDE.md — stackprep-pro
|
|
2
|
+
|
|
3
|
+
Rules for working on this repo. **Do NOT violate these. Do NOT touch things that already work.**
|
|
4
|
+
|
|
5
|
+
## Golden rule
|
|
6
|
+
|
|
7
|
+
- **If something works, do NOT change it.** No "improvements", no refactors, no edits to working code. Only touch what is explicitly broken and being fixed.
|
|
8
|
+
- Always **follow the skill files** in `src/stackprep_pro/skills/`. The skill is the source of truth for behavior. Never invent a flow that contradicts the skill.
|
|
9
|
+
|
|
10
|
+
## Startup / session flow (MUST follow exactly)
|
|
11
|
+
|
|
12
|
+
1. When the MCP starts, **ask the user in plain human language**: "Are you prepping for a technical interview or a certification exam?"
|
|
13
|
+
2. **Only after** the user picks interview or certification:
|
|
14
|
+
- If saved sessions exist for that mode, offer to **continue a saved session** (shown by the **name the user gave it**) or **start a new one**.
|
|
15
|
+
- If none exist, just start a new session.
|
|
16
|
+
3. **Never expose backend tool names** to the user (no "list_sessions", "start_session", "list_study_packs", etc.). Use natural language only.
|
|
17
|
+
4. **Never auto-call** `list_sessions` or `list_study_packs` on startup. Call them silently in the background **only** when the user explicitly asks to continue/load.
|
|
18
|
+
|
|
19
|
+
## Certification exam version
|
|
20
|
+
|
|
21
|
+
- **Never hardcode exam versions** (e.g. do NOT hardcode "SnowPro Core = COF-C03"). It must work for **ANY** certification.
|
|
22
|
+
- Always pull the **latest exam version** dynamically (web search / latest official exam guide), exactly as the original skill does.
|
|
23
|
+
- **`cert_name` must be passed exactly as the user typed it.** Never modify, correct, or substitute it from training data (e.g. do NOT turn COF-C03 into COF-C02).
|
|
24
|
+
|
|
25
|
+
## Study pack
|
|
26
|
+
|
|
27
|
+
- The user **must be able to name** the study pack when saving it.
|
|
28
|
+
- Study pack format is **markdown, NOT JSON**. For each topic: official docs link (or community source like Reddit/Discord/LinkedIn if no official docs exist — e.g. niche certs like NVIDIA Agentic AI), best video resource, and a 2–3 sentence summary. Include percentages/scores and links as the original skill does.
|
|
29
|
+
- Never fabricate documentation URLs. Only real, publicly accessible links.
|
|
30
|
+
|
|
31
|
+
## Versioning & publishing
|
|
32
|
+
|
|
33
|
+
- This package publishes to **PyPI** as `stackprep-pro` via **GitHub Actions** on push to `main` (`.github/workflows/publish.yml`).
|
|
34
|
+
- **The human bumps the version in `pyproject.toml` and commits it.** The workflow does **NOT** auto-commit or auto-bump — it only reads the version, tags it, and publishes.
|
|
35
|
+
- Every code change that ships needs a **version bump** (PyPI rejects re-publishing an existing version).
|
|
36
|
+
- After publishing, to test the new version: `uv cache clean`, then restart the MCP client (uvx caches old versions).
|
|
37
|
+
- `git pull` is set to rebase in this repo. If branches diverge, `git pull --rebase`.
|
|
38
|
+
|
|
39
|
+
## Commit messages
|
|
40
|
+
|
|
41
|
+
- **ALWAYS give a commit title after making any change.** Every time you edit files, end your response with a single concise conventional-commit title — never skip it, never make the user ask for it.
|
|
42
|
+
- Do not commit/push unless explicitly asked.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: stackprep-pro
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.6
|
|
4
4
|
Summary: stackprep-pro — interview & certification prep MCP server for any AI client
|
|
5
5
|
Project-URL: Homepage, https://github.com/youngpada1/stackprep-pro
|
|
6
6
|
Project-URL: Repository, https://github.com/youngpada1/stackprep-pro
|
|
@@ -168,7 +168,7 @@ Point this at any Dropbox, Google Drive, or OneDrive folder for cross-platform s
|
|
|
168
168
|
| `save_study_pack` | Save the study pack content to disk. | `session_id`, `name`, `content` |
|
|
169
169
|
| `list_sessions` | List all saved sessions. Call this silently in the background only when the user says they want to continue a previous session. Never mention this tool to the user. | |
|
|
170
170
|
| `resume_session` | Resume a previously saved session. Returns full session state and skill rules. | `session_id` |
|
|
171
|
-
| `list_study_packs` | List all saved study packs. | |
|
|
171
|
+
| `list_study_packs` | List all saved study packs. Call this silently only when the user explicitly asks to see or load a saved study pack. Never call this on startup or automatically. Never mention this tool to the user. | |
|
|
172
172
|
| `load_study_pack` | Load a previously saved study pack by name. | `name` |
|
|
173
173
|
|
|
174
174
|
---
|
|
@@ -148,7 +148,7 @@ Point this at any Dropbox, Google Drive, or OneDrive folder for cross-platform s
|
|
|
148
148
|
| `save_study_pack` | Save the study pack content to disk. | `session_id`, `name`, `content` |
|
|
149
149
|
| `list_sessions` | List all saved sessions. Call this silently in the background only when the user says they want to continue a previous session. Never mention this tool to the user. | |
|
|
150
150
|
| `resume_session` | Resume a previously saved session. Returns full session state and skill rules. | `session_id` |
|
|
151
|
-
| `list_study_packs` | List all saved study packs. | |
|
|
151
|
+
| `list_study_packs` | List all saved study packs. Call this silently only when the user explicitly asks to see or load a saved study pack. Never call this on startup or automatically. Never mention this tool to the user. | |
|
|
152
152
|
| `load_study_pack` | Load a previously saved study pack by name. | `name` |
|
|
153
153
|
|
|
154
154
|
---
|
|
@@ -79,6 +79,14 @@ def start_session(
|
|
|
79
79
|
) -> str:
|
|
80
80
|
"""Start a new stackprep session. Returns a session ID and the skill rules for the AI to follow.
|
|
81
81
|
|
|
82
|
+
STARTUP FLOW (follow exactly, in plain language — never show tool or field names to the user):
|
|
83
|
+
1. First ask the user, in plain language, what they want to prep for (e.g. "What would you like to prep for?") and let them indicate interview or certification.
|
|
84
|
+
2. After they choose, check for saved sessions of that mode (call list_sessions silently).
|
|
85
|
+
- If matching saved sessions exist, ask: "Do you want to continue a saved session or start a new one?"
|
|
86
|
+
and list the saved sessions by the name the user gave them.
|
|
87
|
+
- If none exist, just proceed to start a new session.
|
|
88
|
+
3. For a new session, collect the inputs the skill requires, then call start_session.
|
|
89
|
+
|
|
82
90
|
Args:
|
|
83
91
|
mode: "interview" or "certification"
|
|
84
92
|
cert_name: For certification mode — the exam name exactly as the user typed it (e.g. "AWS SAA-C03"). NEVER modify, correct, or substitute the cert name — use the user's exact input verbatim.
|
|
@@ -343,7 +351,7 @@ def resume_session(session_id: str) -> str:
|
|
|
343
351
|
|
|
344
352
|
@mcp.tool()
|
|
345
353
|
def list_study_packs() -> str:
|
|
346
|
-
"""List all saved study packs."""
|
|
354
|
+
"""List all saved study packs. Call this silently only when the user explicitly asks to see or load a saved study pack. Never call this on startup or automatically. Never mention this tool to the user."""
|
|
347
355
|
packs = _packs_dir()
|
|
348
356
|
files = sorted(packs.glob("*.json"))
|
|
349
357
|
if not files:
|
|
@@ -9,11 +9,33 @@ Adaptive certification exam prep — one question at a time, with instant feedba
|
|
|
9
9
|
|
|
10
10
|
## Session setup
|
|
11
11
|
|
|
12
|
-
Inputs arrive via MCP (certification name, extra topics).
|
|
13
|
-
- Exam structure overview
|
|
14
|
-
- Key domains and weightings from the latest official exam guide
|
|
12
|
+
Inputs arrive via MCP (certification name, extra topics). After looking up the latest official exam guide, present a clean, structured overview in this exact layout:
|
|
15
13
|
|
|
16
|
-
|
|
14
|
+
```
|
|
15
|
+
[Cert name + code] — confirmed active as of [date] (replaces [prev version] if applicable).
|
|
16
|
+
|
|
17
|
+
**Exam structure:**
|
|
18
|
+
— [N] questions | [time] min | Passing: [score] | [price] via [provider]
|
|
19
|
+
|
|
20
|
+
**Domains & weightings:**
|
|
21
|
+
|
|
22
|
+
| Domain | Weight |
|
|
23
|
+
|------------------------------------------|--------|
|
|
24
|
+
| [Domain 1] | [X]% |
|
|
25
|
+
| [Domain 2] | [X]% |
|
|
26
|
+
| ... | ... |
|
|
27
|
+
|
|
28
|
+
**Notable [version] additions:** [short note on what's new, if applicable].
|
|
29
|
+
|
|
30
|
+
**Sources:**
|
|
31
|
+
— [Title] ([url])
|
|
32
|
+
— [Title] ([url])
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
Ready when you are — first question?
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Then wait — questions are requested one at a time.
|
|
17
39
|
|
|
18
40
|
## Question format
|
|
19
41
|
|
|
@@ -9,12 +9,29 @@ Adaptive technical interview prep — one question at a time, with instant feedb
|
|
|
9
9
|
|
|
10
10
|
## Session setup
|
|
11
11
|
|
|
12
|
-
Inputs arrive via MCP (CV, job description, extra topics).
|
|
13
|
-
- Seniority level inferred from CV
|
|
14
|
-
- Key domains
|
|
15
|
-
- Top skill gaps vs. the job description
|
|
12
|
+
Inputs arrive via MCP (CV, job description, extra topics). After analysing the CV and JD, present a clean, structured overview in this exact layout:
|
|
16
13
|
|
|
17
|
-
|
|
14
|
+
```
|
|
15
|
+
[Role / target position] — [seniority level inferred from CV].
|
|
16
|
+
|
|
17
|
+
**Interview focus:**
|
|
18
|
+
— Based on your CV vs. the job description
|
|
19
|
+
|
|
20
|
+
**Domains & focus:**
|
|
21
|
+
|
|
22
|
+
| Domain | Focus |
|
|
23
|
+
|------------------------------------------|--------|
|
|
24
|
+
| [Domain 1] | [High/Med/Low] |
|
|
25
|
+
| [Domain 2] | [High/Med/Low] |
|
|
26
|
+
| ... | ... |
|
|
27
|
+
|
|
28
|
+
**Top skill gaps vs. the JD:** [short note on the biggest gaps to drill].
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
Ready when you are — first question?
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Then wait — questions are requested one at a time.
|
|
18
35
|
|
|
19
36
|
## Question format
|
|
20
37
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|