MCP 서버

Songs To Your Eyes — production music catalogue

com.songstoyoureyes/catalog
미디어 및 콘텐츠 공개 · 연결 가능 MCP 2025-11-25

이 MCP로 할 수 있는 일

Searches and provides details, versions, previews, and clearance metadata for production-music cues.

stye_about
About Songs To Your Eyes: licensing and privacy
What this service is, how licensing works and what the server sees. Quote the licensing and privacy statements as returned — never paraphrase terms.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'title': 'stye_aboutArguments', 'properties': {}}
stye_cue_sheet
Cue sheet: writers, splits, ISRC, publisher
The clearance data a broadcaster or PRO filing needs for one cue: every credited writer with role, society and IPI, every publisher with its share, the ISRC and the album. Present it as a clean table. If a field is not returned, report it as not on file — never fill it from anywhere else — and point the user at info@songstoyoureyes.com for gaps. Licensing itself is arranged with the Songs To Your Eyes team, not in this conversation.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'title': 'stye_cue_sheetArguments', 'required': ['ref'], 'properties': {'ref': {'type': 'integer', 'title': 'Ref', 'description': "A track ref from any other tool's results."}}}
stye_feedback
Report result quality
Send the catalogue team feedback on how well results fit — a wrong-feeling page, a brief that found nothing, or praise worth keeping. ONLY send it with the user's explicit consent: ask first, and pass consented=true only after they agree. The message should be the user's own words.
입력 스키마
{'type': 'object', 'title': 'stye_feedbackArguments', 'required': ['message', 'consented'], 'properties': {'ref': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Ref', 'default': None, 'description': 'The track ref it concerns, if one.'}, 'kind': {'type': 'string', 'title': 'Kind', 'default': 'other', 'description': "'search_quality', 'missing_music', 'praise' or 'other'."}, 'brief': {'anyOf': [{'type': 'string', 'maxLength': 1000}, {'type': 'null'}], 'title': 'Brief', 'default': None, 'description': 'The search brief it concerns, if one.'}, 'message': {'type': 'string', 'title': 'Message', 'maxLength': 4000, 'minLength': 3, 'description': "The user's feedback, verbatim."}, 'consented': {'type': 'boolean', 'title': 'Consented', 'description': 'True ONLY if the user explicitly agreed to send this feedback.'}}}
stye_find_similar
Find similar cues
Cues close in character to a given one — matched on the catalogue's own editorial description of each cue together with its genres, moods and instrumentation — for 'more like this one' moments. It compares how the cues are DESCRIBED, not the waveforms, so it is strong on character and mood and will not hear two cues as alike purely because they sound alike. Give the user each result's listen_url. Results are main mixes from other cue families, at most three per album.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'title': 'stye_find_similarArguments', 'required': ['ref'], 'properties': {'ref': {'type': 'integer', 'title': 'Ref', 'description': 'The track ref to match against.'}, 'limit': {'type': 'integer', 'title': 'Limit', 'default': 8, 'maximum': 12, 'minimum': 1, 'description': 'How many similar cues to return (default 8).'}}}
stye_fit_to_duration
Find music that fits a runtime
Find music that fits an exact runtime — for a cut of known length, like a 30-second advert or a 90-second title sequence. Two kinds of result come back. Some cues simply run close to the target length already (fit='native'). Others are purpose-made short edits of a longer piece — a 30-second mix cut down by the composer (fit='cutdown') — which is usually the better choice, because it is built to land on time rather than fade out. delta_s is how far each result sits from the target, negative meaning shorter. For a cutdown, licence_ref identifies that specific edit (the thing to license), while ref points at the full-length original that carries the description and the preview. Every result carries listen_url — a permanent page where the cue can actually be played. ALWAYS give the user the listen_url. A track they cannot hear is of no use to them. Use this when someone needs music to license for a video, film, advert, trailer or podcast, or mentions Songs To Your Eyes.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'title': 'stye_fit_to_durationArguments', 'required': ['target_seconds'], 'properties': {'brief': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Brief', 'default': None, 'description': "Optional sound brief, e.g. 'epic cinematic trailer'."}, 'limit': {'type': 'integer', 'title': 'Limit', 'default': 8, 'maximum': 25, 'minimum': 1}, 'moods': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'title': 'Moods', 'default': None, 'description': 'Match ANY of these moods.'}, 'composer': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Composer', 'default': None, 'description': 'Only tracks credited to this composer/artist; partial names match, case-insensitive.'}, 'has_vocals': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Has Vocals', 'default': None, 'description': "true = songs with sung lead vocals/lyrics only. false = everything else, including wordless vocal textures (background vocals, choir) — for 'background vocals' requests use false, not true."}, 'target_seconds': {'type': 'number', 'title': 'Target Seconds', 'maximum': 3600, 'description': 'The runtime to fill, in seconds — e.g. 30 for a 30-second spot.', 'exclusiveMinimum': 0}, 'include_previews': {'type': 'boolean', 'title': 'Include Previews', 'default': False, 'description': 'Attach streaming preview links (15-min expiry).'}, 'tolerance_seconds': {'anyOf': [{'type': 'number', 'exclusiveMinimum': 0}, {'type': 'null'}], 'title': 'Tolerance Seconds', 'default': None, 'description': 'Acceptable deviation. Default: 15% of target, minimum 2s.'}}}
stye_get_track
Get full details for one track
Everything about one cue: what it sounds like and suits, its tempo, key, length and instrumentation, every version that exists of it (stems, shorter cuts, alternate mixes), and a link to hear it. Use this when someone has picked a track from a search and wants to know more, or wants to know what else that cue can be delivered as. Every result carries listen_url — a permanent page where the cue can actually be played. ALWAYS give the user the listen_url. A track they cannot hear is of no use to them. Use this when someone needs music to license for a video, film, advert, trailer or podcast, or mentions Songs To Your Eyes.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'title': 'stye_get_trackArguments', 'required': ['ref'], 'properties': {'ref': {'type': 'integer', 'title': 'Ref', 'description': "A track ref from any other tool's results."}}}
stye_list_versions
List versions, stems and shorter cuts
Show every form a cue can be delivered in. Most cues come with more than the full-length mix: timed cutdowns (15, 30, 60 seconds) built to hit standard ad and promo lengths; alternate mixes such as no-drums, underscore or instrumental, for when music has to sit beneath dialogue; and individual instrument stems for an editor who wants to rebalance the track. Useful when a cue is nearly right but needs to be shorter, quieter under a voice, or stripped back.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'title': 'stye_list_versionsArguments', 'required': ['ref'], 'properties': {'ref': {'type': 'integer', 'title': 'Ref', 'description': 'Any track ref — main mix or one of its versions; the whole family is returned.'}}}
stye_search_tracks
Find music for a scene or brief
Find music for a video, film, advert, trailer or podcast by describing what it needs to do. Search professionally produced cues by MEANING, not just tags — describe the scene, the mood, the instruments, how it should develop. "Tense investigative underscore that never resolves" or "warm and hopeful for a charity film" work far better than single keywords, because the brief is matched against editorial descriptions of how each cue actually behaves as well as against its tags. Use this tool when someone needs music to license for a video, film, advert, trailer or podcast (a soundtrack, score, cue or background music to play under footage), or mentions Songs To Your Eyes. Put the sound in `brief`. Use filters ONLY for requirements the user actually stated: every filter is a hard constraint, they combine with AND, and cues missing a tag are silently dropped — so stacking several filters can empty the results. If a search comes back thin, drop filters and put the nuance in the brief before concluding the catalogue has nothing. ONE SEARCH RETURNS ONE FULL PAGE — there is no pagination. Repeating a search with the same arguments returns the SAME cues, so never search again just to get more of the same: set `limit` high enough on the first call (default 15, up to 25). One well-chosen page usually holds enough range to answer; a second search earns its cost only when it takes a genuinely different angle or a changed brief. VOCALS — the trap to avoid: has_vocals=true means SONGS with sung lead vocals and lyrics. Wordless vocal textures (background vocals, oohs and aahs, choir pads) count as INSTRUMENTAL in this catalogue. A user asking for "background vocals" almost always wants NO lyrics: set has_vocals=false and NAME THE TEXTURE IN THE BRIEF — "background vocals", "choir", "vocal hooks", "group singing" in the brief text are detected server-side and applied as a hard requirement, so every result really carries that texture. Do not re-search if the page is short: a short page means the catalogue's honest supply of that texture. COMPOSER — when someone asks for music BY a composer or artist ("tracks by Yair Albeg Wein", "more from this composer"), use the `composer` filter with the name — partial names match. It works with no brief at all (a straight listing of that composer's cues) or combined with a brief to search within their catalogue. Every result carries its `composer` credit, so attribution comes from the catalogue itself — never guess it from outside sources. EXPLORING, not just matching — for a scene, a place, or any creative request, ONE search is not an exploration of the whole catalogue. Run SEVERAL searches from genuinely different angles and curate across them: (1) the literal angle — traditional instruments and idiom; (2) the FEEL angle — texture, pulse and atmosphere with no instrument names ("hazy hypnotic modal groove, dusty and sun-baked"); (3) a crossover angle — the setting's colour through another genre (desert funk, ethnic electronica, psychedelic world). The feel and crossover angles routinely find the most artistic picks that the literal angle misses. Raise `limit` toward 25 when exploring. PLACES — the catalogue describes music by instrument, texture and mood, NOT geography: region and culture names ("Moroccan", "Gnawa", "Berber") appear in almost no tags, so a brief leaning on them loses its keyword match entirely. Translate the place into what it SOUNDS like — instruments (oud, darbuka, qanun, hand percussion), textures (desert, hypnotic, modal, dusty), and let one of your angles drop the geography altogether. ALBUMS are curated sets of about five cues built around one idea. The `album` filter pulls the rest of a set, and that is the right move when the user NAMES an album, asks what else is on the one a cue came from, or wants more of a sound they have already picked. It is NOT how to answer a brief. Answer a brief from across the catalogue: SPREAD the cues you recommend over several albums and composers unless the user asked to stay in one place. Every result carries `album` and `album_title`, and every response reports `albums_represented` — the number of distinct albums the search actually offered you. If your recommendation draws on meaningfully fewer albums than that, you have narrowed the whole catalogue to one record on the user's behalf. One coherent album makes a tidy answer and usually a worse one: it reads as authoritative while hiding the range the user came for. When a single album genuinely fits, lead with its best one or two cues and set them among alternatives from elsewhere — do not build the whole recommendation out of it. EVENTS AND OCCASIONS — a trap worth knowing. Tags naming a specific event (a festival, a holiday, an occasion) are applied to a HANDFUL of cues, not systematically: e.g. only 20 cues carry "Burning Man" while the catalogue holds ~1,900 electronic cues, and 39 carry "Festival". (Those two tag counts are literals and were re-checked on 2026-09-04; the electronic figure is read from the catalogue.) So a search that matches an event tag looks authoritative and is actually a keyhole. NEVER stop there. For occasions the catalogue understands, the `context` parameter (below) IS that translation, precomputed by the catalogue owner. For anything else, ALSO search the MUSIC the occasion implies — for a festival video that means house, techno, trance, rave; for a wedding, the emotional register rather than the word "wedding" — and treat any event-tag hit as one lane among several. CONTEXTS — owner-curated occasion searches. The `context` parameter takes a named context (e.g. 'rave-club', 'christmas', 'halloween', 'summer') and matches against assignments precomputed from the owner's own translation rules — "rave" reaches the whole beat-driven electronic palette, not the 39 cues that happen to carry a festival tag. Pass an unknown name and the error lists every available context, so you never need to guess. Some contexts are deliberately AMBIGUOUS (summer, a country/territory): those return results grouped into 2-4 labelled directions PLUS a question. Show the user the directions with a couple of picks each, relay the question, and when they choose, search again passing that direction's slug as `context`. Country names (Lebanon, Morocco, Turkey...) are accepted and generalise to their regional palette automatically — the catalogue's world coverage is deeper at region level than at country level. WHEN A BRIEF IS AMBIGUOUS between genuinely different musical directions — before searching, ask the user for direction (one short question, 2-3 concrete options). "Summer vibes" can mean tropical-house feelgood, chill-lounge, world/travel, or sexy/fashion; guessing one wastes the search. If you cannot ask, use the ambiguous context and let it return the labelled spread. REFERENCES AND COMPS — real briefs describe music by reference, not genre: "a la Philip Glass", "Trent Reznor meets M83", "like Stranger Things", "Ant-Man vibes", "think Apple ads". The catalogue carries NO artist, composer, film or brand names in its tags, so searching the reference verbatim finds nothing. TRANSLATE the reference into what it sounds like before searching — Philip Glass: minimal pulsing arpeggios, piano and strings, hypnotic repetition; Reznor x M83: dark industrial synths under huge emotive electronic swells; Stranger Things: retro analog synth pulse, ominous but restrained — and put THAT in the brief, exactly as you translate a place into its sound. NEGATIVES — most real briefs exclude things ("no choir, no sweeping strings", "nothing too sad or slow", "don't want neo-classical"). Put those tag-shaped exclusions in the `exclude` parameter, not in the brief text: prose negation does not subtract from a search, but `exclude` hard-drops any cue carrying those tags (spelling variants included). Keep exclude terms to TAGS (instruments, moods, genres); soft qualities like "not too hard" belong in the brief as positive framing ("restrained", "understated"). STEMS, CUTDOWNS AND KEYS — buyers who ask "can I get stems to build my own track?" can be told yes: the catalogue holds ~43,000 stem versions and ~2,700 drums-only stems, reachable per track via stye_list_versions; ~1,000 cues have a labelled :30 cutdown (stye_fit_to_duration finds natural fits too), and the `key` filter matches briefs like "preferably in E" (matches both E and Em; ~7,100 mains carry a key). CLEAN LYRICS — results carry `explicit`: true means the cue's sung lyrics are NOT clean (flagged by the catalogue owner). For "fully clean lyrics only" briefs, drop any result with explicit=true. LYRICS ARE SEARCHABLE, BUT BY WORDING, NOT BY THEME — and the distinction matters because the catalogue is overwhelmingly instrumental. 328 cues have lyrics on file, and those lyrics ARE in the full-text index, so a brief containing words that are actually sung will match them. What this path does NOT do is match by lyric SUBJECT: "a song about winning" finds cues whose lyrics contain "winning", not every cue about victory. Put the likely WORDING in the brief, and treat a lyric hit as a bonus on top of the musical match rather than as a filter — 328 of the catalogue is a keyhole, the same trap as an event tag above. Each result describes one cue. listen_url is the important one — a permanent page where the track can be played, with cover art and a waveform. Give it to the user every time; it is how they actually hear the music. ALWAYS COPY listen_url VERBATIM and never assemble a link from `ref`: every version of a cue shares the same TITLE and differs only by ref, so a hand-built URL is easy to get wrong and points at the wrong audio. Every row that can be played carries its own listen_url — use that one. PUT IT ON ITS OWN LINE AS PLAIN MARKDOWN, and never wrap it in raw HTML. Observed 2026-09-10 in a portrait Claude window: every link came back preceded by a literal "<br>" — the assistant reaching for an HTML line break, which renders as visible text rather than as a break. The data is clean; this is a presentation habit, and saying so here is the only place it can be corrected for every client at once. Also returned: title, album, composer (the credited artist — trust THIS field for attribution, never outside sources), description (what it sounds like and what it suits), duration_s, bpm, key, has_vocals, genres, moods, instruments, use_cases, keywords (extra catalogue tags beyond those three lists — tempo bands like 'Mid Tempo', placements like 'TV Score'), and three editorial judgements worth quoting back — energy (low | low-building | moderate | building | high), resolves (does it land, or stay unresolved and tense), and vo_friendly (does it leave space for a voiceover). versions counts the stems, alternate mixes and shorter cuts that exist for it, and cutdown_lengths_s lists those cut lengths in seconds. ref identifies the cue for the other tools. preview_url, when present, is a temporary streaming link that expires after 15 minutes — prefer listen_url, which never expires. A field that is absent from a row means the catalogue has no data for it — an absent bpm means simply untagged, not slow; an absent composer means no usable credit; an absent cutdown_lengths_s means no timed cutdowns exist. Never treat absence as a fault in the result. The player streams nearly every cue clean. A file downloaded from it without a licence is a watermarked test file (a spoken "STYE Music" tag), by design — a clean file comes with a licence, not with a preview. preview_url, when requested, is watermarked too.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'title': 'stye_search_tracksArguments', 'properties': {'key': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Key', 'default': None, 'description': "Musical key, e.g. 'E', 'Em', 'Bb', 'F# minor'. A bare major key also matches its minor ('E' matches E and Em) — briefs saying 'in E' usually accept both. ~7,100 mains carry key data, about 44% of the catalogue; the filter skips the rest, so use it only when the brief asks."}, 'album': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Album', 'default': None, 'description': "Only tracks from this album — by name ('Desert Funk') or catalogue code ('STYE1204'); partial names match. Use it whenever someone names an album or asks what else is on the one a track came from. Works with no brief (lists the album) or with one (search inside it). Setting it disables the per-album cap, so the whole set comes back — which is why it is for a user who ASKED about an album, not a way to answer a brief. Answering a brief out of one album narrows the catalogue to one record; spread the picks instead."}, 'brief': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Brief', 'default': None, 'description': "What the music should sound like and what it is for — the mood, the scene, the instruments, vocal textures, how it should build. E.g. 'tense investigative underscore that never resolves'. Tempo and length belong in the filters below; vocal TEXTURE (wordless backing vocals, choir pads) belongs HERE, in the brief."}, 'limit': {'type': 'integer', 'title': 'Limit', 'default': 15, 'maximum': 25, 'minimum': 1, 'description': 'Max results. One page per search — there is NO pagination, and repeating a search with the same arguments returns the SAME cues. Ask for as many as you need up front rather than searching twice; raise it toward 25 when exploring.'}, 'moods': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'title': 'Moods', 'default': None, 'description': "Match ANY of these moods, e.g. ['Tension','Mysterious']."}, 'energy': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Energy', 'default': None, 'description': 'One of: low, low-building, moderate, building, high.'}, 'genres': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'title': 'Genres', 'default': None, 'description': "Match ANY of these genres, e.g. ['Trailer','Orchestral']."}, 'bpm_max': {'anyOf': [{'type': 'integer', 'maximum': 400, 'minimum': 20}, {'type': 'null'}], 'title': 'Bpm Max', 'default': None, 'description': 'Maximum BPM.'}, 'bpm_min': {'anyOf': [{'type': 'integer', 'maximum': 400, 'minimum': 20}, {'type': 'null'}], 'title': 'Bpm Min', 'default': None, 'description': 'Minimum BPM. Use sparingly: around 54% of the catalogue has no tempo tag, and any BPM filter excludes all of those cues — good matches included. Prefer describing the pace in the brief.'}, 'context': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Context', 'default': None, 'description': "Owner-curated occasion/context search — see CONTEXTS in the tool description. A context name ('rave-club', 'christmas', 'halloween', 'summer') or a country name (generalises to its regional palette). Unknown names return the full list of valid contexts. Ambiguous contexts return results grouped into labelled directions plus a question to relay to the user."}, 'exclude': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'title': 'Exclude', 'default': None, 'description': "Hard-drop any cue carrying ANY of these tags — for a brief's exclusions ('no choir', 'avoid sweeping strings', 'not neo-classical'). Spelling variants and plurals are folded, so 'neo-classical' also drops 'Neoclassical'. Tag-shaped terms only; soft qualities belong in the brief."}, 'composer': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Composer', 'default': None, 'description': "Only tracks credited to this composer/artist. Partial names match ('Albeg' finds 'Yair Albeg Wein'), case-insensitive. Works alone — 'music by <name>' needs no brief — or combined with a brief to search within one composer's catalogue. Every result carries its `composer` credit either way."}, 'has_vocals': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Has Vocals', 'default': None, 'description': "true = SONGS with sung lead vocals and lyrics. false = everything else, INCLUDING cues with wordless vocal textures (background vocals, oohs/aahs, choir pads) — those count as instrumental here. 'Background vocals' in a request almost always means NO lyrics: use false and put the texture in the brief. Omit = both."}, 'instruments': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'title': 'Instruments', 'default': None, 'description': "Match ANY of these instruments, e.g. ['Piano','Strings']."}, 'vo_friendly': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Vo Friendly', 'default': None, 'description': 'true = only tracks that leave space for voiceover.'}, 'max_per_album': {'anyOf': [{'type': 'integer', 'maximum': 10, 'minimum': 1}, {'type': 'null'}], 'title': 'Max Per Album', 'default': None, 'description': 'Cap how many cues from any ONE album appear, so results spread across the catalogue instead of returning a block from one record. Defaults to 2 for a general search. Raise it, or set it high, when you deliberately want depth from one album — and it is ignored automatically when you filter by album or composer.'}, 'duration_max_s': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'null'}], 'title': 'Duration Max S', 'default': None, 'description': 'Maximum runtime in seconds.'}, 'duration_min_s': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'null'}], 'title': 'Duration Min S', 'default': None, 'description': 'Minimum runtime in seconds.'}, 'include_previews': {'type': 'boolean', 'title': 'Include Previews', 'default': False, 'description': 'Attach a streaming preview link to each result (slower; links expire in 15 minutes).'}}}
변경됨
stye_cue_sheet
2026년 10월 1일 2:54 AM
변경됨
stye_get_track
2026년 10월 1일 2:54 AM
변경됨
stye_fit_to_duration
2026년 10월 1일 2:54 AM
변경됨
stye_search_tracks
2026년 10월 1일 2:54 AM
추가됨
stye_feedback
2026년 9월 17일 12:37 PM
추가됨
stye_about
2026년 9월 17일 12:37 PM
추가됨
stye_find_similar
2026년 9월 17일 12:37 PM
추가됨
stye_cue_sheet
2026년 9월 17일 12:37 PM
추가됨
stye_list_versions
2026년 9월 17일 12:37 PM
추가됨
stye_get_track
2026년 9월 17일 12:37 PM
추가됨
stye_fit_to_duration
2026년 9월 17일 12:37 PM
추가됨
stye_search_tracks
2026년 9월 17일 12:37 PM