Документация · MCP

MCP-сервер legali.ge

Один адрес, через который Claude, ChatGPT и ваши собственные агенты напрямую работают с законодательством Грузии, судебной практикой и AI-копилотом legali.ge — с ответами, в которых указаны точные статьи.

Адрес MCP-сервера
https://mcp.legali.ge/mcp
  • 28 инструментов
  • OAuth 2.1 или API-ключ
  • Streamable HTTP · MCP 2025-06-18

Что можно делать

После подключения ассистент сам решает, когда заглянуть в legali.ge. Вы просто спрашиваете своими словами.

Подбор нужных документов

Опишите ситуацию на любом языке — find_documents вернёт подходящие законы, конкретные статьи и судебную практику, ранжированные по смыслу, а не по словам.

Судебная практика

Решения Верховного и Конституционного судов Грузии, практика ЕСПЧ и заключения Венецианской комиссии — поиск по смыслу.

Чтение законов и статей

Реквизиты, история редакций, оглавление и консолидированный текст любого акта с matsne.gov.ge или отдельная статья с прямой ссылкой.

Ответы со ссылками на нормы

Копилот legali.ge находит нормы и практику и отвечает со списком источников — тот же движок, что и на сайте.

Составление документов

20 типов документов — иски, жалобы, договоры, NDA, доверенности, претензии — по простому описанию, со ссылками на применимые нормы.

Ваши документы и черновики

Загрузите договор или письмо из суда для извлечения данных, опирайтесь на него в ответах и правьте документы в редакторе legali.ge с историей версий.

Попробуйте эти запросы

Вставьте в Claude или ChatGPT после подключения. Упоминание legali.ge помогает ассистенту выбрать нужные инструменты.

  • С помощью legali.ge найди статьи Гражданского кодекса Грузии и практику Верховного суда о возврате залога за аренду квартиры, если арендодатель отказывается его вернуть. Процитируй статьи и дай ссылки.

  • Меня уволили после трёх лет работы без письменного предупреждения. Что говорит Трудовой кодекс Грузии о компенсации и сроке обращения в суд? Сошлись на статьи через legali.ge.

  • Прочитай на legali.ge статью 128 Гражданского кодекса Грузии (документ 31702) и простыми словами объясни, какие сроки исковой давности действуют для требования о возврате займа.

  • Составь претензию магазину, который продал мне бракованную стиральную машину и отказывается её заменить, по закону Грузии о защите прав потребителей. Используй legali.ge и оставь пропуски для имён и дат.

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

Один и тот же адрес работает во всех клиентах. Вы один раз подтверждаете доступ на legali.ge — пароль приложению не передаётся — и подключение живёт, пока вы его не отзовёте.

Нужен аккаунт legali.ge (бесплатно, регистрация). У бесплатного аккаунта есть месячный лимит MCP-единиц и 10 пробных AI-запросов.

claude.ai и Claude Desktop — тарифы Pro, Max, Team и Enterprise

  1. Откройте Settings → Connectors.
  2. Нажмите «Add custom connector».
  3. Назовите его «legali.ge» и вставьте адрес MCP-сервера.
  4. Нажмите «Connect» — откроется страница legali.ge: проверьте название приложения и нажмите «Разрешить».
Адрес сервера
https://mcp.legali.ge/mcp

На тарифах Team и Enterprise добавить коннектор может только владелец организации. Названия пунктов меню могут отличаться в зависимости от тарифа и версии.

Авторизация

Способов авторизации два: OAuth для приложений, которые его поддерживают (Claude, ChatGPT, Claude Code и большинство современных клиентов), и личные API-ключи для всех остальных.

OAuth — подключить один раз

  1. Вы добавляете адрес сервера в приложении.
  2. Приложение открывает legali.ge в браузере. Если вы вошли, вы видите, какое приложение просит доступ и на какой адрес оно вернётся.
  3. Вы нажимаете «Разрешить». Приложение получает токены, привязанные к вашему аккаунту, — но не пароль.
  4. Приложение само обновляет токены. Пока вы пользуетесь им хотя бы раз в 90 дней, подключение остаётся активным — до отзыва в кабинете.

Личные API-ключи

API-ключ lgk_… — для клиентов, которые умеют передавать только заголовок: скрипты, серверы, CI, Cursor, Claude Code без браузера. Передавайте его как Authorization: Bearer lgk_…. Ключ действует от вашего имени и расходует лимит вашего тарифа.

  • Создавайте отдельный ключ на каждое устройство или интеграцию, с понятным названием; отзывайте, как только он больше не нужен.
  • Ключ показывается один раз. legali.ge хранит только его SHA-256-хеш, поэтому потерянный ключ не восстановить — отзовите его и создайте новый.
  • Храните ключи в переменных окружения или менеджере секретов — никогда в репозитории или в браузерном коде.
Управление ключами и подключениями →

