events.ts•4.89 kB
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
export function registerEventPrompts(server: McpServer) {
  server.registerPrompt(
    "create-scheduled-event",
    {
      title: "Event Creation Wizard",
      description: "Guided wizard for creating Discord scheduled events",
      argsSchema: {
        guildId: z.string().describe("Server/Guild ID"),
        eventType: z
          .enum(["STAGE_INSTANCE", "VOICE", "EXTERNAL"])
          .optional()
          .describe("Type of event to create"),
      },
    },
    ({ guildId, eventType = "VOICE" }) => {
      const eventTypeGuides: Record<string, string> = {
        STAGE_INSTANCE: `STAGE INSTANCE EVENTS:
- Best for: Presentations, Q&A sessions, town halls, podcasts
- Requires: A Stage Channel in your server
- Features: Controlled speaker system with audience
- Attendees can "raise hand" to speak
- Great for structured discussions with many participants`,
        VOICE: `VOICE CHANNEL EVENTS:
- Best for: Casual meetups, gaming sessions, watch parties
- Requires: A Voice Channel in your server
- Features: Open voice chat for all participants
- More informal than Stage events
- Perfect for community hangouts`,
        EXTERNAL: `EXTERNAL EVENTS:
- Best for: Off-platform events (IRL meetups, Zoom calls, streams)
- Requires: Location text (URL or physical address)
- Requires: End time (unlike server-based events)
- Displays on server event list with external link
- Good for coordinating activities outside Discord`,
      };
      return {
        messages: [
          {
            role: "user" as const,
            content: {
              type: "text" as const,
              text: `Welcome to the Event Creation Wizard!
Guild ID: ${guildId}
Selected Event Type: ${eventType}
${eventTypeGuides[eventType]}
EVENT CREATION STEPS:
1. CHOOSE EVENT LOCATION:
${
  eventType === "EXTERNAL"
    ? `   - Provide external location (URL or address)
   - Example: "https://zoom.us/j/123456789" or "Central Park, NYC"`
    : `   - Use list_channels to find available ${eventType === "STAGE_INSTANCE" ? "Stage" : "Voice"} channels
   - Create a new channel if needed using create_${eventType === "STAGE_INSTANCE" ? "stage" : "voice"}_channel`
}
2. SET EVENT DETAILS:
   - Name: Clear, descriptive title (max 100 characters)
   - Description: What to expect, who should attend, what to bring
   - Scheduled Start: ISO 8601 format (YYYY-MM-DDTHH:mm:ss.sssZ)
     Example: "2025-02-15T19:00:00.000Z" for Feb 15, 2025 at 7 PM UTC
${eventType === "EXTERNAL" ? "   - Scheduled End: Required for external events" : "   - Scheduled End: Optional for server events"}
3. CUSTOMIZE EVENT IMAGE (Optional):
   - Use modify_scheduled_event after creation
   - Upload cover image for better visibility
   - Images appear in event list and invitations
4. PROMOTE YOUR EVENT:
   - Create announcement using send_rich_message
   - Include event URL in announcement
   - Pin announcement in relevant channels
   - Share event link outside Discord
5. MANAGE INTERESTED USERS:
   - Use get_event_users to see who's interested
   - Send reminders before event starts
   - Use list to plan capacity
EVENT TIMING BEST PRACTICES:
- Schedule at least 24 hours in advance for better attendance
- Consider time zones for your community
- Avoid conflicts with other server events
- Set reminders 1 hour and 15 minutes before start
TIMEZONE CONVERSION:
Your local time must be converted to UTC (ISO 8601 format).
Use a tool like: https://www.timeanddate.com/worldclock/converter.html
Example: Creating a gaming tournament on Saturday at 3 PM EST:
- Start: "2025-02-15T20:00:00.000Z" (3 PM EST = 8 PM UTC)
- Name: "Weekend Gaming Tournament - Season 5"
- Description: "Join us for competitive matches! Prizes for top 3 players."
Available tools:
- list_channels: Find available voice/stage channels (for VOICE/STAGE events)
- create_voice_channel: Create new voice channel
- create_stage_channel: Create new stage channel
- create_scheduled_event: Create the event (MAIN TOOL)
- modify_scheduled_event: Update event details or add image
- list_scheduled_events: See all server events
- get_event_details: View specific event information
- get_event_users: See interested users list
- send_rich_message: Create event announcement
- create_invite: Generate server invite with event
REQUIRED INFORMATION FOR ${eventType} EVENT:
${
  eventType === "EXTERNAL"
    ? `- Event name
- Event description
- Location (URL or address)
- Scheduled start time (ISO 8601)
- Scheduled end time (ISO 8601) - REQUIRED`
    : `- Event name
- Event description
- Channel ID (${eventType === "STAGE_INSTANCE" ? "Stage" : "Voice"} channel)
- Scheduled start time (ISO 8601)
- Scheduled end time (optional)`
}
What event would you like to create?`,
            },
          },
        ],
      };
    },
  );
}