Connect a client
Two routes, depending on the client.
Claude.ai and ChatGPT add the server as a connector: you paste a URL, approve it on a Postlyra screen, and that is it. Everything else (Claude Code, the CLI, your own scripts) uses an API token. Create one under your profile, then API tokens. See Authentication.
Claude.ai
Settings, then Connectors, then Add custom connector. Give it this URL:
https://mcp.postlyra.comA Postlyra tab opens. Log in if you are not already, check the access level and the list of brands it covers, and approve. The connector shows up with its tools loaded.
If the tools list is empty afterwards, remove the connector and add it again. A client caches the first tool list it sees, including a failed one.
ChatGPT
Same shape. Settings, then Connectors, then add https://mcp.postlyra.com as a custom MCP server, and approve on the Postlyra screen.
Any connector-capable client
The server publishes standard OAuth discovery, so a client that speaks it needs nothing but the URL. It registers itself, sends you to the approval screen, and manages its own tokens after that.
| Setting | Value |
|---|---|
| URL | https://mcp.postlyra.com |
| Transport | HTTP (streamable) |
| Auth | OAuth 2.1, authorization code with PKCE |
| Client registration | Dynamic, RFC 7591. Nothing to set up on your side |
Disconnecting
Profile, then API tokens, then Connected AI clients. Disconnect cuts the client off from every brand immediately. To use it again you approve it again from scratch.
Claude Code
claude mcp add --transport http postlyra https://mcp.postlyra.com \
--header "Authorization: Bearer YOUR_TOKEN"Check it connected:
claude mcp listThen, in a session:
> List my Postlyra brands.Claude calls list_brands and shows the brand ids. Keep the one you want, and mention it when a request could be ambiguous.
Any bearer-token client
The server speaks streamable HTTP MCP at the root of its host. Anything that can send an Authorization header works, and it does not have to touch OAuth at all.
| Setting | Value |
|---|---|
| URL | https://mcp.postlyra.com |
| Transport | HTTP (streamable) |
| Header | Authorization: Bearer YOUR_TOKEN |
Optionally send X-Postlyra-Brand: <brand-id> to pin every call from that client to one brand, so you never have to pass the brand argument.
Confirm it works
Ask the agent to call list_brands. A correct response looks like:
{
"brands": [
{ "brand_id": "0f8fad5b-d9cb-469f-a165-70867728950e", "name": "My Brand" }
]
}If that works, everything else will.
Troubleshooting
Every call fails with an auth error. The token is wrong or revoked. Create a new one and re-add the server. Note that the token has to be a Postlyra token, not an Anthropic key.
"This account has N brands." Pass the brand argument, or set the X-Postlyra-Brand header on the connection. See Brands.
A connector added, but shows no tools. The client cached an empty tool list from a failed first call. Remove the connector and add it again.
A connector shows only the read tools. You approved read-only access. Disconnect it under API tokens, then add it again and approve the level that includes adding ideas and posts.
approve_post or create_post's approve argument is refused. The connection only has standard access. Disconnect it under API tokens and add it again, approving the elevated level, which needs its own explicit consent.
The approval screen says your account has no brands. Create a brand in Postlyra first. A connection has to cover at least one.
A connector stopped working after a few months. Approvals expire. Add it again.