Box MCP Server
Description du projet
Le serveur Box MCP est un projet Python qui s'intègre à l'API Box pour effectuer diverses opérations telles que la recherche de fichiers, l'extraction de texte, l'interrogation basée sur l'IA et l'extraction de données. Il s'appuie sur la bibliothèque box-sdk-gen
et fournit un ensemble d'outils permettant d'interagir avec les fichiers et dossiers Box.
Le protocole de contexte de modèle (MCP) est un cadre conçu pour normaliser la façon dont les modèles interagissent avec diverses sources de données et services. Dans ce projet, le MCP est utilisé pour faciliter l'intégration transparente avec l'API Box, permettant des opérations efficaces et évolutives sur les fichiers et dossiers Box. Le projet Box MCP Server vise à fournir une solution robuste et flexible pour la gestion et le traitement des données Box en utilisant des techniques avancées d'intelligence artificielle et d'apprentissage automatique.
Outils mis en œuvre
Outils de l'API Box
box_who_am_i
Obtenir vos informations d'utilisateur actuelles et vérifier l'état de la connexion.
- Retourne : Chaîne d'informations sur l'utilisateur
box_authorize_app_tool
Lance le processus d'autorisation de l'application Box.
- Retourne : Message d'état de l'autorisation
box_search_tool
Recherche de fichiers dans Box.
- Paramètres
query
(str) : La requête à rechercher.file_extensions
(List[str], optionnel) : Extensions de fichiers pour filtrer les résultats.where_to_look_for_query
(Liste[str], optionnel) : Emplacements à rechercher (par exemple, NAME, DESCRIPTION, FILE_CONTENT, COMMENTS, TAG).ancestor_folder_ids
(List[str], optionnel) : Liste d'identifiants de dossiers dans lesquels effectuer la recherche.
- Résultats : Les résultats de la recherche sous la forme d'une liste de noms de fichiers et d'ID séparés par de nouvelles lignes.
box_read_tool
Lit le contenu textuel d'un fichier Box.
Paramètres :
file_id
(str) : ID du fichier à lire
Retourne : Contenu du fichier
box_ask_ai_tool
Interroge Box AI sur un fichier.
Paramètres :
file_id
(str) : ID du fichierprompt
(str) : Question pour l'IA
Retourne : Réponse de l'IA
box_hubs_ask_ai_tool
Interroger l'IA de Box à propos d'un hub. Il n'y a actuellement aucun moyen via l'API de découvrir l'ID d'un hub, vous devez donc connaître l'ID pour utiliser cet outil. Nous corrigerons ce problème à l'avenir.
Paramètres :
hubs_id
(str) : ID du hubprompt
(str) : Question pour l'IA
Retourne : Réponse de l'IA
box_search_folder_by_name
Recherche un dossier par son nom.
Paramètres :
nom_du_dossier
(str) : Nom du dossier
Retourne : ID du dossier
box_ai_extract_data
Extrait les données d'un fichier à l'aide de l'IA.
Paramètres :
file_id
(str) : ID du fichierfields
(str) : Champs à extraire
Retourne : Données extraites au format JSON
box_list_contenu_de_dossier_par_identifiant_de_dossier
Liste le contenu des dossiers.
Paramètres :
folder_id
(str) : ID du dossieris_recursive
(bool) : Indique si la liste doit être récursive
Retourne : Contenu du dossier au format JSON avec l'identifiant, le nom, le type et la description
box_manage_folder_tool
Créer, mettre à jour ou supprimer des dossiers dans Box.
Paramètres :
action
(str) : Action à effectuer : "créer", "supprimer" ou "mettre à jour"folder_id
(chaîne, facultatif) : ID du dossier (obligatoire pour la suppression/mise à jour)name
(str, optionnel) : Nom du dossier (obligatoire pour la création, facultatif pour la mise à jour)parent_id
(chaîne, facultatif) : ID du dossier parent (obligatoire pour la création, facultatif pour la mise à jour)description
(str, optionnel) : Description du dossier (facultatif pour la mise à jour)recursive
(bool, optionnel) : Indique s'il faut supprimer le dossier de manière récursive (facultatif pour la suppression)
Retourne : Message d'état avec les détails du dossier
box_upload_file_tool
=======
- Paramètres
file_id
(str) : L'ID du fichier à lire.
- Retourne : Le contenu textuel du fichier.
box_ask_ai_tool
Interroge Box AI sur un seul fichier.
- Paramètres
file_id
(str) : L'identifiant du fichier.prompt
(str) : Requête ou instruction pour l'IA.
- Retourne : Réponse de l'IA basée sur le contenu du fichier.
box_ask_ai_tool_multi_file
Demande à l'IA de la boîte d'utiliser plusieurs fichiers.
- Paramètres
file_ids
(List[str]) : Liste d'identifiants de fichiers.prompt
(str) : Instruction pour l'IA basée sur le contenu agrégé.
- Retourne : Réponse générée par l'IA en tenant compte de tous les fichiers fournis.
box_search_folder_by_name
Localise un dossier dans Box en fonction de son nom.
- Paramètres
nom_dossier
(str) : Nom du dossier.
- Retourne : Informations (nom et ID) sur les dossiers correspondants.
box_ai_extract_data
Extrait des champs spécifiques d'un fichier à l'aide de l'IA.
- Paramètres
file_id
(str) : ID du fichier.fields
(str) : Liste de champs à extraire, séparés par des virgules.
- Retourne : Les données extraites au format JSON.
box_list_folder_content_by_folder_id
Liste le contenu d'un dossier en utilisant son identifiant.
- Paramètres
folder_id
(str) : ID du dossier.is_recursive
(bool, optionnel) : Indique si le contenu doit être listé de manière récursive.
- Retourne : Le contenu du dossier sous la forme d'une chaîne JSON comprenant l'identifiant, le nom, le type et la description.
box_manage_folder_tool
Créer, mettre à jour ou supprimer un dossier dans Box.
- Paramètres
action
(str) : Action à effectuer : "créer", "supprimer" ou "mettre à jour".folder_id
(chaîne, facultatif) : ID du dossier (requis pour la suppression et la mise à jour).name
(str, optionnel) : Nom du dossier (obligatoire pour la création, facultatif pour la mise à jour).parent_id
(chaîne, facultatif) : ID du dossier parent (la valeur par défaut est "0" pour la racine).description
(chaîne, facultatif) : Description du dossier (pour la mise à jour).recursive
(bool, optionnel) : Pour la suppression récursive.
- Retourne : Message d'état avec les détails du dossier.
box_upload_file_from_path_tool
Chargement d'un fichier dans Box à partir d'un chemin d'accès au système de fichiers local.
- Paramètres
chemin_fichier
(chaîne) : Chemin d'accès au fichier local.folder_id
(chaîne, facultatif) : ID du dossier de destination (la valeur par défaut est "0").new_file_name
(str, optionnel) : Nouveau nom de fichier (s'il n'est pas fourni, le nom du fichier d'origine est utilisé).
- Retourne : Détails sur le fichier téléchargé (ID et nom) ou un message d'erreur.
box_upload_file_from_content_tool
Chargement d'un contenu sous forme de fichier dans Box.
- Paramètres
content
(str | bytes) : Contenu à télécharger (texte ou binaire).file_name
(str) : Le nom à attribuer au fichier.folder_id
(chaîne, facultatif) : ID du dossier de destination (valeur par défaut : "0").is_base64
(bool, facultatif) : Indique si le contenu fourni est codé en base64.
- Retourne : Message de réussite du téléchargement avec l'ID et le nom du fichier.
box_download_file_tool
Télécharge un fichier à partir de Box.
- Paramètres
file_id
(str) : L'identifiant du fichier à télécharger.save_file
(bool, optionnel) : Indique s'il faut enregistrer le fichier localement.save_path
(str, optionnel) : Le chemin local où le fichier doit être enregistré.
- Retourne : Pour les fichiers texte, renvoie le contenu ; pour les images, renvoie les données encodées en base64 ; pour les autres types de fichiers, un message d'erreur ou de confirmation d'enregistrement.
Outils Box Doc Gen
box_docgen_create_batch_tool
Génère des documents à l'aide d'un modèle Box Doc Gen et d'un fichier JSON local.
- Paramètres
file_id
(str) : ID du fichier modèle.destination_folder_id
(str) : ID du dossier dans lequel les documents générés doivent être stockés.user_input_file_path
(str) : Chemin d'accès au fichier JSON contenant les données d'entrée.output_type
(str, optionnel) : Format de sortie (la valeur par défaut est "pdf").
- Retourne : Le résultat du lot de génération de documents sous la forme d'une chaîne JSON.
box_docgen_get_job_tool
Récupère un seul job Doc Gen par son ID.
- Paramètres
job_id
(str) : L'identifiant du travail.
- Retourne : Les détails du travail dans une chaîne de caractères au format JSON.
box_docgen_list_jobs_tool
Liste tous les travaux Doc Gen associés à l'utilisateur actuel.
- Paramètres
marker
(str | None, optionnel) : Marqueur de pagination.limit
(int | None, optionnel) : Nombre maximum de travaux à retourner.
- Retourne : Liste paginée des travaux en JSON joliment imprimé.
box_docgen_list_jobs_by_batch_tool
Liste les travaux Doc Gen appartenant à un lot spécifique.
- Paramètres
batch_id
(str) : L'identifiant du lot.marker
(str | None, optionnel) : Marqueur de pagination.limit
(int | None, optionnel) : Nombre maximum de travaux à renvoyer.
- Retourne : Les détails des travaux par lots au format JSON.
box_docgen_template_create_tool
Marque un fichier en tant que modèle Box Doc Gen.
- Paramètres
file_id
(str) : ID du fichier à marquer comme modèle.
- Retourne : Détails du modèle après marquage.
box_docgen_template_list_tool
Liste tous les modèles Box Doc Gen disponibles.
- Paramètres
marker
(str | None, optionnel) : Marqueur de pagination.limit
(int | None, optionnel) : Nombre maximum de modèles à lister.
- Retourne : Liste des modèles au format JSON.
box_docgen_template_delete_tool
Supprime le marquage des modèles Doc Gen d'un fichier.
- Paramètres
template_id
(str) : L'identifiant du modèle.
- Retourne : Confirmation de la suppression au format JSON.
box_docgen_template_get_by_id_tool
Récupère les détails d'un modèle Doc Gen spécifique.
- Paramètres
template_id
(str) : L'identifiant du modèle.
- Retourne : Les détails du modèle en JSON.
box_docgen_template_list_tags_tool
Liste toutes les balises associées à un modèle Box Doc Gen.
- Paramètres
template_id
(str) : L'ID du modèle.template_version_id
(str | None, optionnel) : L'identifiant de la version spécifique.marker
(str | None, optionnel) : Marqueur de pagination.limit
(int | None, optionnel) : Nombre maximum de balises à retourner.
- Retourne : Liste de tags au format JSON.
box_docgen_template_list_jobs_tool
Liste tous les travaux Doc Gen qui ont utilisé un modèle spécifique.
- Paramètres
template_id
(str) : L'identifiant du modèle.marker
(str | None, optionnel) : Marqueur de pagination.limit
(int | None, optionnel) : Nombre maximum de travaux à lister.
- Retourne : Les détails du travail pour le modèle sous la forme d'une chaîne JSON.
Conditions requises
- Python 3.13 ou supérieur
- Identifiants API Box (ID client, secret client, etc.)
Installation
Clonez le dépôt :
git clone https://github.com/box-community/mcp-server-box.git cd mcp-server-box
Installez
uv
si ce n'est pas encore le cas :2.1 MacOS+Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
2.2 Windows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Créer et mettre en place notre projet :
3.1 MacOS+Linux
# Créer un environnement virtuel et l'activer uv venv source .venv/bin/activate # Verrouiller les dépendances uv lock
3.2 Windows
# Créer un environnement virtuel et l'activer uv venv .venv\Scripts\activate # Verrouiller les dépendances uv lock
Créez un fichier
.env
dans le répertoire racine et ajoutez vos identifiants API Box :BOX_CLIENT_ID=votre_id_client BOX_CLIENT_SECRET=votre_secret_client
Utilisation
Exécution du serveur MCP
Le serveur MCP prend en charge quatre méthodes de transport : stdio (par défaut), SSE (Server-Sent Events), HTTP (StreamableHttp) et FastAPI.
Exécution avec le transport stdio (par défaut)
uv --directory /path/to/mcp-server-box run src/mcp_server_box.py
Utilisation de Claude comme client
Pour le transport stdio (recommandé pour Claude Desktop)
Editez votre
fichier claude_desktop_config.json
:code ~/Bibliothèque/Application\ Support/Claude/claude_desktop_config.json
Ajoutez la configuration :
{ "mcpServers" : { "mcp-server-box" : { "command" : "uv", "args" : [ "--directory", "/path/to/mcp-server-box", "run", "src/mcp_server_box.py" ] } } }
Redémarrez Claude s'il est en cours d'exécution.
Utilisation de Cursor comme client
Pour le transport stdio
Ouvrez votre IDE avec Cursor.
Dans settings, sélectionnez
Cursor settings
.Dans le menu de gauche, sélectionner
MCP
.En haut à gauche, cliquer sur
Add new global MCP server
.Collez le JSON suivant (mettez à jour avec vos valeurs locales) :
{ "mcpServers" : { "box" : { "command" : "uv", "args" : [ "--directory", "/path/to/mcp-server-box", "run", "src/mcp_server_box.py" ] } } }
Enregistrez et fermez le fichier mcp.json, et redémarrez si nécessaire.
Exécution des tests
Le projet comprend une série de tests destinés à vérifier les fonctionnalités de l'API Box. Avant d'exécuter les tests, mettez à jour les identifiants des fichiers et des dossiers dans les fichiers de test pour qu'ils correspondent à ceux de votre compte Box.
Configuration des tests
- Mise à jour des ID de fichiers et de dossiers
- Chaque fichier de test (dans le répertoire
tests/
) utilise des identifiants codés en dur pour les fichiers et dossiers Box. - Remplacez ces identifiants par les identifiants valides de votre compte Box.
- Chaque fichier de test (dans le répertoire
- Références des identifiants de fichiers
- Par exemple, dans
tests/test_box_api_read.py
, remplacez"1728677291168"
par un identifiant de fichier valide.
- Par exemple, dans
Exécution des tests
Une fois que vous avez mis à jour les ID, vous pouvez exécuter les tests en utilisant pytest :
# Exécuter tous les tests pytest # Exécuter un fichier de test spécifique pytest tests/test_box_api_file_ops.py # Exécuter les tests avec une sortie détaillée pytest -v # Exécuter les tests et afficher les instructions d'impression pytest -v -s
Résolution des problèmes
Si vous recevez l'erreur Error : spawn uv ENOENT
sur MacOS lorsque vous exécutez le serveur MCP avec Claude Desktop, vous pouvez :
Supprimer uv et le réinstaller avec Homebrew :
brew install uv
Ou fournir le chemin complet de l'exécutable uv dans votre configuration :
/Users/shurrey/.local/bin/uv --directory /Users/shurrey/local/mcp-server-box run src/mcp_server_box.py
[Assurez-vous que les informations d'identification de l'API Box dans
.env
sont correctement définies.