- Plus Tard
Plus Tard MCP
Connectez votre assistant IA (Claude, Cursor, n8n…) à Plus Tard pour planifier vos publications Facebook, Instagram, LinkedIn, X/Twitter, TikTok, Threads, Bluesky et Google My Business par simple conversation.
Production endpoint : https://mcp.plus-tard.com/mcp/
Documentation utilisateur : https://plus-tard.com/api-mcp
Démo en 30 secondes
Vous : « Programme un post Facebook sur ma page Boréales demain à 10h : "Hello le monde !" »
Claude appelle automatiquement :
list_accounts→ trouve l'identifiant Facebook de "Boréales"schedule_post(provider="facebook", page_id="…", planned_at="2026-05-05T10:00:00Z", text="Hello le monde !")Plus Tard : ✅ Post #1432 planifié pour le 05/05/2026 à 10h00.
Tools (5)
| Tool | Description |
|---|---|
validate_api_key | Vérifie qu'une clef API est active et retourne ses métadonnées. |
list_accounts | Liste tous les comptes réseaux sociaux connectés à Plus Tard. |
schedule_post | Planifie un post sur un seul réseau (1 appel = 1 réseau). |
register_user | Crée un nouvel utilisateur et retourne une URL OAuth. |
get_user | Détail d'un utilisateur : providers connectés et sous-comptes. |
Resources (2)
| URI | Contenu |
|---|---|
plus-tard://accounts | Liste JSON des comptes connectés. |
plus-tard://users/{id} | Détail JSON d'un utilisateur. |
Installation côté client
Claude Desktop
Ajoutez à ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) :
{
"mcpServers": {
"plus-tard": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mcp.plus-tard.com/mcp/",
"--header",
"X-Api-Key:${PLUS_TARD_TOKEN}"
],
"env": {
"PLUS_TARD_TOKEN": "your_plus_tard_api_key"
}
}
}
}
Claude Code (CLI)
claude mcp add plus-tard \
--transport http https://mcp.plus-tard.com/mcp/ \
--header "X-Api-Key: your_plus_tard_api_key"
Claude.ai (web)
Settings → Connectors → Add custom connector — URL https://mcp.plus-tard.com/mcp/, header X-Api-Key: your_key.
Cursor / n8n
Mêmes URL et header. Voir la doc complète.
Self-host (pour développeurs)
Stack
- Python 3.12 · FastAPI ·
mcp[fastapi](Streamable HTTP transport) - httpx · pydantic v2 · pydantic-settings
- pytest · pytest-asyncio · respx
Architecture
Client (Claude/Cursor/n8n)
│ Streamable HTTP + X-Api-Key header
▼
MCP server (this repo)
│ X-Api-Key forwarded as-is
▼
Plus Tard Symfony API
Chaque requête MCP arrive avec X-Api-Key, qui est propagé tel quel à
l'API Plus Tard. Pas de session, pas de stockage côté serveur — chaque
client utilise sa propre clef.
Développement local
git clone https://github.com/<votre-org>/plus-tard-mcp.git
cd plus-tard-mcp
python3.12 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
cp .env.example .env
# Édite .env : PLUS_TARD_BASE_URL=https://plus-tard.com
uvicorn main:app --reload --port 8001
Le serveur écoute sur http://127.0.0.1:8001/mcp/. Test rapide avec le
MCP Inspector :
npx @modelcontextprotocol/inspector
# Transport: Streamable HTTP
# URL: http://127.0.0.1:8001/mcp/
# Header: X-Api-Key = ta_clef_plus_tard
Tests
pytest
# 24 passed
Déploiement Docker (production)
Le dépôt fournit Dockerfile + docker-compose.yml prêts pour un VPS
avec nginx-proxy +
acme-companion :
sudo docker compose up -d --build
Voir deploy/README.md pour le détail (snippet
nginx-proxy SSE-friendly, gestion TLS Let's Encrypt, mise à jour).
Configuration
| Variable | Description | Défaut |
|---|---|---|
PLUS_TARD_BASE_URL | URL de base de l'API Plus Tard | (requis) |
MCP_HOST | Bind host pour uvicorn | 0.0.0.0 |
MCP_PORT | Bind port pour uvicorn | 8001 |
L'authentification se fait par requête via le header X-Api-Key —
aucun token n'est stocké côté serveur.
Hosts autorisés
Le SDK MCP active une protection anti-DNS rebinding qui n'autorise que les hôtes whitelistés. Les hôtes par défaut sont :
mcp.plus-tard.comlocalhost,127.0.0.1(pour le dev)
Pour ajouter votre propre domaine, éditez la liste dans main.py
(TransportSecuritySettings.allowed_hosts).
Structure du projet
.
├── main.py # FastAPI + FastMCP + middleware X-Api-Key
├── app/
│ ├── config.py # Settings via pydantic-settings
│ ├── auth/ # Dependency X-Api-Key (réutilisable hors MCP)
│ ├── models/ # Schémas pydantic v2 (post, account, user)
│ ├── services/ # PlusTardClient async (httpx)
│ └── tools/ # 5 tools métier (str → str)
├── tests/ # 24 tests pytest-asyncio
├── deploy/
│ ├── README.md # Guide déploiement VPS
│ ├── vhost.d/ # Snippet nginx-proxy SSE
│ └── twig/ # Template Symfony pour la doc utilisateur
├── docs/index.html # Doc utilisateur statique (HTML)
├── Dockerfile
├── docker-compose.yml
└── pyproject.toml
Sécurité
- HTTPS uniquement en production (TLS via Let's Encrypt).
- Pas de log du contenu des posts ni des tokens API.
- Anti-DNS rebinding via
TransportSecuritySettingsdu SDK MCP. - Multi-tenancy isolée : chaque requête est traitée avec son propre client httpx, fermé en fin de requête (pas de pooling cross-user).
- Si vous suspectez qu'une clef a fuité, révoquez-la depuis votre espace Plus Tard.
Roadmap
- Logging structuré (JSON, sans tokens ni contenus)
- Rate limiting par clef API
- Métriques Prometheus
- OAuth flow pour les connecteurs (au lieu d'une clef API copy-paste)
- Support
completion/completeMCP pour suggestions depage_id(en attente d'un SDK Python qui exposeToolReference)
Idées et contributions bienvenues — ouvrez une issue ou une PR.
Liens utiles
- Documentation utilisateur
- API Plus Tard (v1.2)
- Spécification MCP
- MCP Inspector
- mcp-remote (pont stdio↔HTTP pour Claude Desktop)
License
MIT © 2026 Plus Tard — Boréales Créations.
Made with ❤️ in France.
Server Config
{
"mcpServers": {
"plus-tard": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mcp.plus-tard.com/mcp/",
"--header",
"X-Api-Key:${PLUS_TARD_TOKEN}"
],
"env": {
"PLUS_TARD_TOKEN": "your_plus_tard_api_key"
}
}
}
}