Metadata-Version: 2.5
Name: ru-legal-skills-mcp
Version: 0.3.0
Summary: Unified MCP server для ru-legal-skills — все 33 tools + 186 skills РФ legal AI в одном пакете. Подключи в Claude Code / Cursor / любой MCP-клиент.
Project-URL: Homepage, https://github.com/zhuga79/ru-legal-skills
Project-URL: Repository, https://github.com/zhuga79/ru-legal-skills
Project-URL: Issues, https://github.com/zhuga79/ru-legal-skills/issues
Author: ru-legal contributors
License: Apache-2.0
Keywords: claude,legal,legaltech,mcp,russian-law,skills
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Legal Industry
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Topic :: Office/Business
Requires-Python: >=3.11
Requires-Dist: fastmcp<4,>=3.2
Requires-Dist: httpx>=0.27
Requires-Dist: pydantic>=2.0
Requires-Dist: pyyaml>=6.0
Provides-Extra: dev
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: respx>=0.21; extra == 'dev'
Requires-Dist: ruff>=0.5; extra == 'dev'
Provides-Extra: router
Requires-Dist: openai>=1.0; extra == 'router'
Description-Content-Type: text/markdown

# ru-legal-skills-mcp

> Unified MCP server для `ru-legal`. Подключи **один пакет** — получи 186 skills + 33 tools РФ legal AI.

[![PyPI](https://img.shields.io/pypi/v/ru-legal-skills-mcp.svg)](https://pypi.org/project/ru-legal-skills-mcp/)
[![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](../../LICENSE)

## Quick start

### 1. Install

```bash
pip install ru-legal-skills-mcp
# или
uvx ru-legal-skills-mcp
```

### 2. Configure в Claude Code / Cursor / Cline / любом MCP-клиенте

```jsonc
// .mcp.json (или ~/.claude/mcp.json — depending на клиент)
{
  "mcpServers": {
    "ru-legal-skills": {
      "command": "uvx",
      "args": ["ru-legal-skills-mcp"]
    }
  }
}
```

### 3. Проверить, что skills на месте

```bash
ru-legal-skills list-packs        # 19 паков и число skills
ru-legal-skills list-skills       # все 186
ru-legal-skills show-skill labor-law/termination-review
```

`packs/` входит в wheel, поэтому `RU_LEGAL_SKILLS_PACKS_ROOT` не нужен. Переменная остаётся для
случая, когда нужен свой набор skills: `RU_LEGAL_SKILLS_PACKS_ROOT=/path/to/packs ru-legal-skills-mcp`.

### 4. Готово

Теперь твой LLM-клиент видит:

— **4 skill management tools** (`list_skills`, `find_skill`, `get_skill`, `get_skill_index`)
— **186 skills как MCP prompts** (slash-commands: `/labor_law_termination_review` и т.д.)
— *(coming in Phase 2)* **33 tool proxies** для гос.реестров РФ

## Что внутри

### Skill management tools

| Tool | Purpose |
|------|---------|
| `list_skills(pack=None)` | Все 186 skills с metadata (id, name, description, argument-hint) |
| `find_skill(query, top_k=3)` | **LLM router** — подбирает skill под user query на естественном языке |
| `get_skill(skill_id)` | Полный SKILL.md с workflow / decision tree / citations |
| `get_skill_index()` | Compact text index — quick scan всех skills |

### Skills as MCP prompts

Каждый user-invocable skill auto-зарегистрирован как MCP prompt. В Claude Code появляется как slash-command. Например:

```
/labor_law_termination_review
/corporate_law_diligence_issue_extraction
/tax_law_tax_audit_response
```

### Skill router (Strategy C)

Two-tier:

1. **Keyword shortlist** — keyword search по name + description → top-10 candidates (быстро, бесплатно)
2. **LLM picker** — small/cheap LLM (Haiku / GPT-4o-mini / Yandex Lite / DeepSeek) picks best 1-3 из shortlist

Fallback на keyword-only если LLM не configured.

### Configuration

```bash
# Path к packs/ — обычно auto-detected
export RU_LEGAL_SKILLS_PACKS_ROOT=/path/to/ru-legal-skills/packs

# Provider для router LLM (auto-detected from env):
export OPENAI_API_KEY=sk-...           # → uses gpt-4o-mini
# OR
export YC_IAM_TOKEN=...
export YC_FOLDER_ID=...                 # → uses yandexgpt-lite
# OR
export GIGACHAT_API_KEY=...
# OR
export DEEPSEEK_API_KEY=...
# OR (override explicitly):
export RU_LEGAL_ROUTER_LLM=yandexgpt
```

Если ни одна credential не задана — router работает в keyword-only mode.

## Architecture

```
┌───────────────────────────────────────────┐
│  MCP client (Claude Code / Cursor / ...)  │
└────────────────┬──────────────────────────┘
                 │ MCP protocol (stdio)
                 ▼
┌───────────────────────────────────────────┐
│  ru-legal-skills-mcp (this package)              │
│                                           │
│  ├── server.py — entrypoint               │
│  ├── registry/skills.py — load packs/     │
│  │      • 186 skills indexed at startup   │
│  └── router/                              │
│      ├── router.py — 2-tier router        │
│      └── llm.py — provider-agnostic LLM   │
└────────────────┬──────────────────────────┘
                 │ читает (read-only)
                 ▼
┌───────────────────────────────────────────┐
│  packs/                                   │
│  └── 19 packs × N skills × SKILL.md       │
└───────────────────────────────────────────┘
```

## Использование с LangGraph / LangChain

```python
from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.prebuilt import create_react_agent

mcp_client = MultiServerMCPClient({
    "ru-legal-skills": {
        "command": "uvx",
        "args": ["ru-legal-skills-mcp"],
        "transport": "stdio",
    }
})

tools = await mcp_client.get_tools()
agent = create_react_agent(model="...", tools=tools)

result = await agent.ainvoke({"messages": [
    {"role": "user", "content": "проверь контрагента ИНН 7707000001"}
]})
```

## Roadmap

- [x] Phase 1: skill management + router + skills as prompts
- [ ] Phase 2: re-expose все 33 sub-MCP tools под одним сервером
- [ ] Phase 3: embedding-based router (top-K via vector search)
- [ ] Phase 4: subagent delegation (one skill calls another)

## Альтернатива — granular install

Если нужны только конкретные источники:

```bash
pip install pravo-mcp efrsb-mcp kad-mcp
# и т.д. — каждый как отдельный package
```

Тогда configure отдельные entries в `.mcp.json`. Подходит если ты хочешь только subset.

## License

Apache 2.0. См. [LICENSE](../../LICENSE).

## Disclaimer

⚠ AI tool, не замена юриста. Material decisions — engage outside-адв ФПА. См. [DISCLAIMER.md](../../DISCLAIMER.md).
