Aperçu pour développeurs

Serveur MCP Sandtime.io

Le Model Context Protocol (MCP) permet aux clients d’IA comme Claude Code et Codex de communiquer directement avec Sandtime.io. Connectez-vous une fois et créez, consultez et présentez vos saisies de temps depuis les outils que vous utilisez déjà.

Qu’est-ce que le MCP ?

Le Model Context Protocol est un standard ouvert pour connecter les assistants d’IA à des outils et des données externes. Le serveur MCP Sandtime.io expose votre espace de suivi du temps - activités, projets, rapports, feuilles de temps et plus encore - sous la forme d’un ensemble d’outils qu’un assistant peut appeler en votre nom.

Les actions de lecture renvoient des données propres et matérialisées, avec des durées et des heures locales formatées. Les actions destructrices, comme la suppression d’un projet ou d’un membre, sont volontairement confiées à un humain via un lien direct vers la bonne page de l’application.

Vous débutez avec l’enregistrement du temps depuis votre éditeur ? Découvrez comment les développeurs utilisent Sandtime.io au quotidien.

Vous avez besoin de HTTP classique ou de cURL ? Consultez API REST pour l’intégration de plus bas niveau.

Ce que vous pouvez demander

Parlez à votre assistant en langage naturel. Il identifie le bon utilisateur, le bon projet et les bonnes dates, puis appelle les outils à votre place.

Enregistre 8 heures sur le projet Acme pour hier.
Remplis la semaine dernière avec mes heures habituelles et ignore le jour férié.
Qu’ai-je suivi cette semaine, réparti par projet ?
Arrête mon minuteur en cours.
Génère un rapport des heures facturables par client pour le mois dernier.
Quelles semaines sont encore verrouillées sur ma feuille de temps ?

Connectez votre assistant

Chaque client ci-dessous communique avec le même serveur : seul change l’endroit où va l’entrée. Remplacez YOUR_API_KEY par votre propre clé.

Vérifiez votre forfait. L’accès au MCP peut dépendre de l’assistant et du forfait dont vous disposez, ce qui échappe à Sandtime.io. Si rien ne se connecte alors que la configuration semble correcte, commencez par vérifier ce que votre forfait autorise.

Créez d’abord une clé. Les clés se créent depuis Settings > Integrations > API dans l’application, ou depuis Settings > Integrations > MCP. Une clé n’est affichée qu’une fois, à sa création, et peut être révoquée à tout moment depuis la page API.

Claude Desktop

Claude Desktop se connecte à Sandtime.io via mcp-remote, que npx récupère à la demande, il faut donc Node sur la machine. Tout le reste tient dans un seul fichier JSON.

Ouvrez le fichier de configuration

Claude Desktop l’ouvre pour vous via Settings > Developer > Edit Config. Si ce menu est absent ou si le fichier ne s’ouvre pas, le chemin direct vers le fichier se trouve ci-dessous.

macOS
~/Library/Application Support/Claude/claude_desktop_config.json
Windows
%APPDATA%\Claude\claude_desktop_config.json

Ajoutez le serveur

Ce fichier contient aussi le reste de vos réglages Claude Desktop, complétez-le donc plutôt que de le remplacer. L’extrait dont vous avez besoin dépend de la présence ou non d’un bloc mcpServers dans le fichier.

S’il n’y a pas encore de bloc mcpServers, ajoutez ceci comme une nouvelle clé à côté de vos autres réglages, avec une virgule entre les deux.

"mcpServers": {
  "sandtime": {
    "command": "npx",
    "args": [
      "mcp-remote",
      "https://mcp.sandtime.io/mcp",
      "--header",
      "Authorization:${AUTH}"
    ],
    "env": { "AUTH": "Bearer YOUR_API_KEY" }
  }
}

Si le bloc mcpServers existe déjà, collez ceci à l’intérieur, avec une virgule avant tout serveur déjà présent.

"sandtime": {
  "command": "npx",
  "args": [
    "mcp-remote",
    "https://mcp.sandtime.io/mcp",
    "--header",
    "Authorization:${AUTH}"
  ],
  "env": { "AUTH": "Bearer YOUR_API_KEY" }
}

