sovr-mcp-server 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.

Potentially problematic release.


This version of sovr-mcp-server might be problematic. Click here for more details.

Files changed (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +341 -0
  3. package/dist/api/client.d.ts +59 -0
  4. package/dist/api/client.d.ts.map +1 -0
  5. package/dist/api/client.js +162 -0
  6. package/dist/api/client.js.map +1 -0
  7. package/dist/auth/apiKey.d.ts +53 -0
  8. package/dist/auth/apiKey.d.ts.map +1 -0
  9. package/dist/auth/apiKey.js +146 -0
  10. package/dist/auth/apiKey.js.map +1 -0
  11. package/dist/cli.d.ts +10 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +59 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/crypto/ed25519.d.ts +46 -0
  16. package/dist/crypto/ed25519.d.ts.map +1 -0
  17. package/dist/crypto/ed25519.js +144 -0
  18. package/dist/crypto/ed25519.js.map +1 -0
  19. package/dist/index.d.ts +13 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +335 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/local/client.d.ts +74 -0
  24. package/dist/local/client.d.ts.map +1 -0
  25. package/dist/local/client.js +118 -0
  26. package/dist/local/client.js.map +1 -0
  27. package/dist/local/store.d.ts +127 -0
  28. package/dist/local/store.d.ts.map +1 -0
  29. package/dist/local/store.js +384 -0
  30. package/dist/local/store.js.map +1 -0
  31. package/dist/tools/auditQuery.d.ts +101 -0
  32. package/dist/tools/auditQuery.d.ts.map +1 -0
  33. package/dist/tools/auditQuery.js +136 -0
  34. package/dist/tools/auditQuery.js.map +1 -0
  35. package/dist/tools/gateCheck.d.ts +61 -0
  36. package/dist/tools/gateCheck.d.ts.map +1 -0
  37. package/dist/tools/gateCheck.js +96 -0
  38. package/dist/tools/gateCheck.js.map +1 -0
  39. package/dist/tools/grantPermit.d.ts +45 -0
  40. package/dist/tools/grantPermit.d.ts.map +1 -0
  41. package/dist/tools/grantPermit.js +121 -0
  42. package/dist/tools/grantPermit.js.map +1 -0
  43. package/dist/tools/index.d.ts +163 -0
  44. package/dist/tools/index.d.ts.map +1 -0
  45. package/dist/tools/index.js +31 -0
  46. package/dist/tools/index.js.map +1 -0
  47. package/dist/tools/killSwitch.d.ts +52 -0
  48. package/dist/tools/killSwitch.d.ts.map +1 -0
  49. package/dist/tools/killSwitch.js +85 -0
  50. package/dist/tools/killSwitch.js.map +1 -0
  51. package/dist/tools/policyList.d.ts +68 -0
  52. package/dist/tools/policyList.d.ts.map +1 -0
  53. package/dist/tools/policyList.js +96 -0
  54. package/dist/tools/policyList.js.map +1 -0
  55. package/dist/tools/requestApproval.d.ts +56 -0
  56. package/dist/tools/requestApproval.d.ts.map +1 -0
  57. package/dist/tools/requestApproval.js +97 -0
  58. package/dist/tools/requestApproval.js.map +1 -0
  59. package/dist/tools/submitReceipt.d.ts +145 -0
  60. package/dist/tools/submitReceipt.d.ts.map +1 -0
  61. package/dist/tools/submitReceipt.js +162 -0
  62. package/dist/tools/submitReceipt.js.map +1 -0
  63. package/dist/tools/systemStatus.d.ts +32 -0
  64. package/dist/tools/systemStatus.d.ts.map +1 -0
  65. package/dist/tools/systemStatus.js +67 -0
  66. package/dist/tools/systemStatus.js.map +1 -0
  67. package/dist/types/index.d.ts +146 -0
  68. package/dist/types/index.d.ts.map +1 -0
  69. package/dist/types/index.js +33 -0
  70. package/dist/types/index.js.map +1 -0
  71. package/package.json +71 -0
package/dist/index.js ADDED
@@ -0,0 +1,335 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * SOVR MCP Server
4
+ *
5
+ * Turns any AI agent into a governed executor.
6
+ * No irreversible action without a verifiable permit, audit trail, and evidence bundle.
7
+ *
8
+ * Modes:
9
+ * - Remote: Connects to SOVR API (requires SOVR_API_KEY)
10
+ * - Local: Uses in-memory storage for development/testing (SOVR_LOCAL_MODE=true)
11
+ */
12
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
13
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
14
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
15
+ import { createClient, getClient } from './api/client.js';
16
+ import { createLocalClient, getLocalClient } from './local/client.js';
17
+ import { generateKeyPair } from './crypto/ed25519.js';
18
+ import { initializeSigningKey, getPublicKey } from './tools/grantPermit.js';
19
+ // Import core tools
20
+ import { gateCheckTool, gateCheckInputSchema, formatGateCheckResponse } from './tools/gateCheck.js';
21
+ import { requestApprovalTool, requestApprovalInputSchema, formatApprovalResponse } from './tools/requestApproval.js';
22
+ import { grantPermitTool, grantPermitInputSchema, formatPermitResponse } from './tools/grantPermit.js';
23
+ import { submitReceiptTool, submitReceiptInputSchema, formatReceiptResponse } from './tools/submitReceipt.js';
24
+ // Import new tools
25
+ import { systemStatusTool, systemStatusInputSchema, formatSystemStatusResponse } from './tools/systemStatus.js';
26
+ import { killSwitchTool, killSwitchInputSchema, formatKillSwitchResponse } from './tools/killSwitch.js';
27
+ import { auditQueryTool, auditQueryInputSchema, formatAuditQueryResponse } from './tools/auditQuery.js';
28
+ import { policyListTool, policyListInputSchema, formatPolicyListResponse } from './tools/policyList.js';
29
+ function getConfig() {
30
+ const localMode = process.env.SOVR_LOCAL_MODE === 'true';
31
+ if (localMode) {
32
+ console.error('[SOVR] Running in LOCAL mode - no remote API connection');
33
+ return {
34
+ mode: 'local',
35
+ baseUrl: 'http://localhost:3000',
36
+ signingKey: process.env.SOVR_SIGNING_KEY,
37
+ };
38
+ }
39
+ const apiKey = process.env.SOVR_API_KEY;
40
+ if (!apiKey) {
41
+ console.error('Error: SOVR_API_KEY environment variable is required (or set SOVR_LOCAL_MODE=true)');
42
+ process.exit(1);
43
+ }
44
+ return {
45
+ mode: 'remote',
46
+ apiKey,
47
+ baseUrl: process.env.SOVR_API_URL || 'https://api.sovr.inc',
48
+ signingKey: process.env.SOVR_SIGNING_KEY,
49
+ };
50
+ }
51
+ // ==========================================================================
52
+ // Client Abstraction
53
+ // ==========================================================================
54
+ let isLocalMode = false;
55
+ function getActiveClient() {
56
+ return isLocalMode ? getLocalClient() : getClient();
57
+ }
58
+ // ==========================================================================
59
+ // Tool Handlers
60
+ // ==========================================================================
61
+ async function handleGateCheck(input) {
62
+ const validated = gateCheckInputSchema.parse(input);
63
+ const client = getActiveClient();
64
+ return client.gateCheck(validated);
65
+ }
66
+ async function handleRequestApproval(input) {
67
+ const validated = requestApprovalInputSchema.parse(input);
68
+ const client = getActiveClient();
69
+ return client.requestApproval(validated);
70
+ }
71
+ async function handleGrantPermit(input) {
72
+ const validated = grantPermitInputSchema.parse(input);
73
+ // Import the handler that does signing
74
+ const { handleGrantPermit: originalHandler } = await import('./tools/grantPermit.js');
75
+ return originalHandler(input);
76
+ }
77
+ async function handleSubmitReceipt(input) {
78
+ const validated = submitReceiptInputSchema.parse(input);
79
+ const client = getActiveClient();
80
+ return client.submitReceipt(validated);
81
+ }
82
+ async function handleSystemStatus(input) {
83
+ const validated = systemStatusInputSchema.parse(input);
84
+ const client = getActiveClient();
85
+ return client.getSystemStatus();
86
+ }
87
+ async function handleKillSwitch(input) {
88
+ const validated = killSwitchInputSchema.parse(input);
89
+ if (!isLocalMode) {
90
+ throw new Error('kill_switch is only available in local mode for safety');
91
+ }
92
+ const client = getLocalClient();
93
+ switch (validated.action) {
94
+ case 'status': {
95
+ const status = await client.getKillSwitchStatus();
96
+ return { active: status.active, action_taken: 'status' };
97
+ }
98
+ case 'activate': {
99
+ if (validated.confirmation !== 'CONFIRM_KILL_SWITCH') {
100
+ throw new Error('To activate kill switch, confirmation must be "CONFIRM_KILL_SWITCH"');
101
+ }
102
+ if (!validated.reason) {
103
+ throw new Error('Reason is required when activating kill switch');
104
+ }
105
+ const result = await client.setKillSwitch(true);
106
+ return {
107
+ active: true,
108
+ action_taken: 'activated',
109
+ reason: validated.reason,
110
+ changed_at: Date.now(),
111
+ };
112
+ }
113
+ case 'deactivate': {
114
+ const result = await client.setKillSwitch(false);
115
+ return {
116
+ active: false,
117
+ action_taken: 'deactivated',
118
+ reason: validated.reason,
119
+ changed_at: Date.now(),
120
+ };
121
+ }
122
+ }
123
+ }
124
+ async function handleAuditQuery(input) {
125
+ const validated = auditQueryInputSchema.parse(input);
126
+ if (!isLocalMode) {
127
+ throw new Error('audit_query is only available in local mode (remote API coming soon)');
128
+ }
129
+ const client = getLocalClient();
130
+ const result = await client.queryAudit({
131
+ decision_id: validated.decision_id,
132
+ limit: validated.limit,
133
+ offset: validated.offset,
134
+ });
135
+ // Transform to AuditQueryResult format
136
+ const records = [
137
+ ...result.decisions.map((d) => ({
138
+ type: 'decision',
139
+ id: d.decision_id,
140
+ decision_id: d.decision_id,
141
+ action: d.action,
142
+ resource: d.resource,
143
+ status: d.allowed ? 'allowed' : 'denied',
144
+ timestamp: d.checked_at,
145
+ details: d,
146
+ })),
147
+ ...result.receipts.map((r) => ({
148
+ type: 'receipt',
149
+ id: r.receipt_id,
150
+ decision_id: r.decision_id,
151
+ status: r.status,
152
+ timestamp: r.recorded_at,
153
+ details: r,
154
+ })),
155
+ ].sort((a, b) => b.timestamp - a.timestamp);
156
+ return {
157
+ total: result.total,
158
+ limit: validated.limit || 20,
159
+ offset: validated.offset || 0,
160
+ records,
161
+ };
162
+ }
163
+ async function handlePolicyList(input) {
164
+ const validated = policyListInputSchema.parse(input);
165
+ if (!isLocalMode) {
166
+ throw new Error('policy_list is only available in local mode (remote API coming soon)');
167
+ }
168
+ const client = getLocalClient();
169
+ const result = await client.listPolicies();
170
+ let policies = result.policies;
171
+ if (validated.active_only) {
172
+ policies = policies.filter(p => p.active);
173
+ }
174
+ if (validated.policy_id) {
175
+ policies = policies.filter(p => p.policy_id === validated.policy_id);
176
+ }
177
+ return {
178
+ policies: policies.map(p => ({
179
+ policy_id: p.policy_id,
180
+ name: p.name,
181
+ version: p.version,
182
+ rules: validated.include_rules ? p.rules : [],
183
+ created_at: p.created_at,
184
+ updated_at: p.updated_at,
185
+ active: p.active,
186
+ })),
187
+ total: policies.length,
188
+ };
189
+ }
190
+ // ==========================================================================
191
+ // Tool Registry
192
+ // ==========================================================================
193
+ const CORE_TOOLS = [
194
+ gateCheckTool,
195
+ requestApprovalTool,
196
+ grantPermitTool,
197
+ submitReceiptTool,
198
+ systemStatusTool,
199
+ ];
200
+ const LOCAL_ONLY_TOOLS = [
201
+ killSwitchTool,
202
+ auditQueryTool,
203
+ policyListTool,
204
+ ];
205
+ const HANDLERS = {
206
+ gate_check: handleGateCheck,
207
+ request_approval: handleRequestApproval,
208
+ grant_permit: handleGrantPermit,
209
+ submit_receipt: handleSubmitReceipt,
210
+ system_status: handleSystemStatus,
211
+ kill_switch: handleKillSwitch,
212
+ audit_query: handleAuditQuery,
213
+ policy_list: handlePolicyList,
214
+ };
215
+ const FORMATTERS = {
216
+ gate_check: (r) => formatGateCheckResponse(r),
217
+ request_approval: (r) => formatApprovalResponse(r),
218
+ grant_permit: (r) => formatPermitResponse(r),
219
+ submit_receipt: (r) => formatReceiptResponse(r),
220
+ system_status: (r) => formatSystemStatusResponse(r),
221
+ kill_switch: (r) => formatKillSwitchResponse(r),
222
+ audit_query: (r) => formatAuditQueryResponse(r),
223
+ policy_list: (r, input) => formatPolicyListResponse(r, input?.include_rules ?? false),
224
+ };
225
+ // ==========================================================================
226
+ // Server Setup
227
+ // ==========================================================================
228
+ export async function startServer() {
229
+ const config = getConfig();
230
+ isLocalMode = config.mode === 'local';
231
+ // Initialize client based on mode
232
+ if (isLocalMode) {
233
+ createLocalClient();
234
+ }
235
+ else {
236
+ createClient({
237
+ apiKey: config.apiKey,
238
+ baseUrl: config.baseUrl,
239
+ });
240
+ }
241
+ // Initialize signing key
242
+ if (config.signingKey) {
243
+ initializeSigningKey(config.signingKey);
244
+ console.error(`[SOVR] Using provided signing key. Public key: ${getPublicKey()?.slice(0, 16)}...`);
245
+ }
246
+ else {
247
+ // Generate ephemeral key for development
248
+ const keyPair = generateKeyPair();
249
+ initializeSigningKey(Array.from(keyPair.privateKey).map(b => b.toString(16).padStart(2, '0')).join(''));
250
+ console.error(`[SOVR] Generated ephemeral signing key. Public key: ${keyPair.publicKeyHex.slice(0, 16)}...`);
251
+ console.error('[SOVR] Warning: Set SOVR_SIGNING_KEY for production use.');
252
+ }
253
+ // Determine available tools
254
+ const availableTools = isLocalMode
255
+ ? [...CORE_TOOLS, ...LOCAL_ONLY_TOOLS]
256
+ : CORE_TOOLS;
257
+ // Create MCP server
258
+ const server = new Server({
259
+ name: 'sovr-mcp-server',
260
+ version: '0.2.0',
261
+ }, {
262
+ capabilities: {
263
+ tools: {},
264
+ },
265
+ });
266
+ // Handle list_tools request
267
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
268
+ return {
269
+ tools: availableTools,
270
+ };
271
+ });
272
+ // Handle call_tool request
273
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
274
+ const { name, arguments: args } = request.params;
275
+ const handler = HANDLERS[name];
276
+ if (!handler) {
277
+ throw new Error(`Unknown tool: ${name}`);
278
+ }
279
+ // Check if tool is available in current mode
280
+ const isLocalOnlyTool = LOCAL_ONLY_TOOLS.some(t => t.name === name);
281
+ if (isLocalOnlyTool && !isLocalMode) {
282
+ return {
283
+ content: [
284
+ {
285
+ type: 'text',
286
+ text: `❌ Error: ${name} is only available in local mode. Set SOVR_LOCAL_MODE=true to enable.`,
287
+ },
288
+ ],
289
+ isError: true,
290
+ };
291
+ }
292
+ try {
293
+ const result = await handler(args);
294
+ const formatter = FORMATTERS[name];
295
+ const formattedText = formatter ? formatter(result, args) : JSON.stringify(result, null, 2);
296
+ return {
297
+ content: [
298
+ {
299
+ type: 'text',
300
+ text: formattedText,
301
+ },
302
+ ],
303
+ };
304
+ }
305
+ catch (error) {
306
+ const errorMessage = error instanceof Error ? error.message : String(error);
307
+ return {
308
+ content: [
309
+ {
310
+ type: 'text',
311
+ text: `❌ Error: ${errorMessage}`,
312
+ },
313
+ ],
314
+ isError: true,
315
+ };
316
+ }
317
+ });
318
+ // Start server
319
+ const transport = new StdioServerTransport();
320
+ await server.connect(transport);
321
+ console.error('[SOVR] MCP Server started');
322
+ console.error(`[SOVR] Mode: ${config.mode.toUpperCase()}`);
323
+ if (!isLocalMode) {
324
+ console.error(`[SOVR] API endpoint: ${config.baseUrl}`);
325
+ }
326
+ console.error(`[SOVR] Available tools: ${availableTools.map(t => t.name).join(', ')}`);
327
+ }
328
+ // Auto-start when run directly (not imported)
329
+ if (process.argv[1]?.includes('index')) {
330
+ startServer().catch((error) => {
331
+ console.error('[SOVR] Fatal error:', error);
332
+ process.exit(1);
333
+ });
334
+ }
335
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * SOVR MCP Server - Local Mode Client
3
+ *
4
+ * Implements the same interface as the remote API client but uses local storage.
5
+ * Useful for development, testing, and offline scenarios.
6
+ */
7
+ import type { GateCheckResult, ApprovalResult, ReceiptResult, SystemStatus, ApiKey } from '../types/index.js';
8
+ import type { GateCheckInput } from '../tools/gateCheck.js';
9
+ import type { SubmitReceiptInput } from '../tools/submitReceipt.js';
10
+ export declare class LocalSovrClient {
11
+ private store;
12
+ constructor();
13
+ gateCheck(input: GateCheckInput): Promise<GateCheckResult>;
14
+ requestApproval(input: {
15
+ decision_id: string;
16
+ justification: string;
17
+ urgency?: 'low' | 'medium' | 'high' | 'critical';
18
+ }): Promise<ApprovalResult>;
19
+ getApprovalStatus(approvalId: string): Promise<ApprovalResult>;
20
+ submitReceipt(input: SubmitReceiptInput): Promise<ReceiptResult>;
21
+ getSystemStatus(): Promise<SystemStatus>;
22
+ validateApiKey(): Promise<ApiKey>;
23
+ getDecision(decisionId: string): Promise<GateCheckResult & {
24
+ approval?: ApprovalResult;
25
+ permit_granted?: boolean;
26
+ }>;
27
+ /**
28
+ * Approve a pending approval (local mode only)
29
+ */
30
+ approveLocal(approvalId: string, approvedBy?: string): Promise<ApprovalResult>;
31
+ /**
32
+ * Set kill switch status (local mode only)
33
+ */
34
+ setKillSwitch(active: boolean): Promise<{
35
+ success: boolean;
36
+ active: boolean;
37
+ }>;
38
+ /**
39
+ * Get kill switch status (local mode only)
40
+ */
41
+ getKillSwitchStatus(): Promise<{
42
+ active: boolean;
43
+ }>;
44
+ /**
45
+ * List policies (local mode only)
46
+ */
47
+ listPolicies(): Promise<{
48
+ policies: unknown[];
49
+ }>;
50
+ /**
51
+ * Query audit logs (local mode only)
52
+ */
53
+ queryAudit(options: {
54
+ decision_id?: string;
55
+ limit?: number;
56
+ offset?: number;
57
+ }): Promise<{
58
+ decisions: unknown[];
59
+ receipts: unknown[];
60
+ total: number;
61
+ }>;
62
+ /**
63
+ * Get stats (local mode only)
64
+ */
65
+ getStats(): Promise<{
66
+ total_decisions: number;
67
+ total_receipts: number;
68
+ pending_approvals: number;
69
+ chain_position: number;
70
+ }>;
71
+ }
72
+ export declare function createLocalClient(): LocalSovrClient;
73
+ export declare function getLocalClient(): LocalSovrClient;
74
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/local/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,aAAa,EACb,YAAY,EACZ,MAAM,EACP,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAAmB;;IAU1B,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAI1D,eAAe,CAAC,KAAK,EAAE;QAC3B,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;KAClD,GAAG,OAAO,CAAC,cAAc,CAAC;IAIrB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAI9D,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC;IAIhE,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC;IAIxC,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAajC,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG;QAC/D,QAAQ,CAAC,EAAE,cAAc,CAAC;QAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B,CAAC;IA2BF;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,GAAE,MAAsB,GAAG,OAAO,CAAC,cAAc,CAAC;IAInG;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IAKpF;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IAIzD;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC;IAItD;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,EAAE,CAAC;QAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAIzE;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC;QACxB,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CAGH;AAKD,wBAAgB,iBAAiB,IAAI,eAAe,CAGnD;AAED,wBAAgB,cAAc,IAAI,eAAe,CAKhD"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * SOVR MCP Server - Local Mode Client
3
+ *
4
+ * Implements the same interface as the remote API client but uses local storage.
5
+ * Useful for development, testing, and offline scenarios.
6
+ */
7
+ import { getLocalStore } from './store.js';
8
+ export class LocalSovrClient {
9
+ store = getLocalStore();
10
+ constructor() {
11
+ console.error('[SOVR Local] Using local mode - no remote API connection');
12
+ }
13
+ // ==========================================================================
14
+ // Core API Methods (same interface as remote client)
15
+ // ==========================================================================
16
+ async gateCheck(input) {
17
+ return this.store.gateCheck(input);
18
+ }
19
+ async requestApproval(input) {
20
+ return this.store.requestApproval(input);
21
+ }
22
+ async getApprovalStatus(approvalId) {
23
+ return this.store.getApprovalStatus(approvalId);
24
+ }
25
+ async submitReceipt(input) {
26
+ return this.store.submitReceipt(input);
27
+ }
28
+ async getSystemStatus() {
29
+ return this.store.getSystemStatus();
30
+ }
31
+ async validateApiKey() {
32
+ // In local mode, return a mock API key
33
+ return {
34
+ key_id: 'local_key',
35
+ tenant_id: 'local',
36
+ role: 'owner',
37
+ scopes: ['gate:check', 'permit:grant', 'receipt:submit', 'approval:request', 'audit:read', 'status:read'],
38
+ rate_limit: 10000,
39
+ created_at: Date.now(),
40
+ expires_at: null,
41
+ };
42
+ }
43
+ async getDecision(decisionId) {
44
+ const decision = this.store.getDecision(decisionId);
45
+ return {
46
+ decision_id: decision.decision_id,
47
+ allowed: decision.allowed,
48
+ requires_approval: decision.requires_approval,
49
+ reason: decision.reason,
50
+ risk_score: decision.risk_score,
51
+ value_score: decision.value_score,
52
+ policy_version: decision.policy_version,
53
+ checked_at: decision.checked_at,
54
+ approval: decision.approval ? {
55
+ approval_id: decision.approval.approval_id,
56
+ status: decision.approval.status,
57
+ approval_url: `http://localhost:3000/approve/${decision.approval.approval_id}`,
58
+ estimated_wait_seconds: decision.approval.status === 'pending' ? 300 : 0,
59
+ created_at: decision.approval.created_at,
60
+ expires_at: decision.approval.expires_at,
61
+ } : undefined,
62
+ permit_granted: decision.permit_granted,
63
+ };
64
+ }
65
+ // ==========================================================================
66
+ // Local-only Methods
67
+ // ==========================================================================
68
+ /**
69
+ * Approve a pending approval (local mode only)
70
+ */
71
+ async approveLocal(approvalId, approvedBy = 'local_admin') {
72
+ return this.store.approveDecision(approvalId, approvedBy);
73
+ }
74
+ /**
75
+ * Set kill switch status (local mode only)
76
+ */
77
+ async setKillSwitch(active) {
78
+ this.store.setKillSwitch(active);
79
+ return { success: true, active };
80
+ }
81
+ /**
82
+ * Get kill switch status (local mode only)
83
+ */
84
+ async getKillSwitchStatus() {
85
+ return { active: this.store.getKillSwitchStatus() };
86
+ }
87
+ /**
88
+ * List policies (local mode only)
89
+ */
90
+ async listPolicies() {
91
+ return { policies: this.store.listPolicies() };
92
+ }
93
+ /**
94
+ * Query audit logs (local mode only)
95
+ */
96
+ async queryAudit(options) {
97
+ return this.store.queryAudit(options);
98
+ }
99
+ /**
100
+ * Get stats (local mode only)
101
+ */
102
+ async getStats() {
103
+ return this.store.getStats();
104
+ }
105
+ }
106
+ // Factory
107
+ let localClientInstance = null;
108
+ export function createLocalClient() {
109
+ localClientInstance = new LocalSovrClient();
110
+ return localClientInstance;
111
+ }
112
+ export function getLocalClient() {
113
+ if (!localClientInstance) {
114
+ throw new Error('Local client not initialized. Call createLocalClient() first.');
115
+ }
116
+ return localClientInstance;
117
+ }
118
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/local/client.ts"],"names":[],"mappings":"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"}