{
  "markdown": "# 1Social MCP\n\n**Model Context Protocol server for publishing to social networks — secured by OAuth.**\n\n1Social MCP lets an AI assistant post for you. Connect Claude, ChatGPT, Cursor, VS Code, or a CLI client to 1Social, then publish, schedule, check and fix posts across Instagram, TikTok, X, LinkedIn, Bluesky, Threads and Facebook in natural language.\n\n- **Server URL:** `https://mcp.1social.dev/mcp`\n- **Transport:** Streamable HTTP\n- **Auth:** OAuth 2.1 with PKCE and Dynamic Client Registration\n- **Landing & setup:** [1social.dev/mcp](https://1social.dev/mcp)\n\n## Install\n\n1Social MCP is a **remote, OAuth-secured** server. There is no package to install and no API key to paste. Add this to your client's MCP config:\n\n```json\n{\n  \"mcpServers\": {\n    \"1social\": {\n      \"url\": \"https://mcp.1social.dev/mcp\"\n    }\n  }\n}\n```\n\n**One-click install:** [Cursor](https://cursor.com/en/install-mcp?name=1social&config=eyJuYW1lIjoiMXNvY2lhbCIsInR5cGUiOiJodHRwIiwidXJsIjoiaHR0cHM6Ly9tY3AuMXNvY2lhbC5kZXYvbWNwIn0=) · [VS Code](https://insiders.vscode.dev/redirect/mcp/install?name=1social&config=%7B%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.1social.dev%2Fmcp%22%7D) · [Claude connectors](https://claude.ai/settings/connectors) · [ChatGPT connectors](https://chatgpt.com/settings/connectors)\n\nCLI clients (Claude Code, Gemini CLI, Codex CLI) and manual snippets: see [Supported clients](#supported-clients).\n\n## Quick start\n\n1. Create a 1Social account at [1social.dev](https://1social.dev).\n2. **Connect your social accounts in the browser.** This step needs a browser and cannot be done from a chat — each network's OAuth consent screen has to be signed for by you.\n3. Add the server to your client with the one-click link, the CLI command, or the JSON/TOML snippet above.\n4. Authorize with OAuth when your client opens the consent screen.\n5. Ask your assistant to post.\n\n## What you can do from chat\n\n- **📤 Publish and schedule** — one message goes to every network you pick, now or up to 30 days ahead.\n- **🔍 Check before it goes** — per-network character counts, whether an image is required, whether a multi-part post will thread natively or be joined, and what it costs against your quota.\n- **🧾 Read the receipt** — what reached each network, what failed and why, and what genuinely could not be determined.\n- **♻️ Fix what broke** — retry one network without touching the ones that already went out.\n- **🖼 Attach media** — post an image or video from the chat. Instagram and TikTok refuse posts without one.\n- **✏️ Edit, cancel, delete** — change a scheduled post, unschedule it, or delete it from the networks that allow deletion.\n\n## Tool surface\n\nTen tools, deliberately few. Publish-now and schedule are the same tool (`scheduledAt: null` means now), and reading one post is `list_posts` with a `postId` rather than a second tool — a smaller set is one a model picks from accurately.\n\n| Tool | What it does |\n|---|---|\n| `list_accounts` | Connected accounts, what each network accepts, current plan, remaining quota. Call it first — channel ids come from here. |\n| `preview_post` | Free dry run: per-network limits, media requirements, threading behaviour, quota cost. Nothing is published. |\n| `publish_post` | Publishes now, or schedules up to 30 days ahead. Returns a per-network receipt. Takes an `idempotencyKey`. |\n| `list_posts` | Posts with their delivery outcome per network — delivered, failed with a reason, cancelled, or `unknown` — plus stored engagement metrics. |\n| `update_post` | Edits a post that has not been sent yet. The networks have no edit endpoint, so it withdraws and replaces. |\n| `cancel_post` | Unschedules a post and releases the quota it reserved. |\n| `delete_post` | Deletes from 1Social and attempts removal from each network. See [What deletion can and cannot do](#what-deletion-can-and-cannot-do). |\n| `retry_delivery` | Retries one failed network, leaving the successful ones alone. Refused for permanent failures. |\n| `upload_media` | Pre-signed upload target, for clients that cannot attach a file to a tool call. |\n| `confirm_delivery` | Records **your** answer about a delivery whose outcome was unknown: is the post live on that network or not? |\n\nThe live set is what the server says it is — run `tools/list` against `https://mcp.1social.dev/mcp` for the exact, current shapes.\n\n## It tells you when it doesn't know\n\nA post to four networks can land on three. Every tool result is per network: the failure is named in words you can act on, and a delivery whose outcome genuinely could not be determined comes back as `unknown` rather than as success.\n\n`unknown` is not a dead end. You look at the network, tell the assistant what you see, and `confirm_delivery` settles it — confirming it is live commits the quota, confirming it is not marks the delivery failed so `retry_delivery` can pick it up. The assistant is not allowed to guess this on your behalf.\n\n## What deletion can and cannot do\n\n`delete_post` always removes the post from 1Social. Removal *from the network* depends on the network:\n\n| Network | Remote delete |\n|---|---|\n| X, LinkedIn, Bluesky, Facebook | ✅ works |\n| Instagram, TikTok, Threads | ❌ no working delete API — the post **stays live** and only you can take it down |\n\nOn a multi-part thread only the first post is removed; the rest stay live as orphans. The tool reports what actually came down, per network, and the assistant is instructed to tell you that rather than confirm a clean delete.\n\n## Plans & access\n\nPublishing costs us money per delivery, so the quota is metered in **deliveries, not posts** — one post to four networks is four deliveries. A delivery to X costs more units than the others because X charges per post ([pricing](https://1social.dev/pricing) has the current numbers).\n\n| | No subscription | Solo | Pro |\n|---|---|---|---|\n| **Price** | $0 | $19/mo | $39/mo |\n| **Monthly deliveries** | 30 units | 600 units | 1,600 units |\n| All seven networks | ✅ | ✅ | ✅ |\n| Delivery receipts & retries | ✅ | ✅ | ✅ |\n\nA new account has a small free monthly allowance — enough to publish, watch the receipt come back, retry something, and schedule a post — so the tools work before you pay for anything. A failed delivery does not count against the quota when the failure was ours or the network's.\n\n**You never have to leave the chat to pay.** A tool call that runs out of quota comes back with a checkout link for your account.\n\n## Supported clients\n\n- **Claude** (web & desktop) — Settings → Connectors → Add custom connector\n- **ChatGPT** — Settings → Apps & Connectors → Advanced → Developer mode → Add custom connector\n- **Cursor** — one-click deeplink, or `~/.cursor/mcp.json`\n- **VS Code** — one-click deeplink, or `.vscode/mcp.json`\n- **Claude Code (CLI)** — `claude mcp add --transport http 1social https://mcp.1social.dev/mcp`\n- **Gemini CLI** — `gemini mcp add --transport http 1social https://mcp.1social.dev/mcp`\n- **Codex CLI** — `codex mcp add 1social --url https://mcp.1social.dev/mcp`\n- **Generic HTTP MCP client** — point it at the URL and let it complete OAuth discovery\n\nFull per-client instructions: [docs/setup.md](docs/setup.md).\n\n## Cursor plugin\n\nThis repository is also a Cursor plugin. It contributes one MCP server (`1social`) and no rules, skills, agents, or hooks.\n\n```\n.cursor-plugin/plugin.json   ← plugin manifest\nmcp.json                     ← the MCP server it contributes\nassets/logo.svg              ← plugin logo\n```\n\nThere is nothing to configure. The server advertises OAuth 2.1 metadata, Cursor registers itself dynamically, and the consent screen opens on first use.\n\n## Example prompts\n\n**Cross-post with a check first**\n> \"Draft a post about our new pricing page for LinkedIn, X and Bluesky, check it fits, then publish.\"\n\n→ `preview_post` reports the per-network counts and cost; `publish_post` returns a receipt per network.\n\n**Schedule with an image**\n> \"Post this screenshot to Instagram and Threads on Friday at 9am.\"\n\n→ The attached file goes in `media`; Instagram would have refused the post without it.\n\n**Find out what actually happened**\n> \"Did yesterday's post make it everywhere?\"\n\n→ `list_posts` returns the receipt — including any delivery still marked `unknown`.\n\n**Repair, not repost**\n> \"LinkedIn failed. Retry just LinkedIn.\"\n\n→ `retry_delivery` touches one delivery and leaves the successful networks alone.\n\nMore: [docs/examples.md](docs/examples.md).\n\n## Authorization\n\nOAuth 2.1 with PKCE, per the MCP authorization spec. The authorization server is `https://1social.dev`; it supports Dynamic Client Registration, so compatible clients set themselves up and you only see the consent screen. Scopes granted are `openid`, `profile`, `email` and `offline_access`.\n\n**The assistant never sees your social credentials.** Your network tokens stay in 1Social; the assistant holds only a token for your 1Social account, and you can revoke it at any time from the web app.\n\nFlow details: [docs/oauth.md](docs/oauth.md).\n\n## Troubleshooting\n\nCommon connection, OAuth, and tool-call errors: [docs/troubleshooting.md](docs/troubleshooting.md).\n\n## Marketplace listings\n\nThis repo is the source for two listings:\n\n| Registry | Record | Manifest |\n|---|---|---|\n| [MCP Registry](https://registry.modelcontextprotocol.io) | `dev.1social/1social` | `server.json` — published by CI on a `v*` tag, authenticated by a DNS TXT record on `1social.dev` |\n| [LobeHub](https://lobehub.com/mcp/sultanlive-1social-mcp) | `sultanlive-1social-mcp` | `lhm.plugin.json` — published with `npx -y @lobehub/market-cli plugin publish --dir .` |\n\nThe `tools` array in `lhm.plugin.json` is **generated** from the `TOOLS` table in the server's own contract (`packages/contract/src/mcp/tools.ts` in the private repo), the same table that answers `tools/list`. It is a snapshot: when the tool surface changes, regenerate it rather than hand-editing, or the listing will describe a server that no longer exists.\n\nNote that the two registries carry different version numbers on purpose — `server.json` is at `0.1.0`, while LobeHub assigned `1.0.0` at import time and a version cannot be renamed.\n\n## Project links\n\n- Product: [1social.dev](https://1social.dev)\n- MCP page: [1social.dev/mcp](https://1social.dev/mcp)\n- MCP server: `https://mcp.1social.dev/mcp`\n- OAuth issuer: `https://1social.dev`\n- Issues: [github.com/sultanlive/1social-mcp/issues](https://github.com/sultanlive/1social-mcp/issues)\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n\n---\n\nBuilt by [@sultanlive](https://github.com/sultanlive). 1Social is a hosted publishing service; this repo is documentation for its public MCP server. Server source is not open.\n",
  "bytes": 10664,
  "sha": "753fe5054758851096fa0687b23f959f83618e4421a3429f3bb49ab0954c6208",
  "repo_slug": "sultanlive/1social-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_dev_1social_1social_6bc278e7/readme"
}