@kylewadegrove/cutline-mcp-cli 0.7.2 → 0.7.4
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 +6 -6
- package/dist/commands/init.js +7 -7
- package/dist/commands/setup.js +9 -5
- package/dist/commands/upgrade.js +2 -2
- package/dist/servers/cutline-server.js +30 -30
- package/mcpb/manifest.json +3 -3
- package/package.json +1 -1
- package/server.json +1 -1
package/README.md
CHANGED
|
@@ -38,15 +38,15 @@ cutline-mcp init
|
|
|
38
38
|
cutline-mcp setup
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
-
Then ask your AI agent: **"Run
|
|
41
|
+
Then ask your AI agent: **"Run a code audit on this codebase"**
|
|
42
42
|
|
|
43
43
|
## What It Does
|
|
44
44
|
|
|
45
45
|
| Capability | Free | Premium |
|
|
46
46
|
|---|---|---|
|
|
47
|
-
| **
|
|
47
|
+
| **Code Audit** — security, reliability, scalability scan | 3/month | Unlimited |
|
|
48
48
|
| **9 Compliance Frameworks** — SOC 2, PCI-DSS, HIPAA, GDPR, OWASP LLM, FedRAMP, GLBA, FERPA/COPPA | Auto-loaded | Auto-loaded |
|
|
49
|
-
| **
|
|
49
|
+
| **Engineering Audit** — deep product-linked scan + RGR remediation plan | — | Unlimited |
|
|
50
50
|
| **Pre-Mortem Analysis** — risks, assumptions, competitive threats | — | Unlimited |
|
|
51
51
|
| **Constraint Graph** — product-specific NFR routing | — | Full access |
|
|
52
52
|
| **AI Personas** — stakeholder feedback on features | — | Full access |
|
|
@@ -58,7 +58,7 @@ Then ask your AI agent: **"Run an engineering audit on this codebase"**
|
|
|
58
58
|
|
|
59
59
|
| Tool | Description |
|
|
60
60
|
|---|---|
|
|
61
|
-
| `
|
|
61
|
+
| `code_audit` | Security, reliability, and scalability scan (3/month) |
|
|
62
62
|
| `exploration_start` | Start a guided product idea exploration |
|
|
63
63
|
| `exploration_chat` | Continue an exploration conversation |
|
|
64
64
|
| `exploration_graduate` | Graduate top idea (teaser for free, full for premium) |
|
|
@@ -75,7 +75,7 @@ Then ask your AI agent: **"Run an engineering audit on this codebase"**
|
|
|
75
75
|
|
|
76
76
|
**Graph Operations:** `graph_ingest_requirements`, `graph_get_boundaries`, `graph_bind_codebase`, `graph_bind_confirm`, `graph_view`, `graph_conflicts`, `graph_metrics`
|
|
77
77
|
|
|
78
|
-
**Code & RGR:** `
|
|
78
|
+
**Code & RGR:** `engineering_audit`, `rgr_plan`, `rgr_complete_phase`, `export_readiness_badge`
|
|
79
79
|
|
|
80
80
|
**Wiki & Integrations:** `wiki_load`, `wiki_save`, `wiki_apply_edits`, `agent_chat`, `integrations_create_issues`
|
|
81
81
|
|
|
@@ -105,7 +105,7 @@ cutline-mcp init --project-root /path/to/project
|
|
|
105
105
|
```
|
|
106
106
|
|
|
107
107
|
**Free tier writes:**
|
|
108
|
-
- `.cursor/rules/rgr-workflow.mdc` — RGR cycle with `
|
|
108
|
+
- `.cursor/rules/rgr-workflow.mdc` — RGR cycle with `code_audit`
|
|
109
109
|
- `.cursor/rules/ambient-constraints.mdc` — Constraint checking guidance
|
|
110
110
|
- `CLAUDE.local.md` — Same instructions for Claude Code
|
|
111
111
|
|
package/dist/commands/init.js
CHANGED
|
@@ -57,11 +57,11 @@ function cursorRgrRule(config, tier) {
|
|
|
57
57
|
const productId = config?.product_id ?? '<from .cutline/config.json>';
|
|
58
58
|
const productName = config?.product_name ?? 'your product';
|
|
59
59
|
const verifyTool = tier === 'premium'
|
|
60
|
-
? `\`
|
|
61
|
-
: `\`
|
|
60
|
+
? `\`engineering_audit(product_id: "${productId}", project_root: "<workspace>")\``
|
|
61
|
+
: `\`code_audit(project_root: "<workspace>")\``;
|
|
62
62
|
const planStep = tier === 'premium'
|
|
63
63
|
? `1. **Plan**: \`rgr_plan(product_id: "${productId}", file_path: "<file>")\``
|
|
64
|
-
: `1. **Plan**: \`
|
|
64
|
+
: `1. **Plan**: \`code_audit(project_root: "<workspace>")\` to identify top active issue`;
|
|
65
65
|
return `---
|
|
66
66
|
description: RGR development workflow using Cutline MCP tools
|
|
67
67
|
globs:
|
|
@@ -102,7 +102,7 @@ alwaysApply: true
|
|
|
102
102
|
|
|
103
103
|
# Cutline Constraints
|
|
104
104
|
|
|
105
|
-
Run \`
|
|
105
|
+
Run \`code_audit(project_root)\` before major implementations to check constraint coverage.
|
|
106
106
|
|
|
107
107
|
Severity levels:
|
|
108
108
|
- **CRITICAL**: Must address before proceeding
|
|
@@ -150,8 +150,8 @@ function claudeLocalContent(config, tier) {
|
|
|
150
150
|
const productId = config?.product_id ?? '<product_id>';
|
|
151
151
|
const productName = config?.product_name ?? 'your product';
|
|
152
152
|
const verifyCmd = tier === 'premium'
|
|
153
|
-
? `
|
|
154
|
-
: `
|
|
153
|
+
? `engineering_audit(product_id: "${productId}", project_root)`
|
|
154
|
+
: `code_audit(project_root)`;
|
|
155
155
|
return `# Cutline Integration
|
|
156
156
|
|
|
157
157
|
This file is auto-generated by \`cutline-mcp init\`. Do not commit to version control.
|
|
@@ -161,7 +161,7 @@ Tier: ${tier}
|
|
|
161
161
|
|
|
162
162
|
${tier === 'premium' ? `Read \`.cutline.md\` before planning or executing code in this repository.\n` : ''}## RGR Workflow
|
|
163
163
|
|
|
164
|
-
1. **Plan**: ${tier === 'premium' ? `\`rgr_plan(product_id: "${productId}", file_path)\`` : `\`
|
|
164
|
+
1. **Plan**: ${tier === 'premium' ? `\`rgr_plan(product_id: "${productId}", file_path)\`` : `\`code_audit(project_root)\``} before writing code
|
|
165
165
|
2. **Implement**: Address constraints/findings from the plan
|
|
166
166
|
3. **Verify**: \`${verifyCmd}\`
|
|
167
167
|
4. **Complete**: ${tier === 'premium' ? `\`rgr_complete_phase(product_id: "${productId}", phase)\`` : 'Re-scan to confirm scores improved'}
|
package/dist/commands/setup.js
CHANGED
|
@@ -84,10 +84,12 @@ function prompt(question) {
|
|
|
84
84
|
});
|
|
85
85
|
}
|
|
86
86
|
function buildServerConfig() {
|
|
87
|
+
const voltaNpx = join(homedir(), '.volta', 'bin', 'npx');
|
|
88
|
+
const npxCommand = existsSync(voltaNpx) ? voltaNpx : 'npx';
|
|
87
89
|
const config = {};
|
|
88
90
|
for (const name of SERVER_NAMES) {
|
|
89
91
|
config[`cutline-${name}`] = {
|
|
90
|
-
command:
|
|
92
|
+
command: npxCommand,
|
|
91
93
|
args: ['-y', '@kylewadegrove/cutline-mcp-cli@latest', 'serve', name],
|
|
92
94
|
};
|
|
93
95
|
}
|
|
@@ -242,8 +244,8 @@ export async function setupCommand(options) {
|
|
|
242
244
|
const items = [
|
|
243
245
|
{ cmd: 'Run a deep dive on my product idea', desc: 'Pre-mortem analysis — risks, assumptions, experiments' },
|
|
244
246
|
{ cmd: 'Plan this feature with constraints from my product', desc: 'RGR plan — constraint-aware implementation roadmap' },
|
|
245
|
-
{ cmd: 'Run
|
|
246
|
-
{ cmd: 'Run
|
|
247
|
+
{ cmd: 'Run a code audit on this codebase', desc: 'Free code audit — security, reliability, and scalability (generic, not product-linked)' },
|
|
248
|
+
{ cmd: 'Run an engineering audit for my product', desc: 'Premium deep audit — product-linked analysis + RGR remediation plan' },
|
|
247
249
|
{ cmd: 'Check constraints for src/api/upload.ts', desc: 'Get NFR boundaries for a specific file' },
|
|
248
250
|
{ cmd: 'Generate .cutline.md for my product', desc: 'Write the constraint routing engine' },
|
|
249
251
|
{ cmd: 'What does my persona think about X?', desc: 'AI persona feedback on features' },
|
|
@@ -256,14 +258,16 @@ export async function setupCommand(options) {
|
|
|
256
258
|
}
|
|
257
259
|
else {
|
|
258
260
|
const items = [
|
|
259
|
-
{ cmd: 'Run
|
|
261
|
+
{ cmd: 'Run a code audit on this codebase', desc: 'Free code audit — security, reliability, and scalability scan (3/month free)' },
|
|
262
|
+
{ cmd: 'Explore a product idea', desc: 'Free 6-act discovery flow to identify pain points and opportunities' },
|
|
263
|
+
{ cmd: 'Continue my exploration session', desc: 'Resume and refine an existing free exploration conversation' },
|
|
260
264
|
];
|
|
261
265
|
for (const item of items) {
|
|
262
266
|
console.log(` ${chalk.cyan('→')} ${chalk.white(`"${item.cmd}"`)}`);
|
|
263
267
|
console.log(` ${chalk.dim(item.desc)}`);
|
|
264
268
|
}
|
|
265
269
|
console.log();
|
|
266
|
-
console.log(chalk.dim('
|
|
270
|
+
console.log(chalk.dim(' Want product-linked constraints, full code audit + RGR plans, and pre-mortem deep dives?'));
|
|
267
271
|
console.log(chalk.dim(' →'), chalk.cyan('cutline-mcp upgrade'), chalk.dim('or https://thecutline.ai/upgrade'));
|
|
268
272
|
}
|
|
269
273
|
console.log();
|
package/dist/commands/upgrade.js
CHANGED
|
@@ -89,8 +89,8 @@ export async function upgradeCommand(options) {
|
|
|
89
89
|
const items = [
|
|
90
90
|
{ cmd: 'Run a deep dive on my product idea', desc: 'Pre-mortem analysis — risks, assumptions, experiments' },
|
|
91
91
|
{ cmd: 'Plan this feature with constraints from my product', desc: 'RGR plan — constraint-aware implementation roadmap' },
|
|
92
|
-
{ cmd: 'Run
|
|
93
|
-
{ cmd: 'Run
|
|
92
|
+
{ cmd: 'Run a code audit on this codebase', desc: 'Free code audit — security, reliability, and scalability (generic, not product-linked)' },
|
|
93
|
+
{ cmd: 'Run an engineering audit for my product', desc: 'Premium deep audit — product-linked analysis + RGR remediation plan' },
|
|
94
94
|
{ cmd: 'Generate .cutline.md for my product', desc: 'Write the constraint routing engine' },
|
|
95
95
|
];
|
|
96
96
|
for (const item of items) {
|
|
@@ -6824,7 +6824,7 @@ async function handleSecurityScan(genericGraphId, uid, args, deps) {
|
|
|
6824
6824
|
try {
|
|
6825
6825
|
scaFindings = await scanDependencies(scan.dependencies);
|
|
6826
6826
|
} catch (e) {
|
|
6827
|
-
console.warn("[
|
|
6827
|
+
console.warn("[code_audit] SCA scan failed:", e.message);
|
|
6828
6828
|
}
|
|
6829
6829
|
}
|
|
6830
6830
|
const sensitiveFilePaths = new Set(scan.sensitive_data.fields?.map((f) => f.file).filter(Boolean) ?? []);
|
|
@@ -6970,7 +6970,7 @@ function formatAuditOutput(result, reportId) {
|
|
|
6970
6970
|
const p = result.previousMetrics;
|
|
6971
6971
|
const isRescan = !!p;
|
|
6972
6972
|
const lines = [
|
|
6973
|
-
`# Cutline
|
|
6973
|
+
`# Cutline Code Audit`,
|
|
6974
6974
|
``,
|
|
6975
6975
|
`**Ecosystem:** ${result.ecosystem.languages.join(", ")} / ${result.ecosystem.frameworks.join(", ") || "none detected"}`,
|
|
6976
6976
|
`**Sensitive data locations:** ${result.sensitiveDataCount}`
|
|
@@ -6994,7 +6994,7 @@ function formatAuditOutput(result, reportId) {
|
|
|
6994
6994
|
const criticalCount = result.gatedGapDetails.filter((g) => g.severity === "critical" || g.severity === "high").length;
|
|
6995
6995
|
if (totalFindings > 0) {
|
|
6996
6996
|
const topFinding = result.gatedGapDetails[0];
|
|
6997
|
-
lines.push(``, `## #1 Finding \u2014 Fix This Now`, ``, `**[${topFinding.severity.toUpperCase()}] ${topFinding.title}**`, `*Category: ${topFinding.category}*`, ``, topFinding.description || "Address this finding to improve your readiness scores.", ``, `> Fix this issue, then re-run \`
|
|
6997
|
+
lines.push(``, `## #1 Finding \u2014 Fix This Now`, ``, `**[${topFinding.severity.toUpperCase()}] ${topFinding.title}**`, `*Category: ${topFinding.category}*`, ``, topFinding.description || "Address this finding to improve your readiness scores.", ``, `> Fix this issue, then re-run \`code_audit\` to see your scores improve.`);
|
|
6998
6998
|
const remaining = result.gatedGapDetails.slice(1);
|
|
6999
6999
|
if (remaining.length > 0) {
|
|
7000
7000
|
lines.push(``, `## ${remaining.length} More Finding${remaining.length > 1 ? "s" : ""} Detected`);
|
|
@@ -7903,32 +7903,32 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
7903
7903
|
},
|
|
7904
7904
|
{
|
|
7905
7905
|
name: "code_audit",
|
|
7906
|
-
description: "\u{
|
|
7906
|
+
description: "\u{1F513} FREE - Code audit. Evaluates your codebase against a stack-aware constraint graph covering security, reliability, and scalability. No deep dive or product_id required \u2014 just point at your codebase. Shows aggregate readiness scores and top critical findings; detailed analysis and remediation require Premium. Requires a Cutline account (free). 3 scans/month.",
|
|
7907
7907
|
inputSchema: {
|
|
7908
7908
|
type: "object",
|
|
7909
7909
|
properties: {
|
|
7910
|
-
|
|
7911
|
-
|
|
7912
|
-
|
|
7913
|
-
task_description: { type: "string", description: "What the user is building \u2014 provides context for the audit" },
|
|
7914
|
-
audit_mode: { type: "string", enum: ["security", "full"], description: "Audit focus: 'security' (default) or 'full' for broader product analysis" },
|
|
7915
|
-
max_file_bytes: { type: "number", description: "Max bytes to read per file (default: 50000)" },
|
|
7916
|
-
auto_start: { type: "boolean", description: "Automatically queue a deep dive job (default: true)" }
|
|
7910
|
+
project_root: { type: "string", description: "Absolute path to the workspace root to scan" },
|
|
7911
|
+
task_description: { type: "string", description: "Optional context about what you're building" },
|
|
7912
|
+
max_file_bytes: { type: "number", description: "Max bytes to read per file (default: 50000)" }
|
|
7917
7913
|
},
|
|
7918
|
-
required: ["
|
|
7914
|
+
required: ["project_root"]
|
|
7919
7915
|
}
|
|
7920
7916
|
},
|
|
7921
7917
|
{
|
|
7922
7918
|
name: "engineering_audit",
|
|
7923
|
-
description: "\u{
|
|
7919
|
+
description: "\u{1F512} PREMIUM - Engineering audit for your product. Security-focused deep audit that scans local code, cross-references the product constraint graph, extracts security gaps, builds an RGR remediation plan, and optionally queues a deep dive job.",
|
|
7924
7920
|
inputSchema: {
|
|
7925
7921
|
type: "object",
|
|
7926
7922
|
properties: {
|
|
7927
|
-
|
|
7928
|
-
|
|
7929
|
-
|
|
7923
|
+
product_id: { type: "string", description: "Product ID from .cutline/config.json" },
|
|
7924
|
+
project_root: { type: "string", description: "Absolute path to the workspace root" },
|
|
7925
|
+
file_paths: { type: "array", items: { type: "string" }, description: "Specific files to audit (overrides automatic scan selection)" },
|
|
7926
|
+
task_description: { type: "string", description: "What the user is building \u2014 provides context for the audit" },
|
|
7927
|
+
audit_mode: { type: "string", enum: ["security", "full"], description: "Audit focus: 'security' (default) or 'full' for broader product analysis" },
|
|
7928
|
+
max_file_bytes: { type: "number", description: "Max bytes to read per file (default: 50000)" },
|
|
7929
|
+
auto_start: { type: "boolean", description: "Automatically queue a deep dive job (default: true)" }
|
|
7930
7930
|
},
|
|
7931
|
-
required: ["project_root"]
|
|
7931
|
+
required: ["product_id", "project_root"]
|
|
7932
7932
|
}
|
|
7933
7933
|
}
|
|
7934
7934
|
]
|
|
@@ -8214,7 +8214,7 @@ Why AI: ${idea.whyAI}`
|
|
|
8214
8214
|
const text = await cfGenerateTrialRun(prompt);
|
|
8215
8215
|
return { content: [{ type: "text", text: JSON.stringify({ text }) }] };
|
|
8216
8216
|
}
|
|
8217
|
-
if (name2 === "
|
|
8217
|
+
if (name2 === "code_audit") {
|
|
8218
8218
|
const scanArgs = args;
|
|
8219
8219
|
if (!scanArgs.project_root) {
|
|
8220
8220
|
throw new McpError(ErrorCode.InvalidParams, "project_root is required");
|
|
@@ -8250,9 +8250,9 @@ Why AI: ${idea.whyAI}`
|
|
|
8250
8250
|
updateGraphMetadata: (pid, patch) => updateGraphMetadata(pid, patch)
|
|
8251
8251
|
});
|
|
8252
8252
|
try {
|
|
8253
|
-
await recordScoreSnapshot(genericGraphId, result.metrics, "
|
|
8253
|
+
await recordScoreSnapshot(genericGraphId, result.metrics, "code_audit");
|
|
8254
8254
|
} catch (e) {
|
|
8255
|
-
console.error("[
|
|
8255
|
+
console.error("[code_audit] Score snapshot failed (non-fatal):", e);
|
|
8256
8256
|
}
|
|
8257
8257
|
let reportId;
|
|
8258
8258
|
try {
|
|
@@ -8281,7 +8281,7 @@ Why AI: ${idea.whyAI}`
|
|
|
8281
8281
|
});
|
|
8282
8282
|
reportId = saved.id;
|
|
8283
8283
|
} catch (e) {
|
|
8284
|
-
console.error("[
|
|
8284
|
+
console.error("[code_audit] Report persistence failed (non-fatal):", e);
|
|
8285
8285
|
}
|
|
8286
8286
|
return {
|
|
8287
8287
|
content: [{ type: "text", text: formatAuditOutput(result, reportId) }]
|
|
@@ -10026,7 +10026,7 @@ ${JSON.stringify(metrics, null, 2)}` }
|
|
|
10026
10026
|
``,
|
|
10027
10027
|
`1. **Plan**: \`rgr_plan(product_id: "${product_id}", file_path: "<file>")\``,
|
|
10028
10028
|
`2. **Implement**: Address constraints from the plan`,
|
|
10029
|
-
`3. **Verify**: \`
|
|
10029
|
+
`3. **Verify**: \`engineering_audit(product_id: "${product_id}", project_root: "${genProjectRoot}")\``,
|
|
10030
10030
|
`4. **Complete**: \`rgr_complete_phase(product_id: "${product_id}", phase: "<phase>")\``,
|
|
10031
10031
|
``,
|
|
10032
10032
|
`## When to use RGR`,
|
|
@@ -10052,7 +10052,7 @@ ${JSON.stringify(metrics, null, 2)}` }
|
|
|
10052
10052
|
``,
|
|
10053
10053
|
`1. **Plan**: Call \`rgr_plan(product_id: "${product_id}", file_path)\` before writing code`,
|
|
10054
10054
|
`2. **Implement**: Address constraints from the plan`,
|
|
10055
|
-
`3. **Verify**: Run \`
|
|
10055
|
+
`3. **Verify**: Run \`engineering_audit(product_id: "${product_id}", project_root)\``,
|
|
10056
10056
|
`4. **Complete**: Call \`rgr_complete_phase(product_id: "${product_id}", phase)\``,
|
|
10057
10057
|
``,
|
|
10058
10058
|
`Use RGR for: new features, security/auth, billing, API endpoints, DB schema, infra.`,
|
|
@@ -10212,9 +10212,9 @@ Meta: ${JSON.stringify({
|
|
|
10212
10212
|
};
|
|
10213
10213
|
}
|
|
10214
10214
|
// ─────────────────────────────────────────────────────────────────
|
|
10215
|
-
//
|
|
10215
|
+
// ENGINEERING_AUDIT (premium)
|
|
10216
10216
|
// ─────────────────────────────────────────────────────────────────
|
|
10217
|
-
case "
|
|
10217
|
+
case "engineering_audit": {
|
|
10218
10218
|
const auditArgs = args;
|
|
10219
10219
|
if (!auditArgs.product_id) {
|
|
10220
10220
|
throw new McpError(ErrorCode.InvalidParams, "product_id is required");
|
|
@@ -10260,7 +10260,7 @@ Meta: ${JSON.stringify({
|
|
|
10260
10260
|
const { id: newJobId } = await createPremortem({
|
|
10261
10261
|
status: "queued",
|
|
10262
10262
|
payload: { ...runInput, productId: void 0 },
|
|
10263
|
-
source: "
|
|
10263
|
+
source: "engineering_audit",
|
|
10264
10264
|
mode: "product",
|
|
10265
10265
|
codeContext: payload.codeContext || null
|
|
10266
10266
|
});
|
|
@@ -10270,7 +10270,7 @@ Meta: ${JSON.stringify({
|
|
|
10270
10270
|
}
|
|
10271
10271
|
});
|
|
10272
10272
|
const sections = [
|
|
10273
|
-
`##
|
|
10273
|
+
`## Engineering Audit Complete
|
|
10274
10274
|
`,
|
|
10275
10275
|
result.url ? `**Deep Dive Queued** \u2192 [View Results](${result.url})
|
|
10276
10276
|
` : `*Deep dive not started (auto_start=false)*
|
|
@@ -10370,10 +10370,10 @@ These constraints will now fire via \`constraints_auto\` when you edit matched f
|
|
|
10370
10370
|
const nextPhase = rgrPhases[0];
|
|
10371
10371
|
sections.push(`Active issues found. Start the RGR cycle:`);
|
|
10372
10372
|
sections.push(`1. **Fix** the top findings above`);
|
|
10373
|
-
sections.push(`2. **Verify** by re-running \`
|
|
10373
|
+
sections.push(`2. **Verify** by re-running \`engineering_audit\``);
|
|
10374
10374
|
sections.push(`3. **Complete** the phase: \`rgr_complete_phase(product_id, phase: "${nextPhase.label}")\``);
|
|
10375
10375
|
} else if (failCount > 0) {
|
|
10376
|
-
sections.push(`Active issues found. Fix them, then re-run \`
|
|
10376
|
+
sections.push(`Active issues found. Fix them, then re-run \`engineering_audit\` to verify.`);
|
|
10377
10377
|
sections.push(`When clean, call \`rgr_complete_phase(product_id, phase: "security")\` to update scores.`);
|
|
10378
10378
|
} else {
|
|
10379
10379
|
sections.push(`No active issues. Call \`rgr_complete_phase(product_id, phase: "security")\` to record progress.`);
|
|
@@ -10389,7 +10389,7 @@ These constraints will now fire via \`constraints_auto\` when you edit matched f
|
|
|
10389
10389
|
await updateGraphMetadata(auditArgs.product_id, {
|
|
10390
10390
|
metrics: auditMetrics
|
|
10391
10391
|
});
|
|
10392
|
-
await recordScoreSnapshot(auditArgs.product_id, auditMetrics, "
|
|
10392
|
+
await recordScoreSnapshot(auditArgs.product_id, auditMetrics, "engineering_audit");
|
|
10393
10393
|
await updatePremortem(auditArgs.product_id, { metrics: auditMetrics });
|
|
10394
10394
|
} catch (e) {
|
|
10395
10395
|
console.error("Metrics recompute after code audit failed (non-fatal):", e);
|
package/mcpb/manifest.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"display_name": "Cutline — Engineering Guardrails",
|
|
5
5
|
"version": "0.5.0",
|
|
6
6
|
"description": "Security, reliability, and scalability constraints for your coding agent. Free code audits with 9 compliance frameworks built in.",
|
|
7
|
-
"long_description": "Cutline is a guardrail middleware for AI coding agents. It extracts non-functional requirements (security, scalability, reliability) from your ideas and injects them as structured constraints into your agent's context. Includes free
|
|
7
|
+
"long_description": "Cutline is a guardrail middleware for AI coding agents. It extracts non-functional requirements (security, scalability, reliability) from your ideas and injects them as structured constraints into your agent's context. Includes free code audits (3/month), SOC 2 / PCI-DSS / HIPAA / GDPR / OWASP LLM Top 10 compliance frameworks, pre-mortem risk analysis, and a Red-Green-Refactor workflow for systematic remediation.",
|
|
8
8
|
"author": {
|
|
9
9
|
"name": "Cutline",
|
|
10
10
|
"url": "https://thecutline.ai"
|
|
@@ -35,11 +35,11 @@
|
|
|
35
35
|
"tools": [
|
|
36
36
|
{
|
|
37
37
|
"name": "engineering_audit",
|
|
38
|
-
"description": "
|
|
38
|
+
"description": "Premium deep, product-linked engineering audit with RGR remediation planning"
|
|
39
39
|
},
|
|
40
40
|
{
|
|
41
41
|
"name": "code_audit",
|
|
42
|
-
"description": "
|
|
42
|
+
"description": "Free security, reliability, and scalability code audit of your codebase (3/month)"
|
|
43
43
|
},
|
|
44
44
|
{
|
|
45
45
|
"name": "constraints_auto",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kylewadegrove/cutline-mcp-cli",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.4",
|
|
4
4
|
"description": "CLI and MCP servers for Cutline — authenticate, then run constraint-aware MCP servers in Cursor or any MCP client.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
package/server.json
CHANGED
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"categories": ["security", "infrastructure", "developer-tools"],
|
|
36
36
|
"compliance_frameworks": ["SOC 2", "PCI-DSS", "HIPAA", "GDPR/CCPA", "OWASP LLM Top 10", "FedRAMP", "GLBA", "FERPA/COPPA"],
|
|
37
37
|
"free_tier": true,
|
|
38
|
-
"free_tools": ["
|
|
38
|
+
"free_tools": ["code_audit", "exploration_start", "exploration_chat", "exploration_graduate", "llm_status", "perf_status"],
|
|
39
39
|
"tool_count": 54
|
|
40
40
|
}
|
|
41
41
|
}
|