Backlog MCP Server

  • src
#!/usr/bin/env node /** * Backlog MCP server * * This server implements a Backlog integration with Model Context Protocol. * It provides resources for viewing recent projects and tools for interactions. */ import { Server } from "@modelcontextprotocol/sdk/server/index.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { CallToolRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, } from "@modelcontextprotocol/sdk/types.js"; import { loadConfig } from './config.js'; import { BacklogClient } from './backlog-client.js'; import { listRecentProjects, readProject } from './handlers/resource-handlers.js'; import { listTools, executeTools } from './handlers/tool-handlers.js'; import { listPrompts, getPrompt } from './handlers/prompt-handlers.js'; /** * Create an MCP server with capabilities for resources, tools, and prompts. */ const server = new Server( { name: "mcp-backlog-server", version: "0.1.0", }, { capabilities: { resources: {}, tools: {}, prompts: {}, }, } ); /** * Initialize the Backlog client */ const config = loadConfig(); const backlogClient = new BacklogClient(config); /** * Handler for listing available Backlog resources (recently viewed projects) */ server.setRequestHandler(ListResourcesRequestSchema, async () => { return await listRecentProjects(backlogClient); }); /** * Handler for reading the contents of a specific Backlog resource */ server.setRequestHandler(ReadResourceRequestSchema, async (request) => { return await readProject(backlogClient, request.params.uri); }); /** * Handler that lists available tools */ server.setRequestHandler(ListToolsRequestSchema, async () => { return listTools(); }); /** * Handler for executing tools */ server.setRequestHandler(CallToolRequestSchema, async (request) => { return await executeTools( backlogClient, request.params.name, request.params.arguments ); }); /** * Handler that lists available prompts */ server.setRequestHandler(ListPromptsRequestSchema, async () => { return listPrompts(); }); /** * Handler for generating prompts */ server.setRequestHandler(GetPromptRequestSchema, async (request) => { return await getPrompt(backlogClient, request.params.name); }); /** * Start the server using stdio transport */ async function main() { try { console.error("Starting Backlog MCP server..."); const transport = new StdioServerTransport(); await server.connect(transport); } catch (error) { console.error("Server initialization error:", error); process.exit(1); } } main().catch((error) => { console.error("Server error:", error); process.exit(1); });