Skip to main content
Glama
slapash

JurisCassation MCP Server

by slapash

API de JurisCassation

Wrapper de GraphQL + REST para juriscassation.cspj.ma — el portal de decisiones del Tribunal de Casación de Marruecos.

Características

  • Búsqueda en vivo — paso directo en tiempo real al endpoint de búsqueda en árabe

  • Búsqueda local — búsqueda de texto completo FTS5 en SQLite sobre las decisiones extraídas

  • API GraphQL — consultas y mutaciones con seguridad de tipos

  • Proxy de PDF — almacena en caché y sirve los PDF de las decisiones mediante un ID cifrado

  • Scraper en segundo plano — indexa todas las decisiones en una base de datos SQLite local

Related MCP server: Entscheidsuche MCP Server

Inicio rápido

# 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

Endpoints de la API

Endpoint

Descripción

GET /graphql

Entorno de pruebas de GraphQL (interactivo)

POST /graphql

API GraphQL

GET /api/pdf/{encrypted_id}

Descargar PDF de la decisión (proxy + caché)

GET /api/stats

Estadísticas del índice local

Esquema GraphQL

Consultas

# 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 }
  }
}

Mutaciones

# 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)
}

Salas

ID

Árabe

Francés

Inglés

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

Scraper CLI

# 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

Notas de arquitectura

  • El endpoint en árabe (/Decisions/RechercheDecisionsRes) devuelve atributos data-id cifrados necesarios para la descarga de PDF

  • El endpoint en francés (/Decisions/RechercheDecisionsResFr) devuelve IDs numéricos idArretCassation pero no IDs cifrados

  • Los PDF se descargan a través de /Decisions/GetArret?encryptedId=... — no se requiere autenticación

  • Un Sujet vacío en la búsqueda en árabe devuelve 0 resultados; usamos ا (alef) como comodín general

  • El certificado SSL en el sitio upstream está roto; se requiere verify=False

Variables de entorno

Variable

Predeterminado

Descripción

JURIS_DB

/data/decisions.db

Ruta de la base de datos SQLite

JURIS_PDF_CACHE

/data/pdfs

Directorio de caché de PDF

JURIS_CONCURRENCY

3

Máximo de solicitudes de scraping concurrentes

JURIS_DELAY

0.5

Retraso entre páginas de scraping (segundos)

Servidor MCP

Un servidor MCP (Model Context Protocol) expone todas las funciones de la API como herramientas para agentes de IA a través de SSE en el puerto 5098.

Endpoint MCP: http://localhost:5098/sse

Herramientas

Herramienta

Descripción

search_decisions

Búsqueda en vivo en juriscassation.cspj.ma

search_local

Búsqueda FTS5 sobre el índice SQLite local

get_decision_pdf

Comprobar/descargar un PDF de decisión por ID cifrado

list_chambers

Listar las 7 salas con recuentos de índice

scrape_chamber

Indexar decisiones de una sala

get_stats

Estadísticas del índice local

Recursos

URI

Descripción

juriscassation://chambers

Lista de referencia de salas (AR/FR/EN)

juriscassation://stats

Estadísticas actuales del índice

Variables de entorno MCP

Variable

Predeterminado

Descripción

JURIS_API_BASE

http://localhost:5091

URL base de la API GraphQL

JURIS_DB

/mnt/data/juriscassation/decisions.db

Ruta de SQLite (para búsqueda directa)

MCP_PORT

5098

Puerto del servidor MCP

MCP_HOST

0.0.0.0

Host de enlace del servidor MCP

MCP_TRANSPORT

sse

Tipo de transporte (sse o streamable-http)

Probar con 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

Despliegue

La aplicación está contenerizada y se ejecuta en el puerto 8000 internamente, mapeado al puerto 5091 del host.

Related MCP Connectors

Related MCP Servers