mcp-plus-tard

mcp-plus-tard

Schedule posts around social networks

Category
Visit Server

README

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-Keyaucun 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


License

MIT © 2026 Plus Tard — Boréales Créations.

Made with ❤️ in France.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured