← Files PhraseARCHIVED FILE

plugin.json

5.38 KB · Nov 7, 2026 · 13:24 UTC

↓ Download file

{
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
  "name": "phrase",
  "version": "1.0.0",
  "description": "Manage Phrase TMS translation projects and jobs, Phrase Strings localization keys, and translation quality checks from ChatGPT.",
  "author": {
    "name": "Phrase",
    "url": "https://phrase.com/"
  },
  "homepage": "https://phrase.com/",
  "license": "Proprietary",
  "keywords": [
    "localization",
    "translation",
    "tms",
    "strings",
    "i18n"
  ],
  "extensions": {
    "com.openai": {
      "interface": {
        "displayName": "Phrase",
        "shortDescription": "Localization from ChatGPT",
        "longDescription": "Connect ChatGPT to your Phrase account. Check translation job status, create and manage TMS projects and jobs, work with Phrase Strings localization keys and translations, and run translation quality checks, all in natural language. Sign in once with your Phrase account via OAuth; no API tokens are needed. Works with both read and write actions, and asks for your confirmation before changing anything.",
        "developerName": "Phrase",
        "category": "Productivity",
        "capabilities": [],
        "defaultPrompt": [
          "Which of my Phrase TMS jobs are overdue or due this week?",
          "List the untranslated keys in my Phrase Strings project for German",
          "Check the placeholders in my Phrase Strings project for mismatches"
        ],
        "brandColor": "#111111",
        "brandColorDark": "#03eab3",
        "logo": "./assets/logo.png",
        "composerIcon": "./assets/composer-icon.png",
        "screenshots": [],
        "websiteURL": "https://phrase.com/",
        "supportURL": "https://support.phrase.com/hc/en-us",
        "privacyPolicyURL": "https://phrase.com/privacy/",
        "termsOfServiceURL": "https://phrase.com/legal/"
      },
      "review": {
        "test_cases": {
          "positive": [
            {
              "description": "Read TMS jobs and filter by due date",
              "prompt": "Which of my Phrase TMS jobs are overdue or due this week?",
              "tools_triggered": "tms_search_api, tms_read_api",
              "expected_behavior": "Reads the signed-in user's TMS jobs and lists the ones that are past their due date or due within the next 7 days, with project name, target language, status and due date. If none match, it says so. Nothing is changed."
            },
            {
              "description": "Read Strings keys missing a German translation",
              "prompt": "List the untranslated keys in my Phrase Strings project \"Demo Mobile App\" for German.",
              "tools_triggered": "strings_search_api, strings_read_api",
              "expected_behavior": "Finds the Demo Mobile App project and its German locale, then lists the keys that have no German translation yet. Nothing is changed."
            },
            {
              "description": "Change a TMS job's due date after confirmation",
              "prompt": "In my Phrase TMS project \"Demo Website\", move the due date of the German homepage.html job to November 20, 2026.",
              "tools_triggered": "tms_search_api, tms_read_api, tms_write_api",
              "expected_behavior": "Finds the German homepage.html job in the Demo Website project, shows its current and new due date and asks for confirmation. Only after the user confirms does it update the due date, then confirms the saved value. If the job is already due on November 20, 2026, it says so and makes no change."
            },
            {
              "description": "Update a Strings translation after confirmation",
              "prompt": "In my Phrase Strings project \"Demo Mobile App\", set the German translation of the key checkout.pay_button to \"Jetzt bezahlen\".",
              "tools_triggered": "strings_search_api, strings_read_api, strings_write_api",
              "expected_behavior": "Finds the key and its current German translation, shows the old and new value and asks for confirmation. Only after the user confirms does it update the translation, then confirms the saved value. If the German translation is already \"Jetzt bezahlen\", it says so and makes no change."
            },
            {
              "description": "Placeholder mismatch quality check",
              "prompt": "Check the translations in my Phrase Strings project \"Demo Mobile App\" for placeholder mismatches.",
              "tools_triggered": "strings_search_api, strings_read_api",
              "expected_behavior": "Reads keys and translations and compares placeholders (for example {name} or %s) between the source and each target language. Lists every key and locale where placeholders are missing or differ, or reports that none were found. Nothing is changed."
            }
          ],
          "negative": [
            {
              "description": "General writing task unrelated to Phrase",
              "prompt": "Draft a short email telling my team the release slips by one week."
            },
            {
              "description": "General market question unrelated to the user's Phrase account",
              "prompt": "Which translation vendor is the cheapest?"
            },
            {
              "description": "General knowledge question unrelated to Phrase",
              "prompt": "Summarize the plot of Hamlet in three sentences."
            }
          ]
        }
      },
      "apps": "./.app.json"
    }
  }
}

SHA-256: c2a491099a3ea5aee9c52f15df6019fa65795b9f554f7e0cbff38667711df543