@tethral/acr-mcp 2.1.1 → 2.1.3

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 (98) hide show
  1. package/dist/http.mjs +0 -1
  2. package/dist/index.mjs +0 -1
  3. package/package.json +11 -11
  4. package/dist/http.mjs.map +0 -7
  5. package/dist/index.mjs.map +0 -7
  6. package/dist/src/acr-state-file.d.ts +0 -6
  7. package/dist/src/acr-state-file.js +0 -32
  8. package/dist/src/acr-state-file.js.map +0 -1
  9. package/dist/src/env-detect.d.ts +0 -25
  10. package/dist/src/env-detect.js +0 -52
  11. package/dist/src/env-detect.js.map +0 -1
  12. package/dist/src/http.d.ts +0 -2
  13. package/dist/src/http.js +0 -112
  14. package/dist/src/http.js.map +0 -1
  15. package/dist/src/index.d.ts +0 -2
  16. package/dist/src/index.js +0 -17
  17. package/dist/src/index.js.map +0 -1
  18. package/dist/src/middleware/correlation-window.d.ts +0 -68
  19. package/dist/src/middleware/correlation-window.js +0 -113
  20. package/dist/src/middleware/correlation-window.js.map +0 -1
  21. package/dist/src/middleware/self-log.d.ts +0 -22
  22. package/dist/src/middleware/self-log.js +0 -72
  23. package/dist/src/middleware/self-log.js.map +0 -1
  24. package/dist/src/server.d.ts +0 -17
  25. package/dist/src/server.js +0 -96
  26. package/dist/src/server.js.map +0 -1
  27. package/dist/src/session-state.d.ts +0 -29
  28. package/dist/src/session-state.js +0 -102
  29. package/dist/src/session-state.js.map +0 -1
  30. package/dist/src/state.d.ts +0 -10
  31. package/dist/src/state.js +0 -39
  32. package/dist/src/state.js.map +0 -1
  33. package/dist/src/strip-sub-components.d.ts +0 -7
  34. package/dist/src/strip-sub-components.js +0 -15
  35. package/dist/src/strip-sub-components.js.map +0 -1
  36. package/dist/src/tools/acknowledge-threat.d.ts +0 -3
  37. package/dist/src/tools/acknowledge-threat.js +0 -38
  38. package/dist/src/tools/acknowledge-threat.js.map +0 -1
  39. package/dist/src/tools/check-entity.d.ts +0 -2
  40. package/dist/src/tools/check-entity.js +0 -144
  41. package/dist/src/tools/check-entity.js.map +0 -1
  42. package/dist/src/tools/check-environment.d.ts +0 -2
  43. package/dist/src/tools/check-environment.js +0 -32
  44. package/dist/src/tools/check-environment.js.map +0 -1
  45. package/dist/src/tools/disable-deep-composition.d.ts +0 -20
  46. package/dist/src/tools/disable-deep-composition.js +0 -45
  47. package/dist/src/tools/disable-deep-composition.js.map +0 -1
  48. package/dist/src/tools/get-coverage.d.ts +0 -2
  49. package/dist/src/tools/get-coverage.js +0 -67
  50. package/dist/src/tools/get-coverage.js.map +0 -1
  51. package/dist/src/tools/get-failure-registry.d.ts +0 -2
  52. package/dist/src/tools/get-failure-registry.js +0 -75
  53. package/dist/src/tools/get-failure-registry.js.map +0 -1
  54. package/dist/src/tools/get-friction-report.d.ts +0 -2
  55. package/dist/src/tools/get-friction-report.js +0 -208
  56. package/dist/src/tools/get-friction-report.js.map +0 -1
  57. package/dist/src/tools/get-interaction-log.d.ts +0 -2
  58. package/dist/src/tools/get-interaction-log.js +0 -199
  59. package/dist/src/tools/get-interaction-log.js.map +0 -1
  60. package/dist/src/tools/get-my-agent.d.ts +0 -2
  61. package/dist/src/tools/get-my-agent.js +0 -36
  62. package/dist/src/tools/get-my-agent.js.map +0 -1
  63. package/dist/src/tools/get-network-status.d.ts +0 -2
  64. package/dist/src/tools/get-network-status.js +0 -85
  65. package/dist/src/tools/get-network-status.js.map +0 -1
  66. package/dist/src/tools/get-notifications.d.ts +0 -3
  67. package/dist/src/tools/get-notifications.js +0 -34
  68. package/dist/src/tools/get-notifications.js.map +0 -1
  69. package/dist/src/tools/get-profile.d.ts +0 -2
  70. package/dist/src/tools/get-profile.js +0 -89
  71. package/dist/src/tools/get-profile.js.map +0 -1
  72. package/dist/src/tools/get-skill-tracker.d.ts +0 -2
  73. package/dist/src/tools/get-skill-tracker.js +0 -93
  74. package/dist/src/tools/get-skill-tracker.js.map +0 -1
  75. package/dist/src/tools/get-skill-versions.d.ts +0 -2
  76. package/dist/src/tools/get-skill-versions.js +0 -74
  77. package/dist/src/tools/get-skill-versions.js.map +0 -1
  78. package/dist/src/tools/get-stable-corridors.d.ts +0 -2
  79. package/dist/src/tools/get-stable-corridors.js +0 -65
  80. package/dist/src/tools/get-stable-corridors.js.map +0 -1
  81. package/dist/src/tools/get-trend.d.ts +0 -2
  82. package/dist/src/tools/get-trend.js +0 -75
  83. package/dist/src/tools/get-trend.js.map +0 -1
  84. package/dist/src/tools/log-interaction.d.ts +0 -3
  85. package/dist/src/tools/log-interaction.js +0 -177
  86. package/dist/src/tools/log-interaction.js.map +0 -1
  87. package/dist/src/tools/register-agent.d.ts +0 -2
  88. package/dist/src/tools/register-agent.js +0 -102
  89. package/dist/src/tools/register-agent.js.map +0 -1
  90. package/dist/src/tools/search-skills.d.ts +0 -2
  91. package/dist/src/tools/search-skills.js +0 -78
  92. package/dist/src/tools/search-skills.js.map +0 -1
  93. package/dist/src/tools/summarize-my-agent.d.ts +0 -2
  94. package/dist/src/tools/summarize-my-agent.js +0 -100
  95. package/dist/src/tools/summarize-my-agent.js.map +0 -1
  96. package/dist/src/tools/update-composition.d.ts +0 -3
  97. package/dist/src/tools/update-composition.js +0 -89
  98. package/dist/src/tools/update-composition.js.map +0 -1
