Wiki-MCP-Server: графовая база знаний для LLM с MCP протоколом | AiManual
AiManual Logo Ai / Manual.
07 Июн 2026 Инструмент

Строим самоподдерживающуюся Wiki-базу знаний на LLM: реализация MCP-сервера с графовым хранилищем

Пошаговое руководство по созданию production-ready базы знаний на основе MCP-сервера, типизированных связей и гибридного поиска. Забудьте про RAG.

Реклама
hor_partv1

Вы когда-нибудь пытались заставить LLM вести конспекты? Я тоже. Получается каша из маркдауна, потерянных фактов и одинаковых абзацев про одно и то же. Андрей Карпати когда-то обронил идею: «Сделайте вики-подобную базу знаний, где LLM сможет читать и писать свои заметки». Прозвучало красиво, но на практике такая штука быстро превращается в плоский список без структуры. А ещё она не умеет сама себя чинить.

Встречайте Wiki-MCP-Server — не просто очередная «вики для ИИ», а полноценный граф знаний, завёрнутый в MCP-протокол, с типизированными связями и гибридным поиском. Он сам решает, что забыть, а что запомнить. И да, он не просит у Google разрешения думать.

Идея Карпати — это персональная записная книжка для одного агента. Wiki-MCP-Server — распределённый орган памяти для целой армии AI-агентов. Разница — как между блокнотом и нейросетью.

Что под капотом? Три кита, на которых всё держится

Первый кит — AlloyDB + pgvector. Не SQLite, не JSON-файлы. AlloyDB (управляемая PostgreSQL от Google) автоматически масштабируется, а расширение pgvector даёт семантический поиск по эмбеддингам узлов. Это значит, что LLM может спросить «что я думаю про отказоустойчивость?» и получить не просто список тегов, а осмысленные факты, отсортированные по релевантности.

Второй кит — типизированные рёбра. Связи между узлами имеют тип: is_related_to, depends_on, contradicts. Просто «узел А ссылается на узел Б» — это для слабаков. Типизация превращает базу в настоящий граф, где можно ходить по логическим цепочкам. Например, если LLM нашла противоречие, она не просто запишет «это противоречит тому», а создаст ребро contradicts и автоматически перепроверит соседние узлы.

Третий кит — авторизация и MCP-протокол. Каждый узел и ребро живут в своём пространстве имён. Роли, пользователи, права доступа — критично для enterprise, где один AI-агент не должен видеть зарплаты другого. А MCP-протокол (о его возможностях мы писали в руководстве по Resources) позволяет подключить сервер к любому клиенту: Claude Desktop, Cline, кастомные агенты.

Почему не RAG? Спойлер: RAG не держит связи

Типичная RAG-система режет документы на чанки, пихает их в векторную БД и надеется на лучшее. Она не знает, что «закон Ома» и «сопротивление проводника» — это одно и то же, просто сказанное разными словами. RAG не умеет выстраивать логические цепочки между фактами. А Wiki-MCP-Server умеет. Более того, он автоматически создаёт ребро между новым фактом и уже существующим, если LLM решит, что они связаны. Вуаля — самоподдерживающаяся структура.

Не советую строить такую базу, если у вас 50 документов и меняются они раз в год. Овчинка выделки не стоит. Но если у вас 10 000+ фактов и 20 агентов, которые ежедневно их перетирают — это единственный способ не утонуть в шуме.

Сравнение с другими подходами:

ПодходСвязи между сущностямиСемантический поискАвтоматическое обслуживание
Плоский список (Karpathy)Только текстНетНет
RAG (векторные чанки)НетДаНет
Neo4j + LLMДа (но ручные)Требует доработкиНет
Wiki-MCP-ServerТипизированные, автоматическиеГибрид (векторы + граф)Да (самопротиворечие, мерж)

Как это работает на практике? Берём и делаем

Допустим, вы хотите, чтобы ваша LLM-команда поддерживала внутреннюю базу знаний по микросервисной архитектуре. Вы поднимаете сервер на любой PostgreSQL 15+ с pgvector, настраиваете MCP-клиент (например, через MCP Hangar) и даёте агентам инструменты: create_node, link_nodes, query_graph.

Вот как выглядит типичная сессия:

