Skip to main content
Glama
README.md
# Meta AI Demos MCP

Serveur [MCP](https://modelcontextprotocol.io/) pour utiliser les outils **Meta AI Demos** ([aidemos.meta.com](https://www.aidemos.meta.com)) directement depuis **Cursor**, sans installer les modèles localement.

> **Avertissement** : client non officiel, reverse-engineered. Non affilié à Meta. Utilisez conformément aux [Conditions d'utilisation](https://www.aidemos.meta.com) de Meta AI Demos.

## Fonctionnalités

- Authentification par cookies de session (`fair_sess`, `fair_csrf`, `datr`)
- Rafraîchissement automatique des tokens page (`lsd`, `fb_dtsg`)
- API GraphQL Relay vers `https://www.aidemos.meta.com/api/graphql/`
- Outils MCP pour Segment Anything (SAM3) :
  - Vérifier la session
  - Lister / détailler les templates galerie
  - Upload média vers les serveurs Meta
  - Appels GraphQL génériques (31 opérations Relay connues)

## Prérequis

- **Node.js 18+**
- Compte Meta connecté sur [aidemos.meta.com/segment-anything/gallery](https://www.aidemos.meta.com/segment-anything/gallery)

## Installation

```bash
git clone https://github.com/ErrorNoName/MetaAPI.git
cd MetaAPI
npm install
npm run build
```

## Configuration des cookies

### Option A — Fichier (recommandé)

1. Connectez-vous sur [aidemos.meta.com](https://www.aidemos.meta.com)
2. Ouvrez DevTools (F12) → **Application** → **Cookies** → `https://www.aidemos.meta.com`
3. Copiez `fair_sess`, `fair_csrf`, `datr`
4. Créez `cookies.json` à partir de l'exemple :

```bash
copy cookies.example.json cookies.json
```

```json
{
  "fair_sess": "VOTRE_FAIR_SESS",
  "fair_csrf": "VOTRE_FAIR_CSRF",
  "datr": "VOTRE_DATR"
}
```

### Option B — Variables d'environnement

```bash
set META_AIDEMOS_FAIR_SESS=...
set META_AIDEMOS_FAIR_CSRF=...
set META_AIDEMOS_DATR=...
```

Ou `META_AIDEMOS_COOKIES_FILE=C:\chemin\vers\cookies.json`

## Cursor — configuration MCP

Ajoutez dans `.cursor/mcp.json` (ou les paramètres MCP globaux) :

```json
{
  "mcpServers": {
    "meta-ai-demos": {
      "command": "node",
      "args": ["C:\\chemin\\vers\\MetaAPI\\dist\\index.js"],
      "env": {
        "META_AIDEMOS_COOKIES_FILE": "C:\\chemin\\vers\\MetaAPI\\cookies.json"
      }
    }
  }
}
```

Redémarrez Cursor. Les outils `aidemos_*` apparaissent dans le chat Agent.

## Outils MCP disponibles

| Outil | Description |
|-------|-------------|
| `aidemos_check_session` | Vérifie login + acceptation TOS |
| `aidemos_list_templates` | Templates SAM3 de votre galerie |
| `aidemos_get_template` | Détails d'un template par ID |
| `aidemos_list_community_templates` | Templates communautaires |
| `aidemos_upload_media` | Upload image/vidéo/audio |
| `aidemos_get_media` | Statut et URL CDN d'un média |
| `aidemos_graphql` | Appel GraphQL Relay arbitraire |
| `aidemos_list_operations` | Liste des 31 opérations connues |
| `aidemos_refresh_session` | Force le refresh des tokens |

## Exemple d'utilisation dans Cursor

```
Vérifie ma session Meta AI Demos, puis liste les templates SAM disponibles.
```

```
Upload l'image C:\Photos\test.jpg via Meta AI Demos (SAM3_IMAGE).
```

## Architecture

```
Browser cookies (fair_sess, fair_csrf, datr)
        ↓
MetaAIDemos MCP Server
        ↓
GET aidemos.meta.com → extract lsd + fb_dtsg
        ↓
POST /api/graphql/ (RelayModern + x-csrf-token)
        ↓
Serveurs Meta FAIR (Segment Anything, etc.)
```

### Opérations Relay connues

Les `doc_id` GraphQL sont extraits des bundles JS Meta et mappés dans `src/constants.ts`. Exemples :

- `SAMRootViewerQuery` — session utilisateur
- `SAM3DemoRootTemplateGalleryQuery` — galerie templates
- `useSAMUploadMediaMutation` — upload média
- `SAM3EditorContextProviderSessionQuery` — session éditeur

## Limitations

- **Inférence SAM (masques)** : une partie du pipeline (streaming WASM `streamMasks`) s'exécute côté navigateur. Ce MCP couvre l'API serveur (upload, templates, GraphQL). L'inférence complète en headless nécessiterait un navigateur automatisé (hors scope v1).
- **Expiration cookies** : `fair_sess` expire périodiquement — re-exportez depuis le navigateur si les requêtes échouent.
- **Région** : aidemos.meta.com peut être indisponible selon la région.

## Développement

```bash
npm run dev          # build + start
node scripts/test-graphql.js   # test GraphQL manuel (cookies hardcodés — dev only)
```

## Licence

MIT — voir [LICENSE](LICENSE).