get_library_stats
Retrieve aggregate statistics about your Lutris game library, including total games, categories, and collection insights from the database.
Instructions
Get aggregate statistics about the Lutris game library
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/db/queries.ts:235-284 (handler)The actual business logic that queries the database to calculate library statistics.
export function getLibraryStats(): LibraryStats { const db = getDatabase(); const totals = db .prepare( "SELECT COUNT(*) as total, SUM(CASE WHEN installed = 1 THEN 1 ELSE 0 END) as installed, COALESCE(SUM(playtime), 0) as playtime FROM games" ) .get() as { total: number; installed: number; playtime: number }; const topByPlaytime = db .prepare( "SELECT name, playtime FROM games WHERE playtime > 0 ORDER BY playtime DESC LIMIT 10" ) .all() as { name: string; playtime: number }[]; const byRunner = db .prepare( "SELECT COALESCE(runner, 'unknown') as runner, COUNT(*) as count FROM games GROUP BY runner ORDER BY count DESC" ) .all() as { runner: string; count: number }[]; const byPlatform = db .prepare( "SELECT COALESCE(platform, 'unknown') as platform, COUNT(*) as count FROM games GROUP BY platform ORDER BY count DESC" ) .all() as { platform: string; count: number }[]; const byService = db .prepare( "SELECT COALESCE(service, 'none') as service, COUNT(*) as count FROM games GROUP BY service ORDER BY count DESC" ) .all() as { service: string; count: number }[]; const recentlyPlayed = db .prepare( "SELECT name, lastplayed FROM games WHERE lastplayed IS NOT NULL AND lastplayed > 0 ORDER BY lastplayed DESC LIMIT 10" ) .all() as { name: string; lastplayed: number }[]; return { total_games: totals.total, installed_games: totals.installed, total_playtime_hours: Math.round((totals.playtime / 60) * 100) / 100, top_games_by_playtime: topByPlaytime, games_by_runner: byRunner, games_by_platform: byPlatform, games_by_service: byService, recently_played: recentlyPlayed, }; } - src/tools/stats.ts:5-20 (handler)MCP tool definition and handler that calls the database query.
server.tool( "get_library_stats", "Get aggregate statistics about the Lutris game library", {}, async () => { try { const stats = getLibraryStats(); return { content: [{ type: "text", text: JSON.stringify(stats, null, 2) }], }; } catch (error) { const msg = error instanceof Error ? error.message : String(error); return { content: [{ type: "text", text: `Error: ${msg}` }], isError: true }; } } ); - src/tools/stats.ts:4-21 (registration)Function to register the stats tools with the MCP server.
export function registerStatsTools(server: McpServer) { server.tool( "get_library_stats", "Get aggregate statistics about the Lutris game library", {}, async () => { try { const stats = getLibraryStats(); return { content: [{ type: "text", text: JSON.stringify(stats, null, 2) }], }; } catch (error) { const msg = error instanceof Error ? error.message : String(error); return { content: [{ type: "text", text: `Error: ${msg}` }], isError: true }; } } ); } - src/db/queries.ts:224-233 (schema)Type definition for the library statistics object.
export interface LibraryStats { total_games: number; installed_games: number; total_playtime_hours: number; top_games_by_playtime: { name: string; playtime: number }[]; games_by_runner: { runner: string; count: number }[]; games_by_platform: { platform: string; count: number }[]; games_by_service: { service: string; count: number }[]; recently_played: { name: string; lastplayed: number }[]; }