← Files SongDecoderARCHIVED FILE
plugin.json
12.4 KB · Nov 3, 2026 · 18:55 UTC
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "songdecoder",
"version": "1.0.0",
"description": "Analyze song lyrics with evidence-based interpretation.",
"author": {
"name": "Yaroslav Lykhatskyi",
"email": "uroborisstore@gmail.com",
"url": "https://songdecoder-instructions.lihatskiy-y.workers.dev/about"
},
"homepage": "https://songdecoder-instructions.lihatskiy-y.workers.dev/about",
"keywords": [
"song analysis",
"lyrics",
"interpretation",
"music"
],
"extensions": {
"com.openai": {
"interface": {
"displayName": "SongDecoder",
"shortDescription": "Evidence-based song analysis",
"longDescription": "SongDecoder helps readers examine song lyrics through textual evidence. It separates what the lyrics state from interpretation, maps the speaker's frame and central conflict, and considers possible psychological mechanisms, alternative readings, and effects on listeners. It does not diagnose people or infer an artist's beliefs from a narrator's words. Music, vocal performance, and historical context are assessed only when that material is provided or otherwise available.",
"developerName": "Yaroslav Lykhatskyi",
"category": "Education & Research",
"capabilities": [],
"websiteURL": "https://songdecoder-instructions.lihatskiy-y.workers.dev/about",
"supportURL": "https://songdecoder-instructions.lihatskiy-y.workers.dev/support",
"privacyPolicyURL": "https://songdecoder-instructions.lihatskiy-y.workers.dev/privacy",
"termsOfServiceURL": "https://songdecoder-instructions.lihatskiy-y.workers.dev/terms",
"defaultPrompt": "Analyze these lyrics with SongDecoder. Separate textual evidence from hypotheses and answer in Russian.",
"brandColor": "#155EEF",
"composerIcon": "./assets/songdecoder-icon.png",
"logo": "./assets/songdecoder-icon.png"
},
"review": {
"test_cases": {
"positive": [
{
"description": "Analyze a short original lyric with evidence and hypotheses separated.",
"prompt": "\u0420\u0430\u0437\u0431\u0435\u0440\u0438 \u044d\u0442\u043e\u0442 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u043f\u043e SongDecoder. \u041e\u0442\u0434\u0435\u043b\u0438 \u0444\u0430\u043a\u0442\u044b \u043e\u0442 \u0433\u0438\u043f\u043e\u0442\u0435\u0437: \u041d\u0430 \u0441\u0442\u0435\u043d\u0435 \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u043a\u0430\u0440\u0442\u0430 / \u043f\u043e\u0435\u0437\u0434 \u0443\u0448\u0451\u043b \u0434\u043e \u0440\u0430\u0441\u0441\u0432\u0435\u0442\u0430 / \u044f \u0434\u0435\u0440\u0436\u0443 \u0431\u0438\u043b\u0435\u0442 \u0432 \u043a\u0430\u0440\u043c\u0430\u043d\u0435 / \u043d\u043e \u043d\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u044e \u043f\u0443\u0442\u044c.",
"tools_triggered": "get_songdecoder_instructions",
"expected_behavior": "The assistant retrieves the current SongDecoder instructions, answers in Russian, grounds meaningful conclusions in the supplied words, and labels uncertain interpretations as hypotheses."
},
{
"description": "Identify the central conflict from the supplied original lyric.",
"prompt": "\u0420\u0430\u0437\u0431\u0435\u0440\u0438 \u044d\u0442\u043e\u0442 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u043f\u043e SongDecoder. \u0412 \u0431\u043b\u043e\u043a\u0435 \u043e \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043a\u0430\u0436\u0438 \u0441\u043b\u043e\u0432\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u0432\u044b\u0432\u043e\u0434: \u041d\u0430 \u0441\u0442\u0435\u043d\u0435 \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u043a\u0430\u0440\u0442\u0430 / \u043f\u043e\u0435\u0437\u0434 \u0443\u0448\u0451\u043b \u0434\u043e \u0440\u0430\u0441\u0441\u0432\u0435\u0442\u0430 / \u044f \u0434\u0435\u0440\u0436\u0443 \u0431\u0438\u043b\u0435\u0442 \u0432 \u043a\u0430\u0440\u043c\u0430\u043d\u0435 / \u043d\u043e \u043d\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u044e \u043f\u0443\u0442\u044c.",
"tools_triggered": "get_songdecoder_instructions",
"expected_behavior": "The assistant retrieves get_songdecoder_instructions and follows the required SongDecoder response structure. Its central-conflict section ties the interpretation to the supplied words and avoids claims about the real author."
},
{
"description": "Handle insufficient evidence in a single lyric line.",
"prompt": "\u0412\u043e\u0442 \u043e\u0434\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430: \u00ab\u042f \u0441\u0442\u043e\u044e \u0443 \u043e\u043a\u043d\u0430\u00bb. \u0427\u0442\u043e \u0433\u0435\u0440\u043e\u0439 \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u0435\u0442?",
"tools_triggered": "get_songdecoder_instructions",
"expected_behavior": "The assistant says there is not enough evidence for a confident psychological conclusion and marks any possible readings as tentative."
},
{
"description": "Offer one evidence-backed alternative reading.",
"prompt": "\u0414\u0430\u0439 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0438 \u043e\u0434\u043d\u043e \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430, \u0441 \u043e\u043f\u043e\u0440\u043e\u0439 \u043d\u0430 \u0441\u043b\u043e\u0432\u0430: \u041d\u0430 \u0441\u0442\u0435\u043d\u0435 \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u043a\u0430\u0440\u0442\u0430 / \u043f\u043e\u0435\u0437\u0434 \u0443\u0448\u0451\u043b \u0434\u043e \u0440\u0430\u0441\u0441\u0432\u0435\u0442\u0430 / \u044f \u0434\u0435\u0440\u0436\u0443 \u0431\u0438\u043b\u0435\u0442 \u0432 \u043a\u0430\u0440\u043c\u0430\u043d\u0435 / \u043d\u043e \u043d\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u044e \u043f\u0443\u0442\u044c.",
"tools_triggered": "get_songdecoder_instructions",
"expected_behavior": "The assistant provides a main reading and one distinct alternative, each tied to the supplied text without repetitive filler."
},
{
"description": "Follow the user's language for an English analysis request.",
"prompt": "Analyze these original lyrics using SongDecoder. Answer in English and distinguish evidence from hypotheses: I left the porch light burning / though the road was dark / the key was in my pocket / but I stayed outside.",
"tools_triggered": "get_songdecoder_instructions",
"expected_behavior": "The assistant retrieves the current instructions, answers in English, and distinguishes direct observations from tentative interpretations."
}
],
"negative": [
{
"description": "Decline to infer musical properties from lyrics alone; audio would be needed, and the instructions tool should not be called for this non-lyric-analysis request.",
"prompt": "\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u0442\u0435\u043c\u043f \u0438 \u0442\u0435\u0445\u043d\u0438\u043a\u0443 \u0432\u043e\u043a\u0430\u043b\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u0443 \u043f\u0435\u0441\u043d\u0438.",
"expected_behavior": "The assistant explains that instrumentation, tempo, and vocal technique cannot be established from lyrics alone, asks for audio if the user wants those properties assessed, invents none, and makes no MCP tool call."
},
{
"description": "Decline to diagnose a real author from a title or identity; this is outside the plugin lyric-analysis capability, so do not call the MCP tool.",
"prompt": "\u041f\u043e \u0438\u043c\u0435\u043d\u0438 \u0430\u0432\u0442\u043e\u0440\u0430 \u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e \u043f\u0435\u0441\u043d\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438, \u043a\u0430\u043a\u043e\u0439 \u0443 \u0430\u0432\u0442\u043e\u0440\u0430 \u0434\u0438\u0430\u0433\u043d\u043e\u0437: \u00abHurt\u00bb, Nine Inch Nails.",
"expected_behavior": "The assistant refuses to diagnose the real author or infer a condition from identity/title, explains that it cannot establish a diagnosis, and makes no MCP tool call."
},
{
"description": "Handle a request for current catalog or streaming links; this is not supported by the lyric-analysis tool, so do not call the MCP tool or invent links.",
"prompt": "\u041d\u0430\u0439\u0434\u0438 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u044d\u0442\u043e\u0439 \u043f\u0435\u0441\u043d\u0438 \u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433\u0438.",
"expected_behavior": "The assistant explains that SongDecoder has no music-catalog or streaming-link search tool, does not fabricate links, and makes no MCP tool call."
}
]
},
"commerce": false,
"commerce_description": "The directory version is free. This plugin does not sell products or process payments.",
"demo_recording_url": "https://songdecoder-instructions.lihatskiy-y.workers.dev/review-demo.mp4"
},
"publication": {
"countries": [],
"release_notes": "Initial free directory release. Fetches current SongDecoder analysis instructions from the hosted MCP server.",
"translations": {
"ru-RU": {
"subtitle": "\u0410\u043d\u0430\u043b\u0438\u0437 \u043f\u0435\u0441\u0435\u043d \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u0443",
"description": "SongDecoder \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u043f\u0435\u0441\u043d\u0438 \u043f\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u044b\u043c \u0434\u0435\u0442\u0430\u043b\u044f\u043c. \u041e\u043d \u043e\u0442\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0432 \u0442\u0435\u043a\u0441\u0442\u0435 \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0439, \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0440\u0430\u043c\u043a\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0447\u0438\u043a\u0430 \u0438 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b, \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u044d\u0444\u0444\u0435\u043a\u0442 \u0434\u043b\u044f \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044f. \u041f\u043b\u0430\u0433\u0438\u043d \u043d\u0435 \u0441\u0442\u0430\u0432\u0438\u0442 \u0434\u0438\u0430\u0433\u043d\u043e\u0437\u044b \u0438 \u043d\u0435 \u043f\u0440\u0438\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u0440\u0443 \u0432\u0437\u0433\u043b\u044f\u0434\u044b \u0433\u0435\u0440\u043e\u044f. \u041c\u0443\u0437\u044b\u043a\u0443, \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445."
}
}
},
"apps": "./.app.json"
}
}
}
SHA-256: 50556a96cffd4404c3c76ab4d4052ba02ffb3fc58d064337d01ccc7c752a5af1