clicknglide-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@clicknglide-mcp show me the signups for tomorrow"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
clicknglide-mcp
An unofficial local MCP server (stdio) for Click n' Glide, the online planning tool used by gliding clubs. It lets an AI assistant such as Grok Bot read and, with explicit confirmation, manage your club's planning and messages.
Not affiliated with Click n' Glide. This project is community-made and is not endorsed or supported by Click n' Glide.
What it does
Official API (
https://api.clicknglide.com, plushttps://clicknglide.com/api/forum_conversations): one tool per documented endpoint (Postman docs).Messenger (not covered by the API): drives the Click n' Glide web app (
https://app.clicknglide.com) in a headless Chromium browser with Playwright, logged in with your own account.
Related MCP server: Cloudflare Playwright MCP
Skills
Ready-made assistant skills for this connector (generic ones in English, plus an example club configuration in French) are in skills/.
Tools
Area | Tools |
Signups |
|
Daily forum |
|
Members & roles |
|
Events |
|
General forum |
|
Quota |
|
Messenger (browser) |
|
Tool descriptions are in French.
Important limits and caveats
API key: it is provided by Click n' Glide support on request, is attached to your club and grants full administrator rights. Treat it like a password.
API rate limits: 20 calls per minute and 300 per day. The server has a built-in limiter with a persistent daily counter (
state/api-usage.json); it only counts calls made through this server.Messenger: uses a headless browser with your login and password. The browser session is kept in
state/browser-profile/; delete that folder to log out. It relies on the web app's current structure and may break if Click n' Glide changes its site. Selectors live inclicknglide_mcp/selectors.pyand can be overridden instate/selectors.jsonwithout touching the code.Login safety: on a captcha, 2FA prompt, wrong password or too many attempts, the server stops with an explicit error. It never tries to bypass them.
confirm: trueguard: every tool that creates, updates, deletes or sends requiresconfirm: true. Without it, the tool only returns a preview (the exact request, or the resolved recipient list forsend_message) and does nothing.read_messagedoes not mark the conversation as read unlessmark_as_read: true.Actually sending a message has not been tested yet. Filling in the compose form was tested (stopping before the send button). Try your first real send with a short message to yourself.
Installation
Requires Python 3.11+.
git clone https://github.com/NicolasMassart/clicknglide-mcp.git
cd clicknglide-mcp
python3 -m venv .venv
.venv/bin/pip install -e .
.venv/bin/python -m playwright install --with-deps chromium # --with-deps installs system libraries on LinuxAdd it to Grok Bot (local stdio connector)
command:
/absolute/path/to/clicknglide-mcp/.venv/bin/pythonargs:
["-m", "clicknglide_mcp"]environment variables:
Variable | Required for | Description |
| API tools | Club API key from Click n' Glide support |
| Messenger tools | Your Click n' Glide login email |
| Messenger tools | Your Click n' Glide password |
| optional | Where the browser session, counter and debug screenshots go (default: |
Optional: CLICKNGLIDE_SELECTORS_FILE (selector overrides) and CLICKNGLIDE_LOG_LEVEL (logs go to stderr).
Secrets are read from the environment at call time and are never written to disk or logged. The server starts without them; the affected tools return a clear error. On failure, debug screenshots may be saved in state/debug/; they can contain your club's data.
Quick test
.venv/bin/python tests/smoke_client.py # tools/list + preview, no API call
.venv/bin/python tests/smoke_client.py --api # also 3 read-only API calls
.venv/bin/python tests/smoke_client.py --messenger # also read-only messenger listingEn français
Serveur MCP local (stdio) non officiel pour Click n' Glide, l'outil de planning des clubs de vol à voile. Ce projet n'est pas affilié à Click n' Glide.
Ce qu'il fait : il expose toutes les fonctions de l'API officielle (inscriptions, forum du jour, membres, rôles, événements, forum général). Il donne aussi accès à la messagerie, qui n'est pas dans l'API, via un navigateur headless connecté avec votre propre compte :
list_messages,read_message,list_recipientsetsend_message.Clé API : elle est fournie par le support Click n' Glide, rattachée au club, et donne des droits d'administrateur. Elle doit rester secrète.
Limites de l'API : 20 appels par minute et 300 par jour. Un limiteur intégré tient un compteur journalier persistant.
Messagerie : elle passe par un navigateur headless et peut casser si Click n' Glide modifie son site. Les sélecteurs peuvent être ajustés dans
state/selectors.json. En cas de captcha ou de 2FA, le serveur s'arrête avec une erreur, sans jamais contourner.Garde-fou
confirm: true: toute création, modification, suppression ou tout envoi exigeconfirm: true. Sinon, l'outil renvoie seulement un aperçu.L'envoi réel d'un message n'a pas encore été testé : seul le remplissage du formulaire l'a été. Faites un premier essai vers vous-même.
Installation :
python3 -m venv .venv, puis.venv/bin/pip install -e ., puis.venv/bin/python -m playwright install --with-deps chromium.Skills : des skills prêtes à l'emploi sont dans
skills/, génériques en anglais et exemple de club en français.Ajout dans Grok Bot comme connecteur local stdio :
command :
/chemin/absolu/clicknglide-mcp/.venv/bin/pythonargs :
["-m", "clicknglide_mcp"]variables :
CLICKNGLIDE_API_KEY,CLICKNGLIDE_LOGIN,CLICKNGLIDE_PASSWORDet, en option,CLICKNGLIDE_STATE_DIR.
License
MIT © 2026 Nicolas Massart
Available Tools
28 toolsadd_freetext_signupB
Ajoute une ligne de texte libre dans un champ « texte libre » d'une journée (ex. un vol d'initiation « M. Dupont 15h 30 min »). Sans confirm=true : aperçu seulement.
Inputs: date (required), text (required), field_id (required), confirm.
add_freetext_signups_bulkA
Ajoute plusieurs lignes de texte libre d'un coup dans un champ « texte libre » d'une journée. Sans confirm=true : aperçu seulement.
Inputs: date (required), texts (required), field_id (required), confirm.
add_signupB
Inscrit un membre (user_id) dans un champ « membre » (field_id) d'une journée, avec paramètre et commentaire optionnels. Peut envoyer des emails automatiques (confirmation, liste d'attente). Sans confirm=true : aperçu seulement.
Inputs: date (required), user_id (required), field_id (required), confirm, +2 more.
create_eventA
Crée un événement à une date (AAAA-MM-JJ) avec un titre et une durée en jours. Sans confirm=true : aperçu seulement.
Inputs: date (required), title (required), confirm, duration.
create_userB
Crée un membre (un email d'activation lui est envoyé). roles = liste d'identifiants de rôles (voir get_roles). Sans confirm=true : aperçu seulement.
Inputs: name (required), email (required), first_name (required), roles, +3 more.
delete_all_field_signupsA
Supprime TOUTES les inscriptions d'un champ pour une journée. send_emails (vrai par défaut) prévient chaque membre par email. Sans confirm=true : aperçu seulement.
Inputs: date (required), field_id (required), confirm, send_emails.
delete_daily_forum_messageA
Supprime un message du forum du jour. Sans confirm=true : aperçu seulement.
Inputs: message_id (required), confirm.
delete_eventA
Supprime un événement. delete_all=true supprime toutes les occurrences d'un événement sur plusieurs jours. Sans confirm=true : aperçu seulement.
Inputs: event_id (required), confirm, delete_all.
delete_signupA
Supprime une inscription par son identifiant. send_emails (vrai par défaut) prévient les membres concernés par email. Sans confirm=true : aperçu seulement.
Inputs: signup_id (required), confirm, send_emails.
delete_signup_by_userA
Supprime l'inscription d'un membre dans un champ donné d'une journée. send_emails (vrai par défaut) prévient par email. Sans confirm=true : aperçu seulement.
Inputs: date (required), user_id (required), field_id (required), confirm, +1 more.
delete_userA
Supprime un membre du club. Irréversible. Sans confirm=true : aperçu seulement.
Inputs: user_id (required), confirm.
get_api_usageA
Indique la consommation locale du quota API (appels aujourd'hui / 300, dernière minute / 20). N'appelle pas l'API.
Inputs: no named parameters.
get_daily_forumA
Lit les messages du forum d'une journée (AAAA-MM-JJ). Lecture seule (1 appel API).
Inputs: date (required).
get_forum_conversationsB
Lit les conversations du forum général du club avec leurs messages. Lecture seule (1 appel API).
Inputs: no named parameters.
get_next_eventsA
Liste les prochains événements du club, regroupés par date. Lecture seule (1 appel API).
Inputs: no named parameters.
get_rolesA
Liste les rôles du club (identifiant et nom). Lecture seule (1 appel API).
Inputs: no named parameters.
get_signupsA
Liste les champs du planning et les inscriptions d'une journée (date AAAA-MM-JJ). Lecture seule (1 appel API).
Inputs: date (required).
get_signups_rangeB
Liste les inscriptions sur une plage de dates (AAAA-MM-JJ, bornes incluses). Lecture seule (1 appel API).
Inputs: end_date (required), start_date (required).
get_usersA
Liste les membres du club (nom, email, téléphone, rôles, dernière visite). Données personnelles. Lecture seule (1 appel API).
Inputs: no named parameters.
list_messagesA
Liste les conversations de la messagerie Click n' Glide (messages envoyés aussi par email), les plus récentes d'abord. folder : « inbox » (reçus), « sent » (où j'ai écrit) ou « all ». Paginé (page, page_size ≤ 100). N'ouvre aucune conversation : rien n'est marqué comme lu. Utilise le navigateur headless (pas le quota API).
Inputs: page, folder, page_size, unread_only.
list_recipientsB
Liste les destinataires sélectionnables dans la messagerie : membres (id, nom, rôles) et groupes (« Tous » et un groupe par rôle, avec le nombre de membres).
Inputs: no named parameters.
post_daily_forum_messageB
Publie un message dans le forum d'une journée, au nom du membre user_id. Sans confirm=true : aperçu seulement.
Inputs: date (required), text (required), user_id (required), confirm.
read_messageA
Lit une conversation complète de la messagerie (tous les messages, du plus ancien au plus récent). Par défaut ne la marque pas comme lue ; mark_as_read=true l'ouvre dans l'application pour la marquer lue.
Inputs: conversation_id (required), include_html, mark_as_read.
send_messageA
Envoie un nouveau message via la messagerie Click n' Glide (il part aussi par email). Destinataires : recipient_ids et/ou recipient_names (prénom nom) et/ou groups (clés de list_recipients, « * » = tous). Sans confirm=true : renvoie seulement l'aperçu avec la liste résolue des destinataires, rien n'est envoyé.
Inputs: text (required), subject (required), groups, confirm, +2 more.
update_daily_forum_messageA
Modifie le texte d'un message du forum du jour. Sans confirm=true : aperçu seulement.
Inputs: text (required), message_id (required), confirm.
update_eventA
Modifie un événement (identifiant = fieldId renvoyé par get_next_events). La doc n'illustre que le titre ; date et durée sont transmises si fournies. Sans confirm=true : aperçu seulement.
Inputs: event_id (required), date, title, confirm, +1 more.
update_signupA
Modifie une inscription existante (paramètre et/ou commentaire). Peut déplacer des membres en liste d'attente et envoyer des emails. Sans confirm=true : aperçu seulement.
Inputs: signup_id (required), confirm, signup_comment, signup_parameter.
update_userA
Modifie un membre (prénom, nom, téléphone, rôles). roles REMPLACE la liste complète des rôles (identifiants, voir get_roles). Sans confirm=true : aperçu seulement.
Inputs: user_id (required), name, roles, confirm, +2 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 28 tools
Most tools target distinct resources and actions, but there is clustering: delete_signup vs delete_signup_by_user vs delete_all_field_signups, and get_daily_forum vs get_forum_conversations vs list_messages require careful reading. The descriptions do help clarify boundaries, keeping misselection risk moderate.
Consistent snake_case verb_noun pattern overall (get_/create_/update_/delete_/add_/list_/send_). Minor deviations: reads mix get_* and list_*, and creation mixes add_* (signups) with create_* (users, events).
28 tools is on the heavy side and exceeds the 15-tool comfort zone, but the surface spans six real sub-domains (forum, signups, users, events, messaging, API usage), so it is defensible rather than bloated. A few delete/add variants could likely be consolidated.
Strong CRUD coverage for users, events, and signups, plus read/write for daily forum and full messaging (list/read/recipients/send). Minor gaps: general forum conversations are read-only and roles are read-only, but these are reasonable and workaroundable.
Maintenance
Related MCP Connectors
Control a real browser from AI agents: navigate, click, type, screenshot, read the page.
AI task cockpit: an agent does your tasks and asks before anything irreversible.
Stealth web automation for AI agents. Login, signup, navigate, screenshot.
Stealth web automation for AI agents. Login, signup, navigate, screenshot.
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to control a browser through Playwright automation tools, allowing them to perform web tasks like navigation, typing, clicking, and taking screenshots. Deployed on Cloudflare Workers and compatible with various AI platforms including Claude Desktop and VS Code.Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to control a browser through Playwright automation tools deployed on Cloudflare Workers. Supports web automation tasks like navigation, typing, clicking, and taking screenshots through natural language commands.Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables an AI assistant to run tasks on a hosted cloud desktop that belongs to the user, with a browser that stays signed in to their accounts, its own email address, and its own files, so it can fill forms, download and edit documents, and carry out long jobs that outlast a chat reply, returning answers with screenshots and recordings. It also exposes tools for checking current activity, task history, sent mail, interrupting a run, and saving or recalling notes, reached over OAuth-authenticated Streamable HTTP or a stdio bridge.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to drive your own signed-in ChatGPT web account — asking questions, continuing chats, attaching files, toggling thinking or web search, creating images, transcribing recordings of any length, reading replies aloud, and managing conversations, memories and projects. It runs against a local Chrome tab on chatgpt.com and reports live progress and step-named errors back to the client.2MIT