@vibekiln/cutline-mcp-cli 0.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 (43) hide show
  1. package/Dockerfile +11 -0
  2. package/README.md +248 -0
  3. package/dist/auth/callback.d.ts +6 -0
  4. package/dist/auth/callback.js +97 -0
  5. package/dist/auth/keychain.d.ts +3 -0
  6. package/dist/auth/keychain.js +16 -0
  7. package/dist/commands/init.d.ts +4 -0
  8. package/dist/commands/init.js +309 -0
  9. package/dist/commands/login.d.ts +7 -0
  10. package/dist/commands/login.js +166 -0
  11. package/dist/commands/logout.d.ts +1 -0
  12. package/dist/commands/logout.js +25 -0
  13. package/dist/commands/serve.d.ts +1 -0
  14. package/dist/commands/serve.js +38 -0
  15. package/dist/commands/setup.d.ts +5 -0
  16. package/dist/commands/setup.js +278 -0
  17. package/dist/commands/status.d.ts +3 -0
  18. package/dist/commands/status.js +127 -0
  19. package/dist/commands/upgrade.d.ts +3 -0
  20. package/dist/commands/upgrade.js +112 -0
  21. package/dist/index.d.ts +2 -0
  22. package/dist/index.js +64 -0
  23. package/dist/servers/chunk-DE7R7WKY.js +331 -0
  24. package/dist/servers/chunk-KMUSQOTJ.js +47 -0
  25. package/dist/servers/chunk-OP4EO6FV.js +454 -0
  26. package/dist/servers/chunk-UBBAYTW3.js +946 -0
  27. package/dist/servers/chunk-ZVWDXO6M.js +1063 -0
  28. package/dist/servers/cutline-server.js +10448 -0
  29. package/dist/servers/data-client-FPUZBUO3.js +160 -0
  30. package/dist/servers/exploration-server.js +930 -0
  31. package/dist/servers/graph-metrics-DCNR7JZN.js +12 -0
  32. package/dist/servers/integrations-server.js +107 -0
  33. package/dist/servers/output-server.js +107 -0
  34. package/dist/servers/premortem-server.js +971 -0
  35. package/dist/servers/tools-server.js +287 -0
  36. package/dist/utils/config-store.d.ts +8 -0
  37. package/dist/utils/config-store.js +35 -0
  38. package/dist/utils/config.d.ts +22 -0
  39. package/dist/utils/config.js +48 -0
  40. package/mcpb/manifest.json +77 -0
  41. package/package.json +76 -0
  42. package/server.json +42 -0
  43. package/smithery.yaml +10 -0