Технические детали

  • Issuer: https://mcp.legali.ge. Discovery: /.well-known/oauth-protected-resource (RFC 9728) и /.well-known/oauth-authorization-server (RFC 8414; также /.well-known/openid-configuration).
  • Динамическая регистрация клиента (RFC 7591): POST /oauth/register. Redirect URI: https, http loopback (любой порт, RFC 8252) или private-use схема.
  • Authorization code + PKCE — только S256; код одноразовый и живёт 10 минут. Эндпоинты: /oauth/authorize, /oauth/token, /oauth/revoke. Scope: mcp.
  • Access token lga_… — 1 час. Refresh token lgr_… — 90 дней, меняется при каждом использовании (ротация) и продлевает окно, поэтому регулярно используемому приложению переподключаться не нужно. Только что использованный refresh token ещё 120 секунд принимается повторно — на случай сетевых повторов.
  • Запрос без токена или с истёкшим токеном получает 401 и заголовок WWW-Authenticate: Bearer resource_metadata="…", из которого клиент узнаёт, где начать авторизацию.
  • Отзыв подключения в кабинете сразу аннулирует его access- и refresh-токены.

Справочник инструментов

Сгенерировано из собственных описаний сервера (gelaw-mcp 0.2.0). Описания и схемы параметров — на английском, ровно так, как сервер передаёт их ИИ; краткие резюме — наши.

На хостинговом сервере любой вызов требует подключения (OAuth или API-ключ). Значок аккаунт отмечает инструменты, которые работают с вашими личными данными или тарифицируемыми базами; остальные — публичные данные.

Поиск и данные

find_documents

10 ед. 🔒 аккаунт только чтение

Подбирает законы, статьи и судебную практику по вопросу — без написания ответа.

Select the documents relevant to a situation or question — WITHOUT generating an answer. Understands the query (domains, Georgian legal terms), searches laws by meaning (vector indexes + LLM rerank), court practice (Supreme/Constitutional Court, ECtHR, Venice Commission) and the curated legal-concept map, and returns ranked laws with the matched article, practice items and anchor articles. Use it to build your own research set, then read texts with get_law / get_article. Prefer it over search_laws for natural-language queries in any language. Costs 10 MCP units.

Параметры: find_documents
ИмяТип Обяз.По умолчанию Описание
query string да — Situation or question in any language (max 2000 chars).
limit integer — 10 Max laws to return. min 1 · max 30
lang string — "ru" Language for the query-understanding summary. Значения: karuen
document_type string — — Optional document-type filter.
status string — — Optional status filter (e.g. 'active').
include_practice boolean — true
include_concepts boolean — true
JSON-схема
inputSchema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Situation or question in any language (max 2000 chars)."
    },
    "limit": {
      "type": "integer",
      "default": 10,
      "minimum": 1,
      "maximum": 30,
      "description": "Max laws to return."
    },
    "lang": {
      "type": "string",
      "enum": [
        "ka",
        "ru",
        "en"
      ],
      "default": "ru",
      "description": "Language for the query-understanding summary."
    },
    "document_type": {
      "type": "string",
      "description": "Optional document-type filter."
    },
    "status": {
      "type": "string",
      "description": "Optional status filter (e.g. 'active')."
    },
    "include_practice": {
      "type": "boolean",
      "default": true
    },
    "include_concepts": {
      "type": "boolean",
      "default": true
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}

search_court_practice

2 ед. 🔒 аккаунт только чтение

Ищет практику Верховного и Конституционного судов, ЕСПЧ и Венецианской комиссии по смыслу.

Search court practice by meaning: Georgian Supreme Court decisions, Constitutional Court judgments, ECtHR case law and Venice Commission opinions. Returns ranked items with an excerpt and the source link (ECtHR/Venice: short excerpt + official link only). Costs 2 MCP units.

Параметры: search_court_practice
ИмяТип Обяз.По умолчанию Описание
query string да — Legal issue in any language.
sources array<string> — — Subset of sources; default all. Значения: supremeconstcourtechrvenice
limit integer — 8 min 1 · max 20
JSON-схема
inputSchema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Legal issue in any language."
    },
    "sources": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "supreme",
          "constcourt",
          "echr",
          "venice"
        ]
      },
      "description": "Subset of sources; default all."
    },
    "limit": {
      "type": "integer",
      "default": 8,
      "minimum": 1,
      "maximum": 20
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}

get_law

1 ед. 🔒 аккаунт только чтение

Читает закон: реквизиты, редакции, оглавление или консолидированный текст постранично.

Read a law / legal act by its matsne document id: metadata (title, type, status, registration code, issuer, dates, list of historical versions), the table of contents (articles with chunk_key for get_article) and/or the consolidated text, paged by characters (follow next_offset). Costs 1 MCP unit.

