Skip to main content
Glama
lanternrow

facebook-pages-mcp

by lanternrow
README.md
# facebook-pages-mcp

[![npm version](https://img.shields.io/npm/v/facebook-pages-mcp.svg)](https://www.npmjs.com/package/facebook-pages-mcp)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

MCP server for **Facebook Pages** organic analytics and management, powered by Meta Graph API **v25.0**.

Built for [Claude Code](https://claude.ai/claude-code) and any MCP-compatible AI tool. Gives your AI assistant direct access to your Facebook Page data — posts, insights, comments, and more.

Part of **[The SEO Engine](https://lanternrow.com/seo-engine/)** toolkit by [Rex Jones](https://rexjones.me) — AI-powered SEO and social media tooling for agencies and businesses.

## Why this exists

- **No good Facebook Pages MCP server existed.** Instagram has several. Facebook Pages had none that worked on a current API version.
- **Meta deprecated legacy metrics on June 15, 2026.** `page_impressions`, `page_reach`, and `page_impressions_unique` no longer return data. This server uses the replacement metrics from day one.
- **Business Manager support.** Most businesses manage Pages through Meta Business Manager, not personal accounts. This server works with both.

## Quick start

### Option 1: npx (no install)

```json
{
  "mcpServers": {
    "facebook-pages": {
      "command": "npx",
      "args": ["-y", "facebook-pages-mcp"],
      "env": {
        "FB_PAGE_ACCESS_TOKEN": "your_page_access_token",
        "FB_PAGE_ID": "your_page_id"
      }
    }
  }
}
```

### Option 2: Clone and build

```bash
git clone https://github.com/lanternrow/facebook-pages-mcp.git
cd facebook-pages-mcp
npm install
npm run build
```

Then add to your Claude Code MCP settings:

```json
{
  "mcpServers": {
    "facebook-pages": {
      "command": "node",
      "args": ["/path/to/facebook-pages-mcp/dist/index.js"],
      "env": {
        "FB_PAGE_ACCESS_TOKEN": "your_page_access_token",
        "FB_PAGE_ID": "your_page_id"
      }
    }
  }
}
```

## Getting your Page Access Token

### Step 1: Create a Meta App

1. Go to [Meta for Developers](https://developers.facebook.com/apps/) and click **Create App**
2. Name your app and choose the **"Manage everything on your Page"** use case
3. Connect it to your Business Portfolio

### Step 2: Generate a token in the Graph API Explorer

1. Open the [Graph API Explorer](https://developers.facebook.com/tools/explorer/)
2. Select your app from the **Meta App** dropdown
3. Add permissions: `pages_show_list`, `pages_read_engagement`, `business_management`
4. Click **Generate Access Token** and complete the OAuth flow
5. When asked about Pages, select **"Opt in to all current and future Pages"**

### Step 3: Get your Page Access Token

**If your Pages are managed through Business Manager** (most businesses):

```
# First, find your business ID
GET /me/businesses?fields=id,name

# Then get Page tokens for that business
GET /{business-id}/owned_pages?fields=id,name,access_token
```

**If your Pages are on your personal account:**

```
GET /me/accounts?fields=id,name,access_token
```

Copy the `access_token` and `id` for the Page you want.

### Step 4: Exchange for a long-lived token (recommended)

Short-lived tokens expire in ~1 hour. Exchange for a long-lived token (~60 days):

```
GET /oauth/access_token
  ?grant_type=fb_exchange_token
  &client_id={your-app-id}
  &client_secret={your-app-secret}
  &fb_exchange_token={short-lived-token}
```

> **Tip:** For Pages you admin, Page tokens derived from a long-lived User Token never expire.

## Tools

### Read tools

| Tool | Description |
|------|-------------|
| `get_page_info` | Page metadata: name, category, follower count, contact info, cover photo |
| `get_page_insights` | Page-level analytics with date ranges and period aggregation (day/week/28-day) |
| `get_published_posts` | Paginated list of posts authored by the Page |
| `get_post_insights` | Per-post engagement: impressions, clicks, reactions by type |
| `get_post_comments` | Paginated comments with author info and like/reply counts |
| `get_video_insights` | Video performance: views, watch time, reactions |
| `get_page_feed` | Full feed including visitor posts |

### Write tools

| Tool | Description |
|------|-------------|
| `create_post` | Publish text, link, or photo posts to the Page |

### Utility tools

| Tool | Description |
|------|-------------|
| `refresh_token_info` | Check token validity, expiration, and granted scopes |

## Metrics and the June 2026 deprecation

Meta deprecated these page-level metrics on June 15, 2026:

| Deprecated | Replacement |
|-----------|-------------|
| `page_impressions` | `page_views_total` |
| `page_reach` | Page Viewer metric (rolling out) |
| `page_impressions_unique` | Media Viewers metric (rolling out) |

This server uses only non-deprecated metrics: `page_views_total`, `page_fans`, `page_fan_adds`, `page_fan_removes`, `page_actions_post_reactions_total`.

## Architecture

```
src/
  index.ts          # MCP server entry point, tool registration
  client.ts         # Graph API HTTP client (native fetch, no dependencies)
  types.ts          # TypeScript interfaces for API responses
  tools/
    pages.ts        # get_page_info, get_page_feed
    insights.ts     # get_page_insights, get_video_insights
    posts.ts        # get_published_posts, get_post_insights, get_post_comments, create_post
    utils.ts        # refresh_token_info
```

- **Zero external HTTP dependencies** — uses Node 18+ native `fetch`
- **Rate limit tracking** — captures `x-app-usage` and `x-page-usage` headers
- **Cursor-based pagination** — all list endpoints support `after` cursor and configurable limits
- **Zod validation** — all tool inputs validated with descriptive error messages

## Environment variables

| Variable | Required | Description |
|----------|----------|-------------|
| `FB_PAGE_ACCESS_TOKEN` | Yes | Long-lived Page Access Token |
| `FB_PAGE_ID` | Yes | Default Facebook Page ID (numeric) |

## Development

```bash
npm run dev    # Watch mode — recompiles on save
npm run build  # Production build
npm start      # Run the server
```

## Contributing

Issues and PRs welcome. If Meta changes the API (they will), please open an issue.

## License

MIT — see [LICENSE](LICENSE).

---

Built as part of **The SEO Engine** by [Rex Jones](https://rexjones.me).

TDQS

A3.6/5.0

Scored across 9 tools

Disambiguation4/5

Tool purposes are mostly distinct, but 'get_published_posts' and 'get_page_feed' both retrieve posts with the difference being inclusion of visitor posts. While descriptions clarify, they could cause confusion. Similarly, separate insight tools for page, post, and video are clear. Overall minor overlap.

Naming Consistency3/5

Most tools use 'get_' prefix, but 'create_post' and 'refresh_token_info' use different verbs. Among 'get_', suffixes vary between 'info', 'insights', 'posts', 'comments', 'feed', without a strict pattern. This mixed convention is noticeable but still understandable.

Tool Count5/5

9 tools is appropriate for a Facebook Pages API covering essential operations: page info, insights, post retrieval (two flavors), post interactions, video analytics, post creation, and token management. Neither too few nor too many.

Completeness3/5

The tool set covers reading page data, posts, comments, and insights, and creating posts. However, it lacks update and delete operations for posts, comment management beyond reading, and other page management features. These gaps are notable for a complete page management surface.

Maintenance

ActivityInactive
ResponsivenessNo issues