guilds.ts•1.32 kB
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { DiscordClientManager } from "../discord/client.js";
import { Logger } from "../utils/logger.js";
export function registerGuildResources(
  server: McpServer,
  discordManager: DiscordClientManager,
  logger: Logger,
) {
  // List all guilds
  server.registerResource(
    "guilds-list",
    "discord://guilds",
    {
      title: "Discord Guilds",
      description: "List all Discord guilds the bot is a member of",
    },
    async (uri) => {
      try {
        const client = discordManager.getClient();
        const guilds = client.guilds.cache;
        const guildList = guilds.map((guild) => ({
          id: guild.id,
          name: guild.name,
          memberCount: guild.memberCount,
          ownerId: guild.ownerId,
        }));
        return {
          contents: [
            {
              uri: uri.href,
              mimeType: "application/json",
              text: JSON.stringify(guildList, null, 2),
            },
          ],
        };
      } catch (error: any) {
        logger.error("Failed to list guilds", { error: error.message });
        throw error;
      }
    },
  );
  // Note: Dynamic resource parameters require more complex setup
  // For now, using get_server_info tool for guild-specific data
}