# social Agentic founder-led distribution — outreach, posting, DMs, and audience insights from any MCP client or shell. Quickest start — hosted MCP server (recommended): - Server URL: https://mcp.usesocial.dev (stateless Streamable HTTP + OAuth; the URL is canonical and secret-free). - Claude Desktop: Settings → Connectors → Add custom connector, then paste https://mcp.usesocial.dev. - Codex Desktop: Settings → MCP servers → Add server, then paste https://mcp.usesocial.dev. - Coding agents and other MCP clients: `npx --yes add-mcp https://mcp.usesocial.dev --name social --global` (or `bunx add-mcp ...`). With the CLI installed, `social mcp install` prints the right command and `social mcp url` prints the URL. - Sign-in is passwordless OAuth (authorization code + S256 PKCE) via an email magic link. A new email creates its Social account when the magic link is redeemed — there is no separate signup. - Then send the agent the setup prompt: "Set up social: connect my LinkedIn & X accounts, then confirm you can read both profiles." - For a coding agent that should also do the install, use: "Install the social MCP server from https://mcp.usesocial.dev, then connect my LinkedIn & X accounts and confirm you can read both profiles." MCP scopes, targets, and writes: - The default grant includes read and write access (`social:read`, `social:write`, `linkedin:read`, `linkedin:write`, `x:read`, `x:write`). The OAuth consent screen lists the exact scopes before they are granted. - Write calls are real provider actions and execute immediately; the MCP client owns human confirmation. Confirm with your human before posting, messaging, inviting, following, or deleting. - Targets use `@username`, supported provider URLs, or typed identifiers such as `profile_id:`, `post_id:`, `list_id:`, `chat_id:`, `company_id:`, and `request_id:`. Bare IDs are not accepted. - Provider tools accept an optional `account` selector; without it Social uses your server-backed default for that platform. What you can do once connected: - Scale your presence: draft and ship posts, comments, reactions, and replies across both networks on a steady cadence. - Outreach & B2B pipeline: read the posts that matter, fan out to who reacted, send connection requests, and message the few worth reaching. - Triage DMs: list, read, send, and mark LinkedIn & X messages. - Audience & network reads: profiles, followers/following, connections, mentions, likers, reposters, X lists, and LinkedIn search across people, companies, jobs, and posts. - Run the account: connect/reconnect/disconnect accounts, set platform defaults, check billing, audit usage and logs, and submit feedback — all as MCP tools. - Tool names follow `x_*`, `linkedin_*`, `account_*`, `billing_*`, and `usage_*` patterns; list tools over MCP to discover the exact surface. CLI for power users (npm package @usesocial/cli, binary `social`): You are the operator; your human stays the principal. Use the installed public binary named `social`; do not rely on repo-local wrappers. The CLI adds a local SQLite mirror of your own data, free `sql` reads, and JSON output for every command, so you can wire posting, follow-ups, and replies into scripts on a schedule. Interactive-terminal install: - curl -fsSL https://usesocial.dev/install.sh | bash Agent-led CLI installation: The canonical prompt below installs the CLI and skill, drives non-TTY browser login, discovers the live connection choices, asks the human what to connect or whether to skip, drives selected connections sequentially, and verifies them. --- BEGIN CANONICAL AGENT INSTALL PROMPT --- You are authorized to install and configure social for me on macOS or Linux. Do the work yourself; never ask me to open a terminal, type commands, paste credentials or tokens, or reveal secrets. I will only complete browser approval pages when needed. First, ensure Node 24 LTS and npm are available. Reuse a compatible existing Node/npm installation when present. Bun is not a substitute for Node. If Node 24/npm are missing or incompatible, follow the current official Node instructions to make a user-owned Node installation. Never use sudo. If npm global installation fails because of a global-prefix permission error, switch to a user-owned Node installation instead of using sudo. Install or update the CLI with: npm install -g @usesocial/cli@latest Install the social skill with exactly: npx --yes skills add usesocial/skill --global --yes --agent claude-code codex Retry that command with --copy only if symlinking is unsupported. Verify Node, `social --version`, `~/.agents/skills/social/SKILL.md`, and `~/.claude/skills/social`. Tell me that a new Claude or Codex task may be needed before the newly installed skill is discovered. Then run `social account setup` from a bounded, non-TTY flow. Parse its structured result; do not rely on its exit code alone. For `pending_approval`, surface `verificationURL`, `userCode`, and `expiresAt`; for `pending_billing`, surface `checkoutURL`. After the user completes the browser step, poll `social account setup` roughly every five seconds. Continue only after `ready`. Restart an expired flow only a bounded number of times, and surface errors concisely. Never expose stored credentials. The checkout authorizes a reusable payment method; setup never selects or purchases a provider plan. After setup is ready, discover the live connection choices from the successful result's `nextCommands` and `social schema "account connect"`. Intersect them, then present only those live choices plus Skip. Do not invent choices, hardcode a platform catalog, or connect anything automatically. Ask me which one or more choices to connect, or whether to Skip. Run each selected connect command sequentially and exactly as returned. The first call omits `--account-id`; capture its returned `accountId`, then pass it as `--account-id ` on every retry for that account. Drive the connection from the same bounded, non-TTY tagged-state flow: connect purchases only the selected provider's plan or the applicable legacy seat and normally charges the reusable payment method directly; surface `paymentURL` and `requiredAction` only if `pending_billing` says the bank requires customer action. For `pending_approval`, surface `connectURL` and wait; then gently poll with the same `accountId`. For `connected`, record only safe account summary fields. Replaying a connected `accountId` is stable; omit `--account-id` only to start connecting another account. Surface billing, provider timeout, or other errors concisely. After a failed connection, continue to another selected choice only if I explicitly confirm. After each success, run bare `social account` and verify the selected choice has a connected row. Ask whether I want to connect another available choice or finish. End only when I Skip or every selected connection is verified. Account setup and connection are browser-approved flows: do not start a sync or any metered social action. --- END CANONICAL AGENT INSTALL PROMPT --- Read model: - `sync` pulls your own data into the local mirror. It is explicit, updates local state, and can spend usage. - `sql` queries the local mirror. It is read-only, free, and returns the standard envelope with no `meta.cost` and freshness in `meta.cache.tables`. - Named read commands call the live network and cost usage. `x tweets ` and `linkedin posts ` require a target. `x followers [target]`, `x following [target]`, and `linkedin connections [target]` still allow omitting the target for your own account, but free own-data reads go through `sql`. - Writes act on the connected account. Command surface (✎ = write; mutates a connected account, needs read,write scope). Freeform body text is pipe-only — pipe text or a JSON object via stdin, e.g. `echo "..." | social x post`: - X content: `echo "..." | social x post` ✎ · `repost ` ✎ · `like ` ✎ · `tweet ` · `tweets ` - X discovery: `bookmark ` ✎ - X people: `social x profile [target]` · `followers [target]` · `following [target]` · `follow ` ✎ - X mirror: `social x sync tweets` · `social x sql "SELECT * FROM x_tweets LIMIT 20"` - X DMs: `echo "..." | social x message ` ✎ - LinkedIn content: `echo "..." | social linkedin post` ✎ · `echo "..." | social linkedin comment ` ✎ · `react [type]` ✎ · `posts ` · `comments ` · `reactions ` - LinkedIn people: `social linkedin profile [target]` · `connections [target]` · `requests send ` ✎ (optional note via stdin) · `requests accept request_id:` ✎ · `requests cancel request_id:` ✎ - LinkedIn mirror: `social linkedin sync [collection]` · `social linkedin sql "SELECT * FROM li_messages LIMIT 20"` - LinkedIn DMs: `echo "..." | social linkedin message ` ✎ · `messages mark read|unread` ✎ - LinkedIn companies: `social linkedin company ` · `jobs ` - Shared flags: live LinkedIn list reads use `--limit n` + `--offset n`; live cursor reads use `--limit n` + `--cursor c`; all connected-account reads accept `--account a`; cacheable live reads also take `-H "Cache-Control: no-cache"`. Account safety: - Scope: login defaults to read,write. Clear Write in the prompt for a read-only session. - Proxy: every account runs over a dedicated residential IP with smart rate-limiting. - Billing: inspect seats/subscription with `social account billing`; open hosted billing with `social account billing portal`. - Spend: every upstream call is metered; cache hits are logged at $0. Audit with `social account usage` and `social account logs`. - Updates: check the binary and skill with `social update`; it is local-only and prints JSON. - Writes are real provider actions. Confirm with your human before posting, messaging, inviting, following, or deleting. Discover the full command API: - `social --help` - `social update` - `social schema` - `social schema ""` (e.g. `schema "x tweets"` reports the required target; `schema "linkedin sql"` reports local-cache cost) Key links: - Product: https://usesocial.dev - Pricing: https://usesocial.dev/pricing - Privacy: https://usesocial.dev/privacy - Terms: https://usesocial.dev/terms - MCP OAuth discovery: https://mcp.usesocial.dev/.well-known/oauth-protected-resource and https://usesocial.dev/.well-known/oauth-authorization-server/api/auth - Integration discovery: https://usesocial.dev/.well-known/integrations.json - Agent skill discovery: https://usesocial.dev/.well-known/agent-skills/index.json