Un piège sous Windows

Sous Windows, vérifiez la ligne Authorization:${AUTH} ci-dessus pour un espace superflu. Un espace après les deux-points casse la connexion, et Claude Desktop renvoie alors une erreur d’authentification (401) sans indice sur la cause.

Redémarrez, puis vérifiez

Les serveurs MCP ne se chargent qu’au démarrage de l’application et ne sont plus jamais vérifiés ensuite, donc le nouveau ne fonctionnera pas tant que vous n’aurez pas quitté l’application complètement et rouvert, pas seulement fermé la fenêtre. Demandez-lui ensuite quelque chose de simple sur l’application, par exemple vos projets ou vos heures suivies. Une réponse sensée signifie que la clé, l’URL et l’en-tête sont tous corrects.

Une session Claude Code lancée depuis l’application de bureau lit ce même fichier : une seule entrée couvre donc le chat et l’onglet Code. La CLI autonome dans votre terminal ne le lit pas et dispose de sa propre section ci-dessous.

Claude Code CLI

Il s’agit de la CLI dans votre terminal. Une session Claude Code lancée depuis l’application de bureau lit la configuration du bureau : utilisez alors la section Claude Desktop ci-dessus. Ce qui distingue les options ci-dessous, c’est leur portée.

Un fichier de projet destiné à être commité devrait référencer une variable d’environnement plutôt que contenir une clé littérale. Définissez SANDTIME_API_KEY localement et utilisez Bearer ${SANDTIME_API_KEY} pour Authorization. Une vraie clé ne devrait jamais se retrouver dans un dépôt, et si cela arrive, révoquez-la et créez-en une nouvelle.

Par utilisateur

Écrit la configuration dans ~/.claude.json (~ correspond à %USERPROFILE% sous Windows), le serveur vous attend donc dans chaque projet ouvert sur cette machine.

claude mcp add --transport http --scope user sandtime https://mcp.sandtime.io/mcp --header "Authorization: Bearer YOUR_API_KEY"

Par projet

La même commande avec --scope project, qui écrit .mcp.json dans le répertoire courant : Claude Code ne le trouve donc que dans ce projet. Ce fichier est destiné à être commité. Préférez la portée par utilisateur si vous voulez plutôt que le serveur soit disponible partout.

claude mcp add --transport http --scope project sandtime https://mcp.sandtime.io/mcp --header "Authorization: Bearer YOUR_API_KEY"

Installation manuelle

L’entrée est la même partout, seul le fichier détermine sa portée. Chacun de ces fichiers contient aussi d’autres réglages, alors complétez-le au lieu de le remplacer.

Par utilisateur (macOS, Linux)
~/.claude.json
Par utilisateur (Windows)
%USERPROFILE%\.claude.json
Par projet
.mcp.json

S’il n’y a pas encore de bloc mcpServers, ajoutez ceci comme une nouvelle clé à côté de vos autres réglages, avec une virgule entre les deux.

"mcpServers": {
  "sandtime": {
    "type": "http",
    "url": "https://mcp.sandtime.io/mcp",
    "headers": {
      "Authorization": "Bearer YOUR_API_KEY"
    }
  }
}

Si le bloc mcpServers existe déjà, collez ceci à l’intérieur, avec une virgule avant tout serveur déjà présent.

"sandtime": {
  "type": "http",
  "url": "https://mcp.sandtime.io/mcp",
  "headers": {
    "Authorization": "Bearer YOUR_API_KEY"
  }
}

Si quelque chose ne fonctionne pas, la commande claude mcp list permet de vérifier si Claude voit ce serveur et s’est connecté avec succès. C’est le moyen le plus rapide de distinguer une clé refusée d’une URL erronée. claude mcp remove sandtime retire l’entrée.

ChatGPT / Codex

Pour l’application de bureau ChatGPT, la CLI Codex et l’extension IDE, qui partagent une seule configuration. ChatGPT sur le web n’en lit rien : rien de ce qui est configuré ici n’atteint une conversation dans le navigateur.

