spawnpack 0.1.7 → 0.1.9

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,7 +20,7 @@ It generates BP/RP structure, optional Script API setup, optional rgl integratio
20
20
  - Optional AI setup:
21
21
  - `CLAUDE.md` for Claude
22
22
  - `AGENTS.md` for Other
23
- - `.mcp.json`
23
+ - `.mcp.json` with keyless MCP servers
24
24
 
25
25
  ## Runtime Requirement
26
26
 
@@ -97,6 +97,18 @@ Depending on your choices, Spawnpack can generate:
97
97
  - `CLAUDE.md`
98
98
  - `AGENTS.md`
99
99
  - `.mcp.json`
100
+
101
+ ## AI MCP setup
102
+
103
+ When AI setup is enabled, Spawnpack generates an `.mcp.json` that works out of the box without API keys.
104
+
105
+ Generated MCP servers currently include:
106
+
107
+ - Exa hosted MCP (`https://mcp.exa.ai/mcp`) for free, rate-limited web/documentation search
108
+ - `grep_app` for code search
109
+ - `context7` for library documentation context
110
+
111
+ You can add your own Exa API key later if you need higher Exa limits, but it is not required for the generated scaffold.
100
112
 
101
113
  ## Marketplace structure mode
102
114
 
@@ -139,6 +151,7 @@ bun run build
139
151
  The npm package is configured to publish only:
140
152
 
141
153
  - `dist/spawnpack.js`
154
+ - `bin/spawnpack.js`
142
155
  - `templates/CLAUDE.md`
143
156
  - `templates/AGENTS.md`
144
157
  - `README.md`
