121 lines
3 KiB
JavaScript
121 lines
3 KiB
JavaScript
'use strict';
|
|
|
|
const { handleMcpHttpRequest } = require('./httpTransport');
|
|
|
|
/**
|
|
* Get MCP configuration for Claude Desktop
|
|
* Returns JSON that user can paste into Claude Desktop config
|
|
*/
|
|
async function getMcpConfig(req, res) {
|
|
try {
|
|
// Get base URL from request
|
|
const protocol = req.protocol;
|
|
const host = req.get('host');
|
|
const baseUrl = `${protocol}://${host}`;
|
|
|
|
// Generate HTTP-based config for remote access
|
|
const claudeConfig = {
|
|
mcpServers: {
|
|
tududi: {
|
|
command: 'npx',
|
|
args: [
|
|
'-y',
|
|
'mcp-remote',
|
|
`${baseUrl}/api/mcp`,
|
|
'--header',
|
|
'Authorization:Bearer ${TUDUDI_API_TOKEN}',
|
|
],
|
|
env: {
|
|
TUDUDI_API_TOKEN: 'YOUR_API_TOKEN_HERE',
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
res.json(claudeConfig);
|
|
} catch (error) {
|
|
console.error('Error generating MCP config:', error);
|
|
res.status(500).json({
|
|
error: 'Failed to generate MCP configuration',
|
|
message: error.message,
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Handle MCP protocol message
|
|
* This is called by the POST /api/mcp endpoint
|
|
*/
|
|
async function handleMcpMessage(req, res) {
|
|
try {
|
|
const user = req.mcpUser;
|
|
const apiToken = req.mcpApiToken;
|
|
|
|
// Delegate to HTTP transport handler
|
|
await handleMcpHttpRequest(req, res, user, apiToken);
|
|
} catch (error) {
|
|
console.error('Error handling MCP message:', error);
|
|
|
|
// Only send response if headers haven't been sent
|
|
if (!res.headersSent) {
|
|
res.status(500).json({
|
|
error: 'Failed to process MCP message',
|
|
message: error.message,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get MCP feature flag status
|
|
*/
|
|
async function getMcpStatus(req, res) {
|
|
const mcpEnabled = process.env.FF_ENABLE_MCP === 'true';
|
|
res.json({ enabled: mcpEnabled });
|
|
}
|
|
|
|
/**
|
|
* List available MCP tools
|
|
*/
|
|
async function listMcpTools(req, res) {
|
|
const tools = [
|
|
{
|
|
category: 'Tasks',
|
|
count: 8,
|
|
tools: [
|
|
'list_tasks',
|
|
'get_task',
|
|
'create_task',
|
|
'update_task',
|
|
'complete_task',
|
|
'delete_task',
|
|
'add_subtask',
|
|
'get_task_metrics',
|
|
],
|
|
},
|
|
{
|
|
category: 'Projects',
|
|
count: 3,
|
|
tools: ['list_projects', 'create_project', 'update_project'],
|
|
},
|
|
{
|
|
category: 'Inbox',
|
|
count: 2,
|
|
tools: ['list_inbox', 'add_to_inbox'],
|
|
},
|
|
{
|
|
category: 'Misc',
|
|
count: 3,
|
|
tools: ['list_areas', 'list_tags', 'search'],
|
|
},
|
|
];
|
|
|
|
res.json({ tools });
|
|
}
|
|
|
|
module.exports = {
|
|
getMcpConfig,
|
|
getMcpStatus,
|
|
listMcpTools,
|
|
handleMcpMessage,
|
|
};
|