Vous commitez le fichier du projet ? Utilisez bearer_token_env_var avec SANDTIME_API_KEY au lieu d’un en-tête littéral. Une vraie clé ne devrait jamais se retrouver dans un dépôt, et si cela arrive, révoquez-la et créez-en une nouvelle.

Connectez un MCP personnalisé

Ouvrez Settings > Plugins > MCPs et ajoutez un MCP personnalisé en choisissant Streamable HTTP plutôt que STDIO. URL ci-dessous va dans le champ d’adresse, et le nom et la valeur de l’en-tête ensemble sous Headers. Cet écran a aussi des champs Bearer token env var et Headers from environment variables, mais ceux-ci transmettent les secrets autrement, alors laissez-les vides.

URL
https://mcp.sandtime.io/mcp
Nom de l’en-tête
Authorization
Valeur de l’en-tête
Bearer YOUR_API_KEY

Enregistrez et activez

Enregistrez, redémarrez l’application, puis activez l’entrée dans la liste. Ajouter un serveur ne l’active pas. Cet écran ne propose aucune portée : l’entrée va donc toujours dans le fichier par utilisateur.

Dans config.toml, par utilisateur ou par projet

La même entrée ajoutée à la main, à la suite de ce que le fichier contient déjà. Le fichier par utilisateur fonctionne de la même façon dans l’application de bureau, la CLI et l’extension IDE. Le fichier par projet est plus restreint : il ne fonctionne que dans la CLI et l’extension IDE, seulement dans un projet de confiance.

Par utilisateur (macOS, Linux)
~/.codex/config.toml
Par utilisateur (Windows)
%USERPROFILE%\.codex\config.toml
Par projet
.codex/config.toml
[mcp_servers.sandtime]
url = "https://mcp.sandtime.io/mcp"

[mcp_servers.sandtime.http_headers]
Authorization = "Bearer YOUR_API_KEY"

Comment les fichiers se superposent

Les fichiers de projet sont lus de la racine du dépôt jusqu’à votre dossier courant, le plus proche l’emportant, avec le fichier par utilisateur en dessous de tous. Si CODEX_HOME est définie, le fichier par utilisateur s’y trouve au lieu de votre dossier personnel.

Le piège du projet non fiable

Codex ne lit les fichiers de projet que dans un projet marqué comme fiable ; dans un projet non fiable, il les ignore sans rien dire. Si un serveur n’apparaît jamais, vérifiez d’abord si le projet est fiable, avant de vérifier la configuration elle-même.

La commande codex mcp add ne sert à rien pour une clé comme celle-ci. Elle n’écrit que dans le fichier par utilisateur et ne peut pas définir d’en-tête statique, seulement le nom d’une variable d’environnement à lire ensuite. Restent donc deux voies : l’écran de l’application et le fichier.

Si le serveur ne se connecte toujours pas après cela, activer Developer mode dans les paramètres ChatGPT peut aider.

Tout autre client qui prend en charge MCP via Streamable HTTP fonctionne de la même façon, à condition de pouvoir envoyer un en-tête personnalisé. Demandez à votre assistant la liste de vos projets : si de vrais noms de projets reviennent, la connexion fonctionne.

Où ça fonctionne

Un seul serveur HTTP pour tous les outils d’IA que vous utilisez. Connectez-vous une fois et travaillez là où vous êtes déjà.

Claude Code

Ajoutez le serveur à votre fichier .mcp.json et enregistrez votre temps depuis le terminal où vous livrez votre code.

Claude Desktop

Connectez le serveur et demandez à l’application de bureau de suivre et de présenter votre temps.

Codex

Reliez le serveur à Codex et transformez vos sessions de code en enregistrements de temps propres.

N’importe quel client MCP

Tout client compatible avec le Model Context Protocol et prenant en charge les serveurs HTTP avec en-têtes personnalisés peut se connecter.

Outils disponibles

Le serveur expose plus de 30 outils couvrant l’ensemble de votre espace de travail. Les assistants les enchaînent - par exemple en identifiant l’utilisateur actuel, en vérifiant le calendrier, puis en remplissant les jours vides.