Параметры: get_law
ИмяТип Обяз.По умолчанию Описание
doc_id string да — Numeric matsne document id, e.g. '31702' (Civil Code).
include array<string> — — Parts to return; default ['meta','toc']. Значения: metatoctext
offset integer — 0 Text offset (characters) — pass next_offset to continue. min 0
max_chars integer — 20000 min 1000 · max 60000
JSON-схема
inputSchema
{
  "type": "object",
  "properties": {
    "doc_id": {
      "type": "string",
      "description": "Numeric matsne document id, e.g. '31702' (Civil Code)."
    },
    "include": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "meta",
          "toc",
          "text"
        ]
      },
      "description": "Parts to return; default ['meta','toc']."
    },
    "offset": {
      "type": "integer",
      "default": 0,
      "minimum": 0,
      "description": "Text offset (characters) — pass next_offset to continue."
    },
    "max_chars": {
      "type": "integer",
      "default": 20000,
      "minimum": 1000,
      "maximum": 60000
    }
  },
  "required": [
    "doc_id"
  ],
  "additionalProperties": false
}

get_article

1 ед. 🔒 аккаунт только чтение

Одна статья закона по номеру или chunk_key, с прямой ссылкой.

Read one article of a law: pass doc_id plus either chunk_key (from get_law toc / find_documents, e.g. 'art_128') or the article number ('128', '128_1'). Returns the article title, full text and a deep link. Costs 1 MCP unit.

Параметры: get_article
ИмяТип Обяз.По умолчанию Описание
doc_id string да —
chunk_key string — — e.g. art_128, art_128_1, doc, att_1
article string — — Article number, e.g. '128'.
JSON-схема
inputSchema
{
  "type": "object",
  "properties": {
    "doc_id": {
      "type": "string"
    },
    "chunk_key": {
      "type": "string",
      "description": "e.g. art_128, art_128_1, doc, att_1"
    },
    "article": {
      "type": "string",
      "description": "Article number, e.g. '128'."
    }
  },
  "required": [
    "doc_id"
  ],
  "additionalProperties": false
}

search_laws

бесплатно только чтение

Бесплатный полнотекстовый поиск по базе законодательства Грузии с фильтрами.

Full-text search over the Georgian legal corpus (matsne.gov.ge). Returns matching documents with title, date, type, status, issuer, registration code and a relevance score. Use the returned id with other tools.

Параметры: search_laws
ИмяТип Обяз.По умолчанию Описание
query string да — Search terms (Georgian or transliterated).
limit integer — 20 min 1 · max 200
document_type string — — Filter by document type (e.g. 'law', 'order').
status string — — Filter by status (e.g. 'active').
issuer string — — Filter by issuing authority.
reg_code_prefix string — — Filter by registration-code prefix; comma-separated for multiple.
JSON-схема
inputSchema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Search terms (Georgian or transliterated)."
    },
    "limit": {
      "type": "integer",
      "default": 20,
      "minimum": 1,
      "maximum": 200
    },
    "document_type": {
      "type": "string",
      "description": "Filter by document type (e.g. 'law', 'order')."
    },
    "status": {
      "type": "string",
      "description": "Filter by status (e.g. 'active')."
    },
    "issuer": {
      "type": "string",
      "description": "Filter by issuing authority."
    },
    "reg_code_prefix": {
      "type": "string",
      "description": "Filter by registration-code prefix; comma-separated for multiple."
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}

suggest_questions

бесплатно только чтение

Около десяти естественных вопросов о законе на любом из 9 языков.

Generate ~10 natural questions a user might ask about a specific law document, in the requested language. Good for exploring an unfamiliar law.

Параметры: suggest_questions
ИмяТип Обяз.По умолчанию Описание
doc_id string да — Numeric matsne document id (optionally with a -N version suffix).
lang string — "ka" Значения: karuentrzharhedefr
JSON-схема
inputSchema
{
  "type": "object",
  "properties": {
    "doc_id": {
      "type": "string",
      "description": "Numeric matsne document id (optionally with a -N version suffix)."
    },
    "lang": {
      "type": "string",
      "enum": [
        "ka",
        "ru",
        "en",
        "tr",
        "zh",
        "ar",
        "he",
        "de",
        "fr"
      ],
      "default": "ka"
    }
  },
  "required": [
    "doc_id"
  ],
  "additionalProperties": false
}

top_search_queries

бесплатно только чтение

Что чаще всего ищут на legali.ge.

The most popular search queries on legali.ge, by count. Useful to gauge what legal topics people look for.

Параметры: top_search_queries
ИмяТип Обяз.По умолчанию Описание
limit integer — 100 min 1 · max 1000
JSON-схема
inputSchema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "default": 100,
      "minimum": 1,
      "maximum": 1000
    }
  },
  "required": [],
  "additionalProperties": false
}

AI-копилот

get_chat_response

бесплатно только чтение

Забирает результат долгой AI-операции по request_id; ждёт до ~45 с.

Fetch the result of an ask_legal_question / generate_legal_document / canvas_ai_edit job by its request_id. Waits up to ~45 s for a job that is still running (wait=false: check once). Returns {status:'processing'} if it is still not ready — call again with the same request_id.

Параметры: get_chat_response
ИмяТип Обяз.По умолчанию Описание
request_id string да —
wait boolean — true
JSON-схема
inputSchema
{
  "type": "object",
  "properties": {
    "request_id": {
      "type": "string"
    },
    "wait": {
      "type": "boolean",
      "default": true
    }
  },
  "required": [
    "request_id"
  ],
  "additionalProperties": false
}

