Skip to main content
Glama
Arnost55

facebook-mcp-video-reels

by Arnost55
README.md
# Facebook MCP Server - Video & Reels Support

An MCP server that authenticates with Facebook and provides tools to list pages, post text/images, upload videos, and create Reels on Facebook Pages.

## Token Handling

- User login returns a short-lived user token (~1-2 hours). The server now exchanges it for a long-lived user token (~60 days) using `grant_type=fb_exchange_token`.
- The long-lived user token is stored under `accessToken` along with metadata:
  - `accessTokenType`
  - `accessTokenExpiresAt` (epoch ms)
- Backward compatibility: if an existing stored token has no `accessTokenExpiresAt`, the server attempts to upgrade it in place the next time it's used.
- **Page operations use Page access tokens** retrieved from `/me/accounts`. These are cached under `pages` and are typically non-expiring (but can be revoked by user/account changes). If a Page token appears invalid, the server refreshes the Page token cache and retries once.

## Storage

The server supports in-memory and Upstash Redis (REST) storage. When using Upstash, tokens are saved as JSON blobs under the configured key prefix and your per-client `memoryKey`.

## OAuth Scopes

The default scopes requested are:

```
public_profile,pages_show_list,pages_manage_posts,pages_read_engagement,publish_video
```

These allow listing managed Pages, publishing text/image/video posts, and creating Reels.

## MCP Tools

- `auth_url`: Returns the Facebook Login URL.
- `exchange_auth_code`: Exchanges an OAuth code and upgrades to a long-lived user token.
- `list_pages`: Lists Pages (and refreshes Page tokens).
- `create_page_post`: Publishes to a Page (text or image). Provide `pageId`, `postContent` (text), and optionally `imageUrl`.
- `read_page_posts`: Reads posts for a Page using its Page token.
- `post_video_to_page`: Post a video to a Facebook Page. Provide `pageId`, `videoUrl` (public HTTPS URL to the video file), and `description`.
- `post_reel_to_page`: Post a Reel to a Facebook Page. Provide `pageId`, `videoUrl` (public HTTPS URL to the video file), `description`, and optionally `coverUrl`.

## Notes

- There is no standard OAuth refresh_token for Facebook Login. The long-lived user token can be re-extended by calling the same exchange flow. This server attempts extensions when the token is within 7 days of expiry.
- Video uploads use `POST /{page-id}/videos` with `file_url` parameter (no local file upload needed).
- Reels use `POST /{page-id}/video_reels` endpoint.