Files
anything-llm/server/endpoints/mcpServers.js
Timothy Carambat b4b2203bae MCP tool manager (#5230)
* MCP tool manager

* Mcp tool manager i18 (#5231)

i18n translations for MCP manager changes
connect #5230

* fix bad i18n key
2026-03-18 15:33:49 -07:00

128 lines
3.5 KiB
JavaScript

const { reqBody } = require("../utils/http");
const MCPCompatibilityLayer = require("../utils/MCP");
const {
flexUserRoleValid,
ROLES,
} = require("../utils/middleware/multiUserProtected");
const { validatedRequest } = require("../utils/middleware/validatedRequest");
function mcpServersEndpoints(app) {
if (!app) return;
app.get(
"/mcp-servers/force-reload",
[validatedRequest, flexUserRoleValid([ROLES.admin])],
async (_request, response) => {
try {
const mcp = new MCPCompatibilityLayer();
await mcp.reloadMCPServers();
return response.status(200).json({
success: true,
error: null,
servers: await mcp.servers(),
});
} catch (error) {
console.error("Error force reloading MCP servers:", error);
return response.status(500).json({
success: false,
error: error.message,
servers: [],
});
}
}
);
app.get(
"/mcp-servers/list",
[validatedRequest, flexUserRoleValid([ROLES.admin])],
async (_request, response) => {
try {
const servers = await new MCPCompatibilityLayer().servers();
return response.status(200).json({
success: true,
servers,
});
} catch (error) {
console.error("Error listing MCP servers:", error);
return response.status(500).json({
success: false,
error: error.message,
});
}
}
);
app.post(
"/mcp-servers/toggle",
[validatedRequest, flexUserRoleValid([ROLES.admin])],
async (request, response) => {
try {
const { name } = reqBody(request);
const result = await new MCPCompatibilityLayer().toggleServerStatus(
name
);
return response.status(200).json({
success: result.success,
error: result.error,
});
} catch (error) {
console.error("Error toggling MCP server:", error);
return response.status(500).json({
success: false,
error: error.message,
});
}
}
);
app.post(
"/mcp-servers/delete",
[validatedRequest, flexUserRoleValid([ROLES.admin])],
async (request, response) => {
try {
const { name } = reqBody(request);
const result = await new MCPCompatibilityLayer().deleteServer(name);
return response.status(200).json({
success: result.success,
error: result.error,
});
} catch (error) {
console.error("Error deleting MCP server:", error);
return response.status(500).json({
success: false,
error: error.message,
});
}
}
);
app.post(
"/mcp-servers/toggle-tool",
[validatedRequest, flexUserRoleValid([ROLES.admin])],
async (request, response) => {
try {
const { serverName, toolName, enabled } = reqBody(request);
const result = await new MCPCompatibilityLayer().toggleToolSuppression(
serverName,
toolName,
enabled
);
return response.status(200).json({
success: result.success,
error: result.error,
suppressedTools: result.suppressedTools,
});
} catch (error) {
console.error("Error toggling MCP tool:", error);
return response.status(500).json({
success: false,
error: error.message,
suppressedTools: [],
});
}
}
);
}
module.exports = { mcpServersEndpoints };