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.This server cannot be deployed
Maintenance
ActivityStale
ResponsivenessNo issues