OpenContracts: Dokumentenablage mit Zitatgraph, MCP-Server und MIT-Lizenz
The open document intelligence platform for builders and hackers - DMS for the agentic world
Auf einen Blick
- Was ist das?
- OpenContracts verbindet Dokumentenverwaltung, Annotationsgraph und LLM-Agenten in einer selbst gehosteten Plattform. Der Reiz liegt in den offenen Schnittstellen, die Prüfung lohnt sich beim Betriebsaufwand.
- Für wen ist es gedacht?
- Wer Vertragswerke oder Rechtskorpora selbst hosten will und eigene Agenten über MCP oder GraphQL anbinden möchte, findet in OpenContracts eine passende Grundlage. Wer nur PDFs ablegen und durchsuchen will, trägt den Aufwand für Celery, Vektorindex und MCP-Schicht ohne Gegenwert.
- Darf ich es kommerziell nutzen?
- Ja. MIT ist eine freizügige Lizenz: Sie dürfen darauf aufbauende Software nutzen, verändern und verkaufen, solange Sie die Urheberrechts- und Lizenzhinweise beibehalten.
- Wird es noch gepflegt?
- Ja. Das Repository hat innerhalb des letzten Tages neue Commits erhalten.
- In welcher Sprache ist es geschrieben?
- Hauptsächlich Python, laut der Sprachstatistik von GitHub.
Die Antworten beruhen auf den GitHub-Daten des Projekts (zuletzt abgeglichen am 15. September 2026) und auf unserer Analyse. Sie sind keine Rechtsberatung.
TIEFGEHENDE OPEN-SOURCE-ANALYSE
Welches Problem OpenContracts löst und für wen
Die meisten Dokumentenablagen behandeln eine Akte als Datei mit Metadaten. OpenContracts behandelt sie als Knoten in einem Graphen. Das README beschreibt das Ergebnis als programmierbaren Zitatgraphen: Ein Dokument verweist auf eine Gesetzesstelle, diese Gesetzesstelle verweist weiter, und andere Dokumente verweisen auf sie zurück. Wer mit SEC-Filings, Vertragswerken oder Gesetzestexten arbeitet, kennt das Problem, dass die eigentliche Arbeit nicht im Lesen eines Dokuments liegt, sondern im Verfolgen von Querverweisen über hunderte Dokumente hinweg.
Die Zielgruppe benennt das Repository selbst: Builder und Hacker, also Entwicklerteams, die auf einer Dokumentenintelligenz aufsetzen wollen, statt eine fertige SaaS-Oberfläche zu mieten. Der Hinweis auf die agentische Welt im Beschreibungstext ist kein Marketingzusatz, sondern beschreibt die Architekturentscheidung. Jede Fläche, die die React-Oberfläche berührt, ist laut README auch über die API und den MCP-Server erreichbar. Das Produkt ist damit eher ein Backend mit mitgelieferter UI als eine Anwendung mit angehängter API.
Drei Oberflächen auf einem Graphen
Das README fasst die Architektur in einem Satz zusammen: derselbe Graph, drei Oberflächen. Eine GraphQL- plus REST-API für Anwendungen, ein Model-Context-Protocol-Server für Agenten, eine React-Oberfläche für das Team. Das ist die zentrale Designentscheidung des Projekts, und sie hat Konsequenzen für die Datenhaltung. Wenn ein Agent über MCP eine Annotation vorschlägt und ein Mensch dieselbe Annotation in der UI bestätigt, müssen beide Wege auf dasselbe Objekt schreiben.
Der MCP-Server ist in zwei Endpunkte geteilt: /mcp/ für anonyme Zugriffe auf öffentliche Korpora, /mcp/me/ für authentifizierte Zugriffe. Die Discovery läuft über /llms.txt und /.well-known/mcp.json, was bedeutet, dass ein MCP-Client die verfügbaren Werkzeuge selbst finden kann, ohne dass jemand eine Konfigurationsdatei von Hand schreibt. Die dokumentierten Werkzeuge heißen search_corpus, list_documents, get_document_text, list_annotations, list_relationships, list_threads und create_thread_message. Auffällig ist die Trennung zwischen lesenden Werkzeugen und genau einem schreibenden: create_thread_message. Ein Agent kann also Diskussionen anstoßen, aber Annotationen nur dann vorschlagen, wenn er laut README autorisiert ist. Das ist eine bewusste Einschränkung, und sie ist sinnvoll, weil ein Graph, in den ein Agent ungeprüft schreibt, schnell unbrauchbar wird.
Der Ein-Klick-Setup und was dabei tatsächlich passiert
Die Demo im README zeigt einen Ablauf, der in etwa einer Minute abgeschlossen sein soll: Korpus anlegen, Dokumente hineinlegen, auf Set up klicken. Dieser eine Klick installiert laut Beschreibung das Intelligenzbündel. Agenten beschreiben und fassen jedes Dokument zusammen, danach werden Zitate erkannt, aufgelöst und als Kante gezeichnet. Das Beispiel im README arbeitet mit 36 SEC-Filings, die anschließend mit dem Delaware General Corporation Law, dem Securities Act und den SEC-Regeln verbunden sind, abschnittsweise.
Interessanter als das, was verknüpft wird, ist das, was nicht verknüpft wird. Recht, das die Bibliothek noch nicht enthält, wird nicht verworfen, sondern als Backlog geführt und im Graphen als gestrichelte Knoten dargestellt, bis man es nachlädt. Diese Entscheidung verhindert ein stilles Datenproblem: Ein Zitat, das ins Leere zeigt, wäre in einer klassischen Ablage einfach ein toter Link. Hier wird daraus eine sichtbare Arbeitsliste. Wer den Graphen produktiv nutzt, sollte allerdings wissen, dass gestrichelte Knoten bedeutet, dass die Auflösung unvollständig ist, und dass die Qualität der Auflösung von der Abdeckung der eigenen Rechtsbibliothek abhängt.
Agenten und Extraktionen aus dem Code heraus
Das README zeigt den Einstieg in Python in wenigen Zeilen. Ein Agent wird über agents.for_document(123, corpus=45) erzeugt, also dokument- oder korpusgebunden, und liefert dann entweder einen gestreamten Chat oder ein typisiertes Objekt über ein Pydantic-Modell zurück. Der Beispielaufruf agent.stream("Summarize the indemnification clauses") gibt Stücke mit einem content-Feld zurück. Die Bindung an ein Korpus ist der Punkt, an dem sich das von einem generischen LLM-Aufruf unterscheidet: Die Antwort soll auf den Annotationen und Zitaten aufsetzen, die das Team bereits aufgebaut hat.
Für Massenverarbeitung gibt es das Konzept des Fieldsets. Ein Fieldset ist eine Menge von Spalten, jede Spalte eine Anfrage in natürlicher Sprache. Läuft ein Fieldset über einen Korpus, verteilt sich die Extraktion laut README auf Celery-Worker und landet in einem tabellenartigen Raster, in dem jede Zelle von einem Menschen freigegeben oder abgelehnt werden kann. Das ist der Teil, der bei großen Beständen den Ausschlag gibt. Hunderte Dokumente gleichzeitig zu extrahieren ist ohne Worker-Queue nicht machbar, und die menschliche Prüfung pro Zelle ist der Grund, warum das Ergebnis überhaupt belastbar ist. Wer diese Prüfung abschaltet, bekommt ein Raster mit LLM-Ausgaben ohne Gewähr.
Installation und die Konfigurationsflächen
Das README beschreibt den Betrieb als selbst gehostet und MIT-lizenziert, nennt aber in dem vorliegenden Ausschnitt keine Installationsbefehle. Wer den Einstieg sucht, findet ihn über die Homepage https://open-source-legal.github.io/OpenContracts/ und die verlinkten Dokumentationspfade. Konkret benannt sind im Material: docs/architecture/llms/README.md für das LLM-Framework, docs/mcp/ für den MCP-Server, docs/walkthrough/advanced/write-your-own-extractors.md für eigene Extraktoren und docs/pipelines/pipeline_overview.md für die Pipeline.
Die relevanten Konfigurationsflächen sind damit klar umrissen. Auf der Agentenseite sind es Dokument- und Korpus-IDs, die an agents.for_document übergeben werden. Auf der MCP-Seite sind es die beiden Pfade /mcp/ und /mcp/me/ sowie die Discovery-Dateien /llms.txt und /.well-known/mcp.json. Auf der Verarbeitungsseite sind es Parser, Embedder und Thumbnailer als austauschbare Komponenten. Dass das README für all das auf die Dokumentationspfade verweist statt Befehle zu nennen, ist eine Schwäche der Startseite: Wer prüfen will, ob das Projekt zum eigenen Stack passt, muss durch mehrere Dokumente, bevor er die erste Zeile Code schreibt.
Wo OpenContracts die falsche Wahl ist
Der Aufwand für den Betrieb ist der erste Vorbehalt. Celery-Worker für Extraktionen, ein Vektorindex für die Suche, eine GraphQL- und REST-Schicht, ein MCP-Server und eine React-Oberfläche sind fünf bewegliche Teile. Wer nur Verträge ablegen und per Volltext durchsuchen will, bezahlt diesen Aufwand ohne Gegenleistung. Eine einfache Ablage mit Suchindex leistet das mit einem Bruchteil der Betriebsfläche.
Der zweite Vorbehalt betrifft die Zitatqualität. Das README beschreibt den Mechanismus der Erkennung, Auflösung und Darstellung, aber es nennt keine Genauigkeitswerte. Ob ein Zitat korrekt der richtigen Gesetzesstelle zugeordnet wird, hängt vom Dokumentenbestand und von der abgedeckten Rechtsbibliothek ab. Wer den Graphen für Compliance- oder Prüfzwecke nutzen will, muss die Auflösung gegen eine Stichprobe von Hand verifizieren. Das Material liefert dafür keine Grundlage, weder Präzision noch Recall.
Der dritte Vorbehalt ist die Formatausrichtung. Die Pipeline ist laut README austauschbar, aber die Beispiele im Material drehen sich um SEC-Filings und Gesetzestexte. Für stark gescannte oder handschriftliche Bestände oder für Formate ohne brauchbaren Textlayer sagt das Material nichts darüber, wie weit die mitgelieferten Parser tragen. Die Antwort auf diese Frage steht in den Pipeline-Dokumenten, nicht im README.
Was ein Umstieg von einer reinen Vektor-Suche unterscheidet
Der naheliegende Vergleich ist eine Vektor-Datenbank mit einem Retrieval-Layer davor, also ein Aufbau, bei dem Dokumente in Chunks zerlegt, eingebettet und per Ähnlichkeitssuche zurückgegeben werden. Der Unterschied liegt nicht in der Suche, sondern in der Struktur. Eine Vektor-Suche liefert Textstellen, die einer Anfrage ähneln. OpenContracts liefert zusätzlich Kanten zwischen Dokumenten und den zitierten Normen, und diese Kanten sind das Ergebnis expliziter Auflösung, nicht von Ähnlichkeit.
Praktisch heißt das: Eine Frage nach allen Filings, die eine bestimmte SEC-Regel berühren, lässt sich in einem Vektor-System nur über Ähnlichkeit annähern, in OpenContracts über die Kante von Dokument zu Norm. Der Preis dafür ist die Vorverarbeitung. Der Zitatgraph muss aufgebaut und die nicht vorhandene Rechtsbibliothek nachgeladen werden, sonst bleiben Knoten gestrichelt. Ein Vektor-Index dagegen ist nach dem Einbetten sofort benutzbar, auch wenn die Ergebnisse unschärfer sind. Wer schnelle, unscharfe Treffer über einen großen, unstrukturierten Bestand braucht, ist mit dem Vektor-Ansatz besser bedient. Wer präzise Verweise zwischen Dokumenten und Normen braucht, zahlt den Aufbau des Graphen.
Wartung, Versionen und Lizenz
Die letzten Veröffentlichungen im Material sind v3.1.0 vom 8. September 2026 und v3.0.0 vom 10. August 2026, dazwischen liegt ein Beta-Stand v3.0.0.b4 vom Februar 2026. Das Muster zeigt eine Hauptversion mit größerem Funktionsumfang (Corpus Intelligence, Authority Linking, Deep Research laut Versionsnotiz) und eine Nachfolgeversion innerhalb von rund einem Monat. Wer auf v3.0.0 aufgesetzt hat, sollte mit kleineren Anpassungen in v3.1.0 rechnen. Das Repository ist nicht archiviert, der letzte Push liegt zwei Tage nach v3.1.0.
Zur Wartung gehört der Code-Standard: black für Formatierung, Mypy für Typen, isort für Importe, dazu Codecov-Abdeckung getrennt für Backend und Frontend. Das sind Hinweise auf eine gepflegte Codebasis, aber sie sagen nichts über die Stabilität der API zwischen Versionen. Wer die GraphQL- oder MCP-Schnittstelle produktiv nutzt, sollte die Release Notes vor jedem Sprung lesen, weil sich Werkzeugnamen oder Endpunkte ändern können.
Die Lizenz ist MIT. Das erlaubt kommerzielle Nutzung, Änderung und Weitergabe, solange Lizenz- und Urheberrechtshinweis erhalten bleiben. Es gibt keine Copyleft-Pflicht, also keine Verpflichtung, eigene Änderungen offenzulegen. Das ist für Teams relevant, die die Plattform in ein internes Produkt einbetten wollen. Dieser Absatz ist keine Rechtsberatung; wer die Lizenz in einem Produkt einsetzt, sollte den Lizenztext selbst lesen und bei Bedarf rechtlich prüfen lassen.
Redaktionelles Fazit
Wer Vertragswerke oder Rechtskorpora selbst hosten will und eigene Agenten über MCP oder GraphQL anbinden möchte, findet in OpenContracts eine passende Grundlage. Wer nur PDFs ablegen und durchsuchen will, trägt den Aufwand für Celery, Vektorindex und MCP-Schicht ohne Gegenwert. Vor dem Einsatz sollte man prüfen, ob die Pipeline-Komponenten für die eigenen Dateiformate tatsächlich registrierbar sind und ob der Zitatgraph mit dem eigenen Dokumentenbestand sinnvolle Kanten erzeugt, denn die Dokumentation beschreibt den Mechanismus, nicht die Trefferqualität.
Community-Notizen