opencode-skills-collection 4.0.73 → 4.0.75

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 (63) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +16 -1
  2. package/bundled-skills/claude-api/SKILL.md +4 -4
  3. package/bundled-skills/claude-api/curl/examples.md +5 -5
  4. package/bundled-skills/claude-api/java/claude-api.md +1 -1
  5. package/bundled-skills/claude-api/php/claude-api.md +2 -2
  6. package/bundled-skills/claude-api/python/claude-api/README.md +13 -13
  7. package/bundled-skills/claude-api/python/claude-api/batches.md +3 -3
  8. package/bundled-skills/claude-api/python/claude-api/files-api.md +3 -3
  9. package/bundled-skills/claude-api/python/claude-api/streaming.md +6 -6
  10. package/bundled-skills/claude-api/python/claude-api/tool-use.md +19 -19
  11. package/bundled-skills/claude-api/ruby/claude-api.md +3 -3
  12. package/bundled-skills/claude-api/shared/error-codes.md +2 -2
  13. package/bundled-skills/claude-api/shared/live-sources.md +1 -1
  14. package/bundled-skills/claude-api/shared/models.md +4 -4
  15. package/bundled-skills/claude-api/shared/tool-use-concepts.md +2 -2
  16. package/bundled-skills/claude-api/typescript/claude-api/README.md +12 -12
  17. package/bundled-skills/claude-api/typescript/claude-api/batches.md +2 -2
  18. package/bundled-skills/claude-api/typescript/claude-api/files-api.md +1 -1
  19. package/bundled-skills/claude-api/typescript/claude-api/streaming.md +4 -4
  20. package/bundled-skills/claude-api/typescript/claude-api/tool-use.md +14 -14
  21. package/bundled-skills/electron-drive-skill/LICENSE +21 -0
  22. package/bundled-skills/electron-drive-skill/README.md +172 -0
  23. package/bundled-skills/electron-drive-skill/SKILL.md +237 -0
  24. package/bundled-skills/electron-drive-skill/drive.config.json.example +10 -0
  25. package/bundled-skills/electron-drive-skill/package.json +28 -0
  26. package/bundled-skills/electron-drive-skill/scripts/daemon.mjs +352 -0
  27. package/bundled-skills/electron-drive-skill/scripts/drive.mjs +250 -0
  28. package/bundled-skills/electron-drive-skill/scripts/lib.mjs +165 -0
  29. package/bundled-skills/electron-drive-skill/scripts/lib.test.mjs +56 -0
  30. package/bundled-skills/film-crew/SKILL.md +129 -0
  31. package/bundled-skills/film-crew/references/model-prompting.md +89 -0
  32. package/bundled-skills/film-crew/references/reroll-review.md +46 -0
  33. package/bundled-skills/film-crew/references/roles/director.md +38 -0
  34. package/bundled-skills/film-crew/references/roles/dp.md +28 -0
  35. package/bundled-skills/film-crew/references/roles/editor.md +34 -0
  36. package/bundled-skills/film-crew/references/roles/gaffer.md +30 -0
  37. package/bundled-skills/film-crew/references/roles/production-designer.md +43 -0
  38. package/bundled-skills/film-crew/references/roles/script-supervisor.md +35 -0
  39. package/bundled-skills/film-crew/references/roles/sound.md +23 -0
  40. package/bundled-skills/film-crew/references/templates/shot-list.md +38 -0
  41. package/bundled-skills/film-crew/references/unslop.md +29 -0
  42. package/bundled-skills/mcp-dependency-drift-audit/SKILL.md +169 -0
  43. package/bundled-skills/nexrad-mosaic-access/SKILL.md +297 -0
  44. package/bundled-skills/nexrad-mosaic-construction/SKILL.md +277 -0
  45. package/bundled-skills/nexrad-product-access/SKILL.md +258 -0
  46. package/bundled-skills/nexrad-radar-visualization/SKILL.md +318 -0
  47. package/bundled-skills/radar-satellite-analysis/SKILL.md +314 -0
  48. package/bundled-skills/testdriver-e2e-testing/SKILL.md +121 -0
  49. package/bundled-skills/traderspy-market-briefing/SKILL.md +132 -0
  50. package/bundled-skills/traderspy-market-screener/SKILL.md +182 -0
  51. package/bundled-skills/traderspy-market-screener/references/condition-cookbook.md +70 -0
  52. package/bundled-skills/traderspy-position-check/SKILL.md +130 -0
  53. package/bundled-skills/traderspy-position-check/references/risk-math.md +60 -0
  54. package/bundled-skills/traderspy-smart-money/SKILL.md +151 -0
  55. package/bundled-skills/traderspy-smart-money/references/exchange-notes.md +40 -0
  56. package/bundled-skills/traderspy-technical-analysis/SKILL.md +162 -0
  57. package/bundled-skills/traderspy-technical-analysis/references/derivatives-guide.md +57 -0
  58. package/bundled-skills/traderspy-technical-analysis/references/indicator-guide.md +47 -0
  59. package/bundled-skills/traderspy-trading-signals/SKILL.md +156 -0
  60. package/bundled-skills/traderspy-trading-signals/references/signal-fields.md +64 -0
  61. package/bundled-skills/unified-ai-gateway/SKILL.md +3 -3
  62. package/package.json +1 -1
  63. package/skills_index.json +499 -1
