posterly-mcp-server 0.43.5 → 0.43.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -122,7 +122,7 @@ Add the same server definition to your Cursor MCP settings:
122
122
 
123
123
  ## Available tools
124
124
 
125
- `posterly-mcp-server@0.43.5` exposes 90 tools.
125
+ `posterly-mcp-server@0.43.6` exposes 90 tools.
126
126
 
127
127
  Public setup tools work before `POSTERLY_API_KEY` exists:
128
128
 
package/SUBMISSIONS.md CHANGED
@@ -34,7 +34,12 @@ person who applies the production migration and files the directory forms.
34
34
 
35
35
  ## Anthropic Connectors Directory
36
36
 
37
- Submit the remote MCP server at https://clau.de/mcp-directory-submission.
37
+ This is the remote MCP connector listing (Claude.ai / Claude desktop
38
+ connectors). It is distinct from the Claude Code plugin already pending review.
39
+
40
+ Submit the remote MCP server at
41
+ https://claude.ai/admin-settings/directory/submissions/new or
42
+ https://clau.de/mcp-directory-submission.
38
43
 
39
44
  Fallback contact: mcp-review@anthropic.com.
40
45
 
@@ -55,6 +60,30 @@ Optional after deploy: bump and publish `posterly-mcp-server` if you want the
55
60
  stdio README changes on npm. Hosted `/api/mcp` picks up this repo deploy
56
61
  without an npm publish.
57
62
 
63
+ ## ChatGPT / OpenAI Plugins Directory
64
+
65
+ This is a different form from the Claude plugin directory (already submitted)
66
+ and from the Anthropic Connectors Directory above. File it after the OAuth DCR
67
+ deploy is live. An agent cannot submit the form: Alex must complete OpenAI org
68
+ verification / Apps Management write access.
69
+
70
+ Portal: https://platform.openai.com/plugins
71
+
72
+ Use:
73
+
74
+ - MCP URL: `https://www.poster.ly/api/mcp`
75
+ - Auth: OAuth 2.1 + PKCE + DCR at `POST /api/oauth/register` (now live on prod)
76
+ - Domain verification: set `OPENAI_APPS_CHALLENGE_TOKEN` in Vercel to the
77
+ portal token, deploy, then Scan Tools. OpenAI fetches
78
+ `https://www.poster.ly/.well-known/openai-apps-challenge` and expects the
79
+ exact token as `text/plain` (no JSON).
80
+ - Homepage: `https://www.poster.ly/agents`
81
+ - Privacy: `https://www.poster.ly/privacy`
82
+ - Terms: `https://www.poster.ly/terms`
83
+ - Support: `https://www.poster.ly/dashboard/support` (or `/agents`)
84
+
85
+ Do not claim the plugin is listed until OpenAI publishes it.
86
+
58
87
  ## Other hosted hosts
59
88
 
60
89
  ChatGPT-style hosts follow the same DCR + authorize + token flow. HTTPS
@@ -62,9 +91,7 @@ callbacks such as `https://chatgpt.com/oauth/callback` are already accepted by
62
91
  the redirect URI validator. Extra browser origins can be added with
63
92
  `MCP_TRUSTED_ORIGINS` (comma-separated hostnames or full URLs).
64
93
 
65
- The ChatGPT plugin / app directory is a separate OpenAI form. File it after
66
- this OAuth DCR deploy is live; it is not covered by the Anthropic connector
67
- submission.
94
+ The ChatGPT plugin / app directory form is covered in the section above.
68
95
 
69
96
  ## Registry metadata
70
97
 
@@ -1 +1 @@
1
- export declare const POSTERLY_MCP_VERSION = "0.43.5";
1
+ export declare const POSTERLY_MCP_VERSION = "0.43.6";
@@ -5,4 +5,4 @@
5
5
  // tool set (minus the intentional pre-auth signup tools that only this stdio
6
6
  // package exposes). `npm run check:mcp-parity` enforces both the version match
7
7
  // and the tool-list match, and runs in the pre-commit hook.
8
- export const POSTERLY_MCP_VERSION = '0.43.5';
8
+ export const POSTERLY_MCP_VERSION = '0.43.6';
@@ -23,11 +23,11 @@ function formatCanceled(result) {
23
23
  }
