Skip to main content
Glama
slapash

JurisCassation MCP Server

by slapash

JurisCassation API

GraphQL + REST обертка для juriscassation.cspj.ma — портала решений Кассационного суда Марокко.

Возможности

  • Живой поиск — проксирование запросов в реальном времени к арабскому поисковому эндпоинту

  • Локальный поиск — полнотекстовый поиск SQLite FTS5 по скачанным решениям

  • GraphQL API — типизированные запросы и мутации

  • PDF-прокси — кэширование и выдача PDF-файлов решений по зашифрованному ID

  • Фоновый парсер — индексация всех решений в локальную базу SQLite

Related MCP server: Entscheidsuche MCP Server

Быстрый старт

# 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 эндпоинты

Эндпоинт

Описание

GET /graphql

GraphQL-песочница (интерактивная)

POST /graphql

GraphQL API

GET /api/pdf/{encrypted_id}

Скачивание PDF решения (проксировано + кэшировано)

GET /api/stats

Статистика локального индекса

GraphQL схема

Запросы (Queries)

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

Мутации (Mutations)

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

Палаты

ID

Арабский

Французский

Английский

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-парсер

# 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

Заметки по архитектуре

  • Арабский эндпоинт (/Decisions/RechercheDecisionsRes) возвращает зашифрованные атрибуты data-id, необходимые для скачивания PDF

  • Французский эндпоинт (/Decisions/RechercheDecisionsResFr) возвращает числовые ID idArretCassation, но не возвращает зашифрованные ID

  • PDF скачиваются через /Decisions/GetArret?encryptedId=... — аутентификация не требуется

  • Пустой параметр Sujet в арабском поиске возвращает 0 результатов; мы используем ا (алиф) в качестве универсального символа подстановки

  • SSL-сертификат на исходном сайте неисправен; требуется verify=False

Переменные окружения

Переменная

По умолчанию

Описание

JURIS_DB

/data/decisions.db

Путь к базе данных SQLite

JURIS_PDF_CACHE

/data/pdfs

Директория кэша PDF

JURIS_CONCURRENCY

3

Макс. количество одновременных запросов парсинга

JURIS_DELAY

0.5

Задержка между страницами парсинга (в секундах)

MCP-сервер

Сервер MCP (Model Context Protocol) предоставляет все функции API в качестве инструментов для ИИ-агентов через SSE на порту 5098.

MCP-эндпоинт: http://localhost:5098/sse

Инструменты

Инструмент

Описание

search_decisions

Живой поиск по juriscassation.cspj.ma

search_local

Поиск FTS5 по локальному индексу SQLite

get_decision_pdf

Проверка/скачивание PDF решения по зашифрованному ID

list_chambers

Список всех 7 палат с количеством записей

scrape_chamber

Индексация решений палаты

get_stats

Статистика локального индекса

Ресурсы

URI

Описание

juriscassation://chambers

Справочник палат (AR/FR/EN)

juriscassation://stats

Текущая статистика индекса

Переменные окружения MCP

Переменная

По умолчанию

Описание

JURIS_API_BASE

http://localhost:5091

Базовый URL GraphQL API

JURIS_DB

/mnt/data/juriscassation/decisions.db

Путь к SQLite (для прямого поиска)

MCP_PORT

5098

Порт MCP-сервера

MCP_HOST

0.0.0.0

Хост привязки MCP-сервера

MCP_TRANSPORT

sse

Тип транспорта (sse или streamable-http)

Тестирование с помощью 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

Развертывание

Приложение контейнеризировано и работает на порту 8000 внутри контейнера, который проброшен на порт 5091 хоста.

Related MCP Connectors

Related MCP Servers