# Set up the MCP server (/docs/mcp)



Overview [#overview]

FeedHorizon runs a [Model Context Protocol](https://modelcontextprotocol.io) server. An AI assistant that supports MCP can use it to see your profiles and accounts, check posts against every platform's rules, schedule them, fill your queue and look up these docs.

* **URL:** `https://feedhorizon.com/mcp` (streamable HTTP)
* **Sign-in:** OAuth (the assistant opens a FeedHorizon sign-in page) or an [API key](/docs/api/authentication) in the `Authorization` header
* **Same rules as the API:** every check, limit and permission of the REST API applies, so the assistant cannot do anything your account could not do there

Connect Claude [#connect-claude]

1. In Claude, open **Settings → Connectors** and click **Add custom connector**.
2. Enter a name, for example `FeedHorizon`, and the URL `https://feedhorizon.com/mcp`.
3. If Claude shows OAuth settings, keep **Use Claude's published identity** (the default). FeedHorizon also supports **Register automatically**.
4. Click **Connect**. A FeedHorizon page opens: sign in if needed.
5. Check the organization and the permissions on the consent page, then click **Allow**.

Claude Desktop, Claude Code and the Claude mobile apps use the same connector once you have added it on claude.ai. In **Claude Code** you can also add it from the terminal:

```bash
claude mcp add --transport http feedhorizon https://feedhorizon.com/mcp
```

Then run `/mcp` in Claude Code and pick **feedhorizon** to sign in.

Connect ChatGPT [#connect-chatgpt]

1. In ChatGPT, open **Settings → Apps & Connectors**. Custom connectors need **Developer mode**, which you turn on under **Advanced settings**.
2. Click **Create**, enter the URL `https://feedhorizon.com/mcp` and choose **OAuth** as authentication.
3. Sign in to FeedHorizon and click **Allow**.

Connect with an API key [#connect-with-an-api-key]

Clients that cannot do OAuth, and your own scripts, can send an API key instead. Create one under **API & Apps** in the dashboard. A read-only key only gets the reading tools to work; the writing ones answer with an error.

For clients configured with a JSON file (Cursor, Windsurf, VS Code and others):

```json
{
  "mcpServers": {
    "feedhorizon": {
      "url": "https://feedhorizon.com/mcp",
      "headers": { "Authorization": "Bearer fh_your_api_key" }
    }
  }
}
```

In Claude Code:

```bash
claude mcp add --transport http feedhorizon https://feedhorizon.com/mcp \
  --header "Authorization: Bearer fh_your_api_key"
```

Keep the key out of shared files and repositories. Anyone with the key has its access.

What the assistant can access [#what-the-assistant-can-access]

On the consent page you choose the **organization** the assistant works in. It sees the profiles you can see there: if your role limits you to some profiles, the assistant is limited the same way.

| Permission              | What it allows                                                                                             |
| ----------------------- | ---------------------------------------------------------------------------------------------------------- |
| **Read** (`mcp:read`)   | See profiles, connected accounts, posts, queues and connect links                                          |
| **Write** (`mcp:write`) | Create, change, schedule, publish and delete posts; change queue slots; upload media; create connect links |

The assistant cannot connect social accounts on its own. It can create a [connect link](/docs/guides/connect-links) that you or your client open in a browser.

Disconnect an app [#disconnect-an-app]

Open **API & Apps** in the dashboard. Under **Connected apps** you see every assistant connected to the organization, with its permissions and when it was last active. Click **disconnect** to remove its access: it stops working on its next request and has to be connected again. Owners and admins see and can disconnect the apps of all members.

To stop an API key, delete it on the same page.

Tools [#tools]

The server has tools that read, such as `get_context`, `list_posts` and `validate_post`, and tools that change data, such as `create_post`, `set_queue_slots` and `create_connect_link`. [Tool reference](/docs/mcp/tools) lists every tool with its parameters and the scope it needs.

`publish_post_now`, `retry_post` and `delete_post` act in public or for good. They are marked as destructive, so assistants like Claude ask you before running them. Posts that are already live stay on the platform when you delete them in FeedHorizon.

Times and time zones [#times-and-time-zones]

Each profile has a time zone. The assistant gives times as a date and a time in that zone (for example `2026-11-12` at `09:00` for a profile in Europe/Berlin), and FeedHorizon converts them. `get_context` returns each profile's current local time, so "tomorrow at 9" means the profile's tomorrow, not the server's.

Errors and limits [#errors-and-limits]

Errors come back to the assistant as JSON with a `code`, a `message` and a `hint` on how to fix it, the same codes as the [REST API](/docs/api/errors). When an id is wrong, the error lists the valid ones, so the assistant can correct itself.

Every tool call counts toward your plan's [rate limit](/docs/api/rate-limits), like an API request.

Example prompts [#example-prompts]

* "What's scheduled for next week on the Acme profile?"
* "Write three LinkedIn posts about our product launch and put them in the queue."
* "Schedule this text on Instagram and LinkedIn for Thursday at 10:00, with the image at [https://example.com/launch.png](https://example.com/launch.png)."
* "Why did yesterday's post fail on Instagram? Retry it if the account is connected again."
* "Set the queue of my profile to weekdays at 9:00 and 15:00."
