@devflow-tools/mcp-server 0.3.0 → 0.3.2

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.
@@ -0,0 +1,10 @@
1
+ import type { Decision } from "./types.js";
2
+ import type { IDataProvider } from "@devflow-tools/sdk";
3
+ export declare function hashArgs(args: Record<string, unknown>): string;
4
+ export declare function appendAuditEntry(provider: IDataProvider, toolName: string, argsHash: string, decision: Decision, ruleId: string | null, sessionId: string): Promise<void>;
5
+ export declare function verifyAuditChain(provider: IDataProvider): Promise<{
6
+ valid: boolean;
7
+ brokenAt: number | null;
8
+ }>;
9
+ export declare function rebuildAuditChain(provider: IDataProvider): Promise<void>;
10
+ //# sourceMappingURL=audit-chain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-chain.d.ts","sourceRoot":"","sources":["../../src/enforcer/audit-chain.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAG9D;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,aAAa,EACvB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAuBf;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAiBpH;AAED,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAc9E"}
@@ -0,0 +1,56 @@
1
+ import { createHmac, createHash } from "node:crypto";
2
+ export function hashArgs(args) {
3
+ const normalized = JSON.stringify(args, Object.keys(args).sort());
4
+ return createHash("sha256").update(normalized).digest("hex");
5
+ }
6
+ export async function appendAuditEntry(provider, toolName, argsHash, decision, ruleId, sessionId) {
7
+ const secret = await provider.auditGetSecret();
8
+ const allEntries = await provider.auditGetAll();
9
+ const prevHash = allEntries.length > 0
10
+ ? allEntries[allEntries.length - 1].signature
11
+ : createHash("sha256").update("genesis").digest("hex");
12
+ const ts = Date.now();
13
+ const seq = allEntries.length + 1;
14
+ const payload = `${seq}|${ts}|${toolName}|${argsHash}|${decision}|${ruleId ?? ""}|${sessionId}|${prevHash}`;
15
+ const signature = createHmac("sha256", secret).update(payload).digest("hex");
16
+ await provider.auditAppend({
17
+ seq,
18
+ ts,
19
+ tool: toolName,
20
+ argsHash,
21
+ decision,
22
+ ruleId,
23
+ sessionId,
24
+ prevHash,
25
+ signature,
26
+ });
27
+ }
28
+ export async function verifyAuditChain(provider) {
29
+ const secret = await provider.auditGetSecret();
30
+ const entries = await provider.auditGetAll();
31
+ let prevHash = createHash("sha256").update("genesis").digest("hex");
32
+ for (const entry of entries) {
33
+ if (entry.prevHash !== prevHash) {
34
+ return { valid: false, brokenAt: entry.seq };
35
+ }
36
+ const payload = `${entry.seq}|${entry.ts}|${entry.tool}|${entry.argsHash}|${entry.decision}|${entry.ruleId ?? ""}|${entry.sessionId}|${prevHash}`;
37
+ const expectedSig = createHmac("sha256", secret).update(payload).digest("hex");
38
+ if (entry.signature !== expectedSig) {
39
+ return { valid: false, brokenAt: entry.seq };
40
+ }
41
+ prevHash = entry.signature;
42
+ }
43
+ return { valid: true, brokenAt: null };
44
+ }
45
+ export async function rebuildAuditChain(provider) {
46
+ const secret = await provider.auditGetSecret();
47
+ const entries = await provider.auditGetAll();
48
+ let prevHash = createHash("sha256").update("genesis").digest("hex");
49
+ for (const entry of entries) {
50
+ const payload = `${entry.seq}|${entry.ts}|${entry.tool}|${entry.argsHash}|${entry.decision}|${entry.ruleId ?? ""}|${entry.sessionId}|${prevHash}`;
51
+ const signature = createHmac("sha256", secret).update(payload).digest("hex");
52
+ await provider.sqlExecute("UPDATE devflow_audit_chain SET prev_hash = ?, signature = ? WHERE seq = ?", [prevHash, signature, entry.seq]);
53
+ prevHash = signature;
54
+ }
55
+ }
56
+ //# sourceMappingURL=audit-chain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-chain.js","sourceRoot":"","sources":["../../src/enforcer/audit-chain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Rule } from "./types.js";
2
+ export declare const CONSTITUTIONAL_RULES: Rule[];
3
+ //# sourceMappingURL=constitutional.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constitutional.d.ts","sourceRoot":"","sources":["../../src/enforcer/constitutional.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,eAAO,MAAM,oBAAoB,EAAE,IAAI,EAyBtC,CAAC"}
@@ -0,0 +1,27 @@
1
+ export const CONSTITUTIONAL_RULES = [
2
+ {
3
+ id: "C001",
4
+ name: "必须携带 Session Token",
5
+ level: "constitutional",
6
+ condition: { requireFields: ["_devflow_token"] },
7
+ action: "deny",
8
+ message: "缺少 Session Token。请通过 /devflow: 命令启动会话,或运行 devflow session token 获取令牌。",
9
+ },
10
+ {
11
+ id: "C002",
12
+ name: "Token 已过期",
13
+ level: "constitutional",
14
+ condition: {},
15
+ action: "deny",
16
+ message: "Session Token 已过期(超过 1 小时)。请重新运行 devflow session token 获取新令牌。",
17
+ },
18
+ {
19
+ id: "C003",
20
+ name: "速率限制",
21
+ level: "constitutional",
22
+ condition: { maxCallsPerMinute: 60 },
23
+ action: "warn",
24
+ message: "调用频率过高,请稍后重试。",
25
+ },
26
+ ];
27
+ //# sourceMappingURL=constitutional.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constitutional.js","sourceRoot":"","sources":["../../src/enforcer/constitutional.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,oBAAoB,GAAW;IAC1C;QACE,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,oBAAoB;QAC1B,KAAK,EAAE,gBAAgB;QACvB,SAAS,EAAE,EAAE,aAAa,EAAE,CAAC,gBAAgB,CAAC,EAAE;QAChD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,uEAAuE;KACjF;IACD;QACE,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,gBAAgB;QACvB,SAAS,EAAE,EAAE;QACb,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,+DAA+D;KACzE;IACD;QACE,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,gBAAgB;QACvB,SAAS,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE;QACpC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,eAAe;KACzB;CACF,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { MCPContext, EnforceResult } from "./types.js";
2
+ import type { IDataProvider } from "@devflow-tools/sdk";
3
+ import { issueReceipt } from "./receipt.js";
4
+ export declare function parseJwtPayload(token: string): Record<string, unknown> | null;
5
+ export type { MCPContext, EnforceResult };
6
+ export { verifyAuditChain, rebuildAuditChain, hashArgs } from "./audit-chain.js";
7
+ export { issueReceipt, verifyReceipt, isReceiptExpired } from "./receipt.js";
8
+ export { CONSTITUTIONAL_RULES } from "./constitutional.js";
9
+ export declare function enforce(toolName: string, args: Record<string, unknown>, provider: IDataProvider): Promise<{
10
+ result: EnforceResult;
11
+ receipt?: ReturnType<typeof issueReceipt>;
12
+ }>;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/enforcer/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAU7E;AAED,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;AAE1C,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,wBAAsB,OAAO,CAC3B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,OAAO,CAAC,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAA;CAAE,CAAC,CAuD/E"}
@@ -0,0 +1,70 @@
1
+ import { loadRules, evaluateAll } from "./rule-engine.js";
2
+ import { hashArgs, appendAuditEntry } from "./audit-chain.js";
3
+ import { issueReceipt } from "./receipt.js";
4
+ export function parseJwtPayload(token) {
5
+ try {
6
+ const parts = token.split(".");
7
+ if (parts.length !== 3)
8
+ return null;
9
+ const payloadB64 = parts[1];
10
+ const json = Buffer.from(payloadB64, "base64url").toString("utf-8");
11
+ return JSON.parse(json);
12
+ }
13
+ catch {
14
+ return null;
15
+ }
16
+ }
17
+ export { verifyAuditChain, rebuildAuditChain, hashArgs } from "./audit-chain.js";
18
+ export { issueReceipt, verifyReceipt, isReceiptExpired } from "./receipt.js";
19
+ export { CONSTITUTIONAL_RULES } from "./constitutional.js";
20
+ export async function enforce(toolName, args, provider) {
21
+ // Dual-path token injection: args first, env fallback
22
+ if (!args._devflow_token) {
23
+ const envToken = process.env.DEVFLOW_SESSION_TOKEN;
24
+ if (envToken) {
25
+ const parsed = parseJwtPayload(envToken);
26
+ if (parsed) {
27
+ args = { ...args, _devflow_token: parsed };
28
+ }
29
+ }
30
+ }
31
+ const sessionId = args._devflow_token?.sub ?? "anon";
32
+ const ctx = {
33
+ toolName,
34
+ args,
35
+ sessionId,
36
+ tokenPayload: args._devflow_token,
37
+ };
38
+ // C002: Check token expiry (hardcoded in enforce for performance — no rule lookup needed)
39
+ if (ctx.tokenPayload) {
40
+ const now = Math.floor(Date.now() / 1000);
41
+ if (ctx.tokenPayload.exp && now > ctx.tokenPayload.exp) {
42
+ const argsHash = hashArgs(args);
43
+ await appendAuditEntry(provider, toolName, argsHash, "deny", "C002", sessionId);
44
+ return {
45
+ result: {
46
+ allowed: false,
47
+ message: "Session Token 已过期(超过 1 小时)。请重新运行 devflow session token 获取新令牌。",
48
+ },
49
+ };
50
+ }
51
+ }
52
+ // Load and evaluate all rules
53
+ const rules = await loadRules(provider);
54
+ const { decision, rule } = evaluateAll(rules, ctx);
55
+ const argsHash = hashArgs(args);
56
+ await appendAuditEntry(provider, toolName, argsHash, decision, rule?.id ?? null, sessionId);
57
+ if (decision === "deny" && rule) {
58
+ return { result: { allowed: false, rule, message: rule.message } };
59
+ }
60
+ if (decision === "warn" && rule) {
61
+ const secret = await provider.auditGetSecret();
62
+ const receipt = issueReceipt(toolName, args, secret);
63
+ return { result: { allowed: true, warning: rule.message, rule }, receipt };
64
+ }
65
+ // ALLOW
66
+ const secret = await provider.auditGetSecret();
67
+ const receipt = issueReceipt(toolName, args, secret);
68
+ return { result: { allowed: true }, receipt };
69
+ }
70
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/enforcer/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Receipt } from "./types.js";
2
+ export declare function issueReceipt(toolName: string, query: unknown, secret: string): Receipt;
3
+ export declare function verifyReceipt(receipt: Receipt, toolName: string, query: unknown, secret: string): boolean;
4
+ export declare function isReceiptExpired(receipt: Receipt): boolean;
5
+ //# sourceMappingURL=receipt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receipt.d.ts","sourceRoot":"","sources":["../../src/enforcer/receipt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAI1C,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAQtF;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAOzG;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAE1D"}
@@ -0,0 +1,24 @@
1
+ import { createHmac, createHash } from "node:crypto";
2
+ const RECEIPT_TTL_MS = 30_000;
3
+ export function issueReceipt(toolName, query, secret) {
4
+ const ts = Date.now();
5
+ const exp = ts + RECEIPT_TTL_MS;
6
+ const queryHash = createHash("sha256").update(JSON.stringify(query)).digest("hex");
7
+ const payload = `${toolName}|${ts}|${exp}|${queryHash}`;
8
+ const hmac = createHmac("sha256", secret).update(payload).digest("hex");
9
+ return { tool: toolName, ts, exp, queryHash, hmac };
10
+ }
11
+ export function verifyReceipt(receipt, toolName, query, secret) {
12
+ if (Date.now() > receipt.exp)
13
+ return false;
14
+ const queryHash = createHash("sha256").update(JSON.stringify(query)).digest("hex");
15
+ if (receipt.queryHash !== queryHash)
16
+ return false;
17
+ const payload = `${toolName}|${receipt.ts}|${receipt.exp}|${queryHash}`;
18
+ const expectedHmac = createHmac("sha256", secret).update(payload).digest("hex");
19
+ return receipt.hmac === expectedHmac;
20
+ }
21
+ export function isReceiptExpired(receipt) {
22
+ return Date.now() > receipt.exp;
23
+ }
24
+ //# sourceMappingURL=receipt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receipt.js","sourceRoot":"","sources":["../../src/enforcer/receipt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGrD,MAAM,cAAc,GAAG,MAAM,CAAC;AAE9B,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,KAAc,EAAE,MAAc;IAC3E,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,MAAM,GAAG,GAAG,EAAE,GAAG,cAAc,CAAC;IAChC,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnF,MAAM,OAAO,GAAG,GAAG,QAAQ,IAAI,EAAE,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;IACxD,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAExE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAgB,EAAE,QAAgB,EAAE,KAAc,EAAE,MAAc;IAC9F,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IAC3C,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnF,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,OAAO,GAAG,GAAG,QAAQ,IAAI,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,GAAG,IAAI,SAAS,EAAE,CAAC;IACxE,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChF,OAAO,OAAO,CAAC,IAAI,KAAK,YAAY,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;AAClC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Rule, Decision, MCPContext } from "./types.js";
2
+ import type { IDataProvider } from "@devflow-tools/sdk";
3
+ export declare function loadRules(provider: IDataProvider): Promise<Rule[]>;
4
+ export declare function evaluateRule(rule: Rule, ctx: MCPContext): Decision;
5
+ export declare function evaluateAll(rules: Rule[], ctx: MCPContext): {
6
+ decision: Decision;
7
+ rule?: Rule;
8
+ };
9
+ //# sourceMappingURL=rule-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-engine.d.ts","sourceRoot":"","sources":["../../src/enforcer/rule-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAiB,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKxD,wBAAsB,SAAS,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAGxE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,GAAG,QAAQ,CAgDlE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,UAAU,GAAG;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,IAAI,CAAC,EAAE,IAAI,CAAA;CAAE,CAc/F"}
@@ -0,0 +1,67 @@
1
+ import { CONSTITUTIONAL_RULES } from "./constitutional.js";
2
+ const rateCounters = new Map();
3
+ export async function loadRules(provider) {
4
+ const projectRules = await provider.ruleGetAll();
5
+ return [...CONSTITUTIONAL_RULES, ...projectRules];
6
+ }
7
+ export function evaluateRule(rule, ctx) {
8
+ const cond = rule.condition;
9
+ // Tool filter
10
+ if (cond.tools && !cond.tools.includes("*") && !cond.tools.includes(ctx.toolName)) {
11
+ return "allow";
12
+ }
13
+ // Required fields check
14
+ if (cond.requireFields) {
15
+ for (const field of cond.requireFields) {
16
+ if (!(field in ctx.args))
17
+ return rule.action;
18
+ }
19
+ }
20
+ // Forbidden patterns check
21
+ if (cond.forbidPatterns) {
22
+ for (const pattern of cond.forbidPatterns) {
23
+ for (const val of Object.values(ctx.args)) {
24
+ if (typeof val === "string" && new RegExp(pattern).test(val)) {
25
+ return rule.action;
26
+ }
27
+ }
28
+ }
29
+ }
30
+ // Param pattern check
31
+ if (cond.paramPatterns) {
32
+ for (const [key, pattern] of Object.entries(cond.paramPatterns)) {
33
+ const val = String(ctx.args[key] ?? "");
34
+ if (new RegExp(pattern).test(val))
35
+ return rule.action;
36
+ }
37
+ }
38
+ // Rate limit check
39
+ if (cond.maxCallsPerMinute) {
40
+ const key = `${ctx.toolName}:${ctx.sessionId ?? "anon"}`;
41
+ const now = Date.now();
42
+ let entry = rateCounters.get(key);
43
+ if (!entry || now > entry.resetAt) {
44
+ entry = { count: 0, resetAt: now + 60_000 };
45
+ rateCounters.set(key, entry);
46
+ }
47
+ entry.count++;
48
+ if (entry.count > cond.maxCallsPerMinute)
49
+ return rule.action;
50
+ }
51
+ return "allow";
52
+ }
53
+ export function evaluateAll(rules, ctx) {
54
+ // Constitutional rules first (sorted by level priority)
55
+ const sorted = [...rules].sort((a, b) => {
56
+ const order = { constitutional: 0, project: 1, session: 2 };
57
+ return order[a.level] - order[b.level];
58
+ });
59
+ for (const rule of sorted) {
60
+ const decision = evaluateRule(rule, ctx);
61
+ if (decision !== "allow") {
62
+ return { decision, rule };
63
+ }
64
+ }
65
+ return { decision: "allow" };
66
+ }
67
+ //# sourceMappingURL=rule-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-engine.js","sourceRoot":"","sources":["../../src/enforcer/rule-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export type { Rule, RuleCondition, Decision, EnforceResult, MCPContext, AuditEntry, Receipt, } from "@devflow-tools/sdk";
2
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/enforcer/types.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,IAAI,EACJ,aAAa,EACb,QAAQ,EACR,aAAa,EACb,UAAU,EACV,UAAU,EACV,OAAO,GACR,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/enforcer/types.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkE1E"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+G1E"}
package/dist/server.js CHANGED
@@ -3,7 +3,9 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
3
3
  import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
