@pedrocid/music-mcp
Version:
MCP server for controlling Apple Music on macOS (v1.0.5)
119 lines (118 loc) • 4.81 kB
JavaScript
;
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');
}