npm package: @instablog/mcp-server
Description: MCP server for Instablog - manage posts, audits, and content generation from Claude Code
Latest version: 1.0.0

# Instablog MCP Server

Serveur MCP (Model Context Protocol) pour interagir avec l'API Instablog depuis Claude Code.

## Installation

```bash
cd mcp-server
npm install
npm run build
```

## Créer une API Key

1. Connecte-toi à Instablog (app ou API)
2. Va dans Settings > API Keys ou utilise l'endpoint :

```bash
# Via curl (remplace YOUR_JWT par ton token de session)
curl -X POST https://api.instablog.so/v1/api-keys \
  -H "Authorization: Bearer YOUR_JWT" \
  -H "Content-Type: application/json" \
  -d '{"name": "MCP Server"}'
```

La réponse contient ta clé API (`key`) - **sauvegarde-la, elle n'est affichée qu'une fois !**

## Configuration Claude Code

Ajoute cette configuration dans ton fichier `~/.claude/settings.local.json` :

```json
{
  "mcpServers": {
    "instablog": {
      "command": "node",
      "args": ["/chemin/vers/instablog/mcp-server/dist/index.js"],
      "env": {
        "INSTABLOG_API_URL": "http://localhost:8000",
        "INSTABLOG_API_KEY": "ib_xxxxxxxxxxxxx"
      }
    }
  }
}
```

**Pour la production :**
```json
{
  "mcpServers": {
    "instablog": {
      "command": "node",
      "args": ["/chemin/vers/instablog/mcp-server/dist/index.js"],
      "env": {
        "INSTABLOG_API_URL": "https://api.instablog.so",
        "INSTABLOG_API_KEY": "ib_xxxxxxxxxxxxx"
      }
    }
  }
}
```

Redémarre Claude Code après avoir ajouté la configuration.

## Tools disponibles

### Auth
| Tool | Description |
|------|-------------|
| `instablog_auth_status` | Vérifier si l'API key est valide |

### Sites
| Tool | Description |
|------|-------------|
| `instablog_list_sites` | Lister mes sites |
| `instablog_select_site` | Sélectionner un site actif |
| `instablog_get_site` | Détails du site sélectionné |

### Posts (Articles)
| Tool | Description |
|------|-------------|
| `instablog_list_posts` | Lister les posts (paginé) |
| `instablog_list_all_posts` | Récupérer TOUS les posts |
| `instablog_get_post` | Détails d'un post (avec contenu HTML) |
| `instablog_create_post` | Créer un post |
| `instablog_update_post` | Modifier un post |
| `instablog_delete_post` | Supprimer un post |
| `instablog_set_post_tags` | Définir les tags d'un post |

### Tags & Catégories
| Tool | Description |
|------|-------------|
| `instablog_list_tags` | Lister les tags |
| `instablog_list_all_tags` | Tous les tags |
| `instablog_create_tag` | Créer un tag |
| `instablog_update_tag` | Modifier un tag (nom, description, SEO) |
| `instablog_list_categories` | Lister les catégories |
| `instablog_list_all_categories` | Toutes les catégories |
| `instablog_create_category` | Créer une catégorie |
| `instablog_update_category` | Modifier une catégorie |
| `instablog_generate_categories` | Générer des catégories via IA |

### Topics (Idées d'articles)
| Tool | Description |
|------|-------------|
| `instablog_list_topics` | Lister les topics |
| `instablog_list_all_topics` | Tous les topics |
| `instablog_get_topic` | Détails d'un topic |
| `instablog_create_topic` | Créer un topic |
| `instablog_update_topic` | Modifier un topic |
| `instablog_delete_topic` | Supprimer un topic |
| `instablog_generate_topics` | Générer des topics via IA/concurrents/news |
| `instablog_generate_post_from_topic` | Créer un article depuis un topic |
| `instablog_clear_all_topics` | Supprimer tous les topics |

### Génération de contenu
| Tool | Description |
|------|-------------|
| `instablog_generate_post_content` | Lancer la génération IA |
| `instablog_generation_status` | Statut de la génération |
| `instablog_stop_generation` | Arrêter la génération |
| `instablog_force_stop_generation` | Forcer l'arrêt |
| `instablog_chat_with_post` | Modifier le contenu via chat IA |
| `instablog_revert_chat_modification` | Annuler la dernière modif chat |
| `instablog_generate_faq` | Générer FAQ pour un post |

### Audit
| Tool | Description |
|------|-------------|
| `instablog_audit_post` | Auditer un article |
| `instablog_get_post_score` | Score dimensionnel |
| `instablog_fix_audit_issues` | Auto-fix des problèmes |
| `instablog_rollback_audit_fixes` | Annuler les fixes |
| `instablog_bulk_audit` | Audit en masse |
| `instablog_get_audit_metrics` | Métriques globales |

## Exemples d'usage

### Reviewer tous les articles pour les duplications
```
Liste tous mes articles et analyse si certains ont des titres ou contenus similaires
```

### Vérifier le SEO de tous les articles
```
Liste tous mes articles publiés et vérifie que chacun a une meta description,
un meta title, et des headings corrects
```

### Ajouter des métadonnées SEO aux tags/catégories
```
Liste toutes mes catégories et ajoute une description et meta description
pour celles qui n'en ont pas, selon les best practices SEO
```

### Auditer et corriger les articles
```
Audite tous mes articles publiés et applique les corrections automatiques
pour les problèmes détectés
```

### Générer des topics et lancer des générations
```
Génère 10 idées d'articles sur le thème "productivité" puis crée les articles correspondants
```

### Vérifier les liens cassés
```
Liste tous mes articles et vérifie que les liens externes ne retournent pas de 404
```

## Variables d'environnement

| Variable | Description | Défaut |
|----------|-------------|--------|
| `INSTABLOG_API_URL` | URL de l'API | `https://api.instablog.so` |
| `INSTABLOG_API_KEY` | Clé API (obligatoire) | - |
| `INSTABLOG_SITE_ID` | Site ID par défaut | - |

## API Keys

Les clés API :
- Commencent par `ib_`
- N'expirent pas (sauf si configuré)
- Peuvent être révoquées à tout moment
- Sont stockées hashées (SHA-256) côté serveur

### Endpoints API Keys

```bash
# Créer une clé
POST /v1/api-keys
Body: { "name": "My Key", "scopes": [], "expiresAt": null }

# Lister les clés
GET /v1/api-keys

# Révoquer une clé
DELETE /v1/api-keys/:id
```