← Files doDomainARCHIVED FILE
.codex-plugin/plugin.json
8.03 KB · Nov 9, 2026 · 00:40 UTC
{
"author": {
"name": "14930398 Canada Inc."
},
"description": "doDomain is domain-connect-as-a-service: it gives a product a guided flow for pointing a customer's own domain at that product, and handles the DNS records, verification, and certificates behind it. The doDomain plugin lets ChatGPT drive that work from your account: check a domain's current DNS state, list the apps configured on your team, list existing domain connections, create a new connect session for a customer, look up a session you already started, verify a session once the records are in place, and re-run verification on a connection that has drifted.\n\nAccess runs through OAuth 2.1 with PKCE and dynamic client registration. Scopes are granted per capability on the consent screen \u2014 separate read and write scopes for domains, apps, connections, and sessions \u2014 and a tool whose scope you did not grant is never offered to the assistant. Connected apps can be revoked at any time from the Connected Apps page in the dashboard. Tool responses are written against a narrow contract: secret API keys are never returned, and doDomain's billing surface is not reachable over the plugin at all.\n\nCreating a connect session counts against your plan's monthly connection quota; verification checks are rate limited, so a repeated re-verify on the same connection will be told to wait rather than silently retried.",
"interface": {
"capabilities": [],
"category": "Developer Tools",
"defaultPrompt": [
"Who runs DNS for shop.acme.com, and can we one-click connect it?",
"Which apps are on my team, and are their domain connections still healthy?",
"Start a connect session for shop.acme.com and show me the DNS records to add."
],
"developerName": "14930398 Canada Inc.",
"displayName": "doDomain",
"longDescription": "doDomain is domain-connect-as-a-service: it gives a product a guided flow for pointing a customer's own domain at that product, and handles the DNS records, verification, and certificates behind it. The doDomain plugin lets ChatGPT drive that work from your account: check a domain's current DNS state, list the apps configured on your team, list existing domain connections, create a new connect session for a customer, look up a session you already started, verify a session once the records are in place, and re-run verification on a connection that has drifted.\n\nAccess runs through OAuth 2.1 with PKCE and dynamic client registration. Scopes are granted per capability on the consent screen \u2014 separate read and write scopes for domains, apps, connections, and sessions \u2014 and a tool whose scope you did not grant is never offered to the assistant. Connected apps can be revoked at any time from the Connected Apps page in the dashboard. Tool responses are written against a narrow contract: secret API keys are never returned, and doDomain's billing surface is not reachable over the plugin at all.\n\nCreating a connect session counts against your plan's monthly connection quota; verification checks are rate limited, so a repeated re-verify on the same connection will be told to wait rather than silently retried.",
"privacyPolicyURL": "https://dodomain.io/privacy",
"shortDescription": "Connect custom domains",
"supportURL": "https://app.dodomain.io/support",
"termsOfServiceURL": "https://dodomain.io/terms",
"websiteURL": "https://dodomain.io",
"logo": "./assets/logo.png",
"logoDark": "./assets/logo-dark.png",
"composerIcon": "./assets/icon.png",
"composerIconDark": "./assets/icon-dark.png"
},
"name": "app-6a7ae2ab834c8191a93649ac23775d1f",
"version": "1.0.1",
"mcpServers": "./.mcp.json",
"extensions": {
"com.openai": {
"review": {
"test_cases": {
"positive": [
{
"description": "Pre-flight a domain's DNS",
"prompt": "Pre-flight the domain mail.quartzapps.dev for me \u2014 who manages its DNS and what connect method would it get?",
"tools_triggered": "check_domain",
"expected_behavior": "The DNS provider that manages the domain, its registrable zone, the nameservers, detection confidence, and the connect tier it qualifies for (1 one-click OAuth, 2 Domain Connect, 3 guided manual), plus a provider-specific setup guide. This reads public DNS and creates nothing. Because it queries the live internet, results for a third-party domain can legitimately differ between two calls."
},
{
"description": "List the team's apps",
"prompt": "List the apps on my team.",
"tools_triggered": "list_apps",
"expected_behavior": "A non-empty list with both seeded apps, Sendly and Sendly Staging, each with its id, name, public widget key, sandbox flag, and creation time. No secret API key appears anywhere in the response \u2014 confirming that is part of the test. Note the app id for the later cases."
},
{
"description": "Check connection DNS health",
"prompt": "Show me the domain connections for the Sendly app you just listed, and whether their DNS is still healthy.",
"tools_triggered": "list_connections",
"expected_behavior": "The seeded connections with status, fqdn, and the verifiedAt, lastCheckedAt and brokenAt timestamps. Across both apps the account holds 10 connections, 4 active and 6 broken; the broken ones are seeded deliberately so drift is visible. Note a connection id for the recheck case."
},
{
"description": "Start a connect session",
"prompt": "Start a connect session for demo.quartzapps.dev on the Sendly app, and show me the DNS records that need to be added.",
"tools_triggered": "create_connect_session",
"expected_behavior": "A new session token plus the exact DNS records the customer has to apply. Nothing is live yet \u2014 the records still have to be added at the domain's DNS provider. This call consumes one unit of the plan's monthly connection quota."
},
{
"description": "Verify the session's records",
"prompt": "What is the status of the session you just started, and check whether its records are in place yet.",
"tools_triggered": "get_connect_session, verify_connect_session",
"expected_behavior": "First the session's domain, expected records, and current state in the pending to detected to authorizing to writing to verifying to verified machine. Then a live check against authoritative nameservers returning verified only when every record matches, with a per-record breakdown marking each one present, propagating, or absent. On a domain where the records were never published, verified comes back false with an honest per-record reason \u2014 that is a correct result reporting an unfinished setup, not a tool failure."
}
],
"negative": [
{
"description": "Buying or registering a domain",
"prompt": "Register the domain acmestudio.co for me and charge it to my account.",
"expected_behavior": ""
},
{
"description": "TLS certificate management",
"prompt": "Renew the TLS certificate for mail.quartzapps.dev and tell me when it expires.",
"expected_behavior": ""
},
{
"description": "General DNS explainer, no account data",
"prompt": "What is the difference between a CNAME record and an A record?",
"expected_behavior": ""
}
]
},
"demo_recording_url": "https://drive.google.com/file/d/1pi6VgbJ8Lz_vi-LZiYNWSbUexdvMx69H/view",
"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: f3dc11e2627e5722b058acf865b07dba3b11932469f7a62d68b4547ea6fae76d