24
24
  export const cancelSubscriptionTool = {
25
25
  name: 'cancel_subscription',
26
- description: "Cancel the authenticated user's posterly subscription. DESTRUCTIVE billing action; requires the billing:write scope. ALWAYS ask the user why they are cancelling FIRST and pass their answer as `reason` (one of the allowed values). By default the subscription is set to cancel at the end of the current period; pass immediate=true only if the user explicitly wants it cancelled right now. Only call after the user explicitly confirms.",
26
+ description: "Cancel the authenticated user's posterly subscription. DESTRUCTIVE billing action; requires the billing:write scope. ALWAYS ask the user why they are cancelling FIRST and pass their answer as `reason` (one of the allowed values). By default an active or trialing plan is set to cancel at the end of the current period. A past_due or unpaid plan always ends now, even when immediate is false: the unpaid renewal is dropped and payment retries stop. Pass immediate=true only when the user explicitly wants an active plan cancelled right now. Only call after the user explicitly confirms.",
27
27
  inputSchema: z.object({
28
28
  reason: z.enum(CANCELLATION_REASONS).describe('Why the user is cancelling. Ask the user before calling; do not guess.'),
29
29
  feedback: z.string().max(2000).optional().describe('Optional free-text detail the user gave about why they are cancelling.'),
30
- immediate: z.boolean().optional().describe('Cancel immediately instead of at period end. Defaults to false (cancel at period end).'),
30
+ immediate: z.boolean().optional().describe('Cancel immediately instead of at period end. Defaults to false. Ignored for past_due and unpaid plans, which always end now.'),
31
31
  confirm: z.literal(true).describe('Must be true after the user explicitly confirms the cancellation.'),
32
32
  }),
33
33
  async execute(client, input) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "posterly-mcp-server",
3
- "version": "0.43.5",
3
+ "version": "0.43.6",
4
4
  "mcpName": "io.github.awpthorp/posterly",
5
5
  "description": "MCP server for posterly: schedule and publish social media posts across 18 platforms from any MCP client (Claude, ChatGPT, Cursor, Windsurf, Cline, and more)",
6
6
  "license": "MIT",
package/server.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "name": "io.github.awpthorp/posterly",
4
4
  "title": "posterly",
5
5
  "description": "Validate, schedule, publish, and analyze social content across 18 platforms with posterly.",
6
- "version": "0.43.5",
6
+ "version": "0.43.6",
7
7
  "websiteUrl": "https://www.poster.ly/mcp",
8
8
  "repository": {
9
9
  "url": "https://github.com/awpthorp/posterly",
@@ -14,7 +14,7 @@
14
14
  {
15
15
  "registryType": "npm",
16
16
  "identifier": "posterly-mcp-server",
17
- "version": "0.43.5",
17
+ "version": "0.43.6",
18
18
  "transport": {
19
19
  "type": "stdio"
20
20
  },
@@ -5,4 +5,4 @@
5
5
  // tool set (minus the intentional pre-auth signup tools that only this stdio
6
6
  // package exposes). `npm run check:mcp-parity` enforces both the version match
7
7
  // and the tool-list match, and runs in the pre-commit hook.
8
- export const POSTERLY_MCP_VERSION = '0.43.5';
8
+ export const POSTERLY_MCP_VERSION = '0.43.6';
@@ -28,11 +28,11 @@ function formatCanceled(result: CancelSubscriptionResponse): string {
28
28
  export const cancelSubscriptionTool = {
29
29
  name: 'cancel_subscription',
30
30
  description:
31
- "Cancel the authenticated user's posterly subscription. DESTRUCTIVE billing action; requires the billing:write scope. ALWAYS ask the user why they are cancelling FIRST and pass their answer as `reason` (one of the allowed values). By default the subscription is set to cancel at the end of the current period; pass immediate=true only if the user explicitly wants it cancelled right now. Only call after the user explicitly confirms.",
31
+ "Cancel the authenticated user's posterly subscription. DESTRUCTIVE billing action; requires the billing:write scope. ALWAYS ask the user why they are cancelling FIRST and pass their answer as `reason` (one of the allowed values). By default an active or trialing plan is set to cancel at the end of the current period. A past_due or unpaid plan always ends now, even when immediate is false: the unpaid renewal is dropped and payment retries stop. Pass immediate=true only when the user explicitly wants an active plan cancelled right now. Only call after the user explicitly confirms.",
32
32
  inputSchema: z.object({
33
33
  reason: z.enum(CANCELLATION_REASONS).describe('Why the user is cancelling. Ask the user before calling; do not guess.'),
34
34
  feedback: z.string().max(2000).optional().describe('Optional free-text detail the user gave about why they are cancelling.'),
35
- immediate: z.boolean().optional().describe('Cancel immediately instead of at period end. Defaults to false (cancel at period end).'),
35
+ immediate: z.boolean().optional().describe('Cancel immediately instead of at period end. Defaults to false. Ignored for past_due and unpaid plans, which always end now.'),
36
36
  confirm: z.literal(true).describe('Must be true after the user explicitly confirms the cancellation.'),
37
37
  }),
38
38