mcpField
L
LINZA

LINZA

本地服务
github.com/Semiotronika记忆与知识52 周前更新

关于 LINZA

LINZA 是用于 Markdown 文件夹和知识库的本地 MCP 服务,为 Agent 建立内容地图、检索与关联建议。它将索引和审阅记录保存在旁置数据库中,原始笔记不变,应用建议需经审阅确认。

主要功能

  1. 01索引 Markdown 文件夹
  2. 02语义与词汇检索
  3. 03生成主题地图和关联建议
  4. 04审阅记忆与规则建议
  5. 05导出带来源的上下文包
  6. 06默认以 dry-run 方式应用变更

适用场景

  1. 01梳理 Obsidian vault 中的大量笔记
  2. 02查找并阅读相关文档
  3. 03审阅待纳入的记忆或规则
  4. 04为其他 Agent 准备来源明确的上下文

MCP 相关

LINZA 作为 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 可处理任何 Markdown 文件夹:Obsidian vault、项目工作文件夹或单独的文档文件夹。

在以下示例中,将 /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

连接后,请 Agent:

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

嵌入

即使没有 embedding 服务,LINZA 也能启动并显示工具。语义搜索、主题图谱和关联建议则需要嵌入。

最简单的本地方式是使用 LM Studio:

  1. 打开 LM Studio。
  2. 下载嵌入模型,例如 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 的变量示例:

$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-compatible endpoint。

如果更换提供方、模型或维度,请执行完整重建索引。LINZA 会检查 embedding signature;如果 sidecar 已过期或包含混合向量空间,就会停止 graph/search 工作流。


主要 MCP 工具

默认情况下,LINZA 仅显示 7 个 MCP 工具。日常使用已足够:检查状态、为文件夹建立索引、搜索、读取文件、查看计数、诊断 vault,以及通过 agent_workspace 引导 Agent。

工具用途
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:

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否embeddings API 的 URL;默认值为 http://127.0.0.1:1234/v1
LINZA_EMBED_MODEL否嵌入模型;请在语义索引/搜索前设置
LINZA_EMBED_KEY否OpenAI-compatible embeddings 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 许可证 (c) 2026 Maria Belkina

余弦值在计算。语法在变化。语义仍在。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。