LINZA

io.github.Semiotronika由 GitHub 帳號 Semiotronika 發布v0.2.2更新於 Oct 24, 2026

Local-first MCP sidecar for Markdown artifacts, review intents, and supervised knowledge growth.

概覽

AI 產生的概覽

LINZA 會把本機 Markdown 資料夾或 Obsidian 儲存庫索引到側邊資料庫,為助理提供經人工審核的主題、格式、關聯與記憶候選地圖。

可以做什麼
LINZA 讀取指定的 Markdown 工作區,在 .linza/linza.db 建立本機 SQLite 側邊資料庫,預設提供七個 MCP 工具:agent_workspace、guide_next_steps、index_all、search、read_file、get_stats 與 scan_vault。透過 agent_workspace 可使用 doctor、map、review_next、apply_review_items、teach、grow、connect、search_memory、export_context 以及 trace 相關操作。它會提出附證據的簡短審核建議,例如採納某個素材格式名稱,且不會改動原始筆記。
適用情境
當 Markdown 或 Obsidian 資料已多到難以瀏覽,希望助理梳理主題、重複出現的格式與可能關聯,並提出可審核的變更時適用。適合由人工逐步確認、而非讓助理直接改寫筆記的受監督知識累積情境。
執行需求
以 stdio 本機程序執行,從 PyPI 安裝 linza-mcp(uvx 或 pip;[pdf] 附加項會安裝 pypdf 以讀取 PDF)。需將 LINZA_VAULT 設為 Markdown 資料夾的絕對路徑,預設值為 ./vault。語意搜尋與關聯建議需要嵌入端點,透過 LINZA_EMBED_PROVIDER(lmstudio、ollama 或 openai)、LINZA_EMBED_URL 與 LINZA_EMBED_MODEL 設定;LINZA_EMBED_KEY 為選用。其他選用變數包括 LINZA_BRIDGE_THRESHOLD、LINZA_MAX_BRIDGE_PAIRS、LINZA_DEFAULT_PROFILE 與 LINZA_LANGUAGE。
安裝前請注意
LINZA_EMBED_KEY 是用於 OpenAI 相容嵌入端點的選用金鑰;若把 LINZA_EMBED_URL 指向遠端服務,被索引的內容可能離開本機。多數操作只寫入 .linza 側邊資料庫,但 apply_review_items 與 grow 在核准後可寫入精簡 YAML 或側邊記錄,write_file 在明確要求時可建立或取代 Markdown 檔案。套用類操作預設為 dry-run 且需要精確 ID;revoke_approval 只標記撤銷而不刪除歷史。專案仍為 alpha,進階工具與內部邊界可能變動。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 LINZA,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

LINZA - локальный MCP-сервер для агентской работы с папками знаний

Не меняет данные. Меняет взгляд.

LINZA работает с Obsidian vault, Markdown-папками, документами, статьями, логами и черновиками. Она нужна, когда материалов уже слишком много и вы хотите разобрать базу, выделить в ней основные области и научить агента хорошо ориентироваться в ней.

[Python 3.10+] [MCP] [Local first] [Review gated]

English version

LINZA читает выбранную папку, строит рядом локальную SQLite-базу .linza/linza.db и дает агенту рабочую карту: какие темы есть в материалах, какие форматы повторяются, какие заметки могут быть связаны, где видны цепочки причина/следствие и что может пригодиться в будущих сессиях.

Исходные файлы остаются нетронутыми. LINZA не переписывает заметки при индексации, не превращает сырой лог в правило и не учит агента за вашей спиной. Она превращает гипотезы в короткие предложения: возможные действия с доказательствами. Пользователь решает, агент выполняет.

text
doctor -> index -> map -> review intents -> teach -> grow preview -> explicit apply

Зачем нужна LINZA