vote_answer

бесплатно

Оценка ответа копилота — нравится или нет.

Record a thumbs up/down on a copilot answer (quality signal). Pass vote=null to clear a prior vote.

Параметры: vote_answer
ИмяТип Обяз.По умолчанию Описание
chat_id string да — The request_id / chat_id of the answer.
msg_idx integer — 0 Index of the message being rated.
vote string | null — "up" Значения: updownnull
JSON-схема
inputSchema
{
  "type": "object",
  "properties": {
    "chat_id": {
      "type": "string",
      "description": "The request_id / chat_id of the answer."
    },
    "msg_idx": {
      "type": "integer",
      "description": "Index of the message being rated.",
      "default": 0
    },
    "vote": {
      "type": [
        "string",
        "null"
      ],
      "enum": [
        "up",
        "down",
        null
      ],
      "default": "up"
    }
  },
  "required": [
    "chat_id"
  ],
  "additionalProperties": false
}

Ваш аккаунт и документы

get_usage

бесплатно 🔒 аккаунт только чтение

Показывает остаток AI-запросов и MCP-единиц и прайс.

Your remaining allowances: AI requests (ask / generate / canvas AI — trial, subscription, packages) and MCP data units for this month, plus the price list. Free.

Без параметров.

JSON-схема
inputSchema
{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}

list_my_chats

бесплатно 🔒 аккаунт только чтение

Список ваших сохранённых чатов и составленных документов.

List the authenticated user's saved chats and generated documents.

Без параметров.

JSON-схема
inputSchema
{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}

get_my_chat

бесплатно 🔒 аккаунт только чтение

Полная история одного вашего чата.

Fetch the full message history of one of the authenticated user's chats.

Параметры: get_my_chat
ИмяТип Обяз.По умолчанию Описание
chat_id string да —
JSON-схема
inputSchema
{
  "type": "object",
  "properties": {
    "chat_id": {
      "type": "string"
    }
  },
  "required": [
    "chat_id"
  ],
  "additionalProperties": false
}

list_user_documents

бесплатно 🔒 аккаунт только чтение

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

List the authenticated user's uploaded personal documents and their extraction status (processing / ready / error).

Без параметров.

JSON-схема
inputSchema
{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}

get_user_document

бесплатно 🔒 аккаунт только чтение

Один загруженный документ с извлечёнными сторонами, датами, суммами и фактами.

Fetch one personal document's metadata plus its extracted structured data (parties, dates, amounts, key facts, legal references, full text).

Параметры: get_user_document
ИмяТип Обяз.По умолчанию Описание
doc_id string да —
JSON-схема
inputSchema
{
  "type": "object",
  "properties": {
    "doc_id": {
      "type": "string"
    }
  },
  "required": [
    "doc_id"
  ],
  "additionalProperties": false
}

upload_user_document

бесплатно 🔒 аккаунт

Загружает PDF, изображение или текст (≤ 4 МБ) для структурного извлечения.

Upload a personal legal document (PDF, JPEG, PNG, WebP or text, <=4MB). The backend extracts structured data asynchronously; poll get_user_document for status. Provide either data_b64, or (local stdio only) a filesystem path.

Параметры: upload_user_document
ИмяТип Обяз.По умолчанию Описание
filename string — —
content_type string — — MIME type; inferred from filename/path if omitted.
data_b64 string — — Base64-encoded file contents.
path string — — Local file path (stdio transport only).
JSON-схема
inputSchema
{
  "type": "object",
  "properties": {
    "filename": {
      "type": "string"
    },
    "content_type": {
      "type": "string",
      "description": "MIME type; inferred from filename/path if omitted."
    },
    "data_b64": {
      "type": "string",
      "description": "Base64-encoded file contents."
    },
    "path": {
      "type": "string",
      "description": "Local file path (stdio transport only)."
    }
  },
  "required": [],
  "additionalProperties": false
}

delete_user_document

бесплатно 🔒 аккаунт необратимо

Безвозвратно удаляет загруженный документ.

Permanently delete one of the authenticated user's personal documents (irreversible).

Параметры: delete_user_document
ИмяТип Обяз.По умолчанию Описание
doc_id string да —
JSON-схема
inputSchema
{
  "type": "object",
  "properties": {
    "doc_id": {
      "type": "string"
    }
  },
  "required": [
    "doc_id"
  ],
  "additionalProperties": false
}

Редактор документов (canvas)

create_canvas

бесплатно 🔒 аккаунт

Создаёт редактируемый документ, по желанию из шаблона или вашего текста.

Create a new editable document canvas. Optionally seed it from a document type template and/or initial content. Returns the canvas metadata (including id and headRev).

