search-tool.ts•1.36 kB
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
import { SpotifyClient } from "../../spotify-client.js";
import { searchSpotify, formatSearchResults } from "../search.js";
export function registerSearchTool(server: McpServer, spotifyClient: SpotifyClient) {
server.tool(
"search_spotify",
"Search Spotify for tracks, albums, and artists",
{
query: z.string().describe("Search query string"),
types: z
.array(z.enum(["track", "album", "artist"]))
.describe("Types to search for (track, album, artist)"),
limit: z
.number()
.optional()
.default(10)
.describe("Maximum number of results per type (default: 10)"),
},
async ({ query, types, limit }) => {
try {
const results = await searchSpotify(spotifyClient, {
query,
types,
limit,
});
const formattedResults = formatSearchResults(results);
return {
content: [{ type: "text", text: formattedResults }],
};
} catch (error) {
const errorMessage =
error instanceof Error ? error.message : "Unknown error";
return {
content: [{ type: "text", text: `Error searching Spotify: ${errorMessage}` }],
isError: true,
};
}
}
);
}