package/dist/spawnpack.js CHANGED
@@ -1897,16 +1897,9 @@ function generateReadme(config) {
1897
1897
  const aiDocFilename = getAiDocFilename(config.aiSetup);
1898
1898
  const aiSection = aiDocFilename !== null ? `## AI Tooling
1899
1899
 
1900
- Spawnpack generated \`${aiDocFilename}\` and \`.mcp.json\` for AI-assisted development.
1900
+ Spawnpack generated \`${aiDocFilename}\` and \`.mcp.json\` for AI-assisted development. The configured MCP servers work out of the box — no API keys required.
1901
1901
 
1902
- Add your own API keys before using the MCP tools:
1903
-
1904
- - Exa API keys: https://dashboard.exa.ai/api-keys
1905
- - Exa API key docs: https://exa.ai/docs/reference/team-management/create-api-key
1906
- - Browser Use API keys: https://cloud.browser-use.com/settings?tab=api-keys&new=1
1907
- - Browser Use MCP docs: https://docs.browser-use.com/cloud/guides/mcp-server
1908
-
1909
- Update the placeholder values in \`.mcp.json\` with your own tokens.
1902
+ Exa's hosted MCP runs on a rate-limited free tier. If you need higher limits, you can add your own Exa API key to \`.mcp.json\` (optional): https://dashboard.exa.ai/api-keys
1910
1903
 
1911
1904
  ` : "";
1912
1905
  const scriptPackageSection = config.scripting !== "none" ? `## Script Packages
@@ -2120,21 +2113,7 @@ import { join as join2 } from "node:path";
2120
2113
  function buildMcpServers() {
2121
2114
  return {
2122
2115
  exa: {
2123
- command: "npx",
2124
- args: ["-y", "exa-mcp-server"],
2125
- env: {
2126
- EXA_API_KEY: "YOUR_EXA_API_KEY"
2127
- }
2128
- },
2129
- "browser-use": {
2130
- url: "https://api.browser-use.com/v3/mcp",
2131
- headers: {
2132
- "x-browser-use-api-key": "YOUR_BROWSER_USE_API_KEY"
2133
- }
2134
- },
2135
- "sequential-thinking": {
2136
- command: "npx",
2137
- args: ["-y", "@modelcontextprotocol/server-sequential-thinking"]
2116
+ url: "https://mcp.exa.ai/mcp"
2138
2117
  },
2139
2118
  grep_app: {
2140
2119
  command: "npx",
@@ -2502,9 +2481,7 @@ function showPostGeneration(config) {
2502
2481
  }
2503
2482
  if (config.aiSetup !== "none") {
2504
2483
  usefulCommands.push("");
2505
- usefulCommands.push(`${teal(import_picocolors.default.bold("Note"))} ${import_picocolors.default.dim("Add your own Exa and Browser Use MCP API keys in .mcp.json before using the AI tooling.")}`);
2506
- usefulCommands.push(` ${import_picocolors.default.dim("Exa:")} ${import_picocolors.default.cyan("https://dashboard.exa.ai/api-keys")}`);
2507
- usefulCommands.push(` ${import_picocolors.default.dim("Browser Use:")} ${import_picocolors.default.cyan("https://cloud.browser-use.com/settings?tab=api-keys&new=1")}`);
2484
+ usefulCommands.push(`${teal(import_picocolors.default.bold("Note"))} ${import_picocolors.default.dim(".mcp.json is ready to use the configured MCP servers need no API keys.")}`);
2508
2485
  }
2509
2486
  O2.message([...nextSteps, "", ...usefulCommands].join(`
2510
2487
  `), {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spawnpack",
3
- "version": "0.1.7",
3
+ "version": "0.1.9",
4
4
  "description": "Minecraft Bedrock addon project generator — scaffold your BP+RP in seconds",
5
5
  "author": "veedy-dev",
6
6
  "license": "MIT",
@@ -36,45 +36,6 @@ The governing loop for all work: **gather context → take action → verify wor
36
36
  VIOLATION CHECK: If you wrote library/framework code from memory without searching Exa first, you violated this rule.
37
37
  </rule>
38
38
 
39
- <rule name="browser_use_mcp_for_web" priority="high">
40
- **The Rule:** When you need to interact with live web pages beyond simple doc lookups, use Browser Use MCP. It provides Browser Use Cloud automation via MCP (`https://api.browser-use.com/v3/mcp`) with managed browser sessions, structured extraction, live session URLs, and follow-up tasks.
41
-
42
- **Browser Use MCP tools:**
43
-
44
- | Tool | Purpose |
45
- |---|---|
46
- | `run_session` | Create a browser session and run a natural-language web automation/extraction task |
47
- | `get_session` | Poll session status/output, step count, cost breakdown, and live URL |
48
- | `send_task` | Send a follow-up task to an idle keep-alive session |
49
- | `stop_session` | Stop the current task or destroy the browser session sandbox |
50
- | `get_session_messages` | Inspect browser actions, reasoning, and results from a session |
51
- | `list_sessions` | List recent Browser Use sessions |
52
- | `list_browser_profiles` | List available authenticated browser profiles |
53
-
54
- **When to use Browser Use MCP (NOT Exa):**
55
- - Scraping full page content, not just searching for it
56
- - Extracting structured data (JSON) from complex/messy HTML (e.g. Minecraft wiki tables, addon schemas)
57
- - Crawling or traversing multiple linked pages on a site (e.g. crawling all Script API event pages)
58
- - Interacting with pages: clicking buttons, filling forms, navigating flows
59
- - Accessing protected/anti-bot sites where managed browser infrastructure helps
60
- - Taking screenshots or using live browser session evidence
61
- - Any task that requires a real browser session
62
-
63
- **When to use Exa instead:**
64
- - Quick doc lookups for `@minecraft/server`, `@minecraft/math`, etc.
65
- - Finding the right URL or page for a topic
66
- - Lightweight search queries
67
-
68
- **Workflow — Exa finds it, Browser Use MCP reads/interacts with it:**
69
- 1. `web_search_exa` → find the right URL
70
- 2. `run_session` → extract deep content, automate navigation, or collect structured data
71
- 3. `get_session` / `get_session_messages` → inspect completion, output, live URL, and action trace
72
- 4. `send_task` → continue in the same keep-alive browser session if follow-up interaction is needed
73
- 5. `stop_session` → cleanly stop/destroy the Browser Use session when finished
74
-
75
- VIOLATION CHECK: If you manually scraped or parsed HTML when Browser Use MCP could have done it cleanly, you violated this rule.
76
- </rule>
77
-
78
39
  <rule name="no_comments" priority="high">
79
40
  DO NOT WRITE ANY COMMENTS OR JSDOCS unless explicitly requested.
80
41
  </rule>
@@ -199,6 +160,37 @@ For non-trivial changes: pause and ask "is there a more elegant way?" If a fix f
199
160
  Write code that reads like a human wrote it. No robotic comment blocks, no excessive section headers, no corporate descriptions of obvious things. If three experienced devs would all write it the same way, that's the way.
200
161
  </behavior>
201
162
 
163
+ <code_style name="boring_durable_addon_code" priority="high">
164
+ Prefer code that is easy for an add-on developer to read top-to-bottom. Use boring, linear code as the default; add durability machinery only at persistence, async timing, entity lifecycle, duplication, or data-loss boundaries.
165
+
166
+ Style rules:
167
+ - Write linear, imperative code by default: do A, then B, then C.
168
+ - Prefer guard clauses and early returns over nested branching.
169
+ - Keep behavior close to where it happens.
170
+ - Avoid framework-like abstractions unless they clearly reduce repeated complexity.
171
+ - Prefer explicit state names over clever generic names.
172
+ - Make the happy path obvious.
173
+ - Split code by real gameplay/lifecycle responsibility, not by abstract pattern.
174
+ - Do not hide important game-state transitions behind vague helpers.
175
+ - If durability/data-loss protection requires complexity, isolate it behind a small, boring API.
176
+ - Keep normal gameplay code simple even when the persistence/lifecycle layer underneath is more defensive.
177
+ - Do not copy another contributor's style blindly; use their readability as a reference while preserving correctness.
178
+ - Prefer one obvious source of truth for each piece of state.
179
+ - Before adding a new helper/class/system, ask: "Will this make the next maintainer understand the code faster?"
180
+ </code_style>
181
+
182
+ <implementation_preference name="minimal_safe_patch" priority="high">
183
+ When fixing bugs:
184
+ 1. First find the smallest clear fix near the bug.
185
+ 2. Add stronger safety only where data loss, duplication, or invalid world state can happen.
186
+ 3. Avoid broad lifecycle rewrites unless the current lifecycle is the root cause.
187
+ 4. If a durable solution needs more machinery, keep the public flow simple and document the responsibility through naming, not comments.
188
+ </implementation_preference>
189
+
190
+ <behavior name="use_simplify_skill_for_maintainability" priority="high">
191
+ Use the `simplify` skill for maintainability, not only cleanup. When the user asks to simplify, clean up, refactor for readability, reduce complexity, or make code easier to maintain, load `simplify` before planning or editing. For non-trivial implementation work, use `simplify` as a post-implementation review pass before final verification: check whether the new code can be made more obvious, boring, local, and behavior-preserving. In orchestrated workflows, explicitly include this maintainability review after implementation and before reporting completion. For broad codebase cleanup, audit first, propose small phases, and wait for approval before editing.
192
+ </behavior>
193
+
202
194
  <behavior name="dead_code_hygiene" priority="medium">
203
195
  After refactoring or implementing changes:
204
196
  - Identify code that is now unreachable
@@ -606,12 +598,11 @@ POTENTIAL CONCERNS:
606
598
  13. Editing files from stale context without re-reading first
607
599
  14. Duplicating state instead of fixing the real problem
608
600
  15. Writing library/framework code from memory without searching Exa for current docs first
609
- 16. Manually scraping or parsing HTML when Browser Use MCP could extract it cleanly
610
- 17. Using try-catch in Minecraft Script API code
611
- 18. Creating custom math functions when @minecraft/math has them available
612
- 19. Using raw strings instead of @minecraft/vanilla-data typed identifiers
613
- 20. Writing BP/RP JSON files without schema validation
614
- 21. Adding attribution or AI-style report trailers to Git commit messages
601
+ 16. Using try-catch in Minecraft Script API code
602
+ 17. Creating custom math functions when @minecraft/math has them available
603
+ 18. Using raw strings instead of @minecraft/vanilla-data typed identifiers
604
+ 19. Writing BP/RP JSON files without schema validation
605
+ 20. Adding attribution or AI-style report trailers to Git commit messages
615
606
  </failure_modes_to_avoid>
616
607
 
617
608
  <meta>
@@ -621,18 +612,16 @@ You have unlimited stamina. The human does not. Use your persistence wisely —
621
612
 
622
613
  **Priority Hierarchy:**
623
614
  1. **EXA FOR DOCS** — Always search library/framework docs via Exa before implementing
624
- 2. **BROWSER USE MCP FOR WEB** — Use Browser Use MCP for scraping, crawling, structured extraction, and browser automation
625
- 3. **VERIFY BEFORE DONE** — Type-check, lint, test before claiming success
626
- 4. **PLAN BEFORE BUILD** — Spec and approval before implementation
627
- 5. **GUARD CLAUSES** — Never use try-catch in Minecraft code
628
- 6. **VANILLA-DATA** — Use typed identifiers from @minecraft/vanilla-data
629
- 7. **MINECRAFT-MATH** — Use @minecraft/math library for math operations
630
- 8. **JSON SCHEMAS** Validate BP/RP JSONs with Rockide/schemas
631
- 9. **NATURAL COMMITS** - Write human commit messages; no attribution or AI-style report trailers
615
+ 2. **VERIFY BEFORE DONE** — Type-check, lint, test before claiming success
616
+ 3. **PLAN BEFORE BUILD** — Spec and approval before implementation
617
+ 4. **GUARD CLAUSES** — Never use try-catch in Minecraft code
618
+ 5. **VANILLA-DATA** — Use typed identifiers from @minecraft/vanilla-data
619
+ 6. **MINECRAFT-MATH** — Use @minecraft/math library for math operations
620
+ 7. **JSON SCHEMAS** — Validate BP/RP JSONs with Rockide/schemas
621
+ 8. **NATURAL COMMITS** - Write human commit messages; no attribution or AI-style report trailers
632
622
 
633
623
  **Violation Checks:**
634
624
  - ❌ Wrote library/framework code without searching Exa first? → Violated Exa-for-docs rule
635
- - ❌ Manually scraped/parsed HTML when Browser Use MCP could do it? → Violated Browser-Use-MCP-for-web rule
636
625
  - ❌ Said "Done!" without running type-check/lint/tests? → Violated forced verification rule
637
626
  - ❌ Edited a file from memory after 10+ messages without re-reading? → Violated context decay rule
638
627
  - ❌ Started building without plan approval on a non-trivial task? → Violated plan-build separation
@@ -36,45 +36,6 @@ The governing loop for all work: **gather context → take action → verify wor
36
36
  VIOLATION CHECK: If you wrote library/framework code from memory without searching Exa first, you violated this rule.
37
37
  </rule>
38
38
 
39
- <rule name="browser_use_mcp_for_web" priority="high">
40
- **The Rule:** When you need to interact with live web pages beyond simple doc lookups, use Browser Use MCP. It provides Browser Use Cloud automation via MCP (`https://api.browser-use.com/v3/mcp`) with managed browser sessions, structured extraction, live session URLs, and follow-up tasks.
41
-
42
- **Browser Use MCP tools:**
43
-
44
- | Tool | Purpose |
45
- |---|---|
46
- | `run_session` | Create a browser session and run a natural-language web automation/extraction task |
47
- | `get_session` | Poll session status/output, step count, cost breakdown, and live URL |
48
- | `send_task` | Send a follow-up task to an idle keep-alive session |
49
- | `stop_session` | Stop the current task or destroy the browser session sandbox |
50
- | `get_session_messages` | Inspect browser actions, reasoning, and results from a session |
51
- | `list_sessions` | List recent Browser Use sessions |
52
- | `list_browser_profiles` | List available authenticated browser profiles |
53
-
54
- **When to use Browser Use MCP (NOT Exa):**
55
- - Scraping full page content, not just searching for it
56
- - Extracting structured data (JSON) from complex/messy HTML (e.g. Minecraft wiki tables, addon schemas)
57
- - Crawling or traversing multiple linked pages on a site (e.g. crawling all Script API event pages)
58
- - Interacting with pages: clicking buttons, filling forms, navigating flows
59
- - Accessing protected/anti-bot sites where managed browser infrastructure helps
60
- - Taking screenshots or using live browser session evidence
61
- - Any task that requires a real browser session
62
-
63
- **When to use Exa instead:**
64
- - Quick doc lookups for `@minecraft/server`, `@minecraft/math`, etc.
65
- - Finding the right URL or page for a topic
66
- - Lightweight search queries
67
-
68
- **Workflow — Exa finds it, Browser Use MCP reads/interacts with it:**
69
- 1. `web_search_exa` → find the right URL
70
- 2. `run_session` → extract deep content, automate navigation, or collect structured data
71
- 3. `get_session` / `get_session_messages` → inspect completion, output, live URL, and action trace
72
- 4. `send_task` → continue in the same keep-alive browser session if follow-up interaction is needed
73
- 5. `stop_session` → cleanly stop/destroy the Browser Use session when finished
74
-
75
- VIOLATION CHECK: If you manually scraped or parsed HTML when Browser Use MCP could have done it cleanly, you violated this rule.
76
- </rule>
77
-
78
39
  <rule name="no_comments" priority="high">
79
40
  DO NOT WRITE ANY COMMENTS OR JSDOCS unless explicitly requested.
80
41
  </rule>
@@ -199,6 +160,37 @@ For non-trivial changes: pause and ask "is there a more elegant way?" If a fix f
199
160
  Write code that reads like a human wrote it. No robotic comment blocks, no excessive section headers, no corporate descriptions of obvious things. If three experienced devs would all write it the same way, that's the way.
200
161
  </behavior>
201
162
 
163
+ <code_style name="boring_durable_addon_code" priority="high">
164
+ Prefer code that is easy for an add-on developer to read top-to-bottom. Use boring, linear code as the default; add durability machinery only at persistence, async timing, entity lifecycle, duplication, or data-loss boundaries.
165
+
166
+ Style rules:
167
+ - Write linear, imperative code by default: do A, then B, then C.
168
+ - Prefer guard clauses and early returns over nested branching.
169
+ - Keep behavior close to where it happens.
170
+ - Avoid framework-like abstractions unless they clearly reduce repeated complexity.
171
+ - Prefer explicit state names over clever generic names.
172
+ - Make the happy path obvious.
173
+ - Split code by real gameplay/lifecycle responsibility, not by abstract pattern.
174
+ - Do not hide important game-state transitions behind vague helpers.
175
+ - If durability/data-loss protection requires complexity, isolate it behind a small, boring API.
176
+ - Keep normal gameplay code simple even when the persistence/lifecycle layer underneath is more defensive.
177
+ - Do not copy another contributor's style blindly; use their readability as a reference while preserving correctness.
178
+ - Prefer one obvious source of truth for each piece of state.
179
+ - Before adding a new helper/class/system, ask: "Will this make the next maintainer understand the code faster?"
180
+ </code_style>
181
+
182
+ <implementation_preference name="minimal_safe_patch" priority="high">
183
+ When fixing bugs:
184
+ 1. First find the smallest clear fix near the bug.
185
+ 2. Add stronger safety only where data loss, duplication, or invalid world state can happen.
186
+ 3. Avoid broad lifecycle rewrites unless the current lifecycle is the root cause.
187
+ 4. If a durable solution needs more machinery, keep the public flow simple and document the responsibility through naming, not comments.
188
+ </implementation_preference>
189
+
190
+ <behavior name="use_simplify_skill_for_maintainability" priority="high">
191
+ Use the `simplify` skill for maintainability, not only cleanup. When the user asks to simplify, clean up, refactor for readability, reduce complexity, or make code easier to maintain, load `simplify` before planning or editing. For non-trivial implementation work, use `simplify` as a post-implementation review pass before final verification: check whether the new code can be made more obvious, boring, local, and behavior-preserving. In orchestrated workflows, explicitly include this maintainability review after implementation and before reporting completion. For broad codebase cleanup, audit first, propose small phases, and wait for approval before editing.
192
+ </behavior>
193
+
202
194
  <behavior name="dead_code_hygiene" priority="medium">
203
195
  After refactoring or implementing changes:
204
196
  - Identify code that is now unreachable
@@ -606,12 +598,11 @@ POTENTIAL CONCERNS:
606
598
  13. Editing files from stale context without re-reading first
607
599
  14. Duplicating state instead of fixing the real problem
608
600
  15. Writing library/framework code from memory without searching Exa for current docs first
609
- 16. Manually scraping or parsing HTML when Browser Use MCP could extract it cleanly
610
- 17. Using try-catch in Minecraft Script API code
611
- 18. Creating custom math functions when @minecraft/math has them available
612
- 19. Using raw strings instead of @minecraft/vanilla-data typed identifiers
613
- 20. Writing BP/RP JSON files without schema validation
614
- 21. Adding attribution or AI-style report trailers to Git commit messages
601
+ 16. Using try-catch in Minecraft Script API code
602
+ 17. Creating custom math functions when @minecraft/math has them available
603
+ 18. Using raw strings instead of @minecraft/vanilla-data typed identifiers
604
+ 19. Writing BP/RP JSON files without schema validation
605
+ 20. Adding attribution or AI-style report trailers to Git commit messages
615
606
  </failure_modes_to_avoid>
616
607
 
617
608
  <meta>
@@ -621,18 +612,16 @@ You have unlimited stamina. The human does not. Use your persistence wisely —
621
612
 
622
613
  **Priority Hierarchy:**
623
614
  1. **EXA FOR DOCS** — Always search library/framework docs via Exa before implementing
624
- 2. **BROWSER USE MCP FOR WEB** — Use Browser Use MCP for scraping, crawling, structured extraction, and browser automation
625
- 3. **VERIFY BEFORE DONE** — Type-check, lint, test before claiming success
626
- 4. **PLAN BEFORE BUILD** — Spec and approval before implementation
627
- 5. **GUARD CLAUSES** — Never use try-catch in Minecraft code
628
- 6. **VANILLA-DATA** — Use typed identifiers from @minecraft/vanilla-data
629
- 7. **MINECRAFT-MATH** — Use @minecraft/math library for math operations
630
- 8. **JSON SCHEMAS** Validate BP/RP JSONs with Rockide/schemas
631
- 9. **NATURAL COMMITS** - Write human commit messages; no attribution or AI-style report trailers
615
+ 2. **VERIFY BEFORE DONE** — Type-check, lint, test before claiming success
616
+ 3. **PLAN BEFORE BUILD** — Spec and approval before implementation
617
+ 4. **GUARD CLAUSES** — Never use try-catch in Minecraft code
618
+ 5. **VANILLA-DATA** — Use typed identifiers from @minecraft/vanilla-data
619
+ 6. **MINECRAFT-MATH** — Use @minecraft/math library for math operations
620
+ 7. **JSON SCHEMAS** — Validate BP/RP JSONs with Rockide/schemas
621
+ 8. **NATURAL COMMITS** - Write human commit messages; no attribution or AI-style report trailers
632
622
 
633
623
  **Violation Checks:**
634
624
  - ❌ Wrote library/framework code without searching Exa first? → Violated Exa-for-docs rule
635
- - ❌ Manually scraped/parsed HTML when Browser Use MCP could do it? → Violated Browser-Use-MCP-for-web rule
636
625
  - ❌ Said "Done!" without running type-check/lint/tests? → Violated forced verification rule
637
626
  - ❌ Edited a file from memory after 10+ messages without re-reading? → Violated context decay rule
638
627
  - ❌ Started building without plan approval on a non-trivial task? → Violated plan-build separation