From 2758ce00fb0a65b833c20aa14f21568fa942cd0c Mon Sep 17 00:00:00 2001 From: IAPP-BY Date: Tue, 3 Jun 2025 13:43:38 +0800 Subject: [PATCH] feat: remove discord_login tool and update dockerfile --- Dockerfile | 4 ++-- README.md | 1 - src/server.ts | 5 ----- src/toolList.ts | 11 ---------- src/tools/channel.ts | 14 ++++++------- src/tools/forum.ts | 10 ++++----- src/tools/reactions.ts | 8 ++++---- src/tools/send-message.ts | 2 +- src/tools/webhooks.ts | 8 ++++---- src/transport.ts | 43 ++++++++------------------------------- 10 files changed, 31 insertions(+), 75 deletions(-) diff --git a/Dockerfile b/Dockerfile index 6d340c1..eb97157 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,5 +19,5 @@ RUN npm run build # Expose HTTP port EXPOSE 8080 -# Default command to run the MCP server with HTTP transport -CMD ["node", "build/index.js", "--transport", "http", "--port", "8080"] +# Default command to run the MCP server with HTTP transport and Discord token +CMD ["node", "build/index.js", "--transport", "http", "--port", "8080", "--config", "{\"DISCORD_TOKEN\":\"${DISCORD_TOKEN}\"}"] \ No newline at end of file diff --git a/README.md b/README.md index f06d69b..5846d09 100644 --- a/README.md +++ b/README.md @@ -210,7 +210,6 @@ node build/index.js --transport http --port 3000 --config "your_discord_bot_toke ### Basic Functions -- `discord_login`: Login to Discord - `discord_send`: Send a message to a specified channel (supports both channel ID and channel name) - `discord_get_server_info`: Get Discord server information diff --git a/src/server.ts b/src/server.ts index 93974c9..f7f54f1 100644 --- a/src/server.ts +++ b/src/server.ts @@ -83,11 +83,6 @@ export class DiscordMCPServer { case "discord_delete_category": toolResponse = await deleteCategoryHandler(args, this.toolContext); return toolResponse; - case "discord_login": - toolResponse = await loginHandler(args, this.toolContext); - // Check the client state after login - this.logClientState("after discord_login handler"); - return toolResponse; case "discord_send": this.logClientState("before discord_send handler"); diff --git a/src/toolList.ts b/src/toolList.ts index bf4b939..847c88a 100644 --- a/src/toolList.ts +++ b/src/toolList.ts @@ -39,17 +39,6 @@ export const toolList = [ required: ["categoryId"] } }, - { - name: "discord_login", - description: "Logs in to Discord using the configured token", - inputSchema: { - type: "object", - properties: { - token: { type: "string" } - }, - required: [] - } - }, { name: "discord_send", description: "Sends a message to a specified Discord text channel", diff --git a/src/tools/channel.ts b/src/tools/channel.ts index 78d55df..1a406c5 100644 --- a/src/tools/channel.ts +++ b/src/tools/channel.ts @@ -21,7 +21,7 @@ export async function createCategoryHandler( try { if (!context.client.isReady()) { return { - content: [{ type: "text", text: "Discord client not logged in. Please use discord_login tool first." }], + content: [{ type: "text", text: "Discord client not logged in." }], isError: true }; } @@ -53,7 +53,7 @@ export async function editCategoryHandler( try { if (!context.client.isReady()) { return { - content: [{ type: "text", text: "Discord client not logged in. Please use discord_login tool first." }], + content: [{ type: "text", text: "Discord client not logged in." }], isError: true }; } @@ -86,7 +86,7 @@ export async function deleteCategoryHandler( try { if (!context.client.isReady()) { return { - content: [{ type: "text", text: "Discord client not logged in. Please use discord_login tool first." }], + content: [{ type: "text", text: "Discord client not logged in." }], isError: true }; } @@ -115,7 +115,7 @@ export async function createTextChannelHandler( try { if (!context.client.isReady()) { return { - content: [{ type: "text", text: "Discord client not logged in. Please use discord_login tool first." }], + content: [{ type: "text", text: "Discord client not logged in." }], isError: true }; } @@ -157,7 +157,7 @@ export async function deleteChannelHandler( try { if (!context.client.isReady()) { return { - content: [{ type: "text", text: "Discord client not logged in. Please use discord_login tool first." }], + content: [{ type: "text", text: "Discord client not logged in." }], isError: true }; } @@ -201,7 +201,7 @@ export async function readMessagesHandler( try { if (!context.client.isReady()) { return { - content: [{ type: "text", text: "Discord client not logged in. Please use discord_login tool first." }], + content: [{ type: "text", text: "Discord client not logged in." }], isError: true }; } @@ -270,7 +270,7 @@ export async function getServerInfoHandler( try { if (!context.client.isReady()) { return { - content: [{ type: "text", text: "Discord client not logged in. Please use discord_login tool first." }], + content: [{ type: "text", text: "Discord client not logged in." }], isError: true }; } diff --git a/src/tools/forum.ts b/src/tools/forum.ts index d1ae4e5..8af3a24 100644 --- a/src/tools/forum.ts +++ b/src/tools/forum.ts @@ -9,7 +9,7 @@ export const getForumChannelsHandler: ToolHandler = async (args, { client }) => try { if (!client.isReady()) { return { - content: [{ type: "text", text: "Discord client not logged in. Please use discord_login tool first." }], + content: [{ type: "text", text: "Discord client not logged in." }], isError: true }; } @@ -55,7 +55,7 @@ export const createForumPostHandler: ToolHandler = async (args, { client }) => { try { if (!client.isReady()) { return { - content: [{ type: "text", text: "Discord client not logged in. Please use discord_login tool first." }], + content: [{ type: "text", text: "Discord client not logged in." }], isError: true }; } @@ -107,7 +107,7 @@ export const getForumPostHandler: ToolHandler = async (args, { client }) => { try { if (!client.isReady()) { return { - content: [{ type: "text", text: "Discord client not logged in. Please use discord_login tool first." }], + content: [{ type: "text", text: "Discord client not logged in." }], isError: true }; } @@ -151,7 +151,7 @@ export const replyToForumHandler: ToolHandler = async (args, { client }) => { try { if (!client.isReady()) { return { - content: [{ type: "text", text: "Discord client not logged in. Please use discord_login tool first." }], + content: [{ type: "text", text: "Discord client not logged in." }], isError: true }; } @@ -191,7 +191,7 @@ export const deleteForumPostHandler: ToolHandler = async (args, { client }) => { try { if (!client.isReady()) { return { - content: [{ type: "text", text: "Discord client not logged in. Please use discord_login tool first." }], + content: [{ type: "text", text: "Discord client not logged in." }], isError: true }; } diff --git a/src/tools/reactions.ts b/src/tools/reactions.ts index 4b20a49..ededbbd 100644 --- a/src/tools/reactions.ts +++ b/src/tools/reactions.ts @@ -17,7 +17,7 @@ export async function addReactionHandler( try { if (!context.client.isReady()) { return { - content: [{ type: "text", text: "Discord client not logged in. Please use discord_login tool first." }], + content: [{ type: "text", text: "Discord client not logged in." }], isError: true }; } @@ -61,7 +61,7 @@ export async function addMultipleReactionsHandler( try { if (!context.client.isReady()) { return { - content: [{ type: "text", text: "Discord client not logged in. Please use discord_login tool first." }], + content: [{ type: "text", text: "Discord client not logged in." }], isError: true }; } @@ -109,7 +109,7 @@ export async function removeReactionHandler( try { if (!context.client.isReady()) { return { - content: [{ type: "text", text: "Discord client not logged in. Please use discord_login tool first." }], + content: [{ type: "text", text: "Discord client not logged in." }], isError: true }; } @@ -176,7 +176,7 @@ export async function deleteMessageHandler( try { if (!context.client.isReady()) { return { - content: [{ type: "text", text: "Discord client not logged in. Please use discord_login tool first." }], + content: [{ type: "text", text: "Discord client not logged in." }], isError: true }; } diff --git a/src/tools/send-message.ts b/src/tools/send-message.ts index ae12360..828efa7 100644 --- a/src/tools/send-message.ts +++ b/src/tools/send-message.ts @@ -8,7 +8,7 @@ export const sendMessageHandler: ToolHandler = async (args, { client }) => { try { if (!client.isReady()) { return { - content: [{ type: "text", text: "Discord client not logged in. Please use discord_login tool first." }], + content: [{ type: "text", text: "Discord client not logged in." }], isError: true }; } diff --git a/src/tools/webhooks.ts b/src/tools/webhooks.ts index ea19222..d0fd1d8 100644 --- a/src/tools/webhooks.ts +++ b/src/tools/webhooks.ts @@ -17,7 +17,7 @@ export async function createWebhookHandler( try { if (!context.client.isReady()) { return { - content: [{ type: "text", text: "Discord client not logged in. Please use discord_login tool first." }], + content: [{ type: "text", text: "Discord client not logged in." }], isError: true }; } @@ -65,7 +65,7 @@ export async function sendWebhookMessageHandler( try { if (!context.client.isReady()) { return { - content: [{ type: "text", text: "Discord client not logged in. Please use discord_login tool first." }], + content: [{ type: "text", text: "Discord client not logged in." }], isError: true }; } @@ -106,7 +106,7 @@ export async function editWebhookHandler( try { if (!context.client.isReady()) { return { - content: [{ type: "text", text: "Discord client not logged in. Please use discord_login tool first." }], + content: [{ type: "text", text: "Discord client not logged in." }], isError: true }; } @@ -147,7 +147,7 @@ export async function deleteWebhookHandler( try { if (!context.client.isReady()) { return { - content: [{ type: "text", text: "Discord client not logged in. Please use discord_login tool first." }], + content: [{ type: "text", text: "Discord client not logged in." }], isError: true }; } diff --git a/src/transport.ts b/src/transport.ts index aebf81d..b4d7e0b 100644 --- a/src/transport.ts +++ b/src/transport.ts @@ -177,19 +177,6 @@ export class StreamableHttpTransport implements MCPTransport { result = { tools: toolList }; break; - case 'discord_login': - result = await loginHandler(params, this.toolContext!); - // Log client state after login - info(`Client state after login: ${JSON.stringify({ - isReady: this.toolContext!.client.isReady(), - hasToken: !!this.toolContext!.client.token, - user: this.toolContext!.client.user ? { - id: this.toolContext!.client.user.id, - tag: this.toolContext!.client.user.tag, - } : null - })}`); - break; - // Make sure Discord client is logged in for other Discord API tools // but return a proper JSON-RPC error rather than throwing an exception case 'discord_send': @@ -238,7 +225,7 @@ export class StreamableHttpTransport implements MCPTransport { jsonrpc: '2.0', error: { code: -32603, - message: 'Discord client reconnect failed. Please use discord_login tool first.', + message: 'Discord client reconnect failed.', }, id: req.body?.id || null, }); @@ -252,7 +239,7 @@ export class StreamableHttpTransport implements MCPTransport { jsonrpc: '2.0', error: { code: -32603, - message: 'Discord client reconnect failed. Please use discord_login tool first.', + message: 'Discord client reconnect failed.', }, id: req.body?.id || null, }); @@ -262,7 +249,7 @@ export class StreamableHttpTransport implements MCPTransport { jsonrpc: '2.0', error: { code: -32603, - message: 'Discord client not logged in. Please use discord_login tool first.', + message: 'Discord client not logged in.', }, id: req.body?.id || null, }); @@ -346,8 +333,7 @@ export class StreamableHttpTransport implements MCPTransport { const toolArgs = params.arguments || {}; // Check if Discord client is logged in for Discord API tools - if (toolName !== 'discord_login' && - toolName.startsWith('discord_') && + if (toolName.startsWith('discord_') && !this.toolContext!.client.isReady()) { error(`Client not ready for tool ${toolName}, client state: ${JSON.stringify({ isReady: this.toolContext!.client.isReady(), @@ -372,7 +358,7 @@ export class StreamableHttpTransport implements MCPTransport { jsonrpc: '2.0', error: { code: -32603, - message: 'Discord client reconnect failed. Please use discord_login tool first.', + message: 'Discord client reconnect failed.', }, id: req.body?.id || null, }); @@ -386,7 +372,7 @@ export class StreamableHttpTransport implements MCPTransport { jsonrpc: '2.0', error: { code: -32603, - message: 'Discord client reconnect failed. Please use discord_login tool first.', + message: 'Discord client reconnect failed.', }, id: req.body?.id || null, }); @@ -396,7 +382,7 @@ export class StreamableHttpTransport implements MCPTransport { jsonrpc: '2.0', error: { code: -32603, - message: 'Discord client not logged in. Please use discord_login tool first.', + message: 'Discord client not logged in.', }, id: req.body?.id || null, }); @@ -404,20 +390,7 @@ export class StreamableHttpTransport implements MCPTransport { } // Call the appropriate handler based on tool name - switch (toolName) { - case 'discord_login': - result = await loginHandler(toolArgs, this.toolContext!); - // Log client state after login - info(`Client state after login: ${JSON.stringify({ - isReady: this.toolContext!.client.isReady(), - hasToken: !!this.toolContext!.client.token, - user: this.toolContext!.client.user ? { - id: this.toolContext!.client.user.id, - tag: this.toolContext!.client.user.tag, - } : null - })}`); - break; - + switch (toolName) { case 'discord_send': result = await sendMessageHandler(toolArgs, this.toolContext!); break;