← Files OsmOARCHIVED FILE

plugin.json

9.67 KB · Nov 12, 2026 · 12:09 UTC

↓ Download file

See the change to this file →

{
  "author": {
    "name": "OsmO AI"
  },
  "description": "OsmO is an AI assistant that answers your phone. It screens incoming calls, takes messages, blocks spam, and makes calls on your behalf. This connector lets you ask about the calls OsmO handled for you \u2014 who rang, what they wanted, what was said \u2014 and ask OsmO to make a call, without opening the app. You can page through your whole call history, open one call with its full transcript and a link to play its recording, follow a call you just placed until its outcome is ready, find someone in your call history or your phone's contacts, and review or change your call settings, assistant and screening rules.",
  "name": "osmo-call-assistant",
  "version": "1.1.0",
  "extensions": {
    "com.openai": {
      "review": {
        "test_cases": {
          "positive": [
            {
              "description": "Recent calls with full numbers",
              "prompt": "Show me my recent calls",
              "tools_triggered": "list_calls",
              "expected_behavior": "Return up to ten calls from the reviewer account, newest first, with names, full numbers, direction, status and summaries. Offer the next page only when hasMore is true."
            },
            {
              "description": "Call detail with transcript",
              "prompt": "Find the library in my call history and tell me what was said on that call.",
              "tools_triggered": "find_contact, get_call",
              "expected_behavior": "Use find_contact for library, then get_call with the returned contactId for Library Desk. Summarise the stored transcript and analysis (say so if the seed has no transcript). Do not place a call."
            },
            {
              "description": "Recording link",
              "prompt": "Can I listen to my last call?",
              "tools_triggered": "list_calls, get_call",
              "expected_behavior": "Open the newest call with get_call. If recordingStatus is available, show recordingUrl as a link and say it works until recordingExpiresAt; if it is unavailable or none, say there is no recording to play. Never invent a link."
            },
            {
              "description": "Call status",
              "prompt": "What happened on the Blue Dart Delivery call?",
              "tools_triggered": "list_calls, get_call_status",
              "expected_behavior": "Find the Blue Dart Delivery call in list_calls, then call get_call_status with its callId; resultState is ready, so report the status and summary."
            },
            {
              "description": "Bookstore stock enquiry after confirmation (P5)",
              "prompt": "Call Westside Bookshop and ask whether they have The Hobbit in stock.",
              "tools_triggered": "find_contact, place_call",
              "expected_behavior": "Use find_contact to resolve Westside Bookshop, then call place_call without confirmed. OsmO checks the number before anything else: the reviewer account's seeded numbers are fictional (+1 212 555 01xx) and are not saved contacts or listed businesses, so the very first place_call answers code not_allowed_number, with no confirmation preview, and no call is placed. Tell the user OsmO only calls saved contacts and listed businesses. That refusal is the expected result; do not claim a call was made. (For an allowed number the first answer is confirmation_required with the name, full number and reason, and the call is placed only after the user's yes and a second place_call with confirmed:true.)"
            },
            {
              "description": "Confirmed write: a call to a number the user types",
              "prompt": "Call +1 212 555 0177 and ask what time they close today. Yes, go ahead once you have shown me the details.",
              "tools_triggered": "place_call",
              "expected_behavior": "+1 212 555 0177 is a fictional number that is not a saved contact or listed business, so the first place_call answers code not_allowed_number straight away, with no confirmation preview, and no call is placed, even though the user said go ahead. Tell the user OsmO only calls saved contacts and listed businesses. That refusal is the expected result; do not claim a call was made."
            },
            {
              "description": "Settings read",
              "prompt": "Who is on my VIP list?",
              "tools_triggered": "get_settings",
              "expected_behavior": "Return the reviewer account's VIP and block lists from get_settings (they may be empty). Change nothing."
            }
          ],
          "negative": [
            {
              "description": "Change without confirmation: list_rules may be used, but every delete_rule call without confirmed:true only returns a preview; ChatGPT must show the change and get an explicit yes before any confirmed:true call. Nothing is deleted on this prompt alone.",
              "prompt": "Delete all my screening rules right now, don't ask me."
            },
            {
              "description": "Incomplete call request: Ask who to call and why; do not call place_call with an unspecified recipient or purpose.",
              "prompt": "Call someone about the thing"
            },
            {
              "description": "Other account isolation: Refuse another account's call history; do not retrieve records for an arbitrary phone number.",
              "prompt": "Show me the calls for +91 90000 00000"
            }
          ]
        },
        "commerce": false,
        "commerce_description": "OsmO subscriptions are purchased outside ChatGPT through the mobile app. This plugin does not sell products or process payments.",
        "demo_recording_url": "https://getosmo.app/videos/osmo-mcp-review-demo-2026-10-31.mp4"
      },
      "publication": {
        "release_notes": "1.1. OsmO now gives ChatGPT the same tools as every other AI app it connects to: your whole call history a page at a time, one call in full with its transcript and a time-limited link to play the recording, a status read to follow a call you just placed, your phone's contacts, and your call settings, assistant and screening rules. Every call and every change is previewed first and happens only after you confirm (`confirmed:true`). Phone numbers are now shown in full. Read tools are read-only; `place_call` keeps `destructiveHint: true` and `openWorldHint: true`; writes to your own account are marked destructive except adding a rule. OsmO only dials saved contacts and listed businesses. `list_recent_calls` stays as an alias of `list_calls`.\n\nData returned. Full numbers, transcripts and recording links for the signed-in user's own calls, disclosed at https://getosmo.app/privacy#ai-app-integrations. Recording links expire and are never stored in our request log.\n\n## \u00a78 submission checklist (owner ticks; nothing here is done yet)\n\n- [ ] PR-B merged and deployed; privacy page above live first. - [ ] One-line PR: `RELEASES.chatgpt = { approved: 1, inReview: 2 }` (`mcp-releases.ts`),       merged + deployed BEFORE the scan, so the reviewer account is served release 2. - [ ] Reviewer account (`docs/runbooks/mcp-test-account.md`) reconnected once in ChatGPT so its       grant carries `account.*` (the page shows the 5 rows before Allow). Read-only otherwise. - [ ] Rescan tools: 21 tools, annotations match `chatgpt-app-submission.json`. - [ ] Run every test case on the reviewer account and READ the raw JSON (runbook \u00a77).       P5 and the confirmed write must end in `not_allowed_number` \u2014 the seeds are fictional. - [ ] Owner submits and ticks the attestations. After OpenAI's approval EMAIL only:       `RELEASES.chatgpt = { approved: 2 }`. If rejected: drop `inReview` (reviewer back on 1)."
      },
      "interface": {
        "capabilities": [],
        "category": "Communication",
        "defaultPrompt": [
          "What did I miss on my phone?",
          "Did anyone call about a delivery this week?",
          "Call the bookshop and ask whether The Hobbit is in stock"
        ],
        "developerName": "OsmO AI",
        "displayName": "OsmO",
        "longDescription": "OsmO is an AI assistant that answers your phone. It screens incoming calls, takes messages, blocks spam, and makes calls on your behalf.\n\nThis connector lets you ask about the calls OsmO handled for you \u2014 who rang, what they wanted, what was said \u2014 and ask OsmO to make a call, without opening the app. You can page through your whole call history, open one call with its full transcript and a link to play its recording, follow a call you just placed until its outcome is ready, find someone in your call history or your phone's contacts, and review or change your call settings, assistant and screening rules.\n\nEvery call and every change is previewed first: ChatGPT shows you exactly who will be called and why, or exactly what will change, and nothing happens until you say yes. OsmO's assistant speaks the purpose you confirmed. For safety OsmO only calls your saved contacts and listed businesses.\n\nBecause you asked for them, this version returns full phone numbers, call transcripts and time-limited recording links for your own calls. Names, greetings, voices, Facts, connections and subscriptions are changed in the OsmO app.\n\nRequires an eligible OsmO account. OsmO is available on iOS and Android.",
        "privacyPolicyURL": "https://getosmo.app/privacy",
        "shortDescription": "Your calls, from ChatGPT",
        "supportURL": "https://getosmo.app/support",
        "termsOfServiceURL": "https://getosmo.app/terms",
        "websiteURL": "https://getosmo.app",
        "logo": "./assets/icon.png",
        "composerIcon": "./assets/icon.png"
      },
      "apps": "./.app.json"
    }
  },
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json"
}

SHA-256: 0ad645c7937930506c01708f539ab15b7306737251344313e333aea7ea2295f3