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"}}}] Возвращает: Массив агрегированных строк

Параметры
  • pipelineany[]обязательный
  • sift_idstringобязательный
create_sift

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

Параметры
  • folder_pathstring
  • instructionsstringобязательный
  • namestringобязательный
delete_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}

Параметры
  • cursorstring
  • filterobjectобязательный
  • limitinteger
  • sift_idstringобязательный
  • sortany[]
get_extraction_status

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

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

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

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

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

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

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

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

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

Параметры
  • limitinteger
  • offsetinteger
list_records

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

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

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

Параметры
  • limitinteger
  • offsetinteger
query_sift

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

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

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

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

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

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

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

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

Похожие MCP-сервера

Chroma MCP

Chroma MCP

официальный

MCP-сервер для интеграции Chroma (open-source базы эмбеддингов) с LLM. Позволяет создавать коллекции, добавлять документы и выполнять семантический поиск с фильтрацией. Подходит разработчикам, стро...

Python592
hannesrudolph/mcp-ragdocs

hannesrudolph/mcp-ragdocs

Сервер для поиска документации через RAG и векторный поиск. Используется AI-ассистентами для дополнения ответов контекстом. Помогает разработчикам создавать инструменты с опорой на документацию.

TypeScript265
dmayboroda/minima

dmayboroda/minima

Minima — open-source MCP сервер для локального RAG в контейнерах. Поддерживает изолированный Ollama, кастомные LLM и интеграцию с ChatGPT и Claude. Индексирует документы и отвечает на вопросы, обеспечивая полный контроль над данными. Полезен для конфиденциальных проектов и офлайн-сред.

Python1047
laradji/deadzone

laradji/deadzone

Deadzone — векторный индекс для семантического поиска по документации, работающий как локальный MCP-сервер. Полезен разработчикам AI-агентов, которым нужен поиск по документам без интернета. Исполь...

Go3
teradata/teradata-mcp-server

teradata/teradata-mcp-server

Подключает AI-агентов напрямую к Teradata для запросов, профилирования данных, семантических слоёв и RAG-пайплайнов. MCP сервер с хуками для аудита, контролем лимитов строк и enterprise-безопасностью. Идеально дата-инженерам, DBA и разработчикам ИИ.

Python56
izzzzzi/codewiki-mcp

izzzzzi/codewiki-mcp

Сервер MCP для codewiki.google — поиск репозиториев, получение подробной документации и ответы на вопросы на естественном языке. Подключает AI к вики-страницам любых open-source проектов.

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

Лука Никитин