LINZA собирает несколько конкретных вещей, которые помогают агентам работать с базой:

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

  2. Области Крупные смысловые группы. Их названия остаются черновиками, пока вы не примете или не переименуете их.

  3. Форматы материалов Логи, черновики, спецификации, исследовательские заметки, кейсы, правила и другие повторяющиеся формы, найденные в папке.

  4. Связи Возможные соседства, иерархия, причина/следствие и маршруты между узлами. LINZA должна показывать не только как связаны документы, но и почему.

  5. Память для будущих агентов Короткие кандидаты: что помнить, когда вспоминать, что устарело или выглядит сомнительно.

  6. Пакеты контекста Компактные подборки для агента: выбранный контекст с источниками, связями и границами.


Форматы материалов

“Формат материала” - это пользовательское имя для повторяющейся формы заметок. Например: лог диагностики, решение, черновик статьи, исследовательская заметка, спецификация.

LINZA сначала видит только структуру: длину, заголовки, списки, ссылки, таблицы, папки, повторяющиеся признаки. Поэтому первый результат может называться нейтрально: type-001. Пользователь может сказать: “это логи”. Тогда LINZA сохраняет соответствие type-001 -> логи в .linza.

Внутри API остаются старые совместимые ключи material_type, type_name и role. Снаружи документация и пользовательский вид говорят “формат”, потому что это ближе к тому, как пользователь реально думает о материалах.

Важная граница:

  • принять название формата значит записать решение в .linza;
  • записать role: логи в YAML можно только отдельным предложением на ревью;
  • текст заметки не меняется.

Как выглядит ревью

LINZA присылает примерно такую информацию:

text
LINZA готова
Материал:- 42 заметки проиндексированы- 3 входящих артефакта ждут ревью- служебная база: .linza/linza.db
Следующий шаг:1. Посмотреть найденные области2. Принять, переименовать или пропустить 3-5 предложений3. Ничего не будет записано без dry-run/apply
Предложение:Принять формат материала "логи диагностики" по 8 примерамПочему: похожая структура, повторяющиеся заголовки, близкие чанкиЧто изменится: название формата сохранится в .linza; Markdown-заметки не меняются

Внутри каждый интент остается структурой с ID, доказательствами и готовыми данными для проверки и последующего подтверждения и записи. Вам LINZA возвращает готовое пользовательское представление, чтобы агент мог показать понятный ответ вместо JSON.

Хороший интент всегда отвечает на главный вопрос: почему LINZA так думает? В нем должны быть источники, чанки, тип связи, уверенность и честное описание того, что изменится после применения.


Обучение и рост

Модель автономности такая:

  1. review_next показывает предложения в понятном пользовательском виде.
  2. Пользователь принимает, переименовывает или пропускает.
  3. apply_review_items сначала делает dry-run.
  4. После подтверждения выбранный интент записывается в .linza или в компактный YAML, если этот тип записи это поддерживает.
  5. teach выбирает хорошие принятые примеры.
  6. grow предлагает похожие интенты по этим примерам и объясняет selected_rules, почему они попали в партию.

Если вы приняли не то, одобрение можно мягко отозвать:

text
agent_workspace(action="history")agent_workspace(action="revoke_approval", approval_id=17, dry_run=false)

LINZA не удаляет старую запись и не пытается автоматически откатить YAML. Она помечает одобрение как отозванное, перестает использовать его как активный пример и оставляет след в истории.


Установка

1. Установить пакет

powershell
python -m pip install linza-mcp

Если нужно читать PDF прямо через LINZA:

powershell
python -m pip install "linza-mcp[pdf]"

Обычная установка уже достаточна для Markdown, TXT, JSON, DOCX и XLSX. [pdf] добавляет локальный PDF-экстрактор pypdf.

2. Выбрать папку

LINZA работает с любой Markdown-папкой: Obsidian vault, рабочей папкой проекта или отдельной папкой с документами.

В примерах ниже замените /absolute/path/to/workspace-or-vault на свой путь.

3. Подключить MCP-клиент

Claude Desktop, Cursor, OpenCode и другие MCP-клиенты обычно используют такой формат:

