Skip to main content
Glama
BilalTariq01

Social Analytics MCP Server

by BilalTariq01
README.md
# Social Analytics MCP Server

A [Model Context Protocol](https://modelcontextprotocol.io/) (MCP) server for Instagram and Facebook analytics via the Meta Graph API.

## Features

### Instagram

- Account discovery and profile information
- Account-level insights with demographic breakdowns
- Media listing with engagement data
- Per-post insights (images, videos, reels, carousels)
- Stories retrieval
- Hashtag search and media discovery
- Content publishing rate limits
- Mentioned/tagged media

### Facebook

- Page discovery and detailed page info
- Page-level insights (impressions, engagement, fans, views)
- Post-level insights
- Posts with inline metrics
- Page feed with reactions/comments/shares
- Known metrics reference
- Access token validation

### Shared

- Pre-built analysis prompts for common workflows
- Retry with exponential backoff on 429/5xx errors
- Structured error handling across both platforms
- Debug logging via `DEBUG=social-analytics-mcp`

## Quick Start

1. **Install and build**

   ```bash
   git clone <repository-url>
   cd social-analytics-mcp
   npm install
   npm run build
   ```

2. **Get an access token** from the [Graph API Explorer](https://developers.facebook.com/tools/explorer/) with permissions:
   - Instagram: `instagram_basic`, `instagram_manage_insights`, `pages_read_engagement`
   - Facebook: `read_insights`, `pages_read_engagement`

3. **Add to your MCP client** (see configuration below)

## Configuration

| Variable | Required | Default | Description |
|---|---|---|---|
| `INSTAGRAM_ACCESS_TOKEN` | For Instagram | — | Facebook User Access Token with Instagram permissions |
| `INSTAGRAM_ACCOUNT_ID` | No | Auto-detected | Instagram Business Account ID |
| `INSTAGRAM_API_VERSION` | No | `v23.0` | Instagram Graph API version |
| `FACEBOOK_ACCESS_TOKEN` | For Facebook | — | Facebook User/Page Access Token |
| `FACEBOOK_PAGE_ID` | No | Use discovery tool | Facebook Page ID |
| `FACEBOOK_API_VERSION` | No | `v22.0` | Facebook Graph API version |
| `DEBUG` | No | — | Set to `social-analytics-mcp` for debug logs |

You only need to configure access tokens for the platforms you want to use. Account and page IDs can be discovered using the built-in tools.

## MCP Client Setup

### Claude Desktop

- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "social-analytics": {
      "command": "node",
      "args": ["/absolute/path/to/social-analytics-mcp/dist/index.js"],
      "env": {
        "INSTAGRAM_ACCESS_TOKEN": "your_token_here",
        "FACEBOOK_ACCESS_TOKEN": "your_token_here"
      }
    }
  }
}
```

### Claude Code

```bash
claude mcp add social-analytics node /absolute/path/to/social-analytics-mcp/dist/index.js \
  -e INSTAGRAM_ACCESS_TOKEN=your_token_here \
  -e FACEBOOK_ACCESS_TOKEN=your_token_here
```

## Available Tools

### Instagram Tools

| Tool | Description | Required Params |
|---|---|---|
| `instagram_list_accounts` | List available Instagram Business accounts | — |
| `instagram_get_profile` | Get account profile info | — |
| `instagram_get_account_insights` | Get account-level analytics | `metrics`, `metric_type`, `period` |
| `instagram_list_media` | List recent media posts | — |
| `instagram_get_media_details` | Get details for a specific post | `media_id` |
| `instagram_get_media_insights` | Get insights for a specific post | `media_id`, `metrics` |
| `instagram_get_stories` | Get recent stories | — |
| `instagram_get_hashtag_search` | Search for a hashtag ID | `hashtag` |
| `instagram_get_hashtag_media` | Get media for a hashtag | `hashtag_id` |
| `instagram_get_content_publishing_limit` | Check publishing rate limits | — |
| `instagram_get_mentioned_media` | Get media where account is tagged | — |

### Facebook Tools

| Tool | Description | Required Params |
|---|---|---|
| `facebook_list_pages` | List accessible Facebook Pages | — |
| `facebook_get_page_details` | Get page profile information | — |
| `facebook_get_page_insights` | Get page-level insights | `metrics` |
| `facebook_get_post_insights` | Get insights for a specific post | `post_id`, `metrics` |
| `facebook_list_posts_with_insights` | List posts with inline metrics | `post_metrics` |
| `facebook_get_page_feed` | Get page feed with engagement data | — |
| `facebook_list_known_metrics` | List supported metrics reference | — |
| `facebook_validate_token` | Validate an access token | `access_token` |

### Common Parameters

Most Instagram tools accept an optional `account_id` parameter. If not provided, the account is auto-detected from the `INSTAGRAM_ACCOUNT_ID` environment variable or discovered automatically if only one account exists.

Most Facebook tools accept an optional `page_id` parameter with similar auto-detection behavior via `FACEBOOK_PAGE_ID`.

## Available Prompts

| Prompt | Description |
|---|---|
| `analyze_instagram_performance` | Comprehensive Instagram account analysis |
| `analyze_facebook_performance` | Comprehensive Facebook Page analysis |
| `compare_post_performance` | Compare recent posts on either platform |
| `get_audience_demographics` | Audience demographic breakdown |
| `setup_platform` | Interactive setup guide |

## Programmatic Usage

```typescript
import { InstagramClient, FacebookClient, createServer } from 'social-analytics-mcp';

// Use clients directly
const instagram = new InstagramClient({
  accessToken: 'your_token',
  accountId: 'optional_account_id',
});
const profile = await instagram.getUserProfile();

// Or create an MCP server programmatically
const server = createServer();
```

## Troubleshooting

### "Access token is invalid"

- Ensure your token has the required permissions
- Short-lived tokens expire in 1 hour — generate a long-lived token

### "No Instagram Business account found"

- Your Instagram account must be a Business or Creator account
- It must be connected to a Facebook Page

### "Unsupported metric"

- Some metrics are media-type specific (e.g., `avg_time_watched` only works for videos/reels)
- Use `facebook_list_known_metrics` to see supported Facebook metrics

### Rate limits

- Instagram: 200 calls/hour per user token
- The server automatically retries on 429/5xx with exponential backoff

## Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and guidelines.

## License

MIT

---

**Note**: This is an unofficial tool and is not affiliated with Meta, Facebook, or Instagram.

TDQS

A3.7/5.0

Scored across 19 tools

Disambiguation4/5

Most tools are clearly distinct by platform and resource type, but a few pairs like facebook_list_posts_with_insights and facebook_get_page_feed could be confused since both list posts with engagement data. Descriptions help differentiate by emphasizing inline insights vs. full post details.

Naming Consistency4/5

Tools follow a consistent platform_verb_noun pattern using snake_case, with 'list' for collections and 'get' for individual items. Minor deviations like 'list_posts_with_insights' and 'validate_token' break the simple pattern but remain readable and predictable.

Tool Count4/5

With 19 tools covering two distinct platforms (Instagram and Facebook) and multiple analytics levels, the count is slightly heavy but justifiable. Each tool serves a specific purpose, and the two-platform scope naturally expands the surface area.

Completeness4/5

The server covers the core analytics lifecycle: account/page discovery, profile details, insights at account/page/post/media levels, media/posts listing, stories, hashtags, publishing limits, and token validation. Minor gaps exist, such as no dedicated Facebook post detail-by-ID tool, but list endpoints provide the necessary IDs.

Maintenance

ActivityInactive
ResponsivenessNo issues