Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,545Letters: 14Defects: 1,324counted 2 min ago
teppi

Server definition

Hash
sha256:b24300cb7b92393cda3d8beee1aac247dc9ef4bdc87f154ab4a666a1bae08b71
What it is
What a remote MCP server returned when asked what it offers: 8 tools

The blob, as servednamed by its sha256

{ "instructions": "Songs To Your Eyes is a production music library. These tools search its catalogue of professionally produced cues across cinematic, trailer, underscore, electronic, rock and world music, many with stems, alternate mixes or timed cutdowns, for finding music to license for a video, film, advert, trailer or podcast.\n\nSearch matches meaning: a described scene or feeling ('tense investigative underscore that never resolves') matches better than a single keyword ('tense').\n\nEvery track result carries listen_url, a public page where the track plays. Listening conveys no licence; licensing is arranged with the Songs To Your Eyes team ([email protected]). Nothing is bought or sold through these tools.", "tools": [ { "description": "What this service is, how licensing works and what the server sees: the service's own licensing and privacy statements, with links to the full legal terms and the privacy policy.", "inputSchema": { "properties": {}, "title": "stye_aboutArguments", "type": "object" }, "name": "stye_about", "outputSchema": null }, { "description": "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. A field missing from the response is not on file in the catalogue; [email protected] handles gaps. Licensing is arranged with the Songs To Your Eyes team, outside these tools.", "inputSchema": { "properties": { "ref": { "description": "The catalogue ID of a track: the `ref` field of a search or track result.", "title": "Ref", "type": "integer" } }, "required": [ "ref" ], "title": "stye_cue_sheetArguments", "type": "object" }, "name": "stye_cue_sheet", "outputSchema": null }, { "description": "Sends a short message to the catalogue team about how well results fit: a wrong-feeling page, a brief that found nothing, or praise worth keeping. It sends only with consented=true, which records that the user explicitly agreed to send this message; without it, nothing is sent. The message is stored with the brief and track it concerns and no user identifier (https://mcp.songstoyoureyes.com/privacy).", "inputSchema": { "properties": { "brief": { "anyOf": [ { "maxLength": 1000, "type": "string" }, { "type": "null" } ], "default": null, "description": "The search brief it concerns, if one.", "title": "Brief" }, "consented": { "description": "Whether the user explicitly agreed to send this feedback.", "title": "Consented", "type": "boolean" }, "kind": { "default": "other", "description": "'search_quality', 'missing_music', 'praise' or 'other'.", "title": "Kind", "type": "string" }, "message": { "description": "The user's feedback, in their own words.", "maxLength": 4000, "minLength": 3, "title": "Message", "type": "string" }, "ref": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "description": "The track ref it concerns, if one.", "title": "Ref" } }, "required": [ "message", "consented" ], "title": "stye_feedbackArguments", "type": "object" }, "name": "stye_feedback", "outputSchema": null }, { "description": "Cues close in character to a given one, matched on the catalogue's editorial description of each cue together with its genres, moods and instrumentation, for 'more like this one' moments. It compares how cues are described, not their waveforms, so it is strong on character and mood and does not detect two cues as alike purely because they sound alike. Results are main mixes from other cue families, at most three per album, each with its listen_url.", "inputSchema": { "properties": { "limit": { "default": 8, "description": "How many similar cues to return (default 8).", "maximum": 12, "minimum": 1, "title": "Limit", "type": "integer" }, "ref": { "description": "The track ref to match against.", "title": "Ref", "type": "integer" } }, "required": [ "ref" ], "title": "stye_find_similarArguments", "type": "object" }, "name": "stye_find_similar", "outputSchema": null }, { "description": "Finds cues that fit an exact runtime, for a cut of known length such as a 30-second advert or a 90-second title sequence: music to license for a project, or anything about the Songs To Your Eyes catalogue.\n\nTwo kinds of result come back. Some cues already run close to the target length (fit='native'). Others are purpose-made short edits of a longer piece, cut down by the composer (fit='cutdown'), built to land on time rather than fade out.\n\ndelta_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.\n\nEvery result carries listen_url, a permanent public page where the cue plays, with cover art and a waveform. It is the only way a person can hear a cue: a cue listed without its listen_url cannot be auditioned.", "inputSchema": { "properties": { "brief": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Optional sound brief, e.g. 'epic cinematic trailer'.", "title": "Brief" }, "composer": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Only tracks credited to this composer/artist; partial names match, case-insensitive.", "title": "Composer" }, "has_vocals": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "description": "true = songs with sung lead vocals/lyrics only. false = everything else, including wordless vocal textures (background vocals, choir).", "title": "Has Vocals" }, "include_previews": { "default": false, "description": "Attach streaming preview links (15-min expiry).", "title": "Include Previews", "type": "boolean" }, "limit": { "default": 8, "description": "Maximum results (default 8, up to 25).", "maximum": 25, "minimum": 1, "title": "Limit", "type": "integer" }, "moods": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "description": "Match ANY of these moods.", "title": "Moods" }, "target_seconds": { "description": "The runtime to fill, in seconds — e.g. 30 for a 30-second spot.", "exclusiveMinimum": 0, "maximum": 3600, "title": "Target Seconds", "type": "number" }, "tolerance_seconds": { "anyOf": [ { "exclusiveMinimum": 0, "type": "number" }, { "type": "null" } ], "default": null, "description": "Acceptable deviation. Default: 15% of target, minimum 2s.", "title": "Tolerance Seconds" } }, "required": [ "target_seconds" ], "title": "stye_fit_to_durationArguments", "type": "object" }, "name": "stye_fit_to_duration", "outputSchema": null }, { "description": "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 its listen_url. For a track already found, or for what else a cue can be delivered as.\n\nEvery result carries listen_url, a permanent public page where the cue plays, with cover art and a waveform. It is the only way a person can hear a cue: a cue listed without its listen_url cannot be auditioned.", "inputSchema": { "properties": { "ref": { "description": "The catalogue ID of a track: the `ref` field of a search or track result.", "title": "Ref", "type": "integer" } }, "required": [ "ref" ], "title": "stye_get_trackArguments", "type": "object" }, "name": "stye_get_track", "outputSchema": null }, { "description": "Every form a cue can be delivered in: the full-length mix plus, where they exist, timed cutdowns (15, 30, 60 seconds) built for standard ad and promo lengths, alternate mixes such as no-drums, underscore or instrumental for music that sits beneath dialogue, and individual instrument stems for rebalancing a track. A little under half of the catalogue's cues have at least one of these. Each version carries its own listen_url. Relevant when a cue is nearly right but needs to be shorter, quieter under a voice, or stripped back.", "inputSchema": { "properties": { "ref": { "description": "Any track ref, main mix or one of its versions; the whole family is returned.", "title": "Ref", "type": "integer" } }, "required": [ "ref" ], "title": "stye_list_versionsArguments", "type": "object" }, "name": "stye_list_versions", "outputSchema": null }, { "description": "Searches the Songs To Your Eyes production-music catalogue for cues that fit a brief for a video, film, advert, trailer or podcast: music to license for a project, or anything about the Songs To Your Eyes catalogue.\n\nThe brief is matched by MEANING against an editorial description of how each cue behaves\nas well as against its tags, so a described scene, mood, instrumentation or arc (\"tense\ninvestigative underscore that never resolves\", \"warm and hopeful for a charity film\")\nmatches far better than a single keyword.\n\nLISTENING. Each result carries listen_url, a permanent public page where that cue plays.\nIt is the only way a person can hear a cue: a cue listed without its listen_url cannot be\nauditioned. This holds for every list, an album listing included.\n\nFILTERS. Every filter is a hard constraint. Filters combine with AND, and a cue missing\nthe tag a filter tests is excluded, so several filters together can empty a page. The\nbrief carries soft qualities without excluding anything.\n\nPAGES. One call returns one page of up to 25 cues (default 15); there is no pagination,\nand identical arguments return identical cues. A different brief, or the same need\nphrased from a different angle, returns different cues.\n\nVOCALS. has_vocals=true selects songs with sung lead vocals and lyrics. Wordless vocal\ntextures (background vocals, oohs and aahs, choir pads) are classed as instrumental,\nhas_vocals=false; a request for \"background vocals\" is almost always a request for no\nlyrics. Texture words in the brief (\"background vocals\", \"choir\", \"vocal hooks\", \"group\nsinging\") are detected server-side and applied as a hard requirement, so every result\ncarries that texture and a short page reflects the catalogue's actual supply of it.\n\nCOMPOSERS. The composer filter matches the credited composer by partial name, with or\nwithout a brief (with none, it lists that composer's cues). Each result's `composer` field\nis the catalogue's own writer credit.\n\nANGLES. A page reflects one phrasing of a brief. Phrasings from different angles reach\ndifferent parts of the whole catalogue: the literal angle (traditional instruments and idiom), the\nfeel angle (texture, pulse and atmosphere with no instrument names, e.g. \"hazy hypnotic\nmodal groove, dusty and sun-baked\") and the crossover angle (the setting's colour through\nanother genre: desert funk, ethnic electronica, psychedelic world). The feel and crossover\nangles routinely surface the most distinctive picks, which a literal phrasing misses.\n\nPLACES. The catalogue describes music by instrument, texture and mood, not geography:\nregion and culture names (\"Moroccan\", \"Gnawa\", \"Berber\") appear in almost no tags, so a\nbrief built on them loses its keyword match, while the sound of the place (oud, darbuka,\nqanun, hand percussion; desert, hypnotic, modal, dusty) matches.\n\nALBUMS. Albums are curated sets of about five cues built around one idea. A general search\nreturns at most two cues per album (max_per_album) so that a page spans the catalogue, and\n`albums_represented` reports how many distinct albums the page drew on. The album filter\nreturns a whole set and lifts that cap. A recommendation built from a single album shows\none record's take on a brief rather than the catalogue's range.\n\nEVENTS AND OCCASIONS. Tags naming a specific event (a festival, a holiday, an occasion)\nare on a handful of cues, not applied systematically: only 20 cues carry \"Burning Man\"\nwhile the catalogue holds ~1,900 electronic cues, and\n39 carry \"Festival\". An event-tag match is therefore a narrow slice. The music an occasion\nimplies reaches much further: house, techno, trance and rave for a festival; the\nemotional register, rather than the word, for a wedding.\n\nCONTEXTS. The `context` parameter runs an owner-curated occasion search ('rave-club',\n'christmas', 'halloween', 'summer' and others) against assignments precomputed from the\ncatalogue owner's translation rules: \"rave\" reaches the whole beat-driven electronic\npalette, not just the cues that carry a festival tag. An unknown name returns the full\nlist of valid contexts. Country names (Lebanon, Morocco, Turkey...) are accepted and\ngeneralise to their regional palette, where the catalogue's world coverage is deeper. Some\ncontexts are ambiguous (summer, a country or territory): they return results grouped into\n2-4 labelled directions, each with its own slug, plus a question that tells them apart;\nthat slug passed as `context` returns the one direction.\n\nAMBIGUOUS BRIEFS. Some briefs span genuinely different musical directions: \"summer vibes\"\ncan mean tropical-house feelgood, chill-lounge, world/travel or sexy/fashion. A single\nsearch commits to one reading; the ambiguous contexts return the labelled spread.\n\nREFERENCES. The catalogue's tags carry no artist, composer, film or brand names, so a\nreference searched verbatim (\"a la Philip Glass\", \"like Stranger Things\", \"think Apple\nads\") finds little, while a description of its sound matches: Philip Glass is minimal\npulsing arpeggios, piano and strings, hypnotic repetition; Trent Reznor meets M83 is dark\nindustrial synths under huge emotive electronic swells; Stranger Things is a retro analog\nsynth pulse, ominous but restrained.\n\nNEGATIVES. Negation written into the brief does not subtract from a search. The `exclude`\nparameter hard-drops any cue carrying the listed tags, spelling variants included. It\ntakes tag-shaped terms (instruments, moods, genres); soft qualities (\"not too hard\")\nmatch better as positive wording in the brief (\"restrained\", \"understated\").\n\nSTEMS, CUTDOWNS AND KEYS. The catalogue holds ~43,000\nstem versions and ~2,700 drums-only stems, and\n~1,000 cues have a labelled :30 cutdown; each\nresult's `versions` counts what exists for that cue. The `key` filter matches briefs like\n\"preferably in E\" (E matches both E and Em); ~7,100 mains\ncarry a key.\n\nCLEAN LYRICS. `explicit`: true means the catalogue owner has flagged the cue's sung lyrics\nas not clean.\n\nLYRICS. 328 cues have lyrics on file, and the lyrics are in the full-text index, so words\nthat are actually sung match. Matching is by wording, not subject: \"a song about winning\"\nfinds lyrics containing \"winning\", not every song about victory. The catalogue is\noverwhelmingly instrumental, so a lyric match is a narrow slice on top of the musical\nmatch.\n\nRESULTS. Each result describes one cue. listen_url is a permanent public page where the\ncue plays, with cover art and a waveform: it is how a person actually hears the music.\nEvery playable row carries its own listen_url. The versions of a cue share one title and\ndiffer only by ref, so a link built by hand from a title or a ref can point at the wrong\naudio.\n\nAlso returned: title, album, album_title, composer (the catalogue's own writer credit),\ndescription (what it sounds like and what it suits), duration_s, bpm, key, has_vocals,\nexplicit, genres, moods, instruments, use_cases, keywords (extra catalogue tags beyond\nthose lists, such as tempo bands like 'Mid Tempo' and placements like 'TV Score'), and\nthree editorial judgements: energy (low | low-building | moderate | building | high),\nresolves (whether it lands, or stays unresolved and tense) and vo_friendly (whether it\nleaves space for a voiceover). versions counts the stems, alternate mixes and shorter cuts\nthat exist for the cue, and cutdown_lengths_s lists the cut lengths in seconds. ref is the\ncatalogue's ID for the cue. preview_url, when requested, is a temporary streaming link\nthat expires after 15 minutes; listen_url never expires.\n\nA field absent from a row means the catalogue holds no data for it: an absent bpm means\nuntagged, not slow; an absent composer means no usable credit; an absent cutdown_lengths_s\nmeans no timed cutdowns exist.\n\nThe player streams nearly every cue clean. A file downloaded from it without a licence is\na watermarked test file (a spoken \"STYE Music\" tag); a clean file comes with a licence.\npreview_url is watermarked too.\n", "inputSchema": { "properties": { "album": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Only tracks from this album, by name ('Desert Funk') or catalogue code ('STYE1204'); partial names match. With no brief it lists the album; with one it searches inside it. Setting it lifts the per-album cap, so the whole set comes back from one record.", "title": "Album" }, "bpm_max": { "anyOf": [ { "maximum": 400, "minimum": 20, "type": "integer" }, { "type": "null" } ], "default": null, "description": "Maximum BPM.", "title": "Bpm Max" }, "bpm_min": { "anyOf": [ { "maximum": 400, "minimum": 20, "type": "integer" }, { "type": "null" } ], "default": null, "description": "Minimum BPM. Around 54% of the catalogue has no tempo tag, and any BPM filter excludes all of those cues, good matches included; pace described in the brief has no such cost.", "title": "Bpm Min" }, "brief": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "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 have their own filters; vocal texture (wordless backing vocals, choir pads) is matched from the brief.", "title": "Brief" }, "composer": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Only tracks credited to this composer/artist. Partial names match ('Albeg' finds 'Yair Albeg Wein'), case-insensitive, with or without a brief. Every result carries its `composer` credit.", "title": "Composer" }, "context": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Owner-curated occasion/context search (CONTEXTS in the description): a context name ('rave-club', 'christmas', 'halloween', 'summer') or a country name, which generalises to its regional palette. An unknown name returns the full list of valid contexts. Ambiguous contexts return results grouped into labelled directions plus a question for the user.", "title": "Context" }, "duration_max_s": { "anyOf": [ { "minimum": 0, "type": "number" }, { "type": "null" } ], "default": null, "description": "Maximum runtime in seconds.", "title": "Duration Max S" }, "duration_min_s": { "anyOf": [ { "minimum": 0, "type": "number" }, { "type": "null" } ], "default": null, "description": "Minimum runtime in seconds.", "title": "Duration Min S" }, "energy": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "One of: low, low-building, moderate, building, high.", "title": "Energy" }, "exclude": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "description": "Tags to hard-drop: any cue carrying any of them is removed (a brief's exclusions, such as '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 are matched through the brief.", "title": "Exclude" }, "genres": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "description": "Match ANY of these genres, e.g. ['Trailer','Orchestral'].", "title": "Genres" }, "has_vocals": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "description": "true = songs with sung lead vocals and lyrics. false = everything else, including cues with wordless vocal textures (background vocals, oohs/aahs, choir pads), which count as instrumental here. 'Background vocals' in a request almost always means no lyrics. Omitted = both.", "title": "Has Vocals" }, "include_previews": { "default": false, "description": "Attach a streaming preview link to each result (slower; links expire in 15 minutes).", "title": "Include Previews", "type": "boolean" }, "instruments": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "description": "Match ANY of these instruments, e.g. ['Piano','Strings'].", "title": "Instruments" }, "key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Musical key, e.g. 'E', 'Em', 'Bb', 'F# minor'. A bare major key also matches its minor ('E' matches E and Em). ~7,100 mains carry key data, about 44% of the catalogue; the filter excludes the rest.", "title": "Key" }, "limit": { "default": 15, "description": "Maximum results, up to 25 (default 15). One page per call: there is no pagination, and identical arguments return identical cues.", "maximum": 25, "minimum": 1, "title": "Limit", "type": "integer" }, "max_per_album": { "anyOf": [ { "maximum": 10, "minimum": 1, "type": "integer" }, { "type": "null" } ], "default": null, "description": "Maximum cues from any one album on the page, so results spread across the catalogue instead of returning a block from one record. Default 2 for a general search; ignored when filtering by album or composer.", "title": "Max Per Album" }, "moods": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "description": "Match ANY of these moods, e.g. ['Tension','Mysterious'].", "title": "Moods" }, "vo_friendly": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "description": "true = only tracks that leave space for voiceover.", "title": "Vo Friendly" } }, "title": "stye_search_tracksArguments", "type": "object" }, "name": "stye_search_tracks", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:b24300cb7b92393cda3d8beee1aac247dc9ef4bdc87f154ab4a666a1bae08b71 | sha256sum