mcpField
L
LINZA

LINZA

ローカル
github.com/Semiotronikaメモリ・ナレッジ52 週間前に更新

LINZA について

LINZAは、Markdownフォルダーやナレッジベース向けのローカルMCPサーバーです。索引やレビュー記録はサイドカーDBに保存し、元のノートは変更せず、提案の適用にはレビューを求めます。

主な機能

  1. 01Markdownフォルダーの索引化
  2. 02セマンティック検索とキーワード検索
  3. 03トピックマップと関連候補の作成
  4. 04記憶やルールの提案レビュー
  5. 05出典付きコンテキストパックの出力
  6. 06既定でdry-runによる変更適用

活用シーン

  1. 01大規模なObsidian vaultの整理
  2. 02関連文書の検索と読み取り
  3. 03記憶やルール候補のレビュー
  4. 04別のエージェント向けの出典付きコンテキスト作成

MCP 対応

フォルダー診断、索引化、検索、ファイル読み取り、ワークスペースのレビュー用ツールをMCPクライアントに提供します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"semiotronika-linza": {
"command": "uvx",
"args": [
"linza-mcp"
],
"env": {
"LINZA_VAULT": "<LINZA_VAULT>",
"LINZA_EMBED_PROVIDER": "<LINZA_EMBED_PROVIDER>",
"LINZA_EMBED_URL": "<LINZA_EMBED_URL>",
"LINZA_EMBED_MODEL": "<LINZA_EMBED_MODEL>",
"LINZA_EMBED_KEY": "<LINZA_EMBED_KEY>",
"LINZA_BRIDGE_THRESHOLD": "<LINZA_BRIDGE_THRESHOLD>",
"LINZA_MAX_BRIDGE_PAIRS": "<LINZA_MAX_BRIDGE_PAIRS>",
"LINZA_DEFAULT_PROFILE": "<LINZA_DEFAULT_PROFILE>",
"LINZA_LANGUAGE": "<LINZA_LANGUAGE>"
}
}
}
}
起動コマンドuvx linza-mcp
設定が必要な環境変数
LINZA_VAULTAbsolute path to the Markdown workspace or vault LINZA may index. Defaults to ./vault.
LINZA_EMBED_PROVIDEREmbedding provider. Allowed values: lmstudio, openai, ollama. Default: lmstudio.
LINZA_EMBED_URLEmbedding API base URL when LINZA_EMBED_PROVIDER is lmstudio, openai, or ollama.
LINZA_EMBED_MODELEmbedding model name.
LINZA_EMBED_KEYシークレットOptional embedding API key.
LINZA_BRIDGE_THRESHOLDSemantic bridge threshold as a floating-point string. Default: 0.55.
LINZA_MAX_BRIDGE_PAIRSMaximum note pairs for semantic bridge rebuilds. Default: 1000000. Use 0 to disable the guard.
LINZA_DEFAULT_PROFILEDefault search profile name. Defaults to general.
LINZA_LANGUAGEUser-facing guide language. Allowed values: auto, en, ru. Default: auto.

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypilinza-mcp0.2.2

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

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

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

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

Python 3.10+ MCP Local first Review gated

English version

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

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

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 присылает примерно такую информацию:

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 によって、それらがバッチに含まれた理由を説明します。

誤った内容を承認した場合は、承認を取り消せます。

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

LINZA は古い記録を削除せず、YAML を自動的にロールバックしようともしません。承認を取り消し済みとしてマークし、アクティブな例として使わなくなったことを示し、履歴に記録を残します。


インストール

1. パッケージをインストールする
python -m pip install linza-mcp

LINZA で PDF を直接読み取る場合は、次を実行してください。

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

通常のインストールで Markdown、TXT、JSON、DOCX、XLSX に対応できます。[pdf] を追加すると、ローカル PDF 抽出ツール pypdf がインストールされます。

2. フォルダーを選択する

LINZA は、Obsidian vault、プロジェクトの作業フォルダー、ドキュメント専用のフォルダーなど、任意の Markdown フォルダーで動作します。

以下の例では、/absolute/path/to/workspace-or-vault をご自身のパスに置き換えてください。

3. MCP クライアントを接続する

Claude Desktop、Cursor、OpenCode などの MCP クライアントでは、通常、次の形式を使用します。

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

VS Code / Copilot MCP では、servers キーを使用します。

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

起動時に LINZA_VAULT を設定する必要はありません。設定されていない場合、サーバーは ./vault を使用します。ただし、実際に使用する場合は、明示的にフォルダーを指定することをおすすめします。

4. 起動を確認する
linza-mcp --version

接続後、エージェントに次のように依頼してください。

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

埋め込み

LINZA は、埋め込みサーバーがなくても起動し、ツールを表示できます。意味検索、トピックマップ、関連付けの提案には埋め込みが必要です。

最も簡単なローカル環境での方法は LM Studio です。

  1. LM Studio を開きます。
  2. text-embedding-granite-embedding-278m-multilingual、nomic-embed-text-v1.5、またはその他の適切なモデルなど、埋め込みモデルをダウンロードします。
  3. Local Server を起動します。
  4. http://127.0.0.1:1234/v1 でエンドポイントにアクセスできることを確認します。

LM Studio の環境変数の例:

$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 - /embeddings を備えた任意の OpenAI 互換エンドポイント

プロバイダー、モデル、または次元数を変更した場合は、全件を再インデックスしてください。LINZA は埋め込みのシグネチャを検証し、サイドカーが古い場合や、異なるベクトル空間が混在している場合は、グラフ/検索のワークフローを停止します。


主な MCP ツール

デフォルトでは、LINZA は MCP ツールを 7 つだけ表示します。通常の作業にはこれで十分です。状態の確認、フォルダーのインデックス作成、検索、ファイルの読み取り、カウンターの確認、vault の診断、agent_workspace を通じたエージェントの操作ができます。

ツール用途
agent_workspace診断、マップ、インポート、レビュー、学習、成長、関連付け、メモリ、コンテキストのエクスポートをまとめて行うための入口
guide_next_steps次の安全な手順を、わかりやすい言葉で表示
index_allMarkdown フォルダーを .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:

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

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


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

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


Проверка

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

python -m unittest discover -s tests

環境変数

変数起動に必要ですか?説明
LINZA_VAULTいいえMarkdown フォルダーへのパス。デフォルトは ./vault です
LINZA_EMBED_PROVIDERいいえ推奨されるローカルモードには lmstudio を指定します。openai と ollama も使用できます
LINZA_EMBED_URLいいえ埋め込み API の URL。デフォルトは http://127.0.0.1:1234/v1 です
LINZA_EMBED_MODELいいえ埋め込みモデル。セマンティックインデックス作成/検索を行う前に設定してください
LINZA_EMBED_KEYいいえOpenAI 互換の埋め込み API 用のオプションキー
LINZA_BRIDGE_THRESHOLDいいえセマンティックブリッジのしきい値。デフォルトは 0.55 です
LINZA_MAX_BRIDGE_PAIRSいいえセマンティックブリッジの再計算対象となるメモのペア数の上限。デフォルトは 1000000 で、0 を指定するとガードが無効になります
LINZA_DEFAULT_PROFILEいいえ基本の検索プロファイル名。デフォルトは general です
LINZA_LANGUAGEいいえguide_next_steps のヒントとレビュー経路の言語:auto、ru、en

リンク

MIT License (c) 2026 Maria Belkina

コサインは計算されます。構文は変化します。意味は残ります。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。