Параметры: create_canvas
ИмяТип Обяз.По умолчанию Описание
document_type string — — Template to seed from (see generate_legal_document types).
title string — —
content string — — Initial document body (markdown).
lang string — "ka" Значения: karuentrzharhedefr
JSON-схема
inputSchema
{
  "type": "object",
  "properties": {
    "document_type": {
      "type": "string",
      "description": "Template to seed from (see generate_legal_document types)."
    },
    "title": {
      "type": "string"
    },
    "content": {
      "type": "string",
      "description": "Initial document body (markdown)."
    },
    "lang": {
      "type": "string",
      "enum": [
        "ka",
        "ru",
        "en",
        "tr",
        "zh",
        "ar",
        "he",
        "de",
        "fr"
      ],
      "default": "ka"
    }
  },
  "required": [],
  "additionalProperties": false
}

list_canvases

бесплатно 🔒 аккаунт только чтение

Список ваших документов в редакторе.

List the authenticated user's document canvases.

Параметры: list_canvases
ИмяТип Обяз.По умолчанию Описание
rebuild boolean — — Force-rebuild the index from storage.
JSON-схема
inputSchema
{
  "type": "object",
  "properties": {
    "rebuild": {
      "type": "boolean",
      "description": "Force-rebuild the index from storage."
    }
  },
  "required": [],
  "additionalProperties": false
}

get_canvas

бесплатно 🔒 аккаунт только чтение

Чтение документа: реквизиты, содержимое, чат, любая ревизия.

Fetch a canvas: metadata, content and/or chat thread. Use fields to select what to return; omit rev for the latest revision. Read headRev here before calling save_canvas / restore_canvas.

Параметры: get_canvas
ИмяТип Обяз.По умолчанию Описание
canvas_id string да —
rev integer — — Specific revision; defaults to latest.
fields array<string> — — Значения: metacontentchat
chat_before string — — ISO timestamp for paginating the chat thread.
JSON-схема
inputSchema
{
  "type": "object",
  "properties": {
    "canvas_id": {
      "type": "string"
    },
    "rev": {
      "type": "integer",
      "description": "Specific revision; defaults to latest."
    },
    "fields": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "meta",
          "content",
          "chat"
        ]
      }
    },
    "chat_before": {
      "type": "string",
      "description": "ISO timestamp for paginating the chat thread."
    }
  },
  "required": [
    "canvas_id"
  ],
  "additionalProperties": false
}

save_canvas

бесплатно 🔒 аккаунт

Сохраняет новую ревизию документа (оптимистичная блокировка по base_rev).

Save an edited canvas body as a new revision. base_rev MUST equal the current headRev (read it via get_canvas) — a mismatch is a 409 conflict. op_id is auto-generated if omitted.

Параметры: save_canvas
ИмяТип Обяз.По умолчанию Описание
canvas_id string да —
base_rev integer да — The headRev you edited from.
content string да — The full new document body.
op_id string — — Idempotency key (UUID); auto-generated if omitted.
summary string — — Short change summary for the version list.
filled array<integer> — — Indices of placeholders filled by this edit.
JSON-схема
inputSchema
{
  "type": "object",
  "properties": {
    "canvas_id": {
      "type": "string"
    },
    "base_rev": {
      "type": "integer",
      "description": "The headRev you edited from."
    },
    "content": {
      "type": "string",
      "description": "The full new document body."
    },
    "op_id": {
      "type": "string",
      "description": "Idempotency key (UUID); auto-generated if omitted."
    },
    "summary": {
      "type": "string",
      "description": "Short change summary for the version list."
    },
    "filled": {
      "type": "array",
      "items": {
        "type": "integer"
      },
      "description": "Indices of placeholders filled by this edit."
    }
  },
  "required": [
    "canvas_id",
    "base_rev",
    "content"
  ],
  "additionalProperties": false
}

rename_canvas

бесплатно 🔒 аккаунт

Переименование документа.

Rename a canvas.

Параметры: rename_canvas
ИмяТип Обяз.По умолчанию Описание
canvas_id string да —
title string да —
JSON-схема
inputSchema
{
  "type": "object",
  "properties": {
    "canvas_id": {
      "type": "string"
    },
    "title": {
      "type": "string"
    }
  },
  "required": [
    "canvas_id",
    "title"
  ],
  "additionalProperties": false
}

duplicate_canvas

бесплатно 🔒 аккаунт

Копия документа в новый.

Duplicate a canvas into a new one, optionally overriding its content/title.

Параметры: duplicate_canvas
ИмяТип Обяз.По умолчанию Описание
canvas_id string да —
content string — —
title string — —
JSON-схема
inputSchema
{
  "type": "object",
  "properties": {
    "canvas_id": {
      "type": "string"
    },
    "content": {
      "type": "string"
    },
    "title": {
      "type": "string"
    }
  },
  "required": [
    "canvas_id"
  ],
  "additionalProperties": false
}

delete_canvas

бесплатно 🔒 аккаунт необратимо

Безвозвратное удаление документа.

Permanently delete a canvas (irreversible).

Параметры: delete_canvas
ИмяТип Обяз.По умолчанию Описание
canvas_id string да —
JSON-схема
inputSchema
{
  "type": "object",
  "properties": {
    "canvas_id": {
      "type": "string"
    }
  },
  "required": [
    "canvas_id"
  ],
  "additionalProperties": false
}

