DeepSeek dsh et MCP : piloter un profil navigateur
Reliez DeepSeek dsh à Nullprint avec MCP pour piloter un profil navigateur. Suivez l’installation, la configuration et les précautions de sécurité.

Piloter un profil de navigateur avec DeepSeek dsh et MCP
Automatiser une navigation, ce n'est pas juste « ouvrir une page » et récupérer son titre. Dès qu'un navigateur utilise des profils distincts - parfois déjà connectés à des services - il faut aussi décider quel profil démarre, quelles pages l'agent peut lire, et ce qui se passe à la fin de la tâche. C'est précisément l'intérêt de combiner dsh (l'environnement d'agent de DeepSeek) et Nullprint : une consigne en langage courant peut déclencher la création d'un profil, l'ouverture d'une page, la lecture de son contenu, puis la fermeture de la session.
L'approche repose sur MCP, un protocole qui permet à un agent de se connecter à des outils externes. Ce n'est pas « magique », et ce n'est pas non plus un automatisme sans risque : la configuration doit être chargée par le bon profil dsh, et le contenu lu par l'agent transite par les serveurs de DeepSeek. Concrètement, voici comment installer et vérifier l'intégration, ce qui change selon que dsh tourne localement ou ailleurs, et les limites à garder en tête avant d'utiliser des comptes réels.
Ce que permet l'intégration dsh et Nullprint
DeepSeek dsh est un environnement d'agent capable d'appeler des outils compatibles avec MCP. Nullprint, de son côté, gère plusieurs profils de navigateur et expose des opérations pour créer un profil, le démarrer, naviguer et lire des informations sur une page. En reliant les deux, dsh peut demander ces actions au serveur MCP de Nullprint au lieu de se limiter à une réponse textuelle.
Le schéma de base est simple : vous formulez une consigne, dsh choisit les outils, puis Nullprint exécute les actions dans le navigateur. Exemple : la consigne peut mener à créer un profil, ouvrir example.com, lire le titre de la page, puis fermer le profil. Le profil créé reste visible dans l'application Nullprint.
Cette approche sert bien quand vous voulez confier une tâche « bornée » et répétable à un agent. Elle ne devient pas pour autant une automatisation 100 % déterministe : l'agent interprète la consigne et sélectionne les outils. Il faut donc être clair sur le résultat attendu et sur les limites de la tâche.
Le rôle de MCP dans cette architecture
MCP fait ici office de passerelle entre l'agent et les fonctions exposées par Nullprint. Une fois le serveur configuré, ses outils apparaissent dans dsh avec des noms préfixés, par exemple mcp__nullprint__profile_start ou mcp__nullprint__session_goto. Ces identifiants sont pratiques pour vérifier que les outils sont bien chargés, et pour comprendre ce que l'agent peut appeler.
Sur une installation « tout sur la même machine », le serveur nullprint-mcp se connecte à Nullprint en utilisant son fichier local de connexion. Dans ce cas, pas besoin de saisir un port ou une clé dans la configuration de base. Dès que dsh et Nullprint ne tournent plus sur le même hôte, il faut prévoir une connexion distante et transmettre les paramètres nécessaires.
Une préversion à traiter comme telle
Les commandes de cette intégration ont été testées avec dsh en version 0.2.1-rc.2 et nullprint-mcp en version 0.1.3. Comme dsh est une préversion, les options et les fichiers de configuration peuvent changer. Avant de reprendre ces commandes en production, vérifiez la documentation de DeepSeek dsh et le guide d'intégration Nullprint.
Un détail qui évite une erreur fréquente : le paquet Python nommé dsh sur PyPI n'est pas celui de DeepSeek. Le paquet à utiliser s'installe depuis npm, sous le nom @deepseek-ai/dsh. En développement, vérifiez le nom du paquet avant de copier une commande trouvée ailleurs.
Installer et configurer le serveur MCP
Il faut avoir Node.js, une clé d'API DeepSeek, et Nullprint installé, lancé et connecté - le tout sur la même machine pour le scénario local. Le serveur MCP s'installe avec pipx, et dsh s'installe globalement avec npm : ce découpage n'a rien d'anormal, ils n'utilisent simplement pas les mêmes écosystèmes.
npm install -g @deepseek-ai/dsh
export DEEPSEEK_API_KEY=sk-votre-cle
pipx install nullprint-mcp
Remplacez sk-votre-cle par votre clé. Évitez de la mettre dans un dépôt de code ou dans un fichier partagé. Une variable d'environnement suffit pour une session locale, à condition que votre environnement de développement soit bien protégé.
Choisir le profil dsh avant de modifier sa configuration
dsh propose notamment deux modes : web (interface de discussion dans le navigateur) et headless (tâche en ligne de commande puis arrêt). Ces modes utilisent chacun leur propre profil et leur propre configuration. Donc non : ajouter le serveur MCP dans un profil ne le rend pas automatiquement disponible dans l'autre.
Le répertoire de configuration du profil n'apparaît qu'après son premier lancement. Lancez d'abord le mode que vous comptez utiliser, par exemple dsh web ou une petite exécution en mode headless. Ensuite seulement, modifiez le fichier correspondant. Pour headless, le chemin indiqué est ~/.dsh/profiles/headless/cordis.patch.yml. Pour web, remplacez headless par web.
Ajouter Nullprint avec la bonne structure YAML
Dans cordis.patch.yml, ajoutez le serveur dans une entrée insert :
- insert:
- id: mcp-nullprint
name: "@deepseek-ai/dsh-mcp-client"
config:
serverName: nullprint
transport: stdio
command: nullprint-mcp
args: []
L'indentation et la structure comptent. Une entrée écrite sous la forme - id: mcp-nullprint (sans le bon rattachement à insert) peut être ignorée si elle ne modifie aucun élément existant. Résultat : dsh démarre, mais les outils Nullprint ne sont pas disponibles. C'est un échec « discret » : sans message d'erreur, vous pouvez facilement perdre du temps.
Mieux vaut vérifier la configuration réellement chargée que de croire que le fichier a été pris en compte. Par exemple :
dsh --profile headless --dump-config
Si mcp-nullprint apparaît dans la sortie, le chargement a réussi. Vous devriez aussi retrouver les outils sous des noms du style mcp__nullprint__profile_start et mcp__nullprint__session_goto. S'ils manquent, relisez le profil utilisé, le chemin du fichier, et l'imbrication sous insert avant de chercher ailleurs (côté navigateur ou côté tâche).
Lancer une tâche et diagnostiquer les problèmes
Une fois la configuration confirmée et Nullprint lancé, vous pouvez demander une tâche en mode sans interface graphique :
dsh --profile headless "Utilise Nullprint pour créer un profil, ouvrir example.com, me donner le titre de la page, puis fermer le profil."
La commande demande à dsh d'orchestrer plusieurs actions : créer un profil, le démarrer, naviguer vers une adresse, lire le titre de la page, puis fermer le profil. Le résultat dépend à la fois de la capacité de l'agent à interpréter la consigne et de la disponibilité effective des outils. Pour commencer, choisissez un site public et une tâche sans enjeu. Ça aide à distinguer une erreur de configuration d'un problème lié à la page ou au comportement de navigation.
Après un premier essai, vous pouvez demander à dsh de lister les profils, d'indiquer lesquels sont en cours d'exécution, ou d'ouvrir un profil existant pour naviguer. Attention : les noms de profil sont sensibles à la casse. shop-01 et Shop-01 ne doivent pas être traités comme équivalents. Si votre consigne doit être répétée, reprenez exactement le nom affiché dans Nullprint.
Une vérification progressive évite les faux diagnostics
Sur ce type d'intégration, j'ai l'habitude de vérifier chaque couche dans l'ordre plutôt que de modifier plusieurs paramètres en même temps :
- Nullprint est lancé et accessible. Le serveur local doit pouvoir lire son fichier de connexion.
- Le bon paquet est installé. Utilisez bien le paquet npm de DeepSeek pour dsh et installez
nullprint-mcpavecpipx. - Le bon profil est ciblé. Les configurations web et headless ne se partagent pas.
- Le serveur apparaît dans la configuration effective. Utilisez
--dump-config. - La tâche test est simple et publique. Page publique d'abord, navigation plus « réaliste » ensuite.
Cette séquence réduit les allers-retours. Si dsh démarre mais ne « voit » aucun outil Nullprint, le fichier de configuration est souvent le premier endroit à regarder (avant même la consigne). Si, au contraire, les outils sont présents mais qu'une opération échoue, vérifiez l'état de Nullprint, le nom du profil, puis les détails de la tâche.
Faire tourner dsh sur une autre machine
Quand dsh et Nullprint ne partagent pas la même machine, configurez NULLPRINT_DAEMON_URL et NULLPRINT_API_KEY. Il y a un point important : lors du lancement d'un serveur MCP, dsh supprime les variables d'environnement héritées dont le nom contient notamment KEY, TOKEN, SECRET ou PASSWORD. Autrement dit : définir NULLPRINT_API_KEY dans votre terminal ne garantit pas que la valeur arrive au serveur.
Passez explicitement les variables dans la configuration :
env:
NULLPRINT_DAEMON_URL: !!js process.env.NULLPRINT_DAEMON_URL
NULLPRINT_API_KEY: !!js process.env.NULLPRINT_API_KEY
Ici, vous lisez les valeurs depuis l'environnement sans écrire la clé directement dans le fichier. Ne mettez pas le secret en clair dans une configuration susceptible d'être versionnée, synchronisée ou partagée. En plus, la connexion distante ajoute une dépendance réseau et un secret à protéger : testez d'abord séparément le scénario local avant de basculer.
Sécurité et limites à connaître
Le point central n'est pas juste « l'agent peut piloter le navigateur ». C'est qu'il le fait dans un profil potentiellement déjà connecté à des services. Une navigation qui paraît anodine peut donc exposer des informations ou déclencher une action réelle. La frontière de sécurité dépend donc du profil sélectionné, des outils disponibles, et de ce que vous demandez à l'agent.
Le contenu transmis à dsh et les pages lues transitent par les serveurs de DeepSeek. Évitez d'envoyer vers dsh des profils contenant des informations sensibles si ce traitement n'est pas acceptable dans votre contexte. Pour une entreprise en France ou en Europe, vérifiez vos règles internes de traitement des données, les engagements applicables et les obligations liées au RGPD avant d'introduire des données personnelles ou confidentielles dans ce flux. Le fait que le navigateur soit « local » ne veut pas dire que le traitement de l'agent l'est aussi.
Garder les actions sensibles sous contrôle humain
Pour un premier usage, prenez un profil de test et des pages publiques. Si un profil est déjà connecté à un compte, l'agent peut agir dans ce contexte. Les identifiants, mots de passe et codes liés à l'authentification à deux facteurs doivent être saisis par vous dans la fenêtre du navigateur. Gardez aussi sous contrôle les paiements, les changements de mot de passe et les suppressions de données ou de compte.
Prévoir une consigne explicite de fermeture du profil en fin de tâche est utile, mais ça ne remplace pas la vérification du résultat. Contrôlez que la session est bien fermée, surtout après une erreur ou une interruption. Pour des tâches répétées, définissez à l'avance ce que l'agent peut faire, ce qui nécessite votre validation, et ce qu'il ne doit jamais tenter.
Une automatisation utile, mais pas une garantie d'exécution
Le langage naturel rend l'outil plus accessible, mais il ajoute une étape d'interprétation. Si votre tâche contient plusieurs étapes, des ambiguïtés, ou des conséquences métier, l'agent ne suivra pas forcément le parcours que vous aviez en tête. Distinguez bien « la démo sur example.com marche » de « le processus complet de production est validé ».
Pour juger si l'intégration vous convient, posez-vous trois questions : la tâche est-elle réversible ? Les données consultées peuvent-elles être envoyées au service d'IA ? Une erreur de navigation aurait-elle un impact financier, juridique ou opérationnel ? Si la dernière question est oui, mettez une validation humaine en place, utilisez un profil dédié, ou gardez le processus dans une automatisation plus déterministe.
En bref : dsh et Nullprint conviennent bien à l'exploration et aux tâches de navigateur clairement délimitées. Ça ne dispense ni de vérifier les outils chargés, ni de définir une politique d'accès. Même si l'intégration « fonctionne », elle peut rester inadaptée pour des raisons de confidentialité ou de contrôle.
Conclusion
L'intégration de DeepSeek dsh avec Nullprint permet de piloter un navigateur via des outils MCP, à condition de choisir le bon profil, de charger correctement le serveur, et de vérifier la configuration effective. Le point le plus facile à rater est la structure insert dans le fichier YAML ; le point le plus important à évaluer avant un usage réel reste le traitement des données et les droits du profil navigateur.
Commencez par une tâche publique et réversible, vérifiez les outils avec --dump-config, puis élargissez progressivement le périmètre. Pour les étapes détaillées et les évolutions possibles de l'intégration, consultez le guide MCP de Nullprint et la documentation du projet DeepSeek dsh.