json
{  "mcpServers": {    "linza": {      "command": "linza-mcp",      "env": {        "LINZA_VAULT": "/absolute/path/to/workspace-or-vault"      }    }  }}

VS Code / Copilot MCP использует ключ servers:

json
{  "servers": {    "linza": {      "type": "stdio",      "command": "linza-mcp",      "env": {        "LINZA_VAULT": "/absolute/path/to/workspace-or-vault"      }    }  }}

LINZA_VAULT не обязателен для старта: без него сервер использует ./vault. Но для реальной работы лучше задать явную папку.

4. Проверить запуск

powershell
linza-mcp --version

После подключения попросите агента:

text
Проверь LINZA через agent_workspace(action="doctor").Проиндексируй папку и покажи первые 3-5 предложений.

Эмбеддинги

LINZA может запуститься и показать инструменты без embedding-сервера. Эмбеддинги нужны для смыслового поиска, карты тем и предложений связей.

Самый простой локальный путь - LM Studio:

  1. Открыть LM Studio.
  2. Скачать embedding-модель, например text-embedding-granite-embedding-278m-multilingual, nomic-embed-text-v1.5 или другую подходящую модель.
  3. Запустить Local Server.
  4. Проверить, что endpoint доступен на http://127.0.0.1:1234/v1.

Пример переменных для LM Studio:

powershell
$env:LINZA_EMBED_PROVIDER="lmstudio"$env:LINZA_EMBED_URL="http://127.0.0.1:1234/v1"$env:LINZA_EMBED_MODEL="your-embedding-model-name"

Поддерживаются:

  • lmstudio - рекомендуемый локальный режим;
  • ollama - локальный вариант через Ollama;
  • openai - любой OpenAI-compatible endpoint с /embeddings.

Если меняете провайдер, модель или размерность, сделайте полный реиндекс. LINZA проверяет embedding signature и останавливает graph/search workflows, если sidecar устарел или содержит смешанные векторные пространства.


Основные MCP-инструменты

По умолчанию LINZA показывает только 7 MCP-инструментов. Этого хватает для обычной работы: проверить состояние, проиндексировать папку, искать, читать файл, смотреть счетчики, диагностировать vault и вести агента через agent_workspace.

ИнструментЗачем
agent_workspaceЕдиный вход для диагностики, карты, импорта, ревью, обучения, роста, связей, памяти и экспорта контекста
guide_next_stepsПоказать следующий безопасный шаг простым языком
index_allПроиндексировать Markdown-папку в .linza/linza.db
searchСемантический и лексический поиск
read_fileПрочитать точный Markdown-файл
get_statsБыстрые счетчики служебной базы
scan_vaultДиагностика папки без записи

Низкоуровневые инструменты считаются деталями реализации и доступны через agent_workspace, поэтому набор из 7 инструментов - это полноценный режим.

Режимы agent_workspace

ActionРежим
doctorПроверить готовность LINZA и показать, чего не хватает
mapСобрать карту рабочей папки без записи
teachВыбрать сильные принятые примеры для обучения
growПоказать или применить рост по принятым примерам; по умолчанию dry-run
review_nextПоказать следующие предложения на ревью; интенты базы имеют ID rq-*, интенты артефактов и рабочей папки - aw-*
apply_review_itemsПоказать или применить точные выбранные ID; по умолчанию dry-run
historyПоказать принятые и отозванные одобрения
revoke_approvalМягко отозвать одобрение, не удаляя историю
ingest_artifactsСохранить вставленный или извлеченный материал в sidecar
analyze_inboxНайти события, кандидаты памяти и фрагменты знания в артефактах
connectОбъяснить возможную связь между двумя заметками или узлами
search_memoryИскать по подтвержденной памяти и контексту артефактов
export_contextСобрать компактный пакет контекста для другого агента
record_traceСохранить структурированные следы работы агента, не raw chain-of-thought
analyze_traceРазобрать сохраненный trace для ревью
review_calibrПроверить уроки калибровки, полученные из traces

