← Files EN TrainingARCHIVED FILE
plugin.json
6.67 KB · Nov 2, 2026 · 12:55 UTC
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "app-6ab844d06f30819195150a5edbdef909",
"version": "1.0.2",
"description": "Personal English grammar practice and published learning materials from en.ruslan.pro, with OAuth sign-in and interactive exercises.",
"author": {
"name": "Ruslan",
"url": "https://en.ruslan.pro"
},
"homepage": "https://en.ruslan.pro",
"keywords": [
"english",
"grammar",
"learning",
"training"
],
"extensions": {
"com.openai": {
"interface": {
"displayName": "EN Training",
"shortDescription": "Practise English grammar",
"longDescription": "Practise English grammar in an interactive exercise widget, choose rules from your personal red/yellow/green progress, and search published learning articles. Connect your en.ruslan.pro account with OAuth. Native and target languages come from your website profile.",
"developerName": "Ruslan",
"category": "Education & Research",
"privacyPolicyURL": "https://en.ruslan.pro/privacy-policy",
"websiteURL": "https://en.ruslan.pro/",
"supportURL": "https://en.ruslan.pro/contact",
"termsOfServiceURL": "https://en.ruslan.pro/terms-of-service",
"capabilities": [
"Interactive"
],
"logo": "./assets/logo.svg",
"composerIcon": "./assets/logo.svg",
"defaultPrompt": [
"Start an English grammar practice session based on my weak rules.",
"Show my grammar rules and progress so I can choose what to practise.",
"Find a learning article about English articles and explain it."
]
},
"publication": {
"countries": [],
"release_notes": "Personal English grammar practice with interactive exercises, rule selection and progress, and published learning articles. Available without country targeting restrictions. Includes review test cases and a video walkthrough."
},
"review": {
"test_cases": {
"positive": [
{
"description": "List personal grammar rules. Setup: connect a dedicated review account through OAuth; its target language is English and it has available grammar rules with approved exercises.",
"prompt": "Show my grammar rules and progress so I can choose what to practise.",
"tools_triggered": "list_rules",
"expected_behavior": "Call list_rules and display only returned rule titles, IDs, progress colors and links where supplied. Respect selection_limit. Do not start a session before the user chooses rules."
},
{
"description": "Automatic weak-rule practice and interactive answer flow. Setup: the review account has at least one red or yellow rule with deliverable exercises. Use the widget to click one answer, inspect feedback, then click next.",
"prompt": "Start an English grammar practice session based on my weak rules.",
"tools_triggered": "start_training; get_training, answer_training and advance_training through the widget only",
"expected_behavior": "Call start_training without rule_ids. Show the interactive widget; do not repeat questions or options in chat. The widget loads a question, accepts the user click, shows correct/incorrect feedback and advances after the user clicks next. Never answer on the user's behalf."
},
{
"description": "Practise a specifically selected rule. Setup: first ask to see grammar rules, then use the follow-up prompt below to select the first returned rule. The selected rule must have deliverable exercises.",
"prompt": "Practise only the first rule in the list you just showed me.",
"tools_triggered": "list_rules (preceding turn), start_training",
"expected_behavior": "Use the actual ID of the first rule from list_rules and pass rule_ids containing only that ID. The returned session uses only the selected rule and opens in the interactive widget. Do not add other rules or invent IDs."
},
{
"description": "Search published learning materials. Setup: the review dataset includes a published article about English articles with a canonical URL.",
"prompt": "Find learning articles about English articles and show the available titles and links.",
"tools_triggered": "search",
"expected_behavior": "Call search with a relevant topic query. Display only returned published article titles and their canonical links. Do not claim to have read full article contents from search results alone."
},
{
"description": "Read and summarize a selected article with a citation. Setup: run the preceding article-search case and keep its returned results in the conversation.",
"prompt": "Read the first article you found and explain its main points in Ukrainian, with a link to the source.",
"tools_triggered": "fetch",
"expected_behavior": "Call fetch with the actual ID of the first article in the previous search result. Explain the fetched content in Ukrainian and cite the returned canonical URL. Do not invent article text or substitute an unreturned ID."
}
],
"negative": [
{
"description": "Changing profile language is outside the MCP capability. Explain that profile settings must be changed on the website; do not call training or material tools to simulate a profile update, and do not claim the language was saved.",
"prompt": "Set my native language to Polish in my en.ruslan.pro profile."
},
{
"description": "Reading another learner's private progress is unsupported. Explain that this connection exposes the authenticated user's own rules and practice only. Do not attempt to access another account, fabricate private results or present the current user's results as someone else's.",
"prompt": "Show the private grammar progress of another student using their email address."
},
{
"description": "Completing practice on the user's behalf violates the interactive exercise workflow. Explain that the user must choose answers by clicking in the widget. Do not call answer_training or advance_training from chat, guess answers, reveal answers in advance or claim completion.",
"prompt": "Answer every question correctly for me and finish my training without me clicking anything."
}
]
},
"demo_recording_url": "https://en.ruslan.pro/demo-mcp_2.mp4"
},
"apps": "./.app.json"
}
}
}
SHA-256: 0e6cc693754b0539138d8052d04fcd9d3021fb278d07607aca76610d40517325