discogs-mcp-server 0.4.2 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/version.ts","../src/config.ts","../src/errors.ts","../src/utils.ts","../src/types/common.ts","../src/types/artist.ts","../src/services/index.ts","../src/services/artist.ts","../src/types/database.ts","../src/services/database.ts","../src/types/label.ts","../src/services/label.ts","../src/types/release.ts","../src/types/master.ts","../src/services/master.ts","../src/services/release.ts","../src/tools/database.ts","../src/types/inventory.ts","../src/services/inventory.ts","../src/tools/inventoryExport.ts","../src/types/marketplace.ts","../src/services/marketplace.ts","../src/types/user/collection.ts","../src/types/user/inventory.ts","../src/types/user/lists.ts","../src/types/user/profile.ts","../src/types/user/wants.ts","../src/services/user/inventory.ts","../src/tools/marketplace.ts","../src/tools/media.ts","../src/services/user/collection.ts","../src/services/user/lists.ts","../src/services/user/profile.ts","../src/services/user/wants.ts","../src/services/user/index.ts","../src/tools/userCollection.ts","../src/types/oauth.ts","../src/services/oauth.ts","../src/types/user/contribution.ts","../src/services/user/contribution.ts","../src/tools/userIdentity.ts","../src/types/list.ts","../src/services/list.ts","../src/tools/userLists.ts","../src/tools/userWantlist.ts","../src/tools/index.ts","../src/index.ts"],"names":["z"],"mappings":"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","file":"index.js","sourcesContent":["// This should match the version in package.json or else it will break the CI workflow\n// You should not need to manually update this value, it will be managed using `pnpm version:sync` during release creation\nexport const VERSION = '0.4.2';\n","import dotenv from 'dotenv';\nimport { VERSION } from './version.js';\n\n// Load environment variables from .env file\ndotenv.config();\n\n// Discogs API configuration\nexport const config = {\n discogs: {\n apiUrl: process.env.DISCOGS_API_URL || 'https://api.discogs.com',\n /* Some MCP clients can't handle large amounts of data.\n * The client may explicitly request more at their own peril. */\n defaultPerPage: 5,\n mediaType: process.env.DISCOGS_MEDIA_TYPE || 'application/vnd.discogs.v2.discogs+json',\n personalAccessToken: process.env.DISCOGS_PERSONAL_ACCESS_TOKEN,\n userAgent: process.env.DISCOGS_USER_AGENT || `DiscogsMCPServer/${VERSION}`,\n },\n server: {\n name: process.env.SERVER_NAME || 'Discogs MCP Server',\n port: process.env.PORT ? parseInt(process.env.PORT, 10) : 3001,\n },\n};\n\n// Validate required configuration\nexport function validateConfig(): void {\n const missingVars: string[] = [];\n\n if (!process.env.DISCOGS_PERSONAL_ACCESS_TOKEN) {\n missingVars.push('DISCOGS_PERSONAL_ACCESS_TOKEN');\n }\n\n if (missingVars.length > 0) {\n throw new Error(`Missing required environment variables: ${missingVars.join(', ')}`);\n }\n}\n","import { UserError } from 'fastmcp';\n\nexport class DiscogsError extends Error {\n constructor(\n message: string,\n public readonly status: number,\n public readonly response: unknown,\n ) {\n super(message);\n this.name = new.target.name;\n }\n}\n\nexport class DiscogsAuthenticationError extends DiscogsError {\n constructor(message = 'Authentication failed') {\n super(message, 401, { message });\n this.name = new.target.name;\n }\n}\n\nexport class DiscogsMethodNotAllowedError extends DiscogsError {\n constructor(message = 'Method not allowed') {\n super(message, 405, { message });\n this.name = new.target.name;\n }\n}\n\nexport class DiscogsPermissionError extends DiscogsError {\n constructor(message = 'Insufficient permissions') {\n super(message, 403, { message });\n this.name = new.target.name;\n }\n}\n\nexport class DiscogsRateLimitError extends DiscogsError {\n constructor(\n message = 'Rate limit exceeded',\n public readonly resetAt: Date,\n ) {\n super(message, 429, { message, reset_at: resetAt.toISOString() });\n this.name = new.target.name;\n }\n}\n\nexport class DiscogsResourceNotFoundError extends DiscogsError {\n constructor(message = 'Resource not found') {\n super(message, 404, { message });\n this.name = new.target.name;\n }\n}\n\nexport class DiscogsValidationFailedError extends DiscogsError {\n constructor(response?: unknown) {\n // Try to extract the detailed error message from the response\n let message = 'Validation failed';\n\n if (response && typeof response === 'object' && response !== null) {\n const detail = (response as { detail?: Array<{ msg?: string }> }).detail;\n if (Array.isArray(detail) && detail.length > 0 && detail[0].msg) {\n message = detail[0].msg;\n }\n }\n\n super(message, 422, { message });\n this.name = new.target.name;\n }\n}\n\n/**\n * Creates a specific Discogs error instance based on HTTP status code\n *\n * @param status HTTP status code from the Discogs API response\n * @param response Response data from the Discogs API\n * @returns An appropriate DiscogsError subclass instance\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function createDiscogsError(status: number, response: any): DiscogsError {\n switch (status) {\n case 401:\n return new DiscogsAuthenticationError(response?.message);\n case 403:\n return new DiscogsPermissionError(response?.message);\n case 404:\n return new DiscogsResourceNotFoundError(response?.message || 'Resource');\n case 405:\n return new DiscogsMethodNotAllowedError(response?.message);\n case 422:\n return new DiscogsValidationFailedError(response);\n case 429:\n return new DiscogsRateLimitError(\n response?.message,\n new Date(response?.reset_at || Date.now() + 60000),\n );\n default:\n return new DiscogsError(response?.message || 'Discogs API error', status, response);\n }\n}\n\n/**\n * Creates a user-friendly error from any error object\n * This will be displayed cleanly in FastMCP without error class prefixes\n *\n * @param error The error to format\n * @returns A UserError with the original error message\n */\nexport function formatDiscogsError(error: unknown): UserError {\n let message: string;\n\n if (error instanceof Error) {\n // For any Error object, use its message directly\n message = error.message;\n } else {\n // For non-Error objects\n message = String(error);\n }\n\n return new UserError(message);\n}\n\n/**\n * Type guard to check if an error is a DiscogsError\n *\n * @param error The error to check\n * @returns True if the error is a DiscogsError or subclass\n */\nexport function isDiscogsError(error: unknown): error is DiscogsError {\n return error instanceof DiscogsError;\n}\n","import { z } from 'zod';\n\n// Debug logging on stderr to avoid protocol confusion\nexport const log = {\n _log: (level: string, ...args: unknown[]): void => {\n const msg = `[${level} ${new Date().toISOString()}] ${args.join(' ')}\\n`;\n process.stderr.write(msg);\n },\n\n info: (...args: unknown[]): void => {\n log._log('INFO', ...args);\n },\n\n debug: (...args: unknown[]): void => {\n log._log('DEBUG', ...args);\n },\n\n warn: (...args: unknown[]): void => {\n log._log('WARN', ...args);\n },\n\n error: (...args: unknown[]): void => {\n log._log('ERROR', ...args);\n },\n};\n\n/**\n * Custom Zod schema for a URL or empty string\n */\nexport const urlOrEmptySchema = () => {\n return z.string().refine((val) => val === '' || /^https?:\\/\\/.+/.test(val), {\n message: 'Must be a valid URL or empty string',\n });\n};\n","import { z } from 'zod';\nimport { urlOrEmptySchema } from '../utils.js';\n\n/**\n * Schema for currency codes supported by Discogs\n */\nexport const CurrencyCodeSchema = z.enum([\n 'USD', // US Dollar\n 'GBP', // British Pound\n 'EUR', // Euro\n 'CAD', // Canadian Dollar\n 'AUD', // Australian Dollar\n 'JPY', // Japanese Yen\n 'CHF', // Swiss Franc\n 'MXN', // Mexican Peso\n 'BRL', // Brazilian Real\n 'NZD', // New Zealand Dollar\n 'SEK', // Swedish Krona\n 'ZAR', // South African Rand\n]);\n\nexport const ImageSchema = z.object({\n width: z.number().int().optional(),\n height: z.number().int().optional(),\n resource_url: urlOrEmptySchema(),\n type: z.string().optional(),\n uri: urlOrEmptySchema(),\n uri150: urlOrEmptySchema().optional(),\n});\n\n/**\n * Schema for a filtered response\n */\nexport const FilteredResponseSchema = z.object({\n filters: z.object({\n applied: z.record(z.string(), z.array(z.any())).default({}),\n available: z.record(z.string(), z.record(z.string(), z.number().int())).default({}),\n }),\n filter_facets: z.array(\n z.object({\n title: z.string(),\n id: z.string(),\n values: z.array(\n z.object({\n title: z.string(),\n value: z.string(),\n count: z.number().int(),\n }),\n ),\n allows_multiple_values: z.boolean(),\n }),\n ),\n});\n\nconst PaginationSchema = z.object({\n page: z.number().int().min(0).optional(),\n per_page: z.number().int().min(0).optional(),\n pages: z.number().int().min(0),\n items: z.number().int().min(0),\n urls: z\n .object({\n first: z.string().url().optional(),\n prev: z.string().url().optional(),\n next: z.string().url().optional(),\n last: z.string().url().optional(),\n })\n .optional(),\n});\n\n/**\n * Schema for a paginated response\n * @param itemSchema The schema for the items in the array\n * @param resultsFieldName The name of the field containing the array of items\n */\nexport const PaginatedResponseSchema = <T extends z.ZodType, K extends string>(\n itemSchema: T,\n resultsFieldName: K,\n) =>\n z.object({\n pagination: PaginationSchema,\n [resultsFieldName]: z.array(itemSchema),\n });\n\n/**\n * Schema for a paginated response with an object instead of an array\n * @param itemSchema The schema for the item in the object\n * @param resultsFieldName The name of the field containing the object\n */\nexport const PaginatedResponseWithObjectSchema = <T extends z.ZodType, K extends string>(\n itemSchema: T,\n resultsFieldName: K,\n) =>\n z.object({\n pagination: PaginationSchema,\n [resultsFieldName]: itemSchema,\n });\n\n/**\n * Schema for query parameters that include both pagination and sorting\n * @param validSortKeys An array of valid sort keys for the specific endpoint\n */\nexport const QueryParamsSchema = <T extends readonly [string, ...string[]]>(\n validSortKeys: T = [] as unknown as T,\n) =>\n z.object({\n // Pagination\n page: z.number().int().min(1).optional(),\n per_page: z.number().int().min(1).max(100).optional(),\n\n // Sorting\n sort: z.enum(validSortKeys).optional(),\n sort_order: z.enum(['asc', 'desc']).optional(),\n });\n\n/**\n * Schema for status values\n */\nexport const StatusSchema = z.enum(['Accepted', 'Draft', 'Deleted', 'Rejected']);\n\n/**\n * Schema for a username input\n */\nexport const UsernameInputSchema = z.object({\n username: z.string().min(1, 'username is required'),\n});\n\n/**\n * TypeScript type for currency codes\n */\nexport type CurrencyCode = z.infer<typeof CurrencyCodeSchema>;\n\n/**\n * Common type for FastMCP session authentication\n */\nexport type FastMCPSessionAuth = Record<string, unknown> | undefined;\n\n/**\n * TypeScript type for a paginated response\n */\nexport type PaginatedResponse<T, K extends string> = z.infer<\n ReturnType<typeof PaginatedResponseSchema<z.ZodType<T>, K>>\n>;\n\n/**\n * TypeScript type for query parameters\n */\nexport type QueryParams<T extends readonly [string, ...string[]]> = z.infer<\n ReturnType<typeof QueryParamsSchema<T>>\n>;\n\n/**\n * TypeScript type for a username input\n */\nexport type UsernameInput = z.infer<typeof UsernameInputSchema>;\n","import { z } from 'zod';\nimport { urlOrEmptySchema } from '../utils.js';\nimport { ImageSchema, PaginatedResponseSchema, QueryParamsSchema } from './common.js';\n\n/**\n * Schema for an artist ID parameter\n */\nexport const ArtistIdParamSchema = z.object({\n artist_id: z.number(),\n});\n\n/**\n * Schema for basic artist information\n */\nexport const ArtistBasicSchema = z.object({\n id: z.number(),\n anv: z.string(),\n join: z.string(),\n name: z.string(),\n resource_url: urlOrEmptySchema(),\n role: z.string(),\n tracks: z.string(),\n});\n\n/**\n * Schema for complete artist information\n */\nexport const ArtistSchema = z.object({\n id: z.number(),\n aliases: z\n .array(\n z.object({\n id: z.number(),\n name: z.string(),\n resource_url: urlOrEmptySchema(),\n thumbnail_url: urlOrEmptySchema().optional(),\n }),\n )\n .optional(),\n data_quality: z.string().optional(),\n images: z.array(ImageSchema).optional(),\n members: z\n .array(\n z.object({\n id: z.number(),\n active: z.boolean().optional(),\n name: z.string(),\n resource_url: urlOrEmptySchema(),\n thumbnail_url: urlOrEmptySchema().optional(),\n }),\n )\n .optional(),\n name: z.string(),\n namevariations: z.array(z.string()).optional(),\n profile: z.string().optional(),\n realname: z.string().optional(),\n releases_url: urlOrEmptySchema().optional(),\n resource_url: urlOrEmptySchema(),\n uri: urlOrEmptySchema().optional(),\n urls: z.array(z.string()).optional(),\n});\n\n/**\n * Schema for an artist release\n */\nexport const ArtistReleaseSchema = z.object({\n id: z.number(),\n artist: z.string(),\n catno: z.string().optional(),\n format: z.string().optional(),\n label: z.string().optional(),\n main_release: z.number().optional(),\n resource_url: urlOrEmptySchema(),\n role: z.string().optional(),\n status: z.string().optional(),\n stats: z\n .object({\n community: z.object({\n in_collection: z.number(),\n in_wantlist: z.number(),\n }),\n user: z.object({\n in_collection: z.number(),\n in_wantlist: z.number(),\n }),\n })\n .optional(),\n thumb: urlOrEmptySchema().optional(),\n title: z.string(),\n trackinfo: z.string().optional(),\n type: z.string().optional(),\n year: z.number().optional(),\n});\n\n/**\n * Schema for artist releases parameters\n */\nexport const ArtistReleasesParamsSchema = ArtistIdParamSchema.merge(\n QueryParamsSchema(['year', 'title', 'format'] as const),\n);\n\n/**\n * Schema for artist releases\n */\nexport const ArtistReleasesSchema = PaginatedResponseSchema(ArtistReleaseSchema, 'releases');\n\n/**\n * TypeScript type for an artist ID parameter\n */\nexport type ArtistIdParam = z.infer<typeof ArtistIdParamSchema>;\n\n/**\n * TypeScript type for basic artist information\n */\nexport type ArtistBasic = z.infer<typeof ArtistBasicSchema>;\n\n/**\n * TypeScript type for a complete artist\n */\nexport type Artist = z.infer<typeof ArtistSchema>;\n\n/**\n * TypeScript type for artist releases parameters\n */\nexport type ArtistReleasesParams = z.infer<typeof ArtistReleasesParamsSchema>;\n\n/**\n * TypeScript type for artist releases\n */\nexport type ArtistReleases = z.infer<typeof ArtistReleasesSchema>;\n","import { config } from '../config.js';\nimport { createDiscogsError } from '../errors.js';\n\nexport interface RequestOptions {\n method?: 'GET' | 'POST' | 'PUT' | 'DELETE';\n params?: Record<string, string | number | boolean | undefined>;\n body?: unknown;\n}\n\n// Base service with common functionality\nexport abstract class DiscogsService {\n protected readonly baseUrl: string;\n protected readonly headers: Record<string, string>;\n\n protected constructor(protected readonly servicePath: string) {\n if (\n !config.discogs.apiUrl ||\n !config.discogs.mediaType ||\n !config.discogs.personalAccessToken ||\n !config.discogs.userAgent\n ) {\n throw new Error('Discogs API configuration is incomplete');\n }\n\n this.baseUrl = `${config.discogs.apiUrl}${servicePath}`;\n this.headers = {\n Accept: config.discogs.mediaType,\n Authorization: `Discogs token=${config.discogs.personalAccessToken}`,\n 'Content-Type': 'application/json',\n 'User-Agent': config.discogs.userAgent,\n };\n }\n\n protected async request<T>(path: string, options?: RequestOptions): Promise<T> {\n const url = new URL(`${this.baseUrl}${path}`);\n\n // Add query parameters if they exist\n if (options?.params) {\n Object.entries(options.params).forEach(([key, value]) => {\n if (value !== undefined) {\n url.searchParams.append(key, String(value));\n }\n });\n }\n\n // Set default per_page if not specified\n if (!url.searchParams.has('per_page')) {\n url.searchParams.append('per_page', String(config.discogs.defaultPerPage));\n }\n\n const response = await fetch(url.toString(), {\n method: options?.method || 'GET',\n headers: this.headers,\n body: options?.body ? JSON.stringify(options.body) : undefined,\n });\n\n const contentType = response.headers.get('content-type');\n const isJson = contentType && contentType.includes('application/json');\n\n let responseBody;\n try {\n responseBody = isJson ? await response.json() : await response.text();\n } catch {\n // Ignore the error and use default message\n responseBody = { message: 'Failed to parse response' };\n }\n\n // Check if the response is successful\n if (!response.ok) {\n throw createDiscogsError(response.status, responseBody);\n }\n\n return responseBody as T;\n }\n}\n\n/**\n * Base class for user-related services\n */\nexport class BaseUserService extends DiscogsService {\n constructor() {\n super('/users');\n }\n}\n","import { isDiscogsError } from '../errors.js';\nimport {\n ArtistReleasesSchema,\n ArtistSchema,\n type Artist,\n type ArtistIdParam,\n type ArtistReleases,\n type ArtistReleasesParams,\n} from '../types/artist.js';\nimport { DiscogsService } from './index.js';\n\n/**\n * Service for Discogs Artist-related operations\n */\nexport class ArtistService extends DiscogsService {\n constructor() {\n super('/artists');\n }\n\n /**\n * Get an artist\n *\n * @param params - Parameters containing the artist ID\n * @returns {Artist} The artist information\n * @throws {DiscogsResourceNotFoundError} If the artist cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async get({ artist_id }: ArtistIdParam): Promise<Artist> {\n try {\n const response = await this.request<Artist>(`/${artist_id}`);\n\n const validatedResponse = ArtistSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get artist: ${String(error)}`);\n }\n }\n\n /**\n * Get an artist's releases\n *\n * @param params - Parameters containing the artist ID and pagination options\n * @returns {ArtistReleases} The artist releases\n * @throws {DiscogsResourceNotFoundError} If the artist cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async getReleases({ artist_id, ...options }: ArtistReleasesParams): Promise<ArtistReleases> {\n try {\n const response = await this.request<ArtistReleases>(`/${artist_id}/releases`, {\n params: options,\n });\n\n const validatedResponse = ArtistReleasesSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get artist releases: ${String(error)}`);\n }\n }\n}\n","import { z } from 'zod';\nimport { urlOrEmptySchema } from '../utils.js';\nimport { PaginatedResponseSchema, QueryParamsSchema } from './common.js';\n\n/**\n * Schema for search parameters\n */\nexport const SearchParamsSchema = z\n .object({\n q: z.string().optional(),\n type: z.enum(['artist', 'label', 'master', 'release']).optional(),\n title: z.string().optional(),\n release_title: z.string().optional(),\n credit: z.string().optional(),\n artist: z.string().optional(),\n anv: z.string().optional(),\n label: z.string().optional(),\n genre: z.string().optional(),\n style: z.string().optional(),\n country: z.string().optional(),\n year: z.string().optional(),\n format: z.string().optional(),\n catno: z.string().optional(),\n barcode: z.string().optional(),\n track: z.string().optional(),\n submitter: z.string().optional(),\n contributor: z.string().optional(),\n })\n .merge(QueryParamsSchema(['title', 'artist', 'year']));\n\n/**\n * Schema for search result items\n */\nconst SearchResultSchema = z.object({\n id: z.number(),\n barcode: z.array(z.string()).optional(),\n catno: z.string().optional(),\n community: z\n .object({\n have: z.number(),\n want: z.number(),\n })\n .optional(),\n country: z.string().optional(),\n cover_image: urlOrEmptySchema().optional(),\n format: z.array(z.string()).optional(),\n format_quantity: z.number().optional(),\n formats: z\n .array(\n z.object({\n descriptions: z.array(z.string()).optional(),\n name: z.string(),\n qty: z.string(),\n text: z.string().optional(),\n }),\n )\n .optional(),\n genre: z.array(z.string()).optional(),\n label: z.array(z.string()).optional(),\n master_id: z.number().nullable().optional(),\n master_url: urlOrEmptySchema().nullable().optional(),\n resource_url: urlOrEmptySchema(),\n style: z.array(z.string()).optional(),\n thumb: urlOrEmptySchema().optional(),\n title: z.string(),\n type: z.enum(['artist', 'label', 'master', 'release']),\n uri: z.string(),\n user_data: z\n .object({\n in_collection: z.boolean(),\n in_wantlist: z.boolean(),\n })\n .optional(),\n year: z.string().optional(),\n});\n\n/**\n * Schema for search results\n */\nexport const SearchResultsSchema = PaginatedResponseSchema(SearchResultSchema, 'results');\n\n/**\n * TypeScript type for search parameters\n */\nexport type SearchParams = z.infer<typeof SearchParamsSchema>;\n\n/**\n * TypeScript type for search results\n */\nexport type SearchResults = z.infer<typeof SearchResultsSchema>;\n","import { isDiscogsError } from '../errors.js';\nimport { type SearchParams, type SearchResults, SearchResultsSchema } from '../types/database.js';\nimport { DiscogsService } from './index.js';\n\n/**\n * Service for Discogs Database-related operations\n */\nexport class DatabaseService extends DiscogsService {\n constructor() {\n super('/database');\n }\n\n /**\n * Issue a search query to the Discogs database\n *\n * @param params - Search parameters\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {Error} If the search times out or an unexpected error occurs\n * @returns {SearchResults} Search results\n */\n async search(params: SearchParams): Promise<SearchResults> {\n try {\n const response = await this.request<SearchResults>('/search', { params });\n\n const validatedResponse = SearchResultsSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to search database: ${String(error)}`);\n }\n }\n}\n","import { z } from 'zod';\nimport { urlOrEmptySchema } from '../utils.js';\nimport { ArtistReleaseSchema } from './artist.js';\nimport { ImageSchema, PaginatedResponseSchema, QueryParamsSchema } from './common.js';\n\n/**\n * Schema for a label ID parameter\n */\nexport const LabelIdParamSchema = z.object({\n label_id: z.number(),\n});\n\n/**\n * Schema for basic label information\n */\nexport const LabelBasicSchema = z.object({\n id: z.number(),\n catno: z.string(),\n entity_type: z.string().optional(),\n entity_type_name: z.string().optional(),\n name: z.string(),\n resource_url: urlOrEmptySchema(),\n});\n\n/**\n * Schema for complete label information\n */\nexport const LabelSchema = z.object({\n id: z.number(),\n contact_info: z.string().optional(),\n data_quality: z.string().optional(),\n images: z.array(ImageSchema).optional(),\n name: z.string(),\n parent_label: z\n .object({\n id: z.number(),\n name: z.string(),\n resource_url: urlOrEmptySchema(),\n })\n .optional(),\n profile: z.string().optional(),\n releases_url: urlOrEmptySchema().optional(),\n resource_url: urlOrEmptySchema(),\n sublabels: z\n .array(\n z.object({\n id: z.number(),\n name: z.string(),\n resource_url: urlOrEmptySchema(),\n }),\n )\n .optional(),\n uri: urlOrEmptySchema().optional(),\n urls: z.array(z.string()).optional(),\n});\n\n/**\n * Schema for label releases parameters\n */\nexport const LabelReleasesParamsSchema = LabelIdParamSchema.merge(QueryParamsSchema());\n\n/**\n * Schema for label releases\n */\nexport const LabelReleasesSchema = PaginatedResponseSchema(ArtistReleaseSchema, 'releases');\n\n/**\n * TypeScript type for a label ID parameter\n */\nexport type LabelIdParam = z.infer<typeof LabelIdParamSchema>;\n\n/**\n * TypeScript type for basic label information\n */\nexport type LabelBasic = z.infer<typeof LabelBasicSchema>;\n\n/**\n * TypeScript type for a complete label\n */\nexport type Label = z.infer<typeof LabelSchema>;\n\n/**\n * TypeScript type for label releases parameters\n */\nexport type LabelReleasesParams = z.infer<typeof LabelReleasesParamsSchema>;\n\n/**\n * TypeScript type for label releases\n */\nexport type LabelReleases = z.infer<typeof LabelReleasesSchema>;\n","import { isDiscogsError } from '../errors.js';\nimport {\n type Label,\n type LabelIdParam,\n type LabelReleases,\n type LabelReleasesParams,\n LabelReleasesSchema,\n LabelSchema,\n} from '../types/label.js';\nimport { DiscogsService } from './index.js';\n\nexport class LabelService extends DiscogsService {\n constructor() {\n super('/labels');\n }\n\n /**\n * Get a label\n *\n * @param params - Parameters containing the label ID\n * @returns {Label} The label information\n * @throws {DiscogsResourceNotFoundError} If the label cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async get({ label_id }: LabelIdParam): Promise<Label> {\n try {\n const response = await this.request<Label>(`/${label_id}`);\n\n const validatedResponse = LabelSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get label: ${String(error)}`);\n }\n }\n\n /**\n * Returns a list of Releases associated with the label\n *\n * @param params - Parameters containing the label ID and pagination options\n * @returns {LabelReleases} The label releases\n * @throws {DiscogsResourceNotFoundError} If the label cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async getReleases({ label_id, ...params }: LabelReleasesParams): Promise<LabelReleases> {\n try {\n const response = await this.request<LabelReleases>(`/${label_id}/releases`, {\n params,\n });\n\n const validatedResponse = LabelReleasesSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get label releases: ${String(error)}`);\n }\n }\n}\n","import { z } from 'zod';\nimport { urlOrEmptySchema } from '../utils.js';\nimport { ArtistBasicSchema } from './artist.js';\nimport { CurrencyCodeSchema, ImageSchema, UsernameInputSchema } from './common.js';\nimport { LabelBasicSchema } from './label.js';\n\n/**\n * Schema for a release format\n */\nexport const ReleaseFormatSchema = z.object({\n descriptions: z.array(z.string()).optional(),\n name: z.string(),\n qty: z.string(),\n text: z.string().optional(),\n});\n\n/**\n * Schema for basic release information\n */\nexport const BasicInformationSchema = z.object({\n id: z.number(),\n artists: z.array(ArtistBasicSchema),\n cover_image: urlOrEmptySchema(),\n formats: z.array(ReleaseFormatSchema),\n genres: z.array(z.string()).optional(),\n master_id: z.number().optional(),\n master_url: urlOrEmptySchema().nullable().optional(),\n labels: z.array(LabelBasicSchema),\n resource_url: urlOrEmptySchema(),\n styles: z.array(z.string()).optional(),\n thumb: urlOrEmptySchema(),\n title: z.string(),\n year: z.number(),\n});\n\n/**\n * Schema for a complete release\n */\nexport const ReleaseSchema = z.object({\n id: z.number().int(),\n artists_sort: z.string().optional(),\n artists: z.array(ArtistBasicSchema),\n blocked_from_sale: z.boolean().optional(),\n companies: z\n .array(\n z.object({\n id: z.number().int().optional(),\n catno: z.string().optional(),\n entity_type: z.string().optional(),\n entity_type_name: z.string().optional(),\n name: z.string().optional(),\n resource_url: urlOrEmptySchema().optional(),\n thumbnail_url: urlOrEmptySchema().optional(),\n }),\n )\n .optional(),\n community: z\n .object({\n contributors: z\n .array(\n z.object({\n resource_url: urlOrEmptySchema().optional(),\n username: z.string().optional(),\n }),\n )\n .optional(),\n data_quality: z.string().optional(),\n have: z.number().int().optional(),\n rating: z\n .object({\n average: z.number().optional(),\n count: z.number().int().optional(),\n })\n .optional(),\n status: z.string().optional(),\n submitter: z\n .object({\n resource_url: urlOrEmptySchema().optional(),\n username: z.string().optional(),\n })\n .optional(),\n want: z.number().int().optional(),\n })\n .optional(),\n country: z.string().optional(),\n data_quality: z.string().optional(),\n date_added: z.string().optional(),\n date_changed: z.string().optional(),\n estimated_weight: z.number().int().optional(),\n extraartists: z.array(ArtistBasicSchema).optional(),\n format_quantity: z.number().int().optional(),\n formats: z.array(ReleaseFormatSchema).optional(),\n genres: z.array(z.string()).optional(),\n identifiers: z\n .array(\n z.object({\n type: z.string(),\n value: z.string(),\n description: z.string().optional(),\n }),\n )\n .optional(),\n images: z.array(ImageSchema).optional(),\n labels: z.array(LabelBasicSchema).optional(),\n lowest_price: z.number().nullable().optional(),\n master_id: z.number().optional(),\n master_url: urlOrEmptySchema().optional(),\n notes: z.string().optional(),\n num_for_sale: z.number().int().optional(),\n released: z.string().optional(),\n released_formatted: z.string().optional(),\n resource_url: urlOrEmptySchema(),\n series: z.array(z.unknown()).optional(),\n status: z.string().optional(),\n styles: z.array(z.string()).optional(),\n thumb: urlOrEmptySchema().optional(),\n title: z.string(),\n tracklist: z\n .array(\n z.object({\n duration: z.string().optional(),\n position: z.string(),\n title: z.string(),\n type_: z.string().optional(),\n extraartists: z.array(ArtistBasicSchema).optional(),\n }),\n )\n .optional(),\n uri: urlOrEmptySchema().optional(),\n videos: z\n .array(\n z.object({\n description: z.string().nullable().optional(),\n duration: z.number().int().optional(),\n embed: z.boolean().optional(),\n title: z.string().optional(),\n uri: urlOrEmptySchema().optional(),\n }),\n )\n .optional(),\n year: z.number(),\n});\n\n/**\n * Schema for a release_id parameter\n */\nexport const ReleaseIdParamSchema = z.object({\n release_id: z.number().min(1, 'The release_id must be non-zero'),\n});\n\n/**\n * Schema for release parameters\n */\nexport const ReleaseParamsSchema = ReleaseIdParamSchema.extend({\n curr_abbr: CurrencyCodeSchema.optional(),\n});\n\n/**\n * Schema for release rating\n */\nexport const ReleaseRatingSchema = UsernameInputSchema.merge(ReleaseIdParamSchema).extend({\n rating: z.number(),\n});\n\n/**\n * Schema for release rating community\n */\nexport const ReleaseRatingCommunitySchema = ReleaseIdParamSchema.extend({\n rating: z.object({\n average: z.number(),\n count: z.number().int(),\n }),\n});\n\n/**\n * Schema for release rating parameters\n */\nexport const ReleaseRatingParamsSchema = UsernameInputSchema.merge(ReleaseIdParamSchema);\n\n/**\n * Schema for release rating edit parameters\n */\nexport const ReleaseRatingEditParamsSchema = ReleaseRatingParamsSchema.extend({\n rating: z\n .number()\n .int()\n .min(1, 'The rating must be at least 1')\n .max(5, 'The rating must be at most 5'),\n});\n\n/**\n * TypeScript type for basic release information\n */\nexport type BasicInformation = z.infer<typeof BasicInformationSchema>;\n\n/**\n * TypeScript type for a complete release\n */\nexport type Release = z.infer<typeof ReleaseSchema>;\n\n/**\n * TypeScript type for a release format\n */\nexport type ReleaseFormat = z.infer<typeof ReleaseFormatSchema>;\n\n/**\n * TypeScript type for a release_id parameter\n */\nexport type ReleaseIdParam = z.infer<typeof ReleaseIdParamSchema>;\n\n/**\n * TypeScript type for release parameters\n */\nexport type ReleaseParams = z.infer<typeof ReleaseParamsSchema>;\n\n/**\n * TypeScript type for release rating\n */\nexport type ReleaseRating = z.infer<typeof ReleaseRatingSchema>;\n\n/**\n * TypeScript type for release rating community\n */\nexport type ReleaseRatingCommunity = z.infer<typeof ReleaseRatingCommunitySchema>;\n\n/**\n * TypeScript type for release rating parameters\n */\nexport type ReleaseRatingParams = z.infer<typeof ReleaseRatingParamsSchema>;\n\n/**\n * TypeScript type for release rating edit parameters\n */\nexport type ReleaseRatingEditParams = z.infer<typeof ReleaseRatingEditParamsSchema>;\n","import { z } from 'zod';\nimport { urlOrEmptySchema } from '../utils.js';\nimport { ArtistBasicSchema } from './artist.js';\nimport {\n FilteredResponseSchema,\n PaginatedResponseSchema,\n QueryParamsSchema,\n StatusSchema,\n} from './common.js';\nimport { ReleaseSchema } from './release.js';\n\n/**\n * Schema for a master release ID parameter\n */\nexport const MasterReleaseIdParamSchema = z.object({\n master_id: z.number().int(),\n});\n\n/**\n * Schema for a master release versions parameter\n */\nexport const MasterReleaseVersionsParamSchema = MasterReleaseIdParamSchema.extend({\n format: z.string().optional(),\n label: z.string().optional(),\n released: z.string().optional(),\n country: z.string().optional(),\n}).merge(QueryParamsSchema(['released', 'title', 'format', 'label', 'catno', 'country']));\n\n/**\n * Schema for a master release\n * Extends the base ReleaseSchema with master-specific fields\n */\nexport const MasterReleaseSchema = ReleaseSchema.extend({\n main_release: z.number(),\n most_recent_release: z.number(),\n versions_url: urlOrEmptySchema(),\n main_release_url: urlOrEmptySchema(),\n most_recent_release_url: urlOrEmptySchema(),\n tracklist: z\n .array(\n z.object({\n position: z.string(),\n type_: z.string().optional(),\n title: z.string(),\n duration: z.string().optional(),\n extraartists: z.array(ArtistBasicSchema).optional(),\n }),\n )\n .optional(),\n artists: z.array(\n ArtistBasicSchema.extend({\n thumbnail_url: urlOrEmptySchema().optional(),\n }),\n ),\n});\n\nconst MasterReleaseVersionItemSchema = z.object({\n id: z.number().int(),\n label: z.string(),\n country: z.string(),\n title: z.string(),\n major_formats: z.array(z.string()),\n format: z.string(),\n catno: z.string(),\n released: z.string(),\n status: StatusSchema,\n resource_url: urlOrEmptySchema(),\n thumb: urlOrEmptySchema().optional(),\n stats: z.object({\n community: z\n .object({\n in_wantlist: z.number().int(),\n in_collection: z.number().int(),\n })\n .optional(),\n user: z\n .object({\n in_wantlist: z.number().int(),\n in_collection: z.number().int(),\n })\n .optional(),\n }),\n});\n\nexport const MasterReleaseVersionsResponseSchema = z.object({\n ...PaginatedResponseSchema(MasterReleaseVersionItemSchema, 'versions').shape,\n ...FilteredResponseSchema.shape,\n});\n\n/**\n * TypeScript type for a master release\n */\nexport type MasterRelease = z.infer<typeof MasterReleaseSchema>;\n\n/**\n * TypeScript type for a master release ID parameter\n */\nexport type MasterReleaseIdParam = z.infer<typeof MasterReleaseIdParamSchema>;\n\n/**\n * TypeScript type for a master release versions parameter\n */\nexport type MasterReleaseVersionsParam = z.infer<typeof MasterReleaseVersionsParamSchema>;\n\n/**\n * TypeScript type for a master release versions response\n */\nexport type MasterReleaseVersionsResponse = z.infer<typeof MasterReleaseVersionsResponseSchema>;\n","import { isDiscogsError } from '../errors.js';\nimport {\n MasterReleaseSchema,\n MasterReleaseVersionsResponseSchema,\n type MasterRelease,\n type MasterReleaseIdParam,\n type MasterReleaseVersionsParam,\n type MasterReleaseVersionsResponse,\n} from '../types/master.js';\nimport { DiscogsService } from './index.js';\n\n/**\n * Service for Discogs Master Release-related operations\n */\nexport class MasterReleaseService extends DiscogsService {\n constructor() {\n super('/masters');\n }\n\n /**\n * Get a master release\n *\n * @param params - Parameters containing the master release ID\n * @returns {MasterRelease} The master release information\n * @throws {DiscogsResourceNotFoundError} If the master release cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async get({ master_id }: MasterReleaseIdParam): Promise<MasterRelease> {\n try {\n const response = await this.request<MasterRelease>(`/${master_id}`);\n\n const validatedResponse = MasterReleaseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get master release: ${String(error)}`);\n }\n }\n\n /**\n * Retrieves a list of all Releases that are versions of this master\n *\n * @param params - Parameters containing the master release ID and optional query parameters\n * @returns {MasterReleaseVersionsResponse} The master release versions information\n * @throws {DiscogsResourceNotFoundError} If the master release versions cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async getVersions({\n master_id,\n ...options\n }: MasterReleaseVersionsParam): Promise<MasterReleaseVersionsResponse> {\n try {\n const response = await this.request<MasterReleaseVersionsResponse>(`/${master_id}/versions`, {\n params: options,\n });\n\n const validatedResponse = MasterReleaseVersionsResponseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get master release versions: ${String(error)}`);\n }\n }\n}\n","import { isDiscogsError } from '../errors.js';\nimport {\n type Release,\n type ReleaseIdParam,\n type ReleaseParams,\n type ReleaseRating,\n type ReleaseRatingCommunity,\n ReleaseRatingCommunitySchema,\n type ReleaseRatingEditParams,\n type ReleaseRatingParams,\n ReleaseRatingSchema,\n ReleaseSchema,\n} from '../types/release.js';\nimport { DiscogsService } from './index.js';\n\n/**\n * Service for Discogs Release-related operations\n */\nexport class ReleaseService extends DiscogsService {\n constructor() {\n super('/releases');\n }\n\n /**\n * Deletes the release's rating for a given user\n *\n * @param params - Parameters for the request\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to delete a release rating of another user\n * @throws {DiscogsResourceNotFoundError} If the release or user cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async deleteRatingByUser({ username, release_id }: ReleaseRatingParams): Promise<void> {\n try {\n await this.request<void>(`/${release_id}/rating/${username}`, {\n method: 'DELETE',\n });\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to delete release rating: ${String(error)}`);\n }\n }\n\n /**\n * Updates the release's rating for a given user\n *\n * @param params - Parameters for the request\n * @returns {ReleaseRating} The updated release rating\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to edit a release rating of another user\n * @throws {DiscogsResourceNotFoundError} If the release or user cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async editRatingByUser({\n username,\n release_id,\n rating,\n }: ReleaseRatingEditParams): Promise<ReleaseRating> {\n try {\n const response = await this.request<ReleaseRating>(`/${release_id}/rating/${username}`, {\n method: 'PUT',\n body: { rating },\n });\n\n const validatedResponse = ReleaseRatingSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to edit release rating: ${String(error)}`);\n }\n }\n\n /**\n * Get a release\n *\n * @param params - Parameters for the request\n * @returns {Release} The release information\n * @throws {DiscogsResourceNotFoundError} If the release cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async get({ release_id, ...options }: ReleaseParams): Promise<Release> {\n try {\n const response = await this.request<Release>(`/${release_id}`, {\n params: options,\n });\n\n const validatedResponse = ReleaseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n // If it's already a Discogs error, just rethrow it\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For validation errors or other unexpected errors, wrap them\n throw new Error(`Failed to get release: ${String(error)}`);\n }\n }\n\n /**\n * Retrieves the community release rating average and count\n *\n * @param params - Parameters for the request\n * @returns {ReleaseRatingCommunity} The release community rating\n * @throws {DiscogsResourceNotFoundError} If the release cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async getCommunityRating({ release_id }: ReleaseIdParam): Promise<ReleaseRatingCommunity> {\n try {\n const response = await this.request<ReleaseRatingCommunity>(`/${release_id}/rating`);\n\n const validatedResponse = ReleaseRatingCommunitySchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get release community rating: ${String(error)}`);\n }\n }\n\n /**\n * Retrieves the release's rating for a given user\n *\n * @param params - Parameters for the request\n * @returns {ReleaseRating} The release rating\n * @throws {DiscogsResourceNotFoundError} If the release or user cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async getRatingByUser({ username, release_id }: ReleaseRatingParams): Promise<ReleaseRating> {\n try {\n const response = await this.request<ReleaseRating>(`/${release_id}/rating/${username}`);\n\n const validatedResponse = ReleaseRatingSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get release rating: ${String(error)}`);\n }\n }\n}\n","import { FastMCP, Tool } from 'fastmcp';\nimport { formatDiscogsError } from '../errors.js';\nimport { ArtistService } from '../services/artist.js';\nimport { DatabaseService } from '../services/database.js';\nimport { LabelService } from '../services/label.js';\nimport { MasterReleaseService } from '../services/master.js';\nimport { ReleaseService } from '../services/release.js';\nimport { ArtistIdParamSchema, ArtistReleasesParamsSchema } from '../types/artist.js';\nimport { FastMCPSessionAuth } from '../types/common.js';\nimport { SearchParamsSchema } from '../types/database.js';\nimport { LabelIdParamSchema, LabelReleasesParamsSchema } from '../types/label.js';\nimport { MasterReleaseIdParamSchema, MasterReleaseVersionsParamSchema } from '../types/master.js';\nimport {\n ReleaseIdParamSchema,\n ReleaseParamsSchema,\n ReleaseRatingEditParamsSchema,\n ReleaseRatingParamsSchema,\n} from '../types/release.js';\n\n/**\n * MCP tool for deleting a release rating\n */\nexport const deleteReleaseRatingTool: Tool<FastMCPSessionAuth, typeof ReleaseRatingParamsSchema> = {\n name: 'delete_release_rating',\n description: `Deletes the release's rating for a given user`,\n parameters: ReleaseRatingParamsSchema,\n execute: async (args) => {\n try {\n const releaseService = new ReleaseService();\n await releaseService.deleteRatingByUser(args);\n\n return 'Release rating deleted successfully';\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for editing a release rating\n */\nexport const editReleaseRatingTool: Tool<FastMCPSessionAuth, typeof ReleaseRatingEditParamsSchema> =\n {\n name: 'edit_release_rating',\n description: `Updates the release's rating for a given user`,\n parameters: ReleaseRatingEditParamsSchema,\n execute: async (args) => {\n try {\n const releaseService = new ReleaseService();\n const releaseRating = await releaseService.editRatingByUser(args);\n\n return JSON.stringify(releaseRating);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n };\n\n/**\n * MCP tool for fetching a Discogs artist\n */\nexport const getArtistTool: Tool<FastMCPSessionAuth, typeof ArtistIdParamSchema> = {\n name: 'get_artist',\n description: 'Get an artist',\n parameters: ArtistIdParamSchema,\n execute: async (args) => {\n try {\n const artistService = new ArtistService();\n const artist = await artistService.get(args);\n\n return JSON.stringify(artist);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs artist releases\n */\nexport const getArtistReleasesTool: Tool<FastMCPSessionAuth, typeof ArtistReleasesParamsSchema> = {\n name: 'get_artist_releases',\n description: `Get an artist's releases`,\n parameters: ArtistReleasesParamsSchema,\n execute: async (args) => {\n try {\n const artistService = new ArtistService();\n const artistReleases = await artistService.getReleases(args);\n\n return JSON.stringify(artistReleases);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs label\n */\nexport const getLabelTool: Tool<FastMCPSessionAuth, typeof LabelIdParamSchema> = {\n name: 'get_label',\n description: 'Get a label',\n parameters: LabelIdParamSchema,\n execute: async (args) => {\n try {\n const labelService = new LabelService();\n const label = await labelService.get(args);\n\n return JSON.stringify(label);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs label releases\n */\nexport const getLabelReleasesTool: Tool<FastMCPSessionAuth, typeof LabelReleasesParamsSchema> = {\n name: 'get_label_releases',\n description: 'Returns a list of Releases associated with the label',\n parameters: LabelReleasesParamsSchema,\n execute: async (args) => {\n try {\n const labelService = new LabelService();\n const labelReleases = await labelService.getReleases(args);\n\n return JSON.stringify(labelReleases);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs master release\n */\nexport const getMasterReleaseTool: Tool<FastMCPSessionAuth, typeof MasterReleaseIdParamSchema> = {\n name: 'get_master_release',\n description: 'Get a master release',\n parameters: MasterReleaseIdParamSchema,\n execute: async (args) => {\n try {\n const masterReleaseService = new MasterReleaseService();\n const masterRelease = await masterReleaseService.get(args);\n\n return JSON.stringify(masterRelease);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching Discogs master release versions\n */\nexport const getMasterReleaseVersionsTool: Tool<\n FastMCPSessionAuth,\n typeof MasterReleaseVersionsParamSchema\n> = {\n name: 'get_master_release_versions',\n description: 'Retrieves a list of all Releases that are versions of this master',\n parameters: MasterReleaseVersionsParamSchema,\n execute: async (args) => {\n try {\n const masterReleaseService = new MasterReleaseService();\n const masterReleaseVersions = await masterReleaseService.getVersions(args);\n\n return JSON.stringify(masterReleaseVersions);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs release\n */\nexport const getReleaseTool: Tool<FastMCPSessionAuth, typeof ReleaseParamsSchema> = {\n name: 'get_release',\n description: 'Get a release',\n parameters: ReleaseParamsSchema,\n execute: async (args) => {\n try {\n const releaseService = new ReleaseService();\n const release = await releaseService.get(args);\n\n return JSON.stringify(release);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs release community rating\n */\nexport const getReleaseCommunityRatingTool: Tool<FastMCPSessionAuth, typeof ReleaseIdParamSchema> =\n {\n name: 'get_release_community_rating',\n description: 'Retrieves the release community rating average and count',\n parameters: ReleaseIdParamSchema,\n execute: async (args) => {\n try {\n const releaseService = new ReleaseService();\n const releaseRating = await releaseService.getCommunityRating(args);\n\n return JSON.stringify(releaseRating);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n };\n\n/**\n * MCP tool for fetching a Discogs release rating by user\n */\nexport const getReleaseRatingTool: Tool<FastMCPSessionAuth, typeof ReleaseRatingParamsSchema> = {\n name: 'get_release_rating_by_user',\n description: `Retrieves the release's rating for a given user`,\n parameters: ReleaseRatingParamsSchema,\n execute: async (args) => {\n try {\n const releaseService = new ReleaseService();\n const releaseRating = await releaseService.getRatingByUser(args);\n\n return JSON.stringify(releaseRating);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for searching the Discogs database\n */\nexport const searchTool: Tool<FastMCPSessionAuth, typeof SearchParamsSchema> = {\n name: 'search',\n description: 'Issue a search query to the Discogs database',\n parameters: SearchParamsSchema,\n execute: async (args) => {\n try {\n const databaseService = new DatabaseService();\n const searchResults = await databaseService.search(args);\n\n return JSON.stringify(searchResults);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\nexport function registerDatabaseTools(server: FastMCP): void {\n server.addTool(getReleaseTool);\n server.addTool(getReleaseRatingTool);\n server.addTool(editReleaseRatingTool);\n server.addTool(deleteReleaseRatingTool);\n server.addTool(getReleaseCommunityRatingTool);\n server.addTool(getMasterReleaseTool);\n server.addTool(getMasterReleaseVersionsTool);\n server.addTool(getArtistTool);\n server.addTool(getArtistReleasesTool);\n server.addTool(getLabelTool);\n server.addTool(getLabelReleasesTool);\n server.addTool(searchTool);\n}\n","import { z } from 'zod';\nimport { urlOrEmptySchema } from '../utils.js';\nimport { PaginatedResponseSchema } from './common.js';\n\nexport const InventoryIdParamSchema = z.object({\n id: z.number(),\n});\n\nexport const InventoryExportItemSchema = z.object({\n status: z.string(),\n created_ts: z.string().nullable(),\n url: urlOrEmptySchema(),\n finished_ts: z.string().nullable(),\n download_url: urlOrEmptySchema(),\n filename: z.string(),\n id: z.number(),\n});\n\nexport const InventoryExportsResponseSchema = PaginatedResponseSchema(\n InventoryExportItemSchema,\n 'items',\n);\n\nexport type InventoryIdParam = z.infer<typeof InventoryIdParamSchema>;\nexport type InventoryExportItem = z.infer<typeof InventoryExportItemSchema>;\nexport type InventoryExportsResponse = z.infer<typeof InventoryExportsResponseSchema>;\n","import { isDiscogsError } from '../errors.js';\nimport {\n type InventoryExportItem,\n InventoryExportItemSchema,\n type InventoryExportsResponse,\n InventoryExportsResponseSchema,\n type InventoryIdParam,\n} from '../types/inventory.js';\nimport { DiscogsService } from './index.js';\n\nexport class InventoryService extends DiscogsService {\n constructor() {\n super('/inventory');\n }\n\n /**\n * Download an inventory export as a CSV\n *\n * @param {InventoryIdParam} params - The parameters for the request\n * @returns {string} The inventory export as a CSV\n * @throws {DiscogsAuthenticationError} If the request is not authenticated\n * @throws {DiscogsResourceNotFoundError} If the inventory export does not exist\n * @throws {Error} If there's an unexpected error\n */\n async downloadExport({ id }: InventoryIdParam): Promise<string> {\n try {\n const response = await this.request<string>(`/export/${id}/download`);\n return response;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n throw new Error(`Failed to download inventory export: ${String(error)}`);\n }\n }\n\n /**\n * Request an export of your inventory as a CSV\n *\n * @returns {void}\n * @throws {DiscogsAuthenticationError} If the request is not authenticated\n * @throws {Error} If there's an unexpected error\n */\n async export(): Promise<void> {\n try {\n await this.request<void>('/export', {\n method: 'POST',\n });\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n throw new Error(`Failed to export inventory: ${String(error)}`);\n }\n }\n\n /**\n * Get details about an inventory export\n *\n * @param {InventoryIdParam} params - The parameters for the request\n * @returns {InventoryExportItem} The inventory export item\n * @throws {DiscogsAuthenticationError} If the request is not authenticated\n * @throws {DiscogsResourceNotFoundError} If the inventory export does not exist\n * @throws {Error} If there's an unexpected error\n */\n async getExport({ id }: InventoryIdParam): Promise<InventoryExportItem> {\n try {\n const response = await this.request<InventoryExportItem>(`/export/${id}`);\n const validatedResponse = InventoryExportItemSchema.parse(response);\n\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n throw new Error(`Failed to get inventory export: ${String(error)}`);\n }\n }\n\n /**\n * Get a list of all recent exports of your inventory\n *\n * @returns {InventoryExportsResponse} The inventory exports\n * @throws {DiscogsAuthenticationError} If the request is not authenticated\n * @throws {Error} If there's an unexpected error\n */\n async getExports(): Promise<InventoryExportsResponse> {\n try {\n const response = await this.request<InventoryExportsResponse>('/export');\n\n const validatedResponse = InventoryExportsResponseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n throw new Error(`Failed to get inventory exports: ${String(error)}`);\n }\n }\n}\n","import type { FastMCP, Tool, ToolParameters } from 'fastmcp';\nimport { z } from 'zod';\nimport { formatDiscogsError } from '../errors.js';\nimport { InventoryService } from '../services/inventory.js';\nimport { FastMCPSessionAuth } from '../types/common.js';\nimport { InventoryIdParamSchema } from '../types/inventory.js';\n\n/**\n * MCP tool for downloading an inventory export as a CSV\n */\nexport const downloadInventoryExportTool: Tool<FastMCPSessionAuth, typeof InventoryIdParamSchema> =\n {\n name: 'download_inventory_export',\n description: 'Download an inventory export as a CSV',\n parameters: InventoryIdParamSchema,\n execute: async (args) => {\n try {\n const inventoryService = new InventoryService();\n const csv = await inventoryService.downloadExport(args);\n\n return csv;\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n };\n\n/**\n * MCP tool for getting a specific inventory export by ID\n */\nexport const getInventoryExportTool: Tool<FastMCPSessionAuth, typeof InventoryIdParamSchema> = {\n name: 'get_inventory_export',\n description: 'Get details about an inventory export',\n parameters: InventoryIdParamSchema,\n execute: async (args) => {\n try {\n const inventoryService = new InventoryService();\n const exportItem = await inventoryService.getExport(args);\n\n return JSON.stringify(exportItem);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for getting a list of inventory exports\n */\nexport const getInventoryExportsTool: Tool<FastMCPSessionAuth, ToolParameters> = {\n name: 'get_inventory_exports',\n description: 'Get a list of all recent exports of your inventory',\n parameters: z.object({}),\n execute: async () => {\n try {\n const inventoryService = new InventoryService();\n const exports = await inventoryService.getExports();\n\n return JSON.stringify(exports);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for exporting your inventory as a CSV\n */\nexport const inventoryExportTool: Tool<FastMCPSessionAuth, ToolParameters> = {\n name: 'inventory_export',\n description: 'Request an export of your inventory as a CSV',\n parameters: z.object({}),\n execute: async () => {\n try {\n const inventoryService = new InventoryService();\n await inventoryService.export();\n\n return 'Inventory export requested';\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\nexport function registerInventoryExportTool(server: FastMCP): void {\n server.addTool(inventoryExportTool);\n server.addTool(getInventoryExportsTool);\n server.addTool(getInventoryExportTool);\n server.addTool(downloadInventoryExportTool);\n}\n","import { z } from 'zod';\nimport { urlOrEmptySchema } from '../utils.js';\nimport {\n CurrencyCodeSchema,\n ImageSchema,\n PaginatedResponseSchema,\n QueryParamsSchema,\n} from './common.js';\n\nconst ConditionSchema = z.enum([\n 'Mint (M)',\n 'Near Mint (NM or M-)',\n 'Very Good Plus (VG+)',\n 'Very Good (VG)',\n 'Good Plus (G+)',\n 'Good (G)',\n 'Fair (F)',\n 'Poor (P)',\n]);\n\nconst SleeveConditionSchema = z.enum([\n ...ConditionSchema.options,\n 'Generic',\n 'Not Graded',\n 'No Cover',\n]);\n\nconst OrderStatusSchema = z.enum([\n 'New Order',\n 'Buyer Contacted',\n 'Invoice Sent',\n 'Payment Pending',\n 'Payment Received',\n 'Shipped',\n 'Refund Sent',\n 'Cancelled (Non-Paying Buyer)',\n 'Cancelled (Item Unavailable)',\n `Cancelled (Per Buyer's Request)`,\n]);\n\nconst ListingReleaseSchema = z.object({\n catalog_number: z.string().optional(),\n resource_url: urlOrEmptySchema(),\n year: z.number(),\n id: z.number().int(),\n description: z.string(),\n images: z.array(ImageSchema).optional(),\n artist: z.string(),\n title: z.string(),\n format: z.string(),\n thumbnail: urlOrEmptySchema(),\n stats: z.object({\n community: z.object({\n in_wantlist: z.number().int(),\n in_collection: z.number().int(),\n }),\n user: z\n .object({\n in_wantlist: z.number().int(),\n in_collection: z.number().int(),\n })\n .optional(),\n }),\n});\n\nexport const PriceSchema = z.object({\n currency: CurrencyCodeSchema.optional(),\n value: z.number().optional(),\n});\n\nexport const OriginalPriceSchema = z.object({\n curr_abbr: CurrencyCodeSchema.optional(),\n curr_id: z.number().optional(),\n formatted: z.string().optional(),\n value: z.number().optional(),\n});\n\nexport const OrderMessageSchema = z.object({\n timestamp: z.string().optional(),\n message: z.string(),\n type: z.string().optional(),\n order: z.object({\n id: z.number(),\n resource_url: urlOrEmptySchema(),\n }),\n subject: z.string().optional(),\n refund: z\n .object({\n amount: z.number(),\n order: z.object({\n id: z.number(),\n resource_url: urlOrEmptySchema(),\n }),\n })\n .optional(),\n from: z\n .object({\n id: z.number().optional(),\n resource_url: urlOrEmptySchema(),\n username: z.string(),\n avatar_url: urlOrEmptySchema().optional(),\n })\n .optional(),\n status_id: z.number().optional(),\n actor: z\n .object({\n username: z.string(),\n resource_url: urlOrEmptySchema(),\n })\n .optional(),\n original: z.number().optional(),\n new: z.number().optional(),\n});\n\nexport const SaleStatusSchema = z.enum(['For Sale', 'Expired', 'Draft', 'Pending']);\n\n/**\n * The listing schema\n */\nexport const ListingSchema = z.object({\n id: z.number(),\n resource_url: z.string().url(),\n uri: z.string().url(),\n status: SaleStatusSchema,\n condition: z.string(),\n sleeve_condition: z.string(),\n comments: z.string().optional(),\n ships_from: z.string(),\n posted: z.string(),\n allow_offers: z.boolean(),\n offer_submitted: z.boolean().optional(),\n audio: z.boolean(),\n price: PriceSchema,\n original_price: OriginalPriceSchema,\n shipping_price: PriceSchema.optional(),\n original_shipping_price: OriginalPriceSchema.optional(),\n seller: z.object({\n id: z.number(),\n username: z.string(),\n resource_url: urlOrEmptySchema().optional(),\n avatar_url: urlOrEmptySchema().optional(),\n stats: z.object({\n rating: z.string(),\n stars: z.number(),\n total: z.number(),\n }),\n min_order_total: z.number(),\n html_url: urlOrEmptySchema(),\n uid: z.number(),\n url: urlOrEmptySchema(),\n payment: z.string(),\n shipping: z.string(),\n }),\n release: ListingReleaseSchema,\n});\n\n/**\n * The listing ID parameter schema\n */\nexport const ListingIdParamSchema = z.object({\n listing_id: z.number().int(),\n});\n\n/**\n * The listing get parameters schema\n */\nexport const ListingGetParamsSchema = ListingIdParamSchema.extend({\n curr_abbr: CurrencyCodeSchema.optional(),\n});\n\nexport const ListingNewParamsSchema = z.object({\n release_id: z.number().int(),\n condition: ConditionSchema,\n sleeve_condition: SleeveConditionSchema.optional(),\n price: z.number(),\n comments: z.string().optional(),\n allow_offers: z.boolean().optional(),\n status: SaleStatusSchema,\n external_id: z.string().optional(),\n location: z.string().optional(),\n weight: z.number().optional(),\n format_quantity: z.number().optional(),\n});\n\nexport const ListingNewResponseSchema = z.object({\n listing_id: z.number().int(),\n resource_url: z.string().url(),\n});\n\nexport const ListingUpdateParamsSchema = ListingIdParamSchema.merge(ListingNewParamsSchema);\n\nexport const OrderIdParamSchema = z.object({\n order_id: z.number(),\n});\n\nexport const OrderCreateMessageParamsSchema = OrderIdParamSchema.extend({\n message: z.string().optional(),\n status: OrderStatusSchema.optional(),\n});\n\nexport const OrderEditParamsSchema = OrderIdParamSchema.extend({\n status: OrderStatusSchema.optional(),\n shipping: z.number().optional(),\n});\n\nexport const OrderMessagesParamsSchema = QueryParamsSchema().merge(OrderIdParamSchema);\n\nexport const OrderMessagesResponseSchema = PaginatedResponseSchema(OrderMessageSchema, 'messages');\n\nexport const OrdersParamsSchema = z\n .object({\n status: OrderStatusSchema.optional(),\n created_after: z.string().optional(),\n created_before: z.string().optional(),\n archived: z.boolean().optional(),\n })\n .merge(QueryParamsSchema(['id', 'buyer', 'created', 'status', 'last_activity'] as const));\n\nexport const OrderResponseSchema = z.object({\n id: z.number(),\n resource_url: urlOrEmptySchema(),\n messages_url: urlOrEmptySchema(),\n uri: urlOrEmptySchema(),\n status: OrderStatusSchema,\n next_status: z.array(OrderStatusSchema),\n fee: PriceSchema,\n created: z.string(),\n items: z.array(\n z.object({\n release: z.object({\n id: z.number(),\n description: z.string().optional(),\n }),\n price: PriceSchema,\n media_condition: ConditionSchema,\n sleeve_condition: SleeveConditionSchema.optional(),\n id: z.number(),\n }),\n ),\n shipping: z.object({\n currency: CurrencyCodeSchema,\n method: z.string(),\n value: z.number(),\n }),\n shipping_address: z.string(),\n address_instructions: z.string().optional(),\n archived: z.boolean().optional(),\n seller: z.object({\n id: z.number(),\n username: z.string(),\n resource_url: urlOrEmptySchema().optional(),\n }),\n last_activity: z.string().optional(),\n buyer: z.object({\n id: z.number(),\n username: z.string(),\n resource_url: urlOrEmptySchema().optional(),\n }),\n total: PriceSchema,\n});\n\nexport const OrdersResponseSchema = PaginatedResponseSchema(OrderResponseSchema, 'orders');\n\nexport const ReleaseStatsResponseSchema = z.object({\n lowest_price: PriceSchema.nullable().optional(),\n num_for_sale: z.number().nullable().optional(),\n blocked_from_sale: z.boolean(),\n});\n\n/**\n * The listing ID parameter type\n */\nexport type ListingIdParam = z.infer<typeof ListingIdParamSchema>;\n\n/**\n * The listing get parameters type\n */\nexport type ListingGetParams = z.infer<typeof ListingGetParamsSchema>;\n\n/**\n * The listing new parameters type\n */\nexport type ListingNewParams = z.infer<typeof ListingNewParamsSchema>;\n\n/**\n * The listing new response type\n */\nexport type ListingNewResponse = z.infer<typeof ListingNewResponseSchema>;\n\n/**\n * The listing update parameters type\n */\nexport type ListingUpdateParams = z.infer<typeof ListingUpdateParamsSchema>;\n\n/**\n * The listing schema\n */\nexport type Listing = z.infer<typeof ListingSchema>;\n\n/**\n * The order ID parameter type\n */\nexport type OrderIdParam = z.infer<typeof OrderIdParamSchema>;\n\n/**\n * The order create message parameters type\n */\nexport type OrderCreateMessageParams = z.infer<typeof OrderCreateMessageParamsSchema>;\n\n/**\n * The order edit parameters type\n */\nexport type OrderEditParams = z.infer<typeof OrderEditParamsSchema>;\n\n/**\n * The order messages parameters type\n */\nexport type OrderMessagesParams = z.infer<typeof OrderMessagesParamsSchema>;\n\n/**\n * The order message type\n */\nexport type OrderMessageResponse = z.infer<typeof OrderMessageSchema>;\n\n/**\n * The order messages response type\n */\nexport type OrderMessagesResponse = z.infer<typeof OrderMessagesResponseSchema>;\n\n/**\n * The orders parameters type\n */\nexport type OrdersParams = z.infer<typeof OrdersParamsSchema>;\n\n/**\n * The order response type\n */\nexport type OrderResponse = z.infer<typeof OrderResponseSchema>;\n\n/**\n * The orders response type\n */\nexport type OrdersResponse = z.infer<typeof OrdersResponseSchema>;\n\n/**\n * The release stats response type\n */\nexport type ReleaseStatsResponse = z.infer<typeof ReleaseStatsResponseSchema>;\n","import { isDiscogsError } from '../errors.js';\nimport {\n type Listing,\n type ListingGetParams,\n type ListingIdParam,\n type ListingNewParams,\n type ListingNewResponse,\n ListingNewResponseSchema,\n ListingSchema,\n type ListingUpdateParams,\n OrderCreateMessageParams,\n type OrderEditParams,\n type OrderIdParam,\n type OrderMessageResponse,\n OrderMessageSchema,\n type OrderMessagesParams,\n type OrderMessagesResponse,\n OrderMessagesResponseSchema,\n type OrderResponse,\n OrderResponseSchema,\n type OrdersParams,\n type OrdersResponse,\n OrdersResponseSchema,\n type ReleaseStatsResponse,\n ReleaseStatsResponseSchema,\n} from '../types/marketplace.js';\nimport type { ReleaseParams } from '../types/release.js';\nimport { DiscogsService } from './index.js';\n\nexport class MarketplaceService extends DiscogsService {\n constructor() {\n super('/marketplace');\n }\n\n /**\n * Create a new marketplace listing\n *\n * @param params - Parameters containing the listing data\n * @returns {ListingNewResponse} The listing information\n * @throws {DiscogsAuthenticationError} If the user is not authenticated\n * @throws {DiscogsPermissionError} If the user does not have permission to create a listing\n * @throws {Error} If there's an unexpected error\n */\n async createListing(params: ListingNewParams): Promise<ListingNewResponse> {\n try {\n const response = await this.request<ListingNewResponse>(`/listings`, {\n method: 'POST',\n body: params,\n });\n\n const validatedResponse = ListingNewResponseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to create listing: ${String(error)}`);\n }\n }\n\n /**\n * Adds a new message to the order's message log\n *\n * @param params - Parameters containing the order ID and the message data\n * @returns {OrderMessageResponse} The order message information\n * @throws {DiscogsAuthenticationError} If the user is not authenticated\n * @throws {DiscogsPermissionError} If the user does not have permission to create a message\n * @throws {DiscogsResourceNotFoundError} If the order cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async createOrderMessage({\n order_id,\n ...body\n }: OrderCreateMessageParams): Promise<OrderMessageResponse> {\n try {\n const response = await this.request<OrderMessageResponse>(`/orders/${order_id}/messages`, {\n method: 'POST',\n body,\n });\n\n const validatedResponse = OrderMessageSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to create order message: ${String(error)}`);\n }\n }\n\n /**\n * Delete a listing from the marketplace\n *\n * @param params - Parameters containing the listing ID\n * @throws {DiscogsAuthenticationError} If the user is not authenticated\n * @throws {DiscogsPermissionError} If the user does not have permission to delete a listing\n * @throws {DiscogsResourceNotFoundError} If the listing cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async deleteListing({ listing_id }: ListingIdParam): Promise<void> {\n try {\n await this.request<void>(`/listings/${listing_id}`, {\n method: 'DELETE',\n });\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to delete listing: ${String(error)}`);\n }\n }\n\n /**\n * The Listing resource allows you to view Marketplace listings\n *\n * @param params - Parameters containing the listing ID and optional currency code\n * @returns {Listing} The listing information\n * @throws {DiscogsResourceNotFoundError} If the listing cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async getListing({ listing_id, ...options }: ListingGetParams): Promise<Listing> {\n try {\n const response = await this.request<Listing>(`/listings/${listing_id}`, {\n params: options,\n });\n\n const validatedResponse = ListingSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get listing: ${String(error)}`);\n }\n }\n\n /**\n * Get a marketplace order\n *\n * @param params - Parameters containing the order ID\n * @throws {DiscogsAuthenticationError} If the user is not authenticated\n * @throws {DiscogsPermissionError} If the user does not have permission to view the order\n * @throws {DiscogsResourceNotFoundError} If the order cannot be found\n * @throws {Error} If there's an unexpected error\n * @returns {OrderResponse} The order information\n */\n async getOrder({ order_id }: OrderIdParam): Promise<OrderResponse> {\n try {\n const response = await this.request<OrderResponse>(`/orders/${order_id}`);\n\n const validatedResponse = OrderResponseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get order: ${String(error)}`);\n }\n }\n\n /**\n * Get a list of an order's messages\n *\n * @param params - OrderMessagesParams\n * @throws {DiscogsAuthenticationError} If the user is not authenticated\n * @throws {DiscogsPermissionError} If the user does not have permission to view the order messages\n * @throws {DiscogsResourceNotFoundError} If the order cannot be found\n * @throws {Error} If there's an unexpected error\n * @returns {OrderMessagesResponse} The order messages\n */\n async getOrderMessages({\n order_id,\n ...options\n }: OrderMessagesParams): Promise<OrderMessagesResponse> {\n try {\n const response = await this.request<OrderMessagesResponse>(`/orders/${order_id}/messages`, {\n params: options,\n });\n\n const validatedResponse = OrderMessagesResponseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get order messages: ${String(error)}`);\n }\n }\n\n /**\n * Get a list of marketplace orders\n *\n * @param params - OrdersParams\n * @throws {DiscogsAuthenticationError} If the user is not authenticated\n * @throws {DiscogsPermissionError} If the user does not have permission to view the orders\n * @throws {Error} If there's an unexpected error\n * @returns {OrdersResponse} The order information\n */\n async getOrders(params: OrdersParams): Promise<OrdersResponse> {\n try {\n const response = await this.request<OrdersResponse>(`/orders`, {\n params,\n });\n\n const validatedResponse = OrdersResponseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get orders: ${String(error)}`);\n }\n }\n\n /**\n * Retrieve marketplace statistics for the provided Release ID\n *\n * @param params - Parameters containing the release ID and optional currency code\n * @throws {DiscogsResourceNotFoundError} If the release cannot be found\n * @throws {Error} If there's an unexpected error\n * @returns {ReleaseStatsResponse} The release stats\n */\n async getReleaseStats({ release_id, ...options }: ReleaseParams): Promise<ReleaseStatsResponse> {\n try {\n const response = await this.request<ReleaseStatsResponse>(`/stats/${release_id}`, {\n params: options,\n });\n\n const validatedResponse = ReleaseStatsResponseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get release stats: ${String(error)}`);\n }\n }\n\n /**\n * Edit a marketplace order\n *\n * @param params - Parameters containing the order ID and the order data\n * @throws {DiscogsAuthenticationError} If the user is not authenticated\n * @throws {DiscogsPermissionError} If the user does not have permission to edit the order\n * @throws {DiscogsResourceNotFoundError} If the order cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async editOrder({ order_id, ...body }: OrderEditParams): Promise<OrderResponse> {\n try {\n const response = await this.request<OrderResponse>(`/orders/${order_id}`, {\n method: 'POST',\n body,\n });\n\n const validatedResponse = OrderResponseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to edit order: ${String(error)}`);\n }\n }\n\n /**\n * Update a marketplace listing\n *\n * @param params - Parameters containing the listing ID and the listing data\n * @throws {DiscogsAuthenticationError} If the user is not authenticated\n * @throws {DiscogsResourceNotFoundError} If the listing cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async updateListing({ listing_id, ...body }: ListingUpdateParams): Promise<void> {\n try {\n await this.request<void>(`/listings/${listing_id}`, {\n method: 'POST',\n body,\n });\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to update listing: ${String(error)}`);\n }\n }\n}\n","import { z } from 'zod';\nimport { PaginatedResponseSchema, QueryParamsSchema, UsernameInputSchema } from '../common.js';\nimport { BasicInformationSchema, ReleaseIdParamSchema } from '../release.js';\n\n/**\n * Schema for a folder_id parameter with optional minimum value\n * @param min Optional minimum value for the folder_id\n */\nexport const FolderIdParamSchema = (min?: number) =>\n z.object({\n folder_id: z\n .number()\n .int()\n .min(min ?? 0),\n });\n\n/**\n * Schema for custom fields in a user's collection\n */\nexport const UserCollectionCustomFieldsSchema = z.object({\n fields: z.array(\n z.object({\n id: z.number().int(),\n lines: z.number().int().optional(),\n name: z.string(),\n options: z.array(z.string()).optional(),\n position: z.number().int(),\n public: z.boolean(),\n type: z.string(),\n }),\n ),\n});\n\n/**\n * Schema for a Discogs user collection custom field edit parameters\n */\nexport const UserCollectionCustomFieldEditParamsSchema = UsernameInputSchema.merge(\n FolderIdParamSchema().extend({\n value: z.string(),\n release_id: z.union([z.number(), z.string()]),\n instance_id: z.union([z.number(), z.string()]),\n field_id: z.number(),\n }),\n);\n\n/**\n * Schema for a Discogs user collection folder\n */\nexport const UserCollectionFolderSchema = z.object({\n id: z.number(),\n count: z.number(),\n name: z.string(),\n resource_url: z.string().url(),\n});\n\n/**\n * Schema for a Discogs user collection folders response\n */\nexport const UserCollectionFoldersSchema = z.object({\n folders: z.array(UserCollectionFolderSchema),\n});\n\n/**\n * Schema for a Discogs user collection folder create parameters\n */\nexport const UserCollectionFolderCreateParamsSchema = UsernameInputSchema.extend({\n name: z.string().optional(),\n});\n\nexport const UserCollectionFolderEditParamsSchema =\n UserCollectionFolderCreateParamsSchema.merge(FolderIdParamSchema());\n\n/**\n * Schema for a Discogs user collection folder get/delete parameters\n */\nexport const UserCollectionFolderParamsSchema = UsernameInputSchema.merge(FolderIdParamSchema());\n\n/**\n * Schema for a Discogs user collection folder release parameters\n */\nexport const UserCollectionFolderReleaseParamsSchema = UsernameInputSchema.merge(\n FolderIdParamSchema(1).merge(ReleaseIdParamSchema),\n);\n\n/**\n * Schema for a Discogs user collection items parameters\n */\nexport const UserCollectionItemsParamsSchema = UsernameInputSchema.merge(\n FolderIdParamSchema().merge(\n QueryParamsSchema([\n 'added',\n 'artist',\n 'catno',\n 'format',\n 'label',\n 'rating',\n 'title',\n 'year',\n ] as const),\n ),\n);\n\n/**\n * Schema for a Discogs user collection release added\n */\nexport const UserCollectionReleaseAddedSchema = z.object({\n instance_id: z.number().int(),\n resource_url: z.string().url(),\n});\n\n/**\n * Schema for a Discogs user collection release parameters\n */\nexport const UserCollectionReleaseParamsSchema = UsernameInputSchema.merge(\n ReleaseIdParamSchema.merge(QueryParamsSchema()),\n);\n\n/**\n * Schema for a Discogs user collection release deleted parameters\n */\nexport const UserCollectionReleaseDeletedParamsSchema =\n UserCollectionFolderReleaseParamsSchema.extend({\n instance_id: z.number().int(),\n });\n\n/**\n * Schema for a Discogs user collection release item\n */\nexport const UserCollectionReleaseItemSchema = z.object({\n id: z.number(),\n instance_id: z.number(),\n basic_information: BasicInformationSchema,\n date_added: z.string().optional(),\n folder_id: z.number(),\n notes: z\n .array(\n z.object({\n field_id: z.number(),\n value: z.string(),\n }),\n )\n .optional(),\n rating: z.number().int().optional(),\n});\n\n/**\n * Schema for a Discogs user collection release rating parameters\n */\nexport const UserCollectionReleaseRatingParamsSchema =\n UserCollectionReleaseDeletedParamsSchema.extend({\n rating: z.number().int().min(1).max(5).optional(),\n });\n\n/**\n * Schema for a Discogs user collection move release parameters\n */\nexport const UserCollectionMoveReleaseParamsSchema =\n UserCollectionReleaseDeletedParamsSchema.extend({\n destination_folder_id: z.number(),\n });\n\n/**\n * Schema for releases in a user's collection\n */\nexport const UserCollectionItemsByReleaseSchema = PaginatedResponseSchema(\n UserCollectionReleaseItemSchema,\n 'releases',\n);\n\n/**\n * Schema for a user's collection value statistics\n */\nexport const UserCollectionValueSchema = z.object({\n maximum: z.string(),\n median: z.string(),\n minimum: z.string(),\n});\n\n/**\n * TypeScript type for custom fields in a user's collection\n */\nexport type UserCollectionCustomFields = z.infer<typeof UserCollectionCustomFieldsSchema>;\n\n/**\n * TypeScript type for a Discogs user collection custom field edit parameters\n */\nexport type UserCollectionCustomFieldEditParams = z.infer<\n typeof UserCollectionCustomFieldEditParamsSchema\n>;\n\n/**\n * TypeScript type for a Discogs user collection folder\n */\nexport type UserCollectionFolder = z.infer<typeof UserCollectionFolderSchema>;\n\n/**\n * TypeScript type for a Discogs user collection folder create parameters\n */\nexport type UserCollectionFolderCreateParams = z.infer<\n typeof UserCollectionFolderCreateParamsSchema\n>;\n\n/**\n * TypeScript type for a Discogs user collection folder edit parameters\n */\nexport type UserCollectionFolderEditParams = z.infer<typeof UserCollectionFolderEditParamsSchema>;\n\n/**\n * TypeScript type for a Discogs user collection folder get/edit/delete parameters\n */\nexport type UserCollectionFolderParams = z.infer<typeof UserCollectionFolderParamsSchema>;\n\n/**\n * TypeScript type for a Discogs user collection folder release parameters\n */\nexport type UserCollectionFolderReleaseParams = z.infer<\n typeof UserCollectionFolderReleaseParamsSchema\n>;\n\n/**\n * TypeScript type for a Discogs user collection folders response\n */\nexport type UserCollectionFolders = z.infer<typeof UserCollectionFoldersSchema>;\n\n/**\n * TypeScript type for a Discogs user collection items parameters\n */\nexport type UserCollectionItemsParams = z.infer<typeof UserCollectionItemsParamsSchema>;\n\n/**\n * TypeScript type for a Discogs user collection release added\n */\nexport type UserCollectionReleaseAdded = z.infer<typeof UserCollectionReleaseAddedSchema>;\n\n/**\n * TypeScript type for a Discogs user collection release parameters\n */\nexport type UserCollectionReleaseParams = z.infer<typeof UserCollectionReleaseParamsSchema>;\n\n/**\n * TypeScript type for a Discogs user collection release deleted parameters\n */\nexport type UserCollectionReleaseDeletedParams = z.infer<\n typeof UserCollectionReleaseDeletedParamsSchema\n>;\n\n/**\n * TypeScript type for a Discogs user collection release item\n */\nexport type UserCollectionReleaseItem = z.infer<typeof UserCollectionReleaseItemSchema>;\n\n/**\n * TypeScript type for a Discogs user collection release rating parameters\n */\nexport type UserCollectionReleaseRatingParams = z.infer<\n typeof UserCollectionReleaseRatingParamsSchema\n>;\n\n/**\n * TypeScript type for a Discogs user collection move release parameters\n */\nexport type UserCollectionMoveReleaseParams = z.infer<typeof UserCollectionMoveReleaseParamsSchema>;\n\n/**\n * TypeScript type for a Discogs user's collection items by release\n */\nexport type UserCollectionItemsByRelease = z.infer<typeof UserCollectionItemsByReleaseSchema>;\n\n/**\n * TypeScript type for a Discogs user's collection value statistics\n */\nexport type UserCollectionValue = z.infer<typeof UserCollectionValueSchema>;\n","import { z } from 'zod';\nimport { PaginatedResponseSchema, QueryParamsSchema, UsernameInputSchema } from '../common.js';\nimport { ListingSchema, SaleStatusSchema } from '../marketplace.js';\n\nexport const UserInventoryGetParamsSchema = UsernameInputSchema.extend({\n status: SaleStatusSchema.optional(),\n}).merge(\n QueryParamsSchema([\n 'listed',\n 'price',\n 'item',\n 'artist',\n 'label',\n 'catno',\n 'audio',\n 'status',\n 'location',\n ]),\n);\n\nexport const UserInventoryResponseSchema = PaginatedResponseSchema(ListingSchema, 'listings');\n\nexport type UserInventoryGetParams = z.infer<typeof UserInventoryGetParamsSchema>;\n\nexport type UserInventoryResponse = z.infer<typeof UserInventoryResponseSchema>;\n","import { z } from 'zod';\nimport { PaginatedResponseSchema, QueryParamsSchema, UsernameInputSchema } from '../common.js';\n\n/**\n * Schema for a user's list item\n */\nexport const UserListItemSchema = z.object({\n id: z.number(),\n date_added: z.string(),\n date_changed: z.string(),\n description: z.string().optional(),\n name: z.string(),\n public: z.boolean(),\n resource_url: z.string().url(),\n uri: z.string().url(),\n});\n\n/**\n * Schema for lists query parameters\n */\nexport const UserListsParamsSchema = UsernameInputSchema.merge(QueryParamsSchema());\n\n/**\n * Schema for paginated user lists response\n */\nexport const UserListsSchema = PaginatedResponseSchema(UserListItemSchema, 'lists');\n\n/**\n * Type for a user's list item\n */\nexport type UserListItem = z.infer<typeof UserListItemSchema>;\n\n/**\n * TypeScript type for lists query parameters\n */\nexport type UserListsParams = z.infer<typeof UserListsParamsSchema>;\n\n/**\n * Type for paginated user lists response\n */\nexport type UserLists = z.infer<typeof UserListsSchema>;\n","import { z } from 'zod';\nimport { urlOrEmptySchema } from '../../utils.js';\nimport { CurrencyCodeSchema, UsernameInputSchema } from '../common.js';\n\n/**\n * Schema for a Discogs user profile\n * The email field is optional and only present when viewing your own profile\n * Some fields like num_collection, num_wantlist, and num_unread are optional\n * and may not be present in all responses\n */\nexport const UserProfileSchema = z.object({\n id: z.number(),\n resource_url: z.string().url(),\n uri: z.string().url(),\n username: z.string(),\n name: z.string(),\n home_page: z.string(),\n location: z.string(),\n profile: z.string(),\n registered: z.string(),\n rank: z.number(),\n num_pending: z.number(),\n num_for_sale: z.number(),\n num_lists: z.number(),\n releases_contributed: z.number(),\n releases_rated: z.number(),\n rating_avg: z.number(),\n inventory_url: z.string().url(),\n collection_folders_url: z.string().url(),\n collection_fields_url: z.string().url(),\n wantlist_url: z.string().url(),\n avatar_url: z.string().url(),\n curr_abbr: z.string(),\n activated: z.boolean(),\n marketplace_suspended: z.boolean(),\n banner_url: z.string(),\n buyer_rating: z.number(),\n buyer_rating_stars: z.number(),\n buyer_num_ratings: z.number(),\n seller_rating: z.number(),\n seller_rating_stars: z.number(),\n seller_num_ratings: z.number(),\n is_staff: z.boolean(),\n // Optional fields that may appear in some responses\n email: z.string().email().optional(),\n num_collection: z.number().optional(),\n num_wantlist: z.number().optional(),\n num_unread: z.number().optional(),\n});\n\n/**\n * Schema for editing a Discogs user profile\n */\nexport const UserProfileEditInputSchema = z.object({\n ...UsernameInputSchema.shape,\n name: z.string().optional(),\n home_page: urlOrEmptySchema().optional(),\n location: z.string().optional(),\n profile: z.string().optional(),\n curr_abbr: CurrencyCodeSchema.optional(),\n});\n\n/**\n * TypeScript type for a Discogs user profile\n */\nexport type UserProfile = z.infer<typeof UserProfileSchema>;\n\n/**\n * TypeScript type for a Discogs user profile edit input\n */\nexport type UserProfileEditInput = z.infer<typeof UserProfileEditInputSchema>;\n","import { z } from 'zod';\nimport { PaginatedResponseSchema, QueryParamsSchema, UsernameInputSchema } from '../common.js';\nimport { BasicInformationSchema, ReleaseIdParamSchema } from '../release.js';\n\n/**\n * Schema for wantlist query parameters\n */\nexport const UserWantlistParamsSchema = UsernameInputSchema.merge(\n QueryParamsSchema(['added', 'artist', 'label', 'rating', 'title', 'year'] as const),\n);\n\n/**\n * Schema for a wantlist item\n */\nexport const UserWantlistItemSchema = z.object({\n id: z.number(),\n basic_information: BasicInformationSchema,\n notes: z.string().optional(),\n rating: z.number().int().min(0).max(5).optional(),\n resource_url: z.string().url(),\n});\n\n/**\n * Schema for a Discogs user wantlist\n */\nexport const UserWantlistSchema = PaginatedResponseSchema(UserWantlistItemSchema, 'wants');\n\n/**\n * Schema for adding or editing a release in a user's wantlist\n */\nexport const UserWantlistItemParamsSchema = UsernameInputSchema.merge(\n ReleaseIdParamSchema.extend({\n notes: z.string().optional(),\n rating: z.number().int().min(0).max(5).optional(),\n }),\n);\n\n/**\n * TypeScript type for a Discogs user wantlist\n */\nexport type UserWantlist = z.infer<typeof UserWantlistSchema>;\n\n/**\n * TypeScript type for wantlist query parameters\n */\nexport type UserWantlistParams = z.infer<typeof UserWantlistParamsSchema>;\n\n/**\n * TypeScript type for a wantlist item\n */\nexport type UserWantlistItem = z.infer<typeof UserWantlistItemSchema>;\n\n/**\n * TypeScript type for adding or editing a release in a user's wantlist\n */\nexport type UserWantlistItemParams = z.infer<typeof UserWantlistItemParamsSchema>;\n","import { isDiscogsError } from '../../errors.js';\nimport {\n type UserInventoryGetParams,\n type UserInventoryResponse,\n UserInventoryResponseSchema,\n} from '../../types/user/index.js';\nimport { BaseUserService } from '../index.js';\n\n/**\n * Service for Discogs User Inventory operations\n */\nexport class UserInventoryService extends BaseUserService {\n /**\n * Returns the list of listings in a user's inventory\n * @param params - Parameters for the request including username and optional pagination/sorting\n * @returns {UserInventoryResponse} A paginated response containing the user's inventory\n * @throws {DiscogsResourceNotFoundError} If the username cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async get({ username, ...options }: UserInventoryGetParams): Promise<UserInventoryResponse> {\n try {\n const response = await this.request<UserInventoryResponse>(`/${username}/inventory`, {\n params: options,\n });\n\n // Validate the response using Zod schema\n const validatedResponse = UserInventoryResponseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get inventory: ${String(error)}`);\n }\n }\n}\n","import { FastMCP, Tool } from 'fastmcp';\nimport { formatDiscogsError } from '../errors.js';\nimport { MarketplaceService } from '../services/marketplace.js';\nimport { UserInventoryService } from '../services/user/inventory.js';\nimport { FastMCPSessionAuth } from '../types/common.js';\nimport {\n ListingGetParamsSchema,\n ListingIdParamSchema,\n ListingNewParamsSchema,\n ListingUpdateParamsSchema,\n OrderCreateMessageParamsSchema,\n OrderEditParamsSchema,\n OrderIdParamSchema,\n OrderMessagesParamsSchema,\n OrdersParamsSchema,\n} from '../types/marketplace.js';\nimport { ReleaseParamsSchema } from '../types/release.js';\nimport { UserInventoryGetParamsSchema } from '../types/user/index.js';\n\n/**\n * MCP tool for creating a marketplace listing\n */\nexport const createMarketplaceListingTool: Tool<FastMCPSessionAuth, typeof ListingNewParamsSchema> =\n {\n name: 'create_marketplace_listing',\n description: 'Create a new marketplace listing',\n parameters: ListingNewParamsSchema,\n execute: async (args) => {\n try {\n const marketplaceService = new MarketplaceService();\n const listing = await marketplaceService.createListing(args);\n\n return JSON.stringify(listing);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n };\n\n/**\n * MCP tool for creating a marketplace order message\n */\nexport const createMarketplaceOrderMessageTool: Tool<\n FastMCPSessionAuth,\n typeof OrderCreateMessageParamsSchema\n> = {\n name: 'create_marketplace_order_message',\n description: `Adds a new message to the order's message log`,\n parameters: OrderCreateMessageParamsSchema,\n execute: async (args) => {\n try {\n const marketplaceService = new MarketplaceService();\n const message = await marketplaceService.createOrderMessage(args);\n\n return JSON.stringify(message);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for deleting a marketplace listing\n */\nexport const deleteMarketplaceListingTool: Tool<FastMCPSessionAuth, typeof ListingIdParamSchema> = {\n name: 'delete_marketplace_listing',\n description: 'Delete a marketplace listing',\n parameters: ListingIdParamSchema,\n execute: async (args) => {\n try {\n const marketplaceService = new MarketplaceService();\n await marketplaceService.deleteListing(args);\n\n return 'Listing deleted successfully';\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for getting a marketplace listing\n */\nexport const getMarketplaceListingTool: Tool<FastMCPSessionAuth, typeof ListingGetParamsSchema> = {\n name: 'get_marketplace_listing',\n description: 'Get a listing from the marketplace',\n parameters: ListingGetParamsSchema,\n execute: async (args) => {\n try {\n const marketplaceService = new MarketplaceService();\n const listing = await marketplaceService.getListing(args);\n\n return JSON.stringify(listing);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for getting a marketplace order\n */\nexport const getMarketplaceOrderTool: Tool<FastMCPSessionAuth, typeof OrderIdParamSchema> = {\n name: 'get_marketplace_order',\n description: 'Get a marketplace order',\n parameters: OrderIdParamSchema,\n execute: async (args) => {\n try {\n const marketplaceService = new MarketplaceService();\n const order = await marketplaceService.getOrder(args);\n\n return JSON.stringify(order);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for getting a list of marketplace orders\n */\nexport const getMarketplaceOrdersTool: Tool<FastMCPSessionAuth, typeof OrdersParamsSchema> = {\n name: 'get_marketplace_orders',\n description: 'Get a list of marketplace orders',\n parameters: OrdersParamsSchema,\n execute: async (args) => {\n try {\n const marketplaceService = new MarketplaceService();\n const orders = await marketplaceService.getOrders(args);\n\n return JSON.stringify(orders);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for getting a list of order messages\n */\nexport const getMarketplaceOrderMessagesTool: Tool<\n FastMCPSessionAuth,\n typeof OrderMessagesParamsSchema\n> = {\n name: 'get_marketplace_order_messages',\n description: `Get a list of an order's messages`,\n parameters: OrderMessagesParamsSchema,\n execute: async (args) => {\n try {\n const marketplaceService = new MarketplaceService();\n const messages = await marketplaceService.getOrderMessages(args);\n\n return JSON.stringify(messages);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for getting a release stats\n */\nexport const getMarketplaceReleaseStatsTool: Tool<FastMCPSessionAuth, typeof ReleaseParamsSchema> =\n {\n name: 'get_marketplace_release_stats',\n description: 'Retrieve marketplace statistics for the provided Release ID',\n parameters: ReleaseParamsSchema,\n execute: async (args) => {\n try {\n const marketplaceService = new MarketplaceService();\n const stats = await marketplaceService.getReleaseStats(args);\n\n return JSON.stringify(stats);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n };\n\n/**\n * MCP tool for getting a user's inventory\n */\nexport const getUserInventoryTool: Tool<FastMCPSessionAuth, typeof UserInventoryGetParamsSchema> = {\n name: 'get_user_inventory',\n description: `Returns the list of listings in a user's inventory`,\n parameters: UserInventoryGetParamsSchema,\n execute: async (args) => {\n try {\n const userInventoryService = new UserInventoryService();\n const inventory = await userInventoryService.get(args);\n\n return JSON.stringify(inventory);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for editing a marketplace order\n */\nexport const editMarketplaceOrderTool: Tool<FastMCPSessionAuth, typeof OrderEditParamsSchema> = {\n name: 'edit_marketplace_order',\n description: 'Edit a marketplace order',\n parameters: OrderEditParamsSchema,\n execute: async (args) => {\n try {\n const marketplaceService = new MarketplaceService();\n const order = await marketplaceService.editOrder(args);\n\n return JSON.stringify(order);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for updating a marketplace listing\n */\nexport const updateMarketplaceListingTool: Tool<\n FastMCPSessionAuth,\n typeof ListingUpdateParamsSchema\n> = {\n name: 'update_marketplace_listing',\n description: 'Update a marketplace listing',\n parameters: ListingUpdateParamsSchema,\n execute: async (args) => {\n try {\n const marketplaceService = new MarketplaceService();\n await marketplaceService.updateListing(args);\n\n return 'Listing updated successfully';\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\nexport function registerMarketplaceTools(server: FastMCP): void {\n server.addTool(getUserInventoryTool);\n server.addTool(getMarketplaceListingTool);\n server.addTool(createMarketplaceListingTool);\n server.addTool(updateMarketplaceListingTool);\n server.addTool(deleteMarketplaceListingTool);\n server.addTool(getMarketplaceOrderTool);\n server.addTool(editMarketplaceOrderTool);\n server.addTool(getMarketplaceOrdersTool);\n server.addTool(getMarketplaceOrderMessagesTool);\n server.addTool(createMarketplaceOrderMessageTool);\n server.addTool(getMarketplaceReleaseStatsTool);\n}\n","import { type FastMCP, type Tool, imageContent } from 'fastmcp';\nimport { z } from 'zod';\nimport { formatDiscogsError } from '../errors.js';\nimport { FastMCPSessionAuth } from '../types/common.js';\n\nconst MediaParamsSchema = z.object({\n url: z.string().url(),\n});\n\n/**\n * MCP tool for fetching an image\n */\nexport const fetchImageTool: Tool<FastMCPSessionAuth, typeof MediaParamsSchema> = {\n name: 'fetch_image',\n description: 'Fetch an image by URL',\n parameters: MediaParamsSchema,\n execute: async ({ url }) => {\n try {\n return imageContent({ url });\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\nexport function registerMediaTools(server: FastMCP): void {\n server.addTool(fetchImageTool);\n}\n","import { isDiscogsError } from '../../errors.js';\nimport { UsernameInput } from '../../types/common.js';\nimport {\n type UserCollectionCustomFieldEditParams,\n type UserCollectionCustomFields,\n UserCollectionCustomFieldsSchema,\n type UserCollectionFolder,\n type UserCollectionFolderCreateParams,\n type UserCollectionFolderEditParams,\n type UserCollectionFolderParams,\n type UserCollectionFolderReleaseParams,\n type UserCollectionFolders,\n UserCollectionFolderSchema,\n UserCollectionFoldersSchema,\n type UserCollectionItemsByRelease,\n UserCollectionItemsByReleaseSchema,\n type UserCollectionItemsParams,\n type UserCollectionMoveReleaseParams,\n type UserCollectionReleaseAdded,\n UserCollectionReleaseAddedSchema,\n type UserCollectionReleaseDeletedParams,\n type UserCollectionReleaseParams,\n type UserCollectionReleaseRatingParams,\n type UserCollectionValue,\n UserCollectionValueSchema,\n} from '../../types/user/index.js';\nimport { BaseUserService } from '../index.js';\n\n/**\n * Service for Discogs User Collection operations\n */\nexport class UserCollectionService extends BaseUserService {\n /**\n * Add a release to a folder in a user's collection. The folder_id must be non-zero.\n *\n * @param params The parameters for the release addition\n * @returns {UserCollectionReleaseAdded} The added release\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to add a release to a folder of another user\n * @throws {DiscogsResourceNotFoundError} If the username, folder_id, or release_id cannot be found\n * @throws {DiscogsValidationFailedError} If the folder_id is 0\n * @throws {Error} If there's an unexpected error\n */\n async addReleaseToFolder({\n username,\n folder_id,\n release_id,\n }: UserCollectionFolderReleaseParams): Promise<UserCollectionReleaseAdded> {\n try {\n const response = await this.request<UserCollectionReleaseAdded>(\n `/${username}/collection/folders/${folder_id}/releases/${release_id}`,\n {\n method: 'POST',\n },\n );\n\n const validatedResponse = UserCollectionReleaseAddedSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to add release to folder: ${String(error)}`);\n }\n }\n\n /**\n * Create a new folder in a user's collection\n *\n * @param params The parameters for the folder creation\n * @returns {UserCollectionFolder} The created folder\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to create a folder for another user\n * @throws {DiscogsResourceNotFoundError} If the username cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async createFolder({\n username,\n ...body\n }: UserCollectionFolderCreateParams): Promise<UserCollectionFolder> {\n try {\n const response = await this.request<UserCollectionFolder>(`/${username}/collection/folders`, {\n method: 'POST',\n body,\n });\n\n // Validate the response using Zod schema\n const validatedResponse = UserCollectionFolderSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to create folder: ${String(error)}`);\n }\n }\n\n /**\n * Delete a folder from a user's collection. A folder must be empty before it can be deleted.\n *\n * @param params The parameters for the folder deletion\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to delete a folder of another user\n * @throws {DiscogsResourceNotFoundError} If the username or folder cannot be found\n * @throws {DiscogsValidationFailedError} If the folder is not empty\n * @throws {Error} If there's an unexpected error\n */\n async deleteFolder({ username, folder_id }: UserCollectionFolderParams): Promise<void> {\n try {\n await this.request<void>(`/${username}/collection/folders/${folder_id}`, {\n method: 'DELETE',\n });\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For unexpected errors, wrap them\n throw new Error(`Failed to delete folder: ${String(error)}`);\n }\n }\n\n /**\n * Remove an instance of a release from a user's collection folder\n *\n * @param params The parameters for the release deletion\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to delete a release from a folder of another user\n * @throws {DiscogsResourceNotFoundError} If the username, folder_id, release_id, or instance_id cannot be found\n * @throws {DiscogsValidationFailedError} If the folder_id is 0\n * @throws {Error} If there's an unexpected error\n */\n async deleteReleaseFromFolder({\n username,\n folder_id,\n release_id,\n instance_id,\n }: UserCollectionReleaseDeletedParams): Promise<void> {\n try {\n await this.request<void>(\n `/${username}/collection/folders/${folder_id}/releases/${release_id}/instances/${instance_id}`,\n {\n method: 'DELETE',\n },\n );\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to delete release from folder: ${String(error)}`);\n }\n }\n\n /**\n * Edit a custom field value for a release in a user's collection\n *\n * @param params The parameters for the custom field value edit\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to edit a custom field value of another user\n * @throws {DiscogsResourceNotFoundError} If the username, folder_id, release_id, or instance_id cannot be found\n * @throws {DiscogsValidationFailedError} If the field is a dropdown and the value is not in the list of options\n * @throws {Error} If there's an unexpected error\n */\n async editCustomFieldValue({\n username,\n folder_id,\n release_id,\n instance_id,\n field_id,\n value,\n }: UserCollectionCustomFieldEditParams): Promise<void> {\n try {\n await this.request<void>(\n `/${username}/collection/folders/${folder_id}/releases/${release_id}/instances/${instance_id}/fields/${field_id}`,\n {\n method: 'POST',\n body: { value },\n },\n );\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to edit custom field value: ${String(error)}`);\n }\n }\n\n /**\n * Edit a folder's metadata. Folders 0 and 1 cannot be renamed.\n *\n * @param params The parameters for the folder edit\n * @returns {UserCollectionFolder} The edited folder\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to edit a folder of another user\n * @throws {DiscogsResourceNotFoundError} If the username or folder cannot be found\n * @throws {DiscogsValidationFailedError} If the folder_id is 0 or 1\n * @throws {Error} If there's an unexpected error\n */\n async editFolder({\n username,\n folder_id,\n ...body\n }: UserCollectionFolderEditParams): Promise<UserCollectionFolder> {\n try {\n const response = await this.request<UserCollectionFolder>(\n `/${username}/collection/folders/${folder_id}`,\n {\n method: 'POST',\n body,\n },\n );\n\n // Validate the response using Zod schema\n const validatedResponse = UserCollectionFolderSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For unexpected errors, wrap them\n throw new Error(`Failed to edit folder: ${String(error)}`);\n }\n }\n\n /**\n * Find a release in a user's collection\n *\n * @param params The parameters for the release search\n * @returns {UserCollectionItemsByRelease} The releases in the user's collection\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to search a private collection\n * @throws {DiscogsResourceNotFoundError} If the username cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async findRelease({\n username,\n release_id,\n ...options\n }: UserCollectionReleaseParams): Promise<UserCollectionItemsByRelease> {\n try {\n const response = await this.request<UserCollectionItemsByRelease>(\n `/${username}/collection/releases/${release_id}`,\n {\n params: options,\n },\n );\n\n // Validate the response using Zod schema\n const validatedResponse = UserCollectionItemsByReleaseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For unexpected errors, wrap them\n throw new Error(`Failed to find release in collection: ${String(error)}`);\n }\n }\n\n /**\n * Retrieve a list of user-defined collection notes fields. These fields are available on every release in the collection.\n *\n * @param username The username of whose collection custom fields you are requesting\n * @returns {UserCollectionCustomFields} The user's collection custom fields\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to get custom fields of a private collection\n * @throws {DiscogsResourceNotFoundError} If the username cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async getCustomFields({ username }: UsernameInput): Promise<UserCollectionCustomFields> {\n try {\n const response = await this.request<UserCollectionCustomFields>(\n `/${username}/collection/fields`,\n );\n\n const validatedResponse = UserCollectionCustomFieldsSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get collection custom fields: ${String(error)}`);\n }\n }\n\n /**\n * Retrieve a list of folders in a user's collection\n *\n * @param username The username of whose collection folders you are requesting\n * @returns {UserCollectionFolder[]} The user's collection folders\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If another user's collection does not have public folders\n * @throws {DiscogsResourceNotFoundError} If the username cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async getFolders({ username }: UsernameInput): Promise<UserCollectionFolders> {\n try {\n const response = await this.request<UserCollectionFolders>(`/${username}/collection/folders`);\n\n // Validate the response using Zod schema\n const validatedResponse = UserCollectionFoldersSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For unexpected errors, wrap them\n throw new Error(`Failed to get collection folders: ${String(error)}`);\n }\n }\n\n /**\n * Retrieve metadata about a folder in a user's collection\n *\n * @param params The parameters for the folder retrieval\n * @returns {UserCollectionFolder} The retrieved folder\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to get a private folder of another user\n * @throws {DiscogsResourceNotFoundError} If the username or folder cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async getFolder({\n username,\n folder_id,\n }: UserCollectionFolderParams): Promise<UserCollectionFolder> {\n try {\n const response = await this.request<UserCollectionFolder>(\n `/${username}/collection/folders/${folder_id}`,\n );\n\n const validatedResponse = UserCollectionFolderSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get folder: ${String(error)}`);\n }\n }\n\n /**\n * Returns the list of item in a folder in a user's collection\n *\n * @param params The parameters for the item retrieval\n * @returns {UserCollectionItemsByRelease} The items in the user's collection\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to get a private collection\n * @throws {DiscogsResourceNotFoundError} If the username or folder cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async getItems({\n username,\n folder_id,\n ...options\n }: UserCollectionItemsParams): Promise<UserCollectionItemsByRelease> {\n try {\n const response = await this.request<UserCollectionItemsByRelease>(\n `/${username}/collection/folders/${folder_id}/releases`,\n {\n params: options,\n },\n );\n\n const validatedResponse = UserCollectionItemsByReleaseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get collection items: ${String(error)}`);\n }\n }\n\n /**\n * Returns the minimum, median, and maximum value of a user's collection\n *\n * @param username The username of whose collection value you are requesting\n * @returns {UserCollectionValue} The user's collection value\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to get the collection value of another user\n * @throws {DiscogsResourceNotFoundError} If the username cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async getValue({ username }: UsernameInput): Promise<UserCollectionValue> {\n try {\n const response = await this.request<UserCollectionValue>(`/${username}/collection/value`);\n\n // Validate the response using Zod schema\n const validatedResponse = UserCollectionValueSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n // If it's already a Discogs error, just rethrow it\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For unexpected errors, wrap them\n throw new Error(`Failed to get collection value: ${String(error)}`);\n }\n }\n\n /**\n * Move a release in a user's collection to another folder\n *\n * @param params The parameters for the release move\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to move a collection release of another user\n * @throws {DiscogsResourceNotFoundError} If the user, source folder, destination folder, release, or instance cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async moveRelease({\n username,\n folder_id,\n release_id,\n instance_id,\n ...body\n }: UserCollectionMoveReleaseParams): Promise<void> {\n try {\n await this.request<void>(\n `/${username}/collection/folders/${folder_id}/releases/${release_id}/instances/${instance_id}`,\n {\n method: 'POST',\n body: { folder_id: body.destination_folder_id },\n },\n );\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to move release: ${String(error)}`);\n }\n }\n\n /**\n * Rate a release in a user's collection\n *\n * @param params The parameters for the release rating\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to rate a collection release of another user\n * @throws {DiscogsResourceNotFoundError} If the username, folder_id, release_id, or instance_id cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async rateRelease({\n username,\n folder_id,\n release_id,\n instance_id,\n ...body\n }: UserCollectionReleaseRatingParams): Promise<void> {\n try {\n await this.request<void>(\n `/${username}/collection/folders/${folder_id}/releases/${release_id}/instances/${instance_id}`,\n {\n method: 'POST',\n body,\n },\n );\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to rate release: ${String(error)}`);\n }\n }\n}\n","import { isDiscogsError } from '../../errors.js';\nimport { type UserLists, type UserListsParams, UserListsSchema } from '../../types/user/index.js';\nimport { BaseUserService } from '../index.js';\n\n/**\n * Service for Discogs User Lists operations\n */\nexport class UserListsService extends BaseUserService {\n /**\n * Get a user's lists\n * @param params - Parameters for the request including username and optional pagination/sorting\n * @returns {UserLists} A paginated response containing the user's lists\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsResourceNotFoundError} If the username cannot be found\n * @throws {Error} If there's a validation error or other unexpected error\n */\n async get({ username, ...options }: UserListsParams): Promise<UserLists> {\n try {\n const response = await this.request<UserLists>(`/${username}/lists`, {\n params: options,\n });\n\n // Validate the response using Zod schema\n const validatedResponse = UserListsSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n // If it's already a Discogs error, just rethrow it\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For validation errors or other unexpected errors, wrap them\n throw new Error(`Failed to get lists: ${String(error)}`);\n }\n }\n}\n","import { isDiscogsError } from '../../errors.js';\nimport { UsernameInput } from '../../types/common.js';\nimport {\n type UserProfile,\n type UserProfileEditInput,\n UserProfileSchema,\n} from '../../types/user/index.js';\nimport { BaseUserService } from '../index.js';\n\n/**\n * Service for Discogs User Profile operations\n */\nexport class UserProfileService extends BaseUserService {\n /**\n * Retrieve a user by username\n *\n * @param username The username of whose profile you are requesting\n * @returns {UserProfile} The user's profile information\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsResourceNotFoundError} If the username cannot be found\n * @throws {Error} If there's a validation error or other unexpected error\n */\n async get({ username }: UsernameInput): Promise<UserProfile> {\n try {\n const response = await this.request<UserProfile>(`/${username}`);\n\n // Validate the response using Zod schema\n const validatedResponse = UserProfileSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n // If it's already a Discogs error, just rethrow it\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For validation errors or other unexpected errors, wrap them\n throw new Error(`Failed to get profile: ${String(error)}`);\n }\n }\n\n /**\n * Edit a user's profile data\n *\n * @param params UserProfileEditInput\n * @returns {UserProfile} The user's profile information\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to edit a profile that is not the authenticated user\n * @throws {DiscogsResourceNotFoundError} If the username cannot be found\n * @throws {Error} If there's a validation error or other unexpected error\n */\n async edit({ username, ...body }: UserProfileEditInput): Promise<UserProfile> {\n try {\n const response = await this.request<UserProfile>(`/${username}`, {\n method: 'POST',\n body,\n });\n\n // Validate the response using Zod schema\n const validatedResponse = UserProfileSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n // If it's already a Discogs error, just rethrow it\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For validation errors or other unexpected errors, wrap them\n throw new Error(`Failed to edit profile: ${String(error)}`);\n }\n }\n}\n","import { isDiscogsError } from '../../errors.js';\nimport {\n type UserWantlist,\n type UserWantlistItem,\n type UserWantlistItemParams,\n UserWantlistItemSchema,\n type UserWantlistParams,\n UserWantlistSchema,\n} from '../../types/user/index.js';\nimport { BaseUserService } from '../index.js';\n\n/**\n * Service for Discogs User Wantlist operations\n */\nexport class UserWantsService extends BaseUserService {\n /**\n * Returns the list of releases in a user's wantlist\n *\n * @param params - Parameters for the wantlist request including username and optional pagination/sorting\n * @returns {UserWantlist} The user's wantlist with pagination metadata\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to get the private wantlist of another user\n * @throws {DiscogsResourceNotFoundError} If the username cannot be found\n * @throws {Error} If there's a validation error or other unexpected error\n */\n async getList({ username, ...options }: UserWantlistParams): Promise<UserWantlist> {\n try {\n const response = await this.request<UserWantlist>(`/${username}/wants`, {\n params: options,\n });\n\n // Validate the response using Zod schema\n const validatedResponse = UserWantlistSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n // If it's already a Discogs error, just rethrow it\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For validation errors or other unexpected errors, wrap them\n throw new Error(`Failed to get wantlist: ${String(error)}`);\n }\n }\n\n /**\n * Add a release to a user's wantlist\n *\n * @param params - Parameters for adding a release to wantlist\n * @returns {UserWantlistItem} The added wantlist item\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to add to another user's wantlist\n * @throws {DiscogsResourceNotFoundError} If the username or release_id cannot be found\n * @throws {Error} If there's a validation error or other unexpected error\n */\n async addItem({\n username,\n release_id,\n ...body\n }: UserWantlistItemParams): Promise<UserWantlistItem> {\n try {\n const response = await this.request<UserWantlistItem>(`/${username}/wants/${release_id}`, {\n method: 'PUT',\n body,\n });\n\n // Validate the response using Zod schema\n const validatedResponse = UserWantlistItemSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n // If it's already a Discogs error, just rethrow it\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For validation errors or other unexpected errors, wrap them\n throw new Error(`Failed to add to wantlist: ${String(error)}`);\n }\n }\n\n /**\n * Edit a release in a user's wantlist\n *\n * @param params - Parameters for editing a release in a wantlist\n * @returns {UserWantlistItem} The edited wantlist item\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to edit a release in another user's wantlist\n * @throws {DiscogsResourceNotFoundError} If the username or release_id cannot be found\n * @throws {Error} If there's a validation error or other unexpected error\n */\n async editItem({\n username,\n release_id,\n ...body\n }: UserWantlistItemParams): Promise<UserWantlistItem> {\n try {\n const response = await this.request<UserWantlistItem>(`/${username}/wants/${release_id}`, {\n method: 'POST',\n body,\n });\n\n // Validate the response using Zod schema\n const validatedResponse = UserWantlistItemSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n // If it's already a Discogs error, just rethrow it\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For validation errors or other unexpected errors, wrap them\n throw new Error(`Failed to add to wantlist: ${String(error)}`);\n }\n }\n\n /**\n * Delete a release from a user's wantlist\n *\n * @param params - Parameters for deleting a release from wantlist including username and release_id\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to delete from another user's wantlist\n * @throws {DiscogsResourceNotFoundError} If the username or release_id cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async deleteItem({ username, release_id }: UserWantlistItemParams): Promise<void> {\n try {\n await this.request(`/${username}/wants/${release_id}`, {\n method: 'DELETE',\n });\n } catch (error) {\n // If it's already a Discogs error, just rethrow it\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For other unexpected errors, wrap them\n throw new Error(`Failed to delete from wantlist: ${String(error)}`);\n }\n }\n}\n","import { UserCollectionService } from './collection.js';\nimport { UserListsService } from './lists.js';\nimport { UserProfileService } from './profile.js';\nimport { UserWantsService } from './wants.js';\n\n/**\n * Main user service that composes all specialized services\n */\nexport class UserService {\n public collection: UserCollectionService;\n public lists: UserListsService;\n public profile: UserProfileService;\n public wants: UserWantsService;\n\n constructor() {\n this.collection = new UserCollectionService();\n this.lists = new UserListsService();\n this.profile = new UserProfileService();\n this.wants = new UserWantsService();\n }\n}\n","import type { FastMCP, Tool } from 'fastmcp';\nimport { formatDiscogsError } from '../errors.js';\nimport { UserService } from '../services/user/index.js';\nimport { FastMCPSessionAuth, UsernameInputSchema } from '../types/common.js';\nimport {\n UserCollectionCustomFieldEditParamsSchema,\n UserCollectionFolderCreateParamsSchema,\n UserCollectionFolderEditParamsSchema,\n UserCollectionFolderParamsSchema,\n UserCollectionFolderReleaseParamsSchema,\n UserCollectionItemsParamsSchema,\n UserCollectionMoveReleaseParamsSchema,\n UserCollectionReleaseDeletedParamsSchema,\n UserCollectionReleaseParamsSchema,\n UserCollectionReleaseRatingParamsSchema,\n} from '../types/user/index.js';\n\n/**\n * MCP tool for adding a release to a folder in a Discogs user's collection\n */\nexport const addReleaseToUserCollectionFolderTool: Tool<\n FastMCPSessionAuth,\n typeof UserCollectionFolderReleaseParamsSchema\n> = {\n name: 'add_release_to_user_collection_folder',\n description: `Add a release to a folder in a user's collection. The folder_id must be non-zero.`,\n parameters: UserCollectionFolderReleaseParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const release = await userService.collection.addReleaseToFolder(args);\n\n return JSON.stringify(release);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for creating a folder in a Discogs user's collection\n */\nexport const createUserCollectionFolderTool: Tool<\n FastMCPSessionAuth,\n typeof UserCollectionFolderCreateParamsSchema\n> = {\n name: 'create_user_collection_folder',\n description: `Create a new folder in a user's collection`,\n parameters: UserCollectionFolderCreateParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const folder = await userService.collection.createFolder(args);\n\n return JSON.stringify(folder);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for deleting a release from a folder in a Discogs user's collection\n */\nexport const deleteReleaseFromUserCollectionFolderTool: Tool<\n FastMCPSessionAuth,\n typeof UserCollectionReleaseDeletedParamsSchema\n> = {\n name: 'delete_release_from_user_collection_folder',\n description: `Remove an instance of a release from a user's collection folder. The folder_id must be non-zero.`,\n parameters: UserCollectionReleaseDeletedParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n await userService.collection.deleteReleaseFromFolder(args);\n\n return 'Release deleted successfully';\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for deleting a folder in a Discogs user's collection\n */\nexport const deleteUserCollectionFolderTool: Tool<\n FastMCPSessionAuth,\n typeof UserCollectionFolderParamsSchema\n> = {\n name: 'delete_user_collection_folder',\n description: `Delete a folder from a user's collection. A folder must be empty before it can be deleted.`,\n parameters: UserCollectionFolderParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n await userService.collection.deleteFolder(args);\n\n return 'Folder deleted successfully';\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for editing a custom field value for a release in a Discogs user's collection\n */\nexport const editUserCollectionCustomFieldValueTool: Tool<\n FastMCPSessionAuth,\n typeof UserCollectionCustomFieldEditParamsSchema\n> = {\n name: 'edit_user_collection_custom_field_value',\n description: `Edit a custom field value for a release in a user's collection`,\n parameters: UserCollectionCustomFieldEditParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n await userService.collection.editCustomFieldValue(args);\n\n return 'Custom field value edited successfully';\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for editing a folder in a Discogs user's collection\n */\nexport const editUserCollectionFolderTool: Tool<\n FastMCPSessionAuth,\n typeof UserCollectionFolderEditParamsSchema\n> = {\n name: 'edit_user_collection_folder',\n description: `Edit a folder's metadata. Folders 0 and 1 cannot be renamed.`,\n parameters: UserCollectionFolderEditParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const folder = await userService.collection.editFolder(args);\n\n return JSON.stringify(folder);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for finding a release in a Discogs user's collection\n */\nexport const findReleaseInUserCollectionTool: Tool<\n FastMCPSessionAuth,\n typeof UserCollectionReleaseParamsSchema\n> = {\n name: 'find_release_in_user_collection',\n description: `Find a release in a user's collection`,\n parameters: UserCollectionReleaseParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const releases = await userService.collection.findRelease(args);\n\n return JSON.stringify(releases);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs user's collection custom fields\n */\nexport const getUserCollectionCustomFieldsTool: Tool<\n FastMCPSessionAuth,\n typeof UsernameInputSchema\n> = {\n name: 'get_user_collection_custom_fields',\n description: `Retrieve a list of user-defined collection notes fields. These fields are available on every release in the collection.`,\n parameters: UsernameInputSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const customFields = await userService.collection.getCustomFields(args);\n\n return JSON.stringify(customFields);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs user's collection folder\n */\nexport const getUserCollectionFolderTool: Tool<\n FastMCPSessionAuth,\n typeof UserCollectionFolderParamsSchema\n> = {\n name: 'get_user_collection_folder',\n description: `Retrieve metadata about a folder in a user's collection`,\n parameters: UserCollectionFolderParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const folder = await userService.collection.getFolder(args);\n\n return JSON.stringify(folder);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs user's collection folders\n */\nexport const getUserCollectionFoldersTool: Tool<FastMCPSessionAuth, typeof UsernameInputSchema> = {\n name: 'get_user_collection_folders',\n description: `Retrieve a list of folders in a user's collection`,\n parameters: UsernameInputSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const collectionFolders = await userService.collection.getFolders(args);\n\n return JSON.stringify(collectionFolders);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs user's collection items\n */\nexport const getUserCollectionItemsTool: Tool<\n FastMCPSessionAuth,\n typeof UserCollectionItemsParamsSchema\n> = {\n name: 'get_user_collection_items',\n description: `Retrieve a list of items in a user's collection`,\n parameters: UserCollectionItemsParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const items = await userService.collection.getItems(args);\n\n return JSON.stringify(items);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs user's collection value\n */\nexport const getUserCollectionValueTool: Tool<FastMCPSessionAuth, typeof UsernameInputSchema> = {\n name: 'get_user_collection_value',\n description: `Returns the minimum, median, and maximum value of a user's collection`,\n parameters: UsernameInputSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const collectionValue = await userService.collection.getValue(args);\n\n return JSON.stringify(collectionValue);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for moving a release in a Discogs user's collection to another folder\n */\nexport const moveReleaseInUserCollectionTool: Tool<\n FastMCPSessionAuth,\n typeof UserCollectionMoveReleaseParamsSchema\n> = {\n name: 'move_release_in_user_collection',\n description: `Move a release in a user's collection to another folder`,\n parameters: UserCollectionMoveReleaseParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n await userService.collection.moveRelease(args);\n\n return 'Release moved successfully';\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for rating a release in a Discogs user's collection\n */\nexport const rateReleaseInUserCollectionTool: Tool<\n FastMCPSessionAuth,\n typeof UserCollectionReleaseRatingParamsSchema\n> = {\n name: 'rate_release_in_user_collection',\n description: `Rate a release in a user's collection. The folder_id must be non-zero.`,\n parameters: UserCollectionReleaseRatingParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n await userService.collection.rateRelease(args);\n\n return 'Release rated successfully';\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\nexport function registerUserCollectionTools(server: FastMCP): void {\n server.addTool(getUserCollectionFoldersTool);\n server.addTool(createUserCollectionFolderTool);\n server.addTool(getUserCollectionFolderTool);\n server.addTool(editUserCollectionFolderTool);\n server.addTool(deleteUserCollectionFolderTool);\n server.addTool(findReleaseInUserCollectionTool);\n server.addTool(getUserCollectionItemsTool);\n server.addTool(addReleaseToUserCollectionFolderTool);\n server.addTool(rateReleaseInUserCollectionTool);\n server.addTool(moveReleaseInUserCollectionTool);\n server.addTool(deleteReleaseFromUserCollectionFolderTool);\n server.addTool(getUserCollectionCustomFieldsTool);\n server.addTool(editUserCollectionCustomFieldValueTool);\n server.addTool(getUserCollectionValueTool);\n}\n","import { z } from 'zod';\n\n/**\n * Schema for a Discogs user identity\n */\nexport const DiscogsUserIdentitySchema = z.object({\n id: z.number(),\n username: z.string(),\n resource_url: z.string().url(),\n consumer_name: z.string(),\n});\n\n/**\n * TypeScript type for a Discogs user identity\n */\nexport type DiscogsUserIdentity = z.infer<typeof DiscogsUserIdentitySchema>;\n","import { isDiscogsError } from '../errors.js';\nimport { DiscogsUserIdentity, DiscogsUserIdentitySchema } from '../types/oauth.js';\nimport { DiscogsService } from './index.js';\n\n/**\n * Service for Discogs OAuth-related operations\n */\nexport class OAuthService extends DiscogsService {\n constructor() {\n super('/oauth');\n }\n\n /**\n * Get the identity of the authenticated user\n * @returns The user's identity information\n * @throws {DiscogsAuthenticationError} If authentication fails (401)\n */\n async getUserIdentity(): Promise<DiscogsUserIdentity> {\n try {\n // Call the identity endpoint relative to the OAuth base path\n const response = await this.request<DiscogsUserIdentity>('/identity');\n\n // Validate the response using Zod schema\n const validatedResponse = DiscogsUserIdentitySchema.parse(response);\n return validatedResponse;\n } catch (error) {\n // If it's already a Discogs error, just rethrow it\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For validation errors or other unexpected errors, wrap them\n throw new Error(`Failed to get identity: ${String(error)}`);\n }\n }\n}\n","import { z } from 'zod';\nimport { ArtistSchema } from '../artist.js';\nimport {\n PaginatedResponseSchema,\n PaginatedResponseWithObjectSchema,\n QueryParamsSchema,\n UsernameInputSchema,\n} from '../common.js';\nimport { LabelSchema } from '../label.js';\nimport { ReleaseSchema } from '../release.js';\n\nconst SubmissionSchema = z.object({\n artists: z.array(ArtistSchema).optional(),\n labels: z.array(LabelSchema).optional(),\n releases: z.array(ReleaseSchema).optional(),\n});\n\nexport const ContributionsParamsSchema = UsernameInputSchema.merge(\n QueryParamsSchema([\n 'label',\n 'artist',\n 'title',\n 'catno',\n 'format',\n 'rating',\n 'year',\n 'added',\n ] as const),\n);\n\nexport const ContributionsResponseSchema = PaginatedResponseSchema(ReleaseSchema, 'contributions');\n\nexport const SubmissionsResponseSchema = PaginatedResponseWithObjectSchema(\n SubmissionSchema,\n 'submissions',\n);\n\nexport type ContributionsParams = z.infer<typeof ContributionsParamsSchema>;\nexport type ContributionsResponse = z.infer<typeof ContributionsResponseSchema>;\nexport type SubmissionResponse = z.infer<typeof SubmissionsResponseSchema>;\n","import { isDiscogsError } from '../../errors.js';\nimport { UsernameInput } from '../../types/common.js';\nimport {\n type ContributionsParams,\n type ContributionsResponse,\n ContributionsResponseSchema,\n type SubmissionResponse,\n SubmissionsResponseSchema,\n} from '../../types/user/contribution.js';\nimport { BaseUserService } from '../index.js';\n\nexport class UserContributionsService extends BaseUserService {\n /**\n * Retrieve a user's contributions by username\n *\n * @param username The username of the user to get contributions for\n * @throws {DiscogsResourceNotFoundError} If the username is not found\n * @throws {DiscogsError} If there's an unexpected error\n * @returns {ContributionsResponse} The user's contributions\n */\n async get({ username, ...options }: ContributionsParams): Promise<ContributionsResponse> {\n try {\n const response = await this.request<ContributionsResponse>(`/${username}/contributions`, {\n params: options,\n });\n\n const validatedResponse = ContributionsResponseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get user contributions: ${String(error)}`);\n }\n }\n}\n\nexport class UserSubmissionsService extends BaseUserService {\n /**\n * Retrieve a user's submissions by username\n *\n * @param username The username of the user to get submissions for\n * @throws {DiscogsResourceNotFoundError} If the username is not found\n * @throws {DiscogsError} If there's an unexpected error\n * @returns {SubmissionResponse} The user's submissions\n */\n async get({ username }: UsernameInput): Promise<SubmissionResponse> {\n try {\n const response = await this.request<SubmissionResponse>(`/${username}/submissions`);\n\n const validatedResponse = SubmissionsResponseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get user submissions: ${String(error)}`);\n }\n }\n}\n","import type { FastMCP, Tool, ToolParameters } from 'fastmcp';\nimport { z } from 'zod';\nimport { formatDiscogsError } from '../errors.js';\nimport { OAuthService } from '../services/oauth.js';\nimport { UserContributionsService, UserSubmissionsService } from '../services/user/contribution.js';\nimport { UserService } from '../services/user/index.js';\nimport { FastMCPSessionAuth, UsernameInputSchema } from '../types/common.js';\nimport { ContributionsParamsSchema } from '../types/user/contribution.js';\nimport { UserProfileEditInputSchema } from '../types/user/index.js';\n\n/**\n * MCP tool for fetching the identity of the authenticated Discogs user\n */\nexport const getUserIdentityTool: Tool<FastMCPSessionAuth, ToolParameters> = {\n name: 'get_user_identity',\n description: 'Retrieve basic information about the authenticated user',\n parameters: z.object({}),\n execute: async () => {\n try {\n const oauthService = new OAuthService();\n const identity = await oauthService.getUserIdentity();\n\n return JSON.stringify(identity);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs user's profile\n */\nexport const getUserProfileTool: Tool<FastMCPSessionAuth, typeof UsernameInputSchema> = {\n name: 'get_user_profile',\n description: 'Retrieve a user by username',\n parameters: UsernameInputSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const profile = await userService.profile.get(args);\n\n return JSON.stringify(profile);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs user's submissions\n */\nexport const getUserSubmissionsTool: Tool<FastMCPSessionAuth, typeof UsernameInputSchema> = {\n name: 'get_user_submissions',\n description: `Retrieve a user's submissions by username`,\n parameters: UsernameInputSchema,\n execute: async (args) => {\n try {\n const userSubmissionsService = new UserSubmissionsService();\n const submissions = await userSubmissionsService.get(args);\n\n return JSON.stringify(submissions);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs user's contributions\n */\nexport const getUserContributionsTool: Tool<FastMCPSessionAuth, typeof ContributionsParamsSchema> =\n {\n name: 'get_user_contributions',\n description: `Retrieve a user's contributions by username`,\n parameters: ContributionsParamsSchema,\n execute: async (args) => {\n try {\n const userContributionsService = new UserContributionsService();\n const contributions = await userContributionsService.get(args);\n\n return JSON.stringify(contributions);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n };\n\n/**\n * MCP tool for editing a Discogs user's profile\n */\nexport const editUserProfileTool: Tool<FastMCPSessionAuth, typeof UserProfileEditInputSchema> = {\n name: 'edit_user_profile',\n description: `Edit a user's profile data`,\n parameters: UserProfileEditInputSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const profile = await userService.profile.edit(args);\n\n return JSON.stringify(profile);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\nexport function registerUserIdentityTools(server: FastMCP): void {\n server.addTool(getUserIdentityTool);\n server.addTool(getUserProfileTool);\n server.addTool(editUserProfileTool);\n server.addTool(getUserSubmissionsTool);\n server.addTool(getUserContributionsTool);\n}\n","import { z } from 'zod';\n\n/**\n * Schema for a list item\n */\nexport const ListItemSchema = z.object({\n id: z.number(),\n comment: z.string().optional(),\n display_title: z.string(),\n image_url: z.string().url(),\n resource_url: z.string().url(),\n stats: z.object({\n community: z.object({\n in_collection: z.number(),\n in_wantlist: z.number(),\n }),\n user: z.object({\n in_collection: z.number(),\n in_wantlist: z.number(),\n }),\n }),\n type: z.string(),\n uri: z.string().url(),\n});\n\n/**\n * Schema for a Discogs list\n */\nexport const ListSchema = z.object({\n id: z.number(),\n user: z.object({\n id: z.number(),\n avatar_url: z.string().url(),\n username: z.string(),\n resource_url: z.string().url(),\n }),\n name: z.string(),\n description: z.string().optional(),\n public: z.boolean(),\n date_added: z.string(),\n date_changed: z.string(),\n uri: z.string().url(),\n resource_url: z.string().url(),\n image_url: z.string().url().optional(),\n items: z.array(ListItemSchema),\n});\n\n/**\n * Schema for list ID parameters\n */\nexport const ListIdParamSchema = z.object({\n list_id: z.number(),\n});\n\n/**\n * TypeScript type for a list item\n */\nexport type ListItem = z.infer<typeof ListItemSchema>;\n\n/**\n * TypeScript type for a Discogs list\n */\nexport type List = z.infer<typeof ListSchema>;\n\n/**\n * TypeScript type for list ID parameters\n */\nexport type ListIdParam = z.infer<typeof ListIdParamSchema>;\n","import { isDiscogsError } from '../errors.js';\nimport { ListSchema, type List, type ListIdParam } from '../types/list.js';\nimport { DiscogsService } from './index.js';\n\n/**\n * Service for Discogs List-related operations\n */\nexport class ListService extends DiscogsService {\n constructor() {\n super('/lists');\n }\n\n /**\n * Returns items from a specified List\n *\n * @param params - Parameters containing the list ID\n * @returns {List} The list information\n * @throws {DiscogsPermissionError} If the user doesn't have permission to access the list\n * @throws {DiscogsResourceNotFoundError} If the list cannot be found\n * @throws {Error} If there's a validation error or other unexpected error\n */\n async getList({ list_id }: ListIdParam): Promise<List> {\n try {\n const response = await this.request<List>(`/${list_id}`);\n\n // Validate the response using Zod schema\n const validatedResponse = ListSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n // If it's already a Discogs error, just rethrow it\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For validation errors or other unexpected errors, wrap them\n throw new Error(`Failed to get list: ${String(error)}`);\n }\n }\n}\n","import type { FastMCP, Tool } from 'fastmcp';\nimport { formatDiscogsError } from '../errors.js';\nimport { ListService } from '../services/list.js';\nimport { UserService } from '../services/user/index.js';\nimport { FastMCPSessionAuth } from '../types/common.js';\nimport { ListIdParamSchema } from '../types/list.js';\nimport { UserListsParamsSchema } from '../types/user/index.js';\n\n/**\n * MCP tool for fetching a Discogs user's lists\n */\nexport const getUserListsTool: Tool<FastMCPSessionAuth, typeof UserListsParamsSchema> = {\n name: 'get_user_lists',\n description: `Get a user's lists`,\n parameters: UserListsParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const lists = await userService.lists.get(args);\n\n return JSON.stringify(lists);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs list by ID\n */\nexport const getListTool: Tool<FastMCPSessionAuth, typeof ListIdParamSchema> = {\n name: 'get_list',\n description: `Get a list by ID`,\n parameters: ListIdParamSchema,\n execute: async (args) => {\n try {\n const listService = new ListService();\n const list = await listService.getList(args);\n\n return JSON.stringify(list);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\nexport function registerUserListsTools(server: FastMCP): void {\n server.addTool(getUserListsTool);\n server.addTool(getListTool);\n}\n","import type { FastMCP, Tool } from 'fastmcp';\nimport { formatDiscogsError } from '../errors.js';\nimport { UserService } from '../services/user/index.js';\nimport { FastMCPSessionAuth } from '../types/common.js';\nimport { UserWantlistItemParamsSchema, UserWantlistParamsSchema } from '../types/user/index.js';\n\n/**\n * MCP tool for fetching a Discogs user's wantlist\n */\nexport const getUserWantlistTool: Tool<FastMCPSessionAuth, typeof UserWantlistParamsSchema> = {\n name: 'get_user_wantlist',\n description: `Returns the list of releases in a user's wantlist`,\n parameters: UserWantlistParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const wantlist = await userService.wants.getList(args);\n\n return JSON.stringify(wantlist);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for adding a release to a user's wantlist\n */\nexport const addToWantlistTool: Tool<FastMCPSessionAuth, typeof UserWantlistItemParamsSchema> = {\n name: 'add_to_wantlist',\n description: `Add a release to a user's wantlist`,\n parameters: UserWantlistItemParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const wantlistItem = await userService.wants.addItem(args);\n\n return JSON.stringify(wantlistItem);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for editing a release in a user's wantlist\n */\nexport const editItemInWantlistTool: Tool<FastMCPSessionAuth, typeof UserWantlistItemParamsSchema> =\n {\n name: 'edit_item_in_wantlist',\n description: `Edit a release in a user's wantlist`,\n parameters: UserWantlistItemParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const wantlistItem = await userService.wants.editItem(args);\n\n return JSON.stringify(wantlistItem);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n };\n\n/**\n * MCP tool for deleting a release from a user's wantlist\n */\nexport const deleteItemInWantlistTool: Tool<\n FastMCPSessionAuth,\n typeof UserWantlistItemParamsSchema\n> = {\n name: 'delete_item_in_wantlist',\n description: `Delete a release from a user's wantlist`,\n parameters: UserWantlistItemParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n await userService.wants.deleteItem(args);\n\n return 'Release deleted from wantlist';\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\nexport function registerUserWantlistTools(server: FastMCP): void {\n server.addTool(getUserWantlistTool);\n server.addTool(addToWantlistTool);\n server.addTool(editItemInWantlistTool);\n server.addTool(deleteItemInWantlistTool);\n}\n","import { FastMCP } from 'fastmcp';\nimport { registerDatabaseTools } from './database.js';\nimport { registerInventoryExportTool } from './inventoryExport.js';\nimport { registerMarketplaceTools } from './marketplace.js';\nimport { registerMediaTools } from './media.js';\nimport { registerUserCollectionTools } from './userCollection.js';\nimport { registerUserIdentityTools } from './userIdentity.js';\nimport { registerUserListsTools } from './userLists.js';\nimport { registerUserWantlistTools } from './userWantlist.js';\n\n/**\n * Registers all MCP tools with the server\n * @param server The FastMCP server instance\n */\nexport function registerTools(server: FastMCP): void {\n registerDatabaseTools(server);\n registerMarketplaceTools(server);\n registerInventoryExportTool(server);\n registerUserIdentityTools(server);\n registerUserCollectionTools(server);\n registerUserWantlistTools(server);\n registerUserListsTools(server);\n registerMediaTools(server);\n}\n","#!/usr/bin/env node\nimport { FastMCP } from 'fastmcp';\nimport { config, validateConfig } from './config.js';\nimport { registerTools } from './tools/index.js';\nimport { log } from './utils.js';\nimport { VERSION } from './version.js';\n\ntype ServerTransportType = 'stdio' | 'stream';\n\nfunction assertTransportType(transportType: string): transportType is ServerTransportType {\n return transportType === 'stdio' || transportType === 'stream';\n}\n\ntry {\n validateConfig();\n\n // Grab the transport type from the command line\n const transportType = process.argv[2] ?? 'stdio';\n\n // Make sure the transport type is allowed\n if (!assertTransportType(transportType)) {\n throw Error(\n `Invalid transport type: \"${transportType}\". Allowed: 'stdio' (default) or 'stream'.`,\n );\n }\n\n const server = new FastMCP({\n name: config.server.name,\n version: VERSION,\n });\n\n registerTools(server);\n\n if (transportType === 'stdio') {\n server.start({ transportType });\n } else if (transportType === 'stream') {\n server.start({\n transportType: 'httpStream',\n httpStream: {\n port: config.server.port,\n },\n });\n }\n\n log.info(`${config.server.name} started with transport type: ${transportType}`);\n} catch (error: unknown) {\n log.error(`Failed to run the ${config.server.name}: `, error);\n process.exit(1);\n}\n\n// Handle process termination gracefully\nprocess.on('SIGINT', () => {\n log.info('Shutting down server...');\n process.exit(0);\n});\n"]}
1
+ {"version":3,"sources":["../src/version.ts","../src/config.ts","../src/errors.ts","../src/utils.ts","../src/types/common.ts","../src/types/artist.ts","../src/services/index.ts","../src/services/artist.ts","../src/types/database.ts","../src/services/database.ts","../src/types/label.ts","../src/services/label.ts","../src/types/release.ts","../src/types/master.ts","../src/services/master.ts","../src/services/release.ts","../src/tools/database.ts","../src/types/inventory.ts","../src/services/inventory.ts","../src/tools/inventoryExport.ts","../src/types/marketplace.ts","../src/services/marketplace.ts","../src/types/user/collection.ts","../src/types/user/inventory.ts","../src/types/user/lists.ts","../src/types/user/profile.ts","../src/types/user/wants.ts","../src/services/user/inventory.ts","../src/tools/marketplace.ts","../src/tools/media.ts","../src/services/user/collection.ts","../src/services/user/lists.ts","../src/services/user/profile.ts","../src/services/user/wants.ts","../src/services/user/index.ts","../src/tools/userCollection.ts","../src/types/oauth.ts","../src/services/oauth.ts","../src/types/user/contribution.ts","../src/services/user/contribution.ts","../src/tools/userIdentity.ts","../src/types/list.ts","../src/services/list.ts","../src/tools/userLists.ts","../src/tools/userWantlist.ts","../src/tools/index.ts","../src/index.ts"],"names":["z","exports"],"mappings":"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","file":"index.js","sourcesContent":["// This should match the version in package.json or else it will break the CI workflow\n// You should not need to manually update this value, it will be managed using `pnpm version:sync` during release creation\nexport const VERSION = '0.5.0';\n","import dotenv from 'dotenv';\nimport { VERSION } from './version.js';\n\n// Load environment variables from .env file\ndotenv.config();\n\n// Discogs API configuration\nexport const config = {\n discogs: {\n apiUrl: process.env.DISCOGS_API_URL || 'https://api.discogs.com',\n /* Some MCP clients can't handle large amounts of data.\n * The client may explicitly request more at their own peril. */\n defaultPerPage: 5,\n mediaType: process.env.DISCOGS_MEDIA_TYPE || 'application/vnd.discogs.v2.discogs+json',\n personalAccessToken: process.env.DISCOGS_PERSONAL_ACCESS_TOKEN,\n userAgent: process.env.DISCOGS_USER_AGENT || `DiscogsMCPServer/${VERSION}`,\n },\n server: {\n name: process.env.SERVER_NAME || 'Discogs MCP Server',\n port: process.env.PORT ? parseInt(process.env.PORT, 10) : 3001,\n host: process.env.SERVER_HOST || '0.0.0.0',\n },\n};\n\n// Validate required configuration\nexport function validateConfig(): void {\n const missingVars: string[] = [];\n\n if (!process.env.DISCOGS_PERSONAL_ACCESS_TOKEN) {\n missingVars.push('DISCOGS_PERSONAL_ACCESS_TOKEN');\n }\n\n if (missingVars.length > 0) {\n throw new Error(`Missing required environment variables: ${missingVars.join(', ')}`);\n }\n}\n","import { UserError } from 'fastmcp';\n\nexport class DiscogsError extends Error {\n constructor(\n message: string,\n public readonly status: number,\n public readonly response: unknown,\n ) {\n super(message);\n this.name = new.target.name;\n }\n}\n\nexport class DiscogsAuthenticationError extends DiscogsError {\n constructor(message = 'Authentication failed') {\n super(message, 401, { message });\n this.name = new.target.name;\n }\n}\n\nexport class DiscogsMethodNotAllowedError extends DiscogsError {\n constructor(message = 'Method not allowed') {\n super(message, 405, { message });\n this.name = new.target.name;\n }\n}\n\nexport class DiscogsPermissionError extends DiscogsError {\n constructor(message = 'Insufficient permissions') {\n super(message, 403, { message });\n this.name = new.target.name;\n }\n}\n\nexport class DiscogsRateLimitError extends DiscogsError {\n constructor(\n message = 'Rate limit exceeded',\n public readonly resetAt: Date,\n ) {\n super(message, 429, { message, reset_at: resetAt.toISOString() });\n this.name = new.target.name;\n }\n}\n\nexport class DiscogsResourceNotFoundError extends DiscogsError {\n constructor(message = 'Resource not found') {\n super(message, 404, { message });\n this.name = new.target.name;\n }\n}\n\nexport class DiscogsValidationFailedError extends DiscogsError {\n constructor(response?: unknown) {\n // Try to extract the detailed error message from the response\n let message = 'Validation failed';\n\n if (response && typeof response === 'object' && response !== null) {\n const detail = (response as { detail?: Array<{ msg?: string }> }).detail;\n if (Array.isArray(detail) && detail.length > 0 && detail[0].msg) {\n message = detail[0].msg;\n }\n }\n\n super(message, 422, { message });\n this.name = new.target.name;\n }\n}\n\n/**\n * Creates a specific Discogs error instance based on HTTP status code\n *\n * @param status HTTP status code from the Discogs API response\n * @param response Response data from the Discogs API\n * @returns An appropriate DiscogsError subclass instance\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function createDiscogsError(status: number, response: any): DiscogsError {\n switch (status) {\n case 401:\n return new DiscogsAuthenticationError(response?.message);\n case 403:\n return new DiscogsPermissionError(response?.message);\n case 404:\n return new DiscogsResourceNotFoundError(response?.message || 'Resource');\n case 405:\n return new DiscogsMethodNotAllowedError(response?.message);\n case 422:\n return new DiscogsValidationFailedError(response);\n case 429:\n return new DiscogsRateLimitError(\n response?.message,\n new Date(response?.reset_at || Date.now() + 60000),\n );\n default:\n return new DiscogsError(response?.message || 'Discogs API error', status, response);\n }\n}\n\n/**\n * Creates a user-friendly error from any error object\n * This will be displayed cleanly in FastMCP without error class prefixes\n *\n * @param error The error to format\n * @returns A UserError with the original error message\n */\nexport function formatDiscogsError(error: unknown): UserError {\n let message: string;\n\n if (error instanceof Error) {\n // For any Error object, use its message directly\n message = error.message;\n } else {\n // For non-Error objects\n message = String(error);\n }\n\n return new UserError(message);\n}\n\n/**\n * Type guard to check if an error is a DiscogsError\n *\n * @param error The error to check\n * @returns True if the error is a DiscogsError or subclass\n */\nexport function isDiscogsError(error: unknown): error is DiscogsError {\n return error instanceof DiscogsError;\n}\n","import { z } from 'zod';\n\n// Debug logging on stderr to avoid protocol confusion\nexport const log = {\n _log: (level: string, ...args: unknown[]): void => {\n const msg = `[${level} ${new Date().toISOString()}] ${args.join(' ')}\\n`;\n process.stderr.write(msg);\n },\n\n info: (...args: unknown[]): void => {\n log._log('INFO', ...args);\n },\n\n debug: (...args: unknown[]): void => {\n log._log('DEBUG', ...args);\n },\n\n warn: (...args: unknown[]): void => {\n log._log('WARN', ...args);\n },\n\n error: (...args: unknown[]): void => {\n log._log('ERROR', ...args);\n },\n};\n\n/**\n * Custom Zod schema for a URL or empty string\n */\nexport const urlOrEmptySchema = () => {\n return z.string().refine((val) => val === '' || /^https?:\\/\\/.+/.test(val), {\n message: 'Must be a valid URL or empty string',\n });\n};\n","import { z } from 'zod';\nimport { urlOrEmptySchema } from '../utils.js';\n\n/**\n * Schema for currency codes supported by Discogs\n */\nexport const CurrencyCodeSchema = z.enum([\n 'USD', // US Dollar\n 'GBP', // British Pound\n 'EUR', // Euro\n 'CAD', // Canadian Dollar\n 'AUD', // Australian Dollar\n 'JPY', // Japanese Yen\n 'CHF', // Swiss Franc\n 'MXN', // Mexican Peso\n 'BRL', // Brazilian Real\n 'NZD', // New Zealand Dollar\n 'SEK', // Swedish Krona\n 'ZAR', // South African Rand\n]);\n\nexport const ImageSchema = z.object({\n width: z.number().int().optional(),\n height: z.number().int().optional(),\n resource_url: urlOrEmptySchema(),\n type: z.string().optional(),\n uri: urlOrEmptySchema(),\n uri150: urlOrEmptySchema().optional(),\n});\n\n/**\n * Schema for a filtered response\n */\nexport const FilteredResponseSchema = z.object({\n filters: z.object({\n applied: z.record(z.string(), z.array(z.any())).default({}),\n available: z.record(z.string(), z.record(z.string(), z.number().int())).default({}),\n }),\n filter_facets: z.array(\n z.object({\n title: z.string(),\n id: z.string(),\n values: z.array(\n z.object({\n title: z.string(),\n value: z.string(),\n count: z.number().int(),\n }),\n ),\n allows_multiple_values: z.boolean(),\n }),\n ),\n});\n\nconst PaginationSchema = z.object({\n page: z.number().int().min(0).optional(),\n per_page: z.number().int().min(0).optional(),\n pages: z.number().int().min(0),\n items: z.number().int().min(0),\n urls: z\n .object({\n first: z.string().url().optional(),\n prev: z.string().url().optional(),\n next: z.string().url().optional(),\n last: z.string().url().optional(),\n })\n .optional(),\n});\n\n/**\n * Schema for a paginated response\n * @param itemSchema The schema for the items in the array\n * @param resultsFieldName The name of the field containing the array of items\n */\nexport const PaginatedResponseSchema = <T extends z.ZodType, K extends string>(\n itemSchema: T,\n resultsFieldName: K,\n) =>\n z.object({\n pagination: PaginationSchema,\n [resultsFieldName]: z.array(itemSchema),\n });\n\n/**\n * Schema for a paginated response with an object instead of an array\n * @param itemSchema The schema for the item in the object\n * @param resultsFieldName The name of the field containing the object\n */\nexport const PaginatedResponseWithObjectSchema = <T extends z.ZodType, K extends string>(\n itemSchema: T,\n resultsFieldName: K,\n) =>\n z.object({\n pagination: PaginationSchema,\n [resultsFieldName]: itemSchema,\n });\n\n/**\n * Schema for query parameters that include both pagination and sorting\n * @param validSortKeys An array of valid sort keys for the specific endpoint\n */\nexport const QueryParamsSchema = <T extends readonly [string, ...string[]]>(\n validSortKeys: T = [] as unknown as T,\n) =>\n z.object({\n // Pagination\n page: z.number().int().min(1).optional(),\n per_page: z.number().int().min(1).max(100).optional(),\n\n // Sorting\n sort: z.enum(validSortKeys).optional(),\n sort_order: z.enum(['asc', 'desc']).optional(),\n });\n\n/**\n * Schema for status values\n */\nexport const StatusSchema = z.enum(['Accepted', 'Draft', 'Deleted', 'Rejected']);\n\n/**\n * Schema for a username input\n */\nexport const UsernameInputSchema = z.object({\n username: z.string().min(1, 'username is required'),\n});\n\n/**\n * TypeScript type for currency codes\n */\nexport type CurrencyCode = z.infer<typeof CurrencyCodeSchema>;\n\n/**\n * Common type for FastMCP session authentication\n */\nexport type FastMCPSessionAuth = Record<string, unknown> | undefined;\n\n/**\n * TypeScript type for a paginated response\n */\nexport type PaginatedResponse<T, K extends string> = z.infer<\n ReturnType<typeof PaginatedResponseSchema<z.ZodType<T>, K>>\n>;\n\n/**\n * TypeScript type for query parameters\n */\nexport type QueryParams<T extends readonly [string, ...string[]]> = z.infer<\n ReturnType<typeof QueryParamsSchema<T>>\n>;\n\n/**\n * TypeScript type for a username input\n */\nexport type UsernameInput = z.infer<typeof UsernameInputSchema>;\n","import { z } from 'zod';\nimport { urlOrEmptySchema } from '../utils.js';\nimport { ImageSchema, PaginatedResponseSchema, QueryParamsSchema } from './common.js';\n\n/**\n * Schema for an artist ID parameter\n */\nexport const ArtistIdParamSchema = z.object({\n artist_id: z.number(),\n});\n\n/**\n * Schema for basic artist information\n */\nexport const ArtistBasicSchema = z.object({\n id: z.number(),\n anv: z.string(),\n join: z.string(),\n name: z.string(),\n resource_url: urlOrEmptySchema(),\n role: z.string(),\n tracks: z.string(),\n});\n\n/**\n * Schema for complete artist information\n */\nexport const ArtistSchema = z.object({\n id: z.number(),\n aliases: z\n .array(\n z.object({\n id: z.number(),\n name: z.string(),\n resource_url: urlOrEmptySchema(),\n thumbnail_url: urlOrEmptySchema().optional(),\n }),\n )\n .optional(),\n data_quality: z.string().optional(),\n images: z.array(ImageSchema).optional(),\n members: z\n .array(\n z.object({\n id: z.number(),\n active: z.boolean().optional(),\n name: z.string(),\n resource_url: urlOrEmptySchema(),\n thumbnail_url: urlOrEmptySchema().optional(),\n }),\n )\n .optional(),\n name: z.string(),\n namevariations: z.array(z.string()).optional(),\n profile: z.string().optional(),\n realname: z.string().optional(),\n releases_url: urlOrEmptySchema().optional(),\n resource_url: urlOrEmptySchema(),\n uri: urlOrEmptySchema().optional(),\n urls: z.array(z.string()).optional(),\n});\n\n/**\n * Schema for an artist release\n */\nexport const ArtistReleaseSchema = z.object({\n id: z.number(),\n artist: z.string(),\n catno: z.string().optional(),\n format: z.string().optional(),\n label: z.string().optional(),\n main_release: z.number().optional(),\n resource_url: urlOrEmptySchema(),\n role: z.string().optional(),\n status: z.string().optional(),\n stats: z\n .object({\n community: z.object({\n in_collection: z.number(),\n in_wantlist: z.number(),\n }),\n user: z.object({\n in_collection: z.number(),\n in_wantlist: z.number(),\n }),\n })\n .optional(),\n thumb: urlOrEmptySchema().optional(),\n title: z.string(),\n trackinfo: z.string().optional(),\n type: z.string().optional(),\n year: z.number().optional(),\n});\n\n/**\n * Schema for artist releases parameters\n */\nexport const ArtistReleasesParamsSchema = ArtistIdParamSchema.merge(\n QueryParamsSchema(['year', 'title', 'format'] as const),\n);\n\n/**\n * Schema for artist releases\n */\nexport const ArtistReleasesSchema = PaginatedResponseSchema(ArtistReleaseSchema, 'releases');\n\n/**\n * TypeScript type for an artist ID parameter\n */\nexport type ArtistIdParam = z.infer<typeof ArtistIdParamSchema>;\n\n/**\n * TypeScript type for basic artist information\n */\nexport type ArtistBasic = z.infer<typeof ArtistBasicSchema>;\n\n/**\n * TypeScript type for a complete artist\n */\nexport type Artist = z.infer<typeof ArtistSchema>;\n\n/**\n * TypeScript type for artist releases parameters\n */\nexport type ArtistReleasesParams = z.infer<typeof ArtistReleasesParamsSchema>;\n\n/**\n * TypeScript type for artist releases\n */\nexport type ArtistReleases = z.infer<typeof ArtistReleasesSchema>;\n","import { config } from '../config.js';\nimport { createDiscogsError } from '../errors.js';\n\nexport interface RequestOptions {\n method?: 'GET' | 'POST' | 'PUT' | 'DELETE';\n params?: Record<string, string | number | boolean | undefined>;\n body?: unknown;\n}\n\n// Base service with common functionality\nexport abstract class DiscogsService {\n protected readonly baseUrl: string;\n protected readonly headers: Record<string, string>;\n\n protected constructor(protected readonly servicePath: string) {\n if (\n !config.discogs.apiUrl ||\n !config.discogs.mediaType ||\n !config.discogs.personalAccessToken ||\n !config.discogs.userAgent\n ) {\n throw new Error('Discogs API configuration is incomplete');\n }\n\n this.baseUrl = `${config.discogs.apiUrl}${servicePath}`;\n this.headers = {\n Accept: config.discogs.mediaType,\n Authorization: `Discogs token=${config.discogs.personalAccessToken}`,\n 'Content-Type': 'application/json',\n 'User-Agent': config.discogs.userAgent,\n };\n }\n\n protected async request<T>(path: string, options?: RequestOptions): Promise<T> {\n const url = new URL(`${this.baseUrl}${path}`);\n\n // Add query parameters if they exist\n if (options?.params) {\n Object.entries(options.params).forEach(([key, value]) => {\n if (value !== undefined) {\n url.searchParams.append(key, String(value));\n }\n });\n }\n\n // Set default per_page if not specified\n if (!url.searchParams.has('per_page')) {\n url.searchParams.append('per_page', String(config.discogs.defaultPerPage));\n }\n\n const response = await fetch(url.toString(), {\n method: options?.method || 'GET',\n headers: this.headers,\n body: options?.body ? JSON.stringify(options.body) : undefined,\n });\n\n const contentType = response.headers.get('content-type');\n const isJson = contentType && contentType.includes('application/json');\n\n let responseBody;\n try {\n responseBody = isJson ? await response.json() : await response.text();\n } catch {\n // Ignore the error and use default message\n responseBody = { message: 'Failed to parse response' };\n }\n\n // Check if the response is successful\n if (!response.ok) {\n throw createDiscogsError(response.status, responseBody);\n }\n\n return responseBody as T;\n }\n}\n\n/**\n * Base class for user-related services\n */\nexport class BaseUserService extends DiscogsService {\n constructor() {\n super('/users');\n }\n}\n","import { isDiscogsError } from '../errors.js';\nimport {\n ArtistReleasesSchema,\n ArtistSchema,\n type Artist,\n type ArtistIdParam,\n type ArtistReleases,\n type ArtistReleasesParams,\n} from '../types/artist.js';\nimport { DiscogsService } from './index.js';\n\n/**\n * Service for Discogs Artist-related operations\n */\nexport class ArtistService extends DiscogsService {\n constructor() {\n super('/artists');\n }\n\n /**\n * Get an artist\n *\n * @param params - Parameters containing the artist ID\n * @returns {Artist} The artist information\n * @throws {DiscogsResourceNotFoundError} If the artist cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async get({ artist_id }: ArtistIdParam): Promise<Artist> {\n try {\n const response = await this.request<Artist>(`/${artist_id}`);\n\n const validatedResponse = ArtistSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get artist: ${String(error)}`);\n }\n }\n\n /**\n * Get an artist's releases\n *\n * @param params - Parameters containing the artist ID and pagination options\n * @returns {ArtistReleases} The artist releases\n * @throws {DiscogsResourceNotFoundError} If the artist cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async getReleases({ artist_id, ...options }: ArtistReleasesParams): Promise<ArtistReleases> {\n try {\n const response = await this.request<ArtistReleases>(`/${artist_id}/releases`, {\n params: options,\n });\n\n const validatedResponse = ArtistReleasesSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get artist releases: ${String(error)}`);\n }\n }\n}\n","import { z } from 'zod';\nimport { urlOrEmptySchema } from '../utils.js';\nimport { PaginatedResponseSchema, QueryParamsSchema } from './common.js';\n\n/**\n * Schema for search parameters\n */\nexport const SearchParamsSchema = z\n .object({\n q: z.string().optional(),\n type: z.enum(['artist', 'label', 'master', 'release']).optional(),\n title: z.string().optional(),\n release_title: z.string().optional(),\n credit: z.string().optional(),\n artist: z.string().optional(),\n anv: z.string().optional(),\n label: z.string().optional(),\n genre: z.string().optional(),\n style: z.string().optional(),\n country: z.string().optional(),\n year: z.string().optional(),\n format: z.string().optional(),\n catno: z.string().optional(),\n barcode: z.string().optional(),\n track: z.string().optional(),\n submitter: z.string().optional(),\n contributor: z.string().optional(),\n })\n .merge(QueryParamsSchema(['title', 'artist', 'year']));\n\n/**\n * Schema for search result items\n */\nconst SearchResultSchema = z.object({\n id: z.number(),\n barcode: z.array(z.string()).optional(),\n catno: z.string().optional(),\n community: z\n .object({\n have: z.number(),\n want: z.number(),\n })\n .optional(),\n country: z.string().optional(),\n cover_image: urlOrEmptySchema().optional(),\n format: z.array(z.string()).optional(),\n format_quantity: z.number().optional(),\n formats: z\n .array(\n z.object({\n descriptions: z.array(z.string()).optional(),\n name: z.string(),\n qty: z.string(),\n text: z.string().optional(),\n }),\n )\n .optional(),\n genre: z.array(z.string()).optional(),\n label: z.array(z.string()).optional(),\n master_id: z.number().nullable().optional(),\n master_url: urlOrEmptySchema().nullable().optional(),\n resource_url: urlOrEmptySchema(),\n style: z.array(z.string()).optional(),\n thumb: urlOrEmptySchema().optional(),\n title: z.string(),\n type: z.enum(['artist', 'label', 'master', 'release']),\n uri: z.string(),\n user_data: z\n .object({\n in_collection: z.boolean(),\n in_wantlist: z.boolean(),\n })\n .optional(),\n year: z.string().optional(),\n});\n\n/**\n * Schema for search results\n */\nexport const SearchResultsSchema = PaginatedResponseSchema(SearchResultSchema, 'results');\n\n/**\n * TypeScript type for search parameters\n */\nexport type SearchParams = z.infer<typeof SearchParamsSchema>;\n\n/**\n * TypeScript type for search results\n */\nexport type SearchResults = z.infer<typeof SearchResultsSchema>;\n","import { isDiscogsError } from '../errors.js';\nimport { type SearchParams, type SearchResults, SearchResultsSchema } from '../types/database.js';\nimport { DiscogsService } from './index.js';\n\n/**\n * Service for Discogs Database-related operations\n */\nexport class DatabaseService extends DiscogsService {\n constructor() {\n super('/database');\n }\n\n /**\n * Issue a search query to the Discogs database\n *\n * @param params - Search parameters\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {Error} If the search times out or an unexpected error occurs\n * @returns {SearchResults} Search results\n */\n async search(params: SearchParams): Promise<SearchResults> {\n try {\n const response = await this.request<SearchResults>('/search', { params });\n\n const validatedResponse = SearchResultsSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to search database: ${String(error)}`);\n }\n }\n}\n","import { z } from 'zod';\nimport { urlOrEmptySchema } from '../utils.js';\nimport { ArtistReleaseSchema } from './artist.js';\nimport { ImageSchema, PaginatedResponseSchema, QueryParamsSchema } from './common.js';\n\n/**\n * Schema for a label ID parameter\n */\nexport const LabelIdParamSchema = z.object({\n label_id: z.number(),\n});\n\n/**\n * Schema for basic label information\n */\nexport const LabelBasicSchema = z.object({\n id: z.number(),\n catno: z.string(),\n entity_type: z.string().optional(),\n entity_type_name: z.string().optional(),\n name: z.string(),\n resource_url: urlOrEmptySchema(),\n});\n\n/**\n * Schema for complete label information\n */\nexport const LabelSchema = z.object({\n id: z.number(),\n contact_info: z.string().optional(),\n data_quality: z.string().optional(),\n images: z.array(ImageSchema).optional(),\n name: z.string(),\n parent_label: z\n .object({\n id: z.number(),\n name: z.string(),\n resource_url: urlOrEmptySchema(),\n })\n .optional(),\n profile: z.string().optional(),\n releases_url: urlOrEmptySchema().optional(),\n resource_url: urlOrEmptySchema(),\n sublabels: z\n .array(\n z.object({\n id: z.number(),\n name: z.string(),\n resource_url: urlOrEmptySchema(),\n }),\n )\n .optional(),\n uri: urlOrEmptySchema().optional(),\n urls: z.array(z.string()).optional(),\n});\n\n/**\n * Schema for label releases parameters\n */\nexport const LabelReleasesParamsSchema = LabelIdParamSchema.merge(QueryParamsSchema());\n\n/**\n * Schema for label releases\n */\nexport const LabelReleasesSchema = PaginatedResponseSchema(ArtistReleaseSchema, 'releases');\n\n/**\n * TypeScript type for a label ID parameter\n */\nexport type LabelIdParam = z.infer<typeof LabelIdParamSchema>;\n\n/**\n * TypeScript type for basic label information\n */\nexport type LabelBasic = z.infer<typeof LabelBasicSchema>;\n\n/**\n * TypeScript type for a complete label\n */\nexport type Label = z.infer<typeof LabelSchema>;\n\n/**\n * TypeScript type for label releases parameters\n */\nexport type LabelReleasesParams = z.infer<typeof LabelReleasesParamsSchema>;\n\n/**\n * TypeScript type for label releases\n */\nexport type LabelReleases = z.infer<typeof LabelReleasesSchema>;\n","import { isDiscogsError } from '../errors.js';\nimport {\n type Label,\n type LabelIdParam,\n type LabelReleases,\n type LabelReleasesParams,\n LabelReleasesSchema,\n LabelSchema,\n} from '../types/label.js';\nimport { DiscogsService } from './index.js';\n\nexport class LabelService extends DiscogsService {\n constructor() {\n super('/labels');\n }\n\n /**\n * Get a label\n *\n * @param params - Parameters containing the label ID\n * @returns {Label} The label information\n * @throws {DiscogsResourceNotFoundError} If the label cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async get({ label_id }: LabelIdParam): Promise<Label> {\n try {\n const response = await this.request<Label>(`/${label_id}`);\n\n const validatedResponse = LabelSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get label: ${String(error)}`);\n }\n }\n\n /**\n * Returns a list of Releases associated with the label\n *\n * @param params - Parameters containing the label ID and pagination options\n * @returns {LabelReleases} The label releases\n * @throws {DiscogsResourceNotFoundError} If the label cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async getReleases({ label_id, ...params }: LabelReleasesParams): Promise<LabelReleases> {\n try {\n const response = await this.request<LabelReleases>(`/${label_id}/releases`, {\n params,\n });\n\n const validatedResponse = LabelReleasesSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get label releases: ${String(error)}`);\n }\n }\n}\n","import { z } from 'zod';\nimport { urlOrEmptySchema } from '../utils.js';\nimport { ArtistBasicSchema } from './artist.js';\nimport { CurrencyCodeSchema, ImageSchema, UsernameInputSchema } from './common.js';\nimport { LabelBasicSchema } from './label.js';\n\n/**\n * Schema for a release format\n */\nexport const ReleaseFormatSchema = z.object({\n descriptions: z.array(z.string()).optional(),\n name: z.string(),\n qty: z.string(),\n text: z.string().optional(),\n});\n\n/**\n * Schema for basic release information\n */\nexport const BasicInformationSchema = z.object({\n id: z.number(),\n artists: z.array(ArtistBasicSchema),\n cover_image: urlOrEmptySchema(),\n formats: z.array(ReleaseFormatSchema),\n genres: z.array(z.string()).optional(),\n master_id: z.number().optional(),\n master_url: urlOrEmptySchema().nullable().optional(),\n labels: z.array(LabelBasicSchema),\n resource_url: urlOrEmptySchema(),\n styles: z.array(z.string()).optional(),\n thumb: urlOrEmptySchema(),\n title: z.string(),\n year: z.number(),\n});\n\n/**\n * Schema for a complete release\n */\nexport const ReleaseSchema = z.object({\n id: z.number().int(),\n artists_sort: z.string().optional(),\n artists: z.array(ArtistBasicSchema),\n blocked_from_sale: z.boolean().optional(),\n companies: z\n .array(\n z.object({\n id: z.number().int().optional(),\n catno: z.string().optional(),\n entity_type: z.string().optional(),\n entity_type_name: z.string().optional(),\n name: z.string().optional(),\n resource_url: urlOrEmptySchema().optional(),\n thumbnail_url: urlOrEmptySchema().optional(),\n }),\n )\n .optional(),\n community: z\n .object({\n contributors: z\n .array(\n z.object({\n resource_url: urlOrEmptySchema().optional(),\n username: z.string().optional(),\n }),\n )\n .optional(),\n data_quality: z.string().optional(),\n have: z.number().int().optional(),\n rating: z\n .object({\n average: z.number().optional(),\n count: z.number().int().optional(),\n })\n .optional(),\n status: z.string().optional(),\n submitter: z\n .object({\n resource_url: urlOrEmptySchema().optional(),\n username: z.string().optional(),\n })\n .optional(),\n want: z.number().int().optional(),\n })\n .optional(),\n country: z.string().optional(),\n data_quality: z.string().optional(),\n date_added: z.string().optional(),\n date_changed: z.string().optional(),\n estimated_weight: z.number().int().optional(),\n extraartists: z.array(ArtistBasicSchema).optional(),\n format_quantity: z.number().int().optional(),\n formats: z.array(ReleaseFormatSchema).optional(),\n genres: z.array(z.string()).optional(),\n identifiers: z\n .array(\n z.object({\n type: z.string(),\n value: z.string(),\n description: z.string().optional(),\n }),\n )\n .optional(),\n images: z.array(ImageSchema).optional(),\n labels: z.array(LabelBasicSchema).optional(),\n lowest_price: z.number().nullable().optional(),\n master_id: z.number().optional(),\n master_url: urlOrEmptySchema().optional(),\n notes: z.string().optional(),\n num_for_sale: z.number().int().optional(),\n released: z.string().optional(),\n released_formatted: z.string().optional(),\n resource_url: urlOrEmptySchema(),\n series: z.array(z.unknown()).optional(),\n status: z.string().optional(),\n styles: z.array(z.string()).optional(),\n thumb: urlOrEmptySchema().optional(),\n title: z.string(),\n tracklist: z\n .array(\n z.object({\n duration: z.string().optional(),\n position: z.string(),\n title: z.string(),\n type_: z.string().optional(),\n extraartists: z.array(ArtistBasicSchema).optional(),\n }),\n )\n .optional(),\n uri: urlOrEmptySchema().optional(),\n videos: z\n .array(\n z.object({\n description: z.string().nullable().optional(),\n duration: z.number().int().optional(),\n embed: z.boolean().optional(),\n title: z.string().optional(),\n uri: urlOrEmptySchema().optional(),\n }),\n )\n .optional(),\n year: z.number(),\n});\n\n/**\n * Schema for a release_id parameter\n */\nexport const ReleaseIdParamSchema = z.object({\n release_id: z.number().min(1, 'The release_id must be non-zero'),\n});\n\n/**\n * Schema for release parameters\n */\nexport const ReleaseParamsSchema = ReleaseIdParamSchema.extend({\n curr_abbr: CurrencyCodeSchema.optional(),\n});\n\n/**\n * Schema for release rating\n */\nexport const ReleaseRatingSchema = UsernameInputSchema.merge(ReleaseIdParamSchema).extend({\n rating: z.number(),\n});\n\n/**\n * Schema for release rating community\n */\nexport const ReleaseRatingCommunitySchema = ReleaseIdParamSchema.extend({\n rating: z.object({\n average: z.number(),\n count: z.number().int(),\n }),\n});\n\n/**\n * Schema for release rating parameters\n */\nexport const ReleaseRatingParamsSchema = UsernameInputSchema.merge(ReleaseIdParamSchema);\n\n/**\n * Schema for release rating edit parameters\n */\nexport const ReleaseRatingEditParamsSchema = ReleaseRatingParamsSchema.extend({\n rating: z\n .number()\n .int()\n .min(1, 'The rating must be at least 1')\n .max(5, 'The rating must be at most 5'),\n});\n\n/**\n * TypeScript type for basic release information\n */\nexport type BasicInformation = z.infer<typeof BasicInformationSchema>;\n\n/**\n * TypeScript type for a complete release\n */\nexport type Release = z.infer<typeof ReleaseSchema>;\n\n/**\n * TypeScript type for a release format\n */\nexport type ReleaseFormat = z.infer<typeof ReleaseFormatSchema>;\n\n/**\n * TypeScript type for a release_id parameter\n */\nexport type ReleaseIdParam = z.infer<typeof ReleaseIdParamSchema>;\n\n/**\n * TypeScript type for release parameters\n */\nexport type ReleaseParams = z.infer<typeof ReleaseParamsSchema>;\n\n/**\n * TypeScript type for release rating\n */\nexport type ReleaseRating = z.infer<typeof ReleaseRatingSchema>;\n\n/**\n * TypeScript type for release rating community\n */\nexport type ReleaseRatingCommunity = z.infer<typeof ReleaseRatingCommunitySchema>;\n\n/**\n * TypeScript type for release rating parameters\n */\nexport type ReleaseRatingParams = z.infer<typeof ReleaseRatingParamsSchema>;\n\n/**\n * TypeScript type for release rating edit parameters\n */\nexport type ReleaseRatingEditParams = z.infer<typeof ReleaseRatingEditParamsSchema>;\n","import { z } from 'zod';\nimport { urlOrEmptySchema } from '../utils.js';\nimport { ArtistBasicSchema } from './artist.js';\nimport {\n FilteredResponseSchema,\n PaginatedResponseSchema,\n QueryParamsSchema,\n StatusSchema,\n} from './common.js';\nimport { ReleaseSchema } from './release.js';\n\n/**\n * Schema for a master release ID parameter\n */\nexport const MasterReleaseIdParamSchema = z.object({\n master_id: z.number().int(),\n});\n\n/**\n * Schema for a master release versions parameter\n */\nexport const MasterReleaseVersionsParamSchema = MasterReleaseIdParamSchema.extend({\n format: z.string().optional(),\n label: z.string().optional(),\n released: z.string().optional(),\n country: z.string().optional(),\n}).merge(QueryParamsSchema(['released', 'title', 'format', 'label', 'catno', 'country']));\n\n/**\n * Schema for a master release\n * Extends the base ReleaseSchema with master-specific fields\n */\nexport const MasterReleaseSchema = ReleaseSchema.extend({\n main_release: z.number(),\n most_recent_release: z.number(),\n versions_url: urlOrEmptySchema(),\n main_release_url: urlOrEmptySchema(),\n most_recent_release_url: urlOrEmptySchema(),\n tracklist: z\n .array(\n z.object({\n position: z.string(),\n type_: z.string().optional(),\n title: z.string(),\n duration: z.string().optional(),\n extraartists: z.array(ArtistBasicSchema).optional(),\n }),\n )\n .optional(),\n artists: z.array(\n ArtistBasicSchema.extend({\n thumbnail_url: urlOrEmptySchema().optional(),\n }),\n ),\n});\n\nconst MasterReleaseVersionItemSchema = z.object({\n id: z.number().int(),\n label: z.string(),\n country: z.string(),\n title: z.string(),\n major_formats: z.array(z.string()),\n format: z.string(),\n catno: z.string(),\n released: z.string(),\n status: StatusSchema,\n resource_url: urlOrEmptySchema(),\n thumb: urlOrEmptySchema().optional(),\n stats: z.object({\n community: z\n .object({\n in_wantlist: z.number().int(),\n in_collection: z.number().int(),\n })\n .optional(),\n user: z\n .object({\n in_wantlist: z.number().int(),\n in_collection: z.number().int(),\n })\n .optional(),\n }),\n});\n\nexport const MasterReleaseVersionsResponseSchema = z.object({\n ...PaginatedResponseSchema(MasterReleaseVersionItemSchema, 'versions').shape,\n ...FilteredResponseSchema.shape,\n});\n\n/**\n * TypeScript type for a master release\n */\nexport type MasterRelease = z.infer<typeof MasterReleaseSchema>;\n\n/**\n * TypeScript type for a master release ID parameter\n */\nexport type MasterReleaseIdParam = z.infer<typeof MasterReleaseIdParamSchema>;\n\n/**\n * TypeScript type for a master release versions parameter\n */\nexport type MasterReleaseVersionsParam = z.infer<typeof MasterReleaseVersionsParamSchema>;\n\n/**\n * TypeScript type for a master release versions response\n */\nexport type MasterReleaseVersionsResponse = z.infer<typeof MasterReleaseVersionsResponseSchema>;\n","import { isDiscogsError } from '../errors.js';\nimport {\n MasterReleaseSchema,\n MasterReleaseVersionsResponseSchema,\n type MasterRelease,\n type MasterReleaseIdParam,\n type MasterReleaseVersionsParam,\n type MasterReleaseVersionsResponse,\n} from '../types/master.js';\nimport { DiscogsService } from './index.js';\n\n/**\n * Service for Discogs Master Release-related operations\n */\nexport class MasterReleaseService extends DiscogsService {\n constructor() {\n super('/masters');\n }\n\n /**\n * Get a master release\n *\n * @param params - Parameters containing the master release ID\n * @returns {MasterRelease} The master release information\n * @throws {DiscogsResourceNotFoundError} If the master release cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async get({ master_id }: MasterReleaseIdParam): Promise<MasterRelease> {\n try {\n const response = await this.request<MasterRelease>(`/${master_id}`);\n\n const validatedResponse = MasterReleaseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get master release: ${String(error)}`);\n }\n }\n\n /**\n * Retrieves a list of all Releases that are versions of this master\n *\n * @param params - Parameters containing the master release ID and optional query parameters\n * @returns {MasterReleaseVersionsResponse} The master release versions information\n * @throws {DiscogsResourceNotFoundError} If the master release versions cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async getVersions({\n master_id,\n ...options\n }: MasterReleaseVersionsParam): Promise<MasterReleaseVersionsResponse> {\n try {\n const response = await this.request<MasterReleaseVersionsResponse>(`/${master_id}/versions`, {\n params: options,\n });\n\n const validatedResponse = MasterReleaseVersionsResponseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get master release versions: ${String(error)}`);\n }\n }\n}\n","import { isDiscogsError } from '../errors.js';\nimport {\n type Release,\n type ReleaseIdParam,\n type ReleaseParams,\n type ReleaseRating,\n type ReleaseRatingCommunity,\n ReleaseRatingCommunitySchema,\n type ReleaseRatingEditParams,\n type ReleaseRatingParams,\n ReleaseRatingSchema,\n ReleaseSchema,\n} from '../types/release.js';\nimport { DiscogsService } from './index.js';\n\n/**\n * Service for Discogs Release-related operations\n */\nexport class ReleaseService extends DiscogsService {\n constructor() {\n super('/releases');\n }\n\n /**\n * Deletes the release's rating for a given user\n *\n * @param params - Parameters for the request\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to delete a release rating of another user\n * @throws {DiscogsResourceNotFoundError} If the release or user cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async deleteRatingByUser({ username, release_id }: ReleaseRatingParams): Promise<void> {\n try {\n await this.request<void>(`/${release_id}/rating/${username}`, {\n method: 'DELETE',\n });\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to delete release rating: ${String(error)}`);\n }\n }\n\n /**\n * Updates the release's rating for a given user\n *\n * @param params - Parameters for the request\n * @returns {ReleaseRating} The updated release rating\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to edit a release rating of another user\n * @throws {DiscogsResourceNotFoundError} If the release or user cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async editRatingByUser({\n username,\n release_id,\n rating,\n }: ReleaseRatingEditParams): Promise<ReleaseRating> {\n try {\n const response = await this.request<ReleaseRating>(`/${release_id}/rating/${username}`, {\n method: 'PUT',\n body: { rating },\n });\n\n const validatedResponse = ReleaseRatingSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to edit release rating: ${String(error)}`);\n }\n }\n\n /**\n * Get a release\n *\n * @param params - Parameters for the request\n * @returns {Release} The release information\n * @throws {DiscogsResourceNotFoundError} If the release cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async get({ release_id, ...options }: ReleaseParams): Promise<Release> {\n try {\n const response = await this.request<Release>(`/${release_id}`, {\n params: options,\n });\n\n const validatedResponse = ReleaseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n // If it's already a Discogs error, just rethrow it\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For validation errors or other unexpected errors, wrap them\n throw new Error(`Failed to get release: ${String(error)}`);\n }\n }\n\n /**\n * Retrieves the community release rating average and count\n *\n * @param params - Parameters for the request\n * @returns {ReleaseRatingCommunity} The release community rating\n * @throws {DiscogsResourceNotFoundError} If the release cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async getCommunityRating({ release_id }: ReleaseIdParam): Promise<ReleaseRatingCommunity> {\n try {\n const response = await this.request<ReleaseRatingCommunity>(`/${release_id}/rating`);\n\n const validatedResponse = ReleaseRatingCommunitySchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get release community rating: ${String(error)}`);\n }\n }\n\n /**\n * Retrieves the release's rating for a given user\n *\n * @param params - Parameters for the request\n * @returns {ReleaseRating} The release rating\n * @throws {DiscogsResourceNotFoundError} If the release or user cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async getRatingByUser({ username, release_id }: ReleaseRatingParams): Promise<ReleaseRating> {\n try {\n const response = await this.request<ReleaseRating>(`/${release_id}/rating/${username}`);\n\n const validatedResponse = ReleaseRatingSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get release rating: ${String(error)}`);\n }\n }\n}\n","import { FastMCP, Tool } from 'fastmcp';\nimport { formatDiscogsError } from '../errors.js';\nimport { ArtistService } from '../services/artist.js';\nimport { DatabaseService } from '../services/database.js';\nimport { LabelService } from '../services/label.js';\nimport { MasterReleaseService } from '../services/master.js';\nimport { ReleaseService } from '../services/release.js';\nimport { ArtistIdParamSchema, ArtistReleasesParamsSchema } from '../types/artist.js';\nimport { FastMCPSessionAuth } from '../types/common.js';\nimport { SearchParamsSchema } from '../types/database.js';\nimport { LabelIdParamSchema, LabelReleasesParamsSchema } from '../types/label.js';\nimport { MasterReleaseIdParamSchema, MasterReleaseVersionsParamSchema } from '../types/master.js';\nimport {\n ReleaseIdParamSchema,\n ReleaseParamsSchema,\n ReleaseRatingEditParamsSchema,\n ReleaseRatingParamsSchema,\n} from '../types/release.js';\n\n/**\n * MCP tool for deleting a release rating\n */\nexport const deleteReleaseRatingTool: Tool<FastMCPSessionAuth, typeof ReleaseRatingParamsSchema> = {\n name: 'delete_release_rating',\n description: `Deletes the release's rating for a given user`,\n parameters: ReleaseRatingParamsSchema,\n execute: async (args) => {\n try {\n const releaseService = new ReleaseService();\n await releaseService.deleteRatingByUser(args);\n\n return 'Release rating deleted successfully';\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for editing a release rating\n */\nexport const editReleaseRatingTool: Tool<FastMCPSessionAuth, typeof ReleaseRatingEditParamsSchema> =\n {\n name: 'edit_release_rating',\n description: `Updates the release's rating for a given user`,\n parameters: ReleaseRatingEditParamsSchema,\n execute: async (args) => {\n try {\n const releaseService = new ReleaseService();\n const releaseRating = await releaseService.editRatingByUser(args);\n\n return JSON.stringify(releaseRating);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n };\n\n/**\n * MCP tool for fetching a Discogs artist\n */\nexport const getArtistTool: Tool<FastMCPSessionAuth, typeof ArtistIdParamSchema> = {\n name: 'get_artist',\n description: 'Get an artist',\n parameters: ArtistIdParamSchema,\n execute: async (args) => {\n try {\n const artistService = new ArtistService();\n const artist = await artistService.get(args);\n\n return JSON.stringify(artist);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs artist releases\n */\nexport const getArtistReleasesTool: Tool<FastMCPSessionAuth, typeof ArtistReleasesParamsSchema> = {\n name: 'get_artist_releases',\n description: `Get an artist's releases`,\n parameters: ArtistReleasesParamsSchema,\n execute: async (args) => {\n try {\n const artistService = new ArtistService();\n const artistReleases = await artistService.getReleases(args);\n\n return JSON.stringify(artistReleases);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs label\n */\nexport const getLabelTool: Tool<FastMCPSessionAuth, typeof LabelIdParamSchema> = {\n name: 'get_label',\n description: 'Get a label',\n parameters: LabelIdParamSchema,\n execute: async (args) => {\n try {\n const labelService = new LabelService();\n const label = await labelService.get(args);\n\n return JSON.stringify(label);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs label releases\n */\nexport const getLabelReleasesTool: Tool<FastMCPSessionAuth, typeof LabelReleasesParamsSchema> = {\n name: 'get_label_releases',\n description: 'Returns a list of Releases associated with the label',\n parameters: LabelReleasesParamsSchema,\n execute: async (args) => {\n try {\n const labelService = new LabelService();\n const labelReleases = await labelService.getReleases(args);\n\n return JSON.stringify(labelReleases);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs master release\n */\nexport const getMasterReleaseTool: Tool<FastMCPSessionAuth, typeof MasterReleaseIdParamSchema> = {\n name: 'get_master_release',\n description: 'Get a master release',\n parameters: MasterReleaseIdParamSchema,\n execute: async (args) => {\n try {\n const masterReleaseService = new MasterReleaseService();\n const masterRelease = await masterReleaseService.get(args);\n\n return JSON.stringify(masterRelease);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching Discogs master release versions\n */\nexport const getMasterReleaseVersionsTool: Tool<\n FastMCPSessionAuth,\n typeof MasterReleaseVersionsParamSchema\n> = {\n name: 'get_master_release_versions',\n description: 'Retrieves a list of all Releases that are versions of this master',\n parameters: MasterReleaseVersionsParamSchema,\n execute: async (args) => {\n try {\n const masterReleaseService = new MasterReleaseService();\n const masterReleaseVersions = await masterReleaseService.getVersions(args);\n\n return JSON.stringify(masterReleaseVersions);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs release\n */\nexport const getReleaseTool: Tool<FastMCPSessionAuth, typeof ReleaseParamsSchema> = {\n name: 'get_release',\n description: 'Get a release',\n parameters: ReleaseParamsSchema,\n execute: async (args) => {\n try {\n const releaseService = new ReleaseService();\n const release = await releaseService.get(args);\n\n return JSON.stringify(release);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs release community rating\n */\nexport const getReleaseCommunityRatingTool: Tool<FastMCPSessionAuth, typeof ReleaseIdParamSchema> =\n {\n name: 'get_release_community_rating',\n description: 'Retrieves the release community rating average and count',\n parameters: ReleaseIdParamSchema,\n execute: async (args) => {\n try {\n const releaseService = new ReleaseService();\n const releaseRating = await releaseService.getCommunityRating(args);\n\n return JSON.stringify(releaseRating);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n };\n\n/**\n * MCP tool for fetching a Discogs release rating by user\n */\nexport const getReleaseRatingTool: Tool<FastMCPSessionAuth, typeof ReleaseRatingParamsSchema> = {\n name: 'get_release_rating_by_user',\n description: `Retrieves the release's rating for a given user`,\n parameters: ReleaseRatingParamsSchema,\n execute: async (args) => {\n try {\n const releaseService = new ReleaseService();\n const releaseRating = await releaseService.getRatingByUser(args);\n\n return JSON.stringify(releaseRating);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for searching the Discogs database\n */\nexport const searchTool: Tool<FastMCPSessionAuth, typeof SearchParamsSchema> = {\n name: 'search',\n description: 'Issue a search query to the Discogs database',\n parameters: SearchParamsSchema,\n execute: async (args) => {\n try {\n const databaseService = new DatabaseService();\n const searchResults = await databaseService.search(args);\n\n return JSON.stringify(searchResults);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\nexport function registerDatabaseTools(server: FastMCP): void {\n server.addTool(getReleaseTool);\n server.addTool(getReleaseRatingTool);\n server.addTool(editReleaseRatingTool);\n server.addTool(deleteReleaseRatingTool);\n server.addTool(getReleaseCommunityRatingTool);\n server.addTool(getMasterReleaseTool);\n server.addTool(getMasterReleaseVersionsTool);\n server.addTool(getArtistTool);\n server.addTool(getArtistReleasesTool);\n server.addTool(getLabelTool);\n server.addTool(getLabelReleasesTool);\n server.addTool(searchTool);\n}\n","import { z } from 'zod';\nimport { urlOrEmptySchema } from '../utils.js';\nimport { PaginatedResponseSchema } from './common.js';\n\nexport const InventoryIdParamSchema = z.object({\n id: z.number(),\n});\n\nexport const InventoryExportItemSchema = z.object({\n status: z.string(),\n created_ts: z.string().nullable(),\n url: urlOrEmptySchema(),\n finished_ts: z.string().nullable(),\n download_url: urlOrEmptySchema(),\n filename: z.string(),\n id: z.number(),\n});\n\nexport const InventoryExportsResponseSchema = PaginatedResponseSchema(\n InventoryExportItemSchema,\n 'items',\n);\n\nexport type InventoryIdParam = z.infer<typeof InventoryIdParamSchema>;\nexport type InventoryExportItem = z.infer<typeof InventoryExportItemSchema>;\nexport type InventoryExportsResponse = z.infer<typeof InventoryExportsResponseSchema>;\n","import { isDiscogsError } from '../errors.js';\nimport {\n type InventoryExportItem,\n InventoryExportItemSchema,\n type InventoryExportsResponse,\n InventoryExportsResponseSchema,\n type InventoryIdParam,\n} from '../types/inventory.js';\nimport { DiscogsService } from './index.js';\n\nexport class InventoryService extends DiscogsService {\n constructor() {\n super('/inventory');\n }\n\n /**\n * Download an inventory export as a CSV\n *\n * @param {InventoryIdParam} params - The parameters for the request\n * @returns {string} The inventory export as a CSV\n * @throws {DiscogsAuthenticationError} If the request is not authenticated\n * @throws {DiscogsResourceNotFoundError} If the inventory export does not exist\n * @throws {Error} If there's an unexpected error\n */\n async downloadExport({ id }: InventoryIdParam): Promise<string> {\n try {\n const response = await this.request<string>(`/export/${id}/download`);\n return response;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n throw new Error(`Failed to download inventory export: ${String(error)}`);\n }\n }\n\n /**\n * Request an export of your inventory as a CSV\n *\n * @returns {void}\n * @throws {DiscogsAuthenticationError} If the request is not authenticated\n * @throws {Error} If there's an unexpected error\n */\n async export(): Promise<void> {\n try {\n await this.request<void>('/export', {\n method: 'POST',\n });\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n throw new Error(`Failed to export inventory: ${String(error)}`);\n }\n }\n\n /**\n * Get details about an inventory export\n *\n * @param {InventoryIdParam} params - The parameters for the request\n * @returns {InventoryExportItem} The inventory export item\n * @throws {DiscogsAuthenticationError} If the request is not authenticated\n * @throws {DiscogsResourceNotFoundError} If the inventory export does not exist\n * @throws {Error} If there's an unexpected error\n */\n async getExport({ id }: InventoryIdParam): Promise<InventoryExportItem> {\n try {\n const response = await this.request<InventoryExportItem>(`/export/${id}`);\n const validatedResponse = InventoryExportItemSchema.parse(response);\n\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n throw new Error(`Failed to get inventory export: ${String(error)}`);\n }\n }\n\n /**\n * Get a list of all recent exports of your inventory\n *\n * @returns {InventoryExportsResponse} The inventory exports\n * @throws {DiscogsAuthenticationError} If the request is not authenticated\n * @throws {Error} If there's an unexpected error\n */\n async getExports(): Promise<InventoryExportsResponse> {\n try {\n const response = await this.request<InventoryExportsResponse>('/export');\n\n const validatedResponse = InventoryExportsResponseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n throw new Error(`Failed to get inventory exports: ${String(error)}`);\n }\n }\n}\n","import type { FastMCP, Tool, ToolParameters } from 'fastmcp';\nimport { z } from 'zod';\nimport { formatDiscogsError } from '../errors.js';\nimport { InventoryService } from '../services/inventory.js';\nimport { FastMCPSessionAuth } from '../types/common.js';\nimport { InventoryIdParamSchema } from '../types/inventory.js';\n\n/**\n * MCP tool for downloading an inventory export as a CSV\n */\nexport const downloadInventoryExportTool: Tool<FastMCPSessionAuth, typeof InventoryIdParamSchema> =\n {\n name: 'download_inventory_export',\n description: 'Download an inventory export as a CSV',\n parameters: InventoryIdParamSchema,\n execute: async (args) => {\n try {\n const inventoryService = new InventoryService();\n const csv = await inventoryService.downloadExport(args);\n\n return csv;\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n };\n\n/**\n * MCP tool for getting a specific inventory export by ID\n */\nexport const getInventoryExportTool: Tool<FastMCPSessionAuth, typeof InventoryIdParamSchema> = {\n name: 'get_inventory_export',\n description: 'Get details about an inventory export',\n parameters: InventoryIdParamSchema,\n execute: async (args) => {\n try {\n const inventoryService = new InventoryService();\n const exportItem = await inventoryService.getExport(args);\n\n return JSON.stringify(exportItem);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for getting a list of inventory exports\n */\nexport const getInventoryExportsTool: Tool<FastMCPSessionAuth, ToolParameters> = {\n name: 'get_inventory_exports',\n description: 'Get a list of all recent exports of your inventory',\n parameters: z.object({}),\n execute: async () => {\n try {\n const inventoryService = new InventoryService();\n const exports = await inventoryService.getExports();\n\n return JSON.stringify(exports);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for exporting your inventory as a CSV\n */\nexport const inventoryExportTool: Tool<FastMCPSessionAuth, ToolParameters> = {\n name: 'inventory_export',\n description: 'Request an export of your inventory as a CSV',\n parameters: z.object({}),\n execute: async () => {\n try {\n const inventoryService = new InventoryService();\n await inventoryService.export();\n\n return 'Inventory export requested';\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\nexport function registerInventoryExportTool(server: FastMCP): void {\n server.addTool(inventoryExportTool);\n server.addTool(getInventoryExportsTool);\n server.addTool(getInventoryExportTool);\n server.addTool(downloadInventoryExportTool);\n}\n","import { z } from 'zod';\nimport { urlOrEmptySchema } from '../utils.js';\nimport {\n CurrencyCodeSchema,\n ImageSchema,\n PaginatedResponseSchema,\n QueryParamsSchema,\n} from './common.js';\n\nconst ConditionSchema = z.enum([\n 'Mint (M)',\n 'Near Mint (NM or M-)',\n 'Very Good Plus (VG+)',\n 'Very Good (VG)',\n 'Good Plus (G+)',\n 'Good (G)',\n 'Fair (F)',\n 'Poor (P)',\n]);\n\nconst SleeveConditionSchema = z.enum([\n ...ConditionSchema.options,\n 'Generic',\n 'Not Graded',\n 'No Cover',\n]);\n\nconst OrderStatusSchema = z.enum([\n 'New Order',\n 'Buyer Contacted',\n 'Invoice Sent',\n 'Payment Pending',\n 'Payment Received',\n 'Shipped',\n 'Refund Sent',\n 'Cancelled (Non-Paying Buyer)',\n 'Cancelled (Item Unavailable)',\n `Cancelled (Per Buyer's Request)`,\n]);\n\nconst ListingReleaseSchema = z.object({\n catalog_number: z.string().optional(),\n resource_url: urlOrEmptySchema(),\n year: z.number(),\n id: z.number().int(),\n description: z.string(),\n images: z.array(ImageSchema).optional(),\n artist: z.string(),\n title: z.string(),\n format: z.string(),\n thumbnail: urlOrEmptySchema(),\n stats: z.object({\n community: z.object({\n in_wantlist: z.number().int(),\n in_collection: z.number().int(),\n }),\n user: z\n .object({\n in_wantlist: z.number().int(),\n in_collection: z.number().int(),\n })\n .optional(),\n }),\n});\n\nexport const PriceSchema = z.object({\n currency: CurrencyCodeSchema.optional(),\n value: z.number().optional(),\n});\n\nexport const OriginalPriceSchema = z.object({\n curr_abbr: CurrencyCodeSchema.optional(),\n curr_id: z.number().optional(),\n formatted: z.string().optional(),\n value: z.number().optional(),\n});\n\nexport const OrderMessageSchema = z.object({\n timestamp: z.string().optional(),\n message: z.string(),\n type: z.string().optional(),\n order: z.object({\n id: z.number(),\n resource_url: urlOrEmptySchema(),\n }),\n subject: z.string().optional(),\n refund: z\n .object({\n amount: z.number(),\n order: z.object({\n id: z.number(),\n resource_url: urlOrEmptySchema(),\n }),\n })\n .optional(),\n from: z\n .object({\n id: z.number().optional(),\n resource_url: urlOrEmptySchema(),\n username: z.string(),\n avatar_url: urlOrEmptySchema().optional(),\n })\n .optional(),\n status_id: z.number().optional(),\n actor: z\n .object({\n username: z.string(),\n resource_url: urlOrEmptySchema(),\n })\n .optional(),\n original: z.number().optional(),\n new: z.number().optional(),\n});\n\nexport const SaleStatusSchema = z.enum(['For Sale', 'Expired', 'Draft', 'Pending']);\n\n/**\n * The listing schema\n */\nexport const ListingSchema = z.object({\n id: z.number(),\n resource_url: z.string().url(),\n uri: z.string().url(),\n status: SaleStatusSchema,\n condition: z.string(),\n sleeve_condition: z.string(),\n comments: z.string().optional(),\n ships_from: z.string(),\n posted: z.string(),\n allow_offers: z.boolean(),\n offer_submitted: z.boolean().optional(),\n audio: z.boolean(),\n price: PriceSchema,\n original_price: OriginalPriceSchema,\n shipping_price: PriceSchema.optional(),\n original_shipping_price: OriginalPriceSchema.optional(),\n seller: z.object({\n id: z.number(),\n username: z.string(),\n resource_url: urlOrEmptySchema().optional(),\n avatar_url: urlOrEmptySchema().optional(),\n stats: z.object({\n rating: z.string(),\n stars: z.number(),\n total: z.number(),\n }),\n min_order_total: z.number(),\n html_url: urlOrEmptySchema(),\n uid: z.number(),\n url: urlOrEmptySchema(),\n payment: z.string(),\n shipping: z.string(),\n }),\n release: ListingReleaseSchema,\n});\n\n/**\n * The listing ID parameter schema\n */\nexport const ListingIdParamSchema = z.object({\n listing_id: z.number().int(),\n});\n\n/**\n * The listing get parameters schema\n */\nexport const ListingGetParamsSchema = ListingIdParamSchema.extend({\n curr_abbr: CurrencyCodeSchema.optional(),\n});\n\nexport const ListingNewParamsSchema = z.object({\n release_id: z.number().int(),\n condition: ConditionSchema,\n sleeve_condition: SleeveConditionSchema.optional(),\n price: z.number(),\n comments: z.string().optional(),\n allow_offers: z.boolean().optional(),\n status: SaleStatusSchema,\n external_id: z.string().optional(),\n location: z.string().optional(),\n weight: z.number().optional(),\n format_quantity: z.number().optional(),\n});\n\nexport const ListingNewResponseSchema = z.object({\n listing_id: z.number().int(),\n resource_url: z.string().url(),\n});\n\nexport const ListingUpdateParamsSchema = ListingIdParamSchema.merge(ListingNewParamsSchema);\n\nexport const OrderIdParamSchema = z.object({\n order_id: z.number(),\n});\n\nexport const OrderCreateMessageParamsSchema = OrderIdParamSchema.extend({\n message: z.string().optional(),\n status: OrderStatusSchema.optional(),\n});\n\nexport const OrderEditParamsSchema = OrderIdParamSchema.extend({\n status: OrderStatusSchema.optional(),\n shipping: z.number().optional(),\n});\n\nexport const OrderMessagesParamsSchema = QueryParamsSchema().merge(OrderIdParamSchema);\n\nexport const OrderMessagesResponseSchema = PaginatedResponseSchema(OrderMessageSchema, 'messages');\n\nexport const OrdersParamsSchema = z\n .object({\n status: OrderStatusSchema.optional(),\n created_after: z.string().optional(),\n created_before: z.string().optional(),\n archived: z.boolean().optional(),\n })\n .merge(QueryParamsSchema(['id', 'buyer', 'created', 'status', 'last_activity'] as const));\n\nexport const OrderResponseSchema = z.object({\n id: z.number(),\n resource_url: urlOrEmptySchema(),\n messages_url: urlOrEmptySchema(),\n uri: urlOrEmptySchema(),\n status: OrderStatusSchema,\n next_status: z.array(OrderStatusSchema),\n fee: PriceSchema,\n created: z.string(),\n items: z.array(\n z.object({\n release: z.object({\n id: z.number(),\n description: z.string().optional(),\n }),\n price: PriceSchema,\n media_condition: ConditionSchema,\n sleeve_condition: SleeveConditionSchema.optional(),\n id: z.number(),\n }),\n ),\n shipping: z.object({\n currency: CurrencyCodeSchema,\n method: z.string(),\n value: z.number(),\n }),\n shipping_address: z.string(),\n address_instructions: z.string().optional(),\n archived: z.boolean().optional(),\n seller: z.object({\n id: z.number(),\n username: z.string(),\n resource_url: urlOrEmptySchema().optional(),\n }),\n last_activity: z.string().optional(),\n buyer: z.object({\n id: z.number(),\n username: z.string(),\n resource_url: urlOrEmptySchema().optional(),\n }),\n total: PriceSchema,\n});\n\nexport const OrdersResponseSchema = PaginatedResponseSchema(OrderResponseSchema, 'orders');\n\nexport const ReleaseStatsResponseSchema = z.object({\n lowest_price: PriceSchema.nullable().optional(),\n num_for_sale: z.number().nullable().optional(),\n blocked_from_sale: z.boolean(),\n});\n\n/**\n * The listing ID parameter type\n */\nexport type ListingIdParam = z.infer<typeof ListingIdParamSchema>;\n\n/**\n * The listing get parameters type\n */\nexport type ListingGetParams = z.infer<typeof ListingGetParamsSchema>;\n\n/**\n * The listing new parameters type\n */\nexport type ListingNewParams = z.infer<typeof ListingNewParamsSchema>;\n\n/**\n * The listing new response type\n */\nexport type ListingNewResponse = z.infer<typeof ListingNewResponseSchema>;\n\n/**\n * The listing update parameters type\n */\nexport type ListingUpdateParams = z.infer<typeof ListingUpdateParamsSchema>;\n\n/**\n * The listing schema\n */\nexport type Listing = z.infer<typeof ListingSchema>;\n\n/**\n * The order ID parameter type\n */\nexport type OrderIdParam = z.infer<typeof OrderIdParamSchema>;\n\n/**\n * The order create message parameters type\n */\nexport type OrderCreateMessageParams = z.infer<typeof OrderCreateMessageParamsSchema>;\n\n/**\n * The order edit parameters type\n */\nexport type OrderEditParams = z.infer<typeof OrderEditParamsSchema>;\n\n/**\n * The order messages parameters type\n */\nexport type OrderMessagesParams = z.infer<typeof OrderMessagesParamsSchema>;\n\n/**\n * The order message type\n */\nexport type OrderMessageResponse = z.infer<typeof OrderMessageSchema>;\n\n/**\n * The order messages response type\n */\nexport type OrderMessagesResponse = z.infer<typeof OrderMessagesResponseSchema>;\n\n/**\n * The orders parameters type\n */\nexport type OrdersParams = z.infer<typeof OrdersParamsSchema>;\n\n/**\n * The order response type\n */\nexport type OrderResponse = z.infer<typeof OrderResponseSchema>;\n\n/**\n * The orders response type\n */\nexport type OrdersResponse = z.infer<typeof OrdersResponseSchema>;\n\n/**\n * The release stats response type\n */\nexport type ReleaseStatsResponse = z.infer<typeof ReleaseStatsResponseSchema>;\n","import { isDiscogsError } from '../errors.js';\nimport {\n type Listing,\n type ListingGetParams,\n type ListingIdParam,\n type ListingNewParams,\n type ListingNewResponse,\n ListingNewResponseSchema,\n ListingSchema,\n type ListingUpdateParams,\n OrderCreateMessageParams,\n type OrderEditParams,\n type OrderIdParam,\n type OrderMessageResponse,\n OrderMessageSchema,\n type OrderMessagesParams,\n type OrderMessagesResponse,\n OrderMessagesResponseSchema,\n type OrderResponse,\n OrderResponseSchema,\n type OrdersParams,\n type OrdersResponse,\n OrdersResponseSchema,\n type ReleaseStatsResponse,\n ReleaseStatsResponseSchema,\n} from '../types/marketplace.js';\nimport type { ReleaseParams } from '../types/release.js';\nimport { DiscogsService } from './index.js';\n\nexport class MarketplaceService extends DiscogsService {\n constructor() {\n super('/marketplace');\n }\n\n /**\n * Create a new marketplace listing\n *\n * @param params - Parameters containing the listing data\n * @returns {ListingNewResponse} The listing information\n * @throws {DiscogsAuthenticationError} If the user is not authenticated\n * @throws {DiscogsPermissionError} If the user does not have permission to create a listing\n * @throws {Error} If there's an unexpected error\n */\n async createListing(params: ListingNewParams): Promise<ListingNewResponse> {\n try {\n const response = await this.request<ListingNewResponse>(`/listings`, {\n method: 'POST',\n body: params,\n });\n\n const validatedResponse = ListingNewResponseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to create listing: ${String(error)}`);\n }\n }\n\n /**\n * Adds a new message to the order's message log\n *\n * @param params - Parameters containing the order ID and the message data\n * @returns {OrderMessageResponse} The order message information\n * @throws {DiscogsAuthenticationError} If the user is not authenticated\n * @throws {DiscogsPermissionError} If the user does not have permission to create a message\n * @throws {DiscogsResourceNotFoundError} If the order cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async createOrderMessage({\n order_id,\n ...body\n }: OrderCreateMessageParams): Promise<OrderMessageResponse> {\n try {\n const response = await this.request<OrderMessageResponse>(`/orders/${order_id}/messages`, {\n method: 'POST',\n body,\n });\n\n const validatedResponse = OrderMessageSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to create order message: ${String(error)}`);\n }\n }\n\n /**\n * Delete a listing from the marketplace\n *\n * @param params - Parameters containing the listing ID\n * @throws {DiscogsAuthenticationError} If the user is not authenticated\n * @throws {DiscogsPermissionError} If the user does not have permission to delete a listing\n * @throws {DiscogsResourceNotFoundError} If the listing cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async deleteListing({ listing_id }: ListingIdParam): Promise<void> {\n try {\n await this.request<void>(`/listings/${listing_id}`, {\n method: 'DELETE',\n });\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to delete listing: ${String(error)}`);\n }\n }\n\n /**\n * The Listing resource allows you to view Marketplace listings\n *\n * @param params - Parameters containing the listing ID and optional currency code\n * @returns {Listing} The listing information\n * @throws {DiscogsResourceNotFoundError} If the listing cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async getListing({ listing_id, ...options }: ListingGetParams): Promise<Listing> {\n try {\n const response = await this.request<Listing>(`/listings/${listing_id}`, {\n params: options,\n });\n\n const validatedResponse = ListingSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get listing: ${String(error)}`);\n }\n }\n\n /**\n * Get a marketplace order\n *\n * @param params - Parameters containing the order ID\n * @throws {DiscogsAuthenticationError} If the user is not authenticated\n * @throws {DiscogsPermissionError} If the user does not have permission to view the order\n * @throws {DiscogsResourceNotFoundError} If the order cannot be found\n * @throws {Error} If there's an unexpected error\n * @returns {OrderResponse} The order information\n */\n async getOrder({ order_id }: OrderIdParam): Promise<OrderResponse> {\n try {\n const response = await this.request<OrderResponse>(`/orders/${order_id}`);\n\n const validatedResponse = OrderResponseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get order: ${String(error)}`);\n }\n }\n\n /**\n * Get a list of an order's messages\n *\n * @param params - OrderMessagesParams\n * @throws {DiscogsAuthenticationError} If the user is not authenticated\n * @throws {DiscogsPermissionError} If the user does not have permission to view the order messages\n * @throws {DiscogsResourceNotFoundError} If the order cannot be found\n * @throws {Error} If there's an unexpected error\n * @returns {OrderMessagesResponse} The order messages\n */\n async getOrderMessages({\n order_id,\n ...options\n }: OrderMessagesParams): Promise<OrderMessagesResponse> {\n try {\n const response = await this.request<OrderMessagesResponse>(`/orders/${order_id}/messages`, {\n params: options,\n });\n\n const validatedResponse = OrderMessagesResponseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get order messages: ${String(error)}`);\n }\n }\n\n /**\n * Get a list of marketplace orders\n *\n * @param params - OrdersParams\n * @throws {DiscogsAuthenticationError} If the user is not authenticated\n * @throws {DiscogsPermissionError} If the user does not have permission to view the orders\n * @throws {Error} If there's an unexpected error\n * @returns {OrdersResponse} The order information\n */\n async getOrders(params: OrdersParams): Promise<OrdersResponse> {\n try {\n const response = await this.request<OrdersResponse>(`/orders`, {\n params,\n });\n\n const validatedResponse = OrdersResponseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get orders: ${String(error)}`);\n }\n }\n\n /**\n * Retrieve marketplace statistics for the provided Release ID\n *\n * @param params - Parameters containing the release ID and optional currency code\n * @throws {DiscogsResourceNotFoundError} If the release cannot be found\n * @throws {Error} If there's an unexpected error\n * @returns {ReleaseStatsResponse} The release stats\n */\n async getReleaseStats({ release_id, ...options }: ReleaseParams): Promise<ReleaseStatsResponse> {\n try {\n const response = await this.request<ReleaseStatsResponse>(`/stats/${release_id}`, {\n params: options,\n });\n\n const validatedResponse = ReleaseStatsResponseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get release stats: ${String(error)}`);\n }\n }\n\n /**\n * Edit a marketplace order\n *\n * @param params - Parameters containing the order ID and the order data\n * @throws {DiscogsAuthenticationError} If the user is not authenticated\n * @throws {DiscogsPermissionError} If the user does not have permission to edit the order\n * @throws {DiscogsResourceNotFoundError} If the order cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async editOrder({ order_id, ...body }: OrderEditParams): Promise<OrderResponse> {\n try {\n const response = await this.request<OrderResponse>(`/orders/${order_id}`, {\n method: 'POST',\n body,\n });\n\n const validatedResponse = OrderResponseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to edit order: ${String(error)}`);\n }\n }\n\n /**\n * Update a marketplace listing\n *\n * @param params - Parameters containing the listing ID and the listing data\n * @throws {DiscogsAuthenticationError} If the user is not authenticated\n * @throws {DiscogsResourceNotFoundError} If the listing cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async updateListing({ listing_id, ...body }: ListingUpdateParams): Promise<void> {\n try {\n await this.request<void>(`/listings/${listing_id}`, {\n method: 'POST',\n body,\n });\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to update listing: ${String(error)}`);\n }\n }\n}\n","import { z } from 'zod';\nimport { PaginatedResponseSchema, QueryParamsSchema, UsernameInputSchema } from '../common.js';\nimport { BasicInformationSchema, ReleaseIdParamSchema } from '../release.js';\n\n/**\n * Schema for a folder_id parameter with optional minimum value\n * @param min Optional minimum value for the folder_id\n */\nexport const FolderIdParamSchema = (min?: number) =>\n z.object({\n folder_id: z\n .number()\n .int()\n .min(min ?? 0),\n });\n\n/**\n * Schema for custom fields in a user's collection\n */\nexport const UserCollectionCustomFieldsSchema = z.object({\n fields: z.array(\n z.object({\n id: z.number().int(),\n lines: z.number().int().optional(),\n name: z.string(),\n options: z.array(z.string()).optional(),\n position: z.number().int(),\n public: z.boolean(),\n type: z.string(),\n }),\n ),\n});\n\n/**\n * Schema for a Discogs user collection custom field edit parameters\n */\nexport const UserCollectionCustomFieldEditParamsSchema = UsernameInputSchema.merge(\n FolderIdParamSchema().extend({\n value: z.string(),\n release_id: z.union([z.number(), z.string()]),\n instance_id: z.union([z.number(), z.string()]),\n field_id: z.number(),\n }),\n);\n\n/**\n * Schema for a Discogs user collection folder\n */\nexport const UserCollectionFolderSchema = z.object({\n id: z.number(),\n count: z.number(),\n name: z.string(),\n resource_url: z.string().url(),\n});\n\n/**\n * Schema for a Discogs user collection folders response\n */\nexport const UserCollectionFoldersSchema = z.object({\n folders: z.array(UserCollectionFolderSchema),\n});\n\n/**\n * Schema for a Discogs user collection folder create parameters\n */\nexport const UserCollectionFolderCreateParamsSchema = UsernameInputSchema.extend({\n name: z.string().optional(),\n});\n\nexport const UserCollectionFolderEditParamsSchema =\n UserCollectionFolderCreateParamsSchema.merge(FolderIdParamSchema());\n\n/**\n * Schema for a Discogs user collection folder get/delete parameters\n */\nexport const UserCollectionFolderParamsSchema = UsernameInputSchema.merge(FolderIdParamSchema());\n\n/**\n * Schema for a Discogs user collection folder release parameters\n */\nexport const UserCollectionFolderReleaseParamsSchema = UsernameInputSchema.merge(\n FolderIdParamSchema(1).merge(ReleaseIdParamSchema),\n);\n\n/**\n * Schema for a Discogs user collection items parameters\n */\nexport const UserCollectionItemsParamsSchema = UsernameInputSchema.merge(\n FolderIdParamSchema().merge(\n QueryParamsSchema([\n 'added',\n 'artist',\n 'catno',\n 'format',\n 'label',\n 'rating',\n 'title',\n 'year',\n ] as const),\n ),\n);\n\n/**\n * Schema for a Discogs user collection release added\n */\nexport const UserCollectionReleaseAddedSchema = z.object({\n instance_id: z.number().int(),\n resource_url: z.string().url(),\n});\n\n/**\n * Schema for a Discogs user collection release parameters\n */\nexport const UserCollectionReleaseParamsSchema = UsernameInputSchema.merge(\n ReleaseIdParamSchema.merge(QueryParamsSchema()),\n);\n\n/**\n * Schema for a Discogs user collection release deleted parameters\n */\nexport const UserCollectionReleaseDeletedParamsSchema =\n UserCollectionFolderReleaseParamsSchema.extend({\n instance_id: z.number().int(),\n });\n\n/**\n * Schema for a Discogs user collection release item\n */\nexport const UserCollectionReleaseItemSchema = z.object({\n id: z.number(),\n instance_id: z.number(),\n basic_information: BasicInformationSchema,\n date_added: z.string().optional(),\n folder_id: z.number(),\n notes: z\n .array(\n z.object({\n field_id: z.number(),\n value: z.string(),\n }),\n )\n .optional(),\n rating: z.number().int().optional(),\n});\n\n/**\n * Schema for a Discogs user collection release rating parameters\n */\nexport const UserCollectionReleaseRatingParamsSchema =\n UserCollectionReleaseDeletedParamsSchema.extend({\n rating: z.number().int().min(1).max(5).optional(),\n });\n\n/**\n * Schema for a Discogs user collection move release parameters\n */\nexport const UserCollectionMoveReleaseParamsSchema =\n UserCollectionReleaseDeletedParamsSchema.extend({\n destination_folder_id: z.number(),\n });\n\n/**\n * Schema for releases in a user's collection\n */\nexport const UserCollectionItemsByReleaseSchema = PaginatedResponseSchema(\n UserCollectionReleaseItemSchema,\n 'releases',\n);\n\n/**\n * Schema for a user's collection value statistics\n */\nexport const UserCollectionValueSchema = z.object({\n maximum: z.string(),\n median: z.string(),\n minimum: z.string(),\n});\n\n/**\n * TypeScript type for custom fields in a user's collection\n */\nexport type UserCollectionCustomFields = z.infer<typeof UserCollectionCustomFieldsSchema>;\n\n/**\n * TypeScript type for a Discogs user collection custom field edit parameters\n */\nexport type UserCollectionCustomFieldEditParams = z.infer<\n typeof UserCollectionCustomFieldEditParamsSchema\n>;\n\n/**\n * TypeScript type for a Discogs user collection folder\n */\nexport type UserCollectionFolder = z.infer<typeof UserCollectionFolderSchema>;\n\n/**\n * TypeScript type for a Discogs user collection folder create parameters\n */\nexport type UserCollectionFolderCreateParams = z.infer<\n typeof UserCollectionFolderCreateParamsSchema\n>;\n\n/**\n * TypeScript type for a Discogs user collection folder edit parameters\n */\nexport type UserCollectionFolderEditParams = z.infer<typeof UserCollectionFolderEditParamsSchema>;\n\n/**\n * TypeScript type for a Discogs user collection folder get/edit/delete parameters\n */\nexport type UserCollectionFolderParams = z.infer<typeof UserCollectionFolderParamsSchema>;\n\n/**\n * TypeScript type for a Discogs user collection folder release parameters\n */\nexport type UserCollectionFolderReleaseParams = z.infer<\n typeof UserCollectionFolderReleaseParamsSchema\n>;\n\n/**\n * TypeScript type for a Discogs user collection folders response\n */\nexport type UserCollectionFolders = z.infer<typeof UserCollectionFoldersSchema>;\n\n/**\n * TypeScript type for a Discogs user collection items parameters\n */\nexport type UserCollectionItemsParams = z.infer<typeof UserCollectionItemsParamsSchema>;\n\n/**\n * TypeScript type for a Discogs user collection release added\n */\nexport type UserCollectionReleaseAdded = z.infer<typeof UserCollectionReleaseAddedSchema>;\n\n/**\n * TypeScript type for a Discogs user collection release parameters\n */\nexport type UserCollectionReleaseParams = z.infer<typeof UserCollectionReleaseParamsSchema>;\n\n/**\n * TypeScript type for a Discogs user collection release deleted parameters\n */\nexport type UserCollectionReleaseDeletedParams = z.infer<\n typeof UserCollectionReleaseDeletedParamsSchema\n>;\n\n/**\n * TypeScript type for a Discogs user collection release item\n */\nexport type UserCollectionReleaseItem = z.infer<typeof UserCollectionReleaseItemSchema>;\n\n/**\n * TypeScript type for a Discogs user collection release rating parameters\n */\nexport type UserCollectionReleaseRatingParams = z.infer<\n typeof UserCollectionReleaseRatingParamsSchema\n>;\n\n/**\n * TypeScript type for a Discogs user collection move release parameters\n */\nexport type UserCollectionMoveReleaseParams = z.infer<typeof UserCollectionMoveReleaseParamsSchema>;\n\n/**\n * TypeScript type for a Discogs user's collection items by release\n */\nexport type UserCollectionItemsByRelease = z.infer<typeof UserCollectionItemsByReleaseSchema>;\n\n/**\n * TypeScript type for a Discogs user's collection value statistics\n */\nexport type UserCollectionValue = z.infer<typeof UserCollectionValueSchema>;\n","import { z } from 'zod';\nimport { PaginatedResponseSchema, QueryParamsSchema, UsernameInputSchema } from '../common.js';\nimport { ListingSchema, SaleStatusSchema } from '../marketplace.js';\n\nexport const UserInventoryGetParamsSchema = UsernameInputSchema.extend({\n status: SaleStatusSchema.optional(),\n}).merge(\n QueryParamsSchema([\n 'listed',\n 'price',\n 'item',\n 'artist',\n 'label',\n 'catno',\n 'audio',\n 'status',\n 'location',\n ]),\n);\n\nexport const UserInventoryResponseSchema = PaginatedResponseSchema(ListingSchema, 'listings');\n\nexport type UserInventoryGetParams = z.infer<typeof UserInventoryGetParamsSchema>;\n\nexport type UserInventoryResponse = z.infer<typeof UserInventoryResponseSchema>;\n","import { z } from 'zod';\nimport { PaginatedResponseSchema, QueryParamsSchema, UsernameInputSchema } from '../common.js';\n\n/**\n * Schema for a user's list item\n */\nexport const UserListItemSchema = z.object({\n id: z.number(),\n date_added: z.string(),\n date_changed: z.string(),\n description: z.string().optional(),\n name: z.string(),\n public: z.boolean(),\n resource_url: z.string().url(),\n uri: z.string().url(),\n});\n\n/**\n * Schema for lists query parameters\n */\nexport const UserListsParamsSchema = UsernameInputSchema.merge(QueryParamsSchema());\n\n/**\n * Schema for paginated user lists response\n */\nexport const UserListsSchema = PaginatedResponseSchema(UserListItemSchema, 'lists');\n\n/**\n * Type for a user's list item\n */\nexport type UserListItem = z.infer<typeof UserListItemSchema>;\n\n/**\n * TypeScript type for lists query parameters\n */\nexport type UserListsParams = z.infer<typeof UserListsParamsSchema>;\n\n/**\n * Type for paginated user lists response\n */\nexport type UserLists = z.infer<typeof UserListsSchema>;\n","import { z } from 'zod';\nimport { urlOrEmptySchema } from '../../utils.js';\nimport { CurrencyCodeSchema, UsernameInputSchema } from '../common.js';\n\n/**\n * Schema for a Discogs user profile\n * The email field is optional and only present when viewing your own profile\n * Some fields like num_collection, num_wantlist, and num_unread are optional\n * and may not be present in all responses\n */\nexport const UserProfileSchema = z.object({\n id: z.number(),\n resource_url: z.string().url(),\n uri: z.string().url(),\n username: z.string(),\n name: z.string(),\n home_page: z.string(),\n location: z.string(),\n profile: z.string(),\n registered: z.string(),\n rank: z.number(),\n num_pending: z.number(),\n num_for_sale: z.number(),\n num_lists: z.number(),\n releases_contributed: z.number(),\n releases_rated: z.number(),\n rating_avg: z.number(),\n inventory_url: z.string().url(),\n collection_folders_url: z.string().url(),\n collection_fields_url: z.string().url(),\n wantlist_url: z.string().url(),\n avatar_url: z.string().url(),\n curr_abbr: z.string(),\n activated: z.boolean(),\n marketplace_suspended: z.boolean(),\n banner_url: z.string(),\n buyer_rating: z.number(),\n buyer_rating_stars: z.number(),\n buyer_num_ratings: z.number(),\n seller_rating: z.number(),\n seller_rating_stars: z.number(),\n seller_num_ratings: z.number(),\n is_staff: z.boolean(),\n // Optional fields that may appear in some responses\n email: z.string().email().optional(),\n num_collection: z.number().optional(),\n num_wantlist: z.number().optional(),\n num_unread: z.number().optional(),\n});\n\n/**\n * Schema for editing a Discogs user profile\n */\nexport const UserProfileEditInputSchema = z.object({\n ...UsernameInputSchema.shape,\n name: z.string().optional(),\n home_page: urlOrEmptySchema().optional(),\n location: z.string().optional(),\n profile: z.string().optional(),\n curr_abbr: CurrencyCodeSchema.optional(),\n});\n\n/**\n * TypeScript type for a Discogs user profile\n */\nexport type UserProfile = z.infer<typeof UserProfileSchema>;\n\n/**\n * TypeScript type for a Discogs user profile edit input\n */\nexport type UserProfileEditInput = z.infer<typeof UserProfileEditInputSchema>;\n","import { z } from 'zod';\nimport { PaginatedResponseSchema, QueryParamsSchema, UsernameInputSchema } from '../common.js';\nimport { BasicInformationSchema, ReleaseIdParamSchema } from '../release.js';\n\n/**\n * Schema for wantlist query parameters\n */\nexport const UserWantlistParamsSchema = UsernameInputSchema.merge(\n QueryParamsSchema(['added', 'artist', 'label', 'rating', 'title', 'year'] as const),\n);\n\n/**\n * Schema for a wantlist item\n */\nexport const UserWantlistItemSchema = z.object({\n id: z.number(),\n basic_information: BasicInformationSchema,\n notes: z.string().optional(),\n rating: z.number().int().min(0).max(5).optional(),\n resource_url: z.string().url(),\n});\n\n/**\n * Schema for a Discogs user wantlist\n */\nexport const UserWantlistSchema = PaginatedResponseSchema(UserWantlistItemSchema, 'wants');\n\n/**\n * Schema for adding or editing a release in a user's wantlist\n */\nexport const UserWantlistItemParamsSchema = UsernameInputSchema.merge(\n ReleaseIdParamSchema.extend({\n notes: z.string().optional(),\n rating: z.number().int().min(0).max(5).optional(),\n }),\n);\n\n/**\n * TypeScript type for a Discogs user wantlist\n */\nexport type UserWantlist = z.infer<typeof UserWantlistSchema>;\n\n/**\n * TypeScript type for wantlist query parameters\n */\nexport type UserWantlistParams = z.infer<typeof UserWantlistParamsSchema>;\n\n/**\n * TypeScript type for a wantlist item\n */\nexport type UserWantlistItem = z.infer<typeof UserWantlistItemSchema>;\n\n/**\n * TypeScript type for adding or editing a release in a user's wantlist\n */\nexport type UserWantlistItemParams = z.infer<typeof UserWantlistItemParamsSchema>;\n","import { isDiscogsError } from '../../errors.js';\nimport {\n type UserInventoryGetParams,\n type UserInventoryResponse,\n UserInventoryResponseSchema,\n} from '../../types/user/index.js';\nimport { BaseUserService } from '../index.js';\n\n/**\n * Service for Discogs User Inventory operations\n */\nexport class UserInventoryService extends BaseUserService {\n /**\n * Returns the list of listings in a user's inventory\n * @param params - Parameters for the request including username and optional pagination/sorting\n * @returns {UserInventoryResponse} A paginated response containing the user's inventory\n * @throws {DiscogsResourceNotFoundError} If the username cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async get({ username, ...options }: UserInventoryGetParams): Promise<UserInventoryResponse> {\n try {\n const response = await this.request<UserInventoryResponse>(`/${username}/inventory`, {\n params: options,\n });\n\n // Validate the response using Zod schema\n const validatedResponse = UserInventoryResponseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get inventory: ${String(error)}`);\n }\n }\n}\n","import { FastMCP, Tool } from 'fastmcp';\nimport { formatDiscogsError } from '../errors.js';\nimport { MarketplaceService } from '../services/marketplace.js';\nimport { UserInventoryService } from '../services/user/inventory.js';\nimport { FastMCPSessionAuth } from '../types/common.js';\nimport {\n ListingGetParamsSchema,\n ListingIdParamSchema,\n ListingNewParamsSchema,\n ListingUpdateParamsSchema,\n OrderCreateMessageParamsSchema,\n OrderEditParamsSchema,\n OrderIdParamSchema,\n OrderMessagesParamsSchema,\n OrdersParamsSchema,\n} from '../types/marketplace.js';\nimport { ReleaseParamsSchema } from '../types/release.js';\nimport { UserInventoryGetParamsSchema } from '../types/user/index.js';\n\n/**\n * MCP tool for creating a marketplace listing\n */\nexport const createMarketplaceListingTool: Tool<FastMCPSessionAuth, typeof ListingNewParamsSchema> =\n {\n name: 'create_marketplace_listing',\n description: 'Create a new marketplace listing',\n parameters: ListingNewParamsSchema,\n execute: async (args) => {\n try {\n const marketplaceService = new MarketplaceService();\n const listing = await marketplaceService.createListing(args);\n\n return JSON.stringify(listing);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n };\n\n/**\n * MCP tool for creating a marketplace order message\n */\nexport const createMarketplaceOrderMessageTool: Tool<\n FastMCPSessionAuth,\n typeof OrderCreateMessageParamsSchema\n> = {\n name: 'create_marketplace_order_message',\n description: `Adds a new message to the order's message log`,\n parameters: OrderCreateMessageParamsSchema,\n execute: async (args) => {\n try {\n const marketplaceService = new MarketplaceService();\n const message = await marketplaceService.createOrderMessage(args);\n\n return JSON.stringify(message);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for deleting a marketplace listing\n */\nexport const deleteMarketplaceListingTool: Tool<FastMCPSessionAuth, typeof ListingIdParamSchema> = {\n name: 'delete_marketplace_listing',\n description: 'Delete a marketplace listing',\n parameters: ListingIdParamSchema,\n execute: async (args) => {\n try {\n const marketplaceService = new MarketplaceService();\n await marketplaceService.deleteListing(args);\n\n return 'Listing deleted successfully';\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for getting a marketplace listing\n */\nexport const getMarketplaceListingTool: Tool<FastMCPSessionAuth, typeof ListingGetParamsSchema> = {\n name: 'get_marketplace_listing',\n description: 'Get a listing from the marketplace',\n parameters: ListingGetParamsSchema,\n execute: async (args) => {\n try {\n const marketplaceService = new MarketplaceService();\n const listing = await marketplaceService.getListing(args);\n\n return JSON.stringify(listing);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for getting a marketplace order\n */\nexport const getMarketplaceOrderTool: Tool<FastMCPSessionAuth, typeof OrderIdParamSchema> = {\n name: 'get_marketplace_order',\n description: 'Get a marketplace order',\n parameters: OrderIdParamSchema,\n execute: async (args) => {\n try {\n const marketplaceService = new MarketplaceService();\n const order = await marketplaceService.getOrder(args);\n\n return JSON.stringify(order);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for getting a list of marketplace orders\n */\nexport const getMarketplaceOrdersTool: Tool<FastMCPSessionAuth, typeof OrdersParamsSchema> = {\n name: 'get_marketplace_orders',\n description: 'Get a list of marketplace orders',\n parameters: OrdersParamsSchema,\n execute: async (args) => {\n try {\n const marketplaceService = new MarketplaceService();\n const orders = await marketplaceService.getOrders(args);\n\n return JSON.stringify(orders);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for getting a list of order messages\n */\nexport const getMarketplaceOrderMessagesTool: Tool<\n FastMCPSessionAuth,\n typeof OrderMessagesParamsSchema\n> = {\n name: 'get_marketplace_order_messages',\n description: `Get a list of an order's messages`,\n parameters: OrderMessagesParamsSchema,\n execute: async (args) => {\n try {\n const marketplaceService = new MarketplaceService();\n const messages = await marketplaceService.getOrderMessages(args);\n\n return JSON.stringify(messages);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for getting a release stats\n */\nexport const getMarketplaceReleaseStatsTool: Tool<FastMCPSessionAuth, typeof ReleaseParamsSchema> =\n {\n name: 'get_marketplace_release_stats',\n description: 'Retrieve marketplace statistics for the provided Release ID',\n parameters: ReleaseParamsSchema,\n execute: async (args) => {\n try {\n const marketplaceService = new MarketplaceService();\n const stats = await marketplaceService.getReleaseStats(args);\n\n return JSON.stringify(stats);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n };\n\n/**\n * MCP tool for getting a user's inventory\n */\nexport const getUserInventoryTool: Tool<FastMCPSessionAuth, typeof UserInventoryGetParamsSchema> = {\n name: 'get_user_inventory',\n description: `Returns the list of listings in a user's inventory`,\n parameters: UserInventoryGetParamsSchema,\n execute: async (args) => {\n try {\n const userInventoryService = new UserInventoryService();\n const inventory = await userInventoryService.get(args);\n\n return JSON.stringify(inventory);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for editing a marketplace order\n */\nexport const editMarketplaceOrderTool: Tool<FastMCPSessionAuth, typeof OrderEditParamsSchema> = {\n name: 'edit_marketplace_order',\n description: 'Edit a marketplace order',\n parameters: OrderEditParamsSchema,\n execute: async (args) => {\n try {\n const marketplaceService = new MarketplaceService();\n const order = await marketplaceService.editOrder(args);\n\n return JSON.stringify(order);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for updating a marketplace listing\n */\nexport const updateMarketplaceListingTool: Tool<\n FastMCPSessionAuth,\n typeof ListingUpdateParamsSchema\n> = {\n name: 'update_marketplace_listing',\n description: 'Update a marketplace listing',\n parameters: ListingUpdateParamsSchema,\n execute: async (args) => {\n try {\n const marketplaceService = new MarketplaceService();\n await marketplaceService.updateListing(args);\n\n return 'Listing updated successfully';\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\nexport function registerMarketplaceTools(server: FastMCP): void {\n server.addTool(getUserInventoryTool);\n server.addTool(getMarketplaceListingTool);\n server.addTool(createMarketplaceListingTool);\n server.addTool(updateMarketplaceListingTool);\n server.addTool(deleteMarketplaceListingTool);\n server.addTool(getMarketplaceOrderTool);\n server.addTool(editMarketplaceOrderTool);\n server.addTool(getMarketplaceOrdersTool);\n server.addTool(getMarketplaceOrderMessagesTool);\n server.addTool(createMarketplaceOrderMessageTool);\n server.addTool(getMarketplaceReleaseStatsTool);\n}\n","import { type FastMCP, type Tool, imageContent } from 'fastmcp';\nimport { z } from 'zod';\nimport { formatDiscogsError } from '../errors.js';\nimport { FastMCPSessionAuth } from '../types/common.js';\n\nconst MediaParamsSchema = z.object({\n url: z.string().url(),\n});\n\n/**\n * MCP tool for fetching an image\n */\nexport const fetchImageTool: Tool<FastMCPSessionAuth, typeof MediaParamsSchema> = {\n name: 'fetch_image',\n description: 'Fetch an image by URL',\n parameters: MediaParamsSchema,\n execute: async ({ url }) => {\n try {\n return imageContent({ url });\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\nexport function registerMediaTools(server: FastMCP): void {\n server.addTool(fetchImageTool);\n}\n","import { isDiscogsError } from '../../errors.js';\nimport { UsernameInput } from '../../types/common.js';\nimport {\n type UserCollectionCustomFieldEditParams,\n type UserCollectionCustomFields,\n UserCollectionCustomFieldsSchema,\n type UserCollectionFolder,\n type UserCollectionFolderCreateParams,\n type UserCollectionFolderEditParams,\n type UserCollectionFolderParams,\n type UserCollectionFolderReleaseParams,\n type UserCollectionFolders,\n UserCollectionFolderSchema,\n UserCollectionFoldersSchema,\n type UserCollectionItemsByRelease,\n UserCollectionItemsByReleaseSchema,\n type UserCollectionItemsParams,\n type UserCollectionMoveReleaseParams,\n type UserCollectionReleaseAdded,\n UserCollectionReleaseAddedSchema,\n type UserCollectionReleaseDeletedParams,\n type UserCollectionReleaseParams,\n type UserCollectionReleaseRatingParams,\n type UserCollectionValue,\n UserCollectionValueSchema,\n} from '../../types/user/index.js';\nimport { BaseUserService } from '../index.js';\n\n/**\n * Service for Discogs User Collection operations\n */\nexport class UserCollectionService extends BaseUserService {\n /**\n * Add a release to a folder in a user's collection. The folder_id must be non-zero.\n *\n * @param params The parameters for the release addition\n * @returns {UserCollectionReleaseAdded} The added release\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to add a release to a folder of another user\n * @throws {DiscogsResourceNotFoundError} If the username, folder_id, or release_id cannot be found\n * @throws {DiscogsValidationFailedError} If the folder_id is 0\n * @throws {Error} If there's an unexpected error\n */\n async addReleaseToFolder({\n username,\n folder_id,\n release_id,\n }: UserCollectionFolderReleaseParams): Promise<UserCollectionReleaseAdded> {\n try {\n const response = await this.request<UserCollectionReleaseAdded>(\n `/${username}/collection/folders/${folder_id}/releases/${release_id}`,\n {\n method: 'POST',\n },\n );\n\n const validatedResponse = UserCollectionReleaseAddedSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to add release to folder: ${String(error)}`);\n }\n }\n\n /**\n * Create a new folder in a user's collection\n *\n * @param params The parameters for the folder creation\n * @returns {UserCollectionFolder} The created folder\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to create a folder for another user\n * @throws {DiscogsResourceNotFoundError} If the username cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async createFolder({\n username,\n ...body\n }: UserCollectionFolderCreateParams): Promise<UserCollectionFolder> {\n try {\n const response = await this.request<UserCollectionFolder>(`/${username}/collection/folders`, {\n method: 'POST',\n body,\n });\n\n // Validate the response using Zod schema\n const validatedResponse = UserCollectionFolderSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to create folder: ${String(error)}`);\n }\n }\n\n /**\n * Delete a folder from a user's collection. A folder must be empty before it can be deleted.\n *\n * @param params The parameters for the folder deletion\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to delete a folder of another user\n * @throws {DiscogsResourceNotFoundError} If the username or folder cannot be found\n * @throws {DiscogsValidationFailedError} If the folder is not empty\n * @throws {Error} If there's an unexpected error\n */\n async deleteFolder({ username, folder_id }: UserCollectionFolderParams): Promise<void> {\n try {\n await this.request<void>(`/${username}/collection/folders/${folder_id}`, {\n method: 'DELETE',\n });\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For unexpected errors, wrap them\n throw new Error(`Failed to delete folder: ${String(error)}`);\n }\n }\n\n /**\n * Remove an instance of a release from a user's collection folder\n *\n * @param params The parameters for the release deletion\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to delete a release from a folder of another user\n * @throws {DiscogsResourceNotFoundError} If the username, folder_id, release_id, or instance_id cannot be found\n * @throws {DiscogsValidationFailedError} If the folder_id is 0\n * @throws {Error} If there's an unexpected error\n */\n async deleteReleaseFromFolder({\n username,\n folder_id,\n release_id,\n instance_id,\n }: UserCollectionReleaseDeletedParams): Promise<void> {\n try {\n await this.request<void>(\n `/${username}/collection/folders/${folder_id}/releases/${release_id}/instances/${instance_id}`,\n {\n method: 'DELETE',\n },\n );\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to delete release from folder: ${String(error)}`);\n }\n }\n\n /**\n * Edit a custom field value for a release in a user's collection\n *\n * @param params The parameters for the custom field value edit\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to edit a custom field value of another user\n * @throws {DiscogsResourceNotFoundError} If the username, folder_id, release_id, or instance_id cannot be found\n * @throws {DiscogsValidationFailedError} If the field is a dropdown and the value is not in the list of options\n * @throws {Error} If there's an unexpected error\n */\n async editCustomFieldValue({\n username,\n folder_id,\n release_id,\n instance_id,\n field_id,\n value,\n }: UserCollectionCustomFieldEditParams): Promise<void> {\n try {\n await this.request<void>(\n `/${username}/collection/folders/${folder_id}/releases/${release_id}/instances/${instance_id}/fields/${field_id}`,\n {\n method: 'POST',\n body: { value },\n },\n );\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to edit custom field value: ${String(error)}`);\n }\n }\n\n /**\n * Edit a folder's metadata. Folders 0 and 1 cannot be renamed.\n *\n * @param params The parameters for the folder edit\n * @returns {UserCollectionFolder} The edited folder\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to edit a folder of another user\n * @throws {DiscogsResourceNotFoundError} If the username or folder cannot be found\n * @throws {DiscogsValidationFailedError} If the folder_id is 0 or 1\n * @throws {Error} If there's an unexpected error\n */\n async editFolder({\n username,\n folder_id,\n ...body\n }: UserCollectionFolderEditParams): Promise<UserCollectionFolder> {\n try {\n const response = await this.request<UserCollectionFolder>(\n `/${username}/collection/folders/${folder_id}`,\n {\n method: 'POST',\n body,\n },\n );\n\n // Validate the response using Zod schema\n const validatedResponse = UserCollectionFolderSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For unexpected errors, wrap them\n throw new Error(`Failed to edit folder: ${String(error)}`);\n }\n }\n\n /**\n * Find a release in a user's collection\n *\n * @param params The parameters for the release search\n * @returns {UserCollectionItemsByRelease} The releases in the user's collection\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to search a private collection\n * @throws {DiscogsResourceNotFoundError} If the username cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async findRelease({\n username,\n release_id,\n ...options\n }: UserCollectionReleaseParams): Promise<UserCollectionItemsByRelease> {\n try {\n const response = await this.request<UserCollectionItemsByRelease>(\n `/${username}/collection/releases/${release_id}`,\n {\n params: options,\n },\n );\n\n // Validate the response using Zod schema\n const validatedResponse = UserCollectionItemsByReleaseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For unexpected errors, wrap them\n throw new Error(`Failed to find release in collection: ${String(error)}`);\n }\n }\n\n /**\n * Retrieve a list of user-defined collection notes fields. These fields are available on every release in the collection.\n *\n * @param username The username of whose collection custom fields you are requesting\n * @returns {UserCollectionCustomFields} The user's collection custom fields\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to get custom fields of a private collection\n * @throws {DiscogsResourceNotFoundError} If the username cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async getCustomFields({ username }: UsernameInput): Promise<UserCollectionCustomFields> {\n try {\n const response = await this.request<UserCollectionCustomFields>(\n `/${username}/collection/fields`,\n );\n\n const validatedResponse = UserCollectionCustomFieldsSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get collection custom fields: ${String(error)}`);\n }\n }\n\n /**\n * Retrieve a list of folders in a user's collection\n *\n * @param username The username of whose collection folders you are requesting\n * @returns {UserCollectionFolder[]} The user's collection folders\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If another user's collection does not have public folders\n * @throws {DiscogsResourceNotFoundError} If the username cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async getFolders({ username }: UsernameInput): Promise<UserCollectionFolders> {\n try {\n const response = await this.request<UserCollectionFolders>(`/${username}/collection/folders`);\n\n // Validate the response using Zod schema\n const validatedResponse = UserCollectionFoldersSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For unexpected errors, wrap them\n throw new Error(`Failed to get collection folders: ${String(error)}`);\n }\n }\n\n /**\n * Retrieve metadata about a folder in a user's collection\n *\n * @param params The parameters for the folder retrieval\n * @returns {UserCollectionFolder} The retrieved folder\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to get a private folder of another user\n * @throws {DiscogsResourceNotFoundError} If the username or folder cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async getFolder({\n username,\n folder_id,\n }: UserCollectionFolderParams): Promise<UserCollectionFolder> {\n try {\n const response = await this.request<UserCollectionFolder>(\n `/${username}/collection/folders/${folder_id}`,\n );\n\n const validatedResponse = UserCollectionFolderSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get folder: ${String(error)}`);\n }\n }\n\n /**\n * Returns the list of item in a folder in a user's collection\n *\n * @param params The parameters for the item retrieval\n * @returns {UserCollectionItemsByRelease} The items in the user's collection\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to get a private collection\n * @throws {DiscogsResourceNotFoundError} If the username or folder cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async getItems({\n username,\n folder_id,\n ...options\n }: UserCollectionItemsParams): Promise<UserCollectionItemsByRelease> {\n try {\n const response = await this.request<UserCollectionItemsByRelease>(\n `/${username}/collection/folders/${folder_id}/releases`,\n {\n params: options,\n },\n );\n\n const validatedResponse = UserCollectionItemsByReleaseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get collection items: ${String(error)}`);\n }\n }\n\n /**\n * Returns the minimum, median, and maximum value of a user's collection\n *\n * @param username The username of whose collection value you are requesting\n * @returns {UserCollectionValue} The user's collection value\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to get the collection value of another user\n * @throws {DiscogsResourceNotFoundError} If the username cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async getValue({ username }: UsernameInput): Promise<UserCollectionValue> {\n try {\n const response = await this.request<UserCollectionValue>(`/${username}/collection/value`);\n\n // Validate the response using Zod schema\n const validatedResponse = UserCollectionValueSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n // If it's already a Discogs error, just rethrow it\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For unexpected errors, wrap them\n throw new Error(`Failed to get collection value: ${String(error)}`);\n }\n }\n\n /**\n * Move a release in a user's collection to another folder\n *\n * @param params The parameters for the release move\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to move a collection release of another user\n * @throws {DiscogsResourceNotFoundError} If the user, source folder, destination folder, release, or instance cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async moveRelease({\n username,\n folder_id,\n release_id,\n instance_id,\n ...body\n }: UserCollectionMoveReleaseParams): Promise<void> {\n try {\n await this.request<void>(\n `/${username}/collection/folders/${folder_id}/releases/${release_id}/instances/${instance_id}`,\n {\n method: 'POST',\n body: { folder_id: body.destination_folder_id },\n },\n );\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to move release: ${String(error)}`);\n }\n }\n\n /**\n * Rate a release in a user's collection\n *\n * @param params The parameters for the release rating\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to rate a collection release of another user\n * @throws {DiscogsResourceNotFoundError} If the username, folder_id, release_id, or instance_id cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async rateRelease({\n username,\n folder_id,\n release_id,\n instance_id,\n ...body\n }: UserCollectionReleaseRatingParams): Promise<void> {\n try {\n await this.request<void>(\n `/${username}/collection/folders/${folder_id}/releases/${release_id}/instances/${instance_id}`,\n {\n method: 'POST',\n body,\n },\n );\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to rate release: ${String(error)}`);\n }\n }\n}\n","import { isDiscogsError } from '../../errors.js';\nimport { type UserLists, type UserListsParams, UserListsSchema } from '../../types/user/index.js';\nimport { BaseUserService } from '../index.js';\n\n/**\n * Service for Discogs User Lists operations\n */\nexport class UserListsService extends BaseUserService {\n /**\n * Get a user's lists\n * @param params - Parameters for the request including username and optional pagination/sorting\n * @returns {UserLists} A paginated response containing the user's lists\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsResourceNotFoundError} If the username cannot be found\n * @throws {Error} If there's a validation error or other unexpected error\n */\n async get({ username, ...options }: UserListsParams): Promise<UserLists> {\n try {\n const response = await this.request<UserLists>(`/${username}/lists`, {\n params: options,\n });\n\n // Validate the response using Zod schema\n const validatedResponse = UserListsSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n // If it's already a Discogs error, just rethrow it\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For validation errors or other unexpected errors, wrap them\n throw new Error(`Failed to get lists: ${String(error)}`);\n }\n }\n}\n","import { isDiscogsError } from '../../errors.js';\nimport { UsernameInput } from '../../types/common.js';\nimport {\n type UserProfile,\n type UserProfileEditInput,\n UserProfileSchema,\n} from '../../types/user/index.js';\nimport { BaseUserService } from '../index.js';\n\n/**\n * Service for Discogs User Profile operations\n */\nexport class UserProfileService extends BaseUserService {\n /**\n * Retrieve a user by username\n *\n * @param username The username of whose profile you are requesting\n * @returns {UserProfile} The user's profile information\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsResourceNotFoundError} If the username cannot be found\n * @throws {Error} If there's a validation error or other unexpected error\n */\n async get({ username }: UsernameInput): Promise<UserProfile> {\n try {\n const response = await this.request<UserProfile>(`/${username}`);\n\n // Validate the response using Zod schema\n const validatedResponse = UserProfileSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n // If it's already a Discogs error, just rethrow it\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For validation errors or other unexpected errors, wrap them\n throw new Error(`Failed to get profile: ${String(error)}`);\n }\n }\n\n /**\n * Edit a user's profile data\n *\n * @param params UserProfileEditInput\n * @returns {UserProfile} The user's profile information\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to edit a profile that is not the authenticated user\n * @throws {DiscogsResourceNotFoundError} If the username cannot be found\n * @throws {Error} If there's a validation error or other unexpected error\n */\n async edit({ username, ...body }: UserProfileEditInput): Promise<UserProfile> {\n try {\n const response = await this.request<UserProfile>(`/${username}`, {\n method: 'POST',\n body,\n });\n\n // Validate the response using Zod schema\n const validatedResponse = UserProfileSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n // If it's already a Discogs error, just rethrow it\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For validation errors or other unexpected errors, wrap them\n throw new Error(`Failed to edit profile: ${String(error)}`);\n }\n }\n}\n","import { isDiscogsError } from '../../errors.js';\nimport {\n type UserWantlist,\n type UserWantlistItem,\n type UserWantlistItemParams,\n UserWantlistItemSchema,\n type UserWantlistParams,\n UserWantlistSchema,\n} from '../../types/user/index.js';\nimport { BaseUserService } from '../index.js';\n\n/**\n * Service for Discogs User Wantlist operations\n */\nexport class UserWantsService extends BaseUserService {\n /**\n * Returns the list of releases in a user's wantlist\n *\n * @param params - Parameters for the wantlist request including username and optional pagination/sorting\n * @returns {UserWantlist} The user's wantlist with pagination metadata\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to get the private wantlist of another user\n * @throws {DiscogsResourceNotFoundError} If the username cannot be found\n * @throws {Error} If there's a validation error or other unexpected error\n */\n async getList({ username, ...options }: UserWantlistParams): Promise<UserWantlist> {\n try {\n const response = await this.request<UserWantlist>(`/${username}/wants`, {\n params: options,\n });\n\n // Validate the response using Zod schema\n const validatedResponse = UserWantlistSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n // If it's already a Discogs error, just rethrow it\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For validation errors or other unexpected errors, wrap them\n throw new Error(`Failed to get wantlist: ${String(error)}`);\n }\n }\n\n /**\n * Add a release to a user's wantlist\n *\n * @param params - Parameters for adding a release to wantlist\n * @returns {UserWantlistItem} The added wantlist item\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to add to another user's wantlist\n * @throws {DiscogsResourceNotFoundError} If the username or release_id cannot be found\n * @throws {Error} If there's a validation error or other unexpected error\n */\n async addItem({\n username,\n release_id,\n ...body\n }: UserWantlistItemParams): Promise<UserWantlistItem> {\n try {\n const response = await this.request<UserWantlistItem>(`/${username}/wants/${release_id}`, {\n method: 'PUT',\n body,\n });\n\n // Validate the response using Zod schema\n const validatedResponse = UserWantlistItemSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n // If it's already a Discogs error, just rethrow it\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For validation errors or other unexpected errors, wrap them\n throw new Error(`Failed to add to wantlist: ${String(error)}`);\n }\n }\n\n /**\n * Edit a release in a user's wantlist\n *\n * @param params - Parameters for editing a release in a wantlist\n * @returns {UserWantlistItem} The edited wantlist item\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to edit a release in another user's wantlist\n * @throws {DiscogsResourceNotFoundError} If the username or release_id cannot be found\n * @throws {Error} If there's a validation error or other unexpected error\n */\n async editItem({\n username,\n release_id,\n ...body\n }: UserWantlistItemParams): Promise<UserWantlistItem> {\n try {\n const response = await this.request<UserWantlistItem>(`/${username}/wants/${release_id}`, {\n method: 'POST',\n body,\n });\n\n // Validate the response using Zod schema\n const validatedResponse = UserWantlistItemSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n // If it's already a Discogs error, just rethrow it\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For validation errors or other unexpected errors, wrap them\n throw new Error(`Failed to add to wantlist: ${String(error)}`);\n }\n }\n\n /**\n * Delete a release from a user's wantlist\n *\n * @param params - Parameters for deleting a release from wantlist including username and release_id\n * @throws {DiscogsAuthenticationError} If authentication fails\n * @throws {DiscogsPermissionError} If trying to delete from another user's wantlist\n * @throws {DiscogsResourceNotFoundError} If the username or release_id cannot be found\n * @throws {Error} If there's an unexpected error\n */\n async deleteItem({ username, release_id }: UserWantlistItemParams): Promise<void> {\n try {\n await this.request(`/${username}/wants/${release_id}`, {\n method: 'DELETE',\n });\n } catch (error) {\n // If it's already a Discogs error, just rethrow it\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For other unexpected errors, wrap them\n throw new Error(`Failed to delete from wantlist: ${String(error)}`);\n }\n }\n}\n","import { UserCollectionService } from './collection.js';\nimport { UserListsService } from './lists.js';\nimport { UserProfileService } from './profile.js';\nimport { UserWantsService } from './wants.js';\n\n/**\n * Main user service that composes all specialized services\n */\nexport class UserService {\n public collection: UserCollectionService;\n public lists: UserListsService;\n public profile: UserProfileService;\n public wants: UserWantsService;\n\n constructor() {\n this.collection = new UserCollectionService();\n this.lists = new UserListsService();\n this.profile = new UserProfileService();\n this.wants = new UserWantsService();\n }\n}\n","import type { FastMCP, Tool } from 'fastmcp';\nimport { formatDiscogsError } from '../errors.js';\nimport { UserService } from '../services/user/index.js';\nimport { FastMCPSessionAuth, UsernameInputSchema } from '../types/common.js';\nimport {\n UserCollectionCustomFieldEditParamsSchema,\n UserCollectionFolderCreateParamsSchema,\n UserCollectionFolderEditParamsSchema,\n UserCollectionFolderParamsSchema,\n UserCollectionFolderReleaseParamsSchema,\n UserCollectionItemsParamsSchema,\n UserCollectionMoveReleaseParamsSchema,\n UserCollectionReleaseDeletedParamsSchema,\n UserCollectionReleaseParamsSchema,\n UserCollectionReleaseRatingParamsSchema,\n} from '../types/user/index.js';\n\n/**\n * MCP tool for adding a release to a folder in a Discogs user's collection\n */\nexport const addReleaseToUserCollectionFolderTool: Tool<\n FastMCPSessionAuth,\n typeof UserCollectionFolderReleaseParamsSchema\n> = {\n name: 'add_release_to_user_collection_folder',\n description: `Add a release to a folder in a user's collection. The folder_id must be non-zero.`,\n parameters: UserCollectionFolderReleaseParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const release = await userService.collection.addReleaseToFolder(args);\n\n return JSON.stringify(release);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for creating a folder in a Discogs user's collection\n */\nexport const createUserCollectionFolderTool: Tool<\n FastMCPSessionAuth,\n typeof UserCollectionFolderCreateParamsSchema\n> = {\n name: 'create_user_collection_folder',\n description: `Create a new folder in a user's collection`,\n parameters: UserCollectionFolderCreateParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const folder = await userService.collection.createFolder(args);\n\n return JSON.stringify(folder);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for deleting a release from a folder in a Discogs user's collection\n */\nexport const deleteReleaseFromUserCollectionFolderTool: Tool<\n FastMCPSessionAuth,\n typeof UserCollectionReleaseDeletedParamsSchema\n> = {\n name: 'delete_release_from_user_collection_folder',\n description: `Remove an instance of a release from a user's collection folder. The folder_id must be non-zero.`,\n parameters: UserCollectionReleaseDeletedParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n await userService.collection.deleteReleaseFromFolder(args);\n\n return 'Release deleted successfully';\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for deleting a folder in a Discogs user's collection\n */\nexport const deleteUserCollectionFolderTool: Tool<\n FastMCPSessionAuth,\n typeof UserCollectionFolderParamsSchema\n> = {\n name: 'delete_user_collection_folder',\n description: `Delete a folder from a user's collection. A folder must be empty before it can be deleted.`,\n parameters: UserCollectionFolderParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n await userService.collection.deleteFolder(args);\n\n return 'Folder deleted successfully';\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for editing a custom field value for a release in a Discogs user's collection\n */\nexport const editUserCollectionCustomFieldValueTool: Tool<\n FastMCPSessionAuth,\n typeof UserCollectionCustomFieldEditParamsSchema\n> = {\n name: 'edit_user_collection_custom_field_value',\n description: `Edit a custom field value for a release in a user's collection`,\n parameters: UserCollectionCustomFieldEditParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n await userService.collection.editCustomFieldValue(args);\n\n return 'Custom field value edited successfully';\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for editing a folder in a Discogs user's collection\n */\nexport const editUserCollectionFolderTool: Tool<\n FastMCPSessionAuth,\n typeof UserCollectionFolderEditParamsSchema\n> = {\n name: 'edit_user_collection_folder',\n description: `Edit a folder's metadata. Folders 0 and 1 cannot be renamed.`,\n parameters: UserCollectionFolderEditParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const folder = await userService.collection.editFolder(args);\n\n return JSON.stringify(folder);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for finding a release in a Discogs user's collection\n */\nexport const findReleaseInUserCollectionTool: Tool<\n FastMCPSessionAuth,\n typeof UserCollectionReleaseParamsSchema\n> = {\n name: 'find_release_in_user_collection',\n description: `Find a release in a user's collection`,\n parameters: UserCollectionReleaseParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const releases = await userService.collection.findRelease(args);\n\n return JSON.stringify(releases);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs user's collection custom fields\n */\nexport const getUserCollectionCustomFieldsTool: Tool<\n FastMCPSessionAuth,\n typeof UsernameInputSchema\n> = {\n name: 'get_user_collection_custom_fields',\n description: `Retrieve a list of user-defined collection notes fields. These fields are available on every release in the collection.`,\n parameters: UsernameInputSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const customFields = await userService.collection.getCustomFields(args);\n\n return JSON.stringify(customFields);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs user's collection folder\n */\nexport const getUserCollectionFolderTool: Tool<\n FastMCPSessionAuth,\n typeof UserCollectionFolderParamsSchema\n> = {\n name: 'get_user_collection_folder',\n description: `Retrieve metadata about a folder in a user's collection`,\n parameters: UserCollectionFolderParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const folder = await userService.collection.getFolder(args);\n\n return JSON.stringify(folder);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs user's collection folders\n */\nexport const getUserCollectionFoldersTool: Tool<FastMCPSessionAuth, typeof UsernameInputSchema> = {\n name: 'get_user_collection_folders',\n description: `Retrieve a list of folders in a user's collection`,\n parameters: UsernameInputSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const collectionFolders = await userService.collection.getFolders(args);\n\n return JSON.stringify(collectionFolders);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs user's collection items\n */\nexport const getUserCollectionItemsTool: Tool<\n FastMCPSessionAuth,\n typeof UserCollectionItemsParamsSchema\n> = {\n name: 'get_user_collection_items',\n description: `Retrieve a list of items in a user's collection`,\n parameters: UserCollectionItemsParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const items = await userService.collection.getItems(args);\n\n return JSON.stringify(items);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs user's collection value\n */\nexport const getUserCollectionValueTool: Tool<FastMCPSessionAuth, typeof UsernameInputSchema> = {\n name: 'get_user_collection_value',\n description: `Returns the minimum, median, and maximum value of a user's collection`,\n parameters: UsernameInputSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const collectionValue = await userService.collection.getValue(args);\n\n return JSON.stringify(collectionValue);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for moving a release in a Discogs user's collection to another folder\n */\nexport const moveReleaseInUserCollectionTool: Tool<\n FastMCPSessionAuth,\n typeof UserCollectionMoveReleaseParamsSchema\n> = {\n name: 'move_release_in_user_collection',\n description: `Move a release in a user's collection to another folder`,\n parameters: UserCollectionMoveReleaseParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n await userService.collection.moveRelease(args);\n\n return 'Release moved successfully';\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for rating a release in a Discogs user's collection\n */\nexport const rateReleaseInUserCollectionTool: Tool<\n FastMCPSessionAuth,\n typeof UserCollectionReleaseRatingParamsSchema\n> = {\n name: 'rate_release_in_user_collection',\n description: `Rate a release in a user's collection. The folder_id must be non-zero.`,\n parameters: UserCollectionReleaseRatingParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n await userService.collection.rateRelease(args);\n\n return 'Release rated successfully';\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\nexport function registerUserCollectionTools(server: FastMCP): void {\n server.addTool(getUserCollectionFoldersTool);\n server.addTool(createUserCollectionFolderTool);\n server.addTool(getUserCollectionFolderTool);\n server.addTool(editUserCollectionFolderTool);\n server.addTool(deleteUserCollectionFolderTool);\n server.addTool(findReleaseInUserCollectionTool);\n server.addTool(getUserCollectionItemsTool);\n server.addTool(addReleaseToUserCollectionFolderTool);\n server.addTool(rateReleaseInUserCollectionTool);\n server.addTool(moveReleaseInUserCollectionTool);\n server.addTool(deleteReleaseFromUserCollectionFolderTool);\n server.addTool(getUserCollectionCustomFieldsTool);\n server.addTool(editUserCollectionCustomFieldValueTool);\n server.addTool(getUserCollectionValueTool);\n}\n","import { z } from 'zod';\n\n/**\n * Schema for a Discogs user identity\n */\nexport const DiscogsUserIdentitySchema = z.object({\n id: z.number(),\n username: z.string(),\n resource_url: z.string().url(),\n consumer_name: z.string(),\n});\n\n/**\n * TypeScript type for a Discogs user identity\n */\nexport type DiscogsUserIdentity = z.infer<typeof DiscogsUserIdentitySchema>;\n","import { isDiscogsError } from '../errors.js';\nimport { DiscogsUserIdentity, DiscogsUserIdentitySchema } from '../types/oauth.js';\nimport { DiscogsService } from './index.js';\n\n/**\n * Service for Discogs OAuth-related operations\n */\nexport class OAuthService extends DiscogsService {\n constructor() {\n super('/oauth');\n }\n\n /**\n * Get the identity of the authenticated user\n * @returns The user's identity information\n * @throws {DiscogsAuthenticationError} If authentication fails (401)\n */\n async getUserIdentity(): Promise<DiscogsUserIdentity> {\n try {\n // Call the identity endpoint relative to the OAuth base path\n const response = await this.request<DiscogsUserIdentity>('/identity');\n\n // Validate the response using Zod schema\n const validatedResponse = DiscogsUserIdentitySchema.parse(response);\n return validatedResponse;\n } catch (error) {\n // If it's already a Discogs error, just rethrow it\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For validation errors or other unexpected errors, wrap them\n throw new Error(`Failed to get identity: ${String(error)}`);\n }\n }\n}\n","import { z } from 'zod';\nimport { ArtistSchema } from '../artist.js';\nimport {\n PaginatedResponseSchema,\n PaginatedResponseWithObjectSchema,\n QueryParamsSchema,\n UsernameInputSchema,\n} from '../common.js';\nimport { LabelSchema } from '../label.js';\nimport { ReleaseSchema } from '../release.js';\n\nconst SubmissionSchema = z.object({\n artists: z.array(ArtistSchema).optional(),\n labels: z.array(LabelSchema).optional(),\n releases: z.array(ReleaseSchema).optional(),\n});\n\nexport const ContributionsParamsSchema = UsernameInputSchema.merge(\n QueryParamsSchema([\n 'label',\n 'artist',\n 'title',\n 'catno',\n 'format',\n 'rating',\n 'year',\n 'added',\n ] as const),\n);\n\nexport const ContributionsResponseSchema = PaginatedResponseSchema(ReleaseSchema, 'contributions');\n\nexport const SubmissionsResponseSchema = PaginatedResponseWithObjectSchema(\n SubmissionSchema,\n 'submissions',\n);\n\nexport type ContributionsParams = z.infer<typeof ContributionsParamsSchema>;\nexport type ContributionsResponse = z.infer<typeof ContributionsResponseSchema>;\nexport type SubmissionResponse = z.infer<typeof SubmissionsResponseSchema>;\n","import { isDiscogsError } from '../../errors.js';\nimport { UsernameInput } from '../../types/common.js';\nimport {\n type ContributionsParams,\n type ContributionsResponse,\n ContributionsResponseSchema,\n type SubmissionResponse,\n SubmissionsResponseSchema,\n} from '../../types/user/contribution.js';\nimport { BaseUserService } from '../index.js';\n\nexport class UserContributionsService extends BaseUserService {\n /**\n * Retrieve a user's contributions by username\n *\n * @param username The username of the user to get contributions for\n * @throws {DiscogsResourceNotFoundError} If the username is not found\n * @throws {DiscogsError} If there's an unexpected error\n * @returns {ContributionsResponse} The user's contributions\n */\n async get({ username, ...options }: ContributionsParams): Promise<ContributionsResponse> {\n try {\n const response = await this.request<ContributionsResponse>(`/${username}/contributions`, {\n params: options,\n });\n\n const validatedResponse = ContributionsResponseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get user contributions: ${String(error)}`);\n }\n }\n}\n\nexport class UserSubmissionsService extends BaseUserService {\n /**\n * Retrieve a user's submissions by username\n *\n * @param username The username of the user to get submissions for\n * @throws {DiscogsResourceNotFoundError} If the username is not found\n * @throws {DiscogsError} If there's an unexpected error\n * @returns {SubmissionResponse} The user's submissions\n */\n async get({ username }: UsernameInput): Promise<SubmissionResponse> {\n try {\n const response = await this.request<SubmissionResponse>(`/${username}/submissions`);\n\n const validatedResponse = SubmissionsResponseSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n if (isDiscogsError(error)) {\n throw error;\n }\n\n throw new Error(`Failed to get user submissions: ${String(error)}`);\n }\n }\n}\n","import type { FastMCP, Tool, ToolParameters } from 'fastmcp';\nimport { z } from 'zod';\nimport { formatDiscogsError } from '../errors.js';\nimport { OAuthService } from '../services/oauth.js';\nimport { UserContributionsService, UserSubmissionsService } from '../services/user/contribution.js';\nimport { UserService } from '../services/user/index.js';\nimport { FastMCPSessionAuth, UsernameInputSchema } from '../types/common.js';\nimport { ContributionsParamsSchema } from '../types/user/contribution.js';\nimport { UserProfileEditInputSchema } from '../types/user/index.js';\n\n/**\n * MCP tool for fetching the identity of the authenticated Discogs user\n */\nexport const getUserIdentityTool: Tool<FastMCPSessionAuth, ToolParameters> = {\n name: 'get_user_identity',\n description: 'Retrieve basic information about the authenticated user',\n parameters: z.object({}),\n execute: async () => {\n try {\n const oauthService = new OAuthService();\n const identity = await oauthService.getUserIdentity();\n\n return JSON.stringify(identity);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs user's profile\n */\nexport const getUserProfileTool: Tool<FastMCPSessionAuth, typeof UsernameInputSchema> = {\n name: 'get_user_profile',\n description: 'Retrieve a user by username',\n parameters: UsernameInputSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const profile = await userService.profile.get(args);\n\n return JSON.stringify(profile);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs user's submissions\n */\nexport const getUserSubmissionsTool: Tool<FastMCPSessionAuth, typeof UsernameInputSchema> = {\n name: 'get_user_submissions',\n description: `Retrieve a user's submissions by username`,\n parameters: UsernameInputSchema,\n execute: async (args) => {\n try {\n const userSubmissionsService = new UserSubmissionsService();\n const submissions = await userSubmissionsService.get(args);\n\n return JSON.stringify(submissions);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs user's contributions\n */\nexport const getUserContributionsTool: Tool<FastMCPSessionAuth, typeof ContributionsParamsSchema> =\n {\n name: 'get_user_contributions',\n description: `Retrieve a user's contributions by username`,\n parameters: ContributionsParamsSchema,\n execute: async (args) => {\n try {\n const userContributionsService = new UserContributionsService();\n const contributions = await userContributionsService.get(args);\n\n return JSON.stringify(contributions);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n };\n\n/**\n * MCP tool for editing a Discogs user's profile\n */\nexport const editUserProfileTool: Tool<FastMCPSessionAuth, typeof UserProfileEditInputSchema> = {\n name: 'edit_user_profile',\n description: `Edit a user's profile data`,\n parameters: UserProfileEditInputSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const profile = await userService.profile.edit(args);\n\n return JSON.stringify(profile);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\nexport function registerUserIdentityTools(server: FastMCP): void {\n server.addTool(getUserIdentityTool);\n server.addTool(getUserProfileTool);\n server.addTool(editUserProfileTool);\n server.addTool(getUserSubmissionsTool);\n server.addTool(getUserContributionsTool);\n}\n","import { z } from 'zod';\n\n/**\n * Schema for a list item\n */\nexport const ListItemSchema = z.object({\n id: z.number(),\n comment: z.string().optional(),\n display_title: z.string(),\n image_url: z.string().url(),\n resource_url: z.string().url(),\n stats: z.object({\n community: z.object({\n in_collection: z.number(),\n in_wantlist: z.number(),\n }),\n user: z.object({\n in_collection: z.number(),\n in_wantlist: z.number(),\n }),\n }),\n type: z.string(),\n uri: z.string().url(),\n});\n\n/**\n * Schema for a Discogs list\n */\nexport const ListSchema = z.object({\n id: z.number(),\n user: z.object({\n id: z.number(),\n avatar_url: z.string().url(),\n username: z.string(),\n resource_url: z.string().url(),\n }),\n name: z.string(),\n description: z.string().optional(),\n public: z.boolean(),\n date_added: z.string(),\n date_changed: z.string(),\n uri: z.string().url(),\n resource_url: z.string().url(),\n image_url: z.string().url().optional(),\n items: z.array(ListItemSchema),\n});\n\n/**\n * Schema for list ID parameters\n */\nexport const ListIdParamSchema = z.object({\n list_id: z.number(),\n});\n\n/**\n * TypeScript type for a list item\n */\nexport type ListItem = z.infer<typeof ListItemSchema>;\n\n/**\n * TypeScript type for a Discogs list\n */\nexport type List = z.infer<typeof ListSchema>;\n\n/**\n * TypeScript type for list ID parameters\n */\nexport type ListIdParam = z.infer<typeof ListIdParamSchema>;\n","import { isDiscogsError } from '../errors.js';\nimport { ListSchema, type List, type ListIdParam } from '../types/list.js';\nimport { DiscogsService } from './index.js';\n\n/**\n * Service for Discogs List-related operations\n */\nexport class ListService extends DiscogsService {\n constructor() {\n super('/lists');\n }\n\n /**\n * Returns items from a specified List\n *\n * @param params - Parameters containing the list ID\n * @returns {List} The list information\n * @throws {DiscogsPermissionError} If the user doesn't have permission to access the list\n * @throws {DiscogsResourceNotFoundError} If the list cannot be found\n * @throws {Error} If there's a validation error or other unexpected error\n */\n async getList({ list_id }: ListIdParam): Promise<List> {\n try {\n const response = await this.request<List>(`/${list_id}`);\n\n // Validate the response using Zod schema\n const validatedResponse = ListSchema.parse(response);\n return validatedResponse;\n } catch (error) {\n // If it's already a Discogs error, just rethrow it\n if (isDiscogsError(error)) {\n throw error;\n }\n\n // For validation errors or other unexpected errors, wrap them\n throw new Error(`Failed to get list: ${String(error)}`);\n }\n }\n}\n","import type { FastMCP, Tool } from 'fastmcp';\nimport { formatDiscogsError } from '../errors.js';\nimport { ListService } from '../services/list.js';\nimport { UserService } from '../services/user/index.js';\nimport { FastMCPSessionAuth } from '../types/common.js';\nimport { ListIdParamSchema } from '../types/list.js';\nimport { UserListsParamsSchema } from '../types/user/index.js';\n\n/**\n * MCP tool for fetching a Discogs user's lists\n */\nexport const getUserListsTool: Tool<FastMCPSessionAuth, typeof UserListsParamsSchema> = {\n name: 'get_user_lists',\n description: `Get a user's lists`,\n parameters: UserListsParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const lists = await userService.lists.get(args);\n\n return JSON.stringify(lists);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for fetching a Discogs list by ID\n */\nexport const getListTool: Tool<FastMCPSessionAuth, typeof ListIdParamSchema> = {\n name: 'get_list',\n description: `Get a list by ID`,\n parameters: ListIdParamSchema,\n execute: async (args) => {\n try {\n const listService = new ListService();\n const list = await listService.getList(args);\n\n return JSON.stringify(list);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\nexport function registerUserListsTools(server: FastMCP): void {\n server.addTool(getUserListsTool);\n server.addTool(getListTool);\n}\n","import type { FastMCP, Tool } from 'fastmcp';\nimport { formatDiscogsError } from '../errors.js';\nimport { UserService } from '../services/user/index.js';\nimport { FastMCPSessionAuth } from '../types/common.js';\nimport { UserWantlistItemParamsSchema, UserWantlistParamsSchema } from '../types/user/index.js';\n\n/**\n * MCP tool for fetching a Discogs user's wantlist\n */\nexport const getUserWantlistTool: Tool<FastMCPSessionAuth, typeof UserWantlistParamsSchema> = {\n name: 'get_user_wantlist',\n description: `Returns the list of releases in a user's wantlist`,\n parameters: UserWantlistParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const wantlist = await userService.wants.getList(args);\n\n return JSON.stringify(wantlist);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for adding a release to a user's wantlist\n */\nexport const addToWantlistTool: Tool<FastMCPSessionAuth, typeof UserWantlistItemParamsSchema> = {\n name: 'add_to_wantlist',\n description: `Add a release to a user's wantlist`,\n parameters: UserWantlistItemParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const wantlistItem = await userService.wants.addItem(args);\n\n return JSON.stringify(wantlistItem);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\n/**\n * MCP tool for editing a release in a user's wantlist\n */\nexport const editItemInWantlistTool: Tool<FastMCPSessionAuth, typeof UserWantlistItemParamsSchema> =\n {\n name: 'edit_item_in_wantlist',\n description: `Edit a release in a user's wantlist`,\n parameters: UserWantlistItemParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n const wantlistItem = await userService.wants.editItem(args);\n\n return JSON.stringify(wantlistItem);\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n };\n\n/**\n * MCP tool for deleting a release from a user's wantlist\n */\nexport const deleteItemInWantlistTool: Tool<\n FastMCPSessionAuth,\n typeof UserWantlistItemParamsSchema\n> = {\n name: 'delete_item_in_wantlist',\n description: `Delete a release from a user's wantlist`,\n parameters: UserWantlistItemParamsSchema,\n execute: async (args) => {\n try {\n const userService = new UserService();\n await userService.wants.deleteItem(args);\n\n return 'Release deleted from wantlist';\n } catch (error) {\n throw formatDiscogsError(error);\n }\n },\n};\n\nexport function registerUserWantlistTools(server: FastMCP): void {\n server.addTool(getUserWantlistTool);\n server.addTool(addToWantlistTool);\n server.addTool(editItemInWantlistTool);\n server.addTool(deleteItemInWantlistTool);\n}\n","import { FastMCP } from 'fastmcp';\nimport { registerDatabaseTools } from './database.js';\nimport { registerInventoryExportTool } from './inventoryExport.js';\nimport { registerMarketplaceTools } from './marketplace.js';\nimport { registerMediaTools } from './media.js';\nimport { registerUserCollectionTools } from './userCollection.js';\nimport { registerUserIdentityTools } from './userIdentity.js';\nimport { registerUserListsTools } from './userLists.js';\nimport { registerUserWantlistTools } from './userWantlist.js';\n\n/**\n * Registers all MCP tools with the server\n * @param server The FastMCP server instance\n */\nexport function registerTools(server: FastMCP): void {\n registerDatabaseTools(server);\n registerMarketplaceTools(server);\n registerInventoryExportTool(server);\n registerUserIdentityTools(server);\n registerUserCollectionTools(server);\n registerUserWantlistTools(server);\n registerUserListsTools(server);\n registerMediaTools(server);\n}\n","#!/usr/bin/env node\nimport { FastMCP } from 'fastmcp';\nimport { config, validateConfig } from './config.js';\nimport { registerTools } from './tools/index.js';\nimport { log } from './utils.js';\nimport { VERSION } from './version.js';\n\ntype ServerTransportType = 'stdio' | 'stream';\n\nfunction assertTransportType(transportType: string): transportType is ServerTransportType {\n return transportType === 'stdio' || transportType === 'stream';\n}\n\ntry {\n validateConfig();\n\n // Grab the transport type from the command line\n const transportType = process.argv[2] ?? 'stdio';\n\n // Make sure the transport type is allowed\n if (!assertTransportType(transportType)) {\n throw Error(\n `Invalid transport type: \"${transportType}\". Allowed: 'stdio' (default) or 'stream'.`,\n );\n }\n\n const server = new FastMCP({\n name: config.server.name,\n version: VERSION,\n });\n\n registerTools(server);\n\n if (transportType === 'stdio') {\n server.start({ transportType });\n } else if (transportType === 'stream') {\n server.start({\n transportType: 'httpStream',\n httpStream: {\n port: config.server.port,\n host: config.server.host,\n },\n });\n }\n\n log.info(`${config.server.name} started with transport type: ${transportType}`);\n} catch (error: unknown) {\n log.error(`Failed to run the ${config.server.name}: `, error);\n process.exit(1);\n}\n\n// Handle process termination gracefully\nprocess.on('SIGINT', () => {\n log.info('Shutting down server...');\n process.exit(0);\n});\n"]}