restore_canvas

бесплатно 🔒 аккаунт

Восстанавливает прежнюю ревизию как новую текущую.

Restore a canvas to an earlier revision, creating a new head revision. base_rev must equal the current headRev; op_id auto-generated if omitted.

Параметры: restore_canvas
ИмяТип Обяз.По умолчанию Описание
canvas_id string да —
rev integer да — The revision to restore.
base_rev integer да — The current headRev.
op_id string — —
JSON-схема
inputSchema
{
  "type": "object",
  "properties": {
    "canvas_id": {
      "type": "string"
    },
    "rev": {
      "type": "integer",
      "description": "The revision to restore."
    },
    "base_rev": {
      "type": "integer",
      "description": "The current headRev."
    },
    "op_id": {
      "type": "string"
    }
  },
  "required": [
    "canvas_id",
    "rev",
    "base_rev"
  ],
  "additionalProperties": false
}

canvas_ai_edit

1 AI-запрос 🔒 аккаунт

AI-правка документа: заполнить пропуски, переписать фрагмент или составить заново.

Ask the AI to edit a canvas in place (fill placeholders, redraft a selection, or generate from scratch with mode='generate'). The edit is committed server-side as a new revision. Blocks for the result unless wait=false; afterwards read the new content with get_canvas.

Параметры: canvas_ai_edit
ИмяТип Обяз.По умолчанию Описание
canvas_id string да —
base_rev integer да — Current headRev (from get_canvas).
question string да — Instruction for the AI editor.
mode string — "" 'generate' to (re)generate the whole document. Значения: ""generate
selection string — — Selected text the edit should target (<=3000 chars).
client_lang string — "ka" Значения: karuentrzharhedefr
op_id string — —
user_docs array<string> — —
wait boolean — true
timeout number — —
JSON-схема
inputSchema
{
  "type": "object",
  "properties": {
    "canvas_id": {
      "type": "string"
    },
    "base_rev": {
      "type": "integer",
      "description": "Current headRev (from get_canvas)."
    },
    "question": {
      "type": "string",
      "description": "Instruction for the AI editor."
    },
    "mode": {
      "type": "string",
      "enum": [
        "",
        "generate"
      ],
      "default": "",
      "description": "'generate' to (re)generate the whole document."
    },
    "selection": {
      "type": "string",
      "description": "Selected text the edit should target (<=3000 chars)."
    },
    "client_lang": {
      "type": "string",
      "enum": [
        "ka",
        "ru",
        "en",
        "tr",
        "zh",
        "ar",
        "he",
        "de",
        "fr"
      ],
      "default": "ka"
    },
    "op_id": {
      "type": "string"
    },
    "user_docs": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "wait": {
      "type": "boolean",
      "default": true
    },
    "timeout": {
      "type": "number"
    }
  },
  "required": [
    "canvas_id",
    "base_rev",
    "question"
  ],
  "additionalProperties": false
}

Цены и лимиты

MCP использует тот же аккаунт и тот же баланс, что и сайт. Кошельков два, и ничего не списывается дважды.

✨ AI-запросы

ask_legal_question, generate_legal_document и canvas_ai_edit тратят по одному AI-запросу — из того же кошелька, что и копилот на сайте: 10 пробных запросов, затем месячные запросы подписки, затем пакеты.

📚 MCP-единицы

Инструменты баз, которые не бесплатны на сайте, — AI-подбор документов, поиск судебной практики и машинное чтение текстов — тратят MCP-единицы. В каждом тарифе (и в бесплатном) есть месячный лимит; пакеты единиц не сгорают и расходуются после лимита.

🔎 Бесплатно

Полнотекстовый поиск, связанные документы, подсказки вопросов, популярные запросы, ваши чаты, документы и canvas, get_usage, get_chat_response.

Стоимость операций

ИнструментЧто делаетСтоимость
find_documents Подбирает законы, статьи и судебную практику по вопросу — без написания ответа. 10 ед.
search_court_practice Ищет практику Верховного и Конституционного судов, ЕСПЧ и Венецианской комиссии по смыслу. 2 ед.
get_law Читает закон: реквизиты, редакции, оглавление или консолидированный текст постранично. 1 ед.
get_article Одна статья закона по номеру или chunk_key, с прямой ссылкой. 1 ед.
ask_legal_question AI-копилот legali.ge: ответ по праву Грузии со ссылками на источники. 1 AI-запрос
generate_legal_document Составляет юридический документ (20 типов) по простому описанию, со ссылками на нормы. 1 AI-запрос
canvas_ai_edit AI-правка документа: заполнить пропуски, переписать фрагмент или составить заново. 1 AI-запрос
Все остальные инструменты бесплатно

Месячные лимиты

Актуальные тарифы и пакеты единиц — на странице тарифов.

  • Месячный лимит обновляется 1-го числа каждого календарного месяца (UTC) и не переносится. Пакеты расходуются только после исчерпания лимита.
  • Единицы списываются только после успешного ответа — ошибки и таймауты бесплатны.
  • Когда кошелёк исчерпан, инструмент возвращает ошибку (isError) с понятным сообщением и ссылкой на пополнение; ассистент покажет её вам. Ничего не списывается автоматически.
  • Попросите ассистента вызвать get_usage — увидите оба баланса и прайс.

