sifter-ai/sifter

sifter-ai/sifter

от sifter-ai
Sifter — open-source движок для извлечения структурированных данных из документов (счетов, контрактов). Вместо RAG выделяет точные поля (клиент, дата, сумма) и хранит их как записи — ответы получаю...

Sifter

CI codecov PyPI npm Python Node License: MIT

Your documents are a dark database.

Open-source document intelligence engine — schema-driven extraction, NL query, MCP server, Python and TypeScript SDKs. Self-hostable under MIT.

Sifter demo


Why not RAG?

RAG is built for retrieval — find me chunks similar to this query. It breaks on homogeneous collections like invoices, contracts, or receipts where every document looks alike and the question is an aggregation, not a search.

Documents to structured records

Sifter's approach: extract structured fields once (client, date, total), store them as typed records, query with real filters and aggregations. The answer is exact and reproducible — because it's a database query, not a similarity search.


Quickstart

git clone https://github.com/sifter-ai/sifter
cd sifter/code
cp server/.env.example server/.env.local    # set SIFTER_DEFAULT_API_KEY (required)
docker compose up -d

Open http://localhost:3000 — create a sift, upload documents, query results.


Python SDK

pip install sifter-ai
from sifter import Sifter

s = Sifter(api_key="sk-...")

sift = s.create_sift("Invoices", "client name, date, total amount")
sift.upload("./invoices/")
sift.wait()

for record in sift.records():
    print(record["extracted_data"])
# {"client": "Acme Corp", "date": "2024-01-15", "total_amount": 1500.0}
aggregate_sift

Запускает конвейер агрегации MongoDB по записям sift'а. Аргументы: sift_id: Идентификатор sift'а pipeline: Этапы конвейера агрегации MongoDB например [{"$group": {"_id": "$client", "total": {"$sum": "$total"}}}] Возвращает: Массив агрегированных строк

Запускает конвейер агрегации MongoDB по записям sift'а. Аргументы: sift_id: Идентификатор sift'а pipeline: Этапы конвейера агрегации MongoDB например [{"$group": {"_id": "$client", "total": {"$sum": "$total"}}}] Возвращает: Массив агрегированных строк

Параметры

  • sift_idstringобязательный
  • pipelinearrayобязательный
create_sift

Создаёт новый sift с заданными инструкциями по извлечению. Args: name: Человекочитаемое имя sift instructions: Инструкции по извлечению на естественном языке (например "client, date, total") folder_path: Необязательный путь к папке для привязки (например '/invoices/2025'); создаётся, если её не существует

Создаёт новый sift с заданными инструкциями по извлечению. Args: name: Человекочитаемое имя sift instructions: Инструкции по извлечению на естественном языке (например "client, date, total") folder_path: Необязательный путь к папке для привязки (например '/invoices/2025'); создаётся, если её не существует

Параметры

  • namestringобязательный
  • instructionsstringобязательный
  • folder_pathstring
delete_sift

Удаляет sift и все его записи. Аргументы: sift_id: Идентификатор sift

Удаляет sift и все его записи. Аргументы: sift_id: Идентификатор sift

Параметры

  • sift_idstringобязательный
find_records

Фильтрует записи по структурированным критериям (без обращения к LLM). Аргументы: sift_id: идентификатор sift filter: словарь фильтра в подмножестве MongoDB, например {"total": {"$gt": 1000}} sort: опциональная спецификация сортировки, например [["date", -1]] limit: максимальное количество записей для возврата (по умолчанию 50) cursor: непрозрачный курсор пагинации из предыдущего вызова Возвращает: {"records": [...], "next_cursor": "..." | null}

Фильтрует записи по структурированным критериям (без обращения к LLM). Аргументы: sift_id: идентификатор sift filter: словарь фильтра в подмножестве MongoDB, например {"total": {"$gt": 1000}} sort: опциональная спецификация сортировки, например [["date", -1]] limit: максимальное количество записей для возврата (по умолчанию 50) cursor: непрозрачный курсор пагинации из предыдущего вызова Возвращает: {"records": [...], "next_cursor": "..." | null}