Activités

  • list_activitiesListez les saisies de temps, filtrées par utilisateur, projet ou semaine entière. Renvoie des durées et des heures locales formatées.
  • get_activityObtenez tous les détails d’une saisie de temps à partir de son identifiant.
  • create_activityEnregistrez une nouvelle saisie de temps sur un projet, avec détection automatique des chevauchements avec les saisies existantes.
  • update_activityModifiez le nom, les horaires, le projet ou le statut facturable d’une saisie de temps, ou arrêtez et reprenez un minuteur en cours.
  • delete_activitySupprimez définitivement une saisie de temps. Nécessite d’en être propriétaire ou de disposer de droits d’administrateur.
  • stop_activityArrêtez un minuteur en cours en définissant son heure de fin sur maintenant.

Projets

  • list_projectsListez les projets de votre organisation, en incluant éventuellement les projets archivés.
  • get_projectObtenez des informations détaillées sur un projet spécifique.
  • create_projectCréez un nouveau projet. Nécessite des droits d’administrateur.
  • update_projectRenommez un projet, modifiez son statut facturable par défaut, archivez-le ou modifiez ses notes.
  • delete_projectRenvoie un lien direct vers les paramètres du projet, où un humain confirme la suppression.

Membres du projet

  • list_project_membersListez les membres affectés à un projet spécifique.
  • add_project_memberRenvoie un lien direct vers la section des membres du projet, où un humain ajoute le membre.
  • remove_project_memberRenvoie un lien direct vers la section des membres du projet, où un humain supprime le membre.

Utilisateurs

  • list_usersListez les utilisateurs de votre organisation.
  • get_userObtenez des informations détaillées sur un utilisateur spécifique.
  • get_current_userObtenez l’identifiant de l’appelant, son fuseau horaire ainsi que la date et la semaine actuelles déterminées par le serveur. Généralement le premier appel d’un flux de travail.
  • create_userRenvoie un lien direct vers la page d’invitation des membres.
  • update_userRenvoie un lien direct vers la page de profil de l’utilisateur.

Organisation

  • get_organizationObtenez des informations sur votre organisation, y compris ses paramètres.
  • update_organizationRenvoie un lien direct vers la page des paramètres de l’organisation.

Calendrier

  • get_calendarObtenez un calendrier calculé côté serveur avec les jours ouvrés, les heures attendues, les week-ends et les jours fériés. La source de vérité avant d’enregistrer du temps sur plusieurs jours.

Rapports

  • list_reportsListez les rapports enregistrés dans votre organisation.
  • get_reportObtenez les détails d’un rapport spécifique.
  • create_reportConstruisez un rapport enregistré avec des dimensions, des métriques, des périodes et des filtres de projet ou de membre personnalisés.

Feuilles de temps

  • get_timesheet_statusVérifiez l’état de verrouillage des feuilles de temps pour une semaine donnée.
  • lock_timesheetVerrouillez la feuille de temps d’une semaine pour un utilisateur. Nécessite des droits d’administrateur.
  • unlock_timesheetSupprimez un verrouillage de feuille de temps existant. Nécessite des droits d’administrateur.

Demandes

  • list_requestsListez les demandes d’approbation telles que les déverrouillages de feuilles de temps et les changements de rôle. Affiche par défaut les demandes en attente.
  • request_timesheet_unlockDemandez à un administrateur de déverrouiller une semaine verrouillée afin de pouvoir modifier la feuille de temps.
  • approve_unlock_requestApprouvez une demande de déverrouillage en attente, en accordant à l’utilisateur un court délai pour modifier. Nécessite des droits d’administrateur.
  • reject_unlock_requestRejetez une demande de déverrouillage en attente. L’utilisateur en est informé.

Synthèse et analyses

  • get_time_summaryRésumez le temps suivi sur une période, regroupé par jour, semaine, mois, projet ou utilisateur.

Essayez gratuitement les fonctionnalités d’IA

Le serveur MCP et Sandbot sont gratuits pour les organisations éligibles pendant l’accès anticipé. Parlez-nous de votre équipe et nous les activerons.

Voir l’offre d’accès anticipé