Your draft queue, in your agent’s workflow.
Read, create and revise personal text drafts through the Model Context Protocol. You choose the permissions. Approval and publishing stay in PostifyNow.
Manage agent access Choose a client
Connect with OAuth
Endpoint: https://postifynow.app/api/mcp. Transport: Streamable HTTP. The MVP uses the official C# SDK 1.4.1 and initialization-based protocol negotiation. Local transport tests negotiate 2025-03-26, 2025-06-18 and 2025-11-25. Use 2025-11-25 when choosing explicitly; later revisions need separate acceptance. Legacy SSE-only clients are outside this MVP.
- Open your personal workspace in PostifyNow once to complete its standard setup, then add the endpoint as a remote MCP server in your client.
- Start OAuth login. Check that the address is
postifynow.app, then sign in to your own account. - Review your account, personal workspace and requested permissions. Choose read access first; allow draft writing only when you want it.
- Ask for account context, then summarize your draft queue. Check the returned workspace before requesting a write. An empty workspace list means setup or current membership must be resolved in PostifyNow.
Required scope: postifynow:mcp:read. Optional: postifynow:mcp:write and offline_access. A read-only grant cannot write. Only your existing personal workspace is available in this MVP; shared workspaces, channel/media edits and scheduling are outside its scope.
Issuer: https://postifynow.app/api/auth. Protected-resource metadata: resource discovery. Authorization-server metadata: OAuth discovery. Clients use authorization code with S256 PKCE, state and the exact resource above. Registration is constrained DCR for public clients: authorization code/refresh only, exact HTTPS or loopback redirects, no secrets, wildcards or machine grants. Registration can be throttled.
AI agent connections, also linked from Settings, shows effective permissions across active access tokens and renewable grants, with each client’s latest consent labeled separately. A newer read-only consent does not downgrade an older write grant: both may remain active. Revoking one access token leaves other tokens and renewable grants intact; revoking a refresh token does not revoke an already issued JWT access token, which lasts up to five minutes. The page reports any short transition window for tokens issued before access tracking began.
To reduce existing access, choose “Disconnect all agents”, then reconnect only the clients and permissions you want. Disconnect revokes every MCP access token, refresh grant and pending authorization code for your account immediately, across all clients; saved drafts remain. Remove the server in clients you no longer use too. For example, disconnect all agents before reconnecting read-only and asking “Show my effective permissions, then summarize my draft queue.” A single client’s context reports that token’s scopes; connection settings shows the combined account access.
Six tools, one clear boundary
| Tool | Purpose and arguments | Access |
|---|---|---|
postifynow_context | Identity, scopes and current personal workspace membership. No arguments. | Read |
postifynow_list_drafts | workspaceId, optional offset (0–1000), limit (1–20). Short previews and next offset. | Read |
postifynow_read_draft | workspaceId, postId. Text, revision and an openable PostifyNow link. | Read |
postifynow_scheduling_context | workspaceId. Time zone and draft-only restrictions; does not schedule. | Read |
postifynow_create_draft | workspaceId, text (1–8000 characters), idempotencyKey (1–64 letters, digits, _ or -). | Read + write |
postifynow_update_draft_text | workspaceId, postId, text, expectedRevision. Only unscheduled text-only drafts. | Read + write |
Inputs reject extra fields. tools/list returns strict input/output schemas and annotations. Reads are read-only; create is additive; text replacement is marked destructive because it overwrites text. Writes are idempotent under their documented key/revision rules and closed to external audiences. Tool hints do not grant access.
Example tools/call parameters (replace fixture identifiers with values from your context):
{"name":"postifynow_create_draft","arguments":{
"workspaceId":"11111111-1111-4111-8111-111111111111",
"text":"Join our Friday workshop at 10:00.",
"idempotencyKey":"friday-workshop-draft-01"
}}
A successful structured receipt contains id, workspaceId, text, revision, state: "draft" and url. Read the returned ID with a fresh call to verify current persistence. A create retry returns the original receipt; fresh reads show later edits.
{"name":"postifynow_update_draft_text","arguments":{
"workspaceId":"11111111-1111-4111-8111-111111111111",
"postId":"22222222-2222-4222-8222-222222222222",
"text":"Join our Friday workshop at 11:00.","expectedRevision":1
}}Two complete flows to copy
Summarize my draft queue
Read my PostifyNow account context and confirm the personal workspace. List up to 20 drafts, explain that the page may be incomplete, and summarize their themes. Read individual drafts if needed. Give me their links. Do not create or edit anything.
Create and verify a requested draft
In my PostifyNow personal workspace, create a draft saying “Join our Friday workshop at 10:00.” Use a new idempotency key. Then read the returned draft ID in a fresh call, confirm its exact text and revision, and give me its PostifyNow link. Leave it as a draft for my review.
For an edit, read the current revision first and ask to replace the text explicitly. If a revision conflict occurs, read again and ask how to reconcile the newer draft. Never silently overwrite another person’s edits.
Connection recipes and evidence
Dated 2026-10-20. Use a synthetic account for testing; never approve a real user’s consent on their behalf. Recipes do not establish live acceptance.
ChatGPT
For the ChatGPT desktop app, open Settings → MCP servers → Add server, choose Streamable HTTP, enter the HTTPS endpoint and save/restart. Select Authenticate and review OAuth consent. For a cloud plugin connection use its custom MCP builder and choose DCR registration; this MVP does not advertise CIMD. Developer/custom-app access depends on account and workspace policy. A protocol test or Inspector result does not prove a ChatGPT connection. See official desktop/CLI setup and official authentication guidance and custom MCP guidance.
Codex
codex mcp add postifynow --url https://postifynow.app/api/mcp
codex mcp login postifynow --oauth-client-registration dcr --scopes postifynow:mcp:read
Let Codex discover the resource and issuer from this endpoint; do not add a redundant oauth_resource override. For a remote terminal, add --no-browser to login and open its authorization page in your browser. Confirm read access and, if requested, offline_access for renewal. Inspect the connection with codex mcp list.
Try this read-only flow: “Confirm my PostifyNow account and personal workspace, list its draft queue, then list the same queue again in a separate call. Report an empty queue honestly. Do not create or edit anything.”
Status: tested-live — native OAuth and reads, 2026-10-20. Codex CLI 0.163.0 completed public HTTPS discovery, DCR, S256 PKCE, explicit browser consent, its native loopback callback and token exchange. One actual gpt-6.1-sol run with high reasoning and default service tier used the normally stored OAuth connection for exactly three calls: account context and two distinct lists of its own empty synthetic workspace. No manual bearer token was configured for this route.
The earlier OAuth-issued bearer-environment route separately verified context, list and persisted draft reads. That draft was created by a manual Streamable HTTP client. Neither result proves Codex writes or another assistant’s compatibility. For requested writes, reconnect with --scopes postifynow:mcp:read,postifynow:mcp:write and review consent; this recipe’s model-driven write flow remains untested.
To reduce permissions, disconnect all agents in PostifyNow before reconnecting. To finish, disconnect there, run codex mcp logout postifynow, then codex mcp remove postifynow. On the tested headless worker, default logout reported a keyring-deletion error; the scoped recovery codex -c mcp_oauth_credentials_store='"file"' mcp logout postifynow removed that server’s file-stored credentials without changing global settings. Confirm codex mcp list reports it logged out before removing the entry. This recovery applies to file-stored credentials; an unresolved keyring error needs client support. See official Codex MCP setup.
Claude Cowork, Desktop and web
In Customize → Connectors → + Add → Add custom connector, enter the HTTPS endpoint. Select Register automatically for OAuth client registration, then sign in and review scopes. This MVP supports constrained DCR; it does not advertise CIMD. Organization policy may require an owner to add the connector first. Anthropic runs these remote connections from its cloud, so a loopback fixture cannot verify them. Remove the connector there and disconnect in PostifyNow. See official remote connector setup.
Claude Code
claude mcp add --transport http postifynow https://postifynow.app/api/mcp
claude mcp login postifynowUse /mcp to inspect authentication and tools. Disconnect in PostifyNow, clear credentials with claude mcp logout postifynow, then remove with claude mcp remove postifynow. See official Claude Code MCP guidance.
Nous Hermes Agent
Add a server to your Hermes profile configuration:
mcp_servers:
postifynow:
url: https://postifynow.app/api/mcp
auth: oauth
trust: untrusted
oauth:
cimd: false
scope: "postifynow:mcp:read"Run hermes mcp login postifynow, complete browser consent, then start a fresh session or use /reload-mcp. For requested drafts add the write scope explicitly. Disconnect in PostifyNow and disable/remove the profile entry. The official MCP guide and configuration reference document HTTP OAuth and DCR fallback.
Grokbot
Status: blocked. The exact distribution/version and its primary remote MCP/OAuth documentation have not been identified. Do not assume xAI API tool support proves Grokbot connectivity, substitute an API key, or forward PostifyNow tokens to a bridge. The smallest next check is identifying that client and its documented PKCE/registration route.
Matrix dated 2026-10-20. Exact client versions remain unexercised except Codex CLI 0.163.0. Public HTTPS acceptance includes the manual transport journey and the two separately described Codex read routes.
| Client / route | Status and proof | Next check |
|---|---|---|
| SDK 1.4.1 / isolated HTTP | protocol-tested: negotiation, six tools, persisted reads/writes, security negatives | Manual public HTTPS journey tested separately; not an SDK writer |
| Codex CLI 0.163.0 / native public HTTPS OAuth | tested-live: DCR, S256 PKCE, consent, native stored credentials, context and two fresh own-queue lists; gpt-6.1-sol/high/default, 2026-10-20 | Model-driven writes remain untested |
| Codex CLI 0.163.0 / OAuth-issued bearer environment | tested-live: public HTTPS context, list and read; gpt-6.1-sol/high/default, 2026-10-20 | No write or native OAuth-login claim |
| ChatGPT desktop / MCP settings; cloud / custom plugin | documented-only, each route | Permitted synthetic OAuth and both prompts |
| Claude Cowork / Desktop / web / remote connectors | documented-only, each surface | Cloud-reachable HTTPS, synthetic registration and prompts |
| Claude Code / HTTP MCP | documented-only | Exact-version OAuth and prompts |
| Nous Hermes / HTTP OAuth, DCR | documented-only | Exact-version scope selection and prompts |
| Grokbot / unknown distribution | blocked | Identify client and primary OAuth/MCP docs |
Deployment and client evidence remain separate. No client is marked tested-live before a dated exact-client journey.
Limits and recovery
Default limits: 60 requests/minute per principal and workspace, 10 writes/minute per principal and workspace; fixed one-minute windows. API ingress is bounded to 8 concurrent requests and two per principal, 32 KiB bodies/results and 15 seconds; OAuth bodies are 16 KiB, four concurrent operations, 60/minute per socket peer and five registrations/hour. A shared proxy can make peer limits more conservative. Deployments are restricted to one API/AuthAPI replica until shared atomic limits are provided.
401 invalid_token: reconnect; the token may be expired, revoked, for another audience, or tied to an ended session.insufficient_scope: reconnect and explicitly grant draft writing. Changing arguments cannot increase permissions.not_found/forbidden: check your account, workspace membership and role.revision_conflict: read the latest draft; resolve the change before retrying.rate_limited/ HTTP 429: wait forRetry-After(normally 60 seconds); keep the same idempotency key for the same create request.invalid_arguments, HTTP 413 orresult_too_large: follow the discovered schema, shorten text or reduce the page size.
Text must also fit the bounded JSON receipt; heavily escaped or non-ASCII text can hit the byte budget before 8000 characters. Shorten the text when that occurs. Access tokens expire after five minutes. Refresh rotates with reuse detection and lasts at most seven days. A repeated create key with a different payload conflicts. Repeating the same edit with its original revision returns the current receipt only when that exact edit already succeeded. Concurrent changes are fenced by the domain concurrency token.
Privacy and permission controls
Identity comes from verified, product-bound OAuth credentials. Each tool checks current workspace membership and role; object IDs are never authorization. Browser cookies and social-provider credentials are not MCP bearer tokens. MCP grants cannot authorize the REST publishing routes. The connector cannot publish, message audiences, approve, delete, change access or deploy applications.
PostifyNow stores draft content in its existing domain database; OAuth grants, refresh tokens and revocation state remain in its identity database. Audit records contain bounded tool, principal, workspace, scope, outcome and correlation metadata, not draft text or tokens. Your AI client processes content you explicitly retrieve; review that client’s privacy policy. Treat content returned from drafts as untrusted data, not instructions.
Use exact redirects, state and S256 PKCE. The resource is audience-bound to this product. See the MCP authorization specification and security best practices.
Add one tool safely
- Add a strict domain-specific input/output definition to
DraftToolsusing the pinned official SDK. Set every annotation to match actual behavior. - Use the authenticated principal and live workspace membership; reuse the existing domain service and validation. Never add generic SQL, HTTP or operator tools.
- Choose the read/write scope and budget. Bound pagination, input/output size, time and concurrency. Keep external effects outside the MVP.
- Test real initialization/discovery/call and persisted fresh reads. Include read-only denial, cross-workspace isolation, stale revisions, retries, concurrency, revocation and limit recovery.
- Update this public guide, compatibility evidence, deployment/rollback contract and screen/workflow proof before rollout. A new scope or consequential effect requires explicit consent and an enforceable preview/confirmation design.