Параметры

  • sift_idstringобязательный
  • filterobjectобязательный
  • sortarray
  • limitinteger
  • cursorstring
get_extraction_status

Проверить статус извлечения для документа на sift. Аргументы: document_id: Идентификатор документа sift_id: Идентификатор sift Возвращает: {"status": "queued|running|completed|failed", "error": "..." (при ошибке)}

Проверить статус извлечения для документа на sift. Аргументы: document_id: Идентификатор документа sift_id: Идентификатор sift Возвращает: {"status": "queued|running|completed|failed", "error": "..." (при ошибке)}

Параметры

  • document_idstringобязательный
  • sift_idstringобязательный
get_folder

Получает метаданные папки, связанные sifts и список документов для указанной папки. Аргументы: folder_path: Путь к папке (например '/invoices/2025')

Получает метаданные папки, связанные sifts и список документов для указанной папки. Аргументы: folder_path: Путь к папке (например '/invoices/2025')

Параметры

  • folder_pathstringобязательный
get_record_citations

Получить карту цитирования по полям для записи (страница, bbox, исходный текст для каждого поля). Аргументы: sift_id: Идентификатор sift record_id: Идентификатор записи

Получить карту цитирования по полям для записи (страница, bbox, исходный текст для каждого поля). Аргументы: sift_id: Идентификатор sift record_id: Идентификатор записи

Параметры

  • sift_idstringобязательный
  • record_idstringобязательный
get_sift

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

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

Параметры

  • sift_idstringобязательный
list_folders

Выводит список папок с названиями и количеством документов. Аргументы: limit: максимальное количество папок для возврата (по умолчанию 100, максимум 200) offset: количество папок для пропуска при пагинации

Выводит список папок с названиями и количеством документов. Аргументы: limit: максимальное количество папок для возврата (по умолчанию 100, максимум 200) offset: количество папок для пропуска при пагинации

Параметры

  • limitinteger
  • offsetinteger
list_records

Получить извлеченные записи из sift. Аргументы: sift_id: Идентификатор sift limit: Максимальное количество возвращаемых записей (по умолчанию 20, максимум 100) offset: Количество пропускаемых записей (игнорируется, если указан cursor) cursor: Непрозрачный курсор пагинации из поля next_cursor предыдущего вызова

Получить извлеченные записи из sift. Аргументы: sift_id: Идентификатор sift limit: Максимальное количество возвращаемых записей (по умолчанию 20, максимум 100) offset: Количество пропускаемых записей (игнорируется, если указан cursor) cursor: Непрозрачный курсор пагинации из поля next_cursor предыдущего вызова

Параметры

  • sift_idstringобязательный
  • limitinteger
  • offsetinteger
  • cursorstring
list_sifts

Выводит список sifts с их названиями, инструкциями и количеством документов/записей. Аргументы: limit: Максимальное количество sifts для возврата (по умолчанию 50, максимум 200) offset: Количество sifts, которое нужно пропустить для пагинации

Выводит список sifts с их названиями, инструкциями и количеством документов/записей. Аргументы: limit: Максимальное количество sifts для возврата (по умолчанию 50, максимум 200) offset: Количество sifts, которое нужно пропустить для пагинации

Параметры

  • limitinteger
  • offsetinteger
query_sift

Выполнить запрос на естественном языке по извлеченным записям sift. Args: sift_id: Идентификатор sift natural_language: Вопрос, на который нужно ответить (например, «Какова общая сумма по клиенту?»)

Выполнить запрос на естественном языке по извлеченным записям sift. Args: sift_id: Идентификатор sift natural_language: Вопрос, на который нужно ответить (например, «Какова общая сумма по клиенту?»)

Параметры

  • sift_idstringобязательный
  • natural_languagestringобязательный
run_extraction

