diff --git a/README.md b/README.md
index 1514b28..649cd78 100644
--- a/README.md
+++ b/README.md
@@ -14,9 +14,13 @@ Official [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server
### Remote Server (Recommended)
-Publora hosts an MCP server at `mcp.publora.com` — no installation needed.
+Publora hosts an MCP server at `mcp.publora.com/mcp` — no installation needed.
-**1. Get your API key** at [publora.com](https://publora.com) → Settings → API
+**Using Claude?** Install it from the connectors directory: [claude.ai/directory/publora](https://claude.ai/directory/publora). Select **Connect**, sign in to Publora, approve. No API key, no config file — on web, desktop and mobile alike.
+
+**Every other client:**
+
+**1. Get your API key** at [app.publora.com/dashboard/api](https://app.publora.com/dashboard/api) (**API** in the dashboard sidebar)
**2. Add to your MCP client:**
@@ -25,15 +29,17 @@ Publora hosts an MCP server at `mcp.publora.com` — no installation needed.
"mcpServers": {
"publora": {
"type": "http",
- "url": "https://mcp.publora.com",
+ "url": "https://mcp.publora.com/mcp",
"headers": {
- "Authorization": "Bearer YOUR_API_KEY"
+ "Authorization": "Bearer sk_YOUR_API_KEY"
}
}
}
}
```
+Clients that support OAuth (Claude Code, Cursor, VS Code, Codex and others) can leave out `headers` and sign in through the browser instead.
+
**3. Restart your client** and start talking to your AI about social media!
---
@@ -43,31 +49,42 @@ Publora hosts an MCP server at `mcp.publora.com` — no installation needed.
Claude Code (CLI)
-Edit `~/.claude.json` or create `.mcp.json` in your project:
+```bash
+claude mcp add --transport http --scope user publora https://mcp.publora.com/mcp
+```
+
+Run `/mcp`, select **publora**, choose **Authenticate** and sign in to Publora in the browser. No API key needed.
+
+For CI or headless machines, send a static key instead:
+
+```bash
+claude mcp add --transport http --scope user publora https://mcp.publora.com/mcp \
+ --header "Authorization: Bearer sk_YOUR_API_KEY"
+```
+
+The same entry can go in `~/.claude.json` or a project `.mcp.json` (JSON above). Verify with the `/mcp` command.
+
+
+
+Claude Desktop
+
+Claude Desktop uses the same connectors as Claude on the web: open [claude.ai/directory/publora](https://claude.ai/directory/publora) and select **Connect**. There is no config file to edit.
+
+**Settings → Developer → Edit Config** is only needed to run this repository locally over stdio, after cloning it and running `npm install` (see **Local Development** for how its tools differ from the hosted server):
```json
{
"mcpServers": {
"publora": {
- "type": "http",
- "url": "https://mcp.publora.com",
- "headers": {
- "Authorization": "Bearer sk_YOUR_API_KEY"
+ "command": "node",
+ "args": ["/path/to/mcp-server/src/stdio.js"],
+ "env": {
+ "PUBLORA_API_KEY": "sk_YOUR_API_KEY"
}
}
}
}
```
-
-Restart Claude Code. Verify with `/mcp` command.
-
-
-
-Claude Desktop
-
-1. Open Claude Desktop → **Settings** → **Developer** → **Edit Config**
-2. Add the Publora server (same JSON as above)
-3. Restart Claude Desktop
@@ -80,7 +97,7 @@ Create `.cursor/mcp.json` in your project:
"mcpServers": {
"publora": {
"type": "http",
- "url": "https://mcp.publora.com",
+ "url": "https://mcp.publora.com/mcp",
"headers": {
"Authorization": "Bearer sk_YOUR_API_KEY"
}
@@ -103,45 +120,55 @@ PUBLORA_API_URL=https://api.publora.com npm start
```
Server runs on `http://localhost:3100`
+
+The code in this repository is an April 2026 snapshot of the server. Its tool set is older: it has LinkedIn analytics and workspace tools, and lacks `complete_media`, `delete_media`, `prune_media_reference`, `post_stats`, `profile_stats`, `linkedin_create_reshare` and `linkedin_list_mentionables`. Use the hosted server for the current tools.
---
## Available Tools (18)
+The hosted server at `mcp.publora.com/mcp` exposes:
+
### Posts
| Tool | Description |
|------|-------------|
| `list_posts` | List posts with filters (status, platform, dates) |
-| `create_post` | Schedule a post to one or more platforms |
+| `create_post` | Create a draft or schedule a post; accepts `mediaUrls` and `platformSettings` |
| `get_post` | Get post details and status |
-| `update_post` | Reschedule or change status |
+| `update_post` | Edit a draft or scheduled post: content, platforms, schedule, status |
| `delete_post` | Delete a post |
-| `get_upload_url` | Get presigned URL for media upload |
+
+### Media
+| Tool | Description |
+|------|-------------|
+| `get_upload_url` | Get a presigned URL for media upload |
+| `complete_media` | Finalize a file uploaded via `get_upload_url` |
+| `delete_media` | Remove a media slot from a post |
+| `prune_media_reference` | Remove a stale media reference that `delete_media` cannot handle |
### Connections
| Tool | Description |
|------|-------------|
| `list_connections` | List connected social accounts |
-### LinkedIn Analytics
+### Statistics (Mastodon and Bluesky, Pro or Premium plan)
+| Tool | Description |
+|------|-------------|
+| `post_stats` | Engagement counters for published posts |
+| `profile_stats` | Followers, following and post count of a connected account |
+
+### LinkedIn Engagement
| Tool | Description |
|------|-------------|
-| `linkedin_post_stats` | Post engagement metrics |
-| `linkedin_account_stats` | Account-level statistics |
-| `linkedin_followers` | Follower count and growth |
-| `linkedin_profile_summary` | Combined profile overview |
| `linkedin_create_reaction` | React to a post |
| `linkedin_delete_reaction` | Remove a reaction |
| `linkedin_create_comment` | Post a comment on a LinkedIn post |
| `linkedin_delete_comment` | Delete a comment |
+| `linkedin_create_reshare` | Repost/reshare a LinkedIn post |
+| `linkedin_list_mentionables` | List people you can @mention in a LinkedIn post |
-### Workspace (B2B)
-| Tool | Description |
-|------|-------------|
-| `list_workspace_users` | List team members |
-| `create_workspace_user` | Add a user |
-| `workspace_detach_user` | Remove a user |
+LinkedIn analytics and workspace management are available through the [REST API](https://docs.publora.com), not MCP. Full parameters: [MCP Tools Reference](https://docs.publora.com/mcp/tools-reference).
---
@@ -155,9 +182,9 @@ Server runs on `http://localhost:3100`
> You: Post "We're hiring!" to all my accounts
> AI: Published to Twitter, LinkedIn, and Bluesky.
-**Check analytics:**
-> You: How did my LinkedIn posts perform this week?
-> AI: 5 posts, 4,230 impressions, 89 reactions. Best: Monday's update (1,850 impressions).
+**Check engagement (Mastodon, Bluesky):**
+> You: How did my last Bluesky post do?
+> AI: 42 likes, 7 reposts and 3 replies so far.
**Content calendar:**
> You: What do I have scheduled for next week?
@@ -182,11 +209,13 @@ Twitter/X · LinkedIn · Instagram · Threads · TikTok · YouTube · Facebook
## Authentication
-Use your Publora API key via:
+Clients that support OAuth 2.1 (Claude, Claude Code, Cursor, VS Code, Codex and others) sign in through the browser — no key to copy.
+
+Everywhere else, use your Publora API key via:
- `Authorization: Bearer sk_...` (recommended)
- `x-publora-key: sk_...`
-Get your key: [publora.com](https://publora.com) → Settings → API
+Get your key: [app.publora.com/dashboard/api](https://app.publora.com/dashboard/api)
---
@@ -197,7 +226,7 @@ Get your key: [publora.com](https://publora.com) → Settings → API
curl https://mcp.publora.com/health
# Test MCP handshake
-curl -X POST https://mcp.publora.com \
+curl -X POST https://mcp.publora.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Authorization: Bearer sk_YOUR_API_KEY" \