@tethral/acr-mcp 0.2.0 → 0.4.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.
Files changed (38) hide show
  1. package/dist/src/env-detect.d.ts +10 -0
  2. package/dist/src/env-detect.js +30 -0
  3. package/dist/src/env-detect.js.map +1 -0
  4. package/dist/src/http.d.ts +2 -0
  5. package/dist/src/http.js +112 -0
  6. package/dist/src/http.js.map +1 -0
  7. package/dist/src/index.js +6 -26
  8. package/dist/src/index.js.map +1 -1
  9. package/dist/src/middleware/self-log.d.ts +22 -0
  10. package/dist/src/middleware/self-log.js +72 -0
  11. package/dist/src/middleware/self-log.js.map +1 -0
  12. package/dist/src/server.d.ts +14 -0
  13. package/dist/src/server.js +67 -0
  14. package/dist/src/server.js.map +1 -0
  15. package/dist/src/session-state.d.ts +22 -0
  16. package/dist/src/session-state.js +81 -0
  17. package/dist/src/session-state.js.map +1 -0
  18. package/dist/src/state.d.ts +0 -5
  19. package/dist/src/state.js +9 -47
  20. package/dist/src/state.js.map +1 -1
  21. package/dist/src/tools/check-entity.js +38 -1
  22. package/dist/src/tools/check-entity.js.map +1 -1
  23. package/dist/src/tools/get-friction-report.js +14 -0
  24. package/dist/src/tools/get-friction-report.js.map +1 -1
  25. package/dist/src/tools/get-my-agent.js +15 -1
  26. package/dist/src/tools/get-my-agent.js.map +1 -1
  27. package/dist/src/tools/get-skill-versions.d.ts +2 -0
  28. package/dist/src/tools/get-skill-versions.js +71 -0
  29. package/dist/src/tools/get-skill-versions.js.map +1 -0
  30. package/dist/src/tools/log-interaction.js +15 -1
  31. package/dist/src/tools/log-interaction.js.map +1 -1
  32. package/dist/src/tools/search-skills.d.ts +2 -0
  33. package/dist/src/tools/search-skills.js +59 -0
  34. package/dist/src/tools/search-skills.js.map +1 -0
  35. package/dist/src/tools/update-composition.d.ts +3 -0
  36. package/dist/src/tools/update-composition.js +54 -0
  37. package/dist/src/tools/update-composition.js.map +1 -0
  38. package/package.json +5 -4
@@ -0,0 +1,10 @@
1
+ export interface EnvironmentContext {
2
+ device_class: 'desktop' | 'server' | 'sbc' | 'mobile' | 'unknown';
3
+ platform: string;
4
+ arch: string;
5
+ client_type?: string;
6
+ transport_type: 'stdio' | 'streamable-http';
7
+ }
8
+ export declare function detectEnvironment(transportType: 'stdio' | 'streamable-http'): EnvironmentContext;
9
+ /** OS release string, useful for debugging but not stored by default. */
10
+ export declare function getOsRelease(): string;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Auto-detect execution environment for ACR observability.
3
+ * Captures device class, platform, architecture at startup.
4
+ * Env var overrides: ACR_DEVICE_CLASS, ACR_PLATFORM, ACR_ARCH.
5
+ */
6
+ import { totalmem, release } from 'node:os';
7
+ function inferDeviceClass() {
8
+ const override = process.env.ACR_DEVICE_CLASS;
9
+ if (override)
10
+ return override;
11
+ const memGB = totalmem() / (1024 ** 3);
12
+ if (memGB < 2)
13
+ return 'sbc';
14
+ if (memGB < 4)
15
+ return 'mobile';
16
+ return 'desktop';
17
+ }
18
+ export function detectEnvironment(transportType) {
19
+ return {
20
+ device_class: inferDeviceClass(),
21
+ platform: process.env.ACR_PLATFORM ?? process.platform,
22
+ arch: process.env.ACR_ARCH ?? process.arch,
23
+ transport_type: transportType,
24
+ };
25
+ }
26
+ /** OS release string, useful for debugging but not stored by default. */
27
+ export function getOsRelease() {
28
+ return release();
29
+ }
30
+ //# sourceMappingURL=env-detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-detect.js","sourceRoot":"","sources":["../../src/env-detect.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAU5C,SAAS,gBAAgB;IACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAC9C,IAAI,QAAQ;QAAE,OAAO,QAA8C,CAAC;IAEpE,MAAM,KAAK,GAAG,QAAQ,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IACvC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5B,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC/B,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,aAA0C;IAE1C,OAAO;QACL,YAAY,EAAE,gBAAgB,EAAE;QAChC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,QAAQ;QACtD,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI;QAC1C,cAAc,EAAE,aAAa;KAC9B,CAAC;AACJ,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,YAAY;IAC1B,OAAO,OAAO,EAAE,CAAC;AACnB,CAAC"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,112 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * ACR MCP server — Streamable HTTP entry point.
4
+ * For browser-based clients (claude.ai) and remote MCP connections.
5
+ * For stdio transport, see index.ts.
6
+ */
7
+ import { createServer } from 'node:http';
8
+ import { randomUUID } from 'node:crypto';
9
+ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
10
+ import { createAcrServer } from './server.js';
11
+ import { SessionState } from './session-state.js';
12
+ const PORT = parseInt(process.env.ACR_MCP_HTTP_PORT ?? '3001', 10);
13
+ const AUTH_TOKEN = process.env.ACR_MCP_AUTH_TOKEN;
14
+ const STATELESS = process.env.ACR_MCP_STATELESS === 'true';
15
+ // Track active transports per session for cleanup
16
+ const sessions = new Map();
17
+ function createTransport() {
18
+ const transport = new StreamableHTTPServerTransport({
19
+ sessionIdGenerator: STATELESS ? undefined : () => randomUUID(),
20
+ onsessioninitialized: (sessionId) => {
21
+ sessions.set(sessionId, transport);
22
+ },
23
+ });
24
+ return transport;
25
+ }
26
+ const httpServer = createServer(async (req, res) => {
27
+ const url = new URL(req.url ?? '/', `http://localhost:${PORT}`);
28
+ // CORS headers for browser access
29
+ res.setHeader('Access-Control-Allow-Origin', '*');
30
+ res.setHeader('Access-Control-Allow-Methods', 'GET, POST, DELETE, OPTIONS');
31
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization, Mcp-Session-Id');
32
+ res.setHeader('Access-Control-Expose-Headers', 'Mcp-Session-Id');
33
+ if (req.method === 'OPTIONS') {
34
+ res.writeHead(204);
35
+ res.end();
36
+ return;
37
+ }
38
+ // Health check
39
+ if (url.pathname === '/health') {
40
+ res.writeHead(200, { 'Content-Type': 'application/json' });
41
+ res.end(JSON.stringify({ status: 'ok', sessions: sessions.size }));
42
+ return;
43
+ }
44
+ // Only handle /mcp endpoint
45
+ if (url.pathname !== '/mcp') {
46
+ res.writeHead(404, { 'Content-Type': 'application/json' });
47
+ res.end(JSON.stringify({ error: 'Not found. Use /mcp for MCP protocol.' }));
48
+ return;
49
+ }
50
+ // Optional bearer auth
51
+ if (AUTH_TOKEN) {
52
+ const auth = req.headers.authorization;
53
+ if (!auth || auth !== `Bearer ${AUTH_TOKEN}`) {
54
+ res.writeHead(401, { 'Content-Type': 'application/json' });
55
+ res.end(JSON.stringify({ error: 'Unauthorized' }));
56
+ return;
57
+ }
58
+ }
59
+ // Route by session: existing session or new initialization
60
+ const sessionId = req.headers['mcp-session-id'];
61
+ if (sessionId && sessions.has(sessionId)) {
62
+ // Existing session — route to its transport
63
+ const transport = sessions.get(sessionId);
64
+ await transport.handleRequest(req, res);
65
+ return;
66
+ }
67
+ if (req.method === 'POST' && !sessionId) {
68
+ // New session — create transport with its own session state, connect server
69
+ const transport = createTransport();
70
+ const session = new SessionState('streamable-http');
71
+ const server = createAcrServer({ session });
72
+ transport.onclose = () => {
73
+ const sid = transport.sessionId;
74
+ if (sid)
75
+ sessions.delete(sid);
76
+ server.close().catch(() => { });
77
+ };
78
+ await server.connect(transport);
79
+ await transport.handleRequest(req, res);
80
+ return;
81
+ }
82
+ if (req.method === 'DELETE' && sessionId) {
83
+ // Session cleanup
84
+ const transport = sessions.get(sessionId);
85
+ if (transport) {
86
+ await transport.close();
87
+ sessions.delete(sessionId);
88
+ }
89
+ res.writeHead(200, { 'Content-Type': 'application/json' });
90
+ res.end(JSON.stringify({ closed: true }));
91
+ return;
92
+ }
93
+ // Unknown session ID
94
+ res.writeHead(404, { 'Content-Type': 'application/json' });
95
+ res.end(JSON.stringify({ error: 'Session not found' }));
96
+ });
97
+ httpServer.listen(PORT, () => {
98
+ console.error(`ACR MCP HTTP server listening on port ${PORT}`);
99
+ console.error(` Endpoint: http://localhost:${PORT}/mcp`);
100
+ console.error(` Mode: ${STATELESS ? 'stateless' : 'stateful (session-based)'}`);
101
+ if (AUTH_TOKEN)
102
+ console.error(' Auth: bearer token required');
103
+ });
104
+ // Graceful shutdown
105
+ process.on('SIGTERM', () => {
106
+ console.error('Shutting down...');
107
+ for (const transport of sessions.values()) {
108
+ transport.close().catch(() => { });
109
+ }
110
+ httpServer.close();
111
+ });
112
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/http.ts"],"names":[],"mappings":"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"}
package/dist/src/index.js CHANGED
@@ -1,32 +1,12 @@
1
1
  #!/usr/bin/env node
