@atbash/atbash-mcp 0.0.6-dev.1 → 0.0.7

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.
Files changed (2) hide show
  1. package/dist/index.js +32 -82
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  // src/index.ts
4
- import { loadAgent, setupTelemetry, shutdownTelemetry } from "@atbash/sdk";
4
+ import { Atbash, setupTelemetry, shutdownTelemetry } from "@atbash/sdk";
5
5
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6
6
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
7
7
 
@@ -41,25 +41,15 @@ function registerSafetyPrompt(server2) {
41
41
  }
42
42
 
43
43
  // src/resources/policy.ts
44
- function registerPolicyResource(server2, agent2, endpoint2) {
44
+ function registerPolicyResource(server2, client2) {
45
45
  void server2;
46
- void agent2;
47
- void endpoint2;
48
- return;
46
+ void client2;
49
47
  }
50
48
 
51
49
  // src/tools/judge.ts
52
- import { Atbash } from "@atbash/sdk";
53
50
  import { z as z2 } from "zod";
54
51
 
55
52
  // src/utils.ts
56
- function createClientOpts(agent2, endpoint2, orgName2) {
57
- void agent2;
58
- const opts = {};
59
- if (endpoint2) opts.endpoint = endpoint2;
60
- if (orgName2) opts.orgName = orgName2;
61
- return Object.keys(opts).length > 0 ? opts : void 0;
62
- }
63
53
  function safeErrorMessage(error) {
64
54
  return error instanceof Error ? error.message : String(error);
65
55
  }
@@ -76,9 +66,7 @@ function toErrorContent(error) {
76
66
  }
77
67
 
78
68
  // src/tools/judge.ts
79
- function registerJudgeTools(server2, agent2, endpoint2, orgName2) {
80
- const opts = createClientOpts(agent2, endpoint2, orgName2);
81
- const client = new Atbash(agent2.privkey, opts);
69
+ function registerJudgeTools(server2, client2) {
82
70
  server2.registerTool(
83
71
  "atbash_judge",
84
72
  {
@@ -100,7 +88,7 @@ function registerJudgeTools(server2, agent2, endpoint2, orgName2) {
100
88
  parsedArgs = tool_args_json;
101
89
  }
102
90
  }
103
- const decision = await client.auditToolCall({
91
+ const decision = await client2.auditToolCall({
104
92
  toolName: tool_name ?? "mcp_judge",
105
93
  args: parsedArgs ?? { action },
106
94
  context: `${action} \u2014 ${context}`
@@ -140,7 +128,7 @@ function registerJudgeTools(server2, agent2, endpoint2, orgName2) {
140
128
  parsedArgs = tool_args_json;
141
129
  }
142
130
  }
143
- const result = await client.auditToolCall({
131
+ const result = await client2.auditToolCall({
144
132
  toolName: tool_name ?? "mcp_log",
145
133
  args: parsedArgs ?? { action },
146
134
  context: `${action} \u2014 ${context}`
@@ -169,8 +157,8 @@ function registerJudgeTools(server2, agent2, endpoint2, orgName2) {
169
157
  },
170
158
  async ({ pubkey }) => {
171
159
  try {
172
- const selectedPubkey = pubkey ?? agent2.pubkey;
173
- const registered = await client.checkAgentExists(selectedPubkey);
160
+ const selectedPubkey = pubkey ?? client2.pubkey;
161
+ const registered = await client2.checkAgentExists(selectedPubkey);
174
162
  return toJsonContent({ registered, pubkey: selectedPubkey });
175
163
  } catch (error) {
176
164
  return toErrorContent(error);
@@ -180,14 +168,11 @@ function registerJudgeTools(server2, agent2, endpoint2, orgName2) {
180
168
  }
181
169
 
182
170
  // src/tools/queries.ts
183
- import { Atbash as Atbash2 } from "@atbash/sdk";
184
171
  import { z as z3 } from "zod";
185
172
  function defaultMaxCount(value) {
186
173
  return value ?? 20;
187
174
  }
188
- function registerQueryTools(server2, agent2, endpoint2, orgName2) {
189
- const opts = createClientOpts(agent2, endpoint2, orgName2);
190
- const client = new Atbash2(agent2.privkey, opts);
175
+ function registerQueryTools(server2, client2) {
191
176
  server2.registerTool(
192
177
  "atbash_get_policy",
193
178
  {
@@ -198,7 +183,7 @@ function registerQueryTools(server2, agent2, endpoint2, orgName2) {
198
183
  },
199
184
  async ({ pubkey }) => {
200
185
  try {
201
- return toJsonContent(await client.getAgentPolicy(pubkey ?? agent2.pubkey));
186
+ return toJsonContent(await client2.getAgentPolicy(pubkey ?? client2.pubkey));
202
187
  } catch (error) {
203
188
  return toErrorContent(error);
204
189
  }
@@ -214,7 +199,7 @@ function registerQueryTools(server2, agent2, endpoint2, orgName2) {
214
199
  },
215
200
  async ({ pubkey }) => {
216
201
  try {
217
- return toJsonContent(await client.getAgentDetail(pubkey ?? agent2.pubkey));
202
+ return toJsonContent(await client2.getAgentDetail(pubkey ?? client2.pubkey));
218
203
  } catch (error) {
219
204
  return toErrorContent(error);
220
205
  }
@@ -230,7 +215,7 @@ function registerQueryTools(server2, agent2, endpoint2, orgName2) {
230
215
  },
231
216
  async ({ max_count }) => {
232
217
  try {
233
- return toJsonContent(await client.getToolCalls(defaultMaxCount(max_count)));
218
+ return toJsonContent(await client2.getToolCalls(defaultMaxCount(max_count)));
234
219
  } catch (error) {
235
220
  return toErrorContent(error);
236
221
  }
@@ -248,7 +233,7 @@ function registerQueryTools(server2, agent2, endpoint2, orgName2) {
248
233
  async ({ pubkey, max_count }) => {
249
234
  try {
250
235
  return toJsonContent(
251
- await client.getAgentToolCalls(pubkey ?? agent2.pubkey, defaultMaxCount(max_count))
236
+ await client2.getAgentToolCalls(pubkey ?? client2.pubkey, defaultMaxCount(max_count))
252
237
  );
253
238
  } catch (error) {
254
239
  return toErrorContent(error);
@@ -266,7 +251,7 @@ function registerQueryTools(server2, agent2, endpoint2, orgName2) {
266
251
  },
267
252
  async ({ org_name, max_count }) => {
268
253
  try {
269
- return toJsonContent(await client.getOrgToolCalls(org_name, defaultMaxCount(max_count)));
254
+ return toJsonContent(await client2.getOrgToolCalls(org_name, defaultMaxCount(max_count)));
270
255
  } catch (error) {
271
256
  return toErrorContent(error);
272
257
  }
@@ -282,7 +267,7 @@ function registerQueryTools(server2, agent2, endpoint2, orgName2) {
282
267
  },
283
268
  async ({ tool_call_id }) => {
284
269
  try {
285
- return toJsonContent(await client.getToolCallFull(tool_call_id));
270
+ return toJsonContent(await client2.getToolCallFull(tool_call_id));
286
271
  } catch (error) {
287
272
  return toErrorContent(error);
288
273
  }
@@ -296,7 +281,7 @@ function registerQueryTools(server2, agent2, endpoint2, orgName2) {
296
281
  },
297
282
  async () => {
298
283
  try {
299
- return toJsonContent({ count: await client.getToolCallCount() });
284
+ return toJsonContent({ count: await client2.getToolCallCount() });
300
285
  } catch (error) {
301
286
  return toErrorContent(error);
302
287
  }
@@ -305,14 +290,14 @@ function registerQueryTools(server2, agent2, endpoint2, orgName2) {
305
290
  server2.registerTool(
306
291
  "atbash_get_tier_info",
307
292
  {
308
- description: "Get an organization's tier information.",
293
+ description: "Get an organization's tier and enforcement information.",
309
294
  inputSchema: z3.object({
310
295
  org_name: z3.string().describe("Organization name")
311
296
  })
312
297
  },
313
298
  async ({ org_name }) => {
314
299
  try {
315
- return toJsonContent(await client.getOrgSubscription(org_name));
300
+ return toJsonContent(await client2.getOrgTierInfo(org_name));
316
301
  } catch (error) {
317
302
  return toErrorContent(error);
318
303
  }
@@ -330,7 +315,7 @@ function registerQueryTools(server2, agent2, endpoint2, orgName2) {
330
315
  async ({ org_name, max_count }) => {
331
316
  try {
332
317
  return toJsonContent(
333
- await client.getPendingHeldActions(org_name, defaultMaxCount(max_count))
318
+ await client2.getPendingHeldActions(org_name, defaultMaxCount(max_count))
334
319
  );
335
320
  } catch (error) {
336
321
  return toErrorContent(error);
@@ -348,7 +333,7 @@ function registerQueryTools(server2, agent2, endpoint2, orgName2) {
348
333
  },
349
334
  async ({ org_name, max_count }) => {
350
335
  try {
351
- return toJsonContent(await client.getHeldActionReviews(org_name, defaultMaxCount(max_count)));
336
+ return toJsonContent(await client2.getHeldActionReviews(org_name, defaultMaxCount(max_count)));
352
337
  } catch (error) {
353
338
  return toErrorContent(error);
354
339
  }
@@ -362,7 +347,7 @@ function registerQueryTools(server2, agent2, endpoint2, orgName2) {
362
347
  },
363
348
  async () => {
364
349
  try {
365
- return toJsonContent(await client.getSafetyStats());
350
+ return toJsonContent(await client2.getSafetyStats());
366
351
  } catch (error) {
367
352
  return toErrorContent(error);
368
353
  }
@@ -372,23 +357,7 @@ function registerQueryTools(server2, agent2, endpoint2, orgName2) {
372
357
 
373
358
  // src/tools/status.ts
374
359
  import { z as z4 } from "zod";
375
- function normalizeVerdict(raw) {
376
- if (raw == null) return "No verdict";
377
- const value = String(raw).toUpperCase();
378
- if (value === "ALLOW" || value === "GREEN") return "ALLOW";
379
- if (value === "HOLD" || value === "YELLOW") return "HOLD";
380
- if (value === "BLOCK" || value === "RED") return "BLOCK";
381
- return value;
382
- }
383
- function normalizeStatus(raw) {
384
- const value = String(raw ?? "").toLowerCase();
385
- if (value === "pending" || value === "answered" || value === "error") {
386
- return value;
387
- }
388
- return "error";
389
- }
390
- function registerStatusTools(server2, defaultPubkey, endpoint2) {
391
- const baseUrl = (endpoint2 ?? "https://atbash.ai").replace(/\/$/, "");
360
+ function registerStatusTools(server2, client2) {
392
361
  server2.registerTool(
393
362
  "atbash_judgment_status",
394
363
  {
@@ -400,30 +369,8 @@ function registerStatusTools(server2, defaultPubkey, endpoint2) {
400
369
  },
401
370
  async ({ tool_call_id, agent_pubkey }) => {
402
371
  try {
403
- const pubkey = agent_pubkey ?? defaultPubkey;
404
- const url = new URL(`${baseUrl}/api/v1/judge`);
405
- url.searchParams.set("tool_call_id", tool_call_id);
406
- url.searchParams.set("agent_pubkey", pubkey);
407
- const response = await fetch(url, {
408
- method: "GET",
409
- headers: { Accept: "application/json" }
410
- });
411
- if (!response.ok) {
412
- const body = await response.text().catch(() => "");
413
- throw new Error(`API error ${response.status}: ${body || response.statusText}`);
414
- }
415
- const data = await response.json();
416
- return toJsonContent({
417
- status: normalizeStatus(data.status),
418
- verdict: normalizeVerdict(data.verdict),
419
- reason: String(data.reason ?? ""),
420
- judgmentId: String(data.judgmentId ?? tool_call_id),
421
- onChain: Boolean(data.onChain),
422
- cached: Boolean(data.cached),
423
- responseTimeMs: Number(data.responseTimeMs ?? 0),
424
- tool_call_id,
425
- agent_pubkey: pubkey
426
- });
372
+ const status = await client2.getJudgmentStatus(tool_call_id, agent_pubkey);
373
+ return toJsonContent(status);
427
374
  } catch (error) {
428
375
  return toErrorContent(error);
429
376
  }
@@ -437,21 +384,24 @@ if (!privkey) {
437
384
  console.error("ATBASH_AGENT_PRIVKEY env var is required");
438
385
  process.exit(1);
439
386
  }
440
- var agent = loadAgent(privkey);
441
387
  var endpoint = process.env.ATBASH_ENDPOINT;
442
388
  var orgName = process.env.ATBASH_ORG_NAME;
443
389
  setupTelemetry({ enabled: true, source: "plugin:mcp" });
444
390
  process.once("beforeExit", () => shutdownTelemetry());
445
391
  process.once("SIGINT", () => shutdownTelemetry().finally(() => process.exit(0)));
446
392
  process.once("SIGTERM", () => shutdownTelemetry().finally(() => process.exit(0)));
393
+ var clientOpts = {};
394
+ if (endpoint) clientOpts.endpoint = endpoint;
395
+ if (orgName) clientOpts.orgName = orgName;
396
+ var client = new Atbash(privkey, clientOpts);
447
397
  var server = new McpServer({
448
398
  name: "atbash-safety",
449
399
  version: "1.0.0"
450
400
  });
451
- registerJudgeTools(server, agent, endpoint, orgName);
452
- registerStatusTools(server, agent.pubkey, endpoint);
453
- registerQueryTools(server, agent, endpoint, orgName);
454
- registerPolicyResource(server, agent, endpoint);
401
+ registerJudgeTools(server, client);
402
+ registerStatusTools(server, client);
403
+ registerQueryTools(server, client);
404
+ registerPolicyResource(server, client);
455
405
  registerSafetyPrompt(server);
456
406
  var transport = new StdioServerTransport();
457
407
  await server.connect(transport);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atbash/atbash-mcp",
3
- "version": "0.0.6-dev.1",
3
+ "version": "0.0.7",
4
4
  "description": "Atbash safety judge exposed as a standalone MCP server",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -41,7 +41,7 @@
41
41
  "publish:dev": "node scripts/publish-dev.mjs"
42
42
  },
43
43
  "dependencies": {
44
- "@atbash/sdk": "0.5.3-dev.0",
44
+ "@atbash/sdk": "0.5.4",
45
45
  "@modelcontextprotocol/sdk": "^1.12.3",
46
46
  "zod": "^3.25.76"
47
47
  },