Skip to main content
Glama
tobee89

mcp-paperless-ngx


Создан на основе REST API версии 10 и отличается тремя вещами:

  • Учтённое покрытие. Каждая из 92 документированных конечных точек либо доступна как инструмент, либо перечислена в src/tools/coverage.ts с письменным обоснованием, почему её исключили. Тест это проверяет, так что релиз Paperless, добавляющий эндпоинт, приводит к падению CI, а не к тихой потере поддержки.

  • Дисциплина токенов. Документ Paperless несёт в себе полный текст OCR. Наивные обёртки возвращают его по умолчанию, и один поиск может исчерпать контекст модели. Здесь результаты списков обрезаются на стороне сервера через ?fields=, текст живёт за отдельным постраничным инструментом, и ни один эндпоинт списка не передаёт сырой ответ API — тест это проверяет. См. Стоимость контекста.

  • Ограниченная поверхность. 99 инструментов утопили бы список инструментов модели. Наборы инструментов позволяют открыть только то, что нужно конкретному клиенту, а --read-only полностью убирает все пути записи.

Paperless-ngx 2.x не поддерживается: API версии 10 ввёл эндпоинты (вложенные теги, версии документов, share_link_bundles, операции разделения PDF), которые этот сервер считает существующими.

Быстрый старт

npx -y mcp-paperless-ngx --check   # verify connectivity, then exit

Claude Code

claude mcp add paperless --scope user \
  --env PAPERLESS_URL=https://paperless.example.com \
  --env PAPERLESS_TOKEN=your-api-token \
  -- npx -y mcp-paperless-ngx

Claude Desktop, Cursor, Cline и другие MCP-клиенты

{
  "mcpServers": {
    "paperless": {
      "command": "npx",
      "args": ["-y", "mcp-paperless-ngx"],
      "env": {
        "PAPERLESS_URL": "https://paperless.example.com",
        "PAPERLESS_TOKEN": "your-api-token"
      }
    }
  }
}

Получение API-токена

Веб-интерфейс Paperless → ваше имя пользователя (справа сверху) → My Profile → кнопка с круговой стрелкой рядом с полем API-токена.

Related MCP server: paperlessngx-mcp

Конфигурация

Переменная

Обязательная

По умолчанию

Назначение

PAPERLESS_URL

да

Базовый URL, с которым общается сервер.

PAPERLESS_TOKEN

да

API-токен. PAPERLESS_API_KEY тоже работает.

PAPERLESS_PUBLIC_URL

нет

PAPERLESS_URL

URL, используемый при построении ссылок для пользователя, если экземпляр доступен снаружи под другим именем.

PAPERLESS_TOOLSETS

нет

см. ниже

Наборы инструментов через запятую или all.

PAPERLESS_READ_ONLY

нет

false

Открывать только инструменты, которые ничего не могут изменить.

PAPERLESS_HEADERS

нет

Дополнительные заголовки запросов в виде JSON ({"X-Auth":"…"}) или Name: value, Name: value. Нужно за прокси с forward-auth, например Authentik или Authelia.

PAPERLESS_DOWNLOAD_DIR

нет

системная временная папка

Куда записываются скачанные файлы.

PAPERLESS_MAX_PAGE_SIZE

нет

100

Жёсткий потолок размера страниц списков, что бы ни запросила модель.

PAPERLESS_TIMEOUT_MS

нет

60000

Таймаут запроса.

PAPERLESS_API_VERSION

нет

10

Версия REST API, отправляемая в заголовке Accept.

Флаги CLI --url, --token, --public-url, --toolsets и --read-only переопределяют окружение. --check проверяет связь, --list-tools печатает включённые инструменты.

Наборы инструментов

Набор инструментов

По умолчанию

Содержимое

documents

вкл

Поиск, чтение, обновление, удаление, загрузка, скачивание, заметки, массовые и PDF-операции

metadata

вкл

Теги, корреспонденты, типы документов, пути хранения

customfields

вкл

Определения пользовательских полей

views

вкл

Сохранённые представления

sharing

вкл

Ссылки для публикации и пакеты ссылок для публикации

workflows

вкл

Правила автоматизации, триггеры, действия

system

вкл

Глобальный поиск, статистика, статус, задачи, корзина

mail

выкл

IMAP-аккаунты, почтовые правила, обработанная почта

admin

выкл

Пользователи, группы, профиль, конфигурация, журналы (только чтение)

mail и admin по умолчанию выключены, потому что большинству сессий они не нужны, а каждый дополнительный инструмент стоит контекста на каждом запросе. Включите их явно:

PAPERLESS_TOOLSETS=documents,metadata,system,mail
PAPERLESS_TOOLSETS=all

Стоимость контекста

Обёртка API для языковой модели имеет стоимость, которой нет у самого API: всё, что видит модель, оплачивается на каждом запросе. Два места, где это бьёт, и что этот сервер с ними делает.

Ответы. Три формы дороги в Paperless и легко возвращаются случайно:

Источник

Проблема

Обработка

Списки документов

Каждый документ несёт полный текст OCR в content

?fields= ограничивает ответ на стороне сервера; get_document_content разбивает текст на страницы отдельно

/api/search/

Возвращает полные объекты Document, включая текст OCR, по всем типам объектов

Документы сводятся, остальные типы сокращаются до id + name

Workflows, mail rules, groups, tasks

27–34 поля на объект, вложенные определения триггеров/действий инлайн

Сводятся к идентифицирующим полям; вложенные списки схлопываются в счётчики. full: true возвращает всё

Определения инструментов. Это более крупная и менее очевидная стоимость: имена, описания и JSON-схемы отправляются с каждым запросом, независимо от того, вызывается ли какой-либо инструмент.