2
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ /**
3
+ * ACR MCP server — stdio entry point.
4
+ * For HTTP transport, see http.ts.
5
+ */
3
6
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
- import { registerAgentTool } from './tools/register-agent.js';
5
- import { logInteractionTool } from './tools/log-interaction.js';
6
- import { checkEntityTool } from './tools/check-entity.js';
7
- import { checkEnvironmentTool } from './tools/check-environment.js';
8
- import { getFrictionReportTool } from './tools/get-friction-report.js';
9
- import { getMyAgentTool } from './tools/get-my-agent.js';
10
- import { getInteractionLogTool } from './tools/get-interaction-log.js';
11
- import { getNetworkStatusTool } from './tools/get-network-status.js';
12
- import { getSkillTrackerTool } from './tools/get-skill-tracker.js';
13
- const ACR_API_URL = process.env.ACR_API_URL ?? 'https://acr.nfkey.ai';
14
- const ACR_RESOLVER_URL = process.env.ACR_RESOLVER_URL ?? ACR_API_URL;
15
- const server = new McpServer({
16
- name: 'acr-agent-registry',
17
- version: '0.2.0',
18
- description: 'Agent Composition Records — observability for AI agents. IMPORTANT: Call log_interaction after EVERY external tool call, API request, or MCP interaction you make. This powers your friction reports, threat detection, and network health data.',
19
- });
20
- registerAgentTool(server, ACR_API_URL);
21
- logInteractionTool(server, ACR_API_URL);
22
- checkEntityTool(server, ACR_API_URL, ACR_RESOLVER_URL);
23
- checkEnvironmentTool(server, ACR_API_URL, ACR_RESOLVER_URL);
24
- getFrictionReportTool(server, ACR_API_URL);
25
- getMyAgentTool(server);
26
- getInteractionLogTool(server, ACR_API_URL);
27
- getNetworkStatusTool(server, ACR_API_URL);
28
- getSkillTrackerTool(server, ACR_API_URL);
7
+ import { createAcrServer } from './server.js';
29
8
  async function main() {
9
+ const server = createAcrServer();
30
10
  const transport = new StdioServerTransport();
31
11
  await server.connect(transport);
32
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,sBAAsB,CAAC;AACtE,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,WAAW,CAAC;AAErE,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,oBAAoB;IAC1B,OAAO,EAAE,OAAO;IAChB,WAAW,EAAE,kPAAkP;CAChQ,CAAC,CAAC;AAEH,iBAAiB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AACvC,kBAAkB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AACxC,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;AACvD,oBAAoB,CAAC,MAAM,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;AAC5D,qBAAqB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAC3C,cAAc,CAAC,MAAM,CAAC,CAAC;AACvB,qBAAqB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAC3C,oBAAoB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAC1C,mBAAmB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEzC,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC;IACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC;IACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Self-logging middleware for ACR MCP tools.
3
+ * Wraps each tool handler to automatically log timing and status,
4
+ * without relying on the LLM to call log_interaction.
5
+ *
6
+ * Self-logged receipts use source='server' to distinguish from
7
+ * LLM-initiated logs (source='agent').
8
+ */
9
+ import type { SessionState } from '../session-state.js';
10
+ type ToolResult = {
11
+ content: Array<{
12
+ type: string;
13
+ text: string;
14
+ }>;
15
+ };
16
+ type ToolHandler = (params: Record<string, unknown>, extra: unknown) => Promise<ToolResult>;
17
+ /**
18
+ * Wrap a tool handler with automatic interaction logging.
19
+ * Fires a non-blocking POST to the receipts API after each call.
20
+ */
21
+ export declare function withSelfLog(toolName: string, handler: ToolHandler, getState: () => SessionState, apiUrl: string): ToolHandler;
22
+ export {};
@@ -0,0 +1,72 @@
1
+ import { defaultSession } from '../session-state.js';
2
+ // Re-entrancy guard to prevent the self-log POST from triggering another self-log
3
+ let selfLogging = false;
4
+ /**
5
+ * Wrap a tool handler with automatic interaction logging.
6
+ * Fires a non-blocking POST to the receipts API after each call.
7
+ */
8
+ export function withSelfLog(toolName, handler, getState, apiUrl) {
9
+ return async (params, extra) => {
10
+ const startMs = Date.now();
11
+ let status = 'success';
12
+ let result;
13
+ try {
14
+ result = await handler(params, extra);
15
+ }
16
+ catch (err) {
17
+ status = 'failure';
18
+ throw err;
19
+ }
20
+ finally {
21
+ // Fire-and-forget self-log (never block or fail the tool call)
22
+ if (!selfLogging) {
23
+ const durationMs = Date.now() - startMs;
24
+ const state = getState();
25
+ // Tools currently store agentId on defaultSession (via state.ts compat layer).
26
+ // Check both the provided session and defaultSession as fallback.
27
+ const agentId = state.agentId ?? defaultSession.agentId;
28
+ if (agentId) {
29
+ selfLogging = true;
30
+ fireAndForgetLog(apiUrl, agentId, toolName, status, durationMs, state.transportType)
31
+ .finally(() => { selfLogging = false; });
32
+ }
33
+ }
34
+ }
35
+ return result;
36
+ };
37
+ }
38
+ async function fireAndForgetLog(apiUrl, agentId, toolName, status, durationMs, transportType) {
39
+ try {
40
+ const controller = new AbortController();
41
+ const timeout = setTimeout(() => controller.abort(), 2000);
42
+ const res = await fetch(`${apiUrl}/api/v1/receipts`, {
43
+ method: 'POST',
44
+ headers: { 'Content-Type': 'application/json' },
45
+ signal: controller.signal,
46
+ body: JSON.stringify({
47
+ emitter: {
48
+ agent_id: agentId,
49
+ provider_class: 'unknown',
50
+ },
51
+ target: {
52
+ system_id: `mcp:acr-registry`,
53
+ system_type: 'mcp_server',
54
+ },
55
+ interaction: {
56
+ category: 'tool_call',
57
+ status,
58
+ duration_ms: durationMs,
59
+ request_timestamp_ms: Date.now() - durationMs,
60
+ },
61
+ anomaly: { flagged: false },
62
+ transport_type: transportType,
63
+ source: 'server',
64
+ }),
65
+ });
66
+ clearTimeout(timeout);
67
+ }
68
+ catch {
69
+ // Silently ignore — self-logging must never break tool calls
70
+ }
71
+ }
72
+ //# sourceMappingURL=self-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-log.js","sourceRoot":"","sources":["../../../src/middleware/self-log.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAKrD,kFAAkF;AAClF,IAAI,WAAW,GAAG,KAAK,CAAC;AAExB;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,QAAgB,EAChB,OAAoB,EACpB,QAA4B,EAC5B,MAAc;IAEd,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,IAAI,MAAM,GAA0B,SAAS,CAAC;QAC9C,IAAI,MAAkB,CAAC;QAEvB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,SAAS,CAAC;YACnB,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,+DAA+D;YAC/D,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;gBACxC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;gBACzB,+EAA+E;gBAC/E,kEAAkE;gBAClE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC;gBAExD,IAAI,OAAO,EAAE,CAAC;oBACZ,WAAW,GAAG,IAAI,CAAC;oBACnB,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC;yBACjF,OAAO,CAAC,GAAG,EAAE,GAAG,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAO,CAAC;IACjB,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,MAAc,EACd,OAAe,EACf,QAAgB,EAChB,MAAc,EACd,UAAkB,EAClB,aAAqB;IAErB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;QAE3D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,kBAAkB,EAAE;YACnD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,OAAO,EAAE;oBACP,QAAQ,EAAE,OAAO;oBACjB,cAAc,EAAE,SAAS;iBAC1B;gBACD,MAAM,EAAE;oBACN,SAAS,EAAE,kBAAkB;oBAC7B,WAAW,EAAE,YAAY;iBAC1B;gBACD,WAAW,EAAE;oBACX,QAAQ,EAAE,WAAW;oBACrB,MAAM;oBACN,WAAW,EAAE,UAAU;oBACvB,oBAAoB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU;iBAC9C;gBACD,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;gBAC3B,cAAc,EAAE,aAAa;gBAC7B,MAAM,EAAE,QAAQ;aACjB,CAAC;SACH,CAAC,CAAC;QAEH,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,6DAA6D;IAC/D,CAAC;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Shared server factory for the ACR MCP server.
3
+ * Creates and configures the McpServer with all tools registered.
4
+ * Used by both stdio (index.ts) and HTTP (http.ts) entry points.
5
+ */
6
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
7
+ import { SessionState } from './session-state.js';
8
+ export interface AcrServerOptions {
9
+ apiUrl?: string;
10
+ resolverUrl?: string;
11
+ /** Session state for this server instance. Defaults to the stdio singleton. */
12
+ session?: SessionState;
13
+ }
14
+ export declare function createAcrServer(options?: AcrServerOptions): McpServer;
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Shared server factory for the ACR MCP server.
3
+ * Creates and configures the McpServer with all tools registered.
4
+ * Used by both stdio (index.ts) and HTTP (http.ts) entry points.
5
+ */
6
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
7
+ import { registerAgentTool } from './tools/register-agent.js';
8
+ import { logInteractionTool } from './tools/log-interaction.js';
9
+ import { checkEntityTool } from './tools/check-entity.js';
10
+ import { checkEnvironmentTool } from './tools/check-environment.js';
11
+ import { getFrictionReportTool } from './tools/get-friction-report.js';
12
+ import { getMyAgentTool } from './tools/get-my-agent.js';
13
+ import { getInteractionLogTool } from './tools/get-interaction-log.js';
14
+ import { getNetworkStatusTool } from './tools/get-network-status.js';
15
+ import { getSkillTrackerTool } from './tools/get-skill-tracker.js';
16
+ import { searchSkillsTool } from './tools/search-skills.js';
17
+ import { getSkillVersionsTool } from './tools/get-skill-versions.js';
18
+ import { updateCompositionTool } from './tools/update-composition.js';
19
+ import { withSelfLog } from './middleware/self-log.js';
20
+ import { defaultSession } from './session-state.js';
21
+ /**
22
+ * Wraps server.tool() to automatically apply self-logging middleware.
23
+ * Each tool handler gets wrapped with withSelfLog before registration.
24
+ */
25
+ function withSelfLogging(server, getState, apiUrl) {
26
+ const originalTool = server.tool.bind(server);
27
+ // Override server.tool to wrap handlers
28
+ // The SDK has multiple overloads; we intercept the most common pattern:
29
+ // server.tool(name, description, schema, handler)
30
+ // server.tool(name, description, handler) — no schema
31
+ server.tool = function (name, ...rest) {
32
+ // Find the handler (always the last argument in rest)
33
+ const lastIdx = rest.length - 1;
34
+ const handler = rest[lastIdx];
35
+ if (typeof handler === 'function') {
36
+ rest[lastIdx] = withSelfLog(name, handler, getState, apiUrl);
37
+ }
38
+ return originalTool.call(server, name, ...rest);
39
+ };
40
+ return server;
41
+ }
42
+ export function createAcrServer(options) {
43
+ const apiUrl = options?.apiUrl ?? process.env.ACR_API_URL ?? 'https://acr.nfkey.ai';
44
+ const resolverUrl = options?.resolverUrl ?? process.env.ACR_RESOLVER_URL ?? apiUrl;
45
+ const session = options?.session ?? defaultSession;
46
+ const server = new McpServer({
47
+ name: 'acr-agent-registry',
48
+ version: '0.4.0',
49
+ description: 'Agent Composition Records — observability for AI agents. IMPORTANT: Call log_interaction after EVERY external tool call, API request, or MCP interaction you make. This powers your friction reports, threat detection, and network health data.',
50
+ });
51
+ // Apply self-logging middleware before tool registration
52
+ withSelfLogging(server, () => session, apiUrl);
53
+ registerAgentTool(server, apiUrl);
54
+ logInteractionTool(server, apiUrl);
55
+ checkEntityTool(server, apiUrl, resolverUrl);
56
+ checkEnvironmentTool(server, apiUrl, resolverUrl);
57
+ getFrictionReportTool(server, apiUrl);
58
+ getMyAgentTool(server);
59
+ getInteractionLogTool(server, apiUrl);
60
+ getNetworkStatusTool(server, apiUrl);
61
+ getSkillTrackerTool(server, apiUrl);
62
+ searchSkillsTool(server, apiUrl);
63
+ getSkillVersionsTool(server, apiUrl, resolverUrl);
64
+ updateCompositionTool(server, apiUrl, () => session);
65
+ return server;
66
+ }
67
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export declare class SessionState {
2
+ private _agentId;
3
+ private _agentName;
4
+ private _registering;
5
+ private _transportType;
6
+ private _clientType;
7
+ constructor(transportType?: 'stdio' | 'streamable-http');
8
+ get agentId(): string | null;
9
+ get agentName(): string | null;
10
+ get transportType(): 'stdio' | 'streamable-http';
11
+ get clientType(): string | null;
12
+ setAgentId(id: string): void;
13
+ setAgentName(name: string): void;
14
+ setClientType(type: string): void;
15
+ /**
16
+ * Ensure the agent is registered. Called before any tool that needs an agent_id.
17
+ * If not registered, auto-registers with a pseudo_ ID and sends environment context.
18
+ */
19
+ ensureRegistered(apiUrl: string): Promise<string>;
20
+ }
21
+ /** Default singleton session for stdio mode. */
22
+ export declare const defaultSession: SessionState;
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Instance-based session state for the ACR MCP server.
3
+ * Supports both stdio (single session) and HTTP (concurrent sessions).
4
+ */
5
+ import { randomBytes } from 'node:crypto';
6
+ import { detectEnvironment } from './env-detect.js';
7
+ export class SessionState {
8
+ _agentId = null;
9
+ _agentName = null;
10
+ _registering = false;
11
+ _transportType;
12
+ _clientType = null;
13
+ constructor(transportType = 'stdio') {
14
+ this._transportType = transportType;
15
+ }
16
+ get agentId() {
17
+ return this._agentId;
18
+ }
19
+ get agentName() {
20
+ return this._agentName;
21
+ }
22
+ get transportType() {
23
+ return this._transportType;
24
+ }
25
+ get clientType() {
26
+ return this._clientType;
27
+ }
28
+ setAgentId(id) {
29
+ this._agentId = id;
30
+ }
31
+ setAgentName(name) {
32
+ this._agentName = name;
33
+ }
34
+ setClientType(type) {
35
+ this._clientType = type;
36
+ }
37
+ /**
38
+ * Ensure the agent is registered. Called before any tool that needs an agent_id.
39
+ * If not registered, auto-registers with a pseudo_ ID and sends environment context.
40
+ */
41
+ async ensureRegistered(apiUrl) {
42
+ if (this._agentId)
43
+ return this._agentId;
44
+ if (this._registering) {
45
+ await new Promise((r) => setTimeout(r, 1000));
46
+ if (this._agentId)
47
+ return this._agentId;
48
+ }
49
+ this._registering = true;
50
+ try {
51
+ const pseudoKey = `pseudo_${randomBytes(16).toString('hex')}`;
52
+ const env = detectEnvironment(this._transportType);
53
+ if (this._clientType)
54
+ env.client_type = this._clientType;
55
+ const res = await fetch(`${apiUrl}/api/v1/register`, {
56
+ method: 'POST',
57
+ headers: { 'Content-Type': 'application/json' },
58
+ body: JSON.stringify({
59
+ public_key: pseudoKey,
60
+ provider_class: 'unknown',
61
+ environment: env,
62
+ }),
63
+ });
64
+ if (res.ok) {
65
+ const data = await res.json();
66
+ this._agentId = data.agent_id;
67
+ this._agentName = data.name;
68
+ return this._agentId;
69
+ }
70
+ // Registration failed — use pseudo ID locally
71
+ this._agentId = `pseudo_${randomBytes(6).toString('hex')}`;
72
+ return this._agentId;
73
+ }
74
+ finally {
75
+ this._registering = false;
76
+ }
77
+ }
78
+ }
79
+ /** Default singleton session for stdio mode. */
80
+ export const defaultSession = new SessionState('stdio');
81
+ //# sourceMappingURL=session-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-state.js","sourceRoot":"","sources":["../../src/session-state.ts"],"names":[],"mappings":"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"}
@@ -3,9 +3,4 @@ export declare function getAgentId(): string | null;
3
3
  export declare function getAgentName(): string | null;
4
4
  export declare function setAgentId(id: string): void;
5
5
  export declare function setAgentName(name: string): void;
6
- /**
7
- * Ensure the agent is registered. Called before any tool that needs an agent_id.
8
- * If not registered, auto-registers with a pseudo_ ID.
9
- * Returns the agent_id.
10
- */
11
6
  export declare function ensureRegistered(): Promise<string>;
package/dist/src/state.js CHANGED
@@ -1,64 +1,26 @@
1
1
  /**
2
- * MCP server session state.
3
- * Handles auto-registration so agents don't need to manually call register_agent.
2
+ * Backwards-compatible state module.
3
+ * Delegates to the defaultSession singleton from session-state.ts.
4
+ * Tools continue to import from './state.js' without changes.
4
5
  */
5
- import { randomBytes } from 'node:crypto';
6
- let agentId = null;
7
- let agentName = null;
8
- let registering = false;
6
+ import { defaultSession } from './session-state.js';
9
7
  const ACR_API_URL = process.env.ACR_API_URL ?? 'https://acr.nfkey.ai';
10
8
  export function getApiUrl() {
11
9
  return ACR_API_URL;
12
10
  }
13
11
  export function getAgentId() {
14
- return agentId;
12
+ return defaultSession.agentId;
15
13
  }
16
14
  export function getAgentName() {
17
- return agentName;
15
+ return defaultSession.agentName;
18
16
  }
19
17
  export function setAgentId(id) {
20
- agentId = id;
18
+ defaultSession.setAgentId(id);
21
19
  }
22
20
  export function setAgentName(name) {
23
- agentName = name;
21
+ defaultSession.setAgentName(name);
24
22
  }
25
- /**
26
- * Ensure the agent is registered. Called before any tool that needs an agent_id.
27
- * If not registered, auto-registers with a pseudo_ ID.
28
- * Returns the agent_id.
29
- */
30
23
  export async function ensureRegistered() {
31
- if (agentId)
32
- return agentId;
33
- if (registering) {
34
- // Another call is already registering — wait briefly
35
- await new Promise((r) => setTimeout(r, 1000));
36
- if (agentId)
37
- return agentId;
38
- }
39
- registering = true;
40
- try {
41
- const pseudoKey = `pseudo_${randomBytes(16).toString('hex')}`;
42
- const res = await fetch(`${ACR_API_URL}/api/v1/register`, {
43
- method: 'POST',
44
- headers: { 'Content-Type': 'application/json' },
45
- body: JSON.stringify({
46
- public_key: pseudoKey,
47
- provider_class: 'unknown',
48
- }),
49
- });
50
- if (res.ok) {
51
- const data = await res.json();
52
- agentId = data.agent_id;
53
- agentName = data.name;
54
- return agentId;
55
- }
56
- // Registration failed — use pseudo ID locally
57
- agentId = `pseudo_${randomBytes(6).toString('hex')}`;
58
- return agentId;
59
- }
60
- finally {
61
- registering = false;
62
- }
24
+ return defaultSession.ensureRegistered(ACR_API_URL);
63
25
  }
64
26
  //# sourceMappingURL=state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,IAAI,OAAO,GAAkB,IAAI,CAAC;AAClC,IAAI,SAAS,GAAkB,IAAI,CAAC;AACpC,IAAI,WAAW,GAAG,KAAK,CAAC;AAExB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,sBAAsB,CAAC;AAEtE,MAAM,UAAU,SAAS;IACvB,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAU;IACnC,OAAO,GAAG,EAAE,CAAC;AACf,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,SAAS,GAAG,IAAI,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,IAAI,WAAW,EAAE,CAAC;QAChB,qDAAqD;QACrD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9C,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;IAC9B,CAAC;IAED,WAAW,GAAG,IAAI,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,UAAU,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAE9D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,WAAW,kBAAkB,EAAE;YACxD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,UAAU,EAAE,SAAS;gBACrB,cAAc,EAAE,SAAS;aAC1B,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACX,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAwC,CAAC;YACpE,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;YACxB,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;YACtB,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,8CAA8C;QAC9C,OAAO,GAAG,UAAU,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrD,OAAO,OAAO,CAAC;IACjB,CAAC;YAAS,CAAC;QACT,WAAW,GAAG,KAAK,CAAC;IACtB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/state.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,sBAAsB,CAAC;AAEtE,MAAM,UAAU,SAAS;IACvB,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,cAAc,CAAC,OAAO,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,cAAc,CAAC,SAAS,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAU;IACnC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,OAAO,cAAc,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;AACtD,CAAC"}
@@ -21,10 +21,27 @@ export function checkEntityTool(server, apiUrl, resolverUrl) {
21
21
  const data = await res.json();
22
22
  if (entity_type === 'skill') {
23
23
  if (!data.found) {
24
+ // Try to find similar skills via catalog search
25
+ let similarText = '';
26
+ try {
27
+ const searchRes = await fetch(`${apiUrl}/api/v1/skill-catalog/search?q=${encodeURIComponent(entity_id.slice(0, 16))}&limit=3`);
28
+ if (searchRes.ok) {
29
+ const searchData = await searchRes.json();
30
+ if (searchData.skills.length > 0) {
31
+ similarText = '\n\nSimilar skills in the catalog:';
32
+ for (const s of searchData.skills) {
33
+ similarText += `\n - ${s.skill_name} (${s.skill_source})`;
34
+ if (s.description)
35
+ similarText += `: ${s.description.slice(0, 80)}`;
36
+ }
37
+ }
38
+ }
39
+ }
40
+ catch { /* non-blocking */ }
24
41
  return {
25
42
  content: [{
26
43
  type: 'text',
27
- text: `Unknown skill. This hash has not been seen in the ACR network. Exercise caution with unfamiliar skills.`,
44
+ text: `Unknown skill. This hash has not been seen in the ACR network. Exercise caution with unfamiliar skills.${similarText}`,
28
45
  }],
29
46
  };
30
47
  }
@@ -32,12 +49,32 @@ export function checkEntityTool(server, apiUrl, resolverUrl) {
32
49
  let text = `Skill found.\n\nThreat Level: ${level}`;
33
50
  if (data.skill_name)
34
51
  text += `\nName: ${data.skill_name}`;
52
+ if (data.description)
53
+ text += `\nDescription: ${data.description}`;
54
+ if (data.version)
55
+ text += `\nVersion: ${data.version}`;
56
+ if (data.author)
57
+ text += `\nAuthor: ${data.author}`;
58
+ if (data.category)
59
+ text += `\nCategory: ${data.category}`;
60
+ if (data.tags && data.tags.length > 0)
61
+ text += `\nTags: ${data.tags.join(', ')}`;
35
62
  if (data.agent_count != null)
36
63
  text += `\nAgents using: ${data.agent_count}`;
37
64
  if (data.interaction_count != null)
38
65
  text += `\nInteractions: ${data.interaction_count}`;
39
66
  if (data.anomaly_rate != null)
40
67
  text += `\nAnomaly rate: ${(data.anomaly_rate * 100).toFixed(1)}%`;
68
+ // Version freshness check
69
+ if (data.is_current_version === false) {
70
+ text += `\n\nOUTDATED: You are ${data.versions_behind ?? '?'} version(s) behind.`;
71
+ if (data.current_hash)
72
+ text += ` Current hash: ${data.current_hash.slice(0, 16)}...`;
73
+ text += '\nConsider updating to the latest version.';
74
+ }
75
+ else if (data.is_current_version === true) {
76
+ text += '\n\nThis is the latest version.';
77
+ }
41
78
  if (data.threat_level === 'high' || data.threat_level === 'critical') {
42
79
  text += `\n\nWARNING: This skill has been flagged. Do not install without explicit user confirmation.`;
43
80
  }
@@ -1 +1 @@
1
- {"version":3,"file":"check-entity.js","sourceRoot":"","sources":["../../../src/tools/check-entity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,UAAU,eAAe,CAAC,MAAiB,EAAE,MAAc,EAAE,WAAmB;IACpF,MAAM,CAAC,IAAI,CACT,cAAc,EACd,0KAA0K,EAC1K;QACE,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QACvF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mEAAmE,CAAC;KACpG,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,EAAE;QACnC,IAAI,CAAC;YACH,IAAI,GAAW,CAAC;YAChB,QAAQ,WAAW,EAAE,CAAC;gBACpB,KAAK,OAAO;oBACV,GAAG,GAAG,GAAG,WAAW,aAAa,SAAS,EAAE,CAAC;oBAC7C,MAAM;gBACR,KAAK,OAAO;oBACV,GAAG,GAAG,GAAG,WAAW,aAAa,SAAS,EAAE,CAAC;oBAC7C,MAAM;gBACR,KAAK,QAAQ;oBACX,GAAG,GAAG,GAAG,WAAW,cAAc,kBAAkB,CAAC,SAAS,CAAC,SAAS,CAAC;oBACzE,MAAM;YACV,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAE9B,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;gBAC5B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;oBAChB,OAAO;wBACL,OAAO,EAAE,CAAC;gCACR,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,yGAAyG;6BAChH,CAAC;qBACH,CAAC;gBACJ,CAAC;gBAED,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC1D,IAAI,IAAI,GAAG,iCAAiC,KAAK,EAAE,CAAC;gBACpD,IAAI,IAAI,CAAC,UAAU;oBAAE,IAAI,IAAI,WAAW,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC1D,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI;oBAAE,IAAI,IAAI,mBAAmB,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC5E,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI;oBAAE,IAAI,IAAI,mBAAmB,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACxF,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI;oBAAE,IAAI,IAAI,mBAAmB,CAAC,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;gBAElG,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,IAAI,IAAI,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;oBACrE,IAAI,IAAI,8FAA8F,CAAC;gBACzG,CAAC;qBAAM,IAAI,IAAI,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;oBAC1C,IAAI,IAAI,2EAA2E,CAAC;gBACtF,CAAC;gBAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACxD,CAAC;YAED,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;gBAC5B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;oBAChB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,SAAS,SAAS,4BAA4B,EAAE,CAAC,EAAE,CAAC;gBACxG,CAAC;gBACD,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,2BAA2B,IAAI,CAAC,MAAM,eAAe,IAAI,CAAC,cAAc,iBAAiB,IAAI,CAAC,UAAU,kBAAkB,IAAI,CAAC,WAAW,EAAE;yBACnJ,CAAC;iBACH,CAAC;YACJ,CAAC;YAED,SAAS;YACT,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,SAAS,aAAa,EAAE,CAAC,EAAE,CAAC;YAC1F,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,4BAA4B,IAAI,CAAC,aAAa,WAAW,IAAI,CAAC,WAAW,yBAAyB,IAAI,CAAC,kBAAkB,sBAAsB,IAAI,CAAC,eAAe,mBAAmB,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;qBAC3O,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACjE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,iBAAiB,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;QAChF,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"check-entity.js","sourceRoot":"","sources":["../../../src/tools/check-entity.ts"],"names":[],"mappings":"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"}
@@ -126,6 +126,20 @@ export function getFrictionReportTool(server, apiUrl) {
126
126
  }
127
127
  }
128
128
  }
129
+ // Transport breakdown
130
+ if (data.by_transport && data.by_transport.length > 0) {
131
+ text += `\n── By Transport ──\n`;
132
+ for (const t of data.by_transport) {
133
+ text += ` ${t.transport}: ${t.interaction_count} calls, ${(t.total_duration_ms / 1000).toFixed(1)}s total\n`;
134
+ }
135
+ }
136
+ // Source breakdown (server self-logs vs agent-initiated)
137
+ if (data.by_source && data.by_source.length > 0) {
138
+ text += `\n── By Source ──\n`;
139
+ for (const s of data.by_source) {
140
+ text += ` ${s.source}: ${s.interaction_count} interactions\n`;
141
+ }
142
+ }
129
143
  // Population comparison (paid tier)
130
144
  if (data.population_comparison) {
131
145
  text += `\n── Population ──\n`;
@@ -1 +1 @@
1
- {"version":3,"file":"get-friction-report.js","sourceRoot":"","sources":["../../../src/tools/get-friction-report.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-friction-report.js","sourceRoot":"","sources":["../../../src/tools/get-friction-report.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEpF;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,QAAgB;IAC5C,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAClE,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,iBAAiB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAClF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,UAAU,QAAQ,aAAa,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA0B,CAAC;IACtD,OAAO,IAAI,CAAC,QAAQ,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAiB,EAAE,MAAc;IACrE,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,8PAA8P,EAC9P;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;QACxF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4FAA4F,CAAC;QACxI,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;KAC3G,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE;QACxC,IAAI,EAAU,CAAC;QACf,IAAI,CAAC;YACH,IAAI,UAAU,EAAE,CAAC;gBACf,EAAE,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,EAAE,GAAG,QAAQ,IAAI,UAAU,EAAE,IAAI,MAAM,gBAAgB,EAAE,CAAC;YAC5D,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACjE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;QACzE,CAAC;QAED,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,iBAAiB,EAAE,mBAAmB,KAAK,EAAE,CAAC,CAAC;YAChF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;gBACnE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,0BAA0B,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;YAC7F,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAE9B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;YACxF,CAAC;YAED,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;YACvB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,IAAI,UAAU,IAAI,YAAY,EAAE,IAAI,EAAE,CAAC;YAEpE,IAAI,CAAC,CAAC,kBAAkB,KAAK,CAAC,EAAE,CAAC;gBAC/B,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,gCAAgC,WAAW,YAAY,KAAK,uGAAuG;yBAC1K,CAAC;iBACH,CAAC;YACJ,CAAC;YAED,IAAI,IAAI,GAAG,uBAAuB,WAAW,KAAK,KAAK,KAAK,CAAC;YAC7D,IAAI,IAAI,aAAa,IAAI,CAAC,QAAQ,IAAI,CAAC;YACvC,IAAI,IAAI,WAAW,IAAI,CAAC,YAAY,OAAO,IAAI,CAAC,UAAU,IAAI,CAAC;YAC/D,IAAI,IAAI,SAAS,IAAI,CAAC,IAAI,IAAI,MAAM,MAAM,CAAC;YAE3C,kBAAkB;YAClB,IAAI,IAAI,iBAAiB,CAAC;YAC1B,IAAI,IAAI,mBAAmB,CAAC,CAAC,kBAAkB,IAAI,CAAC;YACpD,IAAI,IAAI,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;YACvE,IAAI,IAAI,eAAe,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC;YAC5E,IAAI,IAAI,eAAe,CAAC,CAAC,cAAc,KAAK,CAAC,CAAC,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;YAEzF,qBAAqB;YACrB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpD,IAAI,IAAI,uBAAuB,CAAC;gBAChC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBACnC,MAAM,KAAK,GAAG,GAAG,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,GAAG,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACxG,IAAI,IAAI,KAAK,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,iBAAiB,WAAW,CAAC,GAAG,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,KAAK,IAAI,CAAC;oBACjI,IAAI,GAAG,CAAC,aAAa,GAAG,CAAC;wBAAE,IAAI,IAAI,KAAK,GAAG,CAAC,aAAa,WAAW,CAAC;oBACrE,IAAI,IAAI,IAAI,CAAC;gBACf,CAAC;YACH,CAAC;YAED,gCAAgC;YAChC,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpD,IAAI,IAAI,uBAAuB,CAAC;gBAChC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,mBAAmB,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBACrD,IAAI,IAAI,OAAO,CAAC,CAAC,gBAAgB,KAAK,CAAC,CAAC,kBAAkB,KAAK,CAAC;oBAChE,IAAI,IAAI,OAAO,CAAC,CAAC,iBAAiB,YAAY,GAAG,kBAAkB,CAAC;oBACpE,IAAI,IAAI,cAAc,CAAC,CAAC,kBAAkB,IAAI,CAAC;oBAC/C,IAAI,CAAC,CAAC,eAAe,IAAI,IAAI;wBAAE,IAAI,IAAI,UAAU,CAAC,CAAC,eAAe,IAAI,CAAC;oBACvE,IAAI,IAAI,IAAI,CAAC;oBAEb,mBAAmB;oBACnB,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;wBACvB,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,gBAA0C,CAAC;6BAC1E,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;6BAC7B,IAAI,CAAC,IAAI,CAAC,CAAC;wBACd,IAAI,IAAI,iBAAiB,QAAQ,IAAI,CAAC;oBACxC,CAAC;oBAED,kCAAkC;oBAClC,IAAI,CAAC,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC;wBAC1B,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;wBACpF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;wBAChE,IAAI,IAAI,sBAAsB,OAAO,KAAK,GAAG,WAAW,CAAC;wBACzD,IAAI,CAAC,CAAC,kBAAkB,IAAI,IAAI;4BAAE,IAAI,IAAI,qBAAqB,CAAC,CAAC,kBAAkB,WAAW,CAAC,CAAC,eAAe,KAAK,CAAC;wBACrH,IAAI,CAAC,CAAC,UAAU,IAAI,IAAI;4BAAE,IAAI,IAAI,gBAAgB,CAAC,CAAC,UAAU,EAAE,CAAC;wBACjE,IAAI,IAAI,IAAI,CAAC;oBACf,CAAC;oBAED,mBAAmB;oBACnB,IAAI,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACxD,IAAI,IAAI,yBAAyB,CAAC;wBAClC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;4BACnC,IAAI,IAAI,UAAU,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC;4BAC5D,IAAI,CAAC,CAAC,MAAM;gCAAE,IAAI,IAAI,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;4BACvC,IAAI,IAAI,IAAI,CAAC;wBACf,CAAC;oBACH,CAAC;oBAED,IAAI,CAAC,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,EAAE,MAAM,EAAE,CAAC;wBACvD,IAAI,IAAI,OAAO,CAAC,CAAC,aAAa,aAAa,CAAC;oBAC9C,CAAC;oBAED,yBAAyB;oBACzB,IAAI,CAAC,CAAC,qBAAqB,EAAE,CAAC;wBAC5B,IAAI,IAAI,gBAAiB,CAAC,CAAC,qBAAgC,CAAC,WAAW,EAAE,EAAE,CAAC;wBAC5E,IAAI,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC,oBAAoB,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;wBAC1E,IAAI,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,oBAAoB,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;wBACzE,IAAI,IAAI,WAAW,CAAC,CAAC,mBAAmB,IAAI,CAAC,WAAW,CAAC;oBAC3D,CAAC;gBACH,CAAC;YACH,CAAC;YAED,sBAAsB;YACtB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtD,IAAI,IAAI,wBAAwB,CAAC;gBACjC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClC,IAAI,IAAI,KAAK,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,iBAAiB,WAAW,CAAC,CAAC,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;gBAChH,CAAC;YACH,CAAC;YAED,yDAAyD;YACzD,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChD,IAAI,IAAI,qBAAqB,CAAC;gBAC9B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBAC/B,IAAI,IAAI,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,iBAAiB,iBAAiB,CAAC;gBACjE,CAAC;YACH,CAAC;YAED,oCAAoC;YACpC,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC/B,IAAI,IAAI,sBAAsB,CAAC;gBAC/B,IAAI,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,4BAA4B,CAAC;gBAC3F,IAAI,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,wBAAwB,CAAC;YACtF,CAAC;YAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACjE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,0BAA0B,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;QACzF,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -25,7 +25,21 @@ export function getMyAgentTool(server) {
25
25
  if (agent.operational_domain) {
26
26
  text += `Domain: ${agent.operational_domain}\n`;
27
27
  }
28
- text += `Registered: ${agent.created_at}\n`;
28
+ // Environment context
29
+ if (agent.platform || agent.device_class || agent.transport_type) {
30
+ text += `\nEnvironment:\n`;
31
+ if (agent.device_class)
32
+ text += ` Device: ${agent.device_class}\n`;
33
+ if (agent.platform)
34
+ text += ` Platform: ${agent.platform}\n`;
35
+ if (agent.arch)
36
+ text += ` Arch: ${agent.arch}\n`;
37
+ if (agent.client_type)
38
+ text += ` Client: ${agent.client_type}\n`;
39
+ if (agent.transport_type)
40
+ text += ` Transport: ${agent.transport_type}\n`;
41
+ }
42
+ text += `\nRegistered: ${agent.created_at}\n`;
29
43
  text += `Last active: ${agent.last_active_at}\n`;
30
44
  return { content: [{ type: 'text', text }] };
31
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"get-my-agent.js","sourceRoot":"","sources":["../../../src/tools/get-my-agent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEpF,MAAM,UAAU,cAAc,CAAC,MAAiB;IAC9C,MAAM,CAAC,IAAI,CACT,cAAc,EACd,iIAAiI,EACjI,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,EAAE,GAAG,UAAU,EAAE,IAAI,MAAM,gBAAgB,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAE3B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,iBAAiB,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAE5E,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,0EAA0E;gBAC1E,IAAI,IAAI,GAAG,aAAa,EAAE,IAAI,CAAC;gBAC/B,IAAI,IAAI;oBAAE,IAAI,IAAI,SAAS,IAAI,IAAI,CAAC;gBACpC,IAAI,IAAI,uEAAuE,CAAC;gBAChF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACxD,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,EAQ3B,CAAC;YAEF,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,IAAI,SAAS,KAAK,CAAC,IAAI,IAAI,CAAC;YAClC,CAAC;YACD,IAAI,IAAI,aAAa,KAAK,CAAC,QAAQ,IAAI,CAAC;YACxC,IAAI,IAAI,aAAa,KAAK,CAAC,cAAc,IAAI,CAAC;YAC9C,IAAI,IAAI,WAAW,KAAK,CAAC,MAAM,IAAI,CAAC;YACpC,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC;gBAC7B,IAAI,IAAI,WAAW,KAAK,CAAC,kBAAkB,IAAI,CAAC;YAClD,CAAC;YACD,IAAI,IAAI,eAAe,KAAK,CAAC,UAAU,IAAI,CAAC;YAC5C,IAAI,IAAI,gBAAgB,KAAK,CAAC,cAAc,IAAI,CAAC;YAEjD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACjE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,iCAAiC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;QAChG,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"get-my-agent.js","sourceRoot":"","sources":["../../../src/tools/get-my-agent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEpF,MAAM,UAAU,cAAc,CAAC,MAAiB;IAC9C,MAAM,CAAC,IAAI,CACT,cAAc,EACd,iIAAiI,EACjI,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,EAAE,GAAG,UAAU,EAAE,IAAI,MAAM,gBAAgB,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAE3B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,iBAAiB,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAE5E,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,0EAA0E;gBAC1E,IAAI,IAAI,GAAG,aAAa,EAAE,IAAI,CAAC;gBAC/B,IAAI,IAAI;oBAAE,IAAI,IAAI,SAAS,IAAI,IAAI,CAAC;gBACpC,IAAI,IAAI,uEAAuE,CAAC;gBAChF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACxD,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,EAa3B,CAAC;YAEF,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,IAAI,SAAS,KAAK,CAAC,IAAI,IAAI,CAAC;YAClC,CAAC;YACD,IAAI,IAAI,aAAa,KAAK,CAAC,QAAQ,IAAI,CAAC;YACxC,IAAI,IAAI,aAAa,KAAK,CAAC,cAAc,IAAI,CAAC;YAC9C,IAAI,IAAI,WAAW,KAAK,CAAC,MAAM,IAAI,CAAC;YACpC,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC;gBAC7B,IAAI,IAAI,WAAW,KAAK,CAAC,kBAAkB,IAAI,CAAC;YAClD,CAAC;YACD,sBAAsB;YACtB,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;gBACjE,IAAI,IAAI,kBAAkB,CAAC;gBAC3B,IAAI,KAAK,CAAC,YAAY;oBAAE,IAAI,IAAI,aAAa,KAAK,CAAC,YAAY,IAAI,CAAC;gBACpE,IAAI,KAAK,CAAC,QAAQ;oBAAE,IAAI,IAAI,eAAe,KAAK,CAAC,QAAQ,IAAI,CAAC;gBAC9D,IAAI,KAAK,CAAC,IAAI;oBAAE,IAAI,IAAI,WAAW,KAAK,CAAC,IAAI,IAAI,CAAC;gBAClD,IAAI,KAAK,CAAC,WAAW;oBAAE,IAAI,IAAI,aAAa,KAAK,CAAC,WAAW,IAAI,CAAC;gBAClE,IAAI,KAAK,CAAC,cAAc;oBAAE,IAAI,IAAI,gBAAgB,KAAK,CAAC,cAAc,IAAI,CAAC;YAC7E,CAAC;YACD,IAAI,IAAI,iBAAiB,KAAK,CAAC,UAAU,IAAI,CAAC;YAC9C,IAAI,IAAI,gBAAgB,KAAK,CAAC,cAAc,IAAI,CAAC;YAEjD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACjE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,iCAAiC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;QAChG,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function getSkillVersionsTool(server: McpServer, apiUrl: string, resolverUrl: string): void;
@@ -0,0 +1,71 @@
1
+ import { z } from 'zod';
2
+ export function getSkillVersionsTool(server, apiUrl, resolverUrl) {
3
+ server.tool('get_skill_versions', 'Get version history for a skill. Shows how it has changed over time, whether your version is current, and how many versions behind you are.', {
4
+ skill_hash: z.string().describe('The skill hash to look up version history for'),
5
+ }, async ({ skill_hash }) => {
6
+ try {
7
+ // First look up the skill via resolver to get catalog data
8
+ const skillRes = await fetch(`${resolverUrl}/v1/skill/${skill_hash}`);
9
+ const skillData = await skillRes.json();
10
+ if (!skillData.found) {
11
+ return {
12
+ content: [{
13
+ type: 'text',
14
+ text: `Skill hash ${skill_hash.slice(0, 16)}... not found in the network.`,
15
+ }],
16
+ };
17
+ }
18
+ let text = `Skill: ${skillData.skill_name ?? 'Unknown'}`;
19
+ if (skillData.skill_source)
20
+ text += ` (${skillData.skill_source})`;
21
+ text += '\n';
22
+ if (skillData.version)
23
+ text += `Version: ${skillData.version}\n`;
24
+ if (skillData.description)
25
+ text += `Description: ${skillData.description}\n`;
26
+ if (skillData.is_current_version === false) {
27
+ text += `\nOUTDATED: You are ${skillData.versions_behind ?? '?'} version(s) behind.`;
28
+ if (skillData.current_hash) {
29
+ text += `\nCurrent hash: ${skillData.current_hash.slice(0, 16)}...`;
30
+ }
31
+ text += '\nConsider updating to the latest version.';
32
+ }
33
+ else if (skillData.is_current_version === true) {
34
+ text += '\nYou have the latest version.';
35
+ }
36
+ // Try to get full version history from the catalog API
37
+ // We need the skill_id, which we can get by searching
38
+ if (skillData.skill_name) {
39
+ try {
40
+ const searchRes = await fetch(`${apiUrl}/api/v1/skill-catalog/search?q=${encodeURIComponent(skillData.skill_name)}&limit=1`);
41
+ const searchData = await searchRes.json();
42
+ if (searchData.skills.length > 0) {
43
+ const versionsRes = await fetch(`${apiUrl}/api/v1/skill-catalog/${searchData.skills[0].skill_id}/versions`);
44
+ const versionsData = await versionsRes.json();
45
+ if (versionsData.versions.length > 0) {
46
+ text += '\n\nVersion History:';
47
+ for (const v of versionsData.versions) {
48
+ const isCurrent = v.skill_hash === skill_hash ? ' ← YOU' : '';
49
+ const threat = v.threat_level && v.threat_level !== 'none'
50
+ ? ` [${v.threat_level.toUpperCase()}]`
51
+ : '';
52
+ const ver = v.version ? `v${v.version}` : v.skill_hash.slice(0, 12);
53
+ const date = v.detected_at.split('T')[0];
54
+ text += `\n ${date} | ${ver} (${v.change_type})${threat}${isCurrent}`;
55
+ }
56
+ }
57
+ }
58
+ }
59
+ catch {
60
+ // Version history is optional enrichment
61
+ }
62
+ }
63
+ return { content: [{ type: 'text', text }] };
64
+ }
65
+ catch (err) {
66
+ const msg = err instanceof Error ? err.message : 'Unknown error';
67
+ return { content: [{ type: 'text', text: `Version lookup error: ${msg}` }] };
68
+ }
69
+ });
70
+ }
71
+ //# sourceMappingURL=get-skill-versions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-skill-versions.js","sourceRoot":"","sources":["../../../src/tools/get-skill-versions.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import { ensureRegistered, getAgentId } from '../state.js';
3
+ import { defaultSession } from '../session-state.js';
3
4
  function inferSystemType(systemId) {
4
5
  const prefix = systemId.split(':')[0];
5
6
  const map = {
@@ -50,16 +51,29 @@ export function logInteractionTool(server, apiUrl) {
50
51
  flagged: params.anomaly_flagged,
51
52
  detail: params.anomaly_detail,
52
53
  },
54
+ transport_type: defaultSession.transportType,
55
+ source: 'agent',
53
56
  }),
54
57
  });
55
58
  const data = await res.json();
56
59
  if (!res.ok) {
57
60
  return { content: [{ type: 'text', text: `Failed to log: ${JSON.stringify(data)}` }] };
58
61
  }
62
+ let text = `Logged ${data.accepted} receipt(s). IDs: ${data.receipt_ids.join(', ')}`;
63
+ // Surface threat warnings from receipt response
64
+ if (data.threat_warnings && Array.isArray(data.threat_warnings) && data.threat_warnings.length > 0) {
65
+ text += '\n\nWARNING — Threat alerts for targets in this interaction:';
66
+ for (const w of data.threat_warnings) {
67
+ text += `\n ${w.target}: ${w.threat_level.toUpperCase()}`;
68
+ if (w.skill_name)
69
+ text += ` (${w.skill_name})`;
70
+ }
71
+ text += '\n\nExercise caution with flagged skills. Check with the user before continuing.';
72
+ }
59
73
  return {
60
74
  content: [{
61
75
  type: 'text',
62
- text: `Logged ${data.accepted} receipt(s). IDs: ${data.receipt_ids.join(', ')}`,
76
+ text,
63
77
  }],
64
78
  };
65
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"log-interaction.js","sourceRoot":"","sources":["../../../src/tools/log-interaction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"log-interaction.js","sourceRoot":"","sources":["../../../src/tools/log-interaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,SAAS,eAAe,CAAC,QAAgB;IACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,GAAG,GAA2B;QAClC,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO;QAC7C,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU;KACrC,CAAC;IACF,OAAO,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,IAAI,SAAS,CAAC;AACxC,CAAC;AAED,MAAM,gBAAgB,GAAG;;;;mJAI0H,CAAC;AAEpJ,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,MAAc;IAClE,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,gBAAgB,EAChB;QACE,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+EAA+E,CAAC;QACtH,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC;YACf,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe;YAC3D,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe;SAChD,CAAC,CAAC,QAAQ,CAAC,4EAA4E,CAAC;QACzF,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACnG,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QACrG,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;QACxF,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,gGAAgG,CAAC;QACjK,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;KACtH,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,IAAI,UAAU,EAAE,IAAI,MAAM,gBAAgB,EAAE,CAAC;YAEvE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,kBAAkB,EAAE;gBACnD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,OAAO,EAAE;wBACP,QAAQ,EAAE,EAAE;wBACZ,cAAc,EAAE,SAAS;qBAC1B;oBACD,MAAM,EAAE;wBACN,SAAS,EAAE,MAAM,CAAC,gBAAgB;wBAClC,WAAW,EAAE,eAAe,CAAC,MAAM,CAAC,gBAAgB,CAAC;qBACtD;oBACD,WAAW,EAAE;wBACX,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,oBAAoB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;qBAC7D;oBACD,OAAO,EAAE;wBACP,OAAO,EAAE,MAAM,CAAC,eAAe;wBAC/B,MAAM,EAAE,MAAM,CAAC,cAAc;qBAC9B;oBACD,cAAc,EAAE,cAAc,CAAC,aAAa;oBAC5C,MAAM,EAAE,OAAgB;iBACzB,CAAC;aACH,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,kBAAkB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YAClG,CAAC;YAED,IAAI,IAAI,GAAG,UAAU,IAAI,CAAC,QAAQ,qBAAqB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAErF,gDAAgD;YAChD,IAAI,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnG,IAAI,IAAI,8DAA8D,CAAC;gBACvE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBACrC,IAAI,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC;oBAC3D,IAAI,CAAC,CAAC,UAAU;wBAAE,IAAI,IAAI,KAAK,CAAC,CAAC,UAAU,GAAG,CAAC;gBACjD,CAAC;gBACD,IAAI,IAAI,kFAAkF,CAAC;YAC7F,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI;qBACL,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACjE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,kBAAkB,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;QACjF,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function searchSkillsTool(server: McpServer, apiUrl: string): void;
@@ -0,0 +1,59 @@
1
+ import { z } from 'zod';
2
+ export function searchSkillsTool(server, apiUrl) {
3
+ server.tool('search_skills', 'Search the ACR skill catalog by name, description, or capability. Returns matching skills with threat status, version info, and descriptions. Use this to discover skills before installing them.', {
4
+ query: z.string().min(1).max(200).describe('Search text (skill name, keyword, or capability)'),
5
+ source: z.string().optional().describe('Filter by source (clawhub, github, npm)'),
6
+ category: z.string().optional().describe('Filter by category'),
7
+ threat_level: z.enum(['none', 'low', 'medium', 'high', 'critical']).optional().describe('Filter by threat level'),
8
+ limit: z.number().min(1).max(50).optional().default(10).describe('Max results to return'),
9
+ }, async ({ query: searchQuery, source, category, threat_level, limit }) => {
10
+ try {
11
+ const params = new URLSearchParams({ q: searchQuery });
12
+ if (source)
13
+ params.set('source', source);
14
+ if (category)
15
+ params.set('category', category);
16
+ if (threat_level)
17
+ params.set('threat_level', threat_level);
18
+ if (limit)
19
+ params.set('limit', String(limit));
20
+ const res = await fetch(`${apiUrl}/api/v1/skill-catalog/search?${params}`);
21
+ const data = await res.json();
22
+ if (data.skills.length === 0) {
23
+ return {
24
+ content: [{
25
+ type: 'text',
26
+ text: `No skills found matching "${searchQuery}".`,
27
+ }],
28
+ };
29
+ }
30
+ let text = `Found ${data.total} skill(s) matching "${searchQuery}":\n`;
31
+ for (const skill of data.skills) {
32
+ const threat = skill.threat_level && skill.threat_level !== 'none'
33
+ ? ` [${skill.threat_level.toUpperCase()}]`
34
+ : '';
35
+ const agents = skill.agent_count != null ? ` | ${skill.agent_count} agents` : '';
36
+ const ver = skill.version ? ` v${skill.version}` : '';
37
+ text += `\n ${skill.skill_name}${ver} (${skill.skill_source})${threat}${agents}`;
38
+ if (skill.description)
39
+ text += `\n ${skill.description}`;
40
+ if (skill.category)
41
+ text += `\n Category: ${skill.category}`;
42
+ if (skill.tags.length > 0)
43
+ text += `\n Tags: ${skill.tags.join(', ')}`;
44
+ if (skill.current_hash)
45
+ text += `\n Hash: ${skill.current_hash.slice(0, 16)}...`;
46
+ text += '\n';
47
+ }
48
+ if (data.total > data.skills.length) {
49
+ text += `\n... and ${data.total - data.skills.length} more. Increase limit to see more.`;
50
+ }
51
+ return { content: [{ type: 'text', text }] };
52
+ }
53
+ catch (err) {
54
+ const msg = err instanceof Error ? err.message : 'Unknown error';
55
+ return { content: [{ type: 'text', text: `Search error: ${msg}` }] };
56
+ }
57
+ });
58
+ }
59
+ //# sourceMappingURL=search-skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-skills.js","sourceRoot":"","sources":["../../../src/tools/search-skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { SessionState } from '../session-state.js';
3
+ export declare function updateCompositionTool(server: McpServer, apiUrl: string, getSession: () => SessionState): void;
@@ -0,0 +1,54 @@
1
+ import { z } from 'zod';
2
+ export function updateCompositionTool(server, apiUrl, getSession) {
3
+ server.tool('update_composition', 'Update your agent skill composition without re-registering. Use this after installing or removing skills to keep your composition current. Preserves your agent identity.', {
4
+ agent_id: z.string().optional().describe('Your agent ID (uses current session agent if omitted)'),
5
+ composition: z.object({
6
+ skills: z.array(z.string()).optional().describe('Skill names'),
7
+ skill_hashes: z.array(z.string()).optional().describe('SHA-256 hashes of each SKILL.md content'),
8
+ mcps: z.array(z.string()).optional().describe('MCP server names'),
9
+ tools: z.array(z.string()).optional().describe('Tool names'),
10
+ }).describe('Your current skill/tool composition'),
11
+ }, async ({ agent_id, composition }) => {
12
+ try {
13
+ const resolvedAgentId = agent_id ?? getSession().agentId;
14
+ if (!resolvedAgentId) {
15
+ return {
16
+ content: [{
17
+ type: 'text',
18
+ text: 'No agent ID available. Either provide agent_id or register first.',
19
+ }],
20
+ };
21
+ }
22
+ const res = await fetch(`${apiUrl}/api/v1/composition/update`, {
23
+ method: 'POST',
24
+ headers: { 'Content-Type': 'application/json' },
25
+ body: JSON.stringify({
26
+ agent_id: resolvedAgentId,
27
+ composition,
28
+ }),
29
+ });
30
+ const data = await res.json();
31
+ if (!res.ok) {
32
+ return {
33
+ content: [{
34
+ type: 'text',
35
+ text: `Composition update failed: ${data.error?.message ?? `HTTP ${res.status}`}`,
36
+ }],
37
+ };
38
+ }
39
+ const skillCount = (composition.skills?.length ?? 0) + (composition.skill_hashes?.length ?? 0);
40
+ const toolCount = (composition.mcps?.length ?? 0) + (composition.tools?.length ?? 0);
41
+ return {
42
+ content: [{
43
+ type: 'text',
44
+ text: `Composition updated successfully.\n\nComposition hash: ${data.composition_hash}\nSkills: ${skillCount}\nTools/MCPs: ${toolCount}\n\nYour agent identity (${resolvedAgentId}) is preserved.`,
45
+ }],
46
+ };
47
+ }
48
+ catch (err) {
49
+ const msg = err instanceof Error ? err.message : 'Unknown error';
50
+ return { content: [{ type: 'text', text: `Composition update error: ${msg}` }] };
51
+ }
52
+ });
53
+ }
54
+ //# sourceMappingURL=update-composition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-composition.js","sourceRoot":"","sources":["../../../src/tools/update-composition.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@tethral/acr-mcp",
3
- "version": "0.2.0",
4
- "description": "MCP server for the ACR (Agent Composition Records) network. Check skills, log interactions, get friction reports.",
3
+ "version": "0.4.0",
4
+ "description": "MCP server for the ACR (Agent Composition Records) network. Search skills, check threats, log interactions, track versions, get friction reports.",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
7
7
  "types": "dist/src/index.d.ts",
8
8
  "bin": {
9
- "acr-mcp": "dist/src/index.js"
9
+ "acr-mcp": "dist/src/index.js",
10
+ "acr-mcp-http": "dist/src/http.js"
10
11
  },
11
12
  "scripts": {
12
13
  "build": "tsc",
@@ -33,6 +34,6 @@
33
34
  "files": ["dist", "README.md", "LICENSE"],
34
35
  "publishConfig": {
35
36
  "access": "public",
36
- "provenance": true
37
+ "provenance": false
37
38
  }
38
39
  }