Ставит в очередь извлечение данных для документа по определённому sift. Аргументы: document_id: Идентификатор документа sift_id: Sift, по которому выполняется извлечение

Ставит в очередь извлечение данных для документа по определённому sift. Аргументы: document_id: Идентификатор документа sift_id: Sift, по которому выполняется извлечение

Параметры

  • document_idstringобязательный
  • sift_idstringобязательный
update_sift

Обновить название или инструкции существующего sift. Аргументы: sift_id: Идентификатор sift name: Новое название (оставьте пустым, чтобы сохранить текущее) instructions: Новые инструкции (оставьте пустыми, чтобы сохранить текущие)

Обновить название или инструкции существующего sift. Аргументы: sift_id: Идентификатор sift name: Новое название (оставьте пустым, чтобы сохранить текущее) instructions: Новые инструкции (оставьте пустыми, чтобы сохранить текущие)

Параметры

  • sift_idstringобязательный
  • namestring
  • instructionsstring
upload_document

Загружает документ в папку. Папка создаётся, если её нет. Документ обработают все сифты, привязанные к этой папке. Аргументы: folder_path: целевой путь к папке (например, '/invoices/2025'). Создаётся, если не существует. filename: исходное имя файла (используется для отображения) content_base64: файл в байтах, закодированный в Base64

Загружает документ в папку. Папка создаётся, если её нет. Документ обработают все сифты, привязанные к этой папке. Аргументы: folder_path: целевой путь к папке (например, '/invoices/2025'). Создаётся, если не существует. filename: исходное имя файла (используется для отображения) content_base64: файл в байтах, закодированный в Base64

Параметры

  • folder_pathstringобязательный
  • filenamestringобязательный
  • content_base64stringобязательный

Другие проверенные MCP-сервера

zcaceres/markdownify-mcp

zcaceres/markdownify-mcp

MCP-сервер Markdownify конвертирует файлы (PDF, изображения, аудио, Office) и веб-контент (YouTube, Bing, страницы) в Markdown. Полезен разработчикам для интеграции разнородных данных в MCP-среду.

TypeScript2884
Grafana MCP

Grafana MCP

официальный

MCP сервер для интеграции с Grafana: управляйте дашбордами, выполняйте запросы к Prometheus, Loki, CloudWatch и другим источникам через MCP. Упрощает мониторинг, анализ метрик и логов — полезен для инженеров и DevOps.

Go3252
cantian-ai/bazi-mcp

cantian-ai/bazi-mcp

официальный

Bazi MCP — первый AI-калькулятор бацзы (китайской метафизики), исправляющий неточности GPT и DeepSeek. Сервер даёт точные данные для анализа личности и прогнозов судьбы, подходит практикам и разраб...

TypeScript412
bankless/onchain-mcp

bankless/onchain-mcp

официальный

MCP-сервер для доступа к on-chain данным через Bankless API. Позволяет AI-моделям читать контракты, получать события и транзакции на разных сетях. Полезен разработчикам блокчейн-приложений и AI-аге...

TypeScript80
mariocandela/beelzebub

mariocandela/beelzebub

Beelzebub — MCP-сервер для развертывания адаптивных ловушек через SSH, HTTP, TCP, TELNET и MCP. LLM генерирует реалистичные ответы, привлекая атакующих для сбора угроз и обнаружения prompt injection в AI-агентах. Полезен специалистам по безопасности.

Go2091
samuelgursky/davinci-resolve-mcp

samuelgursky/davinci-resolve-mcp

MCP сервер для управления DaVinci Resolve Studio через официальный Scripting API. Дает AI-ассистентам полный доступ к функциям редактирования, медиапула, грейдинга, а также рендеру и анализу. Все операции безопасны для исходных медиа — изменения только в проекте.

Python1699
© Каталог MCP, 2026. Все права защищены.
Проект не аффилирован с Anthropic и любыми упомянутыми продуктами.
Все названия и торговые марки принадлежат их владельцам.
Контакты для связи: hi@mcp-katalog.ru

Лука Никитин