UNPKG

@pedrocid/music-mcp

Version:

MCP server for controlling Apple Music on macOS (v1.0.5)

119 lines (118 loc) 4.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.registerTools = registerTools; const types_js_1 = require("@modelcontextprotocol/sdk/types.js"); const logger_js_1 = require("./logger.js"); const info_js_1 = require("./tools/info.js"); const music_control_js_1 = require("./tools/music-control.js"); const library_management_js_1 = require("./tools/library-management.js"); const playlist_management_js_1 = require("./tools/playlist-management.js"); const queue_management_js_1 = require("./tools/queue-management.js"); async function registerTools(server) { // Register tool definitions server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => { return { tools: [ info_js_1.infoTool, music_control_js_1.executeMusicCommandTool, library_management_js_1.getMusicInfoTool, library_management_js_1.searchMusicTool, playlist_management_js_1.managePlaylistTool, queue_management_js_1.queueMusicTool ] }; }); // Register tool call handler server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => { const { name, arguments: args } = request.params; logger_js_1.logger.info({ toolName: name }, 'Handling tool call'); try { switch (name) { case 'info': { const infoResult = await (0, info_js_1.handleInfoCommand)(); return { content: [ { type: 'text', text: JSON.stringify(infoResult, null, 2) } ] }; } case 'execute_music_command': { const commandResult = await (0, music_control_js_1.handleExecuteMusicCommand)(args); return { content: [ { type: 'text', text: JSON.stringify(commandResult, null, 2) } ] }; } case 'get_music_info': { const infoData = await (0, library_management_js_1.handleGetMusicInfo)(args); return { content: [ { type: 'text', text: JSON.stringify(infoData, null, 2) } ] }; } case 'search_music': { const searchResult = await (0, library_management_js_1.handleSearchMusic)(args); return { content: [ { type: 'text', text: JSON.stringify(searchResult, null, 2) } ] }; } case 'manage_playlist': { const playlistResult = await (0, playlist_management_js_1.handleManagePlaylist)(args); return { content: [ { type: 'text', text: JSON.stringify(playlistResult, null, 2) } ] }; } case 'queue_music': { const queueResult = await (0, queue_management_js_1.handleQueueMusic)(args); return { content: [ { type: 'text', text: JSON.stringify(queueResult, null, 2) } ] }; } default: throw new Error(`Unknown tool: ${name}`); } } catch (error) { logger_js_1.logger.error({ error, toolName: name }, 'Tool execution failed'); return { content: [ { type: 'text', text: JSON.stringify({ success: false, error: `Tool execution failed: ${error.message}` }, null, 2) } ], isError: true }; } }); logger_js_1.logger.info('All MCP tools registered successfully'); }