@guildai/cli 0.10.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth-CRMO5O3N.js +29 -0
- package/dist/auth-CRMO5O3N.js.map +7 -0
- package/dist/chat-5VX2WJH2.js +303 -0
- package/dist/chat-5VX2WJH2.js.map +7 -0
- package/dist/chat-SIKDYZQK.js +31 -0
- package/dist/chat-SIKDYZQK.js.map +7 -0
- package/dist/chunk-56YCMGL3.js +522 -0
- package/dist/chunk-56YCMGL3.js.map +7 -0
- package/dist/chunk-6EX6E7WP.js +7042 -0
- package/dist/chunk-6EX6E7WP.js.map +7 -0
- package/dist/chunk-B7VAF5UG.js +532 -0
- package/dist/chunk-B7VAF5UG.js.map +7 -0
- package/dist/chunk-DOIYVBNY.js +3057 -0
- package/dist/chunk-DOIYVBNY.js.map +7 -0
- package/dist/chunk-ENKEEJ45.js +17 -0
- package/dist/chunk-ENKEEJ45.js.map +7 -0
- package/dist/chunk-IBRKVGMZ.js +97041 -0
- package/dist/chunk-IBRKVGMZ.js.map +7 -0
- package/dist/chunk-LFMQJOKC.js +19778 -0
- package/dist/chunk-LFMQJOKC.js.map +7 -0
- package/dist/chunk-M347HP6M.js +22896 -0
- package/dist/chunk-M347HP6M.js.map +7 -0
- package/dist/chunk-OYQ476FQ.js +44 -0
- package/dist/chunk-OYQ476FQ.js.map +7 -0
- package/dist/chunk-PNCUR4OB.js +257 -0
- package/dist/chunk-PNCUR4OB.js.map +7 -0
- package/dist/chunk-RIG2HZWM.js +317 -0
- package/dist/chunk-RIG2HZWM.js.map +7 -0
- package/dist/chunk-SPZPZXUN.js +826 -0
- package/dist/chunk-SPZPZXUN.js.map +7 -0
- package/dist/chunk-VVSOU6ON.js +53 -0
- package/dist/chunk-VVSOU6ON.js.map +7 -0
- package/dist/chunk-X3ADGWOF.js +3643 -0
- package/dist/chunk-X3ADGWOF.js.map +7 -0
- package/dist/commands/agent/logs.d.ts +3 -0
- package/dist/commands/setup.d.ts +16 -0
- package/dist/commands/skill/create.d.ts +3 -0
- package/dist/commands/skill/get.d.ts +3 -0
- package/dist/commands/skill/list.d.ts +3 -0
- package/dist/commands/skill/update.d.ts +3 -0
- package/dist/commands/skill/version/create.d.ts +3 -0
- package/dist/commands/skill/version/get.d.ts +3 -0
- package/dist/commands/skill/version/list.d.ts +3 -0
- package/dist/devtools-AO7YSDOD.js +67 -0
- package/dist/devtools-AO7YSDOD.js.map +7 -0
- package/dist/dist-4CBK6X5H.js +1566 -0
- package/dist/dist-4CBK6X5H.js.map +7 -0
- package/dist/esm-FRAVZP4J.js +13 -0
- package/dist/esm-FRAVZP4J.js.map +7 -0
- package/dist/execa-XQMWSABC.js +35 -0
- package/dist/execa-XQMWSABC.js.map +7 -0
- package/dist/index.js +8231 -253
- package/dist/index.js.map +7 -0
- package/dist/lib/api-types.d.ts +44 -0
- package/dist/lib/auth.d.ts +1 -1
- package/dist/lib/config.d.ts +9 -0
- package/dist/lib/errors.d.ts +1 -1
- package/dist/lib/output-mode.d.ts +9 -2
- package/dist/lib/output.d.ts +17 -1
- package/dist/lib/session-events.d.ts +14 -3
- package/dist/lib/session-polling.d.ts +24 -1
- package/dist/lib/session-resume.d.ts +15 -1
- package/dist/lib/stdin.d.ts +5 -1
- package/dist/lib/websocket-client.d.ts +46 -0
- package/dist/open-RF4X5MOP.js +13 -0
- package/dist/open-RF4X5MOP.js.map +7 -0
- package/dist/server-JYVH64FD.js +27659 -0
- package/dist/server-JYVH64FD.js.map +7 -0
- package/dist/test-SNIYRJ32.js +692 -0
- package/dist/test-SNIYRJ32.js.map +7 -0
- package/docs/skills/codex-agent-dev.md +2 -2
- package/package.json +8 -12
- package/dist/commands/agent/chat.js +0 -278
- package/dist/commands/agent/clone.js +0 -116
- package/dist/commands/agent/code.js +0 -87
- package/dist/commands/agent/fork.js +0 -218
- package/dist/commands/agent/get.js +0 -37
- package/dist/commands/agent/grep.js +0 -107
- package/dist/commands/agent/init.js +0 -390
- package/dist/commands/agent/list.js +0 -110
- package/dist/commands/agent/owners.js +0 -74
- package/dist/commands/agent/publish.js +0 -91
- package/dist/commands/agent/pull.js +0 -198
- package/dist/commands/agent/revalidate.js +0 -56
- package/dist/commands/agent/save.js +0 -346
- package/dist/commands/agent/search.js +0 -61
- package/dist/commands/agent/tags/add.js +0 -73
- package/dist/commands/agent/tags/list.js +0 -43
- package/dist/commands/agent/tags/remove.js +0 -84
- package/dist/commands/agent/tags/set.js +0 -71
- package/dist/commands/agent/test.js +0 -486
- package/dist/commands/agent/unpublish.js +0 -64
- package/dist/commands/agent/update.js +0 -110
- package/dist/commands/agent/versions.js +0 -55
- package/dist/commands/agent/workspaces.js +0 -54
- package/dist/commands/auth/login.js +0 -33
- package/dist/commands/auth/logout.js +0 -24
- package/dist/commands/auth/status.js +0 -38
- package/dist/commands/auth/token.js +0 -19
- package/dist/commands/chat.js +0 -1345
- package/dist/commands/config/get.js +0 -64
- package/dist/commands/config/list.js +0 -47
- package/dist/commands/config/path.js +0 -38
- package/dist/commands/config/set.js +0 -132
- package/dist/commands/credentials/endpoint-list.js +0 -88
- package/dist/commands/credentials/list.js +0 -50
- package/dist/commands/credentials/policy-create.js +0 -66
- package/dist/commands/credentials/policy-delete.js +0 -33
- package/dist/commands/credentials/policy-list.js +0 -45
- package/dist/commands/credentials/policy-update.js +0 -66
- package/dist/commands/doctor.js +0 -233
- package/dist/commands/integration/connect.js +0 -76
- package/dist/commands/integration/create.js +0 -298
- package/dist/commands/integration/get.js +0 -95
- package/dist/commands/integration/list.js +0 -62
- package/dist/commands/integration/operation/create.js +0 -164
- package/dist/commands/integration/operation/list.js +0 -92
- package/dist/commands/integration/update.js +0 -139
- package/dist/commands/integration/version/build.js +0 -86
- package/dist/commands/integration/version/create.js +0 -45
- package/dist/commands/integration/version/get.js +0 -72
- package/dist/commands/integration/version/list.js +0 -45
- package/dist/commands/integration/version/publish.js +0 -79
- package/dist/commands/integration/version/test.js +0 -104
- package/dist/commands/job/get-step.js +0 -40
- package/dist/commands/job/get.js +0 -44
- package/dist/commands/mcp.js +0 -34
- package/dist/commands/session/create.js +0 -59
- package/dist/commands/session/events.js +0 -56
- package/dist/commands/session/get.js +0 -33
- package/dist/commands/session/interrupt.js +0 -33
- package/dist/commands/session/list.js +0 -59
- package/dist/commands/session/send.js +0 -54
- package/dist/commands/session/tasks.js +0 -45
- package/dist/commands/setup.js +0 -230
- package/dist/commands/trigger/activate.js +0 -41
- package/dist/commands/trigger/create.js +0 -197
- package/dist/commands/trigger/deactivate.js +0 -41
- package/dist/commands/trigger/get.js +0 -33
- package/dist/commands/trigger/list.js +0 -57
- package/dist/commands/trigger/sessions.js +0 -48
- package/dist/commands/trigger/update.js +0 -128
- package/dist/commands/version.js +0 -24
- package/dist/commands/workspace/agent/add.js +0 -114
- package/dist/commands/workspace/agent/list.js +0 -78
- package/dist/commands/workspace/agent/remove.js +0 -78
- package/dist/commands/workspace/clear.js +0 -45
- package/dist/commands/workspace/context/edit.js +0 -107
- package/dist/commands/workspace/context/get.js +0 -47
- package/dist/commands/workspace/context/list.js +0 -51
- package/dist/commands/workspace/context/publish.js +0 -42
- package/dist/commands/workspace/create.js +0 -51
- package/dist/commands/workspace/current.js +0 -63
- package/dist/commands/workspace/get.js +0 -39
- package/dist/commands/workspace/list.js +0 -70
- package/dist/commands/workspace/select.js +0 -184
- package/dist/components/AgentInstallPrompt.js +0 -97
- package/dist/components/SplashAnimation.js +0 -321
- package/dist/components/TaskView.js +0 -268
- package/dist/lib/agent-helpers.js +0 -306
- package/dist/lib/alternate-screen.js +0 -59
- package/dist/lib/api-client.js +0 -154
- package/dist/lib/api-types.js +0 -10
- package/dist/lib/auth.js +0 -284
- package/dist/lib/braille-canvas.js +0 -321
- package/dist/lib/colors.js +0 -46
- package/dist/lib/config-cache.js +0 -45
- package/dist/lib/config.js +0 -153
- package/dist/lib/did-you-mean.js +0 -144
- package/dist/lib/errors.js +0 -375
- package/dist/lib/event-filter.js +0 -91
- package/dist/lib/generated-types.js +0 -56
- package/dist/lib/git.js +0 -176
- package/dist/lib/gk.js +0 -91
- package/dist/lib/guild-config.js +0 -178
- package/dist/lib/iap.js +0 -117
- package/dist/lib/integration-helpers.js +0 -38
- package/dist/lib/loading-messages.js +0 -72
- package/dist/lib/logo.js +0 -141
- package/dist/lib/lottie-serverside.js +0 -181
- package/dist/lib/markdown.js +0 -38
- package/dist/lib/npmrc.js +0 -59
- package/dist/lib/output-mode.js +0 -33
- package/dist/lib/output.js +0 -591
- package/dist/lib/owner-helpers.js +0 -112
- package/dist/lib/polling.js +0 -76
- package/dist/lib/progress.js +0 -324
- package/dist/lib/session-events-fetch.js +0 -25
- package/dist/lib/session-events.js +0 -112
- package/dist/lib/session-polling.js +0 -160
- package/dist/lib/session-resume.js +0 -96
- package/dist/lib/spinners.js +0 -770
- package/dist/lib/splash.js +0 -41
- package/dist/lib/stdin.js +0 -84
- package/dist/lib/svg-to-braille.js +0 -76
- package/dist/lib/table.js +0 -59
- package/dist/lib/update-check.js +0 -65
- package/dist/lib/validate-input-schema.js +0 -208
- package/dist/lib/version-helpers.js +0 -121
- package/dist/lib/workspace-helpers.js +0 -49
- package/dist/mcp/resources.js +0 -67
- package/dist/mcp/server.js +0 -64
- package/dist/mcp/tools.js +0 -753
package/dist/mcp/tools.js
DELETED
|
@@ -1,753 +0,0 @@
|
|
|
1
|
-
// Copyright 2026 Guild.ai
|
|
2
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import { z } from 'zod';
|
|
4
|
-
import { pollForResponse as pollForSessionResponse } from '../lib/session-polling.js';
|
|
5
|
-
// ---------------------------------------------------------------------------
|
|
6
|
-
// Constants
|
|
7
|
-
// ---------------------------------------------------------------------------
|
|
8
|
-
const POLL_TIMEOUT_MS = 120_000;
|
|
9
|
-
// ---------------------------------------------------------------------------
|
|
10
|
-
// Helpers
|
|
11
|
-
// ---------------------------------------------------------------------------
|
|
12
|
-
function debugLog(debug, message) {
|
|
13
|
-
if (debug) {
|
|
14
|
-
process.stderr.write(`[guild-mcp] ${message}\n`);
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
function extractEventText(event) {
|
|
18
|
-
if (!event.content)
|
|
19
|
-
return undefined;
|
|
20
|
-
if (typeof event.content === 'string') {
|
|
21
|
-
return event.content;
|
|
22
|
-
}
|
|
23
|
-
if (typeof event.content === 'object' && event.content.data) {
|
|
24
|
-
return event.content.data;
|
|
25
|
-
}
|
|
26
|
-
return undefined;
|
|
27
|
-
}
|
|
28
|
-
async function pollForMcpResponse(apiClient, sessionId, debug) {
|
|
29
|
-
debugLog(debug, `Polling response for session ${sessionId}`);
|
|
30
|
-
const result = await pollForSessionResponse(apiClient, sessionId, undefined, POLL_TIMEOUT_MS);
|
|
31
|
-
return result.response || 'Agent completed without output.';
|
|
32
|
-
}
|
|
33
|
-
function errText(action, error) {
|
|
34
|
-
return `Failed to ${action}: ${error instanceof Error ? error.message : String(error)}`;
|
|
35
|
-
}
|
|
36
|
-
// ---------------------------------------------------------------------------
|
|
37
|
-
// Shared schema fragments
|
|
38
|
-
// ---------------------------------------------------------------------------
|
|
39
|
-
const workspaceIdParam = z
|
|
40
|
-
.string()
|
|
41
|
-
.optional()
|
|
42
|
-
.describe('Workspace ID (defaults to current workspace)');
|
|
43
|
-
// ---------------------------------------------------------------------------
|
|
44
|
-
// Tool registration
|
|
45
|
-
// ---------------------------------------------------------------------------
|
|
46
|
-
export function registerTools(server, apiClient, defaultWorkspaceId, debug) {
|
|
47
|
-
// =========================================================================
|
|
48
|
-
// User
|
|
49
|
-
// =========================================================================
|
|
50
|
-
server.tool('guild_whoami', 'Get current user info', {}, async () => {
|
|
51
|
-
debugLog(debug, 'guild_whoami');
|
|
52
|
-
try {
|
|
53
|
-
const me = await apiClient.get('/me');
|
|
54
|
-
const text = [`Name: ${me.name}`, `ID: ${me.id}`, `Type: ${me.type}`].join('\n');
|
|
55
|
-
return { content: [{ type: 'text', text }] };
|
|
56
|
-
}
|
|
57
|
-
catch (error) {
|
|
58
|
-
return {
|
|
59
|
-
content: [{ type: 'text', text: errText('get user info', error) }],
|
|
60
|
-
isError: true,
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
// =========================================================================
|
|
65
|
-
// Workspaces
|
|
66
|
-
// =========================================================================
|
|
67
|
-
server.tool('guild_list_workspaces', 'List workspaces the current user has access to', {
|
|
68
|
-
search: z.string().optional().describe('Filter workspaces by name'),
|
|
69
|
-
limit: z
|
|
70
|
-
.number()
|
|
71
|
-
.int()
|
|
72
|
-
.min(1)
|
|
73
|
-
.max(100)
|
|
74
|
-
.optional()
|
|
75
|
-
.describe('Max results (default 20)'),
|
|
76
|
-
}, async ({ search, limit }) => {
|
|
77
|
-
debugLog(debug, `guild_list_workspaces: search=${search || ''}`);
|
|
78
|
-
try {
|
|
79
|
-
const params = new URLSearchParams();
|
|
80
|
-
if (search)
|
|
81
|
-
params.set('search', search);
|
|
82
|
-
params.set('limit', String(limit || 20));
|
|
83
|
-
const response = await apiClient.get(`/me/workspaces?${params.toString()}`);
|
|
84
|
-
const text = response.items
|
|
85
|
-
.map((w) => `• ${w.full_name || w.name} (${w.id})`)
|
|
86
|
-
.join('\n');
|
|
87
|
-
return {
|
|
88
|
-
content: [{ type: 'text', text: text || 'No workspaces found.' }],
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
catch (error) {
|
|
92
|
-
return {
|
|
93
|
-
content: [{ type: 'text', text: errText('list workspaces', error) }],
|
|
94
|
-
isError: true,
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
});
|
|
98
|
-
server.tool('guild_get_workspace', 'Get workspace details including context', {
|
|
99
|
-
workspace_id: workspaceIdParam,
|
|
100
|
-
}, async ({ workspace_id }) => {
|
|
101
|
-
const wsId = workspace_id || defaultWorkspaceId;
|
|
102
|
-
debugLog(debug, `guild_get_workspace: ${wsId}`);
|
|
103
|
-
try {
|
|
104
|
-
const ws = await apiClient.get(`/workspaces/${wsId}`);
|
|
105
|
-
const ownerLine = ws.owner
|
|
106
|
-
? `Owner: ${ws.owner.name} (${ws.owner.type})`
|
|
107
|
-
: null;
|
|
108
|
-
const text = [`Name: ${ws.full_name || ws.name}`, `ID: ${ws.id}`, ownerLine]
|
|
109
|
-
.filter(Boolean)
|
|
110
|
-
.join('\n');
|
|
111
|
-
return { content: [{ type: 'text', text }] };
|
|
112
|
-
}
|
|
113
|
-
catch (error) {
|
|
114
|
-
return {
|
|
115
|
-
content: [{ type: 'text', text: errText('get workspace', error) }],
|
|
116
|
-
isError: true,
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
});
|
|
120
|
-
server.tool('guild_list_workspace_agents', 'List agents installed in a workspace', {
|
|
121
|
-
workspace_id: workspaceIdParam,
|
|
122
|
-
search: z.string().optional().describe('Filter agents by name'),
|
|
123
|
-
}, async ({ workspace_id, search }) => {
|
|
124
|
-
const wsId = workspace_id || defaultWorkspaceId;
|
|
125
|
-
debugLog(debug, `guild_list_workspace_agents: ws=${wsId} search=${search || ''}`);
|
|
126
|
-
try {
|
|
127
|
-
let endpoint = `/workspaces/${wsId}/workspace_agents`;
|
|
128
|
-
if (search)
|
|
129
|
-
endpoint += `?search=${encodeURIComponent(search)}`;
|
|
130
|
-
const agents = await apiClient.fetchAll(endpoint);
|
|
131
|
-
const text = agents
|
|
132
|
-
.map((wa) => {
|
|
133
|
-
const name = wa.agent.full_name || wa.agent.name;
|
|
134
|
-
const version = wa.agent_version.version_number ||
|
|
135
|
-
wa.agent_version.sha?.slice(0, 7) ||
|
|
136
|
-
'latest';
|
|
137
|
-
return `• ${name} (workspace_agent: ${wa.id}, agent: ${wa.agent.id}) — v${version}`;
|
|
138
|
-
})
|
|
139
|
-
.join('\n');
|
|
140
|
-
return {
|
|
141
|
-
content: [{ type: 'text', text: text || 'No agents in workspace.' }],
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
catch (error) {
|
|
145
|
-
return {
|
|
146
|
-
content: [
|
|
147
|
-
{ type: 'text', text: errText('list workspace agents', error) },
|
|
148
|
-
],
|
|
149
|
-
isError: true,
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
});
|
|
153
|
-
server.tool('guild_add_workspace_agent', 'Install an agent in a workspace', {
|
|
154
|
-
agent_id: z.string().describe('The agent ID to install'),
|
|
155
|
-
workspace_id: workspaceIdParam,
|
|
156
|
-
}, async ({ agent_id, workspace_id }) => {
|
|
157
|
-
const wsId = workspace_id || defaultWorkspaceId;
|
|
158
|
-
debugLog(debug, `guild_add_workspace_agent: ${agent_id} ws=${wsId}`);
|
|
159
|
-
try {
|
|
160
|
-
const wa = await apiClient.post(`/workspaces/${wsId}/workspace_agents`, { agent_id });
|
|
161
|
-
return {
|
|
162
|
-
content: [
|
|
163
|
-
{
|
|
164
|
-
type: 'text',
|
|
165
|
-
text: `Installed agent ${wa.agent.full_name || wa.agent.name} (workspace_agent: ${wa.id})`,
|
|
166
|
-
},
|
|
167
|
-
],
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
catch (error) {
|
|
171
|
-
return {
|
|
172
|
-
content: [
|
|
173
|
-
{ type: 'text', text: errText('add workspace agent', error) },
|
|
174
|
-
],
|
|
175
|
-
isError: true,
|
|
176
|
-
};
|
|
177
|
-
}
|
|
178
|
-
});
|
|
179
|
-
server.tool('guild_remove_workspace_agent', 'Remove an agent from the workspace', {
|
|
180
|
-
workspace_agent_id: z.string().describe('The workspace agent ID to remove'),
|
|
181
|
-
}, async ({ workspace_agent_id }) => {
|
|
182
|
-
debugLog(debug, `guild_remove_workspace_agent: ${workspace_agent_id}`);
|
|
183
|
-
try {
|
|
184
|
-
await apiClient.delete(`/workspace_agents/${workspace_agent_id}`);
|
|
185
|
-
return {
|
|
186
|
-
content: [
|
|
187
|
-
{
|
|
188
|
-
type: 'text',
|
|
189
|
-
text: `Removed workspace agent ${workspace_agent_id}.`,
|
|
190
|
-
},
|
|
191
|
-
],
|
|
192
|
-
};
|
|
193
|
-
}
|
|
194
|
-
catch (error) {
|
|
195
|
-
return {
|
|
196
|
-
content: [
|
|
197
|
-
{ type: 'text', text: errText('remove workspace agent', error) },
|
|
198
|
-
],
|
|
199
|
-
isError: true,
|
|
200
|
-
};
|
|
201
|
-
}
|
|
202
|
-
});
|
|
203
|
-
// =========================================================================
|
|
204
|
-
// Contexts
|
|
205
|
-
// =========================================================================
|
|
206
|
-
server.tool('guild_list_contexts', 'List context versions for a workspace', {
|
|
207
|
-
workspace_id: workspaceIdParam,
|
|
208
|
-
limit: z
|
|
209
|
-
.number()
|
|
210
|
-
.int()
|
|
211
|
-
.min(1)
|
|
212
|
-
.max(100)
|
|
213
|
-
.optional()
|
|
214
|
-
.describe('Max results (default 20)'),
|
|
215
|
-
}, async ({ workspace_id, limit }) => {
|
|
216
|
-
const wsId = workspace_id || defaultWorkspaceId;
|
|
217
|
-
debugLog(debug, `guild_list_contexts: ws=${wsId}`);
|
|
218
|
-
try {
|
|
219
|
-
const response = await apiClient.get(`/workspaces/${wsId}/contexts?limit=${limit || 20}`);
|
|
220
|
-
const text = response.items
|
|
221
|
-
.map((c) => {
|
|
222
|
-
const summary = c.summary ? ` — ${c.summary}` : '';
|
|
223
|
-
return `• ${c.id} [${c.status}] ${c.created_at}${summary}`;
|
|
224
|
-
})
|
|
225
|
-
.join('\n');
|
|
226
|
-
return {
|
|
227
|
-
content: [{ type: 'text', text: text || 'No contexts found.' }],
|
|
228
|
-
};
|
|
229
|
-
}
|
|
230
|
-
catch (error) {
|
|
231
|
-
return {
|
|
232
|
-
content: [{ type: 'text', text: errText('list contexts', error) }],
|
|
233
|
-
isError: true,
|
|
234
|
-
};
|
|
235
|
-
}
|
|
236
|
-
});
|
|
237
|
-
server.tool('guild_get_context', 'Get the content of a specific context version', {
|
|
238
|
-
context_id: z.string().describe('The context ID'),
|
|
239
|
-
}, async ({ context_id }) => {
|
|
240
|
-
debugLog(debug, `guild_get_context: ${context_id}`);
|
|
241
|
-
try {
|
|
242
|
-
const ctx = await apiClient.get(`/contexts/${context_id}`);
|
|
243
|
-
const sections = [
|
|
244
|
-
`Context: ${ctx.id}`,
|
|
245
|
-
`Status: ${ctx.status}`,
|
|
246
|
-
`Created: ${ctx.created_at}`,
|
|
247
|
-
];
|
|
248
|
-
if (ctx.summary)
|
|
249
|
-
sections.push(`Summary: ${ctx.summary}`);
|
|
250
|
-
if (ctx.manual_context) {
|
|
251
|
-
sections.push('', '--- Manual Context ---', ctx.manual_context);
|
|
252
|
-
}
|
|
253
|
-
if (ctx.generated_context) {
|
|
254
|
-
sections.push('', '--- Generated Context ---', ctx.generated_context);
|
|
255
|
-
}
|
|
256
|
-
return { content: [{ type: 'text', text: sections.join('\n') }] };
|
|
257
|
-
}
|
|
258
|
-
catch (error) {
|
|
259
|
-
return {
|
|
260
|
-
content: [{ type: 'text', text: errText('get context', error) }],
|
|
261
|
-
isError: true,
|
|
262
|
-
};
|
|
263
|
-
}
|
|
264
|
-
});
|
|
265
|
-
server.tool('guild_publish_context', 'Create or publish a new context version for a workspace', {
|
|
266
|
-
content: z.string().describe('The context content to publish'),
|
|
267
|
-
workspace_id: workspaceIdParam,
|
|
268
|
-
status: z
|
|
269
|
-
.enum(['ACTIVE', 'ARCHIVED'])
|
|
270
|
-
.optional()
|
|
271
|
-
.describe('Context status (default ACTIVE)'),
|
|
272
|
-
summary: z.string().optional().describe('Short summary of the context'),
|
|
273
|
-
}, async ({ content, workspace_id, status, summary }) => {
|
|
274
|
-
const wsId = workspace_id || defaultWorkspaceId;
|
|
275
|
-
debugLog(debug, `guild_publish_context: ws=${wsId}`);
|
|
276
|
-
try {
|
|
277
|
-
const body = { manual_context: content };
|
|
278
|
-
if (status)
|
|
279
|
-
body.status = status;
|
|
280
|
-
if (summary)
|
|
281
|
-
body.summary = summary;
|
|
282
|
-
const ctx = await apiClient.post(`/workspaces/${wsId}/contexts`, body);
|
|
283
|
-
return {
|
|
284
|
-
content: [
|
|
285
|
-
{
|
|
286
|
-
type: 'text',
|
|
287
|
-
text: `Published context ${ctx.id} [${ctx.status}]`,
|
|
288
|
-
},
|
|
289
|
-
],
|
|
290
|
-
};
|
|
291
|
-
}
|
|
292
|
-
catch (error) {
|
|
293
|
-
return {
|
|
294
|
-
content: [{ type: 'text', text: errText('publish context', error) }],
|
|
295
|
-
isError: true,
|
|
296
|
-
};
|
|
297
|
-
}
|
|
298
|
-
});
|
|
299
|
-
// =========================================================================
|
|
300
|
-
// Agents (catalog)
|
|
301
|
-
// =========================================================================
|
|
302
|
-
server.tool('guild_search_agents', 'Search or list agents in the Guild catalog', {
|
|
303
|
-
search: z.string().optional().describe('Search query to filter agents by name'),
|
|
304
|
-
published_only: z
|
|
305
|
-
.boolean()
|
|
306
|
-
.optional()
|
|
307
|
-
.describe('Only show published agents (default true)'),
|
|
308
|
-
limit: z
|
|
309
|
-
.number()
|
|
310
|
-
.int()
|
|
311
|
-
.min(1)
|
|
312
|
-
.max(100)
|
|
313
|
-
.optional()
|
|
314
|
-
.describe('Max results (default 20)'),
|
|
315
|
-
}, async ({ search, published_only, limit }) => {
|
|
316
|
-
debugLog(debug, `guild_search_agents: search=${search || ''}`);
|
|
317
|
-
try {
|
|
318
|
-
const params = new URLSearchParams();
|
|
319
|
-
if (search)
|
|
320
|
-
params.set('search', search);
|
|
321
|
-
if (published_only !== undefined)
|
|
322
|
-
params.set('published_only', String(published_only));
|
|
323
|
-
params.set('limit', String(limit || 20));
|
|
324
|
-
const response = await apiClient.get(`/agents?${params.toString()}`);
|
|
325
|
-
const text = response.items
|
|
326
|
-
.map((a) => {
|
|
327
|
-
const name = a.full_name || a.name;
|
|
328
|
-
const desc = a.description ? ` — ${a.description}` : '';
|
|
329
|
-
return `• ${name} (${a.id})${desc}`;
|
|
330
|
-
})
|
|
331
|
-
.join('\n');
|
|
332
|
-
return {
|
|
333
|
-
content: [{ type: 'text', text: text || 'No agents found.' }],
|
|
334
|
-
};
|
|
335
|
-
}
|
|
336
|
-
catch (error) {
|
|
337
|
-
return {
|
|
338
|
-
content: [{ type: 'text', text: errText('search agents', error) }],
|
|
339
|
-
isError: true,
|
|
340
|
-
};
|
|
341
|
-
}
|
|
342
|
-
});
|
|
343
|
-
server.tool('guild_get_agent', 'Get details for a specific Guild agent', {
|
|
344
|
-
agent_id: z
|
|
345
|
-
.string()
|
|
346
|
-
.describe('The agent ID or full name (e.g. owner~agent-name)'),
|
|
347
|
-
}, async ({ agent_id }) => {
|
|
348
|
-
debugLog(debug, `guild_get_agent: ${agent_id}`);
|
|
349
|
-
try {
|
|
350
|
-
const agent = await apiClient.get(`/agents/${agent_id}`);
|
|
351
|
-
const lines = [
|
|
352
|
-
`Name: ${agent.full_name || agent.name}`,
|
|
353
|
-
`ID: ${agent.id}`,
|
|
354
|
-
`Status: ${agent.status}`,
|
|
355
|
-
agent.description ? `Description: ${agent.description}` : null,
|
|
356
|
-
agent.owner ? `Owner: ${agent.owner.name}` : null,
|
|
357
|
-
agent.is_public !== undefined ? `Public: ${agent.is_public}` : null,
|
|
358
|
-
];
|
|
359
|
-
return {
|
|
360
|
-
content: [{ type: 'text', text: lines.filter(Boolean).join('\n') }],
|
|
361
|
-
};
|
|
362
|
-
}
|
|
363
|
-
catch (error) {
|
|
364
|
-
return {
|
|
365
|
-
content: [{ type: 'text', text: errText('get agent', error) }],
|
|
366
|
-
isError: true,
|
|
367
|
-
};
|
|
368
|
-
}
|
|
369
|
-
});
|
|
370
|
-
server.tool('guild_get_agent_readme', 'Get the README for a Guild agent', {
|
|
371
|
-
agent_id: z.string().describe('The agent ID or full name'),
|
|
372
|
-
}, async ({ agent_id }) => {
|
|
373
|
-
debugLog(debug, `guild_get_agent_readme: ${agent_id}`);
|
|
374
|
-
try {
|
|
375
|
-
const readme = await apiClient.get(`/agents/${agent_id}/readme`);
|
|
376
|
-
return { content: [{ type: 'text', text: readme.content }] };
|
|
377
|
-
}
|
|
378
|
-
catch (error) {
|
|
379
|
-
return {
|
|
380
|
-
content: [
|
|
381
|
-
{ type: 'text', text: errText('get agent readme', error) },
|
|
382
|
-
],
|
|
383
|
-
isError: true,
|
|
384
|
-
};
|
|
385
|
-
}
|
|
386
|
-
});
|
|
387
|
-
server.tool('guild_get_agent_code', 'Get the source code files for a Guild agent', {
|
|
388
|
-
agent_id: z.string().describe('The agent ID or full name'),
|
|
389
|
-
}, async ({ agent_id }) => {
|
|
390
|
-
debugLog(debug, `guild_get_agent_code: ${agent_id}`);
|
|
391
|
-
try {
|
|
392
|
-
const files = await apiClient.get(`/agents/${agent_id}/code`);
|
|
393
|
-
if (files.length === 0) {
|
|
394
|
-
return {
|
|
395
|
-
content: [{ type: 'text', text: 'No source files found.' }],
|
|
396
|
-
};
|
|
397
|
-
}
|
|
398
|
-
const text = files.map((f) => `--- ${f.path} ---\n${f.content}`).join('\n\n');
|
|
399
|
-
return { content: [{ type: 'text', text }] };
|
|
400
|
-
}
|
|
401
|
-
catch (error) {
|
|
402
|
-
return {
|
|
403
|
-
content: [{ type: 'text', text: errText('get agent code', error) }],
|
|
404
|
-
isError: true,
|
|
405
|
-
};
|
|
406
|
-
}
|
|
407
|
-
});
|
|
408
|
-
server.tool('guild_list_agent_versions', 'List versions of a Guild agent', {
|
|
409
|
-
agent_id: z.string().describe('The agent ID or full name'),
|
|
410
|
-
limit: z
|
|
411
|
-
.number()
|
|
412
|
-
.int()
|
|
413
|
-
.min(1)
|
|
414
|
-
.max(100)
|
|
415
|
-
.optional()
|
|
416
|
-
.describe('Max results (default 20)'),
|
|
417
|
-
}, async ({ agent_id, limit }) => {
|
|
418
|
-
debugLog(debug, `guild_list_agent_versions: ${agent_id}`);
|
|
419
|
-
try {
|
|
420
|
-
const response = await apiClient.get(`/agents/${agent_id}/versions?limit=${limit || 20}`);
|
|
421
|
-
const text = response.items
|
|
422
|
-
.map((v) => {
|
|
423
|
-
const version = v.version_number || v.sha?.slice(0, 7) || 'ephemeral';
|
|
424
|
-
return `• ${version} (${v.id}) [${v.status}] — ${v.summary} — ${v.created_at}`;
|
|
425
|
-
})
|
|
426
|
-
.join('\n');
|
|
427
|
-
return {
|
|
428
|
-
content: [{ type: 'text', text: text || 'No versions found.' }],
|
|
429
|
-
};
|
|
430
|
-
}
|
|
431
|
-
catch (error) {
|
|
432
|
-
return {
|
|
433
|
-
content: [
|
|
434
|
-
{ type: 'text', text: errText('list agent versions', error) },
|
|
435
|
-
],
|
|
436
|
-
isError: true,
|
|
437
|
-
};
|
|
438
|
-
}
|
|
439
|
-
});
|
|
440
|
-
// =========================================================================
|
|
441
|
-
// Sessions
|
|
442
|
-
// =========================================================================
|
|
443
|
-
server.tool('guild_chat', 'Start a new chat session with a Guild agent and get a response', {
|
|
444
|
-
message: z.string().describe('The message to send to the agent'),
|
|
445
|
-
agent: z
|
|
446
|
-
.string()
|
|
447
|
-
.optional()
|
|
448
|
-
.describe('Agent identifier (e.g. owner~agent-name). Uses workspace default if not specified'),
|
|
449
|
-
workspace_id: workspaceIdParam,
|
|
450
|
-
}, async ({ message, agent, workspace_id }) => {
|
|
451
|
-
const wsId = workspace_id || defaultWorkspaceId;
|
|
452
|
-
debugLog(debug, `guild_chat: message="${message}", agent=${agent || 'default'}, ws=${wsId}`);
|
|
453
|
-
try {
|
|
454
|
-
const body = {
|
|
455
|
-
session_type: 'chat',
|
|
456
|
-
initial_prompt: message,
|
|
457
|
-
};
|
|
458
|
-
if (agent) {
|
|
459
|
-
body.agent_id = agent;
|
|
460
|
-
}
|
|
461
|
-
const session = await apiClient.post(`/workspaces/${wsId}/sessions`, body);
|
|
462
|
-
debugLog(debug, `Session created: ${session.id}`);
|
|
463
|
-
const response = await pollForMcpResponse(apiClient, session.id, debug);
|
|
464
|
-
return {
|
|
465
|
-
content: [{ type: 'text', text: response }],
|
|
466
|
-
};
|
|
467
|
-
}
|
|
468
|
-
catch (error) {
|
|
469
|
-
return {
|
|
470
|
-
content: [{ type: 'text', text: errText('chat', error) }],
|
|
471
|
-
isError: true,
|
|
472
|
-
};
|
|
473
|
-
}
|
|
474
|
-
});
|
|
475
|
-
server.tool('guild_send_message', 'Send a follow-up message to an existing Guild session', {
|
|
476
|
-
session_id: z.string().describe('The session ID to send the message to'),
|
|
477
|
-
message: z.string().describe('The message to send'),
|
|
478
|
-
}, async ({ session_id, message }) => {
|
|
479
|
-
debugLog(debug, `guild_send_message: session=${session_id}`);
|
|
480
|
-
try {
|
|
481
|
-
await apiClient.post(`/sessions/${session_id}/events`, {
|
|
482
|
-
event_type: 'user_message',
|
|
483
|
-
content: { type: 'text', data: message },
|
|
484
|
-
});
|
|
485
|
-
const response = await pollForMcpResponse(apiClient, session_id, debug);
|
|
486
|
-
return {
|
|
487
|
-
content: [{ type: 'text', text: response }],
|
|
488
|
-
};
|
|
489
|
-
}
|
|
490
|
-
catch (error) {
|
|
491
|
-
return {
|
|
492
|
-
content: [{ type: 'text', text: errText('send message', error) }],
|
|
493
|
-
isError: true,
|
|
494
|
-
};
|
|
495
|
-
}
|
|
496
|
-
});
|
|
497
|
-
server.tool('guild_list_sessions', 'List recent sessions in a Guild workspace', {
|
|
498
|
-
workspace_id: workspaceIdParam,
|
|
499
|
-
limit: z
|
|
500
|
-
.number()
|
|
501
|
-
.int()
|
|
502
|
-
.min(1)
|
|
503
|
-
.max(100)
|
|
504
|
-
.optional()
|
|
505
|
-
.describe('Number of sessions to return (default 20)'),
|
|
506
|
-
}, async ({ workspace_id, limit }) => {
|
|
507
|
-
const wsId = workspace_id || defaultWorkspaceId;
|
|
508
|
-
debugLog(debug, `guild_list_sessions: ws=${wsId}`);
|
|
509
|
-
try {
|
|
510
|
-
const queryLimit = limit || 20;
|
|
511
|
-
const response = await apiClient.get(`/workspaces/${wsId}/sessions?limit=${queryLimit}`);
|
|
512
|
-
const text = response.items
|
|
513
|
-
.map((s) => `• ${s.id} (${s.session_type}) — ${s.created_at}`)
|
|
514
|
-
.join('\n');
|
|
515
|
-
return {
|
|
516
|
-
content: [{ type: 'text', text: text || 'No sessions found.' }],
|
|
517
|
-
};
|
|
518
|
-
}
|
|
519
|
-
catch (error) {
|
|
520
|
-
return {
|
|
521
|
-
content: [{ type: 'text', text: errText('list sessions', error) }],
|
|
522
|
-
isError: true,
|
|
523
|
-
};
|
|
524
|
-
}
|
|
525
|
-
});
|
|
526
|
-
server.tool('guild_get_session', 'Get session details and recent events from a Guild session', {
|
|
527
|
-
session_id: z.string().describe('The session ID'),
|
|
528
|
-
}, async ({ session_id }) => {
|
|
529
|
-
debugLog(debug, `guild_get_session: ${session_id}`);
|
|
530
|
-
try {
|
|
531
|
-
const [session, eventsResponse] = await Promise.all([
|
|
532
|
-
apiClient.get(`/sessions/${session_id}`),
|
|
533
|
-
apiClient.get(`/sessions/${session_id}/events`),
|
|
534
|
-
]);
|
|
535
|
-
const events = eventsResponse.events || [];
|
|
536
|
-
const recentEvents = events.slice(-20);
|
|
537
|
-
const eventLines = recentEvents.map((e) => {
|
|
538
|
-
const text = extractEventText(e);
|
|
539
|
-
const preview = text
|
|
540
|
-
? `: ${text.slice(0, 100)}${text.length > 100 ? '...' : ''}`
|
|
541
|
-
: '';
|
|
542
|
-
return ` [${e.event_type}]${preview}`;
|
|
543
|
-
});
|
|
544
|
-
const text = [
|
|
545
|
-
`Session: ${session.id}`,
|
|
546
|
-
`Type: ${session.session_type}`,
|
|
547
|
-
`Created: ${session.created_at}`,
|
|
548
|
-
`Updated: ${session.updated_at}`,
|
|
549
|
-
'',
|
|
550
|
-
`Recent events (${recentEvents.length} of ${events.length}):`,
|
|
551
|
-
...eventLines,
|
|
552
|
-
].join('\n');
|
|
553
|
-
return {
|
|
554
|
-
content: [{ type: 'text', text }],
|
|
555
|
-
};
|
|
556
|
-
}
|
|
557
|
-
catch (error) {
|
|
558
|
-
return {
|
|
559
|
-
content: [{ type: 'text', text: errText('get session', error) }],
|
|
560
|
-
isError: true,
|
|
561
|
-
};
|
|
562
|
-
}
|
|
563
|
-
});
|
|
564
|
-
server.tool('guild_get_session_events', 'Get events from a Guild session with pagination', {
|
|
565
|
-
session_id: z.string().describe('The session ID'),
|
|
566
|
-
limit: z
|
|
567
|
-
.number()
|
|
568
|
-
.int()
|
|
569
|
-
.min(1)
|
|
570
|
-
.max(200)
|
|
571
|
-
.optional()
|
|
572
|
-
.describe('Max events to return (default 50)'),
|
|
573
|
-
}, async ({ session_id, limit }) => {
|
|
574
|
-
debugLog(debug, `guild_get_session_events: ${session_id}`);
|
|
575
|
-
try {
|
|
576
|
-
const response = await apiClient.get(`/sessions/${session_id}/events`);
|
|
577
|
-
const events = response.events || [];
|
|
578
|
-
const maxEvents = limit || 50;
|
|
579
|
-
const displayed = events.slice(-maxEvents);
|
|
580
|
-
const lines = displayed.map((e) => {
|
|
581
|
-
const text = extractEventText(e);
|
|
582
|
-
const preview = text
|
|
583
|
-
? `: ${text.slice(0, 200)}${text.length > 200 ? '...' : ''}`
|
|
584
|
-
: '';
|
|
585
|
-
return `[${e.created_at}] ${e.event_type}${preview}`;
|
|
586
|
-
});
|
|
587
|
-
const header = `Events (${displayed.length} of ${events.length}):`;
|
|
588
|
-
return {
|
|
589
|
-
content: [{ type: 'text', text: [header, ...lines].join('\n') }],
|
|
590
|
-
};
|
|
591
|
-
}
|
|
592
|
-
catch (error) {
|
|
593
|
-
return {
|
|
594
|
-
content: [
|
|
595
|
-
{ type: 'text', text: errText('get session events', error) },
|
|
596
|
-
],
|
|
597
|
-
isError: true,
|
|
598
|
-
};
|
|
599
|
-
}
|
|
600
|
-
});
|
|
601
|
-
server.tool('guild_interrupt_session', 'Interrupt a running Guild session', {
|
|
602
|
-
session_id: z.string().describe('The session ID to interrupt'),
|
|
603
|
-
}, async ({ session_id }) => {
|
|
604
|
-
debugLog(debug, `guild_interrupt_session: ${session_id}`);
|
|
605
|
-
try {
|
|
606
|
-
await apiClient.post(`/sessions/${session_id}/interrupt`);
|
|
607
|
-
return {
|
|
608
|
-
content: [
|
|
609
|
-
{
|
|
610
|
-
type: 'text',
|
|
611
|
-
text: `Interrupted session ${session_id}.`,
|
|
612
|
-
},
|
|
613
|
-
],
|
|
614
|
-
};
|
|
615
|
-
}
|
|
616
|
-
catch (error) {
|
|
617
|
-
return {
|
|
618
|
-
content: [
|
|
619
|
-
{ type: 'text', text: errText('interrupt session', error) },
|
|
620
|
-
],
|
|
621
|
-
isError: true,
|
|
622
|
-
};
|
|
623
|
-
}
|
|
624
|
-
});
|
|
625
|
-
// =========================================================================
|
|
626
|
-
// Triggers
|
|
627
|
-
// =========================================================================
|
|
628
|
-
server.tool('guild_list_triggers', 'List triggers configured in a workspace', {
|
|
629
|
-
workspace_id: workspaceIdParam,
|
|
630
|
-
limit: z
|
|
631
|
-
.number()
|
|
632
|
-
.int()
|
|
633
|
-
.min(1)
|
|
634
|
-
.max(100)
|
|
635
|
-
.optional()
|
|
636
|
-
.describe('Max results (default 20)'),
|
|
637
|
-
}, async ({ workspace_id, limit }) => {
|
|
638
|
-
const wsId = workspace_id || defaultWorkspaceId;
|
|
639
|
-
debugLog(debug, `guild_list_triggers: ws=${wsId}`);
|
|
640
|
-
try {
|
|
641
|
-
const response = await apiClient.get(`/workspaces/${wsId}/triggers?limit=${limit || 20}`);
|
|
642
|
-
const text = response.items
|
|
643
|
-
.map((t) => {
|
|
644
|
-
const agent = t.agent.full_name || t.agent.name;
|
|
645
|
-
const disabled = t.deactivated_at ? ' [DISABLED]' : '';
|
|
646
|
-
if (t.type === 'webhook') {
|
|
647
|
-
return `• ${t.id} [webhook] ${t.integration.name}/${t.event_type || '*'} → ${agent}${disabled}`;
|
|
648
|
-
}
|
|
649
|
-
return `• ${t.id} [time] ${t.frequency} → ${agent}${disabled}`;
|
|
650
|
-
})
|
|
651
|
-
.join('\n');
|
|
652
|
-
return {
|
|
653
|
-
content: [{ type: 'text', text: text || 'No triggers found.' }],
|
|
654
|
-
};
|
|
655
|
-
}
|
|
656
|
-
catch (error) {
|
|
657
|
-
return {
|
|
658
|
-
content: [{ type: 'text', text: errText('list triggers', error) }],
|
|
659
|
-
isError: true,
|
|
660
|
-
};
|
|
661
|
-
}
|
|
662
|
-
});
|
|
663
|
-
server.tool('guild_get_trigger_sessions', 'List sessions spawned by a specific trigger', {
|
|
664
|
-
trigger_id: z.string().describe('The trigger ID'),
|
|
665
|
-
workspace_id: workspaceIdParam,
|
|
666
|
-
limit: z
|
|
667
|
-
.number()
|
|
668
|
-
.int()
|
|
669
|
-
.min(1)
|
|
670
|
-
.max(100)
|
|
671
|
-
.optional()
|
|
672
|
-
.describe('Max results (default 20)'),
|
|
673
|
-
}, async ({ trigger_id, workspace_id, limit }) => {
|
|
674
|
-
const wsId = workspace_id || defaultWorkspaceId;
|
|
675
|
-
debugLog(debug, `guild_get_trigger_sessions: ${trigger_id} ws=${wsId}`);
|
|
676
|
-
try {
|
|
677
|
-
const response = await apiClient.get(`/workspaces/${wsId}/sessions?trigger_id=${trigger_id}&limit=${limit || 20}`);
|
|
678
|
-
const text = response.items
|
|
679
|
-
.map((s) => `• ${s.id} (${s.session_type}) — ${s.created_at}`)
|
|
680
|
-
.join('\n');
|
|
681
|
-
return {
|
|
682
|
-
content: [
|
|
683
|
-
{ type: 'text', text: text || 'No trigger sessions found.' },
|
|
684
|
-
],
|
|
685
|
-
};
|
|
686
|
-
}
|
|
687
|
-
catch (error) {
|
|
688
|
-
return {
|
|
689
|
-
content: [
|
|
690
|
-
{ type: 'text', text: errText('get trigger sessions', error) },
|
|
691
|
-
],
|
|
692
|
-
isError: true,
|
|
693
|
-
};
|
|
694
|
-
}
|
|
695
|
-
});
|
|
696
|
-
// =========================================================================
|
|
697
|
-
// Credentials / Integrations
|
|
698
|
-
// =========================================================================
|
|
699
|
-
server.tool('guild_list_credentials', 'List connected integration credentials', {}, async () => {
|
|
700
|
-
debugLog(debug, 'guild_list_credentials');
|
|
701
|
-
try {
|
|
702
|
-
const me = await apiClient.get('/me');
|
|
703
|
-
const response = await apiClient.get(`/credentials?account_id=${me.id}`);
|
|
704
|
-
const text = response.items
|
|
705
|
-
.map((c) => {
|
|
706
|
-
const status = c.status ? ` [${c.status}]` : '';
|
|
707
|
-
return `• ${c.service} (${c.id})${status}`;
|
|
708
|
-
})
|
|
709
|
-
.join('\n');
|
|
710
|
-
return {
|
|
711
|
-
content: [{ type: 'text', text: text || 'No credentials found.' }],
|
|
712
|
-
};
|
|
713
|
-
}
|
|
714
|
-
catch (error) {
|
|
715
|
-
return {
|
|
716
|
-
content: [
|
|
717
|
-
{ type: 'text', text: errText('list credentials', error) },
|
|
718
|
-
],
|
|
719
|
-
isError: true,
|
|
720
|
-
};
|
|
721
|
-
}
|
|
722
|
-
});
|
|
723
|
-
server.tool('guild_list_available_integrations', 'List available integrations that can be connected', {}, async () => {
|
|
724
|
-
debugLog(debug, 'guild_list_available_integrations');
|
|
725
|
-
try {
|
|
726
|
-
const integrations = await apiClient.get('/credentials/available');
|
|
727
|
-
const items = Array.isArray(integrations) ? integrations : [];
|
|
728
|
-
const text = items
|
|
729
|
-
.map((i) => {
|
|
730
|
-
const desc = i.description ? ` — ${i.description}` : '';
|
|
731
|
-
return `• ${i.name || i.service} (${i.service})${desc}`;
|
|
732
|
-
})
|
|
733
|
-
.join('\n');
|
|
734
|
-
return {
|
|
735
|
-
content: [
|
|
736
|
-
{ type: 'text', text: text || 'No integrations available.' },
|
|
737
|
-
],
|
|
738
|
-
};
|
|
739
|
-
}
|
|
740
|
-
catch (error) {
|
|
741
|
-
return {
|
|
742
|
-
content: [
|
|
743
|
-
{
|
|
744
|
-
type: 'text',
|
|
745
|
-
text: errText('list available integrations', error),
|
|
746
|
-
},
|
|
747
|
-
],
|
|
748
|
-
isError: true,
|
|
749
|
-
};
|
|
750
|
-
}
|
|
751
|
-
});
|
|
752
|
-
}
|
|
753
|
-
//# sourceMappingURL=tools.js.map
|