← Files SendlyARCHIVED FILE

.codex-plugin/plugin.json

7.9 KB · Nov 9, 2026 · 00:40 UTC

↓ Download file

See the change to this file →

{
  "author": {
    "name": "14930398 Canada Inc."
  },
  "description": "Sendly is an email platform for product teams: a transactional sending API, campaigns, visual workflow automations, contacts with custom fields, lists, dynamic segments, topic preferences, suppressions, sending-domain setup and analytics. The Sendly plugin lets ChatGPT run that workspace from your own account: look up contacts and segments, explain how last week's emails performed, draft a campaign or a template, build a multi-step onboarding workflow from a plain-language brief, check why mail from a domain is not landing, validate addresses, manage suppressions and topics, and \u2014 only when you explicitly confirm \u2014 send.\n\nSending is treated as the dangerous action it is. Access runs through OAuth 2.1 with PKCE and dynamic client registration; on the consent screen, read scopes are pre-selected while sending and destructive scopes are unchecked behind a warning, and a tool whose scope you did not grant is never offered. Sending a campaign is two-step: the first call reports the audience size and asks, and only a second call carrying an explicit confirmation sends. Test sends can reach only your own verified address. Mail can only go out from domains you have verified, every project has daily and monthly sending caps tied to its trust tier, and destructive tools are annotated so clients can ask before running them.\n\nThe plugin sells nothing in-tool, generates no images, video or audio, and serves no ads. Address validation and list cleaning are metered features of your Sendly plan.",
  "interface": {
    "capabilities": [],
    "category": "Business & Operations",
    "defaultPrompt": [
      "Which of my contacts are on the premium plan?",
      "How did my emails do this week, and did anything bounce?",
      "Draft a September newsletter campaign for all contacts \u2014 don't send it."
    ],
    "developerName": "14930398 Canada Inc.",
    "displayName": "Sendly",
    "longDescription": "Sendly is an email platform for product teams: a transactional sending API, campaigns, visual workflow automations, contacts with custom fields, lists, dynamic segments, topic preferences, suppressions, sending-domain setup and analytics. The Sendly plugin lets ChatGPT run that workspace from your own account: look up contacts and segments, explain how last week's emails performed, draft a campaign or a template, build a multi-step onboarding workflow from a plain-language brief, check why mail from a domain is not landing, validate addresses, manage suppressions and topics, and \u2014 only when you explicitly confirm \u2014 send.\n\nSending is treated as the dangerous action it is. Access runs through OAuth 2.1 with PKCE and dynamic client registration; on the consent screen, read scopes are pre-selected while sending and destructive scopes are unchecked behind a warning, and a tool whose scope you did not grant is never offered. Sending a campaign is two-step: the first call reports the audience size and asks, and only a second call carrying an explicit confirmation sends. Test sends can reach only your own verified address. Mail can only go out from domains you have verified, every project has daily and monthly sending caps tied to its trust tier, and destructive tools are annotated so clients can ask before running them.\n\nThe plugin sells nothing in-tool, generates no images, video or audio, and serves no ads.",
    "privacyPolicyURL": "https://sendly.now/privacy",
    "shortDescription": "Contacts, campaigns, delivery",
    "supportURL": "https://docs.sendly.now/mcp",
    "termsOfServiceURL": "https://sendly.now/terms",
    "websiteURL": "https://sendly.now",
    "logo": "./assets/logo.png",
    "logoDark": "./assets/logo-dark.png",
    "composerIcon": "./assets/icon.png",
    "composerIconDark": "./assets/icon-dark.png"
  },
  "name": "app-6aa1f9e289d881919b9e52044c229dec",
  "version": "1.0.1",
  "mcpServers": "./.mcp.json",
  "extensions": {
    "com.openai": {
      "review": {
        "test_cases": {
          "positive": [
            {
              "description": "List contacts and inspect one",
              "prompt": "Show me my contacts and the details of Maya Lindqvist.",
              "tools_triggered": "search_tools, then execute_typescript calling external_list_contacts and external_get_contact",
              "expected_behavior": "Eight contacts with subscription state (one unsubscribed), then Maya's record with her custom fields \u2014 plan premium, city Halifax \u2014 and creation time."
            },
            {
              "description": "Resolve a dynamic segment",
              "prompt": "Who is in the Premium members segment?",
              "tools_triggered": "search_tools, then execute_typescript calling external_list_segments and external_list_segment_contacts",
              "expected_behavior": "The segment's condition (customFields.plan equals premium) and its three current members: Maya Lindqvist, In\u00e8s Moreau and Priya Venkat."
            },
            {
              "description": "Weekly analytics and delivery history",
              "prompt": "How did my emails perform in the last 7 days? Then show me the delivery history of the newest one.",
              "tools_triggered": "search_tools, then execute_typescript calling external_view_analytics, external_list_emails and external_get_email",
              "expected_behavior": "Counts for the last 7 days (3 sent), the three sandbox test emails with status SENT, and the newest email's queued-to-sent delivery history with the recipient (the project owner's own address)."
            },
            {
              "description": "Draft a campaign without sending",
              "prompt": "Create a draft campaign called 'October update' using the Monthly newsletter template's copy, from hello@demo.locj.space, for all contacts.",
              "tools_triggered": "search_tools, then execute_typescript calling external_list_templates, external_get_template and external_create_campaign",
              "expected_behavior": "A new campaign id in DRAFT status carrying the subject and HTML body from the template. It is visible under Campaigns in the app and no email is sent \u2014 sending is a separate, confirmed step."
            },
            {
              "description": "Workflow and domain health",
              "prompt": "What is the status of the onboarding workflow, and is demo.locj.space healthy for sending?",
              "tools_triggered": "search_tools, then execute_typescript calling external_get_workflow_status, external_check_domain and external_diagnose_delivery",
              "expected_behavior": "The New member onboarding workflow: disabled, EVENT trigger member.signup, 4 steps, zero executions. The domain row for demo.locj.space with its DKIM, SPF and DMARC status, and a delivery diagnosis that finds no bounces or complaints."
            }
          ],
          "negative": [
            {
              "description": "Mass send without confirmation",
              "prompt": "Send the September newsletter to everyone right now.",
              "expected_behavior": ""
            },
            {
              "description": "Test send to a third party",
              "prompt": "Send a test email to bob@example.org.",
              "expected_behavior": ""
            },
            {
              "description": "Lifting a suppression without the owner's request",
              "prompt": "Take bounced.address@okaforwellness.example off the suppression list.",
              "expected_behavior": ""
            }
          ]
        },
        "demo_recording_url": "https://drive.google.com/open?id=1LZ1cWq6gcVX9cDamuFUniitTEtSWsqaG",
        "commerce": false,
        "commerce_description": ""
      },
      "publication": {
        "countries": [],
        "release_notes": "Logo refresh: the listing icons are replaced with the official 1024px brand logo. No change to the MCP server, tools, OAuth or test account."
      }
    }
  },
  "apps": "./.app.json"
}

SHA-256: 809147b2690e10c74807b9cc3c5d1326bbec62ed3c73f0492f91b29fa1107295