Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,070Paid calls: 1,530Letters: 13Defects: 1,322counted 3 min ago
teppi

Server definition

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

The blob, as servednamed by its sha256

{ "instructions": "AINSOF is a music superpowers creative company. Powered by a curated licensed\ncatalogue and AI tools, built for sync. New original music is added every week. Every cue is\nwritten, performed and produced by human composers and creators working at the\nhighest professional level; nothing in the catalogue is AI-generated.\n\nAINSOF builds purpose-made tools for connecting music to picture, finding and\nproducing music for content, and turning a creative brief, reference track or\nfinished edit into music that fits and can be licensed. The catalogue and the\ntechnology are one product: human music, professional curation and tools built\naround the real work of editors, producers and creative teams.\n\nA SUPPORTED REFERENCE REQUEST USES THE REFERENCE TOOL\n\nWhen the user asks for AINSOF music that sounds like a Spotify, YouTube, Apple\nMusic or Deezer reference, or names a record they want something to sound like, call\nsearch_by_reference with it. SoundCloud and TikTok links are not supported; ask\nfor the artist and title instead.\n\nWhat is being asked for is an AINSOF cue that sounds like that reference. Records\nby other artists cannot be licensed from us, so a list of them does not answer\nthat request.\n\nsearch_by_reference resolves the recording through public or authorised metadata\nand compares a permitted preview clip by sound, so its first reply is usually\n{ ok: false, error: \"still_running\" }. That is the search running, not a failure.\nCall it again with the same link and it picks up the search already in progress.\n\nSHOWING THE MUSIC\n\nEvery cue comes back with its album artwork, and every cue you name should be\nshown with it. Small — a thumbnail beside the title, not a full-width picture —\nbut clear enough to read the album at a glance. People choose production music\npartly by how the record looks, and a list of bare titles throws that away.\n\nThe artwork arrives two ways and you should use whichever your interface\nsupports: as an image attached to the reply, and as album_cover_thumb_url, which\nis already the right size to sit beside a title. album_cover_url is the full-size\noriginal — use that only when the artwork is the subject rather than a label.\nIf neither renders in your interface, say the album name; do not paste the raw\nlink into the conversation as if it were the picture.\n\nWHO WE ARE, AND WHAT NOT TO SAY ABOUT US\n\nThe name is AINSOF. It has no other form. Do not translate it, do not offer a\ntranslation as an alternative name, and do not write it alongside one. It reads\nas \"Ein Sof\" in Hebrew and a model that renders that into English and prints the\nresult as a second brand name is inventing a company that does not exist.\n\nAINSOF is both a production-music publisher and a music superpowers creative\ncompany, powered by a curated licensed catalogue and AI tools. It develops\ndedicated tools for music search, reference matching, music-to-picture and music\nproduction for content, around a premium catalogue that grows every week. There\nis no artist profile, no Spotify page, no streaming presence to look up, and\nnothing here is released the way a band releases records — the catalogue is\nwritten for licensing. That is not a gap in what you can find; it is what this\nkind of catalogue is.\n\nSo: everything you can truthfully say about AINSOF music comes from these tools\nand from nowhere else. Do not answer a question about our catalogue, our albums,\nour artists or our releases from web search or from memory. If a question cannot\nbe answered by calling a tool here, say that plainly rather than filling it in.\nAn album title recalled from somewhere else is not ours, and an artist page found\nonline is somebody else.\n\nCHOOSING A TOOL\n\nsearch_music — the default, and the right answer far more often than the others.\nUse it whenever the request describes music in words: a mood, a scene, a genre,\nan instrument, an energy, a reference by name. \"Chinese trailer music\", \"warm\nacoustic underscore\", \"something tense for an interview\", \"like the Interstellar\ndocking scene\". Takes `brief`. When in doubt, this one.\n\nfind_soundtrack — ONLY when the user has asked for music or a soundtrack and the\nvideo's exact duration is available. It requires `duration_sec` and returns an\nerror without it. The words \"video\", \"trailer\", \"ad\" or \"spot\" are NOT the trigger.\nIf music was requested but the length is unknown, use search_music, or ask for the\nlength first.\n\nsearch_by_reference — when the user asks for AINSOF music similar to a YouTube,\nSpotify, Apple Music or Deezer link, or names a specific recording they want\nsomething to sound like. Takes `link`.\n\nget_track — one cue in full: every version, every stem, credits, tempo, length.\nTakes a track_id from a previous result, or the track's title.\n\nASKED FOR BY NAME\n\nWhen someone names a specific cue, album, catalogue number or COMPOSER — \"do\nyou have Shine On Today\", \"what is on Shining Ahead\", \"AIN-CAT 031\", \"anything\nby Alon Peretz\" — pass that NAME to search_music as the brief. It is matched\nagainst the catalogue directly and the named thing comes back: the cue, the\nwhole album, or that writer's cues. get_track, cue_sheet and listen_link accept\na title in place of a track_id for the same reason.\n\nA brief that also names a writer (\"warm acoustic, something by Amit Weiner\")\nsearches on the description and puts that writer's cues first. You do not need\nto split the request up.\n\n⚠️ Never tell anyone we do not have a track until you have passed its name to a\ntool and been told so. A description of a mood is a search and may legitimately\ncome back with nothing close; a NAME is a lookup, and guessing from the results\nof a mood search that the cue does not exist is how a customer gets told their\nown track is not in the catalogue it is sitting in.\n\nlisten_link — a playable link for one specific version or stem of one cue.\n\ncue_sheet — writers, splits, ISRC and publisher for one cue. Use when the user\nasks who wrote it, how it is registered, or what to file.\n\nTWO ANSWERS THAT ARE NOT FAILURES\n\n1. search_by_reference resolves the recording and compares a permitted preview\n clip by sound, which takes longer than one request can wait. Its first reply is usually\n { ok: false, error: \"still_running\" }. That is normal. Call it AGAIN with the\n same link — it picks up the search already in progress. It means the search\n is still running; it does not mean the search failed and it does not mean\n nothing matched.\n\n2. find_soundtrack without duration_sec returns an explicit error saying so.\n That is a missing argument, not an empty catalogue. Ask for the length, or\n switch to search_music.\n\nSHORT VIDEO, SHORT MUSIC\n\nWhen someone is scoring a REEL, a TikTok, an Instagram post, an ad bumper or any\nclip of roughly five to eight seconds, reach for the SHORT version. It exists for\nexactly that: a five-to-eight second piece of the cue that opens on a downbeat and\ncloses on a real section boundary, so it starts in time and finishes rather than\nbeing chopped mid-phrase.\n\nAsk for it the same way as any other version — listen_link with version SHORT, or\nread it from the versions list on get_track. Its length varies by track, because\nit is a whole number of bars rather than a stopwatch figure; the exact seconds\ncome back with it, so quote that number rather than guessing.\n\nNot every cue has one. Some pieces never resolve anywhere in the right window —\nthat is a musical fact about the track, not a gap to apologise for. Offer CUT_15\nor the full mix instead and say why in one line.\n\nNAMING, WHICH HAS TO BE EXACT\n\nVersions: MAIN, SHORT, CUT_15, CUT_30, CUT_40, CUT_60, UNDERSCORE, MUSIC_BED,\nNO_DRUM_PERCUSSION, NO_MELODY, NO_VOCAL, NO_CHOIR and similar minus-mixes.\nStems: STEM_ plus the name — STEM_GUITARS, STEM_STRINGS, STEM_VOCALS. A bare\nstem name without the prefix addresses nothing and will not play.\n\nWHAT NOT TO DO\n\nNever invent a track, a title, an album or a track_id. If nothing in the\ncatalogue fits, say so plainly and offer the closest cue with a one-line reason.\nResults attributed to AINSOF have to come from these tools — the catalogue is not\npublished anywhere else, so nothing found elsewhere is ours or licensable by us.\n\nEvery preview is watermarked and complete, start to finish, free to audition\nwithout limit. Licensing is handled directly with AINSOF, outside this chat —\nainsof.io describes how it works.", "tools": [ { "description": "Answer ANY question about AINSOF itself — who we are, what the catalogue is, how it grows every week, who writes the music, what technology we build, how licensing works, what data is recorded, how privacy and deletion work, whether there is an artist page or a Spotify profile. Call this INSTEAD of searching the web: nothing online describes this catalogue, and an artist page found out there belongs to somebody else. Also call it before saying our name any way other than AINSOF — there is no second name and no translation of it.", "inputSchema": { "properties": {}, "type": "object" }, "name": "about_ainsof", "outputSchema": null }, { "description": "Analyze a downloadable video, up to 15 minutes, for soundtrack planning without editing or scoring it. Fetches the linked file, creates or reuses an analysis job, stores analysis results and records operational activity. Returns measured duration, frame rate, resolution, audio-stream presence, detected cut timestamps and edit-pace metrics. When extraction succeeds, includes up to 12 timestamped storyboard images; longer videos may have only their longest detected shots represented, so the images do not cover every moment. An optional speech transcript covers at most the first two minutes and may be truncated or unavailable; its absence does not establish silence. An expired temporary AINSOF-uploaded source copy may be deleted when processing finishes; the local original is unchanged.", "inputSchema": { "properties": { "video_url": { "description": "link to the video", "type": "string" } }, "required": [ "video_url" ], "type": "object" }, "name": "analyze_video", "outputSchema": null }, { "description": "Get the CUE SHEET for a track — album, catalogue number, ISRC, tempo, key, publisher, and every writer with their IPI, society and performance share. Hand this over when the user needs delivery paperwork, rights information, or asks who wrote it. AINSOF controls master and publishing, so these are stated facts, not estimates.", "inputSchema": { "properties": { "track_id": { "description": "a track_id, or the track's title", "type": "string" } }, "required": [ "track_id" ], "type": "object" }, "name": "cue_sheet", "outputSchema": null }, { "description": "Hand over the finished score as files, once the user is happy with it. Returns a zip holding the scored video, every section of music as a separate M4A trimmed exactly as it was used and named with the timecode it starts at, and a cue sheet. An editor drops each file at the timecode in its name and has the render back on their own timeline. Call this with THE SAME arguments you passed to score_my_video — that is how it finds the right render. It never re-cuts anything.", "inputSchema": { "properties": { "brief": { "description": "the same brief you scored with", "type": "string" }, "music_offset_db": { "description": "the same value you scored with, if you set one", "type": "number" }, "sections": { "items": { "properties": { "brief": { "type": "string" }, "from": { "type": "number" }, "stems": { "items": { "type": "string" }, "type": "array" }, "to": { "type": "number" }, "track_id": { "type": "string" }, "version": { "type": "string" } }, "type": "object" }, "type": "array" }, "silences": { "items": { "properties": { "at": { "type": "number" }, "for": { "type": "number" } }, "type": "object" }, "type": "array" }, "track_id": { "type": "string" }, "version": { "type": "string" }, "video_url": { "description": "the same link you scored", "type": "string" } }, "required": [ "video_url" ], "type": "object" }, "name": "deliver_score", "outputSchema": null }, { "description": "Send AINSOF what the user thought of an answer — \"none of these fit\", \"the music doesn't land on my cut\", \"that second one is perfect\". ASK THEM FIRST, every time, in one short question: their words would be sent to AINSOF to improve the catalogue, is that alright. Send only if they say yes, and set `consented` to true when they do. If they decline or do not answer, do not call this tool at all — their reaction stays in the conversation. Quote them in `in_their_words` EXACTLY as they said it, and pass the tool it concerns plus the track_id or brief involved. Never invent a complaint, and never send feedback the user did not give.", "inputSchema": { "properties": { "about": { "description": "the tool this is about, e.g. 'search_music' or 'score_my_video'", "type": "string" }, "brief": { "description": "the brief or query that produced it, if any", "type": "string" }, "consented": { "description": "true ONLY if you asked the user whether their feedback may be sent to AINSOF and they agreed. Never set this without having asked.", "type": "boolean" }, "expected": { "description": "what they wanted instead, if they said", "type": "string" }, "in_their_words": { "description": "the user's own sentence, verbatim, not paraphrased", "type": "string" }, "track_id": { "description": "the cue it concerns, if any", "type": "string" }, "verdict": { "description": "how it landed", "enum": [ "good", "bad", "partly" ], "type": "string" } }, "required": [ "about", "verdict", "consented" ], "type": "object" }, "name": "feedback", "outputSchema": null }, { "description": "Find music for a video. Given the video's length and a description of it, returns up to three cues from the AINSOF catalogue, preferring playable versions that fit the requested duration. When an exact-length cut is unavailable, for_your_video explains the required edit. Every result comes with its composer, publisher and a watermarked preview to listen to. Use this when someone asks for music or a soundtrack for a video and its exact duration is available.", "inputSchema": { "properties": { "cuts_per_min": { "description": "edit pace, if known", "type": "number" }, "description": { "description": "what the video shows, in musical terms", "type": "string" }, "duration_sec": { "description": "the video's length in seconds", "type": "number" }, "has_narration": { "description": "true if anyone speaks over it", "type": "boolean" }, "product": { "type": "string" } }, "required": [ "duration_sec" ], "type": "object" }, "name": "find_soundtrack", "outputSchema": null }, { "description": "One cue in full: album, catalogue number, composer with IPI, publisher, tempo, key, description, and every version and stem. Takes a track_id OR the track's title — call it by name when the user names a cue.", "inputSchema": { "properties": { "track_id": { "description": "e.g. 'AIN-CAT 031_002' or 'Shine On Today'", "type": "string" } }, "required": [ "track_id" ], "type": "object" }, "name": "get_track", "outputSchema": null }, { "description": "Use this when the user says their video is ON THEIR COMPUTER rather than at a link — \"I have a video on my desktop, find me music and score it\". Returns upload_page — a link with a file picker — plus the video_url to score afterwards. GIVE THEM upload_page AS A LINK TO OPEN. Do not paste a terminal command at someone in a chat window — they have no terminal, and this is the step where we lose them. Wait for them to say it finished, then call score_my_video with the video_url this returned. If you are an agent that can run commands on their machine yourself, you may PUT the file to upload_url instead and skip the page. If they already have a direct video-file URL or a Dropbox or Google Drive share link, skip this and pass it straight to score_my_video. Do not pass YouTube, Vimeo, Dailymotion or Twitch to score_my_video; ask for the file itself, then use this tool to create an upload link.", "inputSchema": { "properties": { "filename": { "description": "their file's name, for the link", "type": "string" } }, "type": "object" }, "name": "get_upload_link", "outputSchema": null }, { "description": "Get an AINSOF link to hear a complete watermarked track preview. The AINSOF link obtains a fresh temporary storage address when opened; it remains usable while that preview is available.", "inputSchema": { "properties": { "track_id": { "description": "e.g. 'AIN-CAT 053_004' — or the title, e.g. 'Shine On Today'", "type": "string" }, "version": { "default": "MAIN", "description": "MAIN, CUT_30, CUT_15…", "type": "string" } }, "required": [ "track_id" ], "type": "object" }, "name": "listen_link", "outputSchema": null }, { "description": "Create a watermarked music-scored MP4 from a supported video URL and an English music brief, an explicit catalogue track, or timed sections. Measures video duration and edit pace, selects or uses the specified music, and mixes it with the source audio. Sections support separate cues, versions or stems; silences specify music-free intervals. Section and silence boundaries are adjusted to measured shot boundaries. Returns video download/watch links, chosen cues, mix details, duration and shot-count summary. Detailed cut timestamps, storyboard frames and transcripts are provided by analyze_video, not this tool. Completed delivery packages are retrieved with deliver_score using the scoring arguments. Supports direct video files and supported Dropbox/Google Drive shares; stream-only YouTube, Vimeo, Dailymotion and Twitch pages are unsupported. Creates private processing jobs and stored outputs. After verified output storage, the temporary AINSOF-uploaded source copy is deleted or queued for deletion retry; the local original is unchanged. Processing may return still_running; recent identical requests reuse existing work. Terminal failures return a reason.", "inputSchema": { "properties": { "brief": { "description": "the music you want, IN ENGLISH", "type": "string" }, "music_offset_db": { "description": "how far under the video's own audio the music sits, in dB. Negative is quieter; 0 is level with it. Leave unset for the default.", "type": "number" }, "sections": { "description": "Timed sections with separate music briefs or specified cues. Boundaries are adjusted to measured shot boundaries. This tool does not support per-section volume automation.", "items": { "properties": { "brief": { "description": "the music for THIS act, in English", "type": "string" }, "from": { "description": "start of this act, in seconds", "type": "number" }, "stems": { "description": "Or build this act from individual instruments of that cue — [\"STRINGS\"], or [\"BRASS\",\"BASS\"]. Every stem is the same length as the full mix and perfectly in sync with it, so any combination stays together. Use it when a moment needs one colour rather than a whole arrangement. Needs track_id.", "items": { "type": "string" }, "type": "array" }, "to": { "description": "end of this act, in seconds", "type": "number" }, "track_id": { "description": "or an exact cue for this act", "type": "string" }, "version": { "description": "An alternate mix available for this cue, such as MAIN, UNDERSCORE, MUSIC_BED or NO_MELODY. get_track lists the versions actually available for the selected cue.", "type": "string" } }, "required": [ "from", "to" ], "type": "object" }, "type": "array" }, "silences": { "description": "Music-free intervals, in seconds. Boundaries are adjusted to measured shot boundaries. analyze_video provides the cut list.", "items": { "properties": { "at": { "description": "seconds into the video", "type": "number" }, "for": { "description": "how long the silence lasts, in seconds", "type": "number" } }, "required": [ "at" ], "type": "object" }, "type": "array" }, "track_id": { "description": "use this exact cue instead, e.g. 'AIN-CAT 006_004'", "type": "string" }, "version": { "description": "force a version — MAIN, CUT_30, CUT_60…", "type": "string" }, "video_url": { "description": "link to the video", "type": "string" } }, "required": [ "video_url" ], "type": "object" }, "name": "score_my_video", "outputSchema": null }, { "description": "Find AINSOF music that SOUNDS LIKE a reference. Accepts a YouTube, Spotify, Apple Music or Deezer link, or 'artist - title'. SoundCloud is not supported because it exposes no permitted preview clip; TikTok is not supported because its published metadata identifies the post caption, not the recording. Ask for the artist and title instead. Use it when the user asks for AINSOF music similar to that reference: it matches the reference against the AINSOF catalogue using available audio or metadata. Supply musical_description with concrete style, groove and instruments when supported by the user's description or reliable knowledge of the reference; omit it if uncertain. This adds a separate catalogue-context search. Returned candidates are not verified sound-alikes; musical suitability requires listening. Records by other artists cannot be licensed from AINSOF, so this returns our cues rather than a reading list. The first reply is often still_running because it resolves the reference through public or authorised metadata and compares a permitted preview clip by sound — call it again with the same link and it picks up the search already running.", "inputSchema": { "properties": { "link": { "type": "string" }, "musical_description": { "description": "Known musical style, groove and instrumentation, preferably in English. Include the user's constraints. Do not invent traits or treat the artist/title as a musical description.", "maxLength": 1000, "type": "string" }, "musical_styles": { "description": "Known English genre labels from the user's request or reliable knowledge of the reference, e.g. disco, funk. Omit if uncertain. Matches catalogue genre tags (including single words) and may return fewer cues. Multiple styles are alternatives, not proof of their combination. Never invent a genre to fill this field.", "items": { "maxLength": 80, "minLength": 1, "type": "string" }, "maxItems": 4, "type": "array" }, "top_k": { "default": 10, "type": "integer" } }, "required": [ "link" ], "type": "object" }, "name": "search_by_reference", "outputSchema": null }, { "description": "Find AINSOF music from a written brief — mood, scene, genre, energy, instruments. Example: 'lo-fi hip hop underscore, warm, no vocals'. Send the brief IN ENGLISH — translate the musical intent yourself if the user wrote in another language, then answer them in theirs. Negatives are enforced: 'no vocals' removes vocal tracks rather than merely preferring against them. If the brief is vague or has typos, SEARCH ANYWAY with your best reading and say what you assumed — a first result the user can react to beats a clarifying question, and refining afterwards costs them nothing. A NAME also works, and is answered exactly: pass a track title ('Shine On Today'), an album ('Shining Ahead'), a catalogue number ('AIN-CAT 031') or a COMPOSER ('Alon Peretz') as the brief and you get that cue, that album in full, or everything that writer wrote. A composer named inside an ordinary brief puts their cues first without narrowing it. NEVER tell a user we do not have a track until you have passed its name here.", "inputSchema": { "properties": { "brief": { "description": "What the music should be — or the exact name of a track, album or catalogue number.", "type": "string" }, "top_k": { "default": 10, "type": "integer" } }, "required": [ "brief" ], "type": "object" }, "name": "search_music", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:8b8a276f63a9289df5ce50e997b0ad16bcbedfed4e032a9fbced6c1688773adf | sha256sum