MCP 서버

rootvine-mcp

io.github.RagingOrangutan/rootvine-mcp
커머스 및 리테일 미디어 및 콘텐츠 공개 · 연결 가능 MCP 2025-11-25

이 MCP로 할 수 있는 일

Discovers music and provides live streaming, purchasing, vinyl, and CD links, along with charts, playlists, artist discographies, and pricing.

discover_music
Charts and collections
Browse live charts, genre and mood walls, editorial playlists, artist spotlights, and chart snapshots back to 1946 — "what's trending", "number one in 1994". Charts move weekly: call rather than recall. No arguments gives the chambers and featured walls; `year` gives that year's snapshots; `wall` gives its entries, each with a `query` for resolve_music. Add `resolve: true` with `wall` to get number one's links in the same call. RootVine never fabricates. Every link existed at resolved_at. Limits: UK-focused stores, prices in GBP; music only today — games are not live yet. On partial, say which sources didn't answer; on no_results, tell the user plainly — never fall back to guessing a link.
읽기 전용 외부 접근 가능
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'wall': {'type': 'string', 'maxLength': 500, 'description': 'A wall or chart-snapshot slug from an earlier answer (a BeatsVine wall address also works). Lists its entries; on a ranked chart position 1 is number one. Takes priority over `chamber` and `year`.'}, 'year': {'type': 'integer', 'maximum': 2100, 'minimum': 1946, 'description': "Chart snapshots from this year (1946 to now), for questions about the past — 'number one in 1994'. Pass a snapshot's slug back as `wall` for its entries. Takes priority over `chamber`."}, 'limit': {'type': 'integer', 'maximum': 30, 'description': 'Max walls, entries or snapshots to return: 10 by default, 30 at most.', 'exclusiveMinimum': 0}, 'chamber': {'enum': ['by-genre', 'for-this-moment', 'charts', 'by-era', 'spotlights'], 'type': 'string', 'description': "Chamber to browse; omit for an overview of all chambers and featured walls. 'by-genre' = genre corridors. 'for-this-moment' = moods and activities. 'charts' = live streaming charts. 'by-era' = decades. 'spotlights' = artist features."}, 'resolve': {'type': 'boolean', 'description': "With `wall`: also fetch number one's stream and buy links, in the same call."}}}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['mode', 'source_url', 'resolved_at', 'total'], 'properties': {'top': {'anyOf': [{'type': 'object', 'required': ['status', 'artist', 'title', 'kind', 'results', 'partial_sources', 'warnings', 'resolved_as', 'did_you_mean', 'page_url', 'cover_art', 'response_id', 'resolved_at', 'ttl_seconds'], 'properties': {'kind': {'anyOf': [{'enum': ['track', 'album'], 'type': 'string'}, {'type': 'null'}]}, 'title': {'type': ['string', 'null']}, 'artist': {'type': ['string', 'null']}, 'status': {'enum': ['success', 'partial', 'no_results'], 'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['rank', 'merchant', 'merchant_id', 'type', 'trust_tier', 'availability', 'price', 'click_url', 'url', 'ranking_reason'], 'properties': {'url': {'type': 'string'}, 'rank': {'type': 'number'}, 'type': {'enum': ['purchase', 'stream', 'subscription'], 'type': 'string'}, 'price': {'anyOf': [{'type': 'object', 'required': ['amount', 'currency'], 'properties': {'amount': {'type': 'number'}, 'currency': {'type': 'string'}}, 'additionalProperties': {}}, {'type': 'null'}], 'description': 'null when no price is listed — never zero, never free'}, 'edition': {'type': 'string'}, 'merchant': {'type': 'string'}, 'click_url': {'type': 'string', 'description': 'The link to give the user'}, 'trust_tier': {'enum': ['authoritative', 'verified', 'listed'], 'type': 'string'}, 'merchant_id': {'type': 'string'}, 'availability': {'enum': ['in_stock', 'preorder', 'available', 'unknown'], 'type': 'string'}, 'ranking_reason': {'type': 'object', 'required': ['code', 'summary'], 'properties': {'code': {'type': 'string'}, 'summary': {'type': 'string'}}, 'additionalProperties': {}}, 'price_freshness': {'type': 'string'}}, 'additionalProperties': {}}}, 'page_url': {'type': ['string', 'null'], 'description': 'The BeatsVine page, only when it is confirmed to exist'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'cover_art': {'type': ['string', 'null']}, 'resolved_as': {'type': 'object', 'required': ['query', 'via', 'corrected', 'note'], 'properties': {'via': {'anyOf': [{'enum': ['direct', 'catalogue_search', 'live_lookup'], 'type': 'string'}, {'type': 'null'}]}, 'note': {'type': ['string', 'null']}, 'query': {'type': ['string', 'null']}, 'corrected': {'type': 'boolean', 'description': 'The answer is for different words than asked: tell the user what is shown'}}, 'additionalProperties': {}}, 'resolved_at': {'type': 'string', 'description': 'Every link existed at this time'}, 'response_id': {'type': ['string', 'null']}, 'ttl_seconds': {'type': ['number', 'null']}, 'did_you_mean': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'artist', 'kind', 'query', 'page_url'], 'properties': {'kind': {'enum': ['track', 'album', 'artist'], 'type': 'string'}, 'query': {'type': 'string', 'description': 'Pass back as `query` to open exactly this'}, 'title': {'type': 'string'}, 'artist': {'type': ['string', 'null']}, 'page_url': {'type': ['string', 'null']}}, 'additionalProperties': {}}}, 'partial_sources': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Sources that did not answer: say so when not empty'}}, 'additionalProperties': {}}, {'type': 'null'}], 'description': "Number one's links, when resolve was asked for"}, 'mode': {'enum': ['foyer', 'chamber', 'wall', 'archives'], 'type': 'string'}, 'wall': {'type': 'object', 'required': ['slug', 'name', 'description', 'entity_type', 'attribution', 'page_url', 'publication'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'page_url': {'type': 'string'}, 'attribution': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'entity_type': {'type': ['string', 'null']}, 'publication': {'anyOf': [{'type': 'object', 'required': ['mode', 'chart_owner', 'full_chart_url', 'note'], 'properties': {'mode': {'type': 'string'}, 'note': {'type': ['string', 'null']}, 'chart_owner': {'type': ['string', 'null']}, 'full_chart_url': {'type': ['string', 'null']}}, 'description': "How much of the chart BeatsVine shows: 'full'; 'headline' — the number one only, the rest at full_chart_url; 'yearly-number-ones' — each year's best seller, no overall number one", 'additionalProperties': {}}, {'type': 'null'}]}}, 'additionalProperties': {}}, 'year': {'type': ['number', 'null']}, 'total': {'type': ['number', 'null']}, 'walls': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'name', 'description', 'entry_count', 'attribution', 'page_url'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string', 'description': 'Pass as `wall` to list its entries'}, 'page_url': {'type': 'string'}, 'attribution': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'entry_count': {'type': 'number'}}, 'additionalProperties': {}}}, 'years': {'type': 'array', 'items': {'type': 'number'}}, 'chamber': {'type': 'object', 'required': ['slug', 'name', 'tagline'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tagline': {'type': ['string', 'null']}}, 'additionalProperties': {}}, 'entries': {'type': 'array', 'items': {'type': 'object', 'required': ['position', 'title', 'artist', 'kind', 'query', 'page_url', 'cover_url', 'preview_url'], 'properties': {'kind': {'anyOf': [{'enum': ['track', 'album', 'artist'], 'type': 'string'}, {'type': 'null'}]}, 'query': {'type': ['string', 'null'], 'description': 'Pass to resolve_music (resolve_artist for an artist) for links; null: no BeatsVine page yet'}, 'title': {'type': ['string', 'null']}, 'artist': {'type': ['string', 'null']}, 'page_url': {'type': ['string', 'null']}, 'position': {'type': 'number'}, 'cover_url': {'type': ['string', 'null']}, 'preview_url': {'type': ['string', 'null']}}, 'additionalProperties': {}}}, 'chambers': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'name', 'tagline', 'wall_count'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tagline': {'type': ['string', 'null']}, 'wall_count': {'type': 'number'}}, 'additionalProperties': {}}}, 'top_note': {'type': ['string', 'null']}, 'snapshots': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'name', 'week', 'entry_count', 'page_url', 'publication'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string', 'description': "Pass as `wall`, with resolve: true for number one's links"}, 'week': {'type': ['string', 'null']}, 'page_url': {'type': 'string'}, 'entry_count': {'type': 'number'}, 'publication': {'anyOf': [{'type': 'object', 'required': ['mode', 'chart_owner', 'full_chart_url', 'note'], 'properties': {'mode': {'type': 'string'}, 'note': {'type': ['string', 'null']}, 'chart_owner': {'type': ['string', 'null']}, 'full_chart_url': {'type': ['string', 'null']}}, 'description': "How much of the chart BeatsVine shows: 'full'; 'headline' — the number one only, the rest at full_chart_url; 'yearly-number-ones' — each year's best seller, no overall number one", 'additionalProperties': {}}, {'type': 'null'}]}}, 'additionalProperties': {}}}, 'source_url': {'type': ['string', 'null']}, 'resolved_at': {'type': 'string'}}, 'additionalProperties': {}}
find_product
Find a product
Start here when the category is unclear. Pass the user's words as `query`; RootVine reads music or games from them (keyword-based — set `category` when you know it) and answers in that tool's shape. Music is live; games answer "coming soon" for now. RootVine never fabricates. Every link existed at resolved_at. Limits: UK-focused stores, prices in GBP; music only today — games are not live yet. On partial, say which sources didn't answer; on no_results, tell the user plainly — never fall back to guessing a link.
읽기 전용 외부 접근 가능
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query'], 'properties': {'query': {'type': 'string', 'maxLength': 500, 'description': "The user's words: 'where can I stream Bad Guy by Billie Eilish', 'Mario Kart on Switch'."}, 'category': {'enum': ['music', 'game', 'auto'], 'type': 'string', 'description': "Set it when you know it; 'auto' (the default) reads it from the words."}}}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['category', 'detected'], 'properties': {'game': {'type': 'object', 'required': ['status', 'live', 'query', 'message', 'results', 'response_id', 'resolved_at'], 'properties': {'live': {'type': 'boolean', 'description': 'false: games are not live yet — there are no links or prices to give'}, 'query': {'type': 'string'}, 'status': {'enum': ['coming_soon', 'success', 'partial', 'no_results'], 'type': 'string'}, 'message': {'type': ['string', 'null']}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['rank', 'merchant', 'merchant_id', 'type', 'trust_tier', 'availability', 'price', 'click_url', 'url', 'ranking_reason'], 'properties': {'url': {'type': 'string'}, 'rank': {'type': 'number'}, 'type': {'enum': ['purchase', 'stream', 'subscription'], 'type': 'string'}, 'price': {'anyOf': [{'type': 'object', 'required': ['amount', 'currency'], 'properties': {'amount': {'type': 'number'}, 'currency': {'type': 'string'}}, 'additionalProperties': {}}, {'type': 'null'}], 'description': 'null when no price is listed — never zero, never free'}, 'edition': {'type': 'string'}, 'merchant': {'type': 'string'}, 'click_url': {'type': 'string', 'description': 'The link to give the user'}, 'trust_tier': {'enum': ['authoritative', 'verified', 'listed'], 'type': 'string'}, 'merchant_id': {'type': 'string'}, 'availability': {'enum': ['in_stock', 'preorder', 'available', 'unknown'], 'type': 'string'}, 'ranking_reason': {'type': 'object', 'required': ['code', 'summary'], 'properties': {'code': {'type': 'string'}, 'summary': {'type': 'string'}}, 'additionalProperties': {}}, 'price_freshness': {'type': 'string'}}, 'additionalProperties': {}}}, 'resolved_at': {'type': 'string'}, 'response_id': {'type': ['string', 'null']}}, 'additionalProperties': {}}, 'music': {'type': 'object', 'required': ['status', 'artist', 'title', 'kind', 'results', 'partial_sources', 'warnings', 'resolved_as', 'did_you_mean', 'page_url', 'cover_art', 'response_id', 'resolved_at', 'ttl_seconds'], 'properties': {'kind': {'anyOf': [{'enum': ['track', 'album'], 'type': 'string'}, {'type': 'null'}]}, 'title': {'type': ['string', 'null']}, 'artist': {'type': ['string', 'null']}, 'status': {'enum': ['success', 'partial', 'no_results'], 'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['rank', 'merchant', 'merchant_id', 'type', 'trust_tier', 'availability', 'price', 'click_url', 'url', 'ranking_reason'], 'properties': {'url': {'type': 'string'}, 'rank': {'type': 'number'}, 'type': {'enum': ['purchase', 'stream', 'subscription'], 'type': 'string'}, 'price': {'anyOf': [{'type': 'object', 'required': ['amount', 'currency'], 'properties': {'amount': {'type': 'number'}, 'currency': {'type': 'string'}}, 'additionalProperties': {}}, {'type': 'null'}], 'description': 'null when no price is listed — never zero, never free'}, 'edition': {'type': 'string'}, 'merchant': {'type': 'string'}, 'click_url': {'type': 'string', 'description': 'The link to give the user'}, 'trust_tier': {'enum': ['authoritative', 'verified', 'listed'], 'type': 'string'}, 'merchant_id': {'type': 'string'}, 'availability': {'enum': ['in_stock', 'preorder', 'available', 'unknown'], 'type': 'string'}, 'ranking_reason': {'type': 'object', 'required': ['code', 'summary'], 'properties': {'code': {'type': 'string'}, 'summary': {'type': 'string'}}, 'additionalProperties': {}}, 'price_freshness': {'type': 'string'}}, 'additionalProperties': {}}}, 'page_url': {'type': ['string', 'null'], 'description': 'The BeatsVine page, only when it is confirmed to exist'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'cover_art': {'type': ['string', 'null']}, 'resolved_as': {'type': 'object', 'required': ['query', 'via', 'corrected', 'note'], 'properties': {'via': {'anyOf': [{'enum': ['direct', 'catalogue_search', 'live_lookup'], 'type': 'string'}, {'type': 'null'}]}, 'note': {'type': ['string', 'null']}, 'query': {'type': ['string', 'null']}, 'corrected': {'type': 'boolean', 'description': 'The answer is for different words than asked: tell the user what is shown'}}, 'additionalProperties': {}}, 'resolved_at': {'type': 'string', 'description': 'Every link existed at this time'}, 'response_id': {'type': ['string', 'null']}, 'ttl_seconds': {'type': ['number', 'null']}, 'did_you_mean': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'artist', 'kind', 'query', 'page_url'], 'properties': {'kind': {'enum': ['track', 'album', 'artist'], 'type': 'string'}, 'query': {'type': 'string', 'description': 'Pass back as `query` to open exactly this'}, 'title': {'type': 'string'}, 'artist': {'type': ['string', 'null']}, 'page_url': {'type': ['string', 'null']}}, 'additionalProperties': {}}}, 'partial_sources': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Sources that did not answer: say so when not empty'}}, 'additionalProperties': {}}, 'category': {'enum': ['music', 'game'], 'type': 'string'}, 'detected': {'type': 'boolean', 'description': 'true: the category was read from the words — set `category` if it is wrong'}}, 'additionalProperties': {}}
resolve_artist
Artist discography
An artist's live profile and discography from BeatsVine, for "what else has X made" or "X's albums". Each release has a `query` to pass to resolve_music for its links; vinyl, CD and collector editions are album-level, so this is the route to them. Pass the artist's name as `query`. `discography_complete: false` means not yet indexed — unknown, not empty. RootVine never fabricates. Every link existed at resolved_at. Limits: UK-focused stores, prices in GBP; music only today — games are not live yet. On partial, say which sources didn't answer; on no_results, tell the user plainly — never fall back to guessing a link.
읽기 전용 외부 접근 가능
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'slug': {'type': 'string', 'maxLength': 500, 'description': 'Deprecated alias for `query`, kept for older clients. Send exactly one of `query` or `slug`.'}, 'query': {'type': 'string', 'maxLength': 500, 'description': "The artist's name in plain words: 'Stromae', 'Billie Eilish'. Also takes a BeatsVine artist address or an `artist/…` query from an earlier answer."}}}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['status', 'artist', 'discography_complete', 'release_count', 'releases', 'resolved_as', 'did_you_mean', 'resolved_at'], 'properties': {'artist': {'anyOf': [{'type': 'object', 'required': ['name', 'query', 'page_url', 'genres'], 'properties': {'name': {'type': 'string'}, 'query': {'type': 'string', 'description': 'Pass back to resolve_artist to open this artist'}, 'genres': {'type': 'array', 'items': {'type': 'string'}}, 'page_url': {'type': 'string'}}, 'additionalProperties': {}}, {'type': 'null'}]}, 'status': {'enum': ['success', 'no_results'], 'type': 'string'}, 'releases': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'type', 'year', 'query', 'page_url', 'cover_url'], 'properties': {'type': {'type': ['string', 'null']}, 'year': {'type': ['number', 'null']}, 'query': {'type': 'string', 'description': "Pass to resolve_music for this release's links"}, 'title': {'type': 'string'}, 'page_url': {'type': ['string', 'null']}, 'cover_url': {'type': ['string', 'null']}}, 'additionalProperties': {}}}, 'resolved_as': {'type': 'object', 'required': ['query', 'via', 'corrected', 'note'], 'properties': {'via': {'anyOf': [{'enum': ['direct', 'catalogue_search', 'live_lookup'], 'type': 'string'}, {'type': 'null'}]}, 'note': {'type': ['string', 'null']}, 'query': {'type': ['string', 'null']}, 'corrected': {'type': 'boolean', 'description': 'The answer is for different words than asked: tell the user what is shown'}}, 'additionalProperties': {}}, 'resolved_at': {'type': 'string'}, 'did_you_mean': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'artist', 'kind', 'query', 'page_url'], 'properties': {'kind': {'enum': ['track', 'album', 'artist'], 'type': 'string'}, 'query': {'type': 'string', 'description': 'Pass back as `query` to open exactly this'}, 'title': {'type': 'string'}, 'artist': {'type': ['string', 'null']}, 'page_url': {'type': ['string', 'null']}}, 'additionalProperties': {}}}, 'release_count': {'type': ['number', 'null']}, 'discography_complete': {'type': ['boolean', 'null'], 'description': 'false: BeatsVine has not indexed this artist yet — an empty list means unknown, not none'}}, 'additionalProperties': {}}
resolve_game
Game prices (coming soon)
Where to buy a video game. Not live yet: every call returns an explicit "coming soon" — no links, no prices — and contacts no store. Tell the user plainly that games aren't supported yet; never guess a store link or a price. For music, use resolve_music. RootVine never fabricates. Every link existed at resolved_at. Limits: UK-focused stores, prices in GBP; music only today — games are not live yet. On partial, say which sources didn't answer; on no_results, tell the user plainly — never fall back to guessing a link.
읽기 전용 외부 접근 가능
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'slug': {'type': 'string', 'maxLength': 500, 'description': 'Deprecated alias for `query`, kept for older clients. Send exactly one of `query` or `slug`.'}, 'query': {'type': 'string', 'maxLength': 500, 'description': "The game's name in plain words: 'Elden Ring'."}}}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['status', 'live', 'query', 'message', 'results', 'response_id', 'resolved_at'], 'properties': {'live': {'type': 'boolean', 'description': 'false: games are not live yet — there are no links or prices to give'}, 'query': {'type': 'string'}, 'status': {'enum': ['coming_soon', 'success', 'partial', 'no_results'], 'type': 'string'}, 'message': {'type': ['string', 'null']}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['rank', 'merchant', 'merchant_id', 'type', 'trust_tier', 'availability', 'price', 'click_url', 'url', 'ranking_reason'], 'properties': {'url': {'type': 'string'}, 'rank': {'type': 'number'}, 'type': {'enum': ['purchase', 'stream', 'subscription'], 'type': 'string'}, 'price': {'anyOf': [{'type': 'object', 'required': ['amount', 'currency'], 'properties': {'amount': {'type': 'number'}, 'currency': {'type': 'string'}}, 'additionalProperties': {}}, {'type': 'null'}], 'description': 'null when no price is listed — never zero, never free'}, 'edition': {'type': 'string'}, 'merchant': {'type': 'string'}, 'click_url': {'type': 'string', 'description': 'The link to give the user'}, 'trust_tier': {'enum': ['authoritative', 'verified', 'listed'], 'type': 'string'}, 'merchant_id': {'type': 'string'}, 'availability': {'enum': ['in_stock', 'preorder', 'available', 'unknown'], 'type': 'string'}, 'ranking_reason': {'type': 'object', 'required': ['code', 'summary'], 'properties': {'code': {'type': 'string'}, 'summary': {'type': 'string'}}, 'additionalProperties': {}}, 'price_freshness': {'type': 'string'}}, 'additionalProperties': {}}}, 'resolved_at': {'type': 'string'}, 'response_id': {'type': ['string', 'null']}}, 'additionalProperties': {}}
resolve_music
Music links
Live stream, buy and collect links for a song or album — streaming services, digital stores, vinyl and CD — ranked by trust, price and availability, never by commission. Call it rather than recall: links and prices change; a guessed link 404s. Pass the user's words as `query` ("galway girl by ed sheeran"); never build slugs. On a miss, `did_you_mean` lists close matches, each with a `query` to pass back; when `resolved_as.corrected` is true, tell the user which recording is shown. RootVine never fabricates. Every link existed at resolved_at. Limits: UK-focused stores, prices in GBP; music only today — games are not live yet. On partial, say which sources didn't answer; on no_results, tell the user plainly — never fall back to guessing a link.
읽기 전용 외부 접근 가능
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'slug': {'type': 'string', 'maxLength': 500, 'description': 'Deprecated alias for `query`, kept for older clients. Send exactly one of `query` or `slug`.'}, 'query': {'type': 'string', 'maxLength': 500, 'description': "What to look up, in the user's own words: 'galway girl by ed sheeran', 'Abbey Road vinyl'. Also takes a BeatsVine page address or a `query` value from an earlier answer. Do not build slugs."}}}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['status', 'artist', 'title', 'kind', 'results', 'partial_sources', 'warnings', 'resolved_as', 'did_you_mean', 'page_url', 'cover_art', 'response_id', 'resolved_at', 'ttl_seconds'], 'properties': {'kind': {'anyOf': [{'enum': ['track', 'album'], 'type': 'string'}, {'type': 'null'}]}, 'title': {'type': ['string', 'null']}, 'artist': {'type': ['string', 'null']}, 'status': {'enum': ['success', 'partial', 'no_results'], 'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['rank', 'merchant', 'merchant_id', 'type', 'trust_tier', 'availability', 'price', 'click_url', 'url', 'ranking_reason'], 'properties': {'url': {'type': 'string'}, 'rank': {'type': 'number'}, 'type': {'enum': ['purchase', 'stream', 'subscription'], 'type': 'string'}, 'price': {'anyOf': [{'type': 'object', 'required': ['amount', 'currency'], 'properties': {'amount': {'type': 'number'}, 'currency': {'type': 'string'}}, 'additionalProperties': {}}, {'type': 'null'}], 'description': 'null when no price is listed — never zero, never free'}, 'edition': {'type': 'string'}, 'merchant': {'type': 'string'}, 'click_url': {'type': 'string', 'description': 'The link to give the user'}, 'trust_tier': {'enum': ['authoritative', 'verified', 'listed'], 'type': 'string'}, 'merchant_id': {'type': 'string'}, 'availability': {'enum': ['in_stock', 'preorder', 'available', 'unknown'], 'type': 'string'}, 'ranking_reason': {'type': 'object', 'required': ['code', 'summary'], 'properties': {'code': {'type': 'string'}, 'summary': {'type': 'string'}}, 'additionalProperties': {}}, 'price_freshness': {'type': 'string'}}, 'additionalProperties': {}}}, 'page_url': {'type': ['string', 'null'], 'description': 'The BeatsVine page, only when it is confirmed to exist'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'cover_art': {'type': ['string', 'null']}, 'resolved_as': {'type': 'object', 'required': ['query', 'via', 'corrected', 'note'], 'properties': {'via': {'anyOf': [{'enum': ['direct', 'catalogue_search', 'live_lookup'], 'type': 'string'}, {'type': 'null'}]}, 'note': {'type': ['string', 'null']}, 'query': {'type': ['string', 'null']}, 'corrected': {'type': 'boolean', 'description': 'The answer is for different words than asked: tell the user what is shown'}}, 'additionalProperties': {}}, 'resolved_at': {'type': 'string', 'description': 'Every link existed at this time'}, 'response_id': {'type': ['string', 'null']}, 'ttl_seconds': {'type': ['number', 'null']}, 'did_you_mean': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'artist', 'kind', 'query', 'page_url'], 'properties': {'kind': {'enum': ['track', 'album', 'artist'], 'type': 'string'}, 'query': {'type': 'string', 'description': 'Pass back as `query` to open exactly this'}, 'title': {'type': 'string'}, 'artist': {'type': ['string', 'null']}, 'page_url': {'type': ['string', 'null']}}, 'additionalProperties': {}}}, 'partial_sources': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Sources that did not answer: say so when not empty'}}, 'additionalProperties': {}}
변경됨
discover_music
2026년 9월 29일 2:48 AM
추가됨
discover_music
2026년 9월 27일 2:40 AM
추가됨
resolve_artist
2026년 9월 27일 2:40 AM
추가됨
find_product
2026년 9월 27일 2:40 AM
추가됨
resolve_game
2026년 9월 27일 2:40 AM
추가됨
resolve_music
2026년 9월 27일 2:40 AM