MCP-Solver
Ein Model Context Protocol (MCP)-Server, der SAT-, SMT- und Constraint-Lösungsfunktionen für große Sprachmodelle bereitstellt.
Überblick
Der MCP Solver integriert SAT, SMT und Constraint Solving mit LLMs über das Model Context Protocol und ermöglicht KI-Modellen die interaktive Erstellung, Bearbeitung und Lösung von:
Eine detaillierte Beschreibung der Systemarchitektur und der theoretischen Grundlagen des MCP-Solvers finden Sie im begleitenden Forschungspapier: Stefan Szeider, „MCP-Solver: Integrating Language Models with Constraint Programming Systems“ , arXiv:2501.00539, 2024.
Verfügbare Tools
Im Folgenden bezieht sich „Element“ auf einen Teil des Codes (MinZinc/Pysat/Z3) und „Modell“ auf die Kodierung.
Werkzeugname | Beschreibung |
---|---|
clear_model | Entfernen Sie alle Elemente aus dem Modell |
add_item | Neues Element an einem bestimmten Index hinzufügen |
delete_item | Element am Index löschen |
replace_item | Element am Index ersetzen |
get_model | Aktuelle Modellinhalte mit nummerierten Elementen abrufen |
solve_model | Lösen Sie das Modell (mit Timeout-Parameter) |
Systemanforderungen
- Python und Projektmanager uv
- Python 3.11+
- Modusspezifische Anforderungen: MiniZinc, PySAT, Python Z3 (erforderliche Pakete werden über Pip installiert)
- Betriebssysteme: macOS, Windows, Linux (mit entsprechenden Anpassungen)
Installation
MCP Solver erfordert Python 3.11+, den uv
Paketmanager und solverspezifische Abhängigkeiten (MiniZinc, Z3 oder PySAT).
Ausführliche Installationsanweisungen für Windows, macOS und Linux finden Sie unter INSTALL.md .
Schnellstart:
Verfügbare Modi / Lösen von Backends
Der MCP-Solver bietet drei verschiedene Betriebsmodi, die jeweils mit einem anderen Backend zur Constraint-Lösung integriert sind. Jeder Modus erfordert spezifische Abhängigkeiten und bietet einzigartige Funktionen zur Lösung unterschiedlicher Problemklassen.
MiniZinc-Modus
Der MiniZinc-Modus ermöglicht die Integration mit der MiniZinc-Einschränkungsmodellierungssprache mit den folgenden Funktionen:
- Umfangreicher Einschränkungsausdruck mit globalen Einschränkungen
- Integration mit dem Chuffed-Constraint-Solver
- Optimierungsmöglichkeiten
- Zugriff auf Lösungswerte über
get_solution
Abhängigkeiten : Erfordert das minizinc
Paket ( uv pip install -e ".[mzn]"
)
Konfiguration : Um im MiniZinc-Modus zu laufen, verwenden Sie:
PySAT-Modus
Der PySAT-Modus ermöglicht die Interaktion mit dem Python SAT-Lösungs-Toolkit mit den folgenden Funktionen:
- Propositionale Constraint-Modellierung mit CNF (Konjunktive Normalform)
- Zugriff auf verschiedene SAT-Solver (Glucose3, Glucose4, Lingeling usw.)
- Kardinalitätsbeschränkungen (höchstens k, mindestens k, genau k)
- Unterstützung für die Lösung boolescher Einschränkungen
Abhängigkeiten : Erfordert das Paket python-sat
( uv pip install -e ".[pysat]"
)
Konfiguration : Um im PySAT-Modus zu laufen, verwenden Sie:
Z3-Modus
Der Z3-Modus bietet Zugriff auf die Lösungsfunktionen von Z3 SMT (Satisfiability Modulo Theories) mit den folgenden Funktionen:
- Umfangreiches Typsystem: Boolesche Werte, Ganzzahlen, Realzahlen, Bitvektoren, Arrays
- Constraint-Lösung mit Quantifizierern
- Optimierungsmöglichkeiten
- Vorlagenbibliothek für gängige Modellierungsmuster
Abhängigkeiten : Erfordert das z3-solver
Paket ( uv pip install -e ".[z3]"
)
Konfiguration : Um im Z3-Modus zu laufen, verwenden Sie:
MCP-Testclient
Der MCP Solver enthält einen MCP-Client für Entwicklungs-, Experimentier- und Diagnosezwecke, basierend auf dem ReAct -Agenten-Framework. Dieser Client dient als Vermittler zwischen einem LLM und dem MCP-Server und erleichtert die Übersetzung natürlichsprachlicher Problemstellungen in formale Constraint-Programmierungslösungen.
Installation
Der Client benötigt einen API-Schlüssel von einem LLM-Anbieter. Für Anthropic (das Standard-LLM ist Claude Sonnet 3.7) setzen Sie die Umgebungsvariable ANTHROPIC_API_KEY
. Diese kann in Ihrer Umgebung festgelegt oder in einer .env
Datei im Projektstammverzeichnis eingefügt werden.
Der Client unterstützt auch andere LLM-Anbieter, darunter OpenAI, Google (Gemini), OpenRouter und sogar lokale Modelle über LM Studio. Sie können das zu verwendende Modell mit dem Kommandozeilenflag --mc
angeben. Details zu den Modellcodeformaten finden Sie in INSTALL.md .
Verwendung
Der Client stellt spezielle Befehle für jedes Solver-Backend bereit:
Beispiele
Beispiel 1: Gussproblem (MiniZinc)
Dies basiert auf einem Beispiel von George Johnson (NYT, 13. Juli 1999).
Benutzer
Angenommen, ein Theaterregisseur fühlt sich verpflichtet, entweder seine junge Frau, die Schauspielerin Alvarez, oder seinen Neffen, den Schauspieler Cohen, in einer Produktion zu besetzen. Doch Miss Alvarez will nicht mit Mr. Cohen (ihrem ehemaligen Liebhaber) in einem Stück mitspielen und verlangt daher, dass ihre neue Flamme, der Schauspieler Davenport, in die Besetzung aufgenommen wird. Der Produzent, der sich selbst revanchieren muss, besteht darauf, dass Schauspieler Branislavsky eine Rolle bekommt. Doch Mr. Branislavsky will in keinem Stück mit Miss Alvarez oder Mr. Davenport mitspielen. Kann der Regisseur das Stück besetzen?
System: clear_model
System: add_item
(mehrere)
System: solve_model
Die Lösung (Cohen und Branislavsky besetzen, aber nicht Alvarez oder Davenport) erfüllt alle Einschränkungen.
Beispiel 2: N-Damen-Problem (MiniZinc)
Benutzer
Überprüfe, ob du n Damen auf einem nxn Schachbrett platzieren kannst. Versuche n=10,20,30,40 und vergleiche die Lösungszeiten.
System: clear_model
System: add_item
(mehrere)
System: solve_model
(mit n=10, 20, 30 und 40 durch Ändern des Wertes von n)
Vergleich der Lösungszeiten: n=10: 0,001 s n=20: 0,005 s n=30: 0,040 s n=40: 0,043 s
Für alle getesteten Platinengrößen gibt es Lösungen. Die Zeitkomplexität steigt nichtlinear an, bleibt aber bis n=40 beherrschbar.
Beispiel 3: Problem des Handlungsreisenden (MiniZinc)
Benutzer
Eine Verkäuferin aus Wien plant ihre nächste Österreich-Tour und besucht dabei jede Landeshauptstadt einmal. Helfen Sie mit, die kürzeste Route zu finden. Entfernungen in km: 1=Wien, 2=St. Pölten, 3=Eisenstadt, 4=Linz, 5=Graz, 6=Klagenfurt, 7=Salzburg, 8=Innsbruck, 9=Bregenz
[Distanzmatrixtabelle in Benutzernachricht bereitgestellt]
System: add_item
(mehrere)
System: solve_model
Optimale Route: Wien → St. Pölten → Linz → Salzburg → Bregenz → Innsbruck → Klagenfurt → Graz → Eisenstadt → Wien mit einer Gesamtstrecke von 1.564 km.
Rückmeldung
Über dieses Formular können Sie dem Autor Feedback geben.
Haftungsausschluss
Dieser MCP-Solver befindet sich im Prototypstadium und sollte mit Vorsicht verwendet werden. Benutzer werden ermutigt, zu experimentieren, aber die Verwendung in kritischen Umgebungen erfolgt auf eigene Gefahr.
Lizenz
Dieses Projekt ist unter der MIT-Lizenz lizenziert – Einzelheiten finden Sie in der Datei LICENSE .
This server cannot be installed
remote-capable server
The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.
Ein Model Context Protocol (MCP)-Server, der die Constraint-Lösungsfunktionen von MiniZinc für große Sprachmodelle verfügbar macht.
Related MCP Servers
- AsecurityFlicenseAqualityA Model Context Protocol (MCP) server that optimizes token usage by caching data during language model interactions, compatible with any language model and MCP client.Last updated -4JavaScript
- -securityAlicense-qualityA Model Context Protocol (MCP) server that helps large language models index, search, and analyze code repositories with minimal setupLast updated -9PythonMIT License
- -securityAlicense-qualityA Model Context Protocol (MCP) compliant server that allows Large Language Models (LLMs) to search and retrieve content from microCMS APIs.Last updated -TypeScriptMIT License
- -securityAlicense-qualityA Model Context Protocol server that enables large language models to interact with Linear's issue tracking system, allowing management of issues, projects, teams, and other Linear resources.Last updated -TypeScriptMIT License