Интеграция с AI-агентами¶
Подключите LegalMCP к вашему AI-агенту на Python — через официальный SDK или LangChain.
1. Python SDK (mcp)¶
Официальный пакет для прямого подключения к MCP-серверу.
Установка¶
Пример: список инструментов и вызов¶
import asyncio
from mcp.client.streamable_http import streamablehttp_client
from mcp import ClientSession
MCP_TOKEN = "lmcp_ВАШ_ТОКЕН"
async def main():
url = "https://legalmcp.ru/mcp"
headers = {"Authorization": f"Bearer {MCP_TOKEN}"}
async with streamablehttp_client(url, headers=headers) as (r, w, _):
async with ClientSession(r, w) as session:
await session.initialize()
# Список всех инструментов
tools = await session.list_tools()
for tool in tools.tools:
print(f" {tool.name}: {tool.description[:80]}")
# Поиск по законодательству
result = await session.call_tool(
"search_documents",
{"query": "штраф за неуплату налогов"}
)
print(result)
asyncio.run(main())
Доступные инструменты¶
| Инструмент | Описание |
|---|---|
search_documents |
Гибридный семантический + полнотекстовый поиск по базе знаний |
get_document_by_id |
Точное извлечение документа по ID и дате |
get_document_graph |
Граф связей документа |
get_document_history |
Хронология редакций документа с diff |
search_changes |
Поиск изменений в законодательстве после указанной даты |
get_knowledge_base_status |
Карта покрытия базы знаний — коллекции и их состояние |
report_missing_data |
AI Feedback Loop — сообщение об отсутствующих документах |
2. LangChain / LangGraph¶
Библиотека langchain-mcp-adapters превращает MCP-инструменты в LangChain-совместимые tools за одну строку.
Установка¶
Пример: ReAct-агент с LegalMCP¶
import asyncio
from langchain_mcp_adapters.client import MultiServerMCPClient
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
MCP_TOKEN = "lmcp_ВАШ_ТОКЕН"
async def main():
llm = ChatOpenAI(model="gpt-4o")
async with MultiServerMCPClient(
{
"legalmcp": {
"transport": "streamable_http",
"url": "https://legalmcp.ru/mcp",
"headers": {"Authorization": f"Bearer {MCP_TOKEN}"},
}
}
) as client:
tools = client.get_tools()
agent = create_react_agent(llm, tools)
response = await agent.ainvoke(
{"messages": "Какой штраф за непредставление налоговой декларации?"}
)
print(response["messages"][-1].content)
asyncio.run(main())
Агент автоматически:
- Вызовет
search_documentsс запросом пользователя - Получит релевантные статьи НК РФ
- Сформулирует ответ с цитатами
Несколько MCP-серверов¶
MultiServerMCPClient поддерживает подключение к нескольким серверам одновременно:
async with MultiServerMCPClient(
{
"legalmcp": {
"transport": "streamable_http",
"url": "https://legalmcp.ru/mcp",
"headers": {"Authorization": f"Bearer {MCP_TOKEN}"},
},
"другой_сервер": {
"transport": "stdio",
"command": "python",
"args": ["my_local_server.py"],
}
}
) as client:
tools = client.get_tools() # инструменты из всех серверов
3. CrewAI¶
CrewAI использует LangChain под капотом — те же langchain-mcp-adapters работают напрямую:
import asyncio
from crewai import Agent, Task, Crew
from langchain_mcp_adapters.client import MultiServerMCPClient
from langchain_openai import ChatOpenAI
MCP_TOKEN = "lmcp_ВАШ_ТОКЕН"
async def main():
async with MultiServerMCPClient(
{
"legalmcp": {
"transport": "streamable_http",
"url": "https://legalmcp.ru/mcp",
"headers": {"Authorization": f"Bearer {MCP_TOKEN}"},
}
}
) as client:
tools = client.get_tools()
lawyer = Agent(
role="Юрист-аналитик",
goal="Давать точные ответы на юридические вопросы с цитатами из законов РФ",
backstory="Вы — опытный юрист с доступом к полной базе законодательства РФ.",
tools=tools,
llm=ChatOpenAI(model="gpt-4o"),
)
task = Task(
description="Какой штраф грозит за неуплату НДС в срок?",
expected_output="Ответ с цитатой из НК РФ",
agent=lawyer,
)
crew = Crew(agents=[lawyer], tasks=[task])
result = await crew.kickoff_async()
print(result)
asyncio.run(main())
Аутентификация¶
Все примеры используют MCP-токен (lmcp_...), который можно получить в Личном кабинете.
| Способ | Формат |
|---|---|
| Header (рекомендуется) | Authorization: Bearer lmcp_... |
| Query parameter | ?token=lmcp_... |
Безопасность
Не хардкодьте токен в коде. Используйте переменные окружения:
Лимиты¶
Каждый вызов инструмента расходует 1 запрос из месячного лимита токена (по умолчанию — 100). Текущий расход отображается в Личном кабинете.