Делаете интеграцию или агента для юрфирмы? В тарифе api — большой лимит единиц и AI-запросы для автоматизированного исследования.

Тарифы и пакеты →

Для разработчиков

Протокол

  • Транспорт: MCP Streamable HTTP, ревизия 2025-06-18 (также 2025-03-26 и 2024-11-05). Эндпоинт: POST https://mcp.legali.ge/mcp.
  • Stateless: каждый запрос авторизуется отдельно, Mcp-Session-Id не выдаётся, на каждый JSON-RPC-запрос приходит один ответ application/json — без SSE-потока. GET /mcp отвечает 405, уведомления (notifications) — 202.
  • Методы: initialize, ping, tools/list, tools/call. Capabilities: только tools (listChanged: false) — resources, prompts и sampling нет.
  • JSON-RPC-батчи (массив сообщений) принимаются, ответ — тоже массив, но спецификация 2025-06-18 убрала батчинг, поэтому универсальным клиентам на него полагаться не стоит.
  • CORS открыт (Access-Control-Allow-Origin: *), так что браузерные клиенты могут обращаться к эндпоинту напрямую — но никогда не отдавайте API-ключ в браузер.
  • Результат: content[0].text содержит JSON текстом, объекты дублируются в structuredContent. У инструментов есть аннотации (readOnlyHint, destructiveHint…), чтобы клиент мог спросить подтверждение перед удалением.
Описание сервера (для ИИ)
Tools for the legali.ge Georgian legal database: select relevant laws, articles and court practice for a query, read law texts, ask the AI legal copilot (answers cite sources), draft legal documents, manage personal documents and edit document canvases. Public tools work anonymously; tools marked '(requires authentication)' need a Cognito ID token. To research yourself: find_documents → get_law / get_article / search_court_practice (metered in MCP units; get_usage shows the balance). For a finished cited answer use ask_legal_question; to produce a filing use generate_legal_document or the canvas_* tools (these spend AI requests).

Долгие AI-операции

Ответ копилота обычно занимает 1–2 минуты, составление документа — дольше; это больше, чем большинство промежуточных серверов держат запрос открытым. Поэтому ask_legal_question, generate_legal_document и canvas_ai_edit ждут около 50 секунд. Если результат не готов, они возвращают обычный (не ошибочный) результат:

structuredContent
{
  "status": "processing",
  "request_id": "…",
  "next": "The job is still running … Call get_chat_response with this request_id to get the result."
}

Затем вызовите get_chat_response с тем же request_id: он ждёт ещё около 45 секунд и, если операция всё ещё идёт, возвращает тот же объект «processing» — вызовите снова. По готовности возвращается status "ready" с ответом и источниками. wait: false отправляет запрос без ожидания (например, чтобы запустить несколько операций параллельно); результат заберите позже через get_chat_response. AI-запрос тратится один раз на операцию, а не на каждую проверку.

python
import json, os, urllib.request

MCP = "https://mcp.legali.ge/mcp"
KEY = os.environ["LEGALI_KEY"]          # lgk_…  (a personal API key)

def call(name, arguments, _id=[0]):
    _id[0] += 1
    body = {"jsonrpc": "2.0", "id": _id[0], "method": "tools/call",
            "params": {"name": name, "arguments": arguments}}
    req = urllib.request.Request(MCP, data=json.dumps(body).encode(), method="POST", headers={
        "Authorization": f"Bearer {KEY}",
        "Content-Type": "application/json",
        "Accept": "application/json, text/event-stream"})
    with urllib.request.urlopen(req, timeout=90) as r:
        result = json.load(r)["result"]
    if result.get("isError"):             # e.g. quota exhausted (status 402)
        raise RuntimeError(result["content"][0]["text"])
    return result["structuredContent"]

res = call("ask_legal_question", {"question": "арендодатель не возвращает залог за квартиру"})
while res.get("status") == "processing":  # not ready within ~50 s
    res = call("get_chat_response", {"request_id": res["request_id"]})
print(json.dumps(res, ensure_ascii=False, indent=2))

Ошибки

ЧтоЗначениеЧто делать
HTTP 401
WWW-Authenticate
Токена нет, он истёк или отозванOAuth-клиент обновляет токен или заново проходит авторизацию; с API-ключом проверьте, не отозван ли он.
HTTP 405GET или другой не-POST запрос на /mcpОтправляйте POST с JSON-RPC.
-32700 -32600 -32601 -32602 -32603Ошибка разбора, неверный запрос, неизвестный метод, неверные параметры, внутренняя ошибкаПроверьте формат сообщения (например, tools/call без name → -32602).
isError: trueИнструмент выполнился, но бэкенд отказал: текст «Error: … (status N)»400 неверные аргументы · 402 лимит исчерпан (в сообщении — какой кошелёк и ссылка на пополнение) · 404 не найдено · 409 конфликт ревизий canvas (перечитайте headRev через get_canvas).

