import dotenv from 'dotenv';
import { z } from 'zod';
dotenv.config();
interface LoggingConfig {
level: string;
}
interface ServerConfig {
port: number;
}
interface ToolSchema {
name: string;
description: string;
parameters: z.ZodTypeAny;
}
interface McpConfig {
tools: ToolSchema[];
}
interface Config {
logging: LoggingConfig;
server: ServerConfig;
mcp: McpConfig;
}
const config: Config = {
logging: {
level: process.env.LOG_LEVEL || 'info',
},
server: {
port: process.env.PORT ? parseInt(process.env.PORT, 10) : 3000,
},
mcp: {
tools: [
{
name: 'apple-music-set-volume',
description: 'Adjust Apple Music volume',
parameters: z.object({
level: z
.number()
.min(0)
.max(10)
.describe(
'Volume level between 0 and 10, usual volume should be 3'
),
}),
},
{
name: 'apple-music-next-track',
description: 'Play next track',
parameters: z.object({}),
},
{
name: 'apple-music-pause',
description: 'Pause music playback',
parameters: z.object({}),
},
{
name: 'apple-music-play',
description: 'Resume music playback',
parameters: z.object({}),
},
{
name: 'apple-music-search-album',
description: 'Search for tracks by album',
parameters: z.object({
album: z.string().min(1).describe('Album name to search for'),
}),
},
{
name: 'apple-music-search-and-play',
description: 'Search and play a song',
parameters: z.object({
song: z.string().min(1).describe('Song name to search for and play'),
}),
},
{
name: 'apple-music-search-song',
description: 'Search for specific songs',
parameters: z.object({
song: z.string().min(1).describe('Song name to search for'),
}),
},
{
name: 'apple-music-search-artist',
description: 'Search for tracks by artist',
parameters: z.object({
artist: z.string().min(1).describe('Artist name to search for'),
}),
},
{
name: 'apple-music-get-current-track',
description: 'Get currently playing track',
parameters: z.object({}),
},
],
},
};
export default config;