mcpill 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/.claude/commands/add-card.md +9 -0
  2. package/.claude/commands/append-card.md +10 -0
  3. package/.claude/commands/play-card.md +14 -0
  4. package/.claude/commands/turn.md +28 -0
  5. package/.claude/settings.json +10 -0
  6. package/.flowdeck/.flowdeckignore +5 -0
  7. package/.flowdeck/AGENT.md +46 -0
  8. package/.flowdeck/TODO.md.template +14 -0
  9. package/.flowdeck/_discard/start/DISCARD.md +8 -0
  10. package/.flowdeck/_discard/start/TODO.md +35 -0
  11. package/.flowdeck/_discard/start/turn.log +28 -0
  12. package/.flowdeck/_energy/ADR.md.template +100 -0
  13. package/.flowdeck/_energy/CLAUDE.md.template +95 -0
  14. package/.flowdeck/_energy/GENERALINSIGHTS.md.template +57 -0
  15. package/.flowdeck/_energy/MISSION.md.template +89 -0
  16. package/.flowdeck/_energy/OPEN-QUESTIONS.md.template +109 -0
  17. package/.flowdeck/_energy/PROJECTINSIGHTS.md.template +64 -0
  18. package/.flowdeck/_energy/SPEC.md.template +101 -0
  19. package/.flowdeck/_frozen/FROZEN.md +4 -0
  20. package/.flowdeck/_meld/MELD.md +4 -0
  21. package/.flowdeck/_stock/STOCK.md +4 -0
  22. package/.flowdeck/reframe/TODO.md +71 -0
  23. package/CHANGELOG.md +8 -0
  24. package/FLOWDECK.md +17 -0
  25. package/README.md +85 -0
  26. package/dist/cli.js +954 -0
  27. package/package.json +34 -0
  28. package/src/__tests__/init.test.ts +74 -0
  29. package/src/__tests__/loaders/config.test.ts +54 -0
  30. package/src/__tests__/loaders/prompts.test.ts +116 -0
  31. package/src/__tests__/loaders/resources.test.ts +86 -0
  32. package/src/__tests__/loaders/tools.test.ts +128 -0
  33. package/src/__tests__/pack.test.ts +98 -0
  34. package/src/__tests__/validate.test.ts +152 -0
  35. package/src/cli.ts +76 -0
  36. package/src/commands/compile.ts +163 -0
  37. package/src/commands/init.ts +145 -0
  38. package/src/commands/pack.ts +52 -0
  39. package/src/commands/publish.ts +17 -0
  40. package/src/commands/run.ts +101 -0
  41. package/src/commands/validate.ts +70 -0
  42. package/src/compiler/merge-tools.ts +99 -0
  43. package/src/compiler/parse.ts +236 -0
  44. package/src/compiler/serialize.ts +100 -0
  45. package/src/compiler/types.ts +27 -0
  46. package/src/loaders/config.ts +25 -0
  47. package/src/loaders/prompts.ts +60 -0
  48. package/src/loaders/resources.ts +54 -0
  49. package/src/loaders/tools.ts +63 -0
  50. package/src/templates/prompts/greeting.md +11 -0
  51. package/src/templates/server.md +9 -0
  52. package/src/templates/tools/echo.md +15 -0
  53. package/tsconfig.json +10 -0
  54. package/tsup.config.ts +13 -0
  55. package/vitest.config.ts +12 -0
