@kylewadegrove/cutline-mcp-cli 0.4.2 → 0.5.1
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/Dockerfile +11 -0
- package/README.md +177 -107
- package/dist/auth/callback.js +30 -32
- package/dist/auth/keychain.js +7 -15
- package/dist/commands/init.d.ts +4 -0
- package/dist/commands/init.js +246 -0
- package/dist/commands/login.js +39 -45
- package/dist/commands/logout.js +13 -19
- package/dist/commands/serve.d.ts +1 -0
- package/dist/commands/serve.js +38 -0
- package/dist/commands/setup.d.ts +5 -0
- package/dist/commands/setup.js +267 -0
- package/dist/commands/status.js +29 -35
- package/dist/commands/upgrade.js +44 -38
- package/dist/index.js +38 -14
- package/dist/servers/chunk-7FHM2GD3.js +5836 -0
- package/dist/servers/chunk-IVWF7VYZ.js +10086 -0
- package/dist/servers/chunk-JBJYSV4P.js +139 -0
- package/dist/servers/chunk-KMUSQOTJ.js +47 -0
- package/dist/servers/chunk-PD2HN2R5.js +908 -0
- package/dist/servers/chunk-PU7TL6S3.js +91 -0
- package/dist/servers/chunk-TGSEURMN.js +46 -0
- package/dist/servers/chunk-UBBAYTW3.js +946 -0
- package/dist/servers/cutline-server.js +11512 -0
- package/dist/servers/exploration-server.js +1030 -0
- package/dist/servers/graph-metrics-DCNR7JZN.js +12 -0
- package/dist/servers/integrations-server.js +121 -0
- package/dist/servers/output-server.js +120 -0
- package/dist/servers/pipeline-O5GJPNR4.js +20 -0
- package/dist/servers/premortem-handoff-XT4K3YDJ.js +10 -0
- package/dist/servers/premortem-server.js +958 -0
- package/dist/servers/score-history-HO5KRVGC.js +6 -0
- package/dist/servers/tools-server.js +291 -0
- package/dist/utils/config-store.js +13 -21
- package/dist/utils/config.js +2 -6
- package/mcpb/manifest.json +77 -0
- package/package.json +55 -9
- package/server.json +42 -0
- package/smithery.yaml +10 -0
- package/src/auth/callback.ts +0 -102
- package/src/auth/keychain.ts +0 -16
- package/src/commands/login.ts +0 -202
- package/src/commands/logout.ts +0 -30
- package/src/commands/status.ts +0 -153
- package/src/commands/upgrade.ts +0 -121
- package/src/index.ts +0 -40
- package/src/utils/config-store.ts +0 -46
- package/src/utils/config.ts +0 -65
- package/tsconfig.json +0 -22
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import {
|
|
2
|
+
applyGenericPrior,
|
|
3
|
+
computeGenericGraphMetrics,
|
|
4
|
+
computeGraphMetrics,
|
|
5
|
+
computeMetricsFromGraph
|
|
6
|
+
} from "./chunk-UBBAYTW3.js";
|
|
7
|
+
export {
|
|
8
|
+
applyGenericPrior,
|
|
9
|
+
computeGenericGraphMetrics,
|
|
10
|
+
computeGraphMetrics,
|
|
11
|
+
computeMetricsFromGraph
|
|
12
|
+
};
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
isWriteTool
|
|
4
|
+
} from "./chunk-KMUSQOTJ.js";
|
|
5
|
+
import {
|
|
6
|
+
createLinearIssues,
|
|
7
|
+
processStripeEvent
|
|
8
|
+
} from "./chunk-IVWF7VYZ.js";
|
|
9
|
+
import {
|
|
10
|
+
guardBoundary,
|
|
11
|
+
guardOutput,
|
|
12
|
+
initFirebase,
|
|
13
|
+
mapErrorToMcp,
|
|
14
|
+
requirePremiumWithAutoAuth,
|
|
15
|
+
validateAuth,
|
|
16
|
+
validateRequestSize,
|
|
17
|
+
withPerfTracking
|
|
18
|
+
} from "./chunk-PD2HN2R5.js";
|
|
19
|
+
import "./chunk-7FHM2GD3.js";
|
|
20
|
+
import "./chunk-JBJYSV4P.js";
|
|
21
|
+
|
|
22
|
+
// ../mcp/dist/mcp/src/integrations-server.js
|
|
23
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
24
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
25
|
+
import { CallToolRequestSchema, ErrorCode, ListToolsRequestSchema, McpError } from "@modelcontextprotocol/sdk/types.js";
|
|
26
|
+
import Stripe from "stripe";
|
|
27
|
+
var server = new Server({
|
|
28
|
+
name: "cutline-integrations",
|
|
29
|
+
version: "0.1.0"
|
|
30
|
+
}, {
|
|
31
|
+
capabilities: {
|
|
32
|
+
tools: {}
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
36
|
+
return {
|
|
37
|
+
tools: [
|
|
38
|
+
{
|
|
39
|
+
name: "integrations_create_issues",
|
|
40
|
+
description: "Create issues in issue tracker (stub)",
|
|
41
|
+
inputSchema: {
|
|
42
|
+
type: "object",
|
|
43
|
+
properties: {
|
|
44
|
+
schema_json: { type: "object" },
|
|
45
|
+
limit: { type: "number" },
|
|
46
|
+
auth_token: { type: "string" }
|
|
47
|
+
},
|
|
48
|
+
required: ["schema_json"]
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: "stripe_webhook_dispatch",
|
|
53
|
+
description: "Manually dispatch a Stripe webhook event",
|
|
54
|
+
inputSchema: {
|
|
55
|
+
type: "object",
|
|
56
|
+
properties: {
|
|
57
|
+
event: { type: "object" },
|
|
58
|
+
auth_token: { type: "string" }
|
|
59
|
+
},
|
|
60
|
+
required: ["event"]
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
]
|
|
64
|
+
};
|
|
65
|
+
});
|
|
66
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
67
|
+
try {
|
|
68
|
+
const { name, arguments: rawArgs } = request.params;
|
|
69
|
+
if (!rawArgs)
|
|
70
|
+
throw new McpError(ErrorCode.InvalidParams, "Missing arguments");
|
|
71
|
+
validateRequestSize(rawArgs);
|
|
72
|
+
const { args } = guardBoundary(name, rawArgs);
|
|
73
|
+
initFirebase();
|
|
74
|
+
const rawResponse = await withPerfTracking(name, async () => {
|
|
75
|
+
if (isWriteTool(name)) {
|
|
76
|
+
const peekToken = args.auth_token;
|
|
77
|
+
if (peekToken) {
|
|
78
|
+
const peekDecoded = await validateAuth(peekToken).catch(() => null);
|
|
79
|
+
if (peekDecoded && peekDecoded.accountType === "agent") {
|
|
80
|
+
throw new McpError(ErrorCode.InvalidRequest, "This is a read-only agent account. Write operations require the owner account.");
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
switch (name) {
|
|
85
|
+
case "integrations_create_issues": {
|
|
86
|
+
const { schema_json, limit, auth_token } = args;
|
|
87
|
+
await requirePremiumWithAutoAuth(auth_token);
|
|
88
|
+
const result = await createLinearIssues(schema_json, limit);
|
|
89
|
+
return {
|
|
90
|
+
content: [{ type: "text", text: JSON.stringify(result) }]
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
case "stripe_webhook_dispatch": {
|
|
94
|
+
const { event, auth_token } = args;
|
|
95
|
+
await requirePremiumWithAutoAuth(auth_token);
|
|
96
|
+
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY || "", {
|
|
97
|
+
apiVersion: "2023-10-16"
|
|
98
|
+
});
|
|
99
|
+
await processStripeEvent(event, stripe);
|
|
100
|
+
return {
|
|
101
|
+
content: [{ type: "text", text: JSON.stringify({ dispatched: true }) }]
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
default:
|
|
105
|
+
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
return guardOutput(name, rawResponse);
|
|
109
|
+
} catch (error) {
|
|
110
|
+
throw mapErrorToMcp(error, { tool: request.params.name });
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
async function run() {
|
|
114
|
+
const transport = new StdioServerTransport();
|
|
115
|
+
await server.connect(transport);
|
|
116
|
+
console.error("Cutline Integrations MCP Server running on stdio");
|
|
117
|
+
}
|
|
118
|
+
run().catch((error) => {
|
|
119
|
+
console.error("Fatal error running server:", error);
|
|
120
|
+
process.exit(1);
|
|
121
|
+
});
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
buildPdfBuffer,
|
|
4
|
+
generateAnswer,
|
|
5
|
+
uploadAndSign
|
|
6
|
+
} from "./chunk-IVWF7VYZ.js";
|
|
7
|
+
import {
|
|
8
|
+
guardBoundary,
|
|
9
|
+
guardOutput,
|
|
10
|
+
initFirebase,
|
|
11
|
+
mapErrorToMcp,
|
|
12
|
+
requirePremiumWithAutoAuth,
|
|
13
|
+
validateRequestSize,
|
|
14
|
+
withPerfTracking
|
|
15
|
+
} from "./chunk-PD2HN2R5.js";
|
|
16
|
+
import {
|
|
17
|
+
PMJsonSchema
|
|
18
|
+
} from "./chunk-7FHM2GD3.js";
|
|
19
|
+
import "./chunk-JBJYSV4P.js";
|
|
20
|
+
|
|
21
|
+
// ../mcp/dist/mcp/src/output-server.js
|
|
22
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
23
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
24
|
+
import { CallToolRequestSchema, ErrorCode, ListToolsRequestSchema, McpError } from "@modelcontextprotocol/sdk/types.js";
|
|
25
|
+
var server = new Server({
|
|
26
|
+
name: "cutline-output",
|
|
27
|
+
version: "0.1.0"
|
|
28
|
+
}, {
|
|
29
|
+
capabilities: {
|
|
30
|
+
tools: {}
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
34
|
+
return {
|
|
35
|
+
tools: [
|
|
36
|
+
{
|
|
37
|
+
name: "premortem_render_pdf",
|
|
38
|
+
description: "Generate PDF and signed URL",
|
|
39
|
+
inputSchema: {
|
|
40
|
+
type: "object",
|
|
41
|
+
properties: {
|
|
42
|
+
doc: { type: "object" },
|
|
43
|
+
auth_token: { type: "string" },
|
|
44
|
+
store: { type: "boolean" }
|
|
45
|
+
},
|
|
46
|
+
required: ["doc"]
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: "premortem_qa_answer",
|
|
51
|
+
description: "Answer questions against a premortem doc",
|
|
52
|
+
inputSchema: {
|
|
53
|
+
type: "object",
|
|
54
|
+
properties: {
|
|
55
|
+
question: { type: "string" },
|
|
56
|
+
doc: { type: "object" }
|
|
57
|
+
},
|
|
58
|
+
required: ["question"]
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
};
|
|
63
|
+
});
|
|
64
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
65
|
+
try {
|
|
66
|
+
const { name, arguments: rawArgs } = request.params;
|
|
67
|
+
if (!rawArgs)
|
|
68
|
+
throw new McpError(ErrorCode.InvalidParams, "Missing arguments");
|
|
69
|
+
validateRequestSize(rawArgs);
|
|
70
|
+
const { args } = guardBoundary(name, rawArgs);
|
|
71
|
+
initFirebase();
|
|
72
|
+
const rawResponse = await withPerfTracking(name, async () => {
|
|
73
|
+
switch (name) {
|
|
74
|
+
case "premortem_render_pdf": {
|
|
75
|
+
const { doc, auth_token, store = true } = args;
|
|
76
|
+
await requirePremiumWithAutoAuth(auth_token);
|
|
77
|
+
const parsedDoc = PMJsonSchema.parse(doc);
|
|
78
|
+
const bytes = await buildPdfBuffer(parsedDoc);
|
|
79
|
+
if (store) {
|
|
80
|
+
const uploaded = await uploadAndSign(bytes, parsedDoc?.project?.name || "premortem");
|
|
81
|
+
if (uploaded?.url) {
|
|
82
|
+
return {
|
|
83
|
+
content: [{ type: "text", text: JSON.stringify({ ok: true, url: uploaded.url }) }]
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const base64 = Buffer.from(bytes).toString("base64");
|
|
88
|
+
return {
|
|
89
|
+
content: [{ type: "text", text: JSON.stringify({ ok: true, dataUrl: `data:application/pdf;base64,${base64}` }) }]
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
case "premortem_qa_answer": {
|
|
93
|
+
const { question, doc, auth_token } = args;
|
|
94
|
+
const allowPublic = process.env.ALLOW_PUBLIC_PREMORTEM === "true";
|
|
95
|
+
if (!allowPublic) {
|
|
96
|
+
await requirePremiumWithAutoAuth(auth_token);
|
|
97
|
+
}
|
|
98
|
+
const result = await generateAnswer(question, doc);
|
|
99
|
+
return {
|
|
100
|
+
content: [{ type: "text", text: JSON.stringify(result) }]
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
default:
|
|
104
|
+
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
return guardOutput(name, rawResponse);
|
|
108
|
+
} catch (error) {
|
|
109
|
+
throw mapErrorToMcp(error, { tool: request.params.name });
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
async function run() {
|
|
113
|
+
const transport = new StdioServerTransport();
|
|
114
|
+
await server.connect(transport);
|
|
115
|
+
console.error("Cutline Output MCP Server running on stdio");
|
|
116
|
+
}
|
|
117
|
+
run().catch((error) => {
|
|
118
|
+
console.error("Fatal error running server:", error);
|
|
119
|
+
process.exit(1);
|
|
120
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import {
|
|
2
|
+
regenerateAssumptions,
|
|
3
|
+
regenerateExperiments,
|
|
4
|
+
regenerateFeaturePriorities,
|
|
5
|
+
regenerateFeatures,
|
|
6
|
+
regenerateFeaturesOnly,
|
|
7
|
+
regenerateGraphAndVerdict,
|
|
8
|
+
runRolesAndSummarize,
|
|
9
|
+
runRolesAndSummarizeIncremental
|
|
10
|
+
} from "./chunk-7FHM2GD3.js";
|
|
11
|
+
export {
|
|
12
|
+
regenerateAssumptions,
|
|
13
|
+
regenerateExperiments,
|
|
14
|
+
regenerateFeaturePriorities,
|
|
15
|
+
regenerateFeatures,
|
|
16
|
+
regenerateFeaturesOnly,
|
|
17
|
+
regenerateGraphAndVerdict,
|
|
18
|
+
runRolesAndSummarize,
|
|
19
|
+
runRolesAndSummarizeIncremental
|
|
20
|
+
};
|