# Агент A пишет заметку о новом сервисе
mcp-cli call create_node \
  --type "service" \
  --content "PaymentGateway: обрабатывает платежи, использует Stripe API" \
  --embedding auto

# Агент B находит старый узел про Stripe и создаёт связь
mcp-cli call link_nodes \
  --from "PaymentGateway" \
  --to "StripeIntegration" \
  --type "depends_on"

# Любой агент делает семантический запрос
mcp-cli call query_graph \
  "какие сервисы зависят от внешних платёжных провайдеров?"

В ответ сервер возвращает не просто список, а цепочку узлов с указанием типа связи. LLM может пройти по ней, проверить актуальность и, если нужно, переписать узел. Всё автоматически индексируется, дубли схлопываются, противоречия подсвечиваются.

Кстати, о подсветке противоречий — это отдельная фича. Когда агент добавляет факт, который конфликтует с существующим, сервер не просто пишет «конфликт», а создаёт ребро contradicts и помечает оба узла как «требуют верификации». Затем другой агент (или человек) может разрешить конфликт, и ребро перекрасится в resolved_contradiction. Граф учится сам себя лечить.

Wiki-MCP-Server open-source, никакого vendor-lock. AlloyDB используется как пример, но код работает на любой PostgreSQL 15+ с pgvector. Поднять можно на своём железе или в облаке — локальный ИИ за бетонной стеной.

Кому это реально нужно? Чёткий портрет пользователя

  • AI-инженеры и команды MLOps, у которых десятки агентов и сотни тысяч фактов. Когда контекстное окно LLM уже не спасает, а RAG начинает галлюцинировать — граф вытягивает.
  • Enterprise-проекты с жёсткими требованиями к доступу. Типизированные рёбра и авторизация позволяют разграничить информацию между отделами. Топ-менеджмент не видит код, разработчики не видят стратегию.
  • Энтузиасты автоматизации, которые уже выбросили Ansible и Jenkins в окно в пользу MCP и локальных LLM. База знаний — следующий логический шаг.

Но есть нюанс. Если вы единственный разработчик в стартапе — не стройте сразу сложный граф. Начните с плоской вики и только когда заметите, что факты начинают дублироваться, а LLM теряет нить — переходите на Wiki-MCP-Server. Иначе рискуете потратить неделю на настройку типов рёбер, которые никогда не пригодятся.

Одна из самых частых ошибок — пытаться хранить всё. Не надо. Храните только факты, которые могут быть переиспользованы другими агентами. Временные заметки, логи ошибок, черновики — в мусор. Граф должен быть дистиллятом знаний, а не свалкой.

А что если LLM начнёт врать? Как сервер борется с галлюцинациями

Сервер не доверяет LLM на слово. Каждый узел содержит метаданные: источник (какой агент создал), время жизни, уровень достоверности. Если агент пытается перезаписать узел с высоким уровнем достоверности без явного разрешения — сервер блокирует операцию и запрашивает подтверждение у человека или другого агента. Это похоже на механизм, описанный в mcp-context-proxy, но на уровне графа.

Более того, если два агента спорят по одному факту, сервер запускает автоматическую процедуру верификации: ищет третий источник (через внешние API или базы) и голосует. Если консенсус не достигнут — узел помечается как «спорный» и исключается из семантического поиска до разрешения.

Совет напоследок: не пытайтесь объять необъятное

Когда я впервые развернул Wiki-MCP-Server, я сразу начал пихать в него всё: документацию, переписку, историю коммитов. Через неделю граф запутался настолько, что любой запрос возвращал 95% шума. Пришлось откатиться и начать с малого: 100 самых важных фактов, 50 типов связей. И только когда система прошла «тест на самоподдержку» — новый факт органично встраивался без дублирования — я расширил базу.

Не повторяйте моих ошибок. Сделайте минимальный граф, дайте агентам с ним поиграть, посмотрите, какие связи рождаются спонтанно. Только после этого добавляйте новые типы узлов и рёбер. Граф — живая структура, он должен расти естественно, а не по плану.

И да, про индексацию кода в граф знаний и MCP Tool Registry — это близкие темы, которые стоит изучить, если хотите автоматизировать всю цепочку. Wiki-MCP-Server лишь один кирпич в стене самоподдерживающегося ИИ.

Подписаться на канал