@@ -0,0 +1,109 @@
1
+ ---
2
+ title: "Open Questions"
3
+ type: planning
4
+ tags: [planning, scoping, ai-workflow]
5
+ ---
6
+
7
+ # Open Questions: {{PROJECT_NAME}}
8
+
9
+ **Date:** {{DATE}}
10
+ **Requested by:** {{AUTHOR}}
11
+ **Status:** Awaiting dev input
12
+
13
+ ---
14
+
15
+ <!--
16
+ INSTRUCTIONS FOR THE MODEL:
17
+ Your output must be this document with every section filled in. Do not write prose, summaries, or commentary outside the template structure.
18
+ The prompt below describes a project or feature in progress. Generate only the question categories and questions that are genuinely unknown and blocking or likely to affect the implementation.
19
+ - Do not include categories that are fully resolved by the prompt.
20
+ - Each question must have a clear "Why it matters" line so dev understands the impact of their answer.
21
+ - Provide answer scaffolding (checkbox options, blank field, or short list) appropriate to the question type.
22
+ - Do not invent questions for completeness — only ask what is actually unclear.
23
+ - Remove HTML comments from the final output.
24
+ - Do not add, remove, or reorder sections. You may omit entire categories if not relevant.
25
+ - End with the "How to return this doc" section unchanged.
26
+ -->
27
+
28
+ ## Context
29
+
30
+ > {{PROMPT}}
31
+
32
+ ---
33
+
34
+ <!-- For each relevant category below, list only the questions that are genuinely unresolved.
35
+ Omit the entire category block if nothing is unknown in that area. -->
36
+
37
+ ## Scope & Goals
38
+
39
+ <!-- Q: What is in scope? What is explicitly out? What does "done" look like for v1? -->
40
+
41
+ **Q1:**
42
+ _Why it matters:_
43
+ - [ ] Option A
44
+ - [ ] Option B
45
+ - [ ] Other: ___
46
+
47
+ ---
48
+
49
+ ## Tech Stack & Environment
50
+
51
+ <!-- Q: Language, framework, runtime, deployment target, existing codebase constraints -->
52
+
53
+ **Q1:**
54
+ _Why it matters:_
55
+ Answer: ___
56
+
57
+ ---
58
+
59
+ ## Data & State
60
+
61
+ <!-- Q: Data sources, storage, schemas, persistence requirements, data ownership -->
62
+
63
+ **Q1:**
64
+ _Why it matters:_
65
+ Answer: ___
66
+
67
+ ---
68
+
69
+ ## Integrations & Dependencies
70
+
71
+ <!-- Q: External services, APIs, auth providers, third-party tools -->
72
+
73
+ **Q1:**
74
+ _Why it matters:_
75
+ Answer: ___
76
+
77
+ ---
78
+
79
+ ## Users & Behavior
80
+
81
+ <!-- Q: Who uses this? What do they do? Edge cases, error states, permissions -->
82
+
83
+ **Q1:**
84
+ _Why it matters:_
85
+ Answer: ___
86
+
87
+ ---
88
+
89
+ ## Constraints & Non-Negotiables
90
+
91
+ <!-- Q: Performance, security, compliance, deadlines, budget, team conventions -->
92
+
93
+ **Q1:**
94
+ _Why it matters:_
95
+ Answer: ___
96
+
97
+ ---
98
+
99
+ ## How to Return This Doc
100
+
101
+ Fill in the answers above, then pass this document back as your next prompt.
102
+ You do not need to add context — the filled answers are enough to continue.
103
+
104
+ ---
105
+
106
+ *Provided by [mdblu](https://github.com/ruco-ai/mdblu)*
107
+
108
+ ---
109
+ *Made with [mdblu](https://github.com/ruco-ai/mdblu) · source: `templates/OPEN-QUESTIONS.md.template`*
@@ -0,0 +1,64 @@
1
+ ---
2
+ title: "Project Insights"
3
+ type: metadata
4
+ tags: [metadata, insights, ai-workflow]
5
+ repo: {{PROJECT_NAME}}
6
+ repo_url: {{REPO_URL}}
7
+ last_updated: {{DATE}}
8
+ privacy: local-only
9
+ ---
10
+
11
+ # Project Insights: {{PROJECT_NAME}}
12
+
13
+ > Accumulated knowledge about this specific codebase. Written by Claude during sessions, read by Claude at session start. Never shared outside this machine — not even in xtage v1's collective pool.
14
+
15
+ ---
16
+
17
+ ## Codebase Quirks
18
+
19
+ <!-- Non-obvious behavior, surprising implementation choices, things that bit you once -->
20
+
21
+ -
22
+
23
+ ## Deploy & Operations Notes
24
+
25
+ <!-- How to run, debug, and deploy. Practical knowledge that isn't in the README -->
26
+
27
+ -
28
+
29
+ ## Key Architectural Decisions
30
+
31
+ <!-- Decisions already made that Claude should not second-guess or relitigate -->
32
+
33
+ | Decision | Rationale |
34
+ |---|---|
35
+ | | |
36
+
37
+ ## Known Issues & Technical Debt
38
+
39
+ <!-- Things that are broken, fragile, or intentionally deferred. Severity: low / medium / high -->
40
+
41
+ | Issue | Severity | Notes |
42
+ |---|---|---|
43
+ | | | |
44
+
45
+ ## Refactoring Notes
46
+
47
+ <!-- Areas that need work and the right approach to take when the time comes -->
48
+
49
+ -
50
+
51
+ ## Session Log
52
+
53
+ <!-- Auto-appended by Claude at session end via session-end MCP prompt. Most recent first. -->
54
+
55
+ | Date | Key learnings from this session |
56
+ |---|---|
57
+ | | |
58
+
59
+ ---
60
+
61
+ *Generated by xtage {{TOOL_VERSION}} on {{DATE}} — updated by Claude at session end*
62
+
63
+ ---
64
+ *Made with [mdblu](https://github.com/ruco-ai/mdblu) · source: `templates/PROJECTINSIGHTS.md.template`*
@@ -0,0 +1,101 @@
1
+ ---
2
+ title: "Feature Specification"
3
+ type: planning
4
+ tags: [planning, specification, scoping]
5
+ ---
6
+
7
+ # Specification: {{PROJECT_NAME}}
8
+
9
+ **Date:** {{DATE}}
10
+ **Author:** {{AUTHOR}}
11
+ **Status:** Draft
12
+
13
+ ---
14
+
15
+ <!--
16
+ INSTRUCTIONS FOR THE MODEL:
17
+ Your output must be this document with every section filled in. Do not write prose, summaries, or commentary outside the template structure.
18
+ The prompt below is a description of a feature, system, or change to be specified. Use it to populate each section.
19
+ - Background & Motivation: explain the why, not restate the prompt.
20
+ - Goals and Non-Goals: explicit and derived from the prompt.
21
+ - Detailed Design: cover data model, interface, and behavior with real content.
22
+ - Fill all tables; add rows as needed.
23
+ - For genuinely unknown information, write "TBD — [what needs to be decided]".
24
+ - Remove HTML comments from the final output.
25
+ - Do not leave generic placeholder text or empty cells.
26
+ - Do not add, remove, or reorder sections.
27
+ -->
28
+
29
+ ## Overview
30
+
31
+ > {{PROMPT}}
32
+
33
+ ---
34
+
35
+ ## Background & Motivation
36
+
37
+ <!-- Why is this needed? What problem does it solve? What happens without it? -->
38
+
39
+ ## Goals
40
+
41
+ -
42
+ -
43
+
44
+ ## Non-Goals
45
+
46
+ -
47
+ -
48
+
49
+ ## Detailed Design
50
+
51
+ ### Data Model
52
+
53
+ ```
54
+ <!-- Describe entities and fields relevant to this spec -->
55
+ ```
56
+
57
+ ### API / Interface
58
+
59
+ ```
60
+ <!-- Function signatures, CLI flags, REST endpoints, or event schemas -->
61
+ ```
62
+
63
+ ### Behavior
64
+
65
+ <!-- Step-by-step description of what the system does, from input to output -->
66
+
67
+ ## Error Handling
68
+
69
+ <!-- How does the system behave when things go wrong? -->
70
+
71
+ | Error Case | Behavior | User-Facing Message |
72
+ |------------|----------|---------------------|
73
+ | | | |
74
+
75
+ ## Security Considerations
76
+
77
+ <!-- Authentication, authorization, input validation, data privacy -->
78
+
79
+ ## Testing Plan
80
+
81
+ - [ ] TODO:
82
+ - [ ] TODO:
83
+
84
+ ## Open Questions
85
+
86
+ <!-- Unresolved decisions that need answers before or during implementation -->
87
+
88
+ - [ ] TODO:
89
+
90
+ ## Alternatives Considered
91
+
92
+ | Alternative | Pros | Cons | Decision |
93
+ |-------------|------|------|----------|
94
+ | | | | |
95
+
96
+ ---
97
+
98
+ *Provided by [mdblu](https://github.com/ruco-ai/mdblu)*
99
+
100
+ ---
101
+ *Made with [mdblu](https://github.com/ruco-ai/mdblu) · source: `templates/SPEC.md.template`*
@@ -0,0 +1,4 @@
1
+ # Frozen Cards
2
+
3
+ | Card | Frozen | Blocking Condition | User Note |
4
+ |------|--------|--------------------|-----------|
@@ -0,0 +1,4 @@
1
+ # Meld
2
+
3
+ | Card | Melded | Summary |
4
+ |------|--------|--------|
@@ -0,0 +1,4 @@
1
+ # Stock
2
+
3
+ | Card | Added | Description |
4
+ |------|-------|-------------|
@@ -0,0 +1,71 @@
1
+ # mcpill
2
+
3
+ `@ruco-ai/mcpill@1.0.2` is published; `mcpill` unscoped is **free** and needs claiming. CLI for building, validating, and publishing MCP servers using the pill format. Same migration pattern as mcpster and xtage: publish unscoped, deprecate scoped, do not unpublish. Existing package is also missing `repository` and `homepage` metadata — fix on the way through. Move canonical home to `mcpill.ruco.dev`.
4
+
5
+ ## BOT
6
+
7
+ - [x] Grep repo for all `@ruco-ai/mcpill` and `@ruco-ai/` references (code, docs, examples, CLI help text, generated pill manifests, error messages)
8
+ > Found and updated in package.json, src/commands/{run,pack,init,compile}.ts, src/loaders/prompts.ts, src/__tests__/pack.test.ts, README.md
9
+ - [x] Update `package.json`:
10
+ - `name`: change from `@ruco-ai/mcpill` to `mcpill`
11
+ - `homepage`: `https://mcpill.ruco.dev` (currently missing)
12
+ - `repository`: set to GitHub URL (currently missing — confirm canonical repo path with HUMAN)
13
+ - `bugs.url`: matching GitHub issues URL (currently missing)
14
+ - `version`: bump to next minor for the rename milestone (e.g., 1.0.2 → 1.1.0)
15
+ > name → mcpill, version → 1.1.0, homepage/repository/bugs added; deps updated to mcpill-runtime and mcpster (unscoped)
16
+ - [x] Update README:
17
+ - Install command to `npm install mcpill` (drop scope)
18
+ - Add "Renamed from `@ruco-ai/mcpill`" note near the top with one-line migration guidance
19
+ - Refresh any usage examples that show the old scope
20
+ - Confirm the description matches the package.json description ("CLI for building, validating, and publishing MCP servers using the pill format")
21
+ > Added rename note + migration command; updated pack section to mcpill-runtime (unscoped)
22
+ - [x] Update CLI help strings, error messages, version banner, and example output to use unscoped name
23
+ > Version banner reads dynamically from package.json (no change needed); no other hardcoded scoped strings in CLI layer
24
+ - [x] Audit any generated artifacts (pill manifests, scaffolded files) for hardcoded references to the old scope
25
+ > Updated init.ts (scaffolded tools.js template) and compile.ts (generated tools.js); pack.ts (bin/server.js template + injected dep key)
26
+ - [x] If mcpill depends on or interacts with `mcpster`, ensure the dependency is the unscoped `mcpster` (not `@ruco-ai/mcpster`) in package.json
27
+ > Changed to mcpster in package.json and src/commands/run.ts
28
+ - [x] Add CHANGELOG entry: `1.1.0 — Renamed to mcpill; @ruco-ai/mcpill deprecated; canonical home now mcpill.ruco.dev; repository and homepage metadata added`
29
+ > Created CHANGELOG.md (file didn't exist); entry also notes mcpill-runtime rename
30
+ - [x] Draft GitHub repo description for HUMAN to paste
31
+ > CLI for building, validating, and publishing MCP servers using the pill format.
32
+
33
+ ## HUMAN
34
+
35
+ - [x] **Prereq:** `ruco.dev` registered, `*.ruco.dev` wildcard DNS configured
36
+ - [x] **Prereq:** mcpster card complete if mcpill depends on it (so the dependency resolves to the unscoped name)
37
+ - [ ] Provision `mcpill.ruco.dev` (landing page or 301 to GitHub README for now)
38
+ - [x] Confirm canonical GitHub repo URL for BOT to set in package.json
39
+ >github.com/ruco-dev/mcpill
40
+ - [x] Is `@ruco-ai/mcpill-runtime` also being renamed (e.g. to `mcpill-runtime`)?
41
+ > _answer:_yes
42
+ - [x] Review BOT changes
43
+ - [ ] `npm publish` (first publish under the unscoped name — claims it permanently)
44
+ - [ ] `npm deprecate "@ruco-ai/mcpill" "*" "Renamed to mcpill — please install 'mcpill' instead. See https://mcpill.ruco.dev"`
45
+ - [ ] Commit + push
46
+ - [ ] Update GitHub repo description and topics
47
+ - [ ] Verify: `npm view mcpill` shows the new package owned by you; `npm install @ruco-ai/mcpill` shows the deprecation message; `mcpill --version` reports 1.1.0
48
+
49
+ #### COMMENTS
50
+
51
+ **Grep task** — `@ruco-ai/mcpster` appears in `package.json` (dependencies) and `src/commands/run.ts:4` (`import { createServer } from "@ruco-ai/mcpster"`). The mcpster card is confirmed complete, so both become `mcpster`. Straightforward find-and-replace.
52
+
53
+ **`@ruco-ai/mcpill-runtime` is a separate scope** — The card targets `@ruco-ai/mcpill` → `mcpill`, but `@ruco-ai/mcpill-runtime` is a *different package* used heavily throughout:
54
+ - `src/commands/run.ts:3` — runtime import in this CLI
55
+ - `src/commands/pack.ts:7,44-45` — written into the user's generated `bin/server.js` and injected into the user's `package.json` as a dependency
56
+ - `src/commands/init.ts:4` — written into scaffolded `.mcpill/tools.js`
57
+ - `src/commands/compile.ts:18` — written into generated handler stubs
58
+ - `package.json` — both `dependencies` and `devDependencies`
59
+ - `src/__tests__/pack.test.ts:72` — test assertion
60
+
61
+ **This is the blocking question above.** If `mcpill-runtime` is NOT being renamed in this card, the BOT's "audit generated artifacts" task finds these references but leaves them untouched (correct behavior, documenting a runtime dep). If it IS being renamed, the scope of changes doubles and the test at `pack.test.ts:72` needs updating too.
62
+
63
+ **`devDependencies` oddity** — `"@ruco-ai/mcpill-runtime": "file:../mcpill/packages/mcpill"` is a local monorepo override for development. The path `../mcpill/packages/mcpill` doesn't appear in this repo's file tree (no `packages/` folder visible). BOT should leave this untouched unless HUMAN clarifies it's broken.
64
+
65
+ **README is already mostly clean** — `npm install -g mcpill` is already unscoped. The rename note and migration guidance are the only missing pieces. The `### mcpill pack` section documents `@ruco-ai/mcpill-runtime` in the code example — update only if the runtime is also being renamed.
66
+
67
+ **CLI version banner** — `src/cli.ts:19` reads version dynamically from `package.json`; no hardcoded string to update there.
68
+
69
+ **CHANGELOG.md doesn't exist** — BOT will need to create the file, not just append to it.
70
+
71
+ **GitHub repo description draft** — concrete deliverable BOT can do with no dependencies; a one-liner like: `CLI for building, validating, and publishing MCP servers using the pill format.`
package/CHANGELOG.md ADDED
@@ -0,0 +1,8 @@
1
+ # Changelog
2
+
3
+ ## 1.1.0
4
+
5
+ - Renamed to `mcpill`; `@ruco-ai/mcpill` deprecated — install `mcpill` instead
6
+ - `mcpill-runtime` renamed from `@ruco-ai/mcpill-runtime`
7
+ - Canonical home: https://mcpill.ruco.dev
8
+ - Added `repository`, `homepage`, and `bugs` metadata to package.json
package/FLOWDECK.md ADDED
@@ -0,0 +1,17 @@
1
+ # Project
2
+
3
+ ## Vision
4
+
5
+ <!-- One paragraph describing what this project does and why it exists. -->
6
+
7
+ ## Current state
8
+
9
+ <!-- Bullet list of shipped capabilities. Update this after each meld. -->
10
+
11
+ - (no capabilities shipped yet)
12
+
13
+ ## Known gaps
14
+
15
+ <!-- Open known issues or missing pieces. Update this after each meld. -->
16
+
17
+ - (none recorded yet)
package/README.md ADDED
@@ -0,0 +1,85 @@
1
+ # mcpill
2
+
3
+ CLI for building, validating, and publishing MCP servers using the pill format.
4
+
5
+ > **Renamed from `@ruco-ai/mcpill`** — if you have the scoped package, run `npm uninstall -g @ruco-ai/mcpill && npm install -g mcpill`.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ npm install -g mcpill
11
+ ```
12
+
13
+ ## Author workflow
14
+
15
+ ```
16
+ mcpill init # scaffold server.md + tools/ + prompts/
17
+ # write your tools, prompts, resources
18
+ mcpill compile # compile server.md → .<name>/ pill artifact
19
+ mcpill validate # validate the pill artifact
20
+ mcpill run # start the MCP server locally (dev)
21
+ mcpill pack # prepare bin/server.js + package.json for npm
22
+ mcpill publish # pack + npm publish
23
+ ```
24
+
25
+ ## Commands
26
+
27
+ ### `mcpill init`
28
+
29
+ Scaffolds a new project in the current directory:
30
+
31
+ - `server.md` — Config + Resources in human-readable Markdown
32
+ - `tools/echo.md` — example tool
33
+ - `prompts/greeting.md` — example prompt
34
+ - `.mcpill/` — pre-compiled pill artifact
35
+ - `package.json` — with `pack` and `publish` scripts ready
36
+
37
+ ### `mcpill compile`
38
+
39
+ Compiles `server.md` + `tools/*.md` + `prompts/*.md` into a `.<name>/` pill artifact.
40
+
41
+ ```bash
42
+ mcpill compile # forward: source → pill
43
+ mcpill compile --to-md # reverse: pill → source
44
+ mcpill compile --strict # error on missing tool handlers (default: stub)
45
+ ```
46
+
47
+ ### `mcpill validate`
48
+
49
+ Validates all pill directories (`.<name>/`) in the project root.
50
+
51
+ ### `mcpill run`
52
+
53
+ Starts the MCP server from the pill artifact.
54
+
55
+ ```bash
56
+ mcpill run # stdio (default)
57
+ mcpill run --transport http --port 3333
58
+ ```
59
+
60
+ ### `mcpill pack`
61
+
62
+ Prepares the pill for npm distribution:
63
+
64
+ 1. Validates the pill artifact
65
+ 2. Writes `bin/server.js`:
66
+
67
+ ```js
68
+ import { runPill } from 'mcpill-runtime';
69
+ runPill();
70
+ ```
71
+
72
+ 3. Merges into `package.json`: sets `type: "module"`, `bin`, and `dependencies["mcpill-runtime"]`. Does not overwrite existing `name` or `version`.
73
+
74
+ ### `mcpill publish`
75
+
76
+ Runs `mcpill pack` then publishes to npm.
77
+
78
+ ```bash
79
+ mcpill publish # npm publish --access public
80
+ mcpill publish --access restricted
81
+ ```
82
+
83
+ ## Options
84
+
85
+ All commands accept `--dir <path>` to target a directory other than the current working directory.