Skip to main content
Glama
slapash

JurisCassation MCP Server

by slapash

JurisCassation API

GraphQL + REST-Wrapper für juriscassation.cspj.ma — das Entscheidungsportal des marokkanischen Kassationshofs.

Funktionen

  • Live-Suche — Echtzeit-Weiterleitung an den arabischen Such-Endpunkt

  • Lokale Suche — SQLite FTS5 Volltextsuche über gecrawlte Entscheidungen

  • GraphQL API — typsichere Abfragen und Mutationen

  • PDF-Proxy — Zwischenspeicherung und Bereitstellung von Entscheidungs-PDFs über verschlüsselte IDs

  • Hintergrund-Scraper — Indizierung aller Entscheidungen in eine lokale SQLite-Datenbank

Related MCP server: Entscheidsuche MCP Server

Schnellstart

# Docker (GraphQL API on port 5091)
docker compose up -d

# Or direct
pip install -r requirements.txt
python app.py serve --port 8000

# MCP Server (port 5098, SSE transport)
# Via systemd:
sudo systemctl start juriscassation-mcp

# Or direct:
JURIS_API_BASE=http://localhost:5091 python mcp_server.py

API-Endpunkte

Endpunkt

Beschreibung

GET /graphql

GraphQL-Playground (interaktiv)

POST /graphql

GraphQL API

GET /api/pdf/{encrypted_id}

Entscheidungs-PDF herunterladen (proxied + gecacht)

GET /api/stats

Statistiken des lokalen Index

GraphQL-Schema

Abfragen

# Live search against the Moroccan portal (real-time)
query {
  searchLive(chamberId: 1, sujet: "طلاق", lang: "ar", page: 1) {
    total
    page
    perPage
    items {
      encryptedId
      dossierNumber
      decisionNumber
      decisionDate
      keywordsAr
      pdfUrl
    }
  }
}

# Search the local SQLite index
query {
  searchLocal(query: "طلاق", chamberId: 1, page: 1, perPage: 20) {
    total
    page
    perPage
    items {
      id
      encryptedId
      dossierNumber
      decisionNumber
      decisionDate
      keywordsAr
      pdfUrl
    }
  }
}

# List chambers with decision counts
query {
  chambers {
    id
    nameAr
    nameFr
    nameEn
    decisionCount
  }
}

# Scraper/indexer status
query {
  scraperStatus {
    totalDecisions
    lastScrape
    chambers { id nameFr decisionCount }
  }
}

Mutationen

# Scrape decisions from a chamber (Arabic endpoint with alef wildcard)
mutation {
  scrapeChamber(chamberId: 1, maxPages: 5)
}

# Scrape all pages
mutation {
  scrapeChamber(chamberId: 1, maxPages: 0)
}

Kammern

ID

Arabisch

Französisch

Englisch

1

الغرفة المدنية

Chambre Civile

Civil

2

غرفة الأحوال الشخصية و الميراث

Statut Personnel & Successions

Personal Status & Inheritance

3

الغرفة التجارية

Chambre Commerciale

Commercial

4

الغرفة الإدارية

Chambre Administrative

Administrative

5

الغرفة الاجتماعية

Chambre Sociale

Social

6

الغرفة الجنائية

Chambre Pénale

Criminal

7

الغرفة العقارية

Chambre Immobilière

Real Estate

CLI-Scraper

# Scrape chamber 1 (all pages)
python app.py scrape --chamber 1

# Scrape all chambers, max 50 pages each
python app.py scrape --chamber 0 --max-pages 50

# Scrape from page 100 onwards
python app.py scrape --chamber 6 --since-page 100

Architekturhinweise

  • Der arabische Endpunkt (/Decisions/RechercheDecisionsRes) gibt verschlüsselte data-id-Attribute zurück, die für den PDF-Download benötigt werden

  • Der französische Endpunkt (/Decisions/RechercheDecisionsResFr) gibt numerische idArretCassation-IDs zurück, jedoch keine verschlüsselten IDs

  • PDFs werden über /Decisions/GetArret?encryptedId=... heruntergeladen — keine Authentifizierung erforderlich

  • Ein leerer Sujet bei der arabischen Suche liefert 0 Ergebnisse; wir verwenden ا (Alef) als Platzhalter für alle Ergebnisse

  • Das SSL-Zertifikat auf der Upstream-Seite ist fehlerhaft; verify=False ist erforderlich

Umgebungsvariablen

Variable

Standard

Beschreibung

JURIS_DB

/data/decisions.db

Pfad zur SQLite-Datenbank

JURIS_PDF_CACHE

/data/pdfs

Verzeichnis für den PDF-Cache

JURIS_CONCURRENCY

3

Maximale Anzahl gleichzeitiger Scrape-Anfragen

JURIS_DELAY

0.5

Verzögerung zwischen den Scrape-Seiten (Sekunden)

MCP-Server

Ein MCP-Server (Model Context Protocol) stellt alle API-Funktionen als KI-Agenten-Tools über SSE auf Port 5098 bereit.

MCP-Endpunkt: http://localhost:5098/sse

Tools

Tool

Beschreibung

search_decisions

Live-Suche auf juriscassation.cspj.ma

search_local

FTS5-Suche über den lokalen SQLite-Index

get_decision_pdf

Prüfen/Herunterladen eines Entscheidungs-PDFs per verschlüsselter ID

list_chambers

Auflistung aller 7 Kammern mit Index-Anzahlen

scrape_chamber

Indizierung von Entscheidungen einer Kammer

get_stats

Statistiken des lokalen Index

Ressourcen

URI

Beschreibung

juriscassation://chambers

Referenzliste der Kammern (AR/FR/EN)

juriscassation://stats

Aktuelle Index-Statistiken

MCP-Umgebungsvariablen

Variable

Standard

Beschreibung

JURIS_API_BASE

http://localhost:5091

Basis-URL der GraphQL API

JURIS_DB

/mnt/data/juriscassation/decisions.db

SQLite-Pfad (für direkte Suche)

MCP_PORT

5098

Port des MCP-Servers

MCP_HOST

0.0.0.0

Bind-Host des MCP-Servers

MCP_TRANSPORT

sse

Transporttyp (sse oder streamable-http)

Test mit mcporter

# List tools
npx mcporter list --http-url http://localhost:5098/sse --allow-http --schema

# Search
npx mcporter call search_decisions sujet=طلاق chamber_id=1 --allow-http --http-url http://localhost:5098/sse

Bereitstellung

Die App ist containerisiert und läuft intern auf Port 8000, der auf den Host-Port 5091 gemappt ist.

Related MCP Connectors

Related MCP Servers