@@ -0,0 +1,331 @@
1
+ // ../mcp/dist/mcp/src/schemas.js
2
+ import { z } from "zod";
3
+ var PMJsonSchema = z.object({
4
+ project: z.object({
5
+ name: z.string(),
6
+ brief: z.string(),
7
+ constraints: z.object({
8
+ team: z.string().optional(),
9
+ budget_usd: z.number().optional(),
10
+ deadline_days: z.number().int().optional(),
11
+ must_ship_scope: z.string().optional()
12
+ }).optional(),
13
+ reference_classes: z.array(z.string()).optional().default([])
14
+ }),
15
+ personas: z.object({
16
+ user_personas: z.array(z.object({
17
+ name: z.string(),
18
+ role: z.string().optional(),
19
+ segment: z.string().optional(),
20
+ is_buyer: z.boolean().optional(),
21
+ description: z.string(),
22
+ motivations: z.array(z.string()).optional(),
23
+ skills: z.array(z.string()).optional(),
24
+ objections: z.array(z.string()).optional()
25
+ })).optional(),
26
+ buyer_personas: z.array(z.object({
27
+ name: z.string(),
28
+ role: z.string().optional(),
29
+ segment: z.string().optional(),
30
+ is_buyer: z.boolean().optional(),
31
+ description: z.string(),
32
+ motivations: z.array(z.string()).optional(),
33
+ skills: z.array(z.string()).optional(),
34
+ objections: z.array(z.string()).optional()
35
+ })).optional()
36
+ }).optional(),
37
+ outside_view: z.object({
38
+ base_rates: z.array(z.object({
39
+ statement: z.string(),
40
+ p50: z.number().optional(),
41
+ p90: z.number().optional(),
42
+ source_hint: z.string().optional()
43
+ })).optional(),
44
+ failed_analogs: z.array(z.string()).optional(),
45
+ success_analogs: z.array(z.string()).optional()
46
+ }).optional(),
47
+ pricing: z.object({
48
+ monthly: z.number().optional(),
49
+ annual: z.number().optional(),
50
+ tiers: z.array(z.object({
51
+ name: z.string(),
52
+ price_month_usd: z.number(),
53
+ features: z.array(z.string()).optional()
54
+ })).optional(),
55
+ freemium: z.object({
56
+ enabled: z.boolean(),
57
+ features: z.array(z.string()).optional()
58
+ }).optional(),
59
+ trialDays: z.number().optional(),
60
+ adTier: z.object({
61
+ enabled: z.boolean(),
62
+ notes: z.string().optional()
63
+ }).optional(),
64
+ strategy: z.string().optional()
65
+ }).optional(),
66
+ kill_criteria: z.array(z.object({
67
+ name: z.string(),
68
+ threshold: z.string(),
69
+ status: z.enum(["unknown", "pass", "fail"]).optional(),
70
+ evidence: z.string().optional()
71
+ })).optional(),
72
+ decision: z.object({
73
+ recommendation: z.enum(["No-Go", "Revise", "Go (guarded)"]),
74
+ rationale: z.string(),
75
+ what_would_change_my_mind: z.string().optional(),
76
+ market_feasibility: z.object({
77
+ score: z.enum(["strong", "moderate", "weak"]),
78
+ rationale: z.string(),
79
+ nfr_coverage_pct: z.number().optional()
80
+ }).optional(),
81
+ productionalization_feasibility: z.object({
82
+ score: z.enum(["strong", "moderate", "weak"]),
83
+ rationale: z.string(),
84
+ nfr_coverage_pct: z.number().optional()
85
+ }).optional(),
86
+ engineering_time_reduction: z.object({
87
+ unassisted_hours: z.number(),
88
+ assisted_hours: z.number(),
89
+ speedup_factor: z.number()
90
+ }).optional()
91
+ }).optional(),
92
+ confidence: z.object({
93
+ p50: z.number(),
94
+ p75: z.number().optional(),
95
+ p90: z.number()
96
+ }).optional(),
97
+ risks: z.array(z.object({
98
+ area: z.enum(["Demand", "Channel", "UnitEcon", "Ops", "Legal", "Competition", "Tech"]).optional(),
99
+ description: z.string(),
100
+ likelihood: z.enum(["Low", "Med", "High"]).optional(),
101
+ impact: z.enum(["Low", "Med", "High", "Severe"]).optional(),
102
+ mitigation: z.string().optional(),
103
+ owner: z.string().optional()
104
+ })).optional(),
105
+ assumptions: z.array(z.object({
106
+ statement: z.string(),
107
+ falsifiable: z.boolean(),
108
+ owner: z.string(),
109
+ due_by: z.string()
110
+ })).optional(),
111
+ experiments: z.array(z.object({
112
+ name: z.string(),
113
+ cost_usd: z.number(),
114
+ days: z.number().int(),
115
+ reduces_uncertainty_on: z.array(z.string()),
116
+ success_criterion: z.string()
117
+ })).optional(),
118
+ competitors: z.array(z.object({
119
+ name: z.string(),
120
+ notes: z.string().optional()
121
+ })).optional(),
122
+ market: z.object({
123
+ tam_usd: z.number().optional(),
124
+ sam_usd: z.number().optional(),
125
+ som_3yr_usd: z.number().optional(),
126
+ method: z.string().optional(),
127
+ notes: z.string().optional(),
128
+ tam_rationale: z.array(z.string()).optional(),
129
+ sam_rationale: z.array(z.string()).optional(),
130
+ som_rationale: z.array(z.string()).optional(),
131
+ growth_cagr: z.number().optional(),
132
+ geo_scope: z.string().optional(),
133
+ segments: z.array(z.string()).optional(),
134
+ pricing_model: z.string().optional(),
135
+ arpa_usd: z.number().optional(),
136
+ adoption_notes: z.string().optional(),
137
+ icp: z.array(z.string()).optional(),
138
+ ease_of_spend: z.enum(["Low", "Med", "High"]).optional(),
139
+ ease_of_reach: z.enum(["Low", "Med", "High"]).optional(),
140
+ how_to_reach: z.array(z.string()).optional(),
141
+ channels: z.array(z.string()).optional(),
142
+ decision_makers: z.array(z.string()).optional(),
143
+ adoption_ramp: z.array(z.object({
144
+ month: z.number().int(),
145
+ adoption_pct: z.number().optional(),
146
+ revenue_usd: z.number().optional(),
147
+ notes: z.string().optional()
148
+ })).optional(),
149
+ sources: z.array(z.object({
150
+ title: z.string(),
151
+ url: z.string().optional(),
152
+ as_of: z.string().optional()
153
+ })).optional(),
154
+ confidence: z.object({
155
+ p50: z.number().optional(),
156
+ p90: z.number().optional()
157
+ }).optional()
158
+ }).optional(),
159
+ icp: z.object({
160
+ primary_icp: z.object({
161
+ title: z.string(),
162
+ description: z.string(),
163
+ demographics: z.object({
164
+ company_size: z.string(),
165
+ industry: z.string(),
166
+ geography: z.string(),
167
+ budget_range: z.string(),
168
+ job_titles: z.array(z.string()).optional(),
169
+ tech_stack: z.array(z.string()).optional()
170
+ }),
171
+ psychographics: z.object({
172
+ pain_points: z.array(z.string()),
173
+ goals: z.array(z.string()),
174
+ values: z.array(z.string()),
175
+ frustrations: z.array(z.string()).optional()
176
+ }),
177
+ buying_behavior: z.object({
178
+ decision_makers: z.array(z.string()),
179
+ buying_triggers: z.array(z.string()),
180
+ objections: z.array(z.string()),
181
+ sales_cycle_days: z.number().optional(),
182
+ preferred_channels: z.array(z.string()).optional()
183
+ }),
184
+ fit_score: z.number(),
185
+ rationale: z.string()
186
+ }),
187
+ secondary_icps: z.array(z.object({
188
+ title: z.string(),
189
+ description: z.string(),
190
+ key_differences: z.array(z.string()),
191
+ fit_score: z.number()
192
+ })).optional(),
193
+ anti_personas: z.array(z.object({
194
+ title: z.string(),
195
+ description: z.string(),
196
+ why_poor_fit: z.array(z.string())
197
+ })),
198
+ consulting_fit: z.object({
199
+ ideal_client_profile: z.string(),
200
+ engagement_signals: z.array(z.string()),
201
+ disqualifiers: z.array(z.string()),
202
+ stakeholder_map: z.array(z.string()).optional()
203
+ }).optional(),
204
+ sources: z.array(z.object({
205
+ title: z.string(),
206
+ url: z.string().optional(),
207
+ as_of: z.string().optional()
208
+ })).optional()
209
+ }).optional(),
210
+ metrics: z.object({
211
+ north_star: z.string().optional(),
212
+ leading: z.array(z.string()).optional(),
213
+ unit_econ: z.object({
214
+ target_cac: z.number().optional(),
215
+ target_gpm: z.number().optional(),
216
+ payback_months: z.number().optional()
217
+ }).optional()
218
+ }).optional(),
219
+ plan: z.object({
220
+ tasks: z.array(z.object({
221
+ id: z.string().optional(),
222
+ name: z.string(),
223
+ owner: z.enum(["Eng", "Design", "PM", "Compliance"]).optional(),
224
+ days: z.number().int(),
225
+ deps: z.array(z.string()).optional()
226
+ })).optional()
227
+ }).optional(),
228
+ notes: z.object({
229
+ pre_mortem: z.string().optional(),
230
+ evidence_gaps: z.array(z.string()).optional()
231
+ }).optional(),
232
+ role_summaries: z.array(z.object({
233
+ role: z.string(),
234
+ summary: z.string()
235
+ })).optional()
236
+ }).passthrough();
237
+ var RunInputSchema = z.object({
238
+ mode: z.enum(["product", "consulting"]).optional().default("product"),
239
+ project: z.object({
240
+ name: z.string(),
241
+ brief: z.string(),
242
+ constraints: z.object({
243
+ team: z.string().optional(),
244
+ budget_usd: z.number().optional(),
245
+ deadline_days: z.number().int().optional(),
246
+ must_ship_scope: z.string().optional()
247
+ }).optional(),
248
+ reference_classes: z.array(z.string()).optional().default([]),
249
+ tech_stack: z.array(z.string()).optional()
250
+ }),
251
+ client: z.object({
252
+ name: z.string().optional(),
253
+ industry: z.string().optional(),
254
+ size: z.enum(["startup", "smb", "enterprise"]).optional(),
255
+ stakeholders: z.array(z.object({
256
+ name: z.string(),
257
+ role: z.string().optional(),
258
+ influence: z.enum(["decision_maker", "influencer", "blocker", "champion"]).optional()
259
+ })).optional()
260
+ }).optional(),
261
+ kill_criteria: z.array(z.object({ name: z.string(), threshold: z.string() })).optional(),
262
+ pessimism: z.number().min(0).max(1).optional(),
263
+ organizationId: z.string().optional(),
264
+ productId: z.string().optional(),
265
+ seed_personas: z.object({
266
+ user_personas: z.array(z.object({
267
+ name: z.string(),
268
+ role: z.string().optional(),
269
+ segment: z.string().optional(),
270
+ is_buyer: z.boolean().optional(),
271
+ description: z.string(),
272
+ motivations: z.array(z.string()).optional(),
273
+ skills: z.array(z.string()).optional(),
274
+ objections: z.array(z.string()).optional()
275
+ })).optional(),
276
+ buyer_personas: z.array(z.object({
277
+ name: z.string(),
278
+ role: z.string().optional(),
279
+ segment: z.string().optional(),
280
+ is_buyer: z.boolean().optional(),
281
+ description: z.string(),
282
+ motivations: z.array(z.string()).optional(),
283
+ skills: z.array(z.string()).optional(),
284
+ objections: z.array(z.string()).optional()
285
+ })).optional()
286
+ }).optional(),
287
+ conversational_artifacts: z.object({
288
+ risks: z.array(z.object({
289
+ title: z.string(),
290
+ description: z.string().optional(),
291
+ category: z.string().optional(),
292
+ severity: z.enum(["low", "medium", "high", "critical"]).optional(),
293
+ likelihood: z.number().min(0).max(1).optional(),
294
+ impact: z.number().min(0).max(1).optional()
295
+ })).optional(),
296
+ assumptions: z.array(z.object({
297
+ statement: z.string(),
298
+ category: z.string().optional(),
299
+ confidence: z.number().min(0).max(1).optional(),
300
+ importance: z.number().min(0).max(1).optional()
301
+ })).optional(),
302
+ market_context: z.string().optional(),
303
+ competitors: z.array(z.object({
304
+ name: z.string(),
305
+ description: z.string().optional(),
306
+ threat_level: z.enum(["low", "medium", "high"]).optional()
307
+ })).optional(),
308
+ conversation_summary: z.string().optional(),
309
+ target_users: z.string().optional()
310
+ }).optional(),
311
+ code_context: z.object({
312
+ files_audited: z.array(z.string()).optional(),
313
+ ecosystem: z.object({
314
+ languages: z.array(z.string()).optional(),
315
+ frameworks: z.array(z.string()).optional(),
316
+ orms: z.array(z.string()).optional()
317
+ }).optional(),
318
+ binding_health: z.object({
319
+ healthy: z.number().optional(),
320
+ total: z.number().optional(),
321
+ coverage_pct: z.number().optional()
322
+ }).optional(),
323
+ sensitive_data_count: z.number().optional(),
324
+ security_gaps: z.array(z.string()).optional()
325
+ }).optional()
326
+ });
327
+
328
+ export {
329
+ PMJsonSchema,
330
+ RunInputSchema
331
+ };
@@ -0,0 +1,47 @@
1
+ // ../mcp/dist/mcp/src/shared/tool-permissions.js
2
+ var WRITE_TOOLS = /* @__PURE__ */ new Set([
3
+ // Pre-mortem (cutline-server + premortem-server)
4
+ "premortem_run",
5
+ "premortem_queue",
6
+ "premortem_kick",
7
+ "premortem_regen_assumptions",
8
+ "premortem_regen_experiments",
9
+ // Pre-mortem chat (premortem-server)
10
+ "premortem_graduate",
11
+ "premortem_chat_start",
12
+ "premortem_chat",
13
+ "premortem_chat_graduate",
14
+ // Wiki
15
+ "wiki_save",
16
+ "wiki_apply_edits",
17
+ // Integrations
18
+ "integrations_create_issues",
19
+ // Constraint graph mutations
20
+ "constraints_ingest",
21
+ "constraints_ingest_persona",
22
+ "constraints_ingest_wiki",
23
+ "constraints_ingest_doc",
24
+ "constraints_embed",
25
+ "constraints_learn",
26
+ // Templates
27
+ "template_create",
28
+ "template_discover",
29
+ // Graph ingestion / binding / healing
30
+ "graph_ingest_requirements",
31
+ "graph_bind_codebase",
32
+ "graph_bind_confirm",
33
+ "constraints_heal",
34
+ // Cutline MD generation (writes to filesystem)
35
+ "generate_cutline_md",
36
+ // Tools server
37
+ "trial_generate",
38
+ // Readiness badge (writes to readiness_reports collection)
39
+ "export_readiness_badge"
40
+ ]);
41
+ function isWriteTool(name) {
42
+ return WRITE_TOOLS.has(name);
43
+ }
44
+
45
+ export {
46
+ isWriteTool
47
+ };