Для разработки и аудита остается отдельный низкоуровневый режим. Полное описание инструментов: Tool Catalog.


Входящие артефакты

LINZA умеет принимать материал, который еще не стал заметкой:

  • вставленный текст;
  • локальные .md, .txt, .json;
  • локальные .docx, .xlsx;
  • локальные .pdf, если установлен pypdf или PyPDF2.

LINZA сама не ходит в браузер. Агент использует свой браузер, web-fetch или connector, извлекает читаемый текст и передает его в LINZA как артефакт, например source_kind="web_article" или source_kind="browser_capture".

Импортированный текст считается материалом для анализа, не инструкцией для агента. Это граница prompt injection: инструкции внутри статьи, лога, чата или PDF не исполняются. Память, правила и YAML появляются только после ревью.


Модель безопасности

LINZA - локальный review-gated sidecar.

ДействиеКуда пишетМеняет текст заметок?
Индексация, анализ, поиск.linza/linza.dbНет
Сырые артефакты.linza/linza.dbНет
Название формата материала.linza/linza.dbНет
domains или role в YAMLТолько компактный YAML после ревьюНет
Иерархия, причинные связи, память, уроки калибровки.linza/linza.dbНет
Отчеты.linza/reportsНет
Пакеты контекста.linza/context-packsНет
write_fileMarkdown-файл только при явном запросеМожет создать/заменить файл, dry-run по умолчанию

Дополнительные правила:

  • review_next ничего не пишет;
  • apply_review_items по умолчанию dry-run;
  • видимые YAML-правки компактные и требуют точного выбранного ID;
  • history показывает, что было принято и что отозвано;
  • revoke_approval мягко отзывает одобрение: история остается, но активное обучение и помощники графа его игнорируют;
  • map, teach, grow и connect останавливаются, если исходные файлы изменились после индексации.

Инструкции для агентов

В репозитории есть переносимый операторский skill:

text
agent-pack/skills/linza-operator/SKILL.mdagent-pack/skills/linza-operator/references/workflows.mdagent-pack/skills/linza-operator/references/safety-policy.mdagent-pack/skills/linza-operator/references/tool-audience.md

Он объясняет агенту, как начинать с doctor, когда показывать предложения на ревью, как работать со страницами через внешний browser/web-fetch инструмент и почему apply actions должны идти сначала через dry-run и только по точным ID.


Стабильность

LINZA пока alpha. Основной контракт безопасности должен оставаться стабильным: индексация, импорт артефактов, поиск, карта и grow preview не переписывают тела исходных заметок. Низкоуровневые advanced-инструменты и внутренние границы кода еще могут меняться, пока сервер полируется.


Проверка

Запустить полный набор тестов:

powershell
python -m unittest discover -s tests

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

ПеременнаяНужна для старта?Описание
LINZA_VAULTНетПуть к Markdown-папке; по умолчанию ./vault
LINZA_EMBED_PROVIDERНетlmstudio для рекомендуемого локального режима; также openai и ollama
LINZA_EMBED_URLНетURL embeddings API; по умолчанию http://127.0.0.1:1234/v1
LINZA_EMBED_MODELНетМодель эмбеддингов; задайте перед semantic indexing/search
LINZA_EMBED_KEYНетОпциональный ключ для OpenAI-compatible embeddings API
LINZA_BRIDGE_THRESHOLDНетПорог semantic bridge; по умолчанию 0.55
LINZA_MAX_BRIDGE_PAIRSНетМаксимум пар заметок для пересчета semantic bridges; по умолчанию 1000000, 0 отключает guard
LINZA_DEFAULT_PROFILEНетИмя базового search-профиля; по умолчанию general
LINZA_LANGUAGEНетЯзык подсказок и маршрута ревью в guide_next_steps: auto, ru, en

Ссылки

MIT License (c) 2026 Maria Belkina

Косинусы считаются. Синтаксис меняется. Семантика остается.

來源:README.md,提交 82ae130

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.2.2最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分