@geostack/arc-mcp-adapter 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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 GEOstack
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,66 @@
1
+ # @geostack/arc-mcp-adapter
2
+
3
+ MCP transport adapter for [Arc](https://www.npmjs.com/package/@geostack/arc). It exposes your Arc-protected actions as MCP tools and routes every tool call back through Arc policy, approvals, signed execution, and audit.
4
+
5
+ MCP answers "what tools can the agent call?" Arc answers "should this specific action run right now?" This adapter is the bridge. It never executes app business logic, never approves actions, and never bypasses policy.
6
+
7
+ ## Install
8
+
9
+ ```sh
10
+ npm install @geostack/arc-mcp-adapter
11
+ ```
12
+
13
+ ## What it does
14
+
15
+ - Authenticates to Arc with `ARC_AGENT_TOKEN`
16
+ - Fetches Arc action definitions for your app (`ARC_APP_SLUG` or `ARC_APP_ID`)
17
+ - Maps each Arc action to an MCP tool (same name, Arc input schema, risk level + default decision in the description)
18
+ - Creates an Arc invocation for every MCP tool call and returns allowed / pending-approval / blocked
19
+ - Fails closed when config is missing or Arc is unavailable; redacts token-like strings from returned errors
20
+
21
+ ## Configure
22
+
23
+ ```sh
24
+ export ARC_API_URL=https://your-arc-api
25
+ export ARC_AGENT_TOKEN=<agent-token> # from a secret store; never commit
26
+ export ARC_APP_SLUG=<app-slug> # or ARC_APP_ID
27
+ ```
28
+
29
+ ## Run (stdio MCP server)
30
+
31
+ ```sh
32
+ arc-mcp-adapter config # print sanitized config
33
+ arc-mcp-adapter start # start the MCP stdio server
34
+ ```
35
+
36
+ Example MCP client entry:
37
+
38
+ ```json
39
+ {
40
+ "mcpServers": {
41
+ "arc": {
42
+ "command": "arc-mcp-adapter",
43
+ "args": ["start"],
44
+ "env": {
45
+ "ARC_API_URL": "https://your-arc-api",
46
+ "ARC_AGENT_TOKEN": "<agent-token>",
47
+ "ARC_APP_SLUG": "<app-slug>"
48
+ }
49
+ }
50
+ }
51
+ }
52
+ ```
53
+
54
+ ## Decision behavior
55
+
56
+ - **allow** — Arc returns the invocation (typically queued for signed execution). The adapter never fakes execution.
57
+ - **ask** — returns "requires approval in Arc." A human approves through the Arc approval flow; the adapter never auto-approves and never converts ask to allow.
58
+ - **block** — terminal. The adapter returns blocked and never calls app handlers.
59
+
60
+ Idempotency is preserved: pass `_meta.arc_idempotency_key` (or `_meta["arc/idempotency-key"]`), otherwise the adapter generates one. Arc audit remains the system of record.
61
+
62
+ See the [Arc package](https://www.npmjs.com/package/@geostack/arc) for the full action-authority model.
63
+
64
+ ## License
65
+
66
+ MIT
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/cli.js ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import { pathToFileURL } from "node:url";
3
+ import { main } from "./index.js";
4
+ if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
5
+ const code = await main();
6
+ process.exitCode = code;
7
+ }
8
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/E,MAAM,IAAI,GAAG,MAAM,IAAI,EAAE,CAAC;IAC1B,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,127 @@
1
+ export type ArcMcpDefaultDecision = "allow" | "ask" | "block";
2
+ export type ArcMcpRiskLevel = "high" | "low" | "medium";
3
+ export type JsonObject = Record<string, unknown>;
4
+ export type FetchLike = (input: string | URL, init?: RequestInit) => Promise<Response>;
5
+ export type ArcActionDefinition = {
6
+ defaultDecision: ArcMcpDefaultDecision;
7
+ description?: string;
8
+ enabled?: boolean;
9
+ input: JsonObject;
10
+ name: string;
11
+ risk: ArcMcpRiskLevel;
12
+ };
13
+ export type ArcActionDefinitions = Record<string, ArcActionDefinition>;
14
+ export type ArcActionSyncItem = {
15
+ default_decision: ArcMcpDefaultDecision;
16
+ description: string | null;
17
+ enabled: boolean;
18
+ input_schema: JsonObject;
19
+ key: string;
20
+ name: string;
21
+ risk_level: ArcMcpRiskLevel;
22
+ };
23
+ export type ArcMcpActionDefinition = ArcActionSyncItem & {
24
+ app_id?: string;
25
+ created_at?: string;
26
+ id?: string;
27
+ updated_at?: string;
28
+ };
29
+ export type ArcMcpActionSource = ArcMcpActionDefinition[] | ArcActionDefinitions | Record<string, ArcMcpActionDefinition>;
30
+ export type ArcMcpAdapterOptions = {
31
+ actions?: ArcMcpActionSource;
32
+ agentToken?: string;
33
+ appId?: string;
34
+ appSlug?: string;
35
+ arcApiUrl?: string;
36
+ fetch?: FetchLike;
37
+ idempotencyKeyFactory?: () => string;
38
+ serverName?: string;
39
+ };
40
+ export type ArcMcpToolDefinition = {
41
+ description: string;
42
+ inputSchema: JsonObject;
43
+ name: string;
44
+ title: string;
45
+ };
46
+ export type ArcMcpInvocationResult = {
47
+ approval_id: string | null;
48
+ decision: string | null;
49
+ idempotency_key: string;
50
+ invocation_id: string | null;
51
+ message: string;
52
+ result: unknown;
53
+ status: "blocked" | "error" | "executed" | "pending_approval" | "queued";
54
+ };
55
+ export type ArcMcpToolCallOptions = {
56
+ idempotencyKey?: string;
57
+ };
58
+ export type McpContentBlock = {
59
+ text: string;
60
+ type: "text";
61
+ };
62
+ export type McpCallToolResult = {
63
+ content: McpContentBlock[];
64
+ isError?: boolean;
65
+ structuredContent?: unknown;
66
+ };
67
+ type JsonRpcResponse = {
68
+ id: number | string | null;
69
+ jsonrpc: "2.0";
70
+ result: unknown;
71
+ } | {
72
+ error: {
73
+ code: number;
74
+ message: string;
75
+ };
76
+ id: number | string | null;
77
+ jsonrpc: "2.0";
78
+ };
79
+ export declare class ArcMcpError extends Error {
80
+ readonly code: string;
81
+ constructor(code: string, message: string);
82
+ }
83
+ export declare class ArcMcpConfigurationError extends ArcMcpError {
84
+ constructor(message: string);
85
+ }
86
+ export declare class ArcMcpAdapter {
87
+ readonly options: ArcMcpAdapterOptions;
88
+ private readonly client;
89
+ private readonly configuredActions;
90
+ private readonly idempotencyKeyFactory;
91
+ constructor(options?: ArcMcpAdapterOptions);
92
+ static fromEnv(env?: NodeJS.ProcessEnv, overrides?: Omit<ArcMcpAdapterOptions, "agentToken" | "appId" | "appSlug" | "arcApiUrl" | "serverName">): ArcMcpAdapter;
93
+ get serverName(): string;
94
+ safeConfig(): Record<string, unknown>;
95
+ listTools(): Promise<ArcMcpToolDefinition[]>;
96
+ callTool(name: string, input: unknown, options?: ArcMcpToolCallOptions): Promise<ArcMcpInvocationResult>;
97
+ createMcpServer(): ArcMcpJsonRpcServer;
98
+ startStdio(input?: NodeJS.ReadStream & {
99
+ fd: 0;
100
+ }, output?: NodeJS.WriteStream & {
101
+ fd: 1;
102
+ }): Promise<void>;
103
+ private loadActions;
104
+ private loadRuntimeActions;
105
+ private requiredConfig;
106
+ private requiredInvokeConfig;
107
+ }
108
+ export declare class ArcMcpJsonRpcServer {
109
+ private readonly adapter;
110
+ constructor(adapter: ArcMcpAdapter);
111
+ handleMessage(message: unknown): Promise<JsonRpcResponse | null>;
112
+ startStdio(input?: NodeJS.ReadStream & {
113
+ fd: 0;
114
+ }, output?: NodeJS.WriteStream & {
115
+ fd: 1;
116
+ }): Promise<void>;
117
+ private handleToolCall;
118
+ }
119
+ export declare function arcActionToMcpTool(action: ArcMcpActionDefinition): ArcMcpToolDefinition;
120
+ export declare function invocationResponseToMcpResult(response: unknown, idempotencyKey: string): ArcMcpInvocationResult;
121
+ export declare function mcpResult(result: ArcMcpInvocationResult): McpCallToolResult;
122
+ export declare function redactSecrets(value: string): string;
123
+ export declare function main(argv?: string[], env?: NodeJS.ProcessEnv, io?: {
124
+ stderr: Pick<NodeJS.WriteStream, "write">;
125
+ stdout: Pick<NodeJS.WriteStream, "write">;
126
+ }): Promise<number>;
127
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,626 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { createInterface } from "node:readline/promises";
3
+ import { stdin as defaultStdin, stdout as defaultStdout, stderr as defaultStderr } from "node:process";
4
+ const defaultArcApiUrl = "http://127.0.0.1:4000";
5
+ const defaultServerName = "arc-mcp";
6
+ const protocolVersion = "2025-03-26";
7
+ const secretPatterns = [
8
+ /\barc_agent_[A-Za-z0-9_-]{8,}/gu,
9
+ /\bBearer\s+[A-Za-z0-9._~+/=-]{8,}/giu,
10
+ /\b-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/gu
11
+ ];
12
+ export class ArcMcpError extends Error {
13
+ code;
14
+ constructor(code, message) {
15
+ super(message);
16
+ this.code = code;
17
+ this.name = "ArcMcpError";
18
+ }
19
+ }
20
+ export class ArcMcpConfigurationError extends ArcMcpError {
21
+ constructor(message) {
22
+ super("missing_config", message);
23
+ this.name = "ArcMcpConfigurationError";
24
+ }
25
+ }
26
+ class ArcHttpError extends Error {
27
+ status;
28
+ code;
29
+ responseBody;
30
+ constructor(status, code, message, responseBody) {
31
+ super(message);
32
+ this.status = status;
33
+ this.code = code;
34
+ this.responseBody = responseBody;
35
+ this.name = "ArcHttpError";
36
+ }
37
+ }
38
+ class ArcAgentRuntimeClient {
39
+ options;
40
+ fetchImpl;
41
+ constructor(options = {}) {
42
+ this.options = options;
43
+ this.fetchImpl = options.fetch ?? fetch;
44
+ }
45
+ async invoke(input) {
46
+ return this.request("POST", "/v1/agent/invocations", {
47
+ action_key: input.action_key,
48
+ app_id: input.app_id,
49
+ app_slug: input.app_slug,
50
+ idempotency_key: input.idempotency_key,
51
+ input: input.input
52
+ });
53
+ }
54
+ async listApps() {
55
+ const response = await this.request("GET", "/v1/agent/apps");
56
+ const data = asRecord(asRecord(response, "Arc apps response was invalid.").data, "Arc apps response was invalid.");
57
+ const apps = data.apps;
58
+ if (!Array.isArray(apps)) {
59
+ throw new ArcMcpError("invalid_arc_response", "Arc apps response was invalid.");
60
+ }
61
+ return apps.map((app) => asRecord(app, "Arc app response was invalid."));
62
+ }
63
+ async listActions(appId) {
64
+ return this.request("GET", `/v1/agent/apps/${encodeURIComponent(appId)}/actions`);
65
+ }
66
+ async request(method, path, body) {
67
+ if (!this.options.agentToken) {
68
+ throw new ArcMcpConfigurationError("ARC_AGENT_TOKEN is required.");
69
+ }
70
+ return requestJson({
71
+ baseUrl: this.options.baseUrl,
72
+ body,
73
+ fetchImpl: this.fetchImpl,
74
+ headers: {
75
+ authorization: `Bearer ${this.options.agentToken}`
76
+ },
77
+ method,
78
+ path
79
+ });
80
+ }
81
+ }
82
+ export class ArcMcpAdapter {
83
+ options;
84
+ client;
85
+ configuredActions;
86
+ idempotencyKeyFactory;
87
+ constructor(options = {}) {
88
+ this.options = options;
89
+ this.client = new ArcAgentRuntimeClient({
90
+ agentToken: options.agentToken,
91
+ baseUrl: options.arcApiUrl,
92
+ fetch: options.fetch
93
+ });
94
+ this.configuredActions = options.actions ? normalizeActionSource(options.actions) : null;
95
+ this.idempotencyKeyFactory = options.idempotencyKeyFactory ?? randomUUID;
96
+ }
97
+ static fromEnv(env = process.env, overrides = {}) {
98
+ return new ArcMcpAdapter({
99
+ ...overrides,
100
+ agentToken: env.ARC_AGENT_TOKEN,
101
+ appId: env.ARC_APP_ID,
102
+ appSlug: env.ARC_APP_SLUG,
103
+ arcApiUrl: env.ARC_API_URL,
104
+ serverName: env.ARC_MCP_SERVER_NAME
105
+ });
106
+ }
107
+ get serverName() {
108
+ return this.options.serverName?.trim() || defaultServerName;
109
+ }
110
+ safeConfig() {
111
+ return {
112
+ ARC_AGENT_TOKEN: this.options.agentToken ? "[configured]" : "[missing]",
113
+ ARC_API_URL: this.options.arcApiUrl ?? defaultArcApiUrl,
114
+ ARC_APP_ID: this.options.appId ?? null,
115
+ ARC_APP_SLUG: this.options.appSlug ?? null,
116
+ ARC_MCP_SERVER_NAME: this.serverName
117
+ };
118
+ }
119
+ async listTools() {
120
+ const actions = await this.loadActions();
121
+ return actions.map(arcActionToMcpTool);
122
+ }
123
+ async callTool(name, input, options = {}) {
124
+ const actions = await this.loadActions();
125
+ const action = actions.find((item) => item.key === name);
126
+ if (!action) {
127
+ throw new ArcMcpError("unknown_tool", `Arc action is not exposed as an MCP tool: ${name}`);
128
+ }
129
+ if (!isPlainObject(input)) {
130
+ throw new ArcMcpError("invalid_input", "MCP tool arguments must be a JSON object.");
131
+ }
132
+ const config = this.requiredInvokeConfig();
133
+ const idempotencyKey = options.idempotencyKey ?? this.idempotencyKeyFactory();
134
+ let response;
135
+ try {
136
+ response = await this.client.invoke({
137
+ action_key: action.key,
138
+ app_id: config.appId,
139
+ app_slug: config.appSlug,
140
+ idempotency_key: idempotencyKey,
141
+ input
142
+ });
143
+ }
144
+ catch (error) {
145
+ throw new ArcMcpError("arc_unavailable", safeArcFailureMessage(error));
146
+ }
147
+ return invocationResponseToMcpResult(response, idempotencyKey);
148
+ }
149
+ createMcpServer() {
150
+ return new ArcMcpJsonRpcServer(this);
151
+ }
152
+ async startStdio(input = defaultStdin, output = defaultStdout) {
153
+ await this.createMcpServer().startStdio(input, output);
154
+ }
155
+ async loadActions() {
156
+ try {
157
+ const runtimeActions = await this.loadRuntimeActions();
158
+ if (!this.configuredActions) {
159
+ return runtimeActions;
160
+ }
161
+ const configuredByKey = new Map(this.configuredActions
162
+ .filter((action) => action.enabled !== false)
163
+ .map((action) => [action.key, action]));
164
+ return runtimeActions
165
+ .filter((action) => configuredByKey.has(action.key))
166
+ .map((action) => ({
167
+ ...configuredByKey.get(action.key),
168
+ ...action
169
+ }));
170
+ }
171
+ catch (error) {
172
+ if (error instanceof ArcMcpConfigurationError) {
173
+ throw error;
174
+ }
175
+ throw new ArcMcpError("arc_unavailable", safeArcFailureMessage(error));
176
+ }
177
+ }
178
+ async loadRuntimeActions() {
179
+ const config = await this.requiredConfig();
180
+ const response = await this.client.listActions(config.appId);
181
+ return parseActionListResponse(response);
182
+ }
183
+ async requiredConfig() {
184
+ if (!this.options.agentToken) {
185
+ throw new ArcMcpConfigurationError("ARC_AGENT_TOKEN is required.");
186
+ }
187
+ if (!this.options.appId && !this.options.appSlug) {
188
+ throw new ArcMcpConfigurationError("ARC_APP_ID or ARC_APP_SLUG is required.");
189
+ }
190
+ if (this.options.appId) {
191
+ return {
192
+ appId: this.options.appId
193
+ };
194
+ }
195
+ const apps = await this.client.listApps();
196
+ const app = apps.find((item) => item.slug === this.options.appSlug || item.id === this.options.appSlug);
197
+ if (!app) {
198
+ throw new ArcMcpConfigurationError("Configured Arc app is not granted to this agent.");
199
+ }
200
+ return {
201
+ appId: app.id
202
+ };
203
+ }
204
+ requiredInvokeConfig() {
205
+ if (!this.options.agentToken) {
206
+ throw new ArcMcpConfigurationError("ARC_AGENT_TOKEN is required.");
207
+ }
208
+ if (!this.options.appId && !this.options.appSlug) {
209
+ throw new ArcMcpConfigurationError("ARC_APP_ID or ARC_APP_SLUG is required.");
210
+ }
211
+ return {
212
+ appId: this.options.appId,
213
+ appSlug: this.options.appSlug
214
+ };
215
+ }
216
+ }
217
+ export class ArcMcpJsonRpcServer {
218
+ adapter;
219
+ constructor(adapter) {
220
+ this.adapter = adapter;
221
+ }
222
+ async handleMessage(message) {
223
+ const request = asJsonRpcRequest(message);
224
+ if (!request.id && request.method?.startsWith("notifications/")) {
225
+ return null;
226
+ }
227
+ const id = request.id ?? null;
228
+ try {
229
+ switch (request.method) {
230
+ case "initialize":
231
+ return ok(id, {
232
+ capabilities: {
233
+ tools: {
234
+ listChanged: false
235
+ }
236
+ },
237
+ protocolVersion,
238
+ serverInfo: {
239
+ name: this.adapter.serverName,
240
+ version: "0.1.0"
241
+ }
242
+ });
243
+ case "ping":
244
+ return ok(id, {});
245
+ case "tools/list":
246
+ return ok(id, {
247
+ tools: await this.adapter.listTools()
248
+ });
249
+ case "tools/call":
250
+ return ok(id, await this.handleToolCall(request.params));
251
+ default:
252
+ return fail(id, -32601, "MCP method is not supported by Arc.");
253
+ }
254
+ }
255
+ catch (error) {
256
+ return fail(id, -32000, redactSecrets(error instanceof Error ? error.message : "Arc MCP failed closed."));
257
+ }
258
+ }
259
+ async startStdio(input = defaultStdin, output = defaultStdout) {
260
+ const lines = createInterface({
261
+ crlfDelay: Infinity,
262
+ input
263
+ });
264
+ for await (const line of lines) {
265
+ if (!line.trim()) {
266
+ continue;
267
+ }
268
+ let parsed;
269
+ try {
270
+ parsed = JSON.parse(line);
271
+ }
272
+ catch {
273
+ output.write(`${JSON.stringify(fail(null, -32700, "Invalid JSON-RPC message."))}\n`);
274
+ continue;
275
+ }
276
+ const response = await this.handleMessage(parsed);
277
+ if (response) {
278
+ output.write(`${JSON.stringify(response)}\n`);
279
+ }
280
+ }
281
+ }
282
+ async handleToolCall(params) {
283
+ const record = asRecord(params, "MCP tools/call params must be an object.");
284
+ const name = readString(record.name, "MCP tools/call params.name is required.");
285
+ const argumentsValue = record.arguments ?? {};
286
+ const idempotencyKey = readIdempotencyKey(record._meta);
287
+ try {
288
+ const result = await this.adapter.callTool(name, argumentsValue, {
289
+ idempotencyKey
290
+ });
291
+ return mcpResult(result);
292
+ }
293
+ catch (error) {
294
+ const message = redactSecrets(error instanceof Error ? error.message : "Arc MCP failed closed.");
295
+ return {
296
+ content: [
297
+ {
298
+ text: `Arc MCP adapter failed closed: ${message}`,
299
+ type: "text"
300
+ }
301
+ ],
302
+ isError: true,
303
+ structuredContent: {
304
+ code: error instanceof ArcMcpError ? error.code : "arc_mcp_error",
305
+ status: "error"
306
+ }
307
+ };
308
+ }
309
+ }
310
+ }
311
+ export function arcActionToMcpTool(action) {
312
+ const description = [
313
+ action.description?.trim(),
314
+ `Arc risk: ${action.risk_level}. Default Arc decision: ${action.default_decision}.`
315
+ ]
316
+ .filter(Boolean)
317
+ .join("\n\n");
318
+ return {
319
+ description,
320
+ inputSchema: normalizeInputSchema(action.input_schema),
321
+ name: action.key,
322
+ title: action.name
323
+ };
324
+ }
325
+ export function invocationResponseToMcpResult(response, idempotencyKey) {
326
+ const envelope = parseInvocationResponse(response);
327
+ const data = envelope.data;
328
+ const invocationId = data.invocation?.id ?? null;
329
+ const decision = data.decision?.decision ?? data.invocation?.decision ?? null;
330
+ const status = data.status ?? data.invocation?.status ?? null;
331
+ const invocationStatus = data.invocation?.status ?? null;
332
+ const approvalId = data.approval?.id ?? null;
333
+ if (decision === "ask") {
334
+ return {
335
+ approval_id: approvalId,
336
+ decision,
337
+ idempotency_key: idempotencyKey,
338
+ invocation_id: invocationId,
339
+ message: "This action requires approval in Arc.",
340
+ result: null,
341
+ status: "pending_approval"
342
+ };
343
+ }
344
+ if (decision === "block") {
345
+ return {
346
+ approval_id: null,
347
+ decision,
348
+ idempotency_key: idempotencyKey,
349
+ invocation_id: invocationId,
350
+ message: "Arc blocked this action by policy.",
351
+ result: null,
352
+ status: "blocked"
353
+ };
354
+ }
355
+ if (decision !== "allow") {
356
+ return failClosedInvocationResult({
357
+ decision,
358
+ idempotencyKey,
359
+ invocationId,
360
+ message: "Arc returned an unknown policy decision; action was not treated as allowed."
361
+ });
362
+ }
363
+ if (!status || (invocationStatus && status !== invocationStatus)) {
364
+ return failClosedInvocationResult({
365
+ decision,
366
+ idempotencyKey,
367
+ invocationId,
368
+ message: "Arc returned an incomplete or inconsistent invocation status; action was not treated as allowed."
369
+ });
370
+ }
371
+ if (status === "execution_succeeded") {
372
+ return {
373
+ approval_id: null,
374
+ decision,
375
+ idempotency_key: idempotencyKey,
376
+ invocation_id: invocationId,
377
+ message: "Arc allowed and completed this action through signed execution.",
378
+ result: data.invocation?.result_redacted ?? null,
379
+ status: "executed"
380
+ };
381
+ }
382
+ if (status !== "queued_for_execution") {
383
+ return failClosedInvocationResult({
384
+ decision,
385
+ idempotencyKey,
386
+ invocationId,
387
+ message: "Arc returned an unknown invocation status; action was not treated as allowed."
388
+ });
389
+ }
390
+ return {
391
+ approval_id: null,
392
+ decision,
393
+ idempotency_key: idempotencyKey,
394
+ invocation_id: invocationId,
395
+ message: "Arc allowed this action and queued it for signed execution.",
396
+ result: null,
397
+ status: "queued"
398
+ };
399
+ }
400
+ export function mcpResult(result) {
401
+ return {
402
+ content: [
403
+ {
404
+ text: result.message,
405
+ type: "text"
406
+ }
407
+ ],
408
+ isError: result.status === "error" ? true : undefined,
409
+ structuredContent: result
410
+ };
411
+ }
412
+ function failClosedInvocationResult(input) {
413
+ return {
414
+ approval_id: null,
415
+ decision: input.decision,
416
+ idempotency_key: input.idempotencyKey,
417
+ invocation_id: input.invocationId,
418
+ message: input.message,
419
+ result: null,
420
+ status: "error"
421
+ };
422
+ }
423
+ export function redactSecrets(value) {
424
+ return secretPatterns.reduce((current, pattern) => current.replace(pattern, "[REDACTED]"), value);
425
+ }
426
+ export async function main(argv = process.argv.slice(2), env = process.env, io = {
427
+ stderr: defaultStderr,
428
+ stdout: defaultStdout
429
+ }) {
430
+ const [command = "start"] = argv;
431
+ const adapter = ArcMcpAdapter.fromEnv(env);
432
+ try {
433
+ if (command === "config") {
434
+ io.stdout.write(`${JSON.stringify(adapter.safeConfig(), null, 2)}\n`);
435
+ return 0;
436
+ }
437
+ if (command === "start") {
438
+ await adapter.startStdio();
439
+ return 0;
440
+ }
441
+ io.stderr.write("Usage: arc-mcp-adapter [config|start]\n");
442
+ return 1;
443
+ }
444
+ catch (error) {
445
+ io.stderr.write(`${redactSecrets(error instanceof Error ? error.message : "Arc MCP failed closed.")}\n`);
446
+ return 1;
447
+ }
448
+ }
449
+ function normalizeActionSource(source) {
450
+ if (Array.isArray(source)) {
451
+ return source.map(normalizeActionDefinition);
452
+ }
453
+ return Object.entries(source).map(([key, action]) => {
454
+ if (isArcMcpActionDefinition(action)) {
455
+ return normalizeActionDefinition({
456
+ ...action,
457
+ key: action.key || key
458
+ });
459
+ }
460
+ return normalizeActionDefinition({
461
+ default_decision: action.defaultDecision,
462
+ description: action.description ?? null,
463
+ enabled: action.enabled ?? true,
464
+ input_schema: action.input,
465
+ key,
466
+ name: action.name,
467
+ risk_level: action.risk
468
+ });
469
+ });
470
+ }
471
+ function normalizeActionDefinition(action) {
472
+ return {
473
+ app_id: action.app_id,
474
+ default_decision: action.default_decision,
475
+ description: action.description ?? null,
476
+ enabled: action.enabled,
477
+ input_schema: normalizeInputSchema(action.input_schema),
478
+ key: action.key,
479
+ name: action.name,
480
+ risk_level: action.risk_level
481
+ };
482
+ }
483
+ function isArcMcpActionDefinition(action) {
484
+ return "input_schema" in action;
485
+ }
486
+ function normalizeInputSchema(schema) {
487
+ const copy = cloneJsonObject(schema);
488
+ if (copy.type === undefined) {
489
+ copy.type = "object";
490
+ }
491
+ if (copy.properties === undefined && copy.type === "object") {
492
+ copy.properties = {};
493
+ }
494
+ return copy;
495
+ }
496
+ function parseActionListResponse(response) {
497
+ const data = asRecord(asRecord(response, "Arc actions response was invalid.").data, "Arc actions response was invalid.");
498
+ const actions = data.actions;
499
+ if (!Array.isArray(actions)) {
500
+ throw new ArcMcpError("invalid_arc_response", "Arc actions response was invalid.");
501
+ }
502
+ return actions.map((action) => normalizeActionDefinition(asRecord(action, "Arc action response was invalid.")));
503
+ }
504
+ function parseInvocationResponse(response) {
505
+ const record = asRecord(response, "Arc invocation response was invalid.");
506
+ const data = asRecord(record.data, "Arc invocation response was invalid.");
507
+ return {
508
+ data: {
509
+ approval: maybeRecord(data.approval),
510
+ decision: maybeRecord(data.decision),
511
+ invocation: maybeRecord(data.invocation),
512
+ replayed: typeof data.replayed === "boolean" ? data.replayed : undefined,
513
+ status: typeof data.status === "string" ? data.status : undefined
514
+ }
515
+ };
516
+ }
517
+ function safeArcFailureMessage(error) {
518
+ if (error instanceof ArcMcpError) {
519
+ return error.message;
520
+ }
521
+ if (error instanceof ArcHttpError) {
522
+ return redactSecrets(`Arc rejected the request (${error.status} ${error.code}).`);
523
+ }
524
+ if (error instanceof Error) {
525
+ return redactSecrets(`Arc is unavailable; action was not sent. ${error.message}`);
526
+ }
527
+ return "Arc is unavailable; action was not sent.";
528
+ }
529
+ async function requestJson(input) {
530
+ const response = await input.fetchImpl(buildUrl(input.baseUrl, input.path), {
531
+ body: input.body === undefined ? undefined : JSON.stringify(input.body),
532
+ headers: {
533
+ accept: "application/json",
534
+ ...(input.body === undefined ? {} : { "content-type": "application/json" }),
535
+ ...input.headers
536
+ },
537
+ method: input.method
538
+ });
539
+ const text = await response.text();
540
+ const value = text ? parseJsonResponse(text) : null;
541
+ if (!response.ok) {
542
+ const serverError = asServerError(value);
543
+ throw new ArcHttpError(response.status, serverError.code, serverError.message, value);
544
+ }
545
+ return value;
546
+ }
547
+ function buildUrl(baseUrl, path) {
548
+ if (/^https?:\/\//u.test(path)) {
549
+ return path;
550
+ }
551
+ return `${trimTrailingSlash(baseUrl ?? defaultArcApiUrl)}${path.startsWith("/") ? path : `/${path}`}`;
552
+ }
553
+ function parseJsonResponse(text) {
554
+ try {
555
+ return JSON.parse(text);
556
+ }
557
+ catch {
558
+ throw new ArcMcpError("invalid_arc_response", "Arc response was not valid JSON.");
559
+ }
560
+ }
561
+ function asServerError(value) {
562
+ if (isPlainObject(value) &&
563
+ isPlainObject(value.error) &&
564
+ typeof value.error.code === "string" &&
565
+ typeof value.error.message === "string") {
566
+ return {
567
+ code: value.error.code,
568
+ message: value.error.message
569
+ };
570
+ }
571
+ return {
572
+ code: "request_failed",
573
+ message: "Arc request failed."
574
+ };
575
+ }
576
+ function readIdempotencyKey(meta) {
577
+ const record = maybeRecord(meta);
578
+ const value = record?.arc_idempotency_key ?? record?.["arc/idempotency-key"];
579
+ return typeof value === "string" && value.trim() ? value.trim() : undefined;
580
+ }
581
+ function asJsonRpcRequest(message) {
582
+ const record = asRecord(message, "Invalid JSON-RPC request.");
583
+ return record;
584
+ }
585
+ function asRecord(value, message) {
586
+ if (!isPlainObject(value)) {
587
+ throw new ArcMcpError("invalid_request", message);
588
+ }
589
+ return value;
590
+ }
591
+ function maybeRecord(value) {
592
+ return isPlainObject(value) ? value : null;
593
+ }
594
+ function readString(value, message) {
595
+ if (typeof value !== "string" || !value.trim()) {
596
+ throw new ArcMcpError("invalid_request", message);
597
+ }
598
+ return value.trim();
599
+ }
600
+ function isPlainObject(value) {
601
+ return Boolean(value && typeof value === "object" && !Array.isArray(value));
602
+ }
603
+ function cloneJsonObject(value) {
604
+ return JSON.parse(JSON.stringify(value));
605
+ }
606
+ function trimTrailingSlash(value) {
607
+ return value.replace(/\/+$/u, "");
608
+ }
609
+ function ok(id, result) {
610
+ return {
611
+ id,
612
+ jsonrpc: "2.0",
613
+ result
614
+ };
615
+ }
616
+ function fail(id, code, message) {
617
+ return {
618
+ error: {
619
+ code,
620
+ message
621
+ },
622
+ id,
623
+ jsonrpc: "2.0"
624
+ };
625
+ }
626
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "@geostack/arc-mcp-adapter",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "description": "MCP transport adapter for exposing Arc-protected actions as MCP tools.",
6
+ "license": "MIT",
7
+ "main": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ }
14
+ },
15
+ "bin": {
16
+ "arc-mcp-adapter": "./dist/cli.js"
17
+ },
18
+ "files": [
19
+ "dist"
20
+ ],
21
+ "scripts": {
22
+ "build": "tsc -p tsconfig.json && chmod +x dist/cli.js",
23
+ "typecheck": "tsc -p tsconfig.json --noEmit",
24
+ "test": "node --import tsx --test test/*.test.ts"
25
+ },
26
+ "publishConfig": {
27
+ "access": "public"
28
+ }
29
+ }