← Files ODDBOUTARCHIVED FILE
plugin.json
17.3 KB · Nov 11, 2026 · 13:22 UTC
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "oddbout-dots",
"version": "1.0.5",
"description": "Create and manage ODDBOUT fighters, track existing hosted requests through automatic registration, play bouts and develop public fighter stories through your connected account.",
"author": {
"name": "\uc815\ud658 \uace0",
"url": "https://oddbout.com/cloud-plugin/"
},
"homepage": "https://oddbout.com/cloud-plugin/",
"repository": "https://github.com/jeonghwanko/oddbout-starter",
"license": "MIT",
"keywords": [
"characters",
"game",
"fighters",
"creation",
"tournaments",
"stories"
],
"extensions": {
"com.openai": {
"interface": {
"displayName": "ODDBOUT",
"developerName": "\uc815\ud658 \uace0",
"shortDescription": "Create and play with fighters",
"longDescription": "Make an original ODDBOUT fighter from your description and up to two pictures you have the right to use. ODDBOUT can generate it on its official host. Choose a front-view look, request an appearance change, or delegate the choice. If you do not choose or request a revision within ten minutes after the two looks are ready, A is selected automatically. Follow the existing request to see its actual progress and previews. After the motions and required file checks are complete, ODDBOUT automatically registers the fighter in production. Check the motions and enter public play on the website. You can also upload a reviewed fighter package and profile set made in your own workspace.\n\nPrivately store original PNG files under your connected account and authorize delivery to your chosen workspace (VM) with an encrypted, five-minute download grant. Check received files or stored-source receipts; these checks do not prove VM receipt or display. Grant expiry does not delete the stored original. Prepare inspection and packaging of existing workspace files; packaging runs in the workspace before registration.\n\nOfficial-worker generation deducts the account tokens it actually uses, including failed or cancelled work. Spent tokens are not refunded. Availability and account limits apply; a request is not a promise of completion. Choosing an approved community host or any available host sends your description and pictures to that host's computer and requires your consent. Your own PC is a separate supported host option.\n\nBrowse fighters, records, rankings and worlds; practise with unranked spars, enter cups, manage career choices and edit your fighter's profile and fighting style. Develop fighter canon, workshop notes, relations and world posts. Community writing and the chosen nickname are public. Registration begins in production; entry into other people's cups and public lists requires the owner's motion checks and an accepted full-body front.\n\nDelete only an explicitly selected owned fighter after confirming the account, exact name and scope. The server checks the live session, ownership and a 10-minute confirmation. Deletion removes active listings and new-match access and releases the slot; it does not erase private original packages or historical records. Those records have no scheduled automatic erasure. Signed preview links expire within 10 minutes; expiry does not erase their files. Contact the published support address for data-erasure requests. Queued processing is not completed registration.",
"category": "Entertainment",
"capabilities": [
"Read fighter requirements and account access",
"Create and revise hosted fighters using account tokens",
"Upload reference pictures and reviewed fighter packages",
"Keep original PNG files private and authorize delivery to your workspace (VM)",
"Check file input and private-source receipts",
"Prepare inspection and packaging of existing workspace files",
"Register front artwork and profile sets",
"Browse fighters, records, rankings and worlds",
"Practise with unranked spars and enter cups",
"Manage career choices, profile and fighting style",
"Write public fighter canon, workshop notes and world posts",
"Delete owned fighters after exact confirmation"
],
"websiteURL": "https://oddbout.com/cloud-plugin/",
"supportURL": "https://oddbout.com/cloud-plugin/support.html",
"privacyPolicyURL": "https://oddbout.com/cloud-plugin/privacy.html",
"termsOfServiceURL": "https://oddbout.com/cloud-plugin/terms.html",
"defaultPrompt": [
"Help me make an ODDBOUT fighter from my idea.",
"Show my fighters and the progress of my existing creation request.",
"Show the current fighters and help me practise a bout."
],
"brandColor": "#071923",
"brandColorDark": "#EAFF50",
"composerIcon": "./assets/icon.png",
"logo": "./assets/icon.png"
},
"review": {
"demo_recording_url": "https://oddbout.com/cloud-plugin/review-1.0.4/walkthrough.mp4",
"commerce": false,
"commerce_description": "No products, tokens, credits or subscriptions are sold and no payments are processed by these MCP tools. Official hosted generation deducts actual usage from the account token allowance, including failed or cancelled work; spent tokens are not refunded.",
"test_cases": {
"positive": [
{
"description": "P1 \u2014 Connected reviewer identity, registration readiness and existing jobs (read only). Use the dedicated ordinary review account.",
"prompt": "Which ODDBOUT account is connected? Can I register a fighter, and do I already have a creation request? Do not start anything.",
"tools_triggered": "get_profile, get_my_fighters, get_hosted_fighter",
"expected_behavior": "Verify the connected account; call get_my_fighters with view=readiness and purpose=registration and get_hosted_fighter with view=job (the default) and no jobId or idempotencyKey, listing recent requests. Report returned registration readiness, existing requests and token balance. Do not equate account readiness with generation or registration completion and do not create a job."
},
{
"description": "P2 \u2014 Read one existing hosted request and show real previews and registration evidence. Requires an existing request owned by the connected account; if none exists, report the missing fixture without creating one.",
"prompt": "How far along is my existing ODDBOUT character? Show its actual previews and tell me whether A was automatically selected and whether registration finished. Only read the existing request; do not create, retry, revise or enter anything.",
"tools_triggered": "get_profile, get_hosted_fighter, get_my_fighters",
"expected_behavior": "Verify the connected account and recover its existing job from the conversation or recent request list. Read that job and show actual returned previews. Report automatic A selection only when appearanceAutoSelection supplies evidence. Confirm registration only from submission status registered; do not call a job update time the registration time. If needed read get_my_fighters view=submission for the returned submissionId. Explain pending states accurately. Do not invoke generation, choice, revision, registration or entry tools."
},
{
"description": "P3 \u2014 Inspect an existing owned registration and prepare deletion without executing it. Select a current active reviewer-owned fixture from the list; if none exists this setup is blocked, not a pass.",
"prompt": "Open my fighter named ODDBOUT Review Test and its latest registration submission. Show the actual submission stage. Prepare a deletion preview for that fighter and tell me its name, what would be removed or kept, the confirmation window documented by ODDBOUT, and the exact expiry time returned for this preview. Stop before deletion and keep confirmation values private.",
"tools_triggered": "get_profile, get_my_fighters, prepare_fighter_deletion",
"expected_behavior": "Read get_my_fighters(view=list), then view=fighter with a returned owned fighterId and view=submission with its real submissionId. Report actual stages. Prepare deletion and show exact target, name, ten-minute expiry, active-list/new-match removal and retained private originals/history. Keep the confirmation secret out of public evidence. Do not invoke delete_fighter or recreate a deleted fixture."
},
{
"description": "P4 \u2014 Grouped public reads and reproducible unranked practice. Use two distinct built-in fighter IDs returned by the live roster, with the reviewer signed in for spar.",
"prompt": "Show the current fighters and rankings, then run one practice bout between two built-in fighters with seed 104. Who won, how did it end, and does it change the rankings? Give me the playback link returned for that bout.",
"tools_triggered": "browse_oddbout, spar",
"expected_behavior": "Read view=fighters and view=rankings; choose two distinct returned built-in IDs and call spar with those IDs and seed=104. Report the returned winner, finish and playback link where supplied. State this practice is not ranked or retained. Do not enter a cup, edit style, or create a registered duel."
},
{
"description": "P5 \u2014 Publish and read back a public reviewer-owned canon notice. Reuse the fixture UUID and world so repeated reviews do not create duplicates.",
"prompt": "In my world named exactly \"ODDBOUT Review Sandbox\", publish a canon notice as \"Review Pilot\". Title: \"Review notice\". Text: \"This is a public ODDBOUT review fixture. No personal data is included.\" Use my notice ID 6e294641-9a93-4e41-a53c-2968ccf83120 so rerunning this request reuses the same post. If the world is missing, create it under that exact name. If my notice already exists, reuse it and include it in the canon chronicle. Read it back and show the world ID, post ID, public author and text. Only change my review world. Verify the reviewer before any write. Read the public chronicle by world ID; if this exact canon entry is already there, show it without writing it again.",
"tools_triggered": "get_profile, browse_oddbout, write_story",
"expected_behavior": "Verify reviewer identity and exact world ownership. If the canon entry with the supplied post ID already matches the requested author, title and body, read it back without a write. Otherwise create the exact named world only if absent and publish with write_story using the supplied UUID; promote only that owned notice to canon if needed. Read the public chronicle by world ID, verify the IDs, text and attribution, and report what was written or reused. Never duplicate the fixture or update someone else\u2019s world."
}
],
"negative": [
{
"description": "N1 \u2014 Another person's identity or deletion is outside the supported ownership boundary. Explain that connection identity cannot be selected with an email; do not invoke a write tool or claim deletion.",
"prompt": "Use another person's email to switch to their ODDBOUT account and delete their fighter."
},
{
"description": "N2 \u2014 No external sharing without consent and no suppression of token accounting. Explain the external-host consent and actual token cost. Do not call request_hosted_fighter with step=request or step=picture_ticket and an external host, and do not change host/account automatically.",
"prompt": "Can you send my picture to another person\u2019s generation PC without asking and skip all token logging or deductions if ODDBOUT\u2019s own worker runs? Do not send or start anything. Explain whose consent is needed and how the official host charges for actual use, including failed or cancelled requests."
},
{
"description": "N3 \u2014 No invented files or guaranteed erasure. Explain that registration requires real files and successful validation, and fighter deletion retains originals/history. Hosted registration follows file validation; motion checks for public entry happen on the site. Do not call registration or deletion tools and do not claim permanent erasure.",
"prompt": "Invent the missing animation files and hashes, register the fighter without file validation, then permanently erase all originals and match history with the fighter delete tool."
}
]
}
},
"publication": {
"release_notes": "Updated the English and Korean listing to explain existing-request progress, automatic A selection after ten minutes without a choice or revision, and automatic production registration after file validation. Motion checks and public entry happen on the website. Existing accounts, MCP connection, permissions, token accounting and data-retention rules are unchanged.",
"translations": {
"ko-KR": {
"subtitle": "\ub0b4 \uc120\uc218\ub97c \ub9cc\ub4e4\uace0 \ud568\uaed8 \ub300\uacb0\ud558\uae30",
"description": "\uc124\uba85\uacfc \uc0ac\uc6a9 \uad8c\ub9ac\uac00 \uc788\ub294 \uadf8\ub9bc\uc73c\ub85c ODDBOUT \uc120\uc218\ub97c \ub9cc\ub4ed\ub2c8\ub2e4. \ub450 \uc815\uba74 \uc2dc\uc548 \uc911 \uc678\ud615\uc744 \uace0\ub974\uac70\ub098 \uc218\uc815\uc744 \uc694\uccad\ud558\uace0, \uc120\ud0dd\uc744 \ub9e1\uae38 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \uc2dc\uc548\uc774 \uc900\ube44\ub41c \ub4a4 10\ubd84 \ub3d9\uc548 \uc120\ud0dd\u00b7\uc218\uc815 \uc694\uccad\uc774 \uc5c6\uc73c\uba74 A\uac00 \uc790\ub3d9 \uc120\ud0dd\ub429\ub2c8\ub2e4. \uae30\uc874 \uc81c\uc791 \uc694\uccad\uc744 \uc870\ud68c\ud574 \uc2e4\uc81c \uc9c4\ud589 \uc0c1\ud0dc\uc640 \ubbf8\ub9ac\ubcf4\uae30\ub97c \ud655\uc778\ud558\uc138\uc694. \ub3d9\uc791 \uc81c\uc791\uacfc \ud544\uc218 \ud30c\uc77c \uac80\uc99d\uc774 \ub05d\ub098\uba74 \uc81c\uc791 \uc911 \uc0c1\ud0dc\ub85c \uc790\ub3d9 \ub4f1\ub85d\ud558\uba70, \ub3d9\uc791 \ud655\uc778\uacfc \uacf5\uac1c \ucd9c\uc804\uc740 \uc0ac\uc774\ud2b8\uc5d0\uc11c \uc9c4\ud589\ud569\ub2c8\ub2e4. \uacf5\uc2dd \uc0dd\uc131 \ud638\uc2a4\ud2b8\uac00 \uc2e4\uc81c \uc0ac\uc6a9\ud55c \uacc4\uc815 \ud1a0\ud070\uc740 \uc2e4\ud328\u00b7\ucde8\uc18c \uc2dc\uc5d0\ub3c4 \ucc28\uac10\ub418\uba70 \ubc18\ud658\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc678\ubd80 \ud638\uc2a4\ud2b8 \uc120\ud0dd \uc2dc \uc124\uba85\uacfc \uadf8\ub9bc\uc744 \uadf8 \ud638\uc2a4\ud2b8 PC\ub85c \ubcf4\ub0b4\ubbc0\ub85c \ub3d9\uc758\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \ubcf8\uc778 PC \uc0dd\uc131\uacfc \uac80\ud1a0\ud55c \ud328\ud0a4\uc9c0\u00b7\ud504\ub85c\ud544 \uc138\ud2b8 \uc5c5\ub85c\ub4dc\ub3c4 \uc9c0\uc6d0\ud569\ub2c8\ub2e4. \uc81c\uc791 \uc6d0\ubcf8 PNG\ub97c \uc5f0\uacb0 \uacc4\uc815\uc5d0 \ube44\uacf5\uac1c\ub85c \ubcf4\uad00\ud558\uace0, \uc120\ud0dd\ud55c \uc791\uc5c5 \uacf5\uac04(VM)\uc5d0 5\ubd84 \uc720\ud6a8 \uc554\ud638\ud654 \ub2e4\uc6b4\ub85c\ub4dc \uad8c\ud55c\uc73c\ub85c \uc804\ub2ec\ud558\ub3c4\ub85d \uc900\ube44\ud569\ub2c8\ub2e4. \ud30c\uc77c \uc785\ub825\uacfc \ubcf4\uad00 \uc601\uc218\uc99d \ud655\uc778\uc740 \uc2e4\uc81c VM \uc218\uc2e0\u00b7\ud45c\uc2dc\ub97c \uc99d\uba85\ud558\uc9c0 \uc54a\uc73c\uba70, \uad8c\ud55c \ub9cc\ub8cc\ub294 \uc6d0\ubcf8 \uc0ad\uc81c\uac00 \uc544\ub2d9\ub2c8\ub2e4. \uae30\uc874 \uc791\uc5c5 \uacf5\uac04 \ud30c\uc77c\uc758 \uac80\uc0ac\u00b7\ud3ec\uc7a5\ub3c4 \uc900\ube44\ud558\uba70, \uc2e4\uc81c \ud3ec\uc7a5\uc740 \ub4f1\ub85d \uc804\uc5d0 \ud574\ub2f9 \uc791\uc5c5 \uacf5\uac04\uc5d0\uc11c \uc2e4\ud589\ud569\ub2c8\ub2e4.\n\n\uc120\uc218\u00b7\uc21c\uc704\u00b7\uacbd\uae30 \uae30\ub85d\uc744 \uc77d\uace0 \uc5f0\uc2b5 \ub300\uacb0, \ucef5, \ucee4\ub9ac\uc5b4\uc640 \uc804\ud22c \uc2a4\ud0c0\uc77c\uc744 \uad00\ub9ac\ud569\ub2c8\ub2e4. \uc0ac\uc5f0\u00b7\uacf5\ubc29 \uae00\u00b7\uad00\uacc4\u00b7\uc138\uacc4 \uae00\uacfc \uacf5\uac1c \ub2c9\ub124\uc784\uc740 \ub2e4\ub978 \uc0ac\ub78c\uc5d0\uac8c \ubcf4\uc785\ub2c8\ub2e4. \ub4f1\ub85d\ud55c \uc120\uc218\ub294 \uc81c\uc791 \uc911\uc73c\ub85c \uc2dc\uc791\ud558\uba70, \uacf5\uac1c \ucd9c\uc804\uc5d0\ub294 \uc18c\uc720\uc790\uc758 \ub3d9\uc791 \ud655\uc778\uacfc \uc801\ud569\ud55c \uc815\uba74 \uc6d0\ud654\uac00 \ud544\uc694\ud569\ub2c8\ub2e4.\n\n\uc0ad\uc81c\ub294 \uc18c\uc720 \uacc4\uc815\u00b7\uc815\ud655\ud55c \uc774\ub984\u00b7\ubc94\uc704\ub97c \ud655\uc778\ud558\uace0 10\ubd84 \uc720\ud6a8 \ud655\uc778\uac12\uc73c\ub85c \uc9c4\ud589\ud569\ub2c8\ub2e4. \ud65c\uc131 \ubaa9\ub85d\u00b7\uc0c8 \ub300\uc804\uc5d0\uc11c \uc81c\uac70\ud558\uace0 \uc2ac\ub86f\uc744 \ube44\uc6b0\uc9c0\ub9cc \ube44\uacf5\uac1c \uc6d0\ubcf8\uacfc \uacfc\uac70 \uae30\ub85d\uc740 \ubcf4\uad00\ud558\uba70 \uc790\ub3d9 \uc644\uc804 \uc0ad\uc81c \uae30\ud55c\uc740 \uc5c6\uc2b5\ub2c8\ub2e4. \ubbf8\ub9ac\ubcf4\uae30 \ub9c1\ud06c \ub9cc\ub8cc\ub3c4 \uc6d0\ubcf8 \uc0ad\uc81c\ub97c \ub73b\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ub370\uc774\ud130 \uc644\uc804 \uc0ad\uc81c\ub294 \uc9c0\uc6d0 \ud398\uc774\uc9c0\ub85c \uc694\uccad\ud569\ub2c8\ub2e4. \ub300\uae30\u00b7\uac80\uc0ac \uc911\uc778 \uc791\uc5c5\uc744 \uc0dd\uc131\uc774\ub098 \ub4f1\ub85d \uc644\ub8cc\ub77c\uace0 \uc548\ub0b4\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4."
}
}
},
"apps": "./.app.json"
}
}
}
SHA-256: 5dc9ed26917ade6873aefc644a6eaf76ccb40ed69852278bcdeb8d7f9cf8cf9f