Re-enable the discord_login tools

This commit is contained in:
IAPP-BY 2025-06-10 14:56:00 +08:00
parent 9a1529dc05
commit 00dae9e426
4 changed files with 51 additions and 9 deletions

View File

@ -22,5 +22,5 @@ ENV DISCORD_TOKEN=""
# Expose HTTP port
EXPOSE 8080
# Default command to run the MCP server with HTTP transport and Discord token
# Default command to run the MCP server with HTTP transport
CMD ["node", "build/index.js", "--transport", "http", "--port", "8080"]

View File

@ -84,6 +84,10 @@ export class DiscordMCPServer {
toolResponse = await deleteCategoryHandler(args, this.toolContext);
return toolResponse;
case "discord_login": toolResponse = await loginHandler(args, this.toolContext);
this.logClientState("after discord_login handler");
return toolResponse;
case "discord_send":
this.logClientState("before discord_send handler");
toolResponse = await sendMessageHandler(args, this.toolContext);

View File

@ -39,6 +39,17 @@ 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",

View File

@ -177,6 +177,19 @@ 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':
@ -225,7 +238,7 @@ export class StreamableHttpTransport implements MCPTransport {
jsonrpc: '2.0',
error: {
code: -32603,
message: 'Discord client reconnect failed.',
message: 'Discord client reconnect failed. Please use discord_login tool first.',
},
id: req.body?.id || null,
});
@ -239,7 +252,7 @@ export class StreamableHttpTransport implements MCPTransport {
jsonrpc: '2.0',
error: {
code: -32603,
message: 'Discord client reconnect failed.',
message: 'Discord client reconnect failed. Please use discord_login tool first.',
},
id: req.body?.id || null,
});
@ -249,7 +262,7 @@ export class StreamableHttpTransport implements MCPTransport {
jsonrpc: '2.0',
error: {
code: -32603,
message: 'Discord client not logged in.',
message: 'Discord client not logged in. Please use discord_login tool first.',
},
id: req.body?.id || null,
});
@ -333,7 +346,8 @@ export class StreamableHttpTransport implements MCPTransport {
const toolArgs = params.arguments || {};
// Check if Discord client is logged in for Discord API tools
if (toolName.startsWith('discord_') &&
if (toolName !== 'discord_login' &&
toolName.startsWith('discord_') &&
!this.toolContext!.client.isReady()) {
error(`Client not ready for tool ${toolName}, client state: ${JSON.stringify({
isReady: this.toolContext!.client.isReady(),
@ -358,7 +372,7 @@ export class StreamableHttpTransport implements MCPTransport {
jsonrpc: '2.0',
error: {
code: -32603,
message: 'Discord client reconnect failed.',
message: 'Discord client reconnect failed. Please use discord_login tool first.',
},
id: req.body?.id || null,
});
@ -372,7 +386,7 @@ export class StreamableHttpTransport implements MCPTransport {
jsonrpc: '2.0',
error: {
code: -32603,
message: 'Discord client reconnect failed.',
message: 'Discord client reconnect failed. Please use discord_login tool first.',
},
id: req.body?.id || null,
});
@ -382,7 +396,7 @@ export class StreamableHttpTransport implements MCPTransport {
jsonrpc: '2.0',
error: {
code: -32603,
message: 'Discord client not logged in.',
message: 'Discord client not logged in. Please use discord_login tool first.',
},
id: req.body?.id || null,
});
@ -390,7 +404,20 @@ export class StreamableHttpTransport implements MCPTransport {
}
// Call the appropriate handler based on tool name
switch (toolName) {
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;
case 'discord_send':
result = await sendMessageHandler(toolArgs, this.toolContext!);
break;