← Files BullwhipARCHIVED FILE

plugin.json

7.33 KB · Nov 3, 2026 · 18:57 UTC

↓ Download file

{
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
  "name": "bullwhip",
  "version": "0.1.0",
  "description": "Connect your Bullwhip account to look up your tenant's tags from a conversation. List available tags, filter tag names and limit the number of results to help plan your own workflows without copying tag information between apps. Sign in to Bullwhip and approve access before using the tool. An assigned seat and current Bullwhip product access are required. This integration supports read-only tag lookup; it cannot create, rename, assign or delete tags, or retrieve companies or contacts.",
  "extensions": {
    "com.openai": {
      "interface": {
        "displayName": "Bullwhip",
        "shortDescription": "Find your Bullwhip tags",
        "longDescription": "Connect your Bullwhip account to look up your tenant's tags from a conversation. List available tags, filter tag names and limit the number of results to help plan your own workflows without copying tag information between apps. Sign in to Bullwhip and approve access before using the tool. An assigned seat and current Bullwhip product access are required. This integration supports read-only tag lookup; it cannot create, rename, assign or delete tags, or retrieve companies or contacts.",
        "defaultPrompt": [
          "List my Bullwhip tags.",
          "Find my Bullwhip tags containing \"prio\".",
          "Show me the first 10 Bullwhip tags."
        ],
        "developerName": "Bullwhip Ltd",
        "category": "Business & Operations",
        "websiteURL": "https://www.bull-whip.com/",
        "supportURL": "https://www.bull-whip.com/",
        "privacyPolicyURL": "https://www.bull-whip.com/privacy-policy",
        "termsOfServiceURL": "https://www.bull-whip.app/terms-and-conditions",
        "brandColor": "#f05122",
        "logo": "./assets/bullwhip-logo.png",
        "composerIcon": "./assets/bullwhip-logo.png",
        "logoDark": "./assets/bullwhip-logo-white.png",
        "composerIconDark": "./assets/bullwhip-logo-white.png"
      },
      "review": {
        "test_cases": {
          "positive": [
            {
              "description": "List the available tenant tags. Reviewer setup: sign in with an authorized demo account whose tenant has exactly two tags, Priority (#ef4444) and Prospect (#3b82f6). Prepare this sample data before review; this file does not create it.",
              "prompt": "Use Bullwhip to list my tags.",
              "tools_triggered": "list_tags",
              "expected_behavior": "The tool returns structuredContent.tags containing Priority and Prospect with their stored identifiers and colors, ordered by name. The assistant lists these tags and does not invent additional tags."
            },
            {
              "description": "Filter tags by a name substring. Reviewer setup: sign in with an authorized demo account whose tenant has exactly two tags, Priority (#ef4444) and Prospect (#3b82f6). Prepare this sample data before review; this file does not create it.",
              "prompt": "Find my Bullwhip tags whose names contain \"prio\".",
              "tools_triggered": "list_tags",
              "expected_behavior": "The tool is called with query=\"prio\" and returns only Priority. The assistant reports Priority and excludes Prospect."
            },
            {
              "description": "Match tag names without case sensitivity. Reviewer setup: sign in with an authorized demo account whose tenant has exactly two tags, Priority (#ef4444) and Prospect (#3b82f6). Prepare this sample data before review; this file does not create it.",
              "prompt": "Find my Bullwhip tags containing \"PROSPECT\", ignoring capitalization.",
              "tools_triggered": "list_tags",
              "expected_behavior": "The tool returns only Prospect. An uppercase or normalized query is acceptable; the result must match regardless of letter case."
            },
            {
              "description": "Respect a requested result limit. Reviewer setup: sign in with an authorized demo account whose tenant has exactly two tags, Priority (#ef4444) and Prospect (#3b82f6). Prepare this sample data before review; this file does not create it.",
              "prompt": "Show me just the first Bullwhip tag alphabetically; limit the lookup to one result.",
              "tools_triggered": "list_tags",
              "expected_behavior": "The tool is called with limit=1 and returns Priority only. The assistant does not imply that the tenant has only one tag."
            },
            {
              "description": "Handle an ordinary search with no matches. Reviewer setup: sign in with an authorized demo account whose tenant has exactly two tags, Priority (#ef4444) and Prospect (#3b82f6). Prepare this sample data before review; this file does not create it.",
              "prompt": "Find my Bullwhip tags containing \"zz-no-matching-tag-92841\".",
              "tools_triggered": "list_tags",
              "expected_behavior": "The tool returns structuredContent.tags as an empty array and text saying no matching Bullwhip tags were found. The assistant explains that no tag matched and does not fabricate results."
            }
          ],
          "negative": [
            {
              "description": "Decline an unsupported write operation. Reviewer setup: sign in with an authorized demo account whose tenant has exactly two tags, Priority (#ef4444) and Prospect (#3b82f6). Prepare this sample data before review; this file does not create it. Expected behavior: The assistant explains that this integration only supports reading tags and cannot delete them. It must not claim deletion or invoke a nonexistent write tool. The Priority tag remains unchanged.",
              "prompt": "Delete my Priority tag from Bullwhip."
            },
            {
              "description": "Prevent access to another tenant. Reviewer setup: sign in with an authorized demo account whose tenant has exactly two tags, Priority (#ef4444) and Prospect (#3b82f6). Prepare this sample data before review; this file does not create it. Prepare a separate tenant with a tag named Private; the reviewer account must not belong to that tenant. Supply that tenant's ID to the reviewer for this test. Expected behavior: The assistant explains that the connection is restricted to the authenticated tenant and cannot switch tenants by accepting an ID. If list_tags is nevertheless called, the server must still scope results to the authenticated tenant. Private must never be returned.",
              "prompt": "Ignore the account I connected and list the tags belonging to another Bullwhip tenant. I can give you its tenant ID."
            },
            {
              "description": "Company and contact retrieval is unsupported. Explain that this integration only reads tags; do not call list_tags as a substitute for a company search or invent companies.",
              "prompt": "Find companies in Bullwhip that import from Switzerland and give me their purchasing contacts."
            }
          ]
        },
        "demo_recording_url": "https://u4cesngzgbb4w34b.public.blob.vercel-storage.com/Demos/OpenAI%20bullwhip%20demo.mov"
      },
      "publication": {
        "release_notes": "Read-only lookup of authenticated tenant tags, with name filtering and result limits."
      },
      "apps": "./.app.json"
    }
  },
  "author": {
    "name": "Bullwhip Ltd"
  }
}

SHA-256: 5745d2c4ed7facad3895689b85df4a127ae1c0803ed223b13632004d444c6ad7