@openintentai/mcp-server 0.13.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/dist/client.js ADDED
@@ -0,0 +1,470 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OpenIntentClient = exports.OpenIntentAPIError = void 0;
4
+ const security_js_1 = require("./security.js");
5
+ class OpenIntentAPIError extends Error {
6
+ statusCode;
7
+ body;
8
+ constructor(message, statusCode, body) {
9
+ super(message);
10
+ this.statusCode = statusCode;
11
+ this.body = body;
12
+ this.name = "OpenIntentAPIError";
13
+ }
14
+ }
15
+ exports.OpenIntentAPIError = OpenIntentAPIError;
16
+ /**
17
+ * Thin HTTP client that calls the OpenIntent REST API.
18
+ * Uses the built-in `fetch` available in Node 18+.
19
+ */
20
+ class OpenIntentClient {
21
+ baseUrl;
22
+ headers;
23
+ timeoutMs;
24
+ retries;
25
+ retryDelay;
26
+ auditLogging;
27
+ config;
28
+ constructor(config) {
29
+ this.baseUrl = config.server.url.replace(/\/+$/, "");
30
+ this.headers = {
31
+ "Content-Type": "application/json",
32
+ "X-API-Key": config.server.api_key,
33
+ "X-Agent-ID": config.server.agent_id,
34
+ };
35
+ this.timeoutMs = config.network.timeout;
36
+ this.retries = config.network.retries;
37
+ this.retryDelay = config.network.retry_delay;
38
+ this.auditLogging = config.security.audit_logging;
39
+ this.config = config;
40
+ }
41
+ async request(method, path, body, extraHeaders) {
42
+ const url = `${this.baseUrl}${path}`;
43
+ (0, security_js_1.enforceTransport)(url, this.config);
44
+ const maxTimeout = this.config.security.max_timeout * 1000;
45
+ const effectiveTimeout = Math.min(this.timeoutMs, maxTimeout);
46
+ let lastError;
47
+ for (let attempt = 0; attempt <= this.retries; attempt++) {
48
+ const start = Date.now();
49
+ try {
50
+ const controller = new AbortController();
51
+ const timer = setTimeout(() => controller.abort(), effectiveTimeout);
52
+ const res = await fetch(url, {
53
+ method,
54
+ headers: { ...this.headers, ...extraHeaders },
55
+ body: body !== undefined ? JSON.stringify(body) : undefined,
56
+ signal: controller.signal,
57
+ });
58
+ clearTimeout(timer);
59
+ const duration = Date.now() - start;
60
+ const responseBody = res.headers.get("content-type")?.includes("application/json")
61
+ ? await res.json()
62
+ : await res.text();
63
+ if (this.auditLogging) {
64
+ const entry = (0, security_js_1.createAuditEntry)(`${method} ${path}`, { status: res.status }, res.ok ? "success" : "error", duration, this.config.server.agent_id);
65
+ process.stderr.write(`[audit] ${JSON.stringify(entry)}\n`);
66
+ }
67
+ if (!res.ok) {
68
+ const msg = typeof responseBody === "object" && responseBody !== null
69
+ ? responseBody.message ?? res.statusText
70
+ : res.statusText;
71
+ throw new OpenIntentAPIError(String(msg), res.status, responseBody);
72
+ }
73
+ return responseBody;
74
+ }
75
+ catch (err) {
76
+ lastError = err;
77
+ if (err instanceof OpenIntentAPIError && err.statusCode < 500) {
78
+ throw err;
79
+ }
80
+ if (attempt < this.retries) {
81
+ await new Promise((r) => setTimeout(r, this.retryDelay * (attempt + 1)));
82
+ }
83
+ }
84
+ }
85
+ throw lastError ?? new Error("Request failed after retries");
86
+ }
87
+ // ── Intent CRUD ──────────────────────────────────────────────────────
88
+ async createIntent(params) {
89
+ return this.request("POST", "/api/v1/intents", {
90
+ title: params.title,
91
+ description: params.description ?? "",
92
+ constraints: params.constraints ?? [],
93
+ state: params.initial_state ?? {},
94
+ created_by: this.config.server.agent_id,
95
+ });
96
+ }
97
+ async getIntent(intentId) {
98
+ return this.request("GET", `/api/v1/intents/${intentId}`);
99
+ }
100
+ async listIntents(params) {
101
+ const query = new URLSearchParams();
102
+ if (params?.status)
103
+ query.set("status", params.status);
104
+ if (params?.limit !== undefined)
105
+ query.set("limit", String(params.limit));
106
+ if (params?.offset !== undefined)
107
+ query.set("offset", String(params.offset));
108
+ const qs = query.toString();
109
+ return this.request("GET", `/api/v1/intents${qs ? `?${qs}` : ""}`);
110
+ }
111
+ async updateState(params) {
112
+ const patches = Object.entries(params.state_patch).map(([path, value]) => ({
113
+ op: "set",
114
+ path,
115
+ value,
116
+ }));
117
+ return this.request("POST", `/api/v1/intents/${params.intent_id}/state`, { patches }, { "If-Match": String(params.version) });
118
+ }
119
+ async setStatus(params) {
120
+ return this.request("POST", `/api/v1/intents/${params.intent_id}/status`, { status: params.status }, { "If-Match": String(params.version) });
121
+ }
122
+ // ── Events ───────────────────────────────────────────────────────────
123
+ async logEvent(params) {
124
+ return this.request("POST", `/api/v1/intents/${params.intent_id}/events`, {
125
+ event_type: params.event_type,
126
+ actor: this.config.server.agent_id,
127
+ payload: params.payload ?? {},
128
+ });
129
+ }
130
+ async getEvents(params) {
131
+ const query = new URLSearchParams();
132
+ if (params.event_type)
133
+ query.set("event_type", params.event_type);
134
+ if (params.limit !== undefined)
135
+ query.set("limit", String(params.limit));
136
+ const qs = query.toString();
137
+ return this.request("GET", `/api/v1/intents/${params.intent_id}/events${qs ? `?${qs}` : ""}`);
138
+ }
139
+ // ── Leasing ──────────────────────────────────────────────────────────
140
+ async acquireLease(params) {
141
+ return this.request("POST", `/api/v1/intents/${params.intent_id}/leases`, {
142
+ scope: params.scope,
143
+ duration_seconds: params.duration_seconds ?? 300,
144
+ });
145
+ }
146
+ async releaseLease(params) {
147
+ return this.request("DELETE", `/api/v1/intents/${params.intent_id}/leases/${params.lease_id}`);
148
+ }
149
+ // ── Agent Management ─────────────────────────────────────────────────
150
+ async assignAgent(params) {
151
+ return this.request("POST", `/api/v1/intents/${params.intent_id}/agents`, {
152
+ agent_id: params.agent_id,
153
+ role: params.role ?? "worker",
154
+ });
155
+ }
156
+ async unassignAgent(params) {
157
+ return this.request("DELETE", `/api/v1/intents/${params.intent_id}/agents/${params.agent_id}`);
158
+ }
159
+ // ── Messaging (RFC-0021) ─────────────────────────────────────────────
160
+ async createChannel(params) {
161
+ return this.request("POST", `/api/v1/intents/${params.intent_id}/channels`, {
162
+ name: params.name,
163
+ members: params.members ?? [this.config.server.agent_id],
164
+ member_policy: params.member_policy ?? "explicit",
165
+ options: params.options ?? {},
166
+ });
167
+ }
168
+ async sendMessage(params) {
169
+ return this.request("POST", `/api/v1/channels/${params.channel_id}/messages`, {
170
+ sender: this.config.server.agent_id,
171
+ message_type: params.message_type ?? "message",
172
+ payload: params.payload,
173
+ to: params.to,
174
+ });
175
+ }
176
+ async askOnChannel(params) {
177
+ return this.request("POST", `/api/v1/channels/${params.channel_id}/ask`, {
178
+ sender: this.config.server.agent_id,
179
+ to: params.to,
180
+ payload: params.payload,
181
+ timeout: params.timeout ?? 30,
182
+ });
183
+ }
184
+ async broadcastOnChannel(params) {
185
+ return this.request("POST", `/api/v1/channels/${params.channel_id}/messages`, {
186
+ sender: this.config.server.agent_id,
187
+ message_type: "broadcast",
188
+ payload: params.payload,
189
+ });
190
+ }
191
+ async getChannelMessages(params) {
192
+ const query = new URLSearchParams();
193
+ if (params.limit !== undefined)
194
+ query.set("limit", String(params.limit));
195
+ const qs = query.toString();
196
+ return this.request("GET", `/api/v1/channels/${params.channel_id}/messages${qs ? `?${qs}` : ""}`);
197
+ }
198
+ // ── Workflows (RFC-0011) ──────────────────────────────────────────
199
+ async createWorkflow(params) {
200
+ return this.request("POST", "/api/v1/workflows", {
201
+ name: params.name,
202
+ yaml_spec: params.yaml_spec,
203
+ description: params.description ?? "",
204
+ created_by: this.config.server.agent_id,
205
+ });
206
+ }
207
+ async triggerWorkflow(params) {
208
+ return this.request("POST", `/api/v1/workflows/${params.workflow_id}/trigger`, {
209
+ inputs: params.inputs ?? {},
210
+ triggered_by: this.config.server.agent_id,
211
+ });
212
+ }
213
+ async getWorkflow(workflowId) {
214
+ return this.request("GET", `/api/v1/workflows/${workflowId}`);
215
+ }
216
+ async listWorkflows(params) {
217
+ const query = new URLSearchParams();
218
+ if (params?.limit !== undefined)
219
+ query.set("limit", String(params.limit));
220
+ if (params?.offset !== undefined)
221
+ query.set("offset", String(params.offset));
222
+ const qs = query.toString();
223
+ return this.request("GET", `/api/v1/workflows${qs ? `?${qs}` : ""}`);
224
+ }
225
+ // ── Plans (RFC-0012) ──────────────────────────────────────────────
226
+ async createPlan(params) {
227
+ return this.request("POST", `/api/v1/intents/${params.intent_id}/plans`, {
228
+ title: params.title,
229
+ steps: params.steps,
230
+ created_by: this.config.server.agent_id,
231
+ });
232
+ }
233
+ async decomposeTask(params) {
234
+ return this.request("POST", `/api/v1/intents/${params.intent_id}/plans/decompose`, {
235
+ task_description: params.task_description,
236
+ max_depth: params.max_depth ?? 3,
237
+ requested_by: this.config.server.agent_id,
238
+ });
239
+ }
240
+ async getPlan(params) {
241
+ return this.request("GET", `/api/v1/intents/${params.intent_id}/plans/${params.plan_id}`);
242
+ }
243
+ // ── Governance (RFC-0013) ─────────────────────────────────────────
244
+ async setCoordinator(params) {
245
+ return this.request("POST", `/api/v1/intents/${params.intent_id}/coordinator`, {
246
+ coordinator_id: params.coordinator_id,
247
+ governance_policy: params.governance_policy ?? "default",
248
+ set_by: this.config.server.agent_id,
249
+ });
250
+ }
251
+ async recordDecision(params) {
252
+ return this.request("POST", `/api/v1/intents/${params.intent_id}/decisions`, {
253
+ decision_type: params.decision_type,
254
+ rationale: params.rationale,
255
+ outcome: params.outcome,
256
+ decided_by: this.config.server.agent_id,
257
+ });
258
+ }
259
+ async getArbitration(params) {
260
+ return this.request("GET", `/api/v1/intents/${params.intent_id}/arbitration`);
261
+ }
262
+ // ── Human Escalation (RFC-0013) ────────────────────────────────────
263
+ async escalateToHuman(params) {
264
+ const mapped = this.mapPriority(params.priority ?? "normal");
265
+ return this.request("POST", `/api/v1/intents/${params.intent_id}/escalations`, {
266
+ reason: params.reason,
267
+ priority: mapped,
268
+ urgency: mapped,
269
+ context: params.context ?? {},
270
+ escalated_by: this.config.server.agent_id,
271
+ });
272
+ }
273
+ mapPriority(p) {
274
+ return p === "normal" ? "medium" : p;
275
+ }
276
+ async listEscalations(params) {
277
+ const qs = new URLSearchParams();
278
+ if (params.intent_id)
279
+ qs.set("intent_id", params.intent_id);
280
+ if (params.status)
281
+ qs.set("status", params.status);
282
+ if (params.limit !== undefined)
283
+ qs.set("limit", String(params.limit));
284
+ if (params.offset !== undefined)
285
+ qs.set("offset", String(params.offset));
286
+ const query = qs.toString();
287
+ return this.request("GET", `/api/v1/escalations${query ? `?${query}` : ""}`);
288
+ }
289
+ async resolveEscalation(params) {
290
+ return this.request("POST", `/api/v1/escalations/${params.escalation_id}/resolve`, {
291
+ resolution: params.resolution,
292
+ notes: JSON.stringify(params.decision),
293
+ resolved_by: this.config.server.agent_id,
294
+ });
295
+ }
296
+ async requestApproval(params) {
297
+ const context = { ...(params.metadata ?? {}) };
298
+ if (params.urgency) {
299
+ context.urgency = this.mapPriority(params.urgency);
300
+ }
301
+ return this.request("POST", `/api/v1/intents/${params.intent_id}/approvals`, {
302
+ action: params.action_description,
303
+ reason: params.action_description,
304
+ context,
305
+ requested_by: this.config.server.agent_id,
306
+ });
307
+ }
308
+ async getApprovalStatus(params) {
309
+ return this.request("GET", `/api/v1/intents/${params.intent_id}/approvals/${params.approval_id}`);
310
+ }
311
+ // ── Portfolios (RFC-0004) ─────────────────────────────────────────
312
+ async createPortfolio(params) {
313
+ return this.request("POST", "/api/v1/portfolios", {
314
+ name: params.name,
315
+ description: params.description ?? "",
316
+ created_by: this.config.server.agent_id,
317
+ });
318
+ }
319
+ async addToPortfolio(params) {
320
+ return this.request("POST", `/api/v1/portfolios/${params.portfolio_id}/intents`, {
321
+ intent_id: params.intent_id,
322
+ });
323
+ }
324
+ async getPortfolio(portfolioId) {
325
+ return this.request("GET", `/api/v1/portfolios/${portfolioId}`);
326
+ }
327
+ // ── Access Control (RFC-0011) ─────────────────────────────────────
328
+ async setPermissions(params) {
329
+ return this.request("PUT", `/api/v1/intents/${params.intent_id}/permissions`, { permissions: params.permissions }, { "If-Match": String(params.version) });
330
+ }
331
+ async getPermissions(params) {
332
+ return this.request("GET", `/api/v1/intents/${params.intent_id}/permissions`);
333
+ }
334
+ async grantAccess(params) {
335
+ return this.request("POST", `/api/v1/intents/${params.intent_id}/permissions/grants`, {
336
+ agent_id: params.agent_id,
337
+ level: params.level,
338
+ scopes: params.scopes ?? ["*"],
339
+ granted_by: this.config.server.agent_id,
340
+ });
341
+ }
342
+ // ── Credential Vaults (RFC-0014) ──────────────────────────────────
343
+ async storeCredential(params) {
344
+ return this.request("POST", `/api/v1/vaults/${params.vault_id}/credentials`, {
345
+ name: params.credential_name,
346
+ credential_type: params.credential_type,
347
+ metadata: params.metadata ?? {},
348
+ stored_by: this.config.server.agent_id,
349
+ });
350
+ }
351
+ async getCredential(params) {
352
+ return this.request("GET", `/api/v1/vaults/${params.vault_id}/credentials/${params.credential_name}`);
353
+ }
354
+ async grantTool(params) {
355
+ return this.request("POST", `/api/v1/intents/${params.intent_id}/tools/grants`, {
356
+ agent_id: params.agent_id,
357
+ tool_name: params.tool_name,
358
+ constraints: params.constraints ?? {},
359
+ granted_by: this.config.server.agent_id,
360
+ });
361
+ }
362
+ // ── Agent Memory (RFC-0015) ───────────────────────────────────────
363
+ async memorySet(params) {
364
+ return this.request("PUT", `/api/v1/agents/${params.agent_id}/memory/${params.namespace}/${params.key}`, {
365
+ value: params.value,
366
+ ttl_seconds: params.ttl_seconds,
367
+ });
368
+ }
369
+ async memoryGet(params) {
370
+ return this.request("GET", `/api/v1/agents/${params.agent_id}/memory/${params.namespace}/${params.key}`);
371
+ }
372
+ async memoryList(params) {
373
+ const path = params.namespace
374
+ ? `/api/v1/agents/${params.agent_id}/memory/${params.namespace}`
375
+ : `/api/v1/agents/${params.agent_id}/memory`;
376
+ return this.request("GET", path);
377
+ }
378
+ // ── Agent Lifecycle (RFC-0016) ────────────────────────────────────
379
+ async heartbeat(params) {
380
+ return this.request("POST", `/api/v1/agents/${params.agent_id}/heartbeat`, {
381
+ status: params.status ?? "healthy",
382
+ metadata: params.metadata ?? {},
383
+ });
384
+ }
385
+ async getHealth(params) {
386
+ return this.request("GET", `/api/v1/agents/${params.agent_id}/health`);
387
+ }
388
+ async setAgentStatus(params) {
389
+ return this.request("PUT", `/api/v1/agents/${params.agent_id}/status`, {
390
+ status: params.status,
391
+ reason: params.reason ?? "",
392
+ });
393
+ }
394
+ // ── Triggers (RFC-0017) ───────────────────────────────────────────
395
+ async createTrigger(params) {
396
+ return this.request("POST", `/api/v1/intents/${params.intent_id}/triggers`, {
397
+ name: params.name ?? "",
398
+ trigger_type: params.trigger_type,
399
+ condition: params.condition,
400
+ action: params.action,
401
+ created_by: this.config.server.agent_id,
402
+ });
403
+ }
404
+ async listTriggers(params) {
405
+ return this.request("GET", `/api/v1/intents/${params.intent_id}/triggers`);
406
+ }
407
+ async deleteTrigger(params) {
408
+ return this.request("DELETE", `/api/v1/intents/${params.intent_id}/triggers/${params.trigger_id}`);
409
+ }
410
+ // ── Cryptographic Identity (RFC-0018) ─────────────────────────────
411
+ async registerIdentity(params) {
412
+ return this.request("POST", "/api/v1/identity/register", {
413
+ agent_id: params.agent_id,
414
+ public_key: params.public_key,
415
+ key_type: params.key_type ?? "ed25519",
416
+ });
417
+ }
418
+ async verifyChallenge(params) {
419
+ return this.request("POST", "/api/v1/identity/verify", {
420
+ agent_id: params.agent_id,
421
+ challenge: params.challenge,
422
+ signature: params.signature,
423
+ });
424
+ }
425
+ async rotateKey(params) {
426
+ return this.request("POST", `/api/v1/identity/${params.agent_id}/rotate`, {
427
+ new_public_key: params.new_public_key,
428
+ rotation_proof: params.rotation_proof,
429
+ });
430
+ }
431
+ // ── Verifiable Event Logs (RFC-0019) ──────────────────────────────
432
+ async getHashChain(params) {
433
+ const query = new URLSearchParams();
434
+ if (params.from_sequence !== undefined)
435
+ query.set("from", String(params.from_sequence));
436
+ if (params.to_sequence !== undefined)
437
+ query.set("to", String(params.to_sequence));
438
+ const qs = query.toString();
439
+ return this.request("GET", `/api/v1/intents/${params.intent_id}/events/hashchain${qs ? `?${qs}` : ""}`);
440
+ }
441
+ async verifyInclusion(params) {
442
+ return this.request("GET", `/api/v1/intents/${params.intent_id}/events/${params.event_id}/proof`);
443
+ }
444
+ async getCheckpoint(params) {
445
+ const path = params.checkpoint_id
446
+ ? `/api/v1/intents/${params.intent_id}/events/checkpoints/${params.checkpoint_id}`
447
+ : `/api/v1/intents/${params.intent_id}/events/checkpoints/latest`;
448
+ return this.request("GET", path);
449
+ }
450
+ // ── Distributed Tracing (RFC-0020) ────────────────────────────────
451
+ async startTrace(params) {
452
+ return this.request("POST", `/api/v1/intents/${params.intent_id}/traces`, {
453
+ trace_name: params.trace_name,
454
+ parent_trace_id: params.parent_trace_id,
455
+ metadata: params.metadata ?? {},
456
+ started_by: this.config.server.agent_id,
457
+ });
458
+ }
459
+ async getTrace(params) {
460
+ return this.request("GET", `/api/v1/intents/${params.intent_id}/traces/${params.trace_id}`);
461
+ }
462
+ async linkSpans(params) {
463
+ return this.request("POST", `/api/v1/traces/${params.trace_id}/spans`, {
464
+ spans: params.spans,
465
+ linked_by: this.config.server.agent_id,
466
+ });
467
+ }
468
+ }
469
+ exports.OpenIntentClient = OpenIntentClient;
470
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ export type MCPRole = "reader" | "operator" | "admin";
2
+ export declare const VALID_ROLES: MCPRole[];
3
+ export interface ServerConfig {
4
+ url: string;
5
+ api_key: string;
6
+ agent_id: string;
7
+ }
8
+ export interface SecurityConfig {
9
+ tls_required: boolean;
10
+ allowed_tools: string[] | null;
11
+ role: MCPRole;
12
+ max_timeout: number;
13
+ audit_logging: boolean;
14
+ }
15
+ export interface NetworkConfig {
16
+ timeout: number;
17
+ retries: number;
18
+ retry_delay: number;
19
+ }
20
+ export interface MCPConfig {
21
+ server: ServerConfig;
22
+ security: SecurityConfig;
23
+ network: NetworkConfig;
24
+ }
25
+ /**
26
+ * Load MCP server configuration.
27
+ *
28
+ * Precedence for the security role (highest → lowest):
29
+ * 1. ``OPENINTENT_MCP_ROLE`` env var — explicit per-process override
30
+ * 2. ``security.role`` in config file — explicit file config
31
+ * 3. Built-in default — ``"reader"`` (least privilege)
32
+ *
33
+ * The env var takes precedence because the SDK's {@link MCPTool} sets it
34
+ * explicitly on each child process, giving every agent its own isolated
35
+ * role without ambient env leaking upward. When running standalone
36
+ * (e.g. Claude Desktop) the env var is the primary configuration knob.
37
+ *
38
+ * Connection-related env vars (URL, API key, agent ID) always override
39
+ * file config for convenience.
40
+ */
41
+ export declare function loadConfig(): MCPConfig;
42
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAEtD,eAAO,MAAM,WAAW,EAAE,OAAO,EAAoC,CAAC;AAEtE,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,aAAa,CAAC;CACxB;AAkDD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,IAAI,SAAS,CA+CtC"}
package/dist/config.js ADDED
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VALID_ROLES = void 0;
4
+ exports.loadConfig = loadConfig;
5
+ const fs_1 = require("fs");
6
+ exports.VALID_ROLES = ["reader", "operator", "admin"];
7
+ function loadFileConfig(path) {
8
+ try {
9
+ const raw = (0, fs_1.readFileSync)(path, "utf-8");
10
+ return JSON.parse(raw);
11
+ }
12
+ catch {
13
+ return {};
14
+ }
15
+ }
16
+ function deepMerge(base, override) {
17
+ const result = { ...base };
18
+ for (const key of Object.keys(override)) {
19
+ const val = override[key];
20
+ if (val !== undefined && val !== null && typeof val === "object" && !Array.isArray(val)) {
21
+ result[key] = {
22
+ ...(result[key] ?? {}),
23
+ ...val,
24
+ };
25
+ }
26
+ else if (val !== undefined) {
27
+ result[key] = val;
28
+ }
29
+ }
30
+ return result;
31
+ }
32
+ /**
33
+ * Validate and normalise an MCP role string. Returns a valid
34
+ * {@link MCPRole} or falls back to ``"reader"`` (least privilege)
35
+ * when the value is unrecognised.
36
+ */
37
+ function validateRole(raw, source) {
38
+ const normalised = raw.trim().toLowerCase();
39
+ if (exports.VALID_ROLES.includes(normalised)) {
40
+ if (normalised === "admin") {
41
+ console.warn(`[openintent-mcp] WARNING: role "${normalised}" (from ${source}) ` +
42
+ `grants full access — ensure this is intentional.`);
43
+ }
44
+ return normalised;
45
+ }
46
+ console.warn(`[openintent-mcp] WARNING: unknown role "${raw}" (from ${source}), ` +
47
+ `falling back to "reader" (least privilege).`);
48
+ return "reader";
49
+ }
50
+ /**
51
+ * Load MCP server configuration.
52
+ *
53
+ * Precedence for the security role (highest → lowest):
54
+ * 1. ``OPENINTENT_MCP_ROLE`` env var — explicit per-process override
55
+ * 2. ``security.role`` in config file — explicit file config
56
+ * 3. Built-in default — ``"reader"`` (least privilege)
57
+ *
58
+ * The env var takes precedence because the SDK's {@link MCPTool} sets it
59
+ * explicitly on each child process, giving every agent its own isolated
60
+ * role without ambient env leaking upward. When running standalone
61
+ * (e.g. Claude Desktop) the env var is the primary configuration knob.
62
+ *
63
+ * Connection-related env vars (URL, API key, agent ID) always override
64
+ * file config for convenience.
65
+ */
66
+ function loadConfig() {
67
+ const defaults = {
68
+ server: {
69
+ url: "http://localhost:8000",
70
+ api_key: "",
71
+ agent_id: "mcp-agent",
72
+ },
73
+ security: {
74
+ tls_required: false,
75
+ allowed_tools: null,
76
+ role: "reader",
77
+ max_timeout: 120,
78
+ audit_logging: true,
79
+ },
80
+ network: {
81
+ timeout: 30_000,
82
+ retries: 3,
83
+ retry_delay: 1_000,
84
+ },
85
+ };
86
+ const configPath = process.env.OPENINTENT_MCP_CONFIG;
87
+ const fileConfig = configPath ? loadFileConfig(configPath) : {};
88
+ const config = deepMerge(defaults, fileConfig);
89
+ if (process.env.OPENINTENT_SERVER_URL) {
90
+ config.server.url = process.env.OPENINTENT_SERVER_URL;
91
+ }
92
+ if (process.env.OPENINTENT_API_KEY) {
93
+ config.server.api_key = process.env.OPENINTENT_API_KEY;
94
+ }
95
+ if (process.env.OPENINTENT_AGENT_ID) {
96
+ config.server.agent_id = process.env.OPENINTENT_AGENT_ID;
97
+ }
98
+ if (process.env.OPENINTENT_MCP_ROLE) {
99
+ config.security.role = validateRole(process.env.OPENINTENT_MCP_ROLE, "OPENINTENT_MCP_ROLE env var");
100
+ }
101
+ else if (fileConfig.security?.role) {
102
+ config.security.role = validateRole(fileConfig.security.role, "config file");
103
+ }
104
+ return config;
105
+ }
106
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}