Mcp Plus Tard

by boreales

168 downloads
Not rated
GitHub

Description

# Plus Tard MCP [![Python](https://img.shields.io/badge/python-3.12+-3776ab.svg)](https://www.python.org/) [![FastAPI](https://img.shields.io/badge/FastAPI-0.115+-009688.svg)](https://fastapi.tiangolo.com/)…

About

# Plus Tard MCP [![Python](https://img.shields.io/badge/python-3.12+-3776ab.svg)](https://www.python.org/) [![FastAPI](https://img.shields.io/badge/FastAPI-0.115+-009688.svg)](https://fastapi.tiangolo.com/) [![MCP](https://img.shields.io/badge/MCP-Streamable_HTTP-7c3aed.svg)](https://modelcontextprotocol.io/)…

Details

Author
boreales
Downloads
168
Categories
Other

- Five MCP tools: validate_api_key, list_accounts, schedule_post, register_user, get_user
- Two MCP resources: plus-tard://accounts and plus-tard://users/{id}
- Streamable HTTP transport via FastAPI
- Authentication per-request via X-Api-Key header (no server-side token storage)
- Self-hostable with Docker and nginx-proxy
- Anti-DNS rebinding protection

Setting up with Highlight

This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:

  1. Download and install Highlight from highlightai.com/download
  2. Navigate to the plugins tab and select "Add Custom Plugin"
  3. Configure the plugin with the settings below
    Plugin Name Mcp Plus Tard
    Command (node, npx, python, etc.)

    Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.

  4. Enable "Start Automatically" if you want the plugin to start when Highlight launches

From the repository

Add the production endpoint https://mcp.plus-tard.com/mcp/ as a custom connector in Claude Desktop, Claude Code, Claude.ai, Cursor, or n8n. Authentication uses the X-Api-Key header with your Plus Tard API key. For development or self-hosting, clone the repository, set environment variables, and run with uvicorn.

validate_api_key

Vérifie que la clef API Plus Tard fournie est valide. Utilise ce tool si l'utilisateur veut diagnostiquer un problème d'authentification ou simplement confirmer que sa clef est active. Retourne aussi la date de création et d'expiration de la clef.

list_accounts

Liste tous les comptes réseaux sociaux connectés à Plus Tard. Utilise ce tool pour savoir quels comptes sont disponibles avant de planifier un post.

schedule_post

Planifie un post sur un seul réseau social via Plus Tard. Utilise ce tool quand l'utilisateur veut programmer, publier ou scheduler du contenu sur Facebook, Instagram, LinkedIn, X/Twitter, TikTok, Threads, Bluesky ou Google My Business. IMPORTANT : - Un appel = un réseau. Pour publier sur plusieurs réseaux, appelle ce tool plusieurs fois. - AVANT D'APPELER ce tool : appelle d'abord list_accounts (ou get_user pour la vue détaillée) pour obtenir le page_id correct. - Le `page_id` à passer ici est l'identifiant EXTERNE du compte sur le réseau social (champ `accountId` / `page_id` retourné par list_accounts, ex. "1097653263583548"), PAS l'identifiant interne Plus Tard (champ `id` / `internal_id`, ex. "34"). Confondre les deux crée un post mal rattaché et apparaissant comme "compte déconnecté". - Pour les providers sans sous-comptes (Twitter, LinkedIn, TikTok, Threads, Bluesky, Google), utilise le `providerId` retourné par get_user. - Instagram exige au moins une image ou vidéo dans image_posts. - planned_at doit être une date/heure UTC future au format ISO8601 (ex: 2026-05-01T10:00:00Z).

register_user

Crée un nouvel utilisateur Plus Tard et retourne une URL OAuth permettant de connecter ses comptes de réseaux sociaux. Utilise ce tool quand l'utilisateur veut onboarder un nouveau client ou se créer un compte. Email et langue sont optionnels — la langue par défaut est 'fr'. L'URL OAuth doit être ouverte dans un navigateur par l'utilisateur final pour qu'il connecte ses réseaux. Elle est valable 24h.

get_user

Récupère les informations d'un utilisateur Plus Tard par son id, incluant ses providers connectés (Facebook, Instagram, LinkedIn, etc.) et leurs sous-comptes (pages Facebook, comptes Instagram pro...). Utilise ce tool avant schedule_post pour identifier le bon page_id à utiliser : pour Facebook/Instagram, c'est l'id du sous-compte (providers[].accounts[].id) ; pour les autres providers (LinkedIn, Twitter, TikTok, Threads, Bluesky), c'est providers[].providerId.

Claude Desktop / Cursor

Paste into your MCP client config file to install this server.

{
    "mcpServers": {
        "mcp plus tard": {
            "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"
                }
            }
        }
    }
}

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"
        }
    }
}

Plus Tard MCP

Python
FastAPI
MCP
License

> 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 :
> 1. list_accounts → trouve l'identifiant Facebook de "Boréales"
> 2. 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.com
- localhost, 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 TransportSecuritySettings du 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/complete MCP pour suggestions de page_id
(en attente d'un SDK Python qui expose ToolReference)

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.

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.