4
4
  import { DevFlowApiClient, loadPlugins } from "@devflow-tools/sdk";
5
5
  import { getCoreTools, getPluginTools } from "./tools.js";
6
+ import { createHmac } from "node:crypto";
6
7
  export async function startServer(options) {
8
+ ensureSessionToken(options.projectRoot);
7
9
  const server = new Server({ name: "devflow-mcp", version: "0.1.0" }, { capabilities: { tools: {} } });
8
10
  const serverUrl = process.env.DEVFLOW_SERVER_URL ?? "http://127.0.0.1:3100";
9
11
  const apiKey = process.env.DEVFLOW_API_KEY ?? "dev-key-000000";
@@ -21,35 +23,77 @@ export async function startServer(options) {
21
23
  server.setRequestHandler(ListToolsRequestSchema, async () => ({
22
24
  tools: allTools,
23
25
  }));
26
+ // Cache the local engines reference for telemetry recording
27
+ let localEngines = null;
24
28
  server.setRequestHandler(CallToolRequestSchema, async (request) => {
25
29
  const { name, arguments: args } = request.params;
26
30
  const argObj = (args ?? {});
31
+ const startTime = Date.now();
27
32
  try {
28
33
  let result;
29
34
  if (useRemote) {
30
35
  result = await routeToServer(client, name, argObj);
31
36
  }
32
37
  else {
33
- // Dynamic import — only loads CodeGraph/better-sqlite3 when needed
34
- const [{ createEngines }, { createToolHandlers, createPluginHandlers }] = await Promise.all([
35
- import("@devflow-tools/context-engine"),
36
- import("./tools.js"),
37
- ]);
38
- const engines = await createEngines(options.projectRoot);
39
- console.error("[devflow-mcp] Warning: DevFlow server not reachable at http://localhost:3100");
40
- console.error("[devflow-mcp] Running in local mode — telemetry will not be recorded.");
41
- console.error("[devflow-mcp] Run `devflow server start` to enable full functionality.");
42
- const handlers = createToolHandlers(engines);
43
- const pHnd = createPluginHandlers(engines, plugins);
38
+ // Dynamic import — only loads CodeGraph when first needed
39
+ if (!localEngines) {
40
+ const [{ createEngines }] = await Promise.all([
41
+ import("@devflow-tools/context-engine"),
42
+ ]);
43
+ localEngines = await createEngines(options.projectRoot);
44
+ console.error(`[devflow-mcp] Warning: DevFlow server not reachable at ${serverUrl}`);
45
+ console.error("[devflow-mcp] Running in local mode.");
46
+ }
47
+ // L1: Enforcer check before execution
48
+ const { enforce } = await import("./enforcer/index.js");
49
+ const enforcement = await enforce(name, argObj, localEngines.data);
50
+ if (!enforcement.result.allowed) {
51
+ return {
52
+ content: [{ type: "text", text: JSON.stringify({
53
+ _devflow: { v: 1, tool: name, ts: Date.now(), marker: "devflow-mcp-v1" },
54
+ error: enforcement.result.message,
55
+ rule: enforcement.result.rule?.id,
56
+ }) }],
57
+ isError: true,
58
+ };
59
+ }
60
+ const { createToolHandlers, createPluginHandlers } = await import("./tools.js");
61
+ const handlers = createToolHandlers(localEngines);
62
+ const pHnd = createPluginHandlers(localEngines, plugins);
44
63
  const allHandlers = { ...handlers, ...pHnd };
45
64
  const handler = allHandlers[name];
46
65
  if (!handler)
47
66
  throw new Error(`Unknown tool: ${name}`);
48
67
  result = await handler(argObj);
68
+ // Layer 4: Record tool call in local telemetry
69
+ const durationMs = Date.now() - startTime;
70
+ try {
71
+ await localEngines.data.recordToolCall(name, argObj, durationMs);
72
+ }
73
+ catch { }
74
+ // Attach receipt and warning to result
75
+ if (enforcement.receipt) {
76
+ result = { ...result, _receipt: enforcement.receipt };
77
+ }
78
+ if (enforcement.result.warning) {
79
+ result = { ...result, _warning: enforcement.result.warning };
80
+ }
49
81
  }
50
- return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
82
+ // Layer 3: Append _devflow response marker to prove MCP tool was used
83
+ const marked = wrapWithDevflowMarker(name, result);
84
+ return { content: [{ type: "text", text: JSON.stringify(marked, null, 2) }] };
51
85
  }
52
86
  catch (err) {
87
+ // Layer 4: Record failed tool call
88
+ const durationMs = Date.now() - startTime;
89
+ if (!useRemote && localEngines) {
90
+ try {
91
+ await localEngines.data.recordToolCall(name, argObj, durationMs, err.message);
92
+ }
93
+ catch {
94
+ // Telemetry recording failure must not break error reporting
95
+ }
96
+ }
53
97
  return {
54
98
  content: [{ type: "text", text: `Error: ${err.message}` }],
55
99
  isError: true,
@@ -59,6 +103,40 @@ export async function startServer(options) {
59
103
  const transport = new StdioServerTransport();
60
104
  await server.connect(transport);
61
105
  }
106
+ function ensureSessionToken(projectRoot) {
107
+ if (process.env.DEVFLOW_SESSION_TOKEN)
108
+ return;
109
+ const header = Buffer.from(JSON.stringify({ alg: "HS256", typ: "JWT" })).toString("base64url");
110
+ const now = Math.floor(Date.now() / 1000);
111
+ const payload = {
112
+ sub: `devflow-mcp-${Date.now().toString(36)}`,
113
+ project: projectRoot.split("/").pop() ?? "unknown",
114
+ iat: now,
115
+ exp: now + 3600,
116
+ scope: ["context", "knowledge", "memory", "workflow", "graph"],
117
+ };
118
+ const payloadB64 = Buffer.from(JSON.stringify(payload)).toString("base64url");
119
+ const secret = "devflow-local-mcp-secret-v1";
120
+ const signature = createHmac("sha256", secret)
121
+ .update(`${header}.${payloadB64}`)
122
+ .digest("base64url");
123
+ process.env.DEVFLOW_SESSION_TOKEN = `${header}.${payloadB64}.${signature}`;
124
+ console.error("[devflow-mcp] Auto-generated session token (no env token provided).");
125
+ }
126
+ function wrapWithDevflowMarker(toolName, result) {
127
+ const marker = {
128
+ _devflow: {
129
+ v: 1,
130
+ tool: toolName,
131
+ ts: Date.now(),
132
+ marker: "devflow-mcp-v1",
133
+ },
134
+ };
135
+ if (result && typeof result === "object" && !Array.isArray(result)) {
136
+ return { ...result, ...marker };
137
+ }
138
+ return { result, ...marker };
139
+ }
62
140
  async function routeToServer(client, toolName, args) {
63
141
  switch (toolName) {
64
142
  case "get_project_context":
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAa,MAAM,oBAAoB,CAAC;AAEnE,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,wBAAgB,YAAY,IAAI,OAAO,EAAE,CAyGxC;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AAE/F,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,SAAS,GAAG,YAAY,CA6EnE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAqBlE;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,SAAS,EAClB,OAAO,EAAE,aAAa,EAAE,GACvB,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAcrE"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAa,MAAM,oBAAoB,CAAC;AAEnE,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,wBAAgB,YAAY,IAAI,OAAO,EAAE,CAyGxC;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AAE/F,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,SAAS,GAAG,YAAY,CA0HnE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAqBlE;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,SAAS,EAClB,OAAO,EAAE,aAAa,EAAE,GACvB,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAuBrE"}
package/dist/tools.js CHANGED
@@ -107,32 +107,77 @@ export function getCoreTools() {
107
107
  export function createToolHandlers(engines) {
108
108
  return {
109
109
  get_project_context: async ({ query, mode }) => {
110
- return engines.context.build({
110
+ const result = await engines.context.build({
111
111
  query: query,
112
112
  mode: mode ?? "fast",
113
113
  });
114
+ return {
115
+ ...result,
116
+ _devflow_unique: {
117
+ search_method: "bm25_semantic",
118
+ confidence_scored: true,
119
+ memory_injected: true,
120
+ token_estimated: true,
121
+ },
122
+ };
114
123
  },
115
124
  search_symbol: async ({ symbol }) => {
116
- return engines.indexer.findSymbol(symbol);
125
+ const result = await engines.indexer.findSymbol(symbol);
126
+ return {
127
+ ...result,
128
+ _devflow_unique: {
129
+ index_backed: true,
130
+ kind_annotated: true,
131
+ },
132
+ };
117
133
  },
118
134
  get_dependency_graph: async ({ target, depth }) => {
119
135
  const t = target ?? "all";
120
136
  const d = depth ?? 2;
121
- if (t === "all") {
122
- return engines.graph.export();
123
- }
124
- return engines.graph.getSubGraph(t, d);
137
+ const result = t === "all" ? engines.graph.export() : engines.graph.getSubGraph(t, d);
138
+ return {
139
+ ...result,
140
+ _devflow_unique: {
141
+ layer_annotated: true,
142
+ architecture_grouped: true,
143
+ query_depth: d,
144
+ },
145
+ };
125
146
  },
126
147
  run_workflow: async ({ type, input }) => {
127
- return engines.workflow.run(type, { input });
148
+ const result = await engines.workflow.run(type, { input });
149
+ return {
150
+ ...result,
151
+ _devflow_unique: {
152
+ dag_orchestrated: true,
153
+ step_tracked: true,
154
+ workflow_type: type,
155
+ },
156
+ };
128
157
  },
129
158
  get_memory: async () => {
130
- return engines.memory.getAll();
159
+ const result = await engines.memory.getAll();
160
+ return {
161
+ ...result,
162
+ _devflow_unique: {
163
+ memory_version: 1,
164
+ structured_storage: true,
165
+ project_context_included: true,
166
+ },
167
+ };
131
168
  },
132
169
  get_knowledge: async ({ query, scope }) => {
133
- return engines.knowledge.search(query, {
170
+ const result = await engines.knowledge.search(query, {
134
171
  sources: scope === "all" ? undefined : [scope],
135
172
  });
173
+ return {
174
+ ...result,
175
+ _devflow_unique: {
176
+ source_versioned: true,
177
+ code_examples_included: true,
178
+ search_scope: scope,
179
+ },
180
+ };
136
181
  },
137
182
  devflow_report_event: async (args) => {
138
183
  const truncate = (s, max) => {
@@ -213,7 +258,16 @@ export function createPluginHandlers(engines, plugins) {
213
258
  continue;
214
259
  const toolName = `${prefix}_${mcpTrigger.tool}`;
215
260
  handlers[toolName] = async (args) => {
216
- return engines.workflow.run(template.name, args);
261
+ const result = await engines.workflow.run(template.name, args);
262
+ return {
263
+ ...result,
264
+ _devflow_unique: {
265
+ dag_orchestrated: true,
266
+ step_tracked: true,
267
+ plugin_name: prefix,
268
+ template_name: template.name,
269
+ },
270
+ };
217
271
  };
218
272
  }
219
273
  }
package/dist/tools.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devflow-tools/mcp-server",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "bin": {
@@ -13,12 +13,12 @@
13
13
  "clean": "rm -rf dist"
14
14
  },
15
15
  "dependencies": {
16
- "@devflow-tools/context-engine": "^0.2.3",
17
- "@devflow-tools/knowledge-engine": "^0.2.3",
18
- "@devflow-tools/memory-engine": "^0.2.3",
19
- "@devflow-tools/sdk": "^0.2.3",
20
- "@devflow-tools/telemetry": "^0.2.3",
21
- "@devflow-tools/workflow-engine": "^0.2.3",
16
+ "@devflow-tools/context-engine": "^0.3.2",
17
+ "@devflow-tools/knowledge-engine": "^0.3.2",
18
+ "@devflow-tools/memory-engine": "^0.3.2",
19
+ "@devflow-tools/sdk": "^0.3.2",
20
+ "@devflow-tools/telemetry": "^0.3.2",
21
+ "@devflow-tools/workflow-engine": "^0.3.2",
22
22
  "@modelcontextprotocol/sdk": "^1.0.0"
23
23
  },
24
24
  "devDependencies": {
@@ -29,5 +29,5 @@
29
29
  "dist",
30
30
  "bin"
31
31
  ],
32
- "gitHead": "2d52bb1401b6501a527cac7de0f664c18bf60dcf"
32
+ "gitHead": "8bd4fe5d195782d3e5a5357fc9bff5998561c956"
33
33
  }