Советы по использованию

  • Схема исследования: один раз find_documents (10 ед.) → get_article только для нужных статей (по 1 ед.) → search_court_practice по конкретному вопросу (2 ед.). Читать целый кодекс через get_law нужно редко.
  • search_laws бесплатен: используйте его, когда знаете название или регистрационный код; для вопросов на естественном языке — find_documents.
  • Кешируйте результаты get_law / get_article на своей стороне: консолидированный текст меняется только при поправках, а meta в get_law показывает список редакций.
  • Сохранение canvas оптимистичное: прочитайте headRev через get_canvas и передайте как base_rev; при 409 перечитайте и повторите.
  • Перед крупными автоматическими задачами проверяйте баланс через get_usage.

История изменений

  • 0.2.0 — инструменты баз с учётом MCP-единиц (find_documents, search_court_practice, get_law, get_article, get_usage); OAuth 2.1 с динамической регистрацией клиентов и ротацией refresh-токенов; личные API-ключи; адрес mcp.legali.ge; долгие AI-операции продолжаются через get_chat_response.
  • 0.1 — первая версия: 22 инструмента (поиск, копилот, составление документов, личные документы, редактор) с токенами аккаунта legali.ge.

Безопасность и приватность

  • На странице согласия видно название приложения и адрес, на который оно вернётся, — поддельное приложение заметно до нажатия «Разрешить».
  • Подключённое приложение действует от вашего имени: может всё, что можете вы на legali.ge, — искать и читать, тратить ваши AI-запросы и MCP-единицы, просматривать, создавать и удалять ваши чаты, документы и canvas. Подключайте только приложения, которым доверяете.
  • Пароль приложению не передаётся никогда. Подтвердить подключение и управлять ключами можно только настоящей сессией на legali.ge — MCP-токеном нельзя одобрить другое приложение.
  • Отзыв подключения или ключа в кабинете действует сразу. Если аккаунт legali.ge удалён или заблокирован, все его подключения перестают работать.
  • MCP-сервер — тонкий прокси над тем же API, что и сайт: он наследует все проверки владения и лимиты и не хранит собственных данных. Каждый вызов бэкенда несёт короткоживущее (10 минут) подписанное подтверждение вашего аккаунта.
  • Документы ЕСПЧ и Венецианской комиссии из-за авторских прав возвращаются коротким фрагментом со ссылкой на официальный текст.
  • Ответы готовит ИИ по правовым источникам, и в них возможны ошибки. Официальный источник законодательства Грузии — matsne.gov.ge; проверяйте указанные статьи, прежде чем на них полагаться.
Политика обработки персональных данных →

Частые вопросы

На каких тарифах Claude и ChatGPT можно подключиться?

В Claude собственные коннекторы доступны на тарифах Pro, Max, Team и Enterprise (claude.ai и Claude Desktop); на Team/Enterprise добавить коннектор может потребоваться владельцу организации. В ChatGPT собственные MCP-коннекторы — часть developer mode, который есть не на всех тарифах: проверьте Settings → Apps & Connectors. Claude Code, Cursor и другие инструменты разработчика работают с любым аккаунтом legali.ge.

Плачу ли я дважды, если у меня уже есть подписка?

Нет. AI-ответ через Claude или ChatGPT тратит один запрос из того же баланса, что и на сайте; MCP-единицы — только для операций с базами и входят в месячный лимит вашего тарифа.

Как отключить приложение?

Кабинет → AI-подключения → «Отозвать» рядом с приложением (или ключом). Доступ прекращается сразу; чтобы подключиться снова, потребуется новое подтверждение.

Какие языки понимает?

Спрашивайте на любом языке. Копилот отвечает на языке вопроса, find_documents и search_court_practice принимают запросы на любом языке, подсказки вопросов — на 9 языках. Тексты законов и решений — на грузинском, как опубликованы.

Ассистент говорит, что ответ ещё «processing». Что делать?

Всё в порядке: долгие ответы продолжаются в фоне. Ассистент должен вызвать get_chat_response с тем же request_id — если он этого не сделал, попросите. Запрос тратится один раз.

OAuth или API-ключ — что выбрать?

OAuth, если клиент его поддерживает: ничего не нужно копировать, токены обновляются сами, и каждое приложение можно отозвать отдельно. API-ключи — для скриптов, серверов и клиентов, которые принимают только заголовок.

Можно ли запустить сервер локально?

У сервера есть и локальный stdio-режим (python -m gelaw_mcp.server_stdio) с авторизацией аккаунтом legali.ge — для разработки и собственной инфраструктуры. Учёт ведётся на бэкенде legali.ge, поэтому цены и лимиты те же; большинству проще хостинговый адрес.

Это юридическая консультация?

Нет. legali.ge — сервис правовой информации: AI-ответы ссылаются на источники, но могут ошибаться, а официальный текст публикуется на matsne.gov.ge. Для важного решения обратитесь к юристу.