@quadslab.io/discord-mcp 1.0.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 (60) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +474 -0
  3. package/dist/discord-client.d.ts +57 -0
  4. package/dist/discord-client.js +188 -0
  5. package/dist/discord-client.js.map +1 -0
  6. package/dist/index.d.ts +9 -0
  7. package/dist/index.js +135 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/mcp-server.d.ts +15 -0
  10. package/dist/mcp-server.js +65 -0
  11. package/dist/mcp-server.js.map +1 -0
  12. package/dist/tools/automod.d.ts +6 -0
  13. package/dist/tools/automod.js +376 -0
  14. package/dist/tools/automod.js.map +1 -0
  15. package/dist/tools/channels.d.ts +6 -0
  16. package/dist/tools/channels.js +840 -0
  17. package/dist/tools/channels.js.map +1 -0
  18. package/dist/tools/emojis.d.ts +6 -0
  19. package/dist/tools/emojis.js +295 -0
  20. package/dist/tools/emojis.js.map +1 -0
  21. package/dist/tools/events.d.ts +6 -0
  22. package/dist/tools/events.js +304 -0
  23. package/dist/tools/events.js.map +1 -0
  24. package/dist/tools/forums.d.ts +6 -0
  25. package/dist/tools/forums.js +276 -0
  26. package/dist/tools/forums.js.map +1 -0
  27. package/dist/tools/guild.d.ts +6 -0
  28. package/dist/tools/guild.js +88 -0
  29. package/dist/tools/guild.js.map +1 -0
  30. package/dist/tools/index.d.ts +13 -0
  31. package/dist/tools/index.js +142 -0
  32. package/dist/tools/index.js.map +1 -0
  33. package/dist/tools/members.d.ts +6 -0
  34. package/dist/tools/members.js +628 -0
  35. package/dist/tools/members.js.map +1 -0
  36. package/dist/tools/messages.d.ts +6 -0
  37. package/dist/tools/messages.js +688 -0
  38. package/dist/tools/messages.js.map +1 -0
  39. package/dist/tools/reactions.d.ts +6 -0
  40. package/dist/tools/reactions.js +137 -0
  41. package/dist/tools/reactions.js.map +1 -0
  42. package/dist/tools/roles.d.ts +6 -0
  43. package/dist/tools/roles.js +469 -0
  44. package/dist/tools/roles.js.map +1 -0
  45. package/dist/tools/server.d.ts +6 -0
  46. package/dist/tools/server.js +607 -0
  47. package/dist/tools/server.js.map +1 -0
  48. package/dist/tools/stage.d.ts +6 -0
  49. package/dist/tools/stage.js +153 -0
  50. package/dist/tools/stage.js.map +1 -0
  51. package/dist/tools/threads.d.ts +6 -0
  52. package/dist/tools/threads.js +331 -0
  53. package/dist/tools/threads.js.map +1 -0
  54. package/dist/tools/utils.d.ts +21 -0
  55. package/dist/tools/utils.js +315 -0
  56. package/dist/tools/utils.js.map +1 -0
  57. package/dist/tools/webhooks.d.ts +6 -0
  58. package/dist/tools/webhooks.js +195 -0
  59. package/dist/tools/webhooks.js.map +1 -0
  60. package/package.json +48 -0
