← Files PostifyARCHIVED FILE
.codex-plugin/plugin.json
8.53 KB · Nov 6, 2026 · 06:32 UTC
{
"author": {
"name": "14930398 Canada Inc."
},
"description": "Postify is a social media scheduling tool for teams: one calendar for the accounts you publish to, with drafts, scheduling, and delivery analytics in one place. The Postify plugin lets ChatGPT work that calendar with you: list posts and open a specific one, see which channels are connected, draft a new post, move a scheduled post to a different time, search your media library for an image you already uploaded, ask for a suggested posting time, publish a post immediately, or delete one. It can also pull performance figures for posts already delivered, and search Postify's own documentation when you need to know how something works.\n\nAccess runs through OAuth 2.1 with PKCE, and issued tokens are bound to the Postify MCP endpoint. You choose scopes on the consent screen, and a tool whose scope you did not grant is never registered for the session, so the assistant cannot see it. Connected apps are listed in Settings and can be revoked there, and every tool call is written to an audit log you can read in the app.\n\nThe two irreversible actions \u2014 publishing and deleting \u2014 are deliberately gated twice. First, an organization setting controls whether an AI assistant may perform them at all, and that setting can only be turned on by a person inside Postify; no AI credential carries the scope needed to enable it. Second, with the setting on, the first call returns a confirmation request with a short-lived token bound to the exact arguments, which must be echoed back on a second call before anything is published or deleted. Expect that first response \u2014 it is the safety step working, not an error.",
"interface": {
"capabilities": [],
"category": "Business & Operations",
"defaultPrompt": [
"What social posts are scheduled for next week?",
"Draft a LinkedIn post about our 2.0 release.",
"How did last month's posts perform, and when should I post next?"
],
"developerName": "14930398 Canada Inc.",
"displayName": "Postify",
"longDescription": "Postify is a social media scheduling tool for teams: one calendar for the accounts you publish to, with drafts, scheduling, and delivery analytics in one place. The Postify plugin lets ChatGPT work that calendar with you: list posts and open a specific one, see which channels are connected, draft a new post, move a scheduled post to a different time, search your media library for an image you already uploaded, ask for a suggested posting time, publish a post immediately, or delete one. It can also pull performance figures for posts already delivered, and search Postify's own documentation when you need to know how something works.\n\nAccess runs through OAuth 2.1 with PKCE, and issued tokens are bound to the Postify MCP endpoint. You choose scopes on the consent screen, and a tool whose scope you did not grant is never registered for the session, so the assistant cannot see it. Connected apps are listed in Settings and can be revoked there, and every tool call is written to an audit log you can read in the app.\n\nThe two irreversible actions \u2014 publishing and deleting \u2014 are deliberately gated twice. First, an organization setting controls whether an AI assistant may perform them at all, and that setting can only be turned on by a person inside Postify; no AI credential carries the scope needed to enable it. Second, with the setting on, the first call returns a confirmation request with a short-lived token bound to the exact arguments, which must be echoed back on a second call before anything is published or deleted. Expect that first response \u2014 it is the safety step working, not an error.",
"privacyPolicyURL": "https://usepostify.com/privacy",
"shortDescription": "Draft and schedule posts",
"supportURL": "https://app.usepostify.com/support",
"termsOfServiceURL": "https://usepostify.com/terms",
"websiteURL": "https://usepostify.com",
"logo": "./assets/logo.png",
"logoDark": "./assets/logo-dark.png",
"composerIcon": "./assets/icon.png",
"composerIconDark": "./assets/icon-dark.png"
},
"name": "app-6a7ae2565a148191802be85a9bf06ab2",
"version": "1.0.1",
"mcpServers": "./.mcp.json",
"extensions": {
"com.openai": {
"review": {
"test_cases": {
"positive": [
{
"description": "List the scheduled queue",
"prompt": "List my scheduled posts in Postify.",
"tools_triggered": "list_posts",
"expected_behavior": "The 6 scheduled posts on the Harborline Supply Co. workspace, each with its post id, status of scheduled, scheduled datetime, a body excerpt, and the channels it targets. The account holds 23 posts overall (12 published, 6 scheduled, 4 draft, 1 failed), so the list is never empty."
},
{
"description": "Open one post in full",
"prompt": "Open the first scheduled post you just listed and show me its per-channel variants and its schedule.",
"tools_triggered": "get_post",
"expected_behavior": "That single post with its per-channel text variants, its schedule, and its recurrence setting. The response is re-parsed through a narrow contract, so it carries the post's own fields and no database internals."
},
{
"description": "Save a draft, publish nothing",
"prompt": "Draft a post for LinkedIn that says: Team offsite recap - three things we learned.",
"tools_triggered": "list_channels, create_draft",
"expected_behavior": "list_channels returns the 6 connected channels (X, LinkedIn, Instagram, Facebook, Threads, Pinterest) with handles, follower counts and health; Pinterest is deliberately in a reauth_required state and that is seeded, not broken. create_draft then returns the new post id with status draft. Nothing is scheduled and nothing is published - create_draft is structurally incapable of publishing."
},
{
"description": "Reschedule a queued post",
"prompt": "Move that scheduled post you opened to next Tuesday at 09:00.",
"tools_triggered": "reschedule_post, get_post",
"expected_behavior": "The post's updated scheduled datetime echoed back, with its content unchanged. Re-running get_post on the same id shows the new time. Optionally ask for a suggested slot first: suggest_optimal_time returns up to three ranked times per platform computed deterministically from this workspace's own publish history, with basis set to account_data and no model call involved."
},
{
"description": "Two-step publish with confirmation",
"prompt": "Publish the draft you just created now.",
"tools_triggered": "publish_now (called twice)",
"expected_behavior": "The first call is deliberately NOT executed: it returns an error-flagged result carrying the code CONFIRMATION_REQUIRED, a preview of exactly what would go live, and a short-lived confirmToken valid for about ten minutes. That first error flag is the safety gate working, not a failure. Reply with a confirmation such as Yes, confirm and publish it, and the assistant re-sends publish_now with the same arguments plus the token; the post is then queued for immediate publishing on the sandbox channels. No request leaves the server toward any real social platform."
}
],
"negative": [
{
"description": "Image generation for a post",
"prompt": "Generate an image of a hiking backpack on a mountain trail for my next Instagram post.",
"expected_behavior": ""
},
{
"description": "Replying to social engagement",
"prompt": "Reply to the comments and DMs on my latest Instagram post.",
"expected_behavior": ""
},
{
"description": "Billing and plan changes",
"prompt": "Upgrade my Postify subscription and show me this month's invoice.",
"expected_behavior": ""
}
]
},
"demo_recording_url": "https://drive.google.com/file/d/1avJgbDBWHCRI2uQnbboC0EipeCX5INkS/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: db68be30a8a947a5501742b9aacbd0fb660f3df8a120f316a19af5827a5a34fe