@@ -1,199 +0,0 @@
1
- import { z } from 'zod';
2
- import { ensureRegistered, getAgentId, getAgentName, getAuthHeaders } from '../state.js';
3
- const STATUS_TRANSLATIONS = {
4
- success: 'success',
5
- failure: 'failure — target returned an error',
6
- timeout: 'timeout — target did not respond in time',
7
- partial: 'partial — incomplete response received',
8
- };
9
- // Anomaly categories are passed through as-is from the agent's report.
10
- // No synthetic descriptions — the category name is the data.
11
- async function resolveId(agentName, agentId, apiUrl) {
12
- if (agentName) {
13
- if (agentName.startsWith('acr_') || agentName.startsWith('pseudo_'))
14
- return agentName;
15
- const res = await fetch(`${apiUrl}/api/v1/agent/${encodeURIComponent(agentName)}`);
16
- if (!res.ok)
17
- throw new Error(`Agent "${agentName}" not found`);
18
- const data = await res.json();
19
- return data.agent_id;
20
- }
21
- return agentId || getAgentId() || await ensureRegistered();
22
- }
23
- export function getInteractionLogTool(server, apiUrl) {
24
- server.registerTool('get_interaction_log', {
25
- description: 'View your interaction history. Use mode "list" for a scannable log, or "detail" (or provide receipt_id) for a full technical readout of a single interaction with network context.',
26
- inputSchema: {
27
- agent_id: z.string().optional().describe('Your ACR agent ID'),
28
- agent_name: z.string().optional().describe('Your agent name (alternative to agent_id)'),
29
- receipt_id: z.string().optional().describe('Specific receipt ID for detail view'),
30
- mode: z.enum(['list', 'detail']).optional().default('list').describe('Display mode: "list" for scannable log, "detail" for full readout'),
31
- limit: z.number().min(1).max(200).optional().default(20).describe('Max interactions to show'),
32
- target: z.string().optional().describe('Filter by target system (e.g. "mcp:github")'),
33
- category: z.string().optional().describe('Filter by category (tool_call, delegation, etc.)'),
34
- status: z.string().optional().describe('Filter by status (success, failure, timeout, partial)'),
35
- anomaly_only: z.boolean().optional().default(false).describe('Show only anomaly-flagged interactions'),
36
- since: z.string().optional().describe('Show interactions after this ISO timestamp'),
37
- },
38
- annotations: { readOnlyHint: true, destructiveHint: false },
39
- _meta: { priorityHint: 0.7 },
40
- }, async ({ agent_id, agent_name, receipt_id, mode, limit, target, category, status, anomaly_only, since }) => {
41
- let id;
42
- try {
43
- id = await resolveId(agent_name, agent_id, apiUrl);
44
- }
45
- catch (err) {
46
- const msg = err instanceof Error ? err.message : 'Unknown error';
47
- return { content: [{ type: 'text', text: `Error: ${msg}` }] };
48
- }
49
- try {
50
- // Build query params
51
- const params = new URLSearchParams();
52
- if (receipt_id)
53
- params.set('receipt_id', receipt_id);
54
- if (limit)
55
- params.set('limit', String(limit));
56
- if (target)
57
- params.set('target', target);
58
- if (category)
59
- params.set('category', category);
60
- if (status)
61
- params.set('status', status);
62
- if (anomaly_only)
63
- params.set('anomaly', 'true');
64
- if (since)
65
- params.set('since', since);
66
- const res = await fetch(`${apiUrl}/api/v1/agent/${id}/receipts?${params}`, { headers: getAuthHeaders() });
67
- if (!res.ok) {
68
- const errText = await res.text().catch(() => `HTTP ${res.status}`);
69
- return { content: [{ type: 'text', text: `Error: ${errText}` }] };
70
- }
71
- const data = await res.json();
72
- if (data.error) {
73
- return { content: [{ type: 'text', text: `Error: ${data.error.message}` }] };
74
- }
75
- const displayName = data.name || agent_name || getAgentName() || id;
76
- // Detail mode — single receipt
77
- if (receipt_id || mode === 'detail') {
78
- if (data.receipt) {
79
- return { content: [{ type: 'text', text: formatDetail(data, displayName) }] };
80
- }
81
- // If receipt_id was given but we got a list, show first item in detail
82
- if (data.receipts && data.receipts.length > 0) {
83
- return { content: [{ type: 'text', text: formatListDetailed(data.receipts.slice(0, 5), displayName) }] };
84
- }
85
- return { content: [{ type: 'text', text: `No interactions found for ${displayName}. Call log_interaction after each external tool call to start recording data.` }] };
86
- }
87
- // List mode
88
- const receipts = data.receipts ?? [];
89
- if (receipts.length === 0) {
90
- return { content: [{ type: 'text', text: `No interactions found for ${displayName}. Call log_interaction after each external tool call to start recording data.` }] };
91
- }
92
- let text = `Interaction Log for ${displayName}\n`;
93
- text += `Showing ${receipts.length} interaction${receipts.length === 1 ? '' : 's'}`;
94
- if (data.next_cursor)
95
- text += ' (more available)';
96
- text += '\n\n';
97
- for (const r of receipts) {
98
- text += formatListLine(r);
99
- }
100
- if (data.next_cursor) {
101
- text += `\n... more interactions available. Use since/target/category filters or cursor to paginate.`;
102
- }
103
- return { content: [{ type: 'text', text }] };
104
- }
105
- catch (err) {
106
- const msg = err instanceof Error ? err.message : 'Unknown error';
107
- return { content: [{ type: 'text', text: `Interaction log error: ${msg}` }] };
108
- }
109
- });
110
- }
111
- function formatListLine(r) {
112
- let line = `[${r.created_at}] ${r.interaction_category} -> ${r.target_system_id} (${r.target_system_type})\n`;
113
- line += ` ${r.duration_ms ?? '?'}ms | ${STATUS_TRANSLATIONS[r.status] ?? r.status}`;
114
- if (r.anomaly_flagged) {
115
- const cat = r.anomaly_category;
116
- line += ` | ANOMALY: ${cat}`;
117
- }
118
- line += '\n';
119
- if (r.anomaly_flagged && r.anomaly_detail) {
120
- line += ` [reported] ${r.anomaly_detail}\n`;
121
- }
122
- return line + '\n';
123
- }
124
- function formatDetail(data, displayName) {
125
- const r = data.receipt;
126
- const ctx = data.network_context;
127
- const baseline = data.baseline;
128
- let text = `Receipt: ${r.receipt_id}\n`;
129
- text += `${'='.repeat(40)}\n`;
130
- text += `When: ${r.created_at}\n`;
131
- text += `What: ${r.interaction_category} -> ${r.target_system_id} (${r.target_system_type})\n`;
132
- // Duration with baseline context
133
- const dur = r.duration_ms;
134
- if (dur != null) {
135
- text += `Duration: ${dur}ms`;
136
- if (baseline) {
137
- const bMedian = baseline.baseline_median_ms;
138
- const bP95 = baseline.baseline_p95_ms;
139
- if (bMedian > 0) {
140
- const ratio = dur / bMedian;
141
- if (ratio > 2) {
142
- text += ` — ${ratio.toFixed(1)}x baseline median (${bMedian}ms), p95 ${bP95}ms`;
143
- }
144
- else {
145
- text += ` — within normal range (baseline median ${bMedian}ms, p95 ${bP95}ms)`;
146
- }
147
- }
148
- }
149
- text += '\n';
150
- }
151
- text += `Status: ${STATUS_TRANSLATIONS[r.status] ?? r.status}\n`;
152
- text += `\nAgent: ${displayName} (${r.emitter_agent_id})\n`;
153
- if (r.emitter_provider_class)
154
- text += `Provider: ${r.emitter_provider_class}\n`;
155
- if (r.emitter_composition_hash)
156
- text += `Composition: ${r.emitter_composition_hash}\n`;
157
- if (r.anomaly_flagged) {
158
- const cat = r.anomaly_category;
159
- text += `\nAnomaly: ${cat}\n`;
160
- if (r.anomaly_detail) {
161
- text += `[reported] ${r.anomaly_detail}\n`;
162
- }
163
- }
164
- else {
165
- text += `\nAnomaly: none\n`;
166
- }
167
- // Network context
168
- if (ctx) {
169
- text += `\n-- Network Context --\n`;
170
- text += `${r.target_system_id} — failure ${(ctx.failure_rate * 100).toFixed(1)}%`;
171
- text += `, anomaly ${(ctx.anomaly_rate * 100).toFixed(1)}%`;
172
- text += `, ${ctx.distinct_agent_count} agents observed\n`;
173
- if (ctx.median_duration_ms != null) {
174
- text += `Network median: ${ctx.median_duration_ms}ms`;
175
- if (ctx.p95_duration_ms != null)
176
- text += `, p95: ${ctx.p95_duration_ms}ms`;
177
- text += '\n';
178
- }
179
- }
180
- return text;
181
- }
182
- function formatListDetailed(receipts, displayName) {
183
- let text = `Interaction Detail for ${displayName}\n${'='.repeat(40)}\n\n`;
184
- for (const r of receipts) {
185
- text += `[${r.created_at}] ${r.interaction_category} -> ${r.target_system_id}\n`;
186
- text += ` ${r.duration_ms ?? '?'}ms | ${STATUS_TRANSLATIONS[r.status] ?? r.status}\n`;
187
- if (r.emitter_composition_hash)
188
- text += ` composition: ${r.emitter_composition_hash}\n`;
189
- if (r.anomaly_flagged) {
190
- text += ` ANOMALY: ${r.anomaly_category}`;
191
- if (r.anomaly_detail)
192
- text += ` — [reported] ${r.anomaly_detail}`;
193
- text += '\n';
194
- }
195
- text += '\n';
196
- }
197
- return text;
198
- }
199
- //# sourceMappingURL=get-interaction-log.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-interaction-log.js","sourceRoot":"","sources":["../../../src/tools/get-interaction-log.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAc,cAAc,EAAE,MAAM,aAAa,CAAC;AAErG,MAAM,mBAAmB,GAA2B;IAClD,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,oCAAoC;IAC7C,OAAO,EAAE,0CAA0C;IACnD,OAAO,EAAE,wCAAwC;CAClD,CAAC;AAEF,uEAAuE;AACvE,6DAA6D;AAE7D,KAAK,UAAU,SAAS,CAAC,SAA6B,EAAE,OAA2B,EAAE,MAAc;IACjG,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;QACtF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,iBAAiB,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACnF,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,UAAU,SAAS,aAAa,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA0B,CAAC;QACtD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IACD,OAAO,OAAO,IAAI,UAAU,EAAE,IAAI,MAAM,gBAAgB,EAAE,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAiB,EAAE,MAAc;IACrE,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,WAAW,EAAE,oLAAoL;QACjM,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YAC7D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;YACvF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;YACjF,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,mEAAmE,CAAC;YACzI,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;YAC7F,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;YACrF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;YAC5F,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;YAC/F,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;YACtG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;SACpF;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE;QAC3D,KAAK,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE;KAC7B,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE;QACzG,IAAI,EAAU,CAAC;QACf,IAAI,CAAC;YACH,EAAE,GAAG,MAAM,SAAS,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACrD,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,qBAAqB;YACrB,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YACrC,IAAI,UAAU;gBAAE,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YACrD,IAAI,KAAK;gBAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9C,IAAI,MAAM;gBAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACzC,IAAI,QAAQ;gBAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAC/C,IAAI,MAAM;gBAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACzC,IAAI,YAAY;gBAAE,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAChD,IAAI,KAAK;gBAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAEtC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,iBAAiB,EAAE,aAAa,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC;YAC1G,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,UAAU,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;YAC7E,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,WAAW,GAAG,IAAI,CAAC,IAAI,IAAI,UAAU,IAAI,YAAY,EAAE,IAAI,EAAE,CAAC;YAEpE,+BAA+B;YAC/B,IAAI,UAAU,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACpC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;gBACzF,CAAC;gBACD,uEAAuE;gBACvE,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC9C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;gBACpH,CAAC;gBACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,6BAA6B,WAAW,+EAA+E,EAAE,CAAC,EAAE,CAAC;YACjL,CAAC;YAED,YAAY;YACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;YACrC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,6BAA6B,WAAW,+EAA+E,EAAE,CAAC,EAAE,CAAC;YACjL,CAAC;YAED,IAAI,IAAI,GAAG,uBAAuB,WAAW,IAAI,CAAC;YAClD,IAAI,IAAI,WAAW,QAAQ,CAAC,MAAM,eAAe,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YACpF,IAAI,IAAI,CAAC,WAAW;gBAAE,IAAI,IAAI,mBAAmB,CAAC;YAClD,IAAI,IAAI,MAAM,CAAC;YAEf,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,IAAI,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC;YAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,IAAI,IAAI,6FAA6F,CAAC;YACxG,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;AAED,SAAS,cAAc,CAAC,CAA0B;IAChD,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,oBAAoB,OAAO,CAAC,CAAC,gBAAgB,KAAK,CAAC,CAAC,kBAAkB,KAAK,CAAC;IAC9G,IAAI,IAAI,KAAK,CAAC,CAAC,WAAW,IAAI,GAAG,QAAQ,mBAAmB,CAAC,CAAC,CAAC,MAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;IAC/F,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,CAAC,CAAC,gBAA0B,CAAC;QACzC,IAAI,IAAI,eAAe,GAAG,EAAE,CAAC;IAC/B,CAAC;IACD,IAAI,IAAI,IAAI,CAAC;IACb,IAAI,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;QAC1C,IAAI,IAAI,gBAAgB,CAAC,CAAC,cAAc,IAAI,CAAC;IAC/C,CAAC;IACD,OAAO,IAAI,GAAG,IAAI,CAAC;AACrB,CAAC;AAED,SAAS,YAAY,CAAC,IAA6B,EAAE,WAAmB;IACtE,MAAM,CAAC,GAAG,IAAI,CAAC,OAAkC,CAAC;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,eAAiD,CAAC;IACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAA0C,CAAC;IAEjE,IAAI,IAAI,GAAG,YAAY,CAAC,CAAC,UAAU,IAAI,CAAC;IACxC,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;IAC9B,IAAI,IAAI,SAAS,CAAC,CAAC,UAAU,IAAI,CAAC;IAClC,IAAI,IAAI,SAAS,CAAC,CAAC,oBAAoB,OAAO,CAAC,CAAC,gBAAgB,KAAK,CAAC,CAAC,kBAAkB,KAAK,CAAC;IAE/F,iCAAiC;IACjC,MAAM,GAAG,GAAG,CAAC,CAAC,WAA4B,CAAC;IAC3C,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAChB,IAAI,IAAI,aAAa,GAAG,IAAI,CAAC;QAC7B,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,QAAQ,CAAC,kBAA4B,CAAC;YACtD,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAyB,CAAC;YAChD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAChB,MAAM,KAAK,GAAG,GAAG,GAAG,OAAO,CAAC;gBAC5B,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;oBACd,IAAI,IAAI,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,OAAO,YAAY,IAAI,IAAI,CAAC;gBAClF,CAAC;qBAAM,CAAC;oBACN,IAAI,IAAI,2CAA2C,OAAO,WAAW,IAAI,KAAK,CAAC;gBACjF,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,IAAI,IAAI,CAAC;IACf,CAAC;IAED,IAAI,IAAI,WAAW,mBAAmB,CAAC,CAAC,CAAC,MAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC;IAC3E,IAAI,IAAI,YAAY,WAAW,KAAK,CAAC,CAAC,gBAAgB,KAAK,CAAC;IAC5D,IAAI,CAAC,CAAC,sBAAsB;QAAE,IAAI,IAAI,aAAa,CAAC,CAAC,sBAAsB,IAAI,CAAC;IAChF,IAAI,CAAC,CAAC,wBAAwB;QAAE,IAAI,IAAI,gBAAgB,CAAC,CAAC,wBAAwB,IAAI,CAAC;IAEvF,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,CAAC,CAAC,gBAA0B,CAAC;QACzC,IAAI,IAAI,cAAc,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;YACrB,IAAI,IAAI,cAAc,CAAC,CAAC,cAAc,IAAI,CAAC;QAC7C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,IAAI,mBAAmB,CAAC;IAC9B,CAAC;IAED,kBAAkB;IAClB,IAAI,GAAG,EAAE,CAAC;QACR,IAAI,IAAI,2BAA2B,CAAC;QACpC,IAAI,IAAI,GAAG,CAAC,CAAC,gBAAgB,cAAc,CAAE,GAAG,CAAC,YAAuB,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;QAC9F,IAAI,IAAI,aAAa,CAAE,GAAG,CAAC,YAAuB,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;QACxE,IAAI,IAAI,KAAK,GAAG,CAAC,oBAAoB,oBAAoB,CAAC;QAC1D,IAAI,GAAG,CAAC,kBAAkB,IAAI,IAAI,EAAE,CAAC;YACnC,IAAI,IAAI,mBAAmB,GAAG,CAAC,kBAAkB,IAAI,CAAC;YACtD,IAAI,GAAG,CAAC,eAAe,IAAI,IAAI;gBAAE,IAAI,IAAI,UAAU,GAAG,CAAC,eAAe,IAAI,CAAC;YAC3E,IAAI,IAAI,IAAI,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAwC,EAAE,WAAmB;IACvF,IAAI,IAAI,GAAG,0BAA0B,WAAW,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC;IAC1E,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,IAAI,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,oBAAoB,OAAO,CAAC,CAAC,gBAAgB,IAAI,CAAC;QACjF,IAAI,IAAI,KAAK,CAAC,CAAC,WAAW,IAAI,GAAG,QAAQ,mBAAmB,CAAC,CAAC,CAAC,MAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC;QACjG,IAAI,CAAC,CAAC,wBAAwB;YAAE,IAAI,IAAI,kBAAkB,CAAC,CAAC,wBAAwB,IAAI,CAAC;QACzF,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;YACtB,IAAI,IAAI,cAAc,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAC3C,IAAI,CAAC,CAAC,cAAc;gBAAE,IAAI,IAAI,iBAAiB,CAAC,CAAC,cAAc,EAAE,CAAC;YAClE,IAAI,IAAI,IAAI,CAAC;QACf,CAAC;QACD,IAAI,IAAI,IAAI,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,2 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function getMyAgentTool(server: McpServer): void;
@@ -1,36 +0,0 @@
1
- import { ensureRegistered, getAgentId, getAgentName, getApiUrl, getApiKey, getAuthHeaders } from '../state.js';
2
- const DASHBOARD_URL = process.env.ACR_DASHBOARD_URL ?? 'https://dashboard.acr.nfkey.ai';
3
- export function getMyAgentTool(server) {
4
- server.registerTool('get_my_agent', {
5
- description: 'Get your agent profile — name, ID, provider, status, and registration date. Zero-config: uses the auto-assigned agent identity.',
6
- annotations: { readOnlyHint: true, destructiveHint: false },
7
- _meta: { priorityHint: 0.8 },
8
- }, async () => {
9
- const id = getAgentId() || await ensureRegistered();
10
- const name = getAgentName();
11
- const apiUrl = getApiUrl();
12
- const apiKey = getApiKey();
13
- try {
14
- const res = await fetch(`${apiUrl}/api/v1/agent/${encodeURIComponent(id)}`, {
15
- headers: getAuthHeaders(),
16
- });
17
- const agent = res.ok
18
- ? await res.json()
19
- : null;
20
- const displayName = agent?.name ?? name ?? id;
21
- const provider = agent?.provider_class ?? 'unknown';
22
- let text = `${displayName} (${provider})\n`;
23
- text += `ID: ${id}\n`;
24
- if (apiKey)
25
- text += `Key: ${apiKey.substring(0, 16)}...${apiKey.substring(apiKey.length - 4)} (full key in ~/.claude/.acr-state.json)\n`;
26
- text += `Dashboard: ${DASHBOARD_URL}/agents/${id}\n`;
27
- text += `\nLenses: get_friction_report · get_profile · summarize_my_agent · get_coverage · get_failure_registry · get_stable_corridors · get_trend · get_interaction_log · get_network_status`;
28
- return { content: [{ type: 'text', text }] };
29
- }
30
- catch (err) {
31
- const msg = err instanceof Error ? err.message : 'Unknown error';
32
- return { content: [{ type: 'text', text: `Error: ${msg}` }] };
33
- }
34
- });
35
- }
36
- //# sourceMappingURL=get-my-agent.js.map
@@ -1 +0,0 @@
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,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE/G,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,gCAAgC,CAAC;AAExF,MAAM,UAAU,cAAc,CAAC,MAAiB;IAC9C,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,WAAW,EAAE,iIAAiI;QAC9I,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE;QAC3D,KAAK,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE;KAC7B,EACD,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;QAC3B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAE3B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,iBAAiB,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC1E,OAAO,EAAE,cAAc,EAAE;aAC1B,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,GAAG,CAAC,EAAE;gBAClB,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAGb;gBACH,CAAC,CAAC,IAAI,CAAC;YAET,MAAM,WAAW,GAAG,KAAK,EAAE,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YAC9C,MAAM,QAAQ,GAAG,KAAK,EAAE,cAAc,IAAI,SAAS,CAAC;YAEpD,IAAI,IAAI,GAAG,GAAG,WAAW,KAAK,QAAQ,KAAK,CAAC;YAC5C,IAAI,IAAI,OAAO,EAAE,IAAI,CAAC;YACtB,IAAI,MAAM;gBAAE,IAAI,IAAI,QAAQ,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,4CAA4C,CAAC;YACzI,IAAI,IAAI,cAAc,aAAa,WAAW,EAAE,IAAI,CAAC;YACrD,IAAI,IAAI,sLAAsL,CAAC;YAE/L,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,UAAU,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;QACzE,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1,2 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function getNetworkStatusTool(server: McpServer, apiUrl: string): void;
@@ -1,85 +0,0 @@
1
- export function getNetworkStatusTool(server, apiUrl) {
2
- server.registerTool('get_network_status', {
3
- description: 'Network-wide observation dashboard. Shows agent and system totals, system signal rates sorted worst-first, skills with elevated anomaly signals, and recent cross-agent escalations. Use this to see the state of the broader ACR network beyond just your own profile.',
4
- annotations: { readOnlyHint: true, destructiveHint: false },
5
- _meta: { priorityHint: 0.7 },
6
- }, async () => {
7
- try {
8
- const res = await fetch(`${apiUrl}/api/v1/network/status`);
9
- if (!res.ok) {
10
- const errText = await res.text().catch(() => `HTTP ${res.status}`);
11
- return { content: [{ type: 'text', text: `Network status error: ${errText}` }] };
12
- }
13
- const data = await res.json();
14
- const t = data.totals ?? {};
15
- let text = `ACR Network Dashboard\n${'='.repeat(30)}\n`;
16
- if (data.stale) {
17
- text += `\nDATA MAY BE STALE — background jobs may not have run recently.\n`;
18
- }
19
- // Totals
20
- text += `\n-- Totals (24h) --\n`;
21
- text += ` Active agents: ${t.active_agents ?? 0}`;
22
- text += ` | Systems: ${t.active_systems ?? 0}`;
23
- text += ` | Interactions: ${(t.interactions_24h ?? 0).toLocaleString()}\n`;
24
- const anomalyPct = ((t.anomaly_rate_24h ?? 0) * 100).toFixed(1);
25
- text += ` Anomaly rate: ${anomalyPct}%\n`;
26
- // Systems
27
- const systems = data.systems ?? [];
28
- if (systems.length > 0) {
29
- text += `\n-- Systems (${systems.length}, worst-first) --\n`;
30
- for (const s of systems.slice(0, 20)) {
31
- text += ` ${s.system_id}`;
32
- text += ` — ${s.agent_count ?? 0} agents`;
33
- if (s.failure_rate > 0)
34
- text += `, ${(s.failure_rate * 100).toFixed(1)}% failure`;
35
- if (s.anomaly_rate > 0)
36
- text += `, ${(s.anomaly_rate * 100).toFixed(1)}% anomaly`;
37
- if (s.median_duration_ms != null)
38
- text += `, ${s.median_duration_ms}ms median`;
39
- text += '\n';
40
- }
41
- if (systems.length > 20) {
42
- text += ` ... and ${systems.length - 20} more systems\n`;
43
- }
44
- }
45
- else {
46
- text += `\n-- Systems --\n No system health data available.\n`;
47
- }
48
- // Skills with anomaly signals
49
- const threats = data.threats ?? [];
50
- if (threats.length > 0) {
51
- text += `\n-- Skill Anomaly Signals (${threats.length}) --\n`;
52
- for (const th of threats) {
53
- text += ` ${th.skill_name || th.skill_hash.substring(0, 16) + '...'}`;
54
- text += ` — ${th.anomaly_signal_count} signals, ${th.agent_count} reporters`;
55
- text += '\n';
56
- }
57
- }
58
- else {
59
- text += `\n-- Skill Anomaly Signals --\n No elevated anomaly signals observed.\n`;
60
- }
61
- // Escalations
62
- const escalations = data.recent_escalations ?? [];
63
- if (escalations.length > 0) {
64
- text += `\n-- Recent Escalations (${escalations.length}) --\n`;
65
- for (const e of escalations) {
66
- text += ` ${e.target} — ${e.agents_affected} agents`;
67
- if (e.providers_affected?.length > 0) {
68
- text += `, ${e.providers_affected.length} providers [${e.providers_affected.join(', ')}]`;
69
- }
70
- text += '\n';
71
- if (e.anomaly_categories?.length > 0) {
72
- text += ` Categories: ${e.anomaly_categories.join(', ')}\n`;
73
- }
74
- text += ` Detected: ${e.detected_at}\n`;
75
- }
76
- }
77
- return { content: [{ type: 'text', text }] };
78
- }
79
- catch (err) {
80
- const msg = err instanceof Error ? err.message : 'Unknown error';
81
- return { content: [{ type: 'text', text: `Network status error: ${msg}` }] };
82
- }
83
- });
84
- }
85
- //# sourceMappingURL=get-network-status.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-network-status.js","sourceRoot":"","sources":["../../../src/tools/get-network-status.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- import type { SessionState } from '../session-state.js';
3
- export declare function getNotificationsTool(server: McpServer, apiUrl: string, getSession: () => SessionState): void;
@@ -1,34 +0,0 @@
1
- import { getAuthHeaders } from '../state.js';
2
- import { z } from 'zod';
3
- export function getNotificationsTool(server, apiUrl, getSession) {
4
- server.registerTool('get_notifications', {
5
- description: 'Check for unread anomaly signal notifications about components in your composition. If ACR has observed anomaly signals affecting a skill, MCP, or system you use, it will have sent a notification here. Also delivers version updates. Call this on startup. ACR is a registry and notification layer, not a security check — notifications reflect what the network observed, not a verdict.',
6
- inputSchema: {
7
- agent_id: z.string().optional().describe('Your agent ID (uses session if omitted)'),
8
- },
9
- annotations: { readOnlyHint: true, destructiveHint: false },
10
- _meta: { priorityHint: 0.5 },
11
- }, async ({ agent_id }) => {
12
- try {
13
- const resolvedId = agent_id ?? getSession().agentId ?? await getSession().ensureRegistered(apiUrl);
14
- const res = await fetch(`${apiUrl}/api/v1/agent/${resolvedId}/notifications?read=false`, { headers: getAuthHeaders() });
15
- const data = await res.json();
16
- if (data.unread_count === 0) {
17
- return { content: [{ type: 'text', text: 'No unread notifications.' }] };
18
- }
19
- let text = `You have ${data.unread_count} unread notification(s):\n`;
20
- for (const n of data.notifications) {
21
- text += `\n[${n.severity}] ${n.title}`;
22
- text += `\n ${n.message}`;
23
- text += `\n ID: ${n.id} | ${n.created_at.split('T')[0]}`;
24
- text += '\n';
25
- }
26
- return { content: [{ type: 'text', text }] };
27
- }
28
- catch (err) {
29
- const msg = err instanceof Error ? err.message : 'Unknown error';
30
- return { content: [{ type: 'text', text: `Notification check error: ${msg}` }] };
31
- }
32
- });
33
- }
34
- //# sourceMappingURL=get-notifications.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-notifications.js","sourceRoot":"","sources":["../../../src/tools/get-notifications.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,MAAc,EAAE,UAA8B;IACpG,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,WAAW,EAAE,iYAAiY;QAC9Y,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;SACpF;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE;QAC3D,KAAK,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE;KAC7B,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,QAAQ,IAAI,UAAU,EAAE,CAAC,OAAO,IAAI,MAAM,UAAU,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACnG,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,iBAAiB,UAAU,2BAA2B,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC;YACxH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAM1B,CAAC;YAEF,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;gBAC5B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC,EAAE,CAAC;YACpF,CAAC;YAED,IAAI,IAAI,GAAG,YAAY,IAAI,CAAC,YAAY,4BAA4B,CAAC;YACrE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnC,IAAI,IAAI,MAAM,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;gBACvC,IAAI,IAAI,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC5B,IAAI,IAAI,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3D,IAAI,IAAI,IAAI,CAAC;YACf,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,6BAA6B,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;QAC5F,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1,2 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function getProfileTool(server: McpServer, apiUrl: string): void;
@@ -1,89 +0,0 @@
1
- import { z } from 'zod';
2
- import { ensureRegistered, getAgentId, getAgentName, getApiUrl, getAuthHeaders } from '../state.js';
3
- async function resolveId(nameOrId) {
4
- if (nameOrId.startsWith('acr_') || nameOrId.startsWith('pseudo_'))
5
- return nameOrId;
6
- const res = await fetch(`${getApiUrl()}/api/v1/agent/${encodeURIComponent(nameOrId)}`);
7
- if (!res.ok)
8
- throw new Error(`Agent "${nameOrId}" not found`);
9
- return (await res.json()).agent_id;
10
- }
11
- export function getProfileTool(server, apiUrl) {
12
- server.registerTool('get_profile', {
13
- description: 'Your interaction profile: identity, composition summary, composition delta (MCP-observed vs agent-reported), receipt counts, target counts, and days active. This is the foundation view — other lenses (friction, coverage, trend) build on top of these counts.',
14
- inputSchema: {
15
- agent_id: z.string().optional().describe('Your ACR agent ID (auto-assigned if omitted)'),
16
- agent_name: z.string().optional().describe('Your agent name (alternative to agent_id)'),
17
- },
18
- annotations: { readOnlyHint: true, destructiveHint: false },
19
- _meta: { priorityHint: 0.7 },
20
- }, async ({ agent_id, agent_name }) => {
21
- let id;
22
- try {
23
- id = agent_name ? await resolveId(agent_name) : (agent_id || getAgentId() || await ensureRegistered());
24
- }
25
- catch (err) {
26
- return { content: [{ type: 'text', text: `Error: ${err instanceof Error ? err.message : 'Unknown'}` }] };
27
- }
28
- try {
29
- const res = await fetch(`${apiUrl}/api/v1/agent/${id}/profile`, { headers: getAuthHeaders() });
30
- if (!res.ok) {
31
- const errText = await res.text().catch(() => `HTTP ${res.status}`);
32
- return { content: [{ type: 'text', text: `Profile error: ${errText}` }] };
33
- }
34
- const data = await res.json();
35
- const displayName = data.name || agent_name || getAgentName() || id;
36
- const c = data.counts;
37
- const comp = data.composition_summary;
38
- let text = `Profile: ${displayName}\n${'='.repeat(30)}\n`;
39
- text += `Agent ID: ${data.agent_id}\n`;
40
- if (data.provider_class)
41
- text += `Provider: ${data.provider_class}\n`;
42
- if (data.operational_domain)
43
- text += `Domain: ${data.operational_domain}\n`;
44
- if (data.composition_hash)
45
- text += `Composition hash: ${data.composition_hash}\n`;
46
- text += `Registered: ${data.registered_at}\n`;
47
- text += `Last active: ${data.last_active_at}\n`;
48
- text += `\n-- Counts --\n`;
49
- text += ` Total receipts: ${c.total_receipts}\n`;
50
- text += ` Last 24h: ${c.receipts_last_24h}\n`;
51
- text += ` Distinct targets: ${c.distinct_targets}\n`;
52
- text += ` Distinct categories: ${c.distinct_categories}\n`;
53
- text += ` Distinct chains: ${c.distinct_chains}\n`;
54
- text += ` Days active: ${c.days_active}\n`;
55
- if (c.first_signal_at)
56
- text += ` First signal: ${c.first_signal_at}\n`;
57
- if (c.last_signal_at)
58
- text += ` Last signal: ${c.last_signal_at}\n`;
59
- text += `\n-- Composition --\n`;
60
- text += ` Skills: ${comp.skill_count ?? 0}\n`;
61
- text += ` MCPs: ${comp.mcp_count ?? 0}\n`;
62
- text += ` Tools: ${comp.tool_count ?? 0}\n`;
63
- const delta = data.composition_delta;
64
- if (delta) {
65
- const mcpOnly = delta.mcp_only;
66
- const agentOnly = delta.agent_only;
67
- if (mcpOnly.length > 0 || agentOnly.length > 0) {
68
- text += `\n-- Composition Delta (MCP-observed vs agent-reported) --\n`;
69
- if (mcpOnly.length > 0)
70
- text += ` MCP sees but agent didn't report: ${mcpOnly.join(', ')}\n`;
71
- if (agentOnly.length > 0)
72
- text += ` Agent reported but MCP doesn't see: ${agentOnly.join(', ')}\n`;
73
- }
74
- else {
75
- text += `\n Composition sources agree.\n`;
76
- }
77
- if (delta.last_observed_at)
78
- text += ` Last MCP observation: ${delta.last_observed_at}\n`;
79
- if (delta.last_reported_at)
80
- text += ` Last agent report: ${delta.last_reported_at}\n`;
81
- }
82
- return { content: [{ type: 'text', text }] };
83
- }
84
- catch (err) {
85
- return { content: [{ type: 'text', text: `Profile error: ${err instanceof Error ? err.message : 'Unknown'}` }] };
86
- }
87
- });
88
- }
89
- //# sourceMappingURL=get-profile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-profile.js","sourceRoot":"","sources":["../../../src/tools/get-profile.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function getSkillTrackerTool(server: McpServer, apiUrl: string): void;
@@ -1,93 +0,0 @@
1
- import { z } from 'zod';
2
- export function getSkillTrackerTool(server, apiUrl) {
3
- server.registerTool('get_skill_tracker', {
4
- description: 'Track skill adoption and anomaly signal rates across the agent population. Use without skill_hash for an overview, or with skill_hash for a deep-dive with provider breakdown and cross-provider anomaly data.',
5
- inputSchema: {
6
- skill_hash: z.string().optional().describe('Specific skill hash for deep-dive view'),
7
- min_anomaly_signals: z.number().optional().describe('Only show skills with at least this many anomaly signals'),
8
- sort: z.enum(['agent_count', 'interaction_count', 'anomaly_signal_rate']).optional().default('agent_count').describe('Sort field'),
9
- limit: z.number().min(1).max(100).optional().default(20).describe('Max skills to show'),
10
- },
11
- annotations: { readOnlyHint: true, destructiveHint: false },
12
- _meta: { priorityHint: 0.5 },
13
- }, async ({ skill_hash, min_anomaly_signals, sort, limit }) => {
14
- try {
15
- // Deep-dive mode
16
- if (skill_hash) {
17
- const res = await fetch(`${apiUrl}/api/v1/network/skills/${encodeURIComponent(skill_hash)}`);
18
- if (!res.ok) {
19
- const data = await res.json().catch(() => ({}));
20
- return { content: [{ type: 'text', text: `Error: ${data.message ?? 'Skill not found'}` }] };
21
- }
22
- const skill = await res.json();
23
- return { content: [{ type: 'text', text: formatSkillDetail(skill) }] };
24
- }
25
- // List mode
26
- const params = new URLSearchParams();
27
- if (min_anomaly_signals != null)
28
- params.set('min_anomaly_signals', String(min_anomaly_signals));
29
- if (sort)
30
- params.set('sort', sort);
31
- if (limit)
32
- params.set('limit', String(limit));
33
- const res = await fetch(`${apiUrl}/api/v1/network/skills?${params}`);
34
- if (!res.ok) {
35
- const errText = await res.text().catch(() => `HTTP ${res.status}`);
36
- return { content: [{ type: 'text', text: `Skill tracker error: ${errText}` }] };
37
- }
38
- const data = await res.json();
39
- if (!data.skills || data.skills.length === 0) {
40
- return { content: [{ type: 'text', text: 'No skills tracked yet.' }] };
41
- }
42
- let text = `Skill Tracker\n${'='.repeat(20)}\n\n`;
43
- for (const s of data.skills) {
44
- text += `${s.skill_name || s.skill_hash.substring(0, 16) + '...'}\n`;
45
- text += ` ${s.agent_count} agents | ${s.interaction_count} interactions`;
46
- const sigRate = s.anomaly_signal_rate;
47
- if (sigRate > 0) {
48
- text += ` | ${s.anomaly_signal_count} anomaly signals (${(sigRate * 100).toFixed(2)}%)`;
49
- }
50
- text += '\n\n';
51
- }
52
- if (data.next_cursor) {
53
- text += `... more skills available. Use filters or cursor to paginate.\n`;
54
- }
55
- return { content: [{ type: 'text', text }] };
56
- }
57
- catch (err) {
58
- const msg = err instanceof Error ? err.message : 'Unknown error';
59
- return { content: [{ type: 'text', text: `Skill tracker error: ${msg}` }] };
60
- }
61
- });
62
- }
63
- function formatSkillDetail(skill) {
64
- let text = `Skill: ${skill.skill_name || skill.skill_hash}\n`;
65
- text += `${'='.repeat(40)}\n`;
66
- text += ` Hash: ${skill.skill_hash}\n`;
67
- text += ` Adoption: ${skill.agent_count} agents | ${skill.interaction_count} interactions\n`;
68
- const sigCount = skill.anomaly_signal_count;
69
- const sigRate = skill.anomaly_signal_rate;
70
- text += ` Anomaly rate: ${(sigRate * 100).toFixed(2)}% (${sigCount} signals)\n`;
71
- text += ` First seen: ${skill.first_seen} | Last updated: ${skill.last_updated}\n`;
72
- // Provider breakdown
73
- const providers = skill.provider_breakdown;
74
- if (providers && providers.length > 0) {
75
- text += `\n By provider:\n`;
76
- for (const p of providers) {
77
- text += ` ${p.provider_class}: ${p.agent_count} agents\n`;
78
- }
79
- }
80
- // Cross-provider anomaly data
81
- const crossProvider = skill.cross_provider_anomalies;
82
- if (crossProvider && crossProvider.length > 0) {
83
- text += `\n Anomalies by provider (last 7d):\n`;
84
- for (const cp of crossProvider) {
85
- text += ` ${cp.provider}: ${cp.anomaly_count} anomalies\n`;
86
- }
87
- }
88
- if (crossProvider && crossProvider.length >= 2) {
89
- text += `\n ${crossProvider.length} providers reporting anomalies\n`;
90
- }
91
- return text;
92
- }
93
- //# sourceMappingURL=get-skill-tracker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-skill-tracker.js","sourceRoot":"","sources":["../../../src/tools/get-skill-tracker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,MAAc;IACnE,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,WAAW,EAAE,gNAAgN;QAC7N,WAAW,EAAE;YACX,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;YACpF,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;YAC/G,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,mBAAmB,EAAE,qBAAqB,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;YAClI,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;SACxF;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE;QAC3D,KAAK,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE;KAC7B,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,mBAAmB,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;QACzD,IAAI,CAAC;YACH,iBAAiB;YACjB,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,0BAA0B,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;gBAC7F,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;oBACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAChD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAW,IAAgC,CAAC,OAAO,IAAI,iBAAiB,EAAE,EAAE,CAAC,EAAE,CAAC;gBACpI,CAAC;gBACD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,EAA6B,CAAC;gBAC1D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YAClF,CAAC;YAED,YAAY;YACZ,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YACrC,IAAI,mBAAmB,IAAI,IAAI;gBAAE,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAChG,IAAI,IAAI;gBAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACnC,IAAI,KAAK;gBAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAE9C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,0BAA0B,MAAM,EAAE,CAAC,CAAC;YACrE,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,wBAAwB,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;YAC3F,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA4E,CAAC;YAExG,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,EAAE,CAAC;YAClF,CAAC;YAED,IAAI,IAAI,GAAG,kBAAkB,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC;YAElD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC5B,IAAI,IAAI,GAAG,CAAC,CAAC,UAAU,IAAK,CAAC,CAAC,UAAqB,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC;gBACjF,IAAI,IAAI,KAAK,CAAC,CAAC,WAAW,aAAa,CAAC,CAAC,iBAAiB,eAAe,CAAC;gBAC1E,MAAM,OAAO,GAAG,CAAC,CAAC,mBAA6B,CAAC;gBAChD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;oBAChB,IAAI,IAAI,MAAM,CAAC,CAAC,oBAAoB,qBAAqB,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC1F,CAAC;gBACD,IAAI,IAAI,MAAM,CAAC;YACjB,CAAC;YAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,IAAI,IAAI,iEAAiE,CAAC;YAC5E,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,wBAAwB,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;QACvF,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAA8B;IACvD,IAAI,IAAI,GAAG,UAAU,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC;IAC9D,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;IAC9B,IAAI,IAAI,WAAW,KAAK,CAAC,UAAU,IAAI,CAAC;IACxC,IAAI,IAAI,eAAe,KAAK,CAAC,WAAW,aAAa,KAAK,CAAC,iBAAiB,iBAAiB,CAAC;IAE9F,MAAM,QAAQ,GAAG,KAAK,CAAC,oBAA8B,CAAC;IACtD,MAAM,OAAO,GAAG,KAAK,CAAC,mBAA6B,CAAC;IACpD,IAAI,IAAI,mBAAmB,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,QAAQ,aAAa,CAAC;IACjF,IAAI,IAAI,iBAAiB,KAAK,CAAC,UAAU,oBAAoB,KAAK,CAAC,YAAY,IAAI,CAAC;IAEpF,qBAAqB;IACrB,MAAM,SAAS,GAAG,KAAK,CAAC,kBAAwF,CAAC;IACjH,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,IAAI,IAAI,oBAAoB,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,IAAI,IAAI,OAAO,CAAC,CAAC,cAAc,KAAK,CAAC,CAAC,WAAW,WAAW,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,MAAM,aAAa,GAAG,KAAK,CAAC,wBAA0F,CAAC;IACvH,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,IAAI,IAAI,wCAAwC,CAAC;QACjD,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;YAC/B,IAAI,IAAI,OAAO,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,aAAa,cAAc,CAAC;QAChE,CAAC;IACH,CAAC;IAED,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC/C,IAAI,IAAI,OAAO,aAAa,CAAC,MAAM,kCAAkC,CAAC;IACxE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,2 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function getSkillVersionsTool(server: McpServer, apiUrl: string, resolverUrl: string): void;