@@ -0,0 +1,304 @@
1
+ import { getGuild } from '../discord-client.js';
2
+ import { smartFindChannel } from './utils.js';
3
+ import { GuildScheduledEventEntityType, GuildScheduledEventPrivacyLevel, GuildScheduledEventStatus } from 'discord.js';
4
+ /**
5
+ * Scheduled event management tools
6
+ */
7
+ export const eventTools = [
8
+ {
9
+ name: 'list_events',
10
+ description: 'List all scheduled events in the Discord server. Returns event details including name, time, status, and type.',
11
+ inputSchema: {
12
+ type: 'object',
13
+ properties: {},
14
+ required: [],
15
+ },
16
+ },
17
+ {
18
+ name: 'create_event',
19
+ description: 'Create a new scheduled event in the Discord server. Supports voice, stage, and external event types.',
20
+ inputSchema: {
21
+ type: 'object',
22
+ properties: {
23
+ name: {
24
+ type: 'string',
25
+ description: 'The name of the event',
26
+ },
27
+ description: {
28
+ type: 'string',
29
+ description: 'A description for the event',
30
+ },
31
+ startTime: {
32
+ type: 'string',
33
+ description: 'The start time in ISO 8601 format (e.g., "2025-03-15T18:00:00Z")',
34
+ },
35
+ endTime: {
36
+ type: 'string',
37
+ description: 'The end time in ISO 8601 format. Required for external events.',
38
+ },
39
+ type: {
40
+ type: 'string',
41
+ enum: ['voice', 'stage', 'external'],
42
+ description: 'The type of event: "voice" (voice channel), "stage" (stage channel), or "external" (external location)',
43
+ },
44
+ channel: {
45
+ type: 'string',
46
+ description: 'The channel name or ID for voice/stage events (fuzzy matched). Required for voice and stage types.',
47
+ },
48
+ location: {
49
+ type: 'string',
50
+ description: 'The location for external events. Required for external type.',
51
+ },
52
+ image: {
53
+ type: 'string',
54
+ description: 'URL of the cover image for the event',
55
+ },
56
+ },
57
+ required: ['name', 'startTime', 'type'],
58
+ },
59
+ },
60
+ {
61
+ name: 'edit_event',
62
+ description: 'Modify an existing scheduled event. You can update its name, description, times, or status.',
63
+ inputSchema: {
64
+ type: 'object',
65
+ properties: {
66
+ eventId: {
67
+ type: 'string',
68
+ description: 'The ID of the scheduled event to edit',
69
+ },
70
+ name: {
71
+ type: 'string',
72
+ description: 'New name for the event',
73
+ },
74
+ description: {
75
+ type: 'string',
76
+ description: 'New description for the event',
77
+ },
78
+ startTime: {
79
+ type: 'string',
80
+ description: 'New start time in ISO 8601 format',
81
+ },
82
+ endTime: {
83
+ type: 'string',
84
+ description: 'New end time in ISO 8601 format',
85
+ },
86
+ status: {
87
+ type: 'string',
88
+ enum: ['scheduled', 'active', 'completed', 'canceled'],
89
+ description: 'New status for the event',
90
+ },
91
+ },
92
+ required: ['eventId'],
93
+ },
94
+ },
95
+ {
96
+ name: 'delete_event',
97
+ description: 'Delete a scheduled event from the Discord server.',
98
+ inputSchema: {
99
+ type: 'object',
100
+ properties: {
101
+ eventId: {
102
+ type: 'string',
103
+ description: 'The ID of the scheduled event to delete',
104
+ },
105
+ },
106
+ required: ['eventId'],
107
+ },
108
+ },
109
+ ];
110
+ export async function executeEventTool(name, args) {
111
+ switch (name) {
112
+ case 'list_events':
113
+ return await listEvents();
114
+ case 'create_event':
115
+ return await createEvent(args);
116
+ case 'edit_event':
117
+ return await editEvent(args);
118
+ case 'delete_event':
119
+ return await deleteEvent(args);
120
+ default:
121
+ throw new Error(`Unknown event tool: ${name}`);
122
+ }
123
+ }
124
+ function mapStatusToString(status) {
125
+ switch (status) {
126
+ case GuildScheduledEventStatus.Scheduled:
127
+ return 'scheduled';
128
+ case GuildScheduledEventStatus.Active:
129
+ return 'active';
130
+ case GuildScheduledEventStatus.Completed:
131
+ return 'completed';
132
+ case GuildScheduledEventStatus.Canceled:
133
+ return 'canceled';
134
+ default:
135
+ return 'unknown';
136
+ }
137
+ }
138
+ function mapEntityTypeToString(entityType) {
139
+ switch (entityType) {
140
+ case GuildScheduledEventEntityType.StageInstance:
141
+ return 'stage';
142
+ case GuildScheduledEventEntityType.Voice:
143
+ return 'voice';
144
+ case GuildScheduledEventEntityType.External:
145
+ return 'external';
146
+ default:
147
+ return 'unknown';
148
+ }
149
+ }
150
+ function mapStringToEntityType(type) {
151
+ switch (type) {
152
+ case 'voice':
153
+ return GuildScheduledEventEntityType.Voice;
154
+ case 'stage':
155
+ return GuildScheduledEventEntityType.StageInstance;
156
+ case 'external':
157
+ return GuildScheduledEventEntityType.External;
158
+ default:
159
+ throw new Error(`Invalid event type: "${type}". Must be "voice", "stage", or "external".`);
160
+ }
161
+ }
162
+ function mapStringToStatus(status) {
163
+ switch (status) {
164
+ case 'scheduled':
165
+ return GuildScheduledEventStatus.Scheduled;
166
+ case 'active':
167
+ return GuildScheduledEventStatus.Active;
168
+ case 'completed':
169
+ return GuildScheduledEventStatus.Completed;
170
+ case 'canceled':
171
+ return GuildScheduledEventStatus.Canceled;
172
+ default:
173
+ throw new Error(`Invalid event status: "${status}". Must be "scheduled", "active", "completed", or "canceled".`);
174
+ }
175
+ }
176
+ async function listEvents() {
177
+ const guild = await getGuild();
178
+ const events = await guild.scheduledEvents.fetch();
179
+ const result = events.map(event => ({
180
+ id: event.id,
181
+ name: event.name,
182
+ description: event.description,
183
+ scheduledStartTime: event.scheduledStartTimestamp ? new Date(event.scheduledStartTimestamp).toISOString() : null,
184
+ scheduledEndTime: event.scheduledEndTimestamp ? new Date(event.scheduledEndTimestamp).toISOString() : null,
185
+ status: mapStatusToString(event.status),
186
+ entityType: mapEntityTypeToString(event.entityType),
187
+ channel: event.channel ? { name: event.channel.name, id: event.channel.id } : null,
188
+ location: event.entityMetadata?.location ?? null,
189
+ creator: event.creator ? { id: event.creator.id, username: event.creator.username } : null,
190
+ userCount: event.userCount,
191
+ image: event.coverImageURL() ?? null,
192
+ }));
193
+ return JSON.stringify({
194
+ totalEvents: result.length,
195
+ events: result,
196
+ }, null, 2);
197
+ }
198
+ async function createEvent(args) {
199
+ const guild = await getGuild();
200
+ const name = args['name'];
201
+ const description = args['description'];
202
+ const startTime = args['startTime'];
203
+ const endTime = args['endTime'];
204
+ const type = args['type'];
205
+ const channel = args['channel'];
206
+ const location = args['location'];
207
+ const image = args['image'];
208
+ const entityType = mapStringToEntityType(type);
209
+ // Validate requirements based on type
210
+ if ((type === 'voice' || type === 'stage') && !channel) {
211
+ throw new Error(`A channel is required for ${type} events.`);
212
+ }
213
+ if (type === 'external' && !location) {
214
+ throw new Error('A location is required for external events.');
215
+ }
216
+ if (type === 'external' && !endTime) {
217
+ throw new Error('An end time is required for external events.');
218
+ }
219
+ // Resolve channel for voice/stage events
220
+ let channelId;
221
+ if (channel) {
222
+ const resolved = await smartFindChannel(channel);
223
+ channelId = resolved.id;
224
+ }
225
+ const eventData = {
226
+ name,
227
+ description,
228
+ scheduledStartTime: new Date(startTime),
229
+ scheduledEndTime: endTime ? new Date(endTime) : undefined,
230
+ privacyLevel: GuildScheduledEventPrivacyLevel.GuildOnly,
231
+ entityType,
232
+ image,
233
+ };
234
+ if (type === 'external') {
235
+ eventData['entityMetadata'] = { location };
236
+ }
237
+ else {
238
+ eventData['channel'] = channelId;
239
+ }
240
+ const event = await guild.scheduledEvents.create(eventData);
241
+ return JSON.stringify({
242
+ success: true,
243
+ message: `Event "${event.name}" created successfully`,
244
+ event: {
245
+ id: event.id,
246
+ name: event.name,
247
+ description: event.description,
248
+ scheduledStartTime: event.scheduledStartTimestamp ? new Date(event.scheduledStartTimestamp).toISOString() : null,
249
+ scheduledEndTime: event.scheduledEndTimestamp ? new Date(event.scheduledEndTimestamp).toISOString() : null,
250
+ status: mapStatusToString(event.status),
251
+ entityType: mapEntityTypeToString(event.entityType),
252
+ channel: event.channel ? { name: event.channel.name, id: event.channel.id } : null,
253
+ location: event.entityMetadata?.location ?? null,
254
+ },
255
+ }, null, 2);
256
+ }
257
+ async function editEvent(args) {
258
+ const guild = await getGuild();
259
+ const eventId = args['eventId'];
260
+ const event = await guild.scheduledEvents.fetch(eventId);
261
+ if (!event) {
262
+ throw new Error(`Scheduled event with ID "${eventId}" not found.`);
263
+ }
264
+ const updates = {};
265
+ if (args['name'] !== undefined)
266
+ updates['name'] = args['name'];
267
+ if (args['description'] !== undefined)
268
+ updates['description'] = args['description'];
269
+ if (args['startTime'] !== undefined)
270
+ updates['scheduledStartTime'] = new Date(args['startTime']);
271
+ if (args['endTime'] !== undefined)
272
+ updates['scheduledEndTime'] = new Date(args['endTime']);
273
+ if (args['status'] !== undefined)
274
+ updates['status'] = mapStringToStatus(args['status']);
275
+ const updatedEvent = await event.edit(updates);
276
+ return JSON.stringify({
277
+ success: true,
278
+ message: `Event "${updatedEvent.name}" updated successfully`,
279
+ event: {
280
+ id: updatedEvent.id,
281
+ name: updatedEvent.name,
282
+ description: updatedEvent.description,
283
+ scheduledStartTime: updatedEvent.scheduledStartTimestamp ? new Date(updatedEvent.scheduledStartTimestamp).toISOString() : null,
284
+ scheduledEndTime: updatedEvent.scheduledEndTimestamp ? new Date(updatedEvent.scheduledEndTimestamp).toISOString() : null,
285
+ status: mapStatusToString(updatedEvent.status),
286
+ entityType: mapEntityTypeToString(updatedEvent.entityType),
287
+ },
288
+ }, null, 2);
289
+ }
290
+ async function deleteEvent(args) {
291
+ const guild = await getGuild();
292
+ const eventId = args['eventId'];
293
+ const event = await guild.scheduledEvents.fetch(eventId);
294
+ if (!event) {
295
+ throw new Error(`Scheduled event with ID "${eventId}" not found.`);
296
+ }
297
+ const eventName = event.name;
298
+ await event.delete();
299
+ return JSON.stringify({
300
+ success: true,
301
+ message: `Event "${eventName}" deleted successfully`,
302
+ }, null, 2);
303
+ }
304
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/tools/events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ /**
3
+ * Forum channel management tools
4
+ */
5
+ export declare const forumTools: Tool[];
6
+ export declare function executeForumTool(name: string, args: Record<string, unknown>): Promise<string>;
@@ -0,0 +1,276 @@
1
+ import { smartFindChannel } from './utils.js';
2
+ import { ChannelType } from 'discord.js';
3
+ /**
4
+ * Forum channel management tools
5
+ */
6
+ export const forumTools = [
7
+ {
8
+ name: 'create_forum_post',
9
+ description: 'Create a new post (thread) in a forum channel. Channel name is fuzzy-matched.',
10
+ inputSchema: {
11
+ type: 'object',
12
+ properties: {
13
+ channel: {
14
+ type: 'string',
15
+ description: 'The forum channel name or ID (fuzzy matched)',
16
+ },
17
+ name: {
18
+ type: 'string',
19
+ description: 'The title of the forum post',
20
+ },
21
+ content: {
22
+ type: 'string',
23
+ description: 'The content of the initial message in the post',
24
+ },
25
+ tags: {
26
+ type: 'array',
27
+ items: { type: 'string' },
28
+ description: 'Tag names to apply to the post (optional)',
29
+ },
30
+ },
31
+ required: ['channel', 'name', 'content'],
32
+ },
33
+ },
34
+ {
35
+ name: 'list_forum_tags',
36
+ description: 'List all available tags on a forum channel. Channel name is fuzzy-matched.',
37
+ inputSchema: {
38
+ type: 'object',
39
+ properties: {
40
+ channel: {
41
+ type: 'string',
42
+ description: 'The forum channel name or ID (fuzzy matched)',
43
+ },
44
+ },
45
+ required: ['channel'],
46
+ },
47
+ },
48
+ {
49
+ name: 'create_forum_tag',
50
+ description: 'Add a new tag to a forum channel. Discord allows a maximum of 20 tags per forum channel.',
51
+ inputSchema: {
52
+ type: 'object',
53
+ properties: {
54
+ channel: {
55
+ type: 'string',
56
+ description: 'The forum channel name or ID (fuzzy matched)',
57
+ },
58
+ name: {
59
+ type: 'string',
60
+ description: 'The name for the new tag',
61
+ },
62
+ emoji: {
63
+ type: 'string',
64
+ description: 'A unicode emoji for the tag (optional)',
65
+ },
66
+ moderated: {
67
+ type: 'boolean',
68
+ description: 'Whether only moderators can apply this tag (optional, default: false)',
69
+ },
70
+ },
71
+ required: ['channel', 'name'],
72
+ },
73
+ },
74
+ {
75
+ name: 'edit_forum_tag',
76
+ description: 'Edit an existing tag on a forum channel.',
77
+ inputSchema: {
78
+ type: 'object',
79
+ properties: {
80
+ channel: {
81
+ type: 'string',
82
+ description: 'The forum channel name or ID (fuzzy matched)',
83
+ },
84
+ tagId: {
85
+ type: 'string',
86
+ description: 'The ID of the tag to edit',
87
+ },
88
+ name: {
89
+ type: 'string',
90
+ description: 'The new name for the tag (optional)',
91
+ },
92
+ emoji: {
93
+ type: 'string',
94
+ description: 'A new unicode emoji for the tag (optional)',
95
+ },
96
+ moderated: {
97
+ type: 'boolean',
98
+ description: 'Whether only moderators can apply this tag (optional)',
99
+ },
100
+ },
101
+ required: ['channel', 'tagId'],
102
+ },
103
+ },
104
+ {
105
+ name: 'delete_forum_tag',
106
+ description: 'Remove a tag from a forum channel.',
107
+ inputSchema: {
108
+ type: 'object',
109
+ properties: {
110
+ channel: {
111
+ type: 'string',
112
+ description: 'The forum channel name or ID (fuzzy matched)',
113
+ },
114
+ tagId: {
115
+ type: 'string',
116
+ description: 'The ID of the tag to remove',
117
+ },
118
+ },
119
+ required: ['channel', 'tagId'],
120
+ },
121
+ },
122
+ ];
123
+ export async function executeForumTool(name, args) {
124
+ switch (name) {
125
+ case 'create_forum_post':
126
+ return await createForumPost(args);
127
+ case 'list_forum_tags':
128
+ return await listForumTags(args);
129
+ case 'create_forum_tag':
130
+ return await createForumTag(args);
131
+ case 'edit_forum_tag':
132
+ return await editForumTag(args);
133
+ case 'delete_forum_tag':
134
+ return await deleteForumTag(args);
135
+ default:
136
+ throw new Error(`Unknown forum tool: ${name}`);
137
+ }
138
+ }
139
+ /**
140
+ * Resolve a channel identifier to a ForumChannel, throwing if it's not a forum.
141
+ */
142
+ async function resolveForumChannel(identifier) {
143
+ const channel = await smartFindChannel(identifier);
144
+ if (channel.type !== ChannelType.GuildForum) {
145
+ throw new Error(`Channel "#${channel.name}" is not a forum channel.`);
146
+ }
147
+ return channel;
148
+ }
149
+ async function createForumPost(args) {
150
+ const channelIdentifier = args['channel'];
151
+ const name = args['name'];
152
+ const content = args['content'];
153
+ const tagNames = args['tags'];
154
+ const channel = await resolveForumChannel(channelIdentifier);
155
+ // Resolve tag names to IDs if provided
156
+ let appliedTags;
157
+ if (tagNames && tagNames.length > 0) {
158
+ const availableTags = channel.availableTags;
159
+ appliedTags = [];
160
+ for (const tagName of tagNames) {
161
+ const tagNameLower = tagName.toLowerCase();
162
+ const matchedTag = availableTags.find(t => t.name.toLowerCase() === tagNameLower);
163
+ if (matchedTag) {
164
+ appliedTags.push(matchedTag.id);
165
+ }
166
+ else {
167
+ throw new Error(`Tag "${tagName}" not found on forum "#${channel.name}". Available tags: ${availableTags.map(t => t.name).join(', ') || 'none'}`);
168
+ }
169
+ }
170
+ }
171
+ const thread = await channel.threads.create({
172
+ name,
173
+ message: { content },
174
+ appliedTags,
175
+ });
176
+ return JSON.stringify({
177
+ success: true,
178
+ message: `Forum post "${thread.name}" created successfully in #${channel.name}`,
179
+ thread: {
180
+ id: thread.id,
181
+ name: thread.name,
182
+ url: thread.url,
183
+ },
184
+ }, null, 2);
185
+ }
186
+ async function listForumTags(args) {
187
+ const channelIdentifier = args['channel'];
188
+ const channel = await resolveForumChannel(channelIdentifier);
189
+ const tags = channel.availableTags.map(tag => ({
190
+ id: tag.id,
191
+ name: tag.name,
192
+ emoji: tag.emoji,
193
+ moderated: tag.moderated,
194
+ }));
195
+ return JSON.stringify({
196
+ channel: { name: channel.name, id: channel.id },
197
+ tagCount: tags.length,
198
+ tags,
199
+ }, null, 2);
200
+ }
201
+ async function createForumTag(args) {
202
+ const channelIdentifier = args['channel'];
203
+ const name = args['name'];
204
+ const emoji = args['emoji'];
205
+ const moderated = args['moderated'];
206
+ const channel = await resolveForumChannel(channelIdentifier);
207
+ const existingTags = channel.availableTags;
208
+ if (existingTags.length >= 20) {
209
+ throw new Error(`Forum "#${channel.name}" already has the maximum of 20 tags. Remove a tag before adding a new one.`);
210
+ }
211
+ const updatedTags = [
212
+ ...existingTags,
213
+ {
214
+ name,
215
+ emoji: emoji ? { name: emoji } : undefined,
216
+ moderated: moderated ?? false,
217
+ },
218
+ ];
219
+ await channel.setAvailableTags(updatedTags);
220
+ return JSON.stringify({
221
+ success: true,
222
+ message: `Tag "${name}" added to forum "#${channel.name}"`,
223
+ tagCount: updatedTags.length,
224
+ }, null, 2);
225
+ }
226
+ async function editForumTag(args) {
227
+ const channelIdentifier = args['channel'];
228
+ const tagId = args['tagId'];
229
+ const name = args['name'];
230
+ const emoji = args['emoji'];
231
+ const moderated = args['moderated'];
232
+ const channel = await resolveForumChannel(channelIdentifier);
233
+ const existingTags = channel.availableTags;
234
+ const tagIndex = existingTags.findIndex(t => t.id === tagId);
235
+ if (tagIndex === -1) {
236
+ throw new Error(`Tag with ID "${tagId}" not found on forum "#${channel.name}". Use list_forum_tags to see available tags.`);
237
+ }
238
+ const updatedTags = [...existingTags];
239
+ const tag = { ...updatedTags[tagIndex] };
240
+ if (name !== undefined)
241
+ tag.name = name;
242
+ if (emoji !== undefined)
243
+ tag.emoji = { name: emoji, id: null };
244
+ if (moderated !== undefined)
245
+ tag.moderated = moderated;
246
+ updatedTags[tagIndex] = tag;
247
+ await channel.setAvailableTags(updatedTags);
248
+ return JSON.stringify({
249
+ success: true,
250
+ message: `Tag "${tag.name}" updated on forum "#${channel.name}"`,
251
+ tag: {
252
+ id: tag.id,
253
+ name: tag.name,
254
+ emoji: tag.emoji,
255
+ moderated: tag.moderated,
256
+ },
257
+ }, null, 2);
258
+ }
259
+ async function deleteForumTag(args) {
260
+ const channelIdentifier = args['channel'];
261
+ const tagId = args['tagId'];
262
+ const channel = await resolveForumChannel(channelIdentifier);
263
+ const existingTags = channel.availableTags;
264
+ const tagToDelete = existingTags.find(t => t.id === tagId);
265
+ if (!tagToDelete) {
266
+ throw new Error(`Tag with ID "${tagId}" not found on forum "#${channel.name}". Use list_forum_tags to see available tags.`);
267
+ }
268
+ const filteredTags = existingTags.filter(t => t.id !== tagId);
269
+ await channel.setAvailableTags(filteredTags);
270
+ return JSON.stringify({
271
+ success: true,
272
+ message: `Tag "${tagToDelete.name}" removed from forum "#${channel.name}"`,
273
+ remainingTagCount: filteredTags.length,
274
+ }, null, 2);
275
+ }
276
+ //# sourceMappingURL=forums.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forums.js","sourceRoot":"","sources":["../../src/tools/forums.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ /**
3
+ * Guild information tools
4
+ */
5
+ export declare const guildTools: Tool[];
6
+ export declare function executeGuildTool(name: string, args: Record<string, unknown>): Promise<string>;