Наборы инструментов

Инструменты

Примерная стоимость на запрос

all

99

~20 500 токенов

по умолчанию

85

~18 500 токенов

documents,metadata

49

~12 900 токенов

Сделать это бесплатным невозможно — это цена инструмента, которым модель может пользоваться без угадывания. Но стоит подходить осознанно: если ваши сессии только ищут и подшивают документы, запуск PAPERLESS_TOOLSETS=documents,metadata экономит больше контекста, чем любое урезание ответов.

Безопасность

Сервер открывает деструктивные операции, потому что менеджер документов без них — не совсем менеджер. Он не пытается угадывать, когда они уместны — это суждение принадлежит клиенту и пользователю. Вместо этого он делает следующее:

  • Деструктивные инструменты помечены destructiveHint: true, чтобы MCP-клиенты могли требовать подтверждения.

  • Описания инструментов прямо говорят, что нельзя отменить (empty_trash, delete_custom_field, delete_originals), и просят подтверждения перед вызовом.

  • --read-only удаляет все инструменты записи из списка, а не отказывает им во время вызова.

  • Массовые эндпоинты поддерживают режим «применить ко всему, что соответствует этому фильтру». Этот сервер не открывает его: массовые инструменты принимают явные списки ID, так что неправильный фильтр не может молча затронуть весь архив.

  • create_share_link создаёт публично доступный URL. Его описание говорит об этом, а подсказка audit_sharing существует, чтобы просмотреть, что уже открыто.

Эндпоинты, связанные с учётными данными (генерация токенов, включение TOTP, отключение второго фактора у кого-то), намеренно не открыты. См. EXCLUDED_ENDPOINTS для полного списка и обоснования.

Подсказки

Зарегистрированы как слэш-команды в клиентах, поддерживающих MCP-подсказки:

Подсказка

Что она делает

triage_inbox

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

find_document

Находит документ по расплывчатому описанию, сначала ища дёшево, а потом широко.

audit_sharing

Просматривает все публичные ссылки для публикации и помечает те, что никогда не истекают.

Тестирование

Три уровня, потому что они ловят разные вещи:

npm test                                        # logic — no network
PAPERLESS_URL=… PAPERLESS_TOKEN=… \
  node scripts/smoke-test.mjs                   # all 55 read-only tools, live
PAPERLESS_URL=… PAPERLESS_TOKEN=… \
  node scripts/write-test.mjs                   # writes, live — see the warning

npm test проверяет собственные рассуждения сервера: покрытие эндпоинтов, значения enum против схемы, что ни один инструмент списка не утекает сырые объекты API, что режим только для чтения действительно убирает записи.

smoke-test.mjs проверяет предположения, которые он делает о Paperless. Он вызывает каждый инструмент только для чтения против реального экземпляра, разрешая ID из вызовов списков вместо жёсткого кодирования, и печатает размеры ответов, чтобы дорогие инструменты оставались видимыми. Он ничего не записывает.

write-test.mjs покрывает остальное: загрузку и потребление, обновление каждого типа поля, заметки, массовые правки тегов, ссылки для публикации, ротацию и цикл корзины.

Он трогает только объекты, которые создаёт сам. Всё, что он создаёт, называется с префиксом zz-mcp-test и удаляется в конце, и он никогда не изменяет документ, который не загрузил. Если запуск прерван, остатки с этим префиксом безопасно удалить. Если есть тестовый экземпляр, предпочтите его.

Следим за Paperless

PAPERLESS_URL=… PAPERLESS_TOKEN=… node scripts/sync-schema.mjs
npm test

sync-schema.mjs перегенерирует schema/endpoints.json из OpenAPI-документа вашего собственного экземпляра. Тестовый набор затем сообщает о любом эндпоинте, который не открыт и не исключён явно. Это весь цикл обслуживания: укажите на более новый Paperless, и тест скажет, что изменилось.

Разработка

npm install
npm start          # run from source
npm run build      # compile to build/
npm test           # unit tests + coverage checks
npm run inspect    # build, then open the MCP inspector

Предшествующее искусство

Несколько MCP-серверов для Paperless уже существуют, наиболее известный — cubinet-code/paperless-ngx-mcp, а также nloui/paperless-mcp и barryw/PaperlessMCP. Они нацелены на API 2.x. Если вы используете Paperless-ngx 2.x, воспользуйтесь одним из них; этот предполагает 3.x.

Лицензия

MIT. См. LICENSE.


A
license - permissive license
Not graded
quality - not tested
A
maintenance

Maintenance

Maintainers
Response time
0dRelease cycle
2Releases (12mo)
Commit activity

Related MCP Servers

  • A
    license
    C
    quality
    A
    maintenance
    An MCP (Model Context Protocol) server for interacting with a Paperless-NGX API server. This server provides tools for managing documents, tags, correspondents, and document types in your Paperless-NGX instance.
    23
    363
    137
    TypeScript
    ISC
  • F
    license
    A
    quality
    B
    maintenance
    A privacy-first MCP server for Paperless-ngx that lets an LLM agent search, organize, tag, and reference documents without exposing full text unless explicitly requested.
    13
  • A
    license
    Not graded
    quality
    A
    maintenance
    A read-only and write MCP server for Paperless-ngx, enabling document listing, metadata retrieval, and creation of tags, correspondents, document types, and sorting workflows via natural language.
    MIT

View all related MCP servers

Related MCP Connectors

  • A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…

  • MCP server for the PDFGate API. Generate PDFs, manage documents and handle e-signatures.

  • MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tobee89/mcp-paperless-ngx'

If you have feedback or need assistance with the MCP directory API, please join our Discord server