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.

Typical agent workflow

  1. Agent calls sfeed_status to check what is connected and what is already scheduled
  2. Agent calls sfeed_destinations and chooses the canonical destination ID for each platform
  3. Agent drafts the post based on the user's request
  4. Agent shows the draft for approval
  5. Agent calls sfeed_post to 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

Back to Docs