@@ -0,0 +1,46 @@
1
+ # Reroll review: change one thing, then reroll
2
+
3
+ AI video is probabilistic. Some rerolls are just the dice. Many are the prompt. The job
4
+ here is to tell those apart and change **one** thing at a time, so each reroll teaches you
5
+ something.
6
+
7
+ ## 1. Classify the failure
8
+
9
+ | Class | Looks like | Most likely fix |
10
+ |---|---|---|
11
+ | **Dice** | The prompt is followed, the clip is just weaker than the last one | Reroll unchanged (new seed). Nothing to fix. |
12
+ | **Ignored action** | The key event doesn't happen (the cup never spills) | Make the action the *first* clause; describe its start and end; cut everything else in the shot |
13
+ | **Two things fighting** | Half an action, half another | Split into two shots |
14
+ | **Physics break** | Liquid behaves like jelly, objects pass through each other | Frame tighter, slow the action, simplify the background, lock the camera |
15
+ | **Identity drift** | Character looks different from other shots | Paste the continuity descriptors verbatim, or switch to image-to-video from one reference |
16
+ | **Camera chaos** | Warped geometry, swimming background | One move only, slower, or locked-off |
17
+ | **Look drift** | Color/light changes between shots | Paste the gaffer's line verbatim; name the source and color temperature |
18
+ | **Artifacting** | Extra fingers, melting faces, flicker | Tighter framing, fewer subjects, add the negative prompt if supported |
19
+ | **Text garbage** | Nonsense letters | Remove readable text from the shot |
20
+
21
+ ## 2. Decide
22
+
23
+ - Same failure twice in a row → it's the prompt, not the dice. Apply the fix.
24
+ - Different failures each time → the shot is too ambitious. Simplify it (split, tighten, slow down).
25
+ - 3+ rerolls with no improvement → go back to the DP and director: re-block the shot.
26
+
27
+ ## 3. Report format
28
+
29
+ ```
30
+ CLASS: Ignored action
31
+ EVIDENCE: in 4/4 clips the cup lands upright; no liquid leaves it
32
+ CHANGE (one): lead with the action — "Black coffee sloshes out of a tipping paper cup…" —
33
+ and cut the barista from the frame
34
+ KEEP: lens, light, seed policy
35
+ ```
36
+
37
+ ## A worked example
38
+
39
+ The upstream [ai-film-crew repository](https://github.com/HEOJUNFO/ai-film-crew) shows ten generations of one prompt in its `assets/ten-rerolls.png`:
40
+ *"A barista bumps a customer's elbow and a paper coffee cup slips and spills onto the café
41
+ floor next to white sneakers, slow motion, handheld close-up, warm morning light."*
42
+
43
+ Across ten rerolls the cup falls, rolls, or lands upright. The spill (the whole point)
44
+ barely happens. Diagnosis: **two things fighting** (the bump and the spill share one shot)
45
+ plus **ignored action** (the spill is the last clause). The crew fix is in the upstream repository's
46
+ `examples/coffee-spill-15s/SHOT_LIST.md`.
@@ -0,0 +1,38 @@
1
+ # Director
2
+
3
+ **Job:** decide what this video is *for* and what happens, beat by beat. Everyone else
4
+ executes your call.
5
+
6
+ ## Output (keep it under ~12 lines)
7
+
8
+ ```
9
+ LOGLINE: one sentence, subject + action + turn.
10
+ INTENT: what the viewer should do/feel/understand at the end (one line).
11
+ HOOK (0–1.5 s): the first frame. Must be legible with sound off.
12
+ BEATS:
13
+ 1. 0.0–2.5 s — …
14
+ 2. 2.5–6.0 s — …
15
+ …
16
+ ENDING: button / reveal / loop point.
17
+ ```
18
+
19
+ ## Rules
20
+
21
+ - **Open on motion or a question, never on an establishing shot.** In a vertical feed the
22
+ first 1.5 s decides whether anyone sees the rest.
23
+ - **One idea per video.** If you need "and also", it's two videos.
24
+ - **Beats are visible events,** not moods. "She realizes" is not a beat; "she stops
25
+ mid-sip and looks at the receipt" is.
26
+ - **Budget for the model.** A beat that needs complex physics (pouring, cloth tearing,
27
+ hands manipulating small objects, crowds interacting) gets its own short shot, framed
28
+ tight, with nothing else going on.
29
+ - **Loop if you can.** For short-form, an ending that cuts cleanly back to frame one
30
+ earns rewatches.
31
+ - Product videos: the product must be on screen, unobstructed, by beat 2. Hero it once,
32
+ in the gaffer's best light, with no hands in the hero shot. If hands are the point
33
+ (handmade, cooking, a demo), give them their own shots and keep the hero shot clean.
34
+
35
+ ## Questions to ask yourself before handing off
36
+
37
+ - Could a stranger describe this video in one sentence after watching it once?
38
+ - Which beat would I cut if I had to lose 3 seconds? (Cut it now.)
@@ -0,0 +1,28 @@
1
+ # Director of photography (DP)
2
+
3
+ **Job:** decide exactly what the camera sees in each shot and how it moves.
4
+
5
+ ## Output: one line per shot
6
+
7
+ ```
8
+ S1 ECU | 100mm macro | eye level | locked-off | 2.5 s
9
+ S2 MS | 35mm | low angle | slow push-in | 4 s
10
+ S3 WS | 24mm | high angle| handheld, drifting| 3 s
11
+ ```
12
+
13
+ Shot sizes: ECU (extreme close-up), CU, MCU (chest up), MS (waist up), MWS, WS (full body), EWS (establishing).
14
+
15
+ ## Rules
16
+
17
+ - **One camera move per shot.** Push-in, pull-out, pan, tilt, truck (sideways), pedestal
18
+ (up/down), orbit, handheld, or locked-off. Combining moves ("orbit while pushing in and
19
+ tilting up") is the #1 source of warped geometry.
20
+ - **Name the lens.** 24mm reads wide and energetic, 35–50mm natural, 85–135mm compressed
21
+ and intimate, macro for texture. Models respond to focal lengths.
22
+ - **Match move speed to duration.** A 3-second shot gets a *slow* move or none.
23
+ - **Tight on hard physics.** Pours, spills, hands and small objects: frame close, keep the
24
+ background simple, lock the camera or move it very slowly.
25
+ - **Vertical framing (9:16):** stack the composition vertically; keep faces in the upper
26
+ third and important action out of the bottom 15% (UI overlays live there).
27
+ - **Vary sizes between consecutive shots** (e.g. WS → CU), or the cut will look like a jump.
28
+ - Avoid "cinematic" as a camera instruction. It's a vibe, not a shot.
@@ -0,0 +1,34 @@
1
+ # Editor
2
+
3
+ **Job:** make the shots add up to a video: durations, order, cuts, pacing. You think about
4
+ the timeline, not the frame.
5
+
6
+ ## Output
7
+
8
+ ```
9
+ TOTAL: 15.0 s (sum of shots, trimmed)
10
+ S1 2.5 s → hard cut
11
+ S2 4.0 s → match cut on motion
12
+ S3 3.0 s → smash cut
13
+ …
14
+ GENERATE: each shot +1 s handles (so S2 is generated at 5 s, used at 4 s)
15
+ HOOK CHECK: frame 1 is S1 ECU, motion starts at 0.2 s ✅
16
+ LOOP: last frame of S5 matches S1 composition ✅/❌
17
+ ```
18
+
19
+ ## Rules
20
+
21
+ - **Fit the model.** Every shot must be ≤ the model's max clip length (see
22
+ `references/model-prompting.md`). If a beat needs longer, split it into two shots with a
23
+ change of angle.
24
+ - **Generate long, use short.** Plan 0.5–1 s of handles at each end. The first and last
25
+ frames of AI clips are often the weakest.
26
+ - **Fixed-length models** (only preset lengths such as 5 s / 10 s): generate at the
27
+ shortest preset and pick the strongest section. A 2.5 s shot uses the best 2.5 s of a
28
+ 5 s clip; note which section in the timeline.
29
+ - **Short-form pacing:** 1.5–3 s per shot is normal; a 6 s static shot kills retention
30
+ unless something is happening in it.
31
+ - **Cut on action.** If S1 ends with a hand moving right, S2 should start with motion
32
+ continuing right.
33
+ - **Text goes in the edit,** not the prompt. Note captions/supers here with timings.
34
+ - Call out any shot that exists only for coverage. Coverage costs generations.
@@ -0,0 +1,30 @@
1
+ # Gaffer
2
+
3
+ **Job:** light the scene so it looks intentional and stays consistent between shots.
4
+
5
+ ## Output
6
+
7
+ ```
8
+ TIME / SOURCE: late afternoon sun through west window (motivated)
9
+ KEY: camera-left, 45°, soft
10
+ FILL: low, bounce from white tabletop
11
+ RIM / BACK: warm sun edge on hair
12
+ COLOR TEMP: warm key ~3200K vs cool ambient ~5600K
13
+ CONTRAST: medium-high, deep shadows
14
+ PRACTICALS: pendant bulbs visible in background, slightly blown
15
+ LOOK: 35mm film, fine grain, mild halation
16
+ ```
17
+
18
+ ## Rules
19
+
20
+ - **Motivate the light.** Say where it comes from (window, neon sign, streetlight,
21
+ monitor glow). Unmotivated "dramatic lighting" gives you random results.
22
+ - **Same key direction in every shot of a scene,** or the cut breaks continuity.
23
+ - **Contrast beats brightness.** Flat, evenly lit prompts are what make AI video look
24
+ like AI video. Ask for shadows.
25
+ - Color: pick one warm/cool contrast and hold it. Write it in plain words plus a
26
+ temperature if useful.
27
+ - Night scenes: name the sources (sodium streetlight, phone screen, neon). "Dark" alone
28
+ gets you murk.
29
+ - Products: soft key, clean rim to separate from background, a highlight that shows the
30
+ material (gloss, brushed metal, glass).
@@ -0,0 +1,43 @@
1
+ # Production designer
2
+
3
+ **Job:** make the world consistent. You write the **continuity bible**: the exact words
4
+ every other role must paste, verbatim, whenever a character, prop or location appears.
5
+
6
+ Video models have no memory between clips. The *only* continuity you get is identical
7
+ wording. Paraphrasing a character ("a woman in a red coat" → "the lady in crimson")
8
+ gives you a different person.
9
+
10
+ ## Output
11
+
12
+ ```
13
+ CHARACTERS
14
+ C1 <age range> <build> <hair: length, color, style> <skin tone> <face detail>,
15
+ wearing <top, color, material> and <bottom>, <one distinctive accessory>
16
+ LOCATIONS
17
+ L1 <place type>, <era/style>, <3 concrete set details>, <floor/wall materials>
18
+ PROPS
19
+ P1 <object>, <material>, <color>, <size cue>, <state: new/used/half-full…>
20
+ PALETTE
21
+ 3–5 colors, named plainly ("mustard yellow, teal, off-white")
22
+ ```
23
+
24
+ Every entry gets two versions:
25
+ - **FULL** — the whole description, for shots where the whole subject is in frame.
26
+ - **TIGHT** — only what a close-up can see (e.g. `C1-TIGHT: weathered hands, short
27
+ clean nails, a thin silver ring, sleeves of a faded olive sweatshirt pushed up`).
28
+
29
+ Close-ups use TIGHT verbatim; wider shots use FULL verbatim. Pasting a whole-person
30
+ description into an ECU of hands drags the rest of the person (and the set) into frame.
31
+
32
+ ## Rules
33
+
34
+ - 20–35 words per character. Concrete nouns and colors, no adjectives like "beautiful".
35
+ - One **distinctive anchor** per character (a yellow beanie, a scar, round glasses).
36
+ Anchors survive model drift better than faces do.
37
+ - Avoid real people, brands and logos. Describe the *type* ("a white leather low-top
38
+ sneaker") not the brand.
39
+ - Props that matter to the story get a state ("a paper cup, lid off, full to the brim
40
+ with black coffee"). State is what makes the action physically possible.
41
+ - Keep locations simple enough to re-generate: 3 set details, not 12.
42
+ - If the user supplies a reference image, write the bible *from the image* so the text
43
+ and the image agree.
@@ -0,0 +1,35 @@
1
+ # Script supervisor
2
+
3
+ **Job:** protect continuity and catch the shots that will fail *before* anyone spends a
4
+ generation on them. You have veto power: any shot you flag gets rewritten.
5
+
6
+ ## Checklist (run on every shot)
7
+
8
+ **Continuity**
9
+ - [ ] Every recurring character/prop/location is pasted verbatim from the continuity bible.
10
+ - [ ] Key light direction and color temperature match the rest of the scene.
11
+ - [ ] Screen direction is consistent (subject moving left→right keeps moving left→right).
12
+ - [ ] Props are in the right state (the cup that spilled in S2 isn't full in S3).
13
+
14
+ **Feasibility**
15
+ - [ ] One subject action, one camera move.
16
+ - [ ] Duration ≤ model max, with handles.
17
+ - [ ] No readable text, logos, UI or signage in frame (unless the model handles text).
18
+ - [ ] Hard physics (liquids, cloth, hands with small objects, multiple people touching) is
19
+ framed tight, isolated, and given a simple background.
20
+ - [ ] Nothing depends on a specific real person's likeness or a trademark.
21
+ - [ ] Counts are small: "two dogs" works better than "five dogs".
22
+
23
+ **Unslop** (see `references/unslop.md`)
24
+ - [ ] No empty quality words ("stunning, 8k, masterpiece, hyper-realistic, cinematic").
25
+ - [ ] No mood-only instructions; every feeling is translated into something visible.
26
+ - [ ] Skin, materials and motion have texture and imperfection specified where it matters.
27
+
28
+ ## Output
29
+
30
+ ```
31
+ S2 ⚠️ two actions (pours AND turns to customer) → split into S2a / S2b
32
+ S4 ⚠️ sign text "OPEN" in frame → remove, add in edit
33
+ S3 ✅
34
+ HIGHEST RISK: S2a (liquid physics). Reroll plan: tighten to ECU, lock camera.
35
+ ```
@@ -0,0 +1,23 @@
1
+ # Sound
2
+
3
+ **Job:** plan what the audience hears. Run this role only if the target model generates
4
+ audio, or the user will add music/SFX in the edit.
5
+
6
+ ## Output
7
+
8
+ ```
9
+ MUSIC: <genre, tempo in BPM, energy curve> (added in edit)
10
+ S1 SFX: ceramic clink, café murmur (low)
11
+ S2 DIALOGUE: C1: "Not again." (quiet, deadpan)
12
+ S3 SFX: liquid splash, sneaker squeak
13
+ ```
14
+
15
+ ## Rules
16
+
17
+ - **Audio-capable models:** put spoken lines in double quotes with the speaker named, keep
18
+ lines under ~8 words per shot, and name 1–2 SFX plus ambience. Too many sound cues
19
+ produce mush.
20
+ - **Silent models:** don't write sound into the prompt at all. It wastes tokens and can
21
+ drift the visuals. Put sound in the edit notes.
22
+ - Cut points should land on beats of the music (tell the editor the BPM).
23
+ - Short-form: design for sound-off first. If a line is essential, it also goes in a caption.
@@ -0,0 +1,38 @@
1
+ # SHOT LIST — <title>
2
+
3
+ **Format:** <aspect> · <total length> · target model: <model>
4
+ **Mode:** text-to-video | image-to-video (reference: <file/description>)
5
+ **Brand / product:** <name, or "none given — generic">
6
+ **Logline:** <one sentence>
7
+
8
+ ## Crew notes
9
+ **Director** — intent, hook, beats
10
+ **Production designer** — continuity bible (C1…, L1…, P1…)
11
+ **DP / Gaffer** — look summary in two lines
12
+ **Editor** — timeline summary
13
+ **Sound** — (if applicable)
14
+ **Script supervisor** — flags resolved
15
+
16
+ ## Shots
17
+ | # | Time | Size · Lens · Move | Action (one) | Gen length | Risk |
18
+ |---|---|---|---|---|---|
19
+ | S1 | 0.0–2.5 | ECU · 100mm · locked | … | 4 s | low |
20
+
21
+ ## Prompts
22
+
23
+ ### S1
24
+ ```
25
+ <prompt>
26
+ ```
27
+ Negative (if supported): `<negative prompt>`
28
+
29
+ ## Edit notes
30
+ - Captions / supers: <text> @ <time>
31
+ - Music / SFX: <cue> @ <time>
32
+
33
+ ## Reroll plan
34
+ | Shot | Likely failure | Change before reroll |
35
+ |---|---|---|
36
+ | S1 | … | … |
37
+
38
+ **Highest-risk shot:** S? — <why>
@@ -0,0 +1,29 @@
1
+ # Unslop: why AI video looks like AI video, and what to write instead
2
+
3
+ | Slop signal | Usual cause in the prompt | Write instead |
4
+ |---|---|---|
5
+ | Plastic, poreless skin | "beautiful", "flawless", "perfect skin" | "visible pores, slight shine on the forehead, faint under-eye shadows" |
6
+ | Everything evenly lit | no light source named | a motivated key ("hard sun through blinds, camera-left") and deep shadows |
7
+ | Floaty slow-motion drift | no speed given, "cinematic" | real-time speed, or a stated speed ("normal speed", "2x slow motion") |
8
+ | Camera wandering aimlessly | no camera instruction | one named move, or "locked-off tripod shot" |
9
+ | Morphing hands / objects | complex hand action, wide framing | tight framing, simple grip, one object, slow action |
10
+ | Faces changing between shots | paraphrased character descriptions | verbatim continuity-bible descriptors, or image-to-video from one reference |
11
+ | Oversaturated, HDR-ish color | "vibrant", "8k", "ultra HD" | a film look ("Kodak Portra 400, soft contrast, fine grain") and a limited palette |
12
+ | Symmetrical stock-footage framing | no composition choice | a lens, an angle and an off-center subject ("subject in left third") |
13
+ | Gibberish text | signage, labels, UI in frame | no readable text in frame; add text in the edit |
14
+ | Nothing actually happens | a mood instead of an action | one visible, physical action with a start and an end |
15
+
16
+ ## Words that add nothing
17
+
18
+ `stunning, masterpiece, best quality, 8k, 4k, ultra-detailed, hyper-realistic, award-winning, trending, epic, cinematic (alone), breathtaking`
19
+
20
+ Delete them. They don't hurt much on their own, but they push out words that would help.
21
+
22
+ ## Words that tend to help
23
+
24
+ - A **lens** (24mm, 50mm, 85mm, macro)
25
+ - A **camera move** (slow push-in, locked-off, handheld)
26
+ - A **light source** (window light, sodium streetlight, overhead fluorescent)
27
+ - A **film stock or look** (35mm film grain, Super 8, VHS camcorder, iPhone front camera)
28
+ - **Imperfection** (scuffed, fingerprints, wrinkled, condensation, frayed)
29
+ - **Real-time physics cues** (splashes, drips, recoils, bounces)
@@ -0,0 +1,169 @@
1
+ ---
2
+ name: mcp-dependency-drift-audit
3
+ description: "Statically audit MCP configs for mutable npm/npx package references before approval or CI, without executing discovered MCP servers."
4
+ category: security
5
+ risk: safe
6
+ source: "https://github.com/tomelias10/mcp-drift-check"
7
+ source_repo: tomelias10/mcp-drift-check
8
+ source_type: community
9
+ date_added: "2026-09-25"
10
+ author: tomelias10
11
+ tags: [mcp, ai-security, supply-chain, devsecops, sarif]
12
+ tools: [claude, cursor, gemini, codex, windsurf]
13
+ license: MIT
14
+ license_source: "https://github.com/tomelias10/mcp-drift-check/blob/v0/LICENSE"
15
+ ---
16
+
17
+ # MCP Dependency Drift Audit
18
+
19
+ ## Overview
20
+
21
+ Audit Model Context Protocol configuration files for npm/npx package references that can resolve to different code after the configuration was reviewed. The workflow is deliberately static: it reads config text, classifies version selectors, and recommends reproducibility fixes without starting discovered MCP servers.
22
+
23
+ Dependency mutability is a review-boundary signal, not proof that a package is malicious, vulnerable, or compromised.
24
+
25
+ ## When to Use This Skill
26
+
27
+ - Before approving `.mcp.json`, Cursor, VS Code, GitHub Copilot, Claude, or Windsurf MCP configuration.
28
+ - When adding an MCP configuration gate to pull requests or CI.
29
+ - During an AI-agent security review where npm/npx-backed MCP servers are configured.
30
+ - When checking whether a previously reviewed MCP config can silently resolve to newer package code.
31
+
32
+ ## How It Works
33
+
34
+ ### Step 1: Locate and read MCP configs without executing them
35
+
36
+ Inspect known project paths such as `.mcp.json`, `.github/mcp.json`, `.cursor/mcp.json`, `.vscode/mcp.json`, and `.windsurf/mcp.json`, plus any MCP config explicitly supplied by the user.
37
+
38
+ Read them as text/JSON only. Never run a discovered `command` or `args` value as part of this audit. Stay inside the requested workspace by default; only include user-level/global MCP configuration if the user explicitly asks for machine-wide scope.
39
+
40
+ ### Step 2: Use MCP Drift Check when already available
41
+
42
+ If `mcp-drift-check` is already installed, use the workspace-scoped mode from the intended repo root:
43
+
44
+ ```bash
45
+ mcp-drift-check scan-workspace --markdown
46
+ ```
47
+
48
+ For CI evidence:
49
+
50
+ ```bash
51
+ mcp-drift-check scan-workspace --sarif mcp-drift.sarif --markdown
52
+ ```
53
+
54
+ If the scanner is not installed, explain that the following command fetches the open-source scanner from GitHub and get user approval before running it:
55
+
56
+ ```bash
57
+ uvx --from git+https://github.com/tomelias10/mcp-drift-check mcp-drift-check scan-workspace --markdown
58
+ ```
59
+
60
+ If the user declines network access or installation, continue with the manual rules below.
61
+
62
+ ### Step 3: Apply the manual static rules
63
+
64
+ For npm/npx-style package selectors:
65
+
66
+ | Selector | Classification | Reason |
67
+ | --- | --- | --- |
68
+ | `package@1.2.3` | SAFE | Exact package version is reproducible. |
69
+ | bare `package` or `@scope/package` | HIGH | A later resolution can select different package code. |
70
+ | `package@latest` | HIGH | The selector is explicitly mutable. |
71
+ | `package@^1.2.0`, `~1.2.0`, `>=1.2.0`, wildcard | MEDIUM | Resolution can change within the allowed range. |
72
+ | local path, script, binary, unknown executable | REVIEW | npm version-drift rules do not establish update behavior. |
73
+
74
+ Treat `-y` / `--yes` as context only. It suppresses interactive confirmation but is not a vulnerability by itself.
75
+
76
+ ### Step 4: Recommend remediation without inventing versions
77
+
78
+ For mutable npm/npx references, recommend pinning to an exact version that the team has actually reviewed and then updating that pin deliberately.
79
+
80
+ Do not guess the version to pin. If registry lookup is needed, explain that it requires network access and ask before querying it.
81
+
82
+ Pinning improves reproducibility. It does not establish package provenance, vulnerability status, authorization safety, prompt-injection resistance, or runtime isolation.
83
+
84
+ ### Step 5: Produce a bounded report
85
+
86
+ Return:
87
+
88
+ | Config | MCP server | Package/reference | Classification | Why | Recommended next step |
89
+ | --- | --- | --- | --- | --- | --- |
90
+
91
+ Then state:
92
+
93
+ - No MCP servers were executed during the audit.
94
+ - Mutable dependency references are review/reproducibility signals, not breach claims.
95
+ - A clean dependency-drift result is not a complete MCP security assessment.
96
+
97
+ ## Examples
98
+
99
+ ### Example 1: Audit before approval
100
+
101
+ **User:** `Audit this repo's MCP config before we approve it. Do not run any MCP servers.`
102
+
103
+ **Expected shape:**
104
+
105
+ ```text
106
+ .mcp.json | browser | @example/browser-mcp@latest | HIGH
107
+ Reason: @latest can resolve to different package code later.
108
+ Next step: pin the exact version your team reviews and update it deliberately.
109
+
110
+ No MCP servers were executed.
111
+ ```
112
+
113
+ ### Example 2: Add a CI gate
114
+
115
+ For GitHub Actions:
116
+
117
+ ```yaml
118
+ - uses: actions/checkout@v4
119
+ - uses: tomelias10/mcp-drift-check@v0
120
+ ```
121
+
122
+ MCP Drift Check can also emit SARIF 2.1.0 for GitHub Code Scanning. The action defaults to workspace-only discovery; machine-wide user-level scanning remains an explicit `scan-all` choice.
123
+
124
+ ## Best Practices
125
+
126
+ - ✅ Read config text only during discovery and classification.
127
+ - ✅ Keep the default scope to the requested workspace/repository.
128
+ - ✅ Separate reproducibility findings from vulnerability or compromise claims.
129
+ - ✅ Pin only a version the team has actually reviewed.
130
+ - ✅ Keep sensitive config values out of reports and public issues.
131
+ - ❌ Do not execute server commands found in a config to "verify" a static finding.
132
+ - ❌ Do not treat a clean result as a general MCP security guarantee.
133
+
134
+ ## Limitations
135
+
136
+ - This workflow only covers dependency mutability/review drift for package-backed MCP configuration.
137
+ - It does not assess prompt injection, tool poisoning, OAuth/authorization, server implementation flaws, malware, provenance, or runtime sandboxing.
138
+ - Local executables and non-npm launch paths require separate review.
139
+ - A static config can be reproducible and still unsafe for other reasons.
140
+
141
+ ## Security & Safety Notes
142
+
143
+ - The default workflow is read-only, local, and workspace-scoped.
144
+ - Never execute discovered MCP server commands during this audit.
145
+ - Never include credentials, tokens, private headers, or secret values in the output.
146
+ - The optional `uvx` path makes a network fetch from the declared GitHub source; obtain user approval before running it.
147
+ - If deeper active testing is requested, stop and establish explicit authorization and scope before any intrusive action.
148
+
149
+ ## Common Pitfalls
150
+
151
+ - **Problem:** Calling an unpinned dependency a vulnerability.
152
+ **Solution:** Describe it as a reproducibility/review-drift signal unless separate evidence establishes security impact.
153
+ - **Problem:** Pinning to today's registry version without knowing what was reviewed.
154
+ **Solution:** Ask for the reviewed version or, with approval, reconstruct relevant package history; do not guess.
155
+ - **Problem:** Treating `-y` as the core finding.
156
+ **Solution:** Report it only as context; the version selector determines the dependency-drift classification.
157
+ - **Problem:** Scanning user-level MCP configs when the user only asked about one repo.
158
+ **Solution:** Use `scan-workspace` by default; use `scan-all` only when machine-wide scope is explicit.
159
+
160
+ ## Related Skills
161
+
162
+ - `@mcp-server-security` - Broader MCP server hardening, authentication, authorization, transport, and runtime controls.
163
+ - `@supply-chain-security` - Broader software supply-chain assessment beyond MCP configuration.
164
+ - `@sast-scanning` - Static application-security analysis for source code rather than MCP launch configuration.
165
+
166
+ ## Additional Resources
167
+
168
+ - [MCP Drift Check stable v0](https://github.com/tomelias10/mcp-drift-check/tree/v0) - MIT zero-execution scanner, GitHub Action, workspace-scoped mode, and SARIF output.
169
+ - [Public MCP dependency drift examples](https://site-creator-vinext-starter.surfaceproof.workers.dev/research/mcp-dependency-drift) - Commit-specific public configuration examples and methodology limitations.