Skip to main content
Glama
dijkstra-mcp-server

dijkstra-mcp-server

by BNJ02

Serveur MCP Dijkstra

Serveur MCP minimal (un fichier) exposant l'algorithme de Dijkstra à un agent LLM. Support de cours : le point intéressant n'est pas l'algo mais comment l'agent transmet le graphe.

Format du graphe

Une arête par ligne, trois champs séparés par des espaces :

<noeud_a> <noeud_b> <cout>
  • graphe non orienté : Paris Dijon 315 crée Paris->Dijon et Dijon->Paris

  • coûts positifs ou nuls (contrainte de Dijkstra)

  • lignes vides et lignes commençant par # ignorées

Pourquoi ce format plutôt que du JSON : un LLM l'écrit sans erreur de syntaxe (rien à équilibrer), il se lit tel quel au tableau, et il se parse en quelques lignes. Le graphe voyage dans l'appel d'outil — le serveur ne stocke rien.

Related MCP server: genpark-graph-dijkstra-astar-pathfinder-skill

Outils

Outil

Arguments

Retour

shortest_path

graph, start, end

chemin optimal, coût total, détail des tronçons

all_distances

graph, start

coût minimal et chemin vers tous les nœuds, trié

all_distances montre que Dijkstra construit l'arbre complet des plus courts chemins, pas seulement une paire départ/arrivée. Il renvoie aussi les chemins : sans ça, un agent à qui on demande un tableau récapitulatif rappelle shortest_path une fois par destination. Leçon de design MCP : un outil qui ne rend qu'une partie de la réponse attendue se fait contourner.

Exemple

Graphe (coûts de trajet) :

Paris Lyon 550
Paris Dijon 315
Dijon Lyon 195
Lyon Marseille 315
Dijon Geneve 200
Geneve Marseille 420

shortest_path(graph, "Paris", "Marseille") :

Chemin le moins coûteux : Paris -> Dijon -> Lyon -> Marseille
Coût total : 825
Détail des tronçons :
  Paris -> Dijon : 315
  Dijon -> Lyon : 195
  Lyon -> Marseille : 315

Le détour par Dijon (825) bat la route directe Paris–Lyon–Marseille (550+315 = 865) et la route par Genève (315+200+420 = 935) : l'arête directe évidente n'est pas la bonne.

Prompts de démonstration

À coller tels quels dans une session Claude Code une fois le serveur enregistré.

Prompt 1 — une paire départ/arrivée (déclenche shortest_path, un seul appel) :

Avec le serveur MCP dijkstra, trouve-moi le trajet le moins cher de Paris à Marseille.

Paris Lyon 550
Paris Dijon 315
Dijon Lyon 195
Lyon Marseille 315
Dijon Geneve 200
Geneve Marseille 420

Attendu : Paris -> Dijon -> Lyon -> Marseille, coût 825.

Prompt 2 — toutes les destinations (déclenche all_distances, un seul appel) :

Avec dijkstra, donne-moi le coût minimal depuis Paris vers toutes les autres villes.

Paris Lyon 550
Paris Dijon 315
Dijon Lyon 195
Lyon Marseille 315
Dijon Geneve 200
Geneve Marseille 420

Attendu : un tableau des 5 villes avec coût et chemin.

Observé en cours : tant que all_distances ne renvoyait que les coûts, l'agent l'ignorait et appelait shortest_path 4 fois pour reconstituer les chemins. C'est exactement le piège décrit plus haut — un outil qui ne rend qu'une partie de la réponse attendue se fait contourner. Bon moment pour faire la démo des deux versions côte à côte.

Prompt 3 — sans graphe fourni (l'agent doit produire lui-même le bon format) :

Utilise le serveur dijkstra pour trouver le chemin le moins coûteux
de A à F dans un petit graphe de 6 nœuds de ton choix.

Carte

carte.py produit deux figures dans images/ à partir du même graphe que le serveur (constante GRAPHE_EXEMPLE dans server.py) :

Fichier

Usage

images/carte_graphe.png / .svg

l'énoncé : 5 villes, 6 arêtes, les coûts

images/carte_solution.png / .svg

la correction : Paris → Dijon → Lyon → Marseille en rouge

Le chemin surligné est calculé par l'algorithme, jamais codé en dur : changer un coût dans GRAPHE_EXEMPLE et relancer suffit à mettre la carte à jour.

Les contours de la France et de la Suisse sont téléchargés une fois puis mis en cache dans data/ (2 ko au total) — le script tourne offline ensuite.

.venv/bin/python carte.py

Installation / enregistrement

Deux environnements, deux besoins :

  • le serveur tourne avec le venv MCP partagé /home/bnj/mcp_servers/.venv (dépendance unique : fastmcp>=3.4.2, déjà présent) ;

  • la carte tourne avec le .venv local du projet, qui ajoute matplotlib sans polluer le venv partagé :

uv venv .venv
uv pip install --python .venv/bin/python -r requirements-carte.txt

Enregistrement du serveur dans Claude Code :

claude mcp add dijkstra -- /home/bnj/mcp_servers/.venv/bin/python /home/bnj/Documents/djikstra_mcp_server/server.py

Tests

/home/bnj/mcp_servers/.venv/bin/python test_server.py

Couvre : parsing, optimalité du chemin, les deux outils, les erreurs (nœud inconnu, coût négatif, ligne malformée, graphe déconnecté) et un appel bout-en-bout via un client MCP en mémoire.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables agents to compute shortest paths with Dijkstra and A*, resolve DAG dependencies, solve maximum flow, build minimum spanning trees, and rank graph centrality using JSON-RPC MCP tools.
      7
      MIT
    • A
      license
      Not graded
      quality
      Not graded
      maintenance
      Enables agents to resolve dependencies and analyze directed graphs through topological sorting, strongly connected components, shortest paths, maximum flow, minimum spanning trees, and centrality ranking via MCP.
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables agents to compute shortest paths, topological dependency order, maximum flow and minimum-cut bottlenecks, minimum spanning trees, and PageRank centrality over weighted graphs for routing and execution planning. It exposes these graph-analysis capabilities as MCP tools through a zero-dependency Python server.
      7
      MIT