MCP Server
What it is
If you want an AI agent to post to Facebook or Instagram for you, this is the sfeed entry point. sfeed works as an MCP (Model Context Protocol) server, so agents like Claude, Codex, and OpenCode can call real posting and scheduling tools instead of guessing.
sfeed handles auth, posting, scheduling, previews, and the hosted queue. The agent still needs the actual post content from you or from its own workflow.
Recommended plugin setup
curl -fsSL https://sfeed.dev/install.sh | sh
sfeed auth facebook connect
sfeed auth instagram connect
codex plugin marketplace add nem035/sfeed --sparse .agents/plugins --sparse plugins
codex plugin add sfeed@sfeed
claude plugin marketplace add nem035/sfeed The Codex commands add the marketplace and install the plugin. In Claude Code, run claude plugin install sfeed@sfeed after adding its marketplace. The plugin bundles the sfeed skill and local MCP server entry.
Manual MCP setup
sfeed auth facebook connect
sfeed auth instagram connect
sfeed mcp You do not need MCP for direct terminal posting. Use MCP when you want an agent to call structured tools instead of running CLI commands.
Run the auth command for each platform you want. Then connect your agent to the MCP server and ask it to inspect status, choose a destination, and post or schedule something.
Direct Instagram auth requires a professional Business or Creator account, but it does not require a Facebook Page or business portfolio.
Scoped MCP setup
The owner should complete provider auth, inspect destination IDs, and create a scoped key. Pass the one-time values directly to the isolated MCP process:
sfeed destinations
sfeed agents create --name mcp --scopes publish,schedule --destinations <id>,<id> {
"mcpServers": {
"sfeed": {
"command": "sfeed",
"args": ["mcp"],
"env": {
"SFEED_USER_ID": "<owner-user-id>",
"SFEED_AGENT_TOKEN": "<one-time-token>"
}
}
}
} Agent mode can only see destinations and schedules allowed by the key. Provider auth, billing, key management, audit access, and signed dashboard or preview URLs remain owner only. Read Scoped agent access before using a key with an untrusted process; it must not be able to read the owner's ~/.sfeed/tokens.json.
Start the server
sfeed mcp This starts the MCP server on stdio. You typically do not run this manually. Configure your AI tool to launch it when the agent session starts.
Configure Codex
codex plugin marketplace add nem035/sfeed --sparse .agents/plugins --sparse plugins
codex plugin add sfeed@sfeed You can also browse the marketplace with /plugins. If you only want the MCP server, run codex mcp add sfeed -- sfeed mcp.
Configure Claude Code
claude plugin marketplace add nem035/sfeed
claude plugin install sfeed@sfeed If you only want the MCP server, run claude mcp add sfeed -- sfeed mcp.
Configure OpenCode
opencode mcp add Choose a local MCP server and use sfeed mcp as the command.
Configure Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"sfeed": {
"command": "sfeed",
"args": ["mcp"]
}
}
} Agent skills
If your agent supports installable plugins, use the sfeed plugin first. If it supports skills but not plugins, start with the main sfeed skill. It gives the agent a clearer setup and posting workflow before it reaches for MCP tools.
npx skills add nem035/sfeed --skill sfeed There are narrower skills too, facebook-posting, instagram-posting, and social-scheduling, but the main sfeed skill is the right default.
Available tools
CLI 0.4.2 and later declare output schemas and read-only, destructive, external-action, and idempotency hints for all 18 tools. Successful calls include structuredContent alongside readable text. These hints help clients present actions; server-side destination and scope checks still enforce access.
Check isError and per-platform results. A multi-platform post can partly succeed. Never retry a successful platform because another failed. A dry run validates inputs only; a scheduled-job ID confirms queue acceptance, not delivery. A preview-link warning after a saved job does not require repeating the write.
If status returns schedule: null with schedule_error, queue readiness is unknown. The latest-attempt summary includes successful jobs as well as failures. Update with the install script and restart the agent session to load a new MCP version.
Some clients ask for approval even with dry_run: true, because the same tool can publish. Keep normal client approval controls enabled. A denied or cancelled call should stop the action, not trigger a retry through another tool.
sfeed_status-- full overview of accounts, schedule, and subscriptionsfeed_auth_status-- check authenticated platformssfeed_destinations-- list every Facebook and Instagram destination with its canonical IDsfeed_pages-- list connected page IDs and Instagram linkagesfeed_post-- publish, schedule, or dry-run a postsfeed_facebook_posts_list-- list recent Page posts with current content and live URLssfeed_facebook_post_get-- read one Facebook Page postsfeed_facebook_post_update-- replace the text of a Page post created by sfeedsfeed_facebook_post_delete-- permanently delete a Page post created by sfeed after explicit user confirmationsfeed_schedule_status-- queue counts, next scheduled posts, and recent failuressfeed_schedule_dashboard_url-- return a signed browser URL for the hosted queue UI, with optional view, filter, month, date, and expanded-post paramssfeed_schedule_preview_url-- return a signed browser preview URL for one scheduled post-
sfeed_schedule_list-- list scheduled postsSupportsformat: "json"andstatus: "pending" | "failed" | "posted" | "all". sfeed_schedule_reschedule-- move a pending scheduled post to a new timesfeed_schedule_duplicate-- copy a scheduled post into a new pending jobsfeed_schedule_cancel-- cancel a scheduled postsfeed_schedule_acknowledge-- preserve a reviewed failure in history while removing it from active readiness warningssfeed_report_problem-- send a user-approved problem report to sfeed support
Typical agent workflow
- Agent calls
sfeed_statusto check what is connected and what is already scheduled - Agent calls
sfeed_destinationsand chooses the canonical destination ID for each platform - Agent drafts the post based on the user's request
- Agent shows the draft for approval
- Agent calls
sfeed_postto publish or schedule it
When posting to more than one platform, sfeed_post accepts a separate canonical ID for Facebook and Instagram in destination_ids.
sfeed_post accepts local files or public URLs in media. sfeed stages local files automatically when the post needs a public media URL.
Published Facebook Page post tools use the same canonical destination IDs. The agent must show the Page, post ID, and exact change before an update, and it must receive explicit confirmation before permanent deletion.
Supported post shapes are straightforward. Facebook supports feed posts, text-only posts, single-image posts, multi-image posts, single-video posts, Page Reels, and Page Stories. Instagram supports feed media, Reels, Stories, and image-only carousels up to 10 items. Pass kind as feed, reel, story, or carousel when the media shape alone is not clear.
In an owner session, the agent can call sfeed_schedule_dashboard_url for the browser queue or sfeed_schedule_preview_url for one job. Scoped agent keys cannot mint those signed URLs.
Agent guides
- Using sfeed with Codex
- Using sfeed with Claude Code
- Using sfeed with OpenCode
- Cookbook
- MCP social media server for what the tools do and who they are for
- Scheduling docs