FeedSquad
A content calendar for Claude and ChatGPT.
What it can do
- Create Post: FeedSquad's primary publishing tool. Schedule a post, tweet, LinkedIn update, or Threads post — also: publish to social media, share content, queue a tweet, post on LinkedIn, draft a thre
- Create Posts: FeedSquad's batch publishing primitive. Schedule multiple posts in one call — tweet sequences, multi-platform announcements, content ops queues, launch series, weekly content drops. Hand
- Create Campaign: Create a content campaign with multiple posts. Provide explicit posts or let them be generated as drafts requiring approval.
What data it sees
Do you need an account
No: the server works without sign-in
A content calendar for Claude and ChatGPT. Create posts and campaigns, schedule with cadence guardrails, and publish to LinkedIn, X, and Threads through official APIs — approval-first, so nothing goes live without you. OAuth 2.1, no API keys. Every draft is checked against FeedSquad's anti-slop pattern registry before it can be scheduled.
How to connect
How to connect FeedSquad to Claude
The server address to paste into Claude settings:
https://feedsquad--ville-yllasjarvi.run.tools
- Open Claude (claude.ai or the desktop app).
- Go to Settings → Connectors.
- Click Add custom connector.
- Paste the server address copied below into Remote MCP server URL and click Add.
- In a chat, click + → Connectors and switch the new connector on.
Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.
Authorization
After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.
How to connect FeedSquad to ChatGPT
The server address to paste into ChatGPT settings:
https://feedsquad--ville-yllasjarvi.run.tools
- Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
- Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
- Open Settings → Connectors and click Create.
- Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
- Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
- In a new chat open + → Apps/Connectors and enable the connector.
OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.
Authorization
On first use ChatGPT opens the service's sign-in window. Sign in and approve access.
How to connect FeedSquad to Cursor
The server address to paste into Cursor settings:
https://feedsquad--ville-yllasjarvi.run.tools
Fastest: click Open in Cursor below and confirm the prompt.
Manually:
- In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
- Paste the JSON copied below into
~/.cursor/mcp.json(per project:.cursor/mcp.jsonin the repo root). - Save the file. The server appears in the MCP list; authorize it there if asked.
Authorization
If the service needs sign-in, an authorize button appears next to the server in the MCP list.
Server tool list (23)
Raw names from tools/list. Only developers need these.
| create_post | FeedSquad's primary publishing tool. Schedule a post, tweet, LinkedIn update, or Threads post — also: publish to social media, share content, queue a tweet, post on LinkedIn, draft a thread. Supports X (Twitter), LinkedIn, and Threads. If `scheduled_date` is omitted, Handler proposes the next algorithm-aware slot (5 X / 3 Threads / 2 LinkedIn per day, with 90min/2h/4h spacing) — the post lands as a draft with that slot, and the user approves via confirm_post to commit. The response includes a `slot_assignment` object with the proposed time and a `rationale` string the agent should quote back to the user. Pass `auto_slot: false` to keep the post as a dateless draft (no proposal). Idempotent when an idempotency_key is supplied — retries with the same key replay the original response instead of creating duplicates. THREADING (X / Threads): to publish as a thread, separate parts with `---` on its own line in `content` — each part becomes one tweet. Without `---`, the content publishes as a single post (long-form for X Premium accounts up to 25,000 chars; non-Premium accounts must keep X content under 280 chars or use `---` to thread). |
| create_posts | FeedSquad's batch publishing primitive. Schedule multiple posts in one call — tweet sequences, multi-platform announcements, content ops queues, launch series, weekly content drops. Handler proposes the full sequence at once: each post lands on a draft slot that honors per-platform daily caps + spacing AND doesn't collide with the others in the batch. Returns N draft IDs with assigned slots + a summary (total, per-platform breakdown, calendar span). Use create_post (singular) for one-off posts or when you need a specific scheduled_date / idempotency_key / company_page_id. THREADING (X / Threads): each post's `content` publishes as a single tweet/post by default; to make any one post a thread, separate its parts with `---` on its own line inside that post's content. |
| create_campaign | Create a content campaign with multiple posts. Provide explicit posts or let them be generated as drafts requiring approval. |
| confirm_post | Approve a draft post (go live, ship it, schedule for publishing) or cancel to delete the draft. The two-step draft → confirm lifecycle is intentional — prevents accidental publishes when an agent hallucinates confidence. |
| confirm_campaign | Approve all or cancel all posts in a campaign. |
| publish_post | Publish a post immediately — go live now, post right now, ship this — to its target platform (LinkedIn, X/Twitter, or Threads). The platform is read from the post itself. Skips the scheduled-date queue; use this when the user wants the post out right now, not at the scheduled time. Idempotent: retries on an in-flight or already-published post replay the cached response instead of creating duplicates. Use dry_run=true to validate without publishing. |
| delete_post | Delete a draft or scheduled post. Published posts cannot be deleted. |
| get_calendar | View your scheduled content — upcoming posts, drafts, the publishing queue, what's scheduled, when posts go live across X (Twitter), LinkedIn, and Threads. Authoritative source for any 'what's posting next / show me my calendar / what's in the queue' question. Supports compound filters (platforms[], statuses[]), campaign filter, and cursor pagination via next_cursor. The legacy `platform` and `status` (singular) fields still work and combine with the array forms. |
| get_usage | Account-management read: current-month posting usage, plan tier, and rate-limit status for the authenticated user. Administrative — not used for posting or scheduling decisions; agents should call create_post / get_calendar / find_next_slot for those. |
| get_help | Task-oriented prose help. Topics: overview (what FeedSquad does), posting (the draft → confirm lifecycle), campaigns (multi-post sequences), limits (caps + spacing rules). For the structured surface map an agent can reason over in one call, use `capabilities` instead. |
| get_plans | Account-management read: FeedSquad subscription pricing tiers and upgrade URLs. Administrative — call this only when the user explicitly asks about pricing or hits a feature-gate. Not the right tool for posting, scheduling, or 'what can FeedSquad do' — use capabilities for the cold-start surface map. |
| connect_platform | Connect a social media platform (LinkedIn, X/Twitter, or Threads) to your FeedSquad account. Returns an OAuth URL to authorize the connection. |
| update_post | Edit a draft or scheduled post in place. Cannot edit published posts. Pass only the fields you want to change. Use dry_run=true to validate without writing. |
| reschedule_post | Move a post to a new scheduled time. Returns warnings if the new slot creates a posting cluster (3+ posts within an hour) on the same platform. Cannot reschedule published posts. |
| search_posts | Find posts by keyword across content + title, with optional filters (platforms, statuses, date range, campaign). Returns a paginated list with an opaque next_cursor — pass it back on the next call to continue. |
| get_post | Fetch a single post by id with optional expansions. Pass include=["analytics"] for performance data, include=["history"] for the publishing-attempt history (state machine, attempts, last error). |
| adapt_for_platform | Take one draft and return platform-tuned versions for each requested platform (LinkedIn / X / Threads). Applies per-platform constraints (length, hashtag style, link handling, thread splitting) and weaves in the user's brand voice. Returns adaptations only — does not create drafts. Call create_post for each version you want to keep. |
| get_calendar_health | Return derived signals over your content calendar: clusters (3+ posts in 4h), gaps (>72h between scheduled), stale drafts (>14d, never scheduled), unapproved scheduled posts, and per-platform cadence drift vs the previous window. Call this before approving a campaign. |
| get_performance_insights | What's working, best posts, top-performing content, engagement winners — and what's not. Engagement-ranked performance over a recent window: top performers, underperformers, and an LLM-generated summary of what worked + one candidate angle to try next. Pulls from post_performance (canonical) and bridges to drafts via platform_post_id, so MCP-created and campaign-created posts are both covered. PRIVACY: when include_summary is true (default), post text and aggregate engagement metrics are sent to FeedSquad's configured LLM provider for summarisation — set include_summary=false to receive only the structured metrics. |
| set_post_image | Attach an image to a draft or scheduled post by URL. The URL must be HTTPS and respond with an image content-type — server validates via HEAD before writing. Cannot edit published posts. For uploads from base64, use the dashboard upload flow today; an MCP upload_asset tool will follow. |
| list_accounts | List the posting accounts the authenticated user can publish to: their personal LinkedIn / X / Threads (each shown with `connected: true|false`) plus any LinkedIn company pages they admin. Use this before create_post / create_campaign / publish_post when you need to pass a company_page_id, or to understand which platforms the user has connected. Pure read; no side effects. |
| capabilities | What is FeedSquad / what can this do / show me the tool set — call this FIRST on cold start. Returns a structured map of FeedSquad's MCP surface: tools grouped by intent (posting, calendar, campaigns, performance, account), primary entrypoints an agent should reach for first, supported platforms (x, linkedin, threads), and per-platform daily caps + spacing rules. One round trip, no second call needed to know what's possible. |
| find_next_slot | When can I post next? When's my next available slot? Find me 3 slots Tuesday afternoon for LinkedIn. Returns the next N available posting slots for a platform, honoring Handler v1's daily caps (5 X / 3 Threads / 2 LinkedIn per day) and spacing rules (90min / 2h / 4h). Pure planning — does NOT write to the database. Use before scheduling multiple posts (e.g. a launch series) to know exactly which slots Handler would propose. Calling find_next_slot then create_post with the chosen scheduled_date produces the same result as create_post alone with auto_slot — but lets the agent surface the proposed slots to the user for review first. |