Skip to main content
Glama
norandom

RAGFlow Claude MCP Server

by norandom

RAGFlow Claude MCP Server

Небольшой сервер Model Context Protocol (MCP), который подключает Claude Desktop (и другие MCP-клиенты) к экземпляру RAGFlow. Он предоставляет REST API RAGFlow в виде набора инструментов, чтобы LLM могла запрашивать базы знаний и извлекать фрагменты документов в свой контекст.

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

Что он делает

  • Прямое извлечение: получает необработанные фрагменты документов с оценками сходства из эндпоинта /retrieval в RAGFlow.

  • Поиск по нескольким базам знаний (KB): один запрос может охватывать несколько баз знаний одновременно.

  • Углубление запроса с помощью DSPy: опциональное итеративное уточнение запроса (использует LLM для анализа промежуточных результатов и переписывания запроса).

  • ~~Переранжирование~~ — в настоящее время не работает на стороне RAGFlow, см. Известные проблемы.

  • Настраиваемый контроль результатов: page_size, similarity_threshold, top_k, пагинация.

  • Фильтр документов: ограничение результатов одним документом внутри набора данных (нечеткое сопоставление имен).

  • Поиск набора данных по имени (без учета регистра, нечеткий) вместо ID.

  • Аутентификация Cloudflare Zero Trust, если ваш RAGFlow находится за ней.

Related MCP server: RAGBrain MCP

Установка

  1. Клонируйте:

    git clone https://github.com/norandom/ragflow-claude-desktop-local-mcp
    cd ragflow-claude-desktop-local-mcp
  2. Установите:

    # On macOS, install DSPy first to dodge build issues:
    pip install git+https://github.com/stanfordnlp/dspy.git
    
    uv install
  3. Настройте: скопируйте образец и заполните свои данные RAGFlow.

    cp config.json.sample config.json

    Ключи:

    • RAGFLOW_BASE_URL: например, http://your-ragflow-server:9380

    • RAGFLOW_API_KEY: ваш API-ключ RAGFlow

    • RAGFLOW_DEFAULT_RERANK: модель переранжирования (по умолчанию rerank-multilingual-v3.0)

    • CF_ACCESS_CLIENT_ID (опционально): ID сервисного токена Cloudflare Zero Trust

    • CF_ACCESS_CLIENT_SECRET (опционально): секрет сервисного токена Cloudflare Zero Trust

    • DSPY_MODEL: модель DSPy LM (по умолчанию openai/gpt-4o-mini)

    • OPENAI_API_KEY: необходимо для углубления DSPy

Cloudflare Zero Trust

Если ваш RAGFlow находится за Cloudflare Zero Trust, получите сервисный токен на панели управления и добавьте его в config.json:

{
  "CF_ACCESS_CLIENT_ID": "your-client-id.access",
  "CF_ACCESS_CLIENT_SECRET": "your-client-secret"
}

Когда оба параметра установлены, каждый API-запрос отправляется с заголовками CF-Access-Client-Id и CF-Access-Client-Secret. Изменение кода не требуется.

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

{
  "mcpServers": {
    "ragflow": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/path/to/ragflow-claude-desktop-local-mcp",
        "ragflow-claude-mcp"
      ]
    }
  }
}

Инструменты

ragflow_retrieval_by_name (тот, который я использую чаще всего)

Извлечение фрагментов из одного или нескольких наборов данных по имени. Возвращает необработанные фрагменты с оценками сходства.

Параметры:

  • dataset_names (обязательно) — список, например, ["BASF", "Quant Literature"]

  • query (обязательно)

  • document_name (опционально) — ограничение одним документом; нечеткое сопоставление

  • top_k (опционально, по умолчанию 1024) — векторные кандидаты

  • similarity_threshold (опционально, по умолчанию 0.2) — 0.0–1.0

  • page (опционально, по умолчанию 1)

  • page_size (опционально, по умолчанию 10)

  • use_rerank (опционально, по умолчанию false) — в настоящее время не работает, см. Известные проблемы

  • deepening_level (опционально, по умолчанию 0) — уточнение DSPy, 0–3

ragflow_retrieval

Та же структура, но принимает dataset_ids: List[str] вместо имен.

Поиск по нескольким базам знаний

Вы можете искать по нескольким базам знаний за один вызов. Убедитесь, что они используют одну и ту же модель эмбеддингов — смешивание несовместимых эмбеддингов снизит точность оценок релевантности.

Use ragflow_retrieval_by_name with dataset_names ["Finance Reports", "Legal Documents"] and query "Summarize the key financial risks and compliance requirements for new market entry."

ragflow_list_datasets

Выводит список всех баз знаний в вашем экземпляре RAGFlow. Параметры не требуются. Внутренне проходит по всем страницам.

ragflow_list_documents

Выводит список документов в наборе данных. Проходит по всем страницам.

  • dataset_id (обязательно)

ragflow_get_chunks

Возвращает фрагменты (со ссылками) для одного документа.

  • dataset_id (обязательно)

  • document_id (обязательно)

ragflow_list_sessions

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

ragflow_list_documents_by_name

Выводит список документов в наборе данных, поиск по имени.

  • dataset_name (обязательно)

ragflow_reset_session

Завершает сессию чата для набора данных.

  • dataset_id (обязательно)

Настройка извлечения

Инструменты извлечения имеют три настройки:

  • page_size — количество фрагментов на страницу (по умолчанию 10).

  • similarity_threshold — отбрасывает фрагменты ниже этой оценки (по умолчанию 0.2).

  • top_k — размер пула для векторного поиска перед фильтрацией (по умолчанию 1024).

Некоторые начальные значения, которые работают у меня:

  • Широкий охват: page_size=15, similarity_threshold=0.15.

  • Высокая точность: page_size=5, similarity_threshold=0.4.

  • Глубокое исследование: page_size=20, similarity_threshold=0.1, deepening_level=1.

  • Сложные запросы: deepening_level=2.

  • Скорость: оставьте deepening_level=0 и пропустите переранжирование.

Примеры

Базовое извлечение по имени:

Use ragflow_retrieval_by_name with dataset_names ["BASF"] and query "What is BASF's latest income statement? Revenue, operating income, net income, and other key figures."

Ограничение одним документом:

Use ragflow_retrieval_by_name with dataset_names ["BASF"], document_name "annual_report_2023", and query "What were the key financial highlights for 2023?"

Имена документов сопоставляются нечетко — "annual" найдет annual_report_2023.pdf и annual_report_2024.pdf. Если совпадений несколько, сервер выбирает самый последний и перечисляет альтернативы в метаданных ответа.

Углубление DSPy для сложного запроса:

Use ragflow_retrieval_by_name with dataset_names ["Quant Literature"], query "what is a volatility clock", deepening_level 2.

Многостраничный поиск:

Use ragflow_retrieval_by_name with dataset_names ["BASF"], query "BASF business segments", page_size 10, page 2.

Список доступных данных:

Use ragflow_list_datasets.
Use ragflow_list_documents_by_name with dataset_name "BASF".

Получение конкретных фрагментов:

Use ragflow_get_chunks with dataset_id "43066ee0599411f089787a39c10de57b" and document_id "d74a1c105a3311f09fc94a0fcd8b7722".

Большие промпты

Некоторые примеры того, как я использую это в Claude Desktop.

Финансовый глубокий анализ:

Help me analyse BASF's recent financials.

1. Use ragflow_retrieval_by_name to search ["BASF"] for the latest income statement
   (revenue, operating income, net income). Use page_size 15,
   similarity_threshold 0.15, deepening_level 1.

2. Then run ragflow_retrieval_by_name again for the cash flow statement,
   page_size 10, similarity_threshold 0.2.

3. Finally look for year-over-year changes with page_size 12,
   similarity_threshold 0.18.

Многоязычное исследование:

Use ragflow_retrieval_by_name with dataset_names ["BASF"],
query "Was sind die wichtigsten Geschäftsbereiche von BASF?",
deepening_level 2.

DSPy определяет язык запроса и уточняет его соответствующим образом. Я использовал это для немецких, английских и смешанных запросов. Это работает, пока базовые документы содержат контент на этих языках.

Исследование с фильтрацией по документу:

1. Use ragflow_list_documents_by_name with dataset_name "BASF" to see what's in there.
2. Use ragflow_retrieval_by_name with dataset_names ["BASF"],
   document_name "sustainability_report", query "carbon neutrality goals",
   page_size 15, deepening_level 1.
3. Follow up with document_name "annual_report_2023" and
   query "environmental investments".

Запрос по нескольким базам знаний:

Use ragflow_retrieval_by_name with dataset_names ["BASF", "Industry Reports"],
query "chemical industry sustainability benchmarks",
page_size 12, deepening_level 1.

Как работает углубление DSPy

deepening_level запускает цикл уточнения на основе LLM поверх извлечения:

  • 0: без углубления (по умолчанию).

  • 1: один проход уточнения.

  • 2: два прохода с анализом пробелов.

  • 3: три и более проходов плюс объединение результатов.

Каждый проход: выполнение поиска, обобщение лучших результатов, вопрос к LLM о том, чего не хватает, генерация нового запроса, выполнение поиска. Метаданные ответа включают исходный запрос, каждый уточненный запрос и обоснование на каждом шаге.

DSPy требует:

  • DSPY_MODELopenai/gpt-4o-mini работает отлично

  • OPENAI_API_KEY

Переранжирование (в настоящее время не работает)

Когда эта функция работает, переранжирование заменяет косинусную оценку вектора на оценку модели переранжирования (по моему опыту, релевантность обычно на 10–30% выше). В RAGFlow сейчас есть известная ошибка, из-за которой use_rerank=true вызывает:

UnsupportedProtocol: Request URL is missing an 'http://' or 'https://' protocol

Поэтому оставьте use_rerank=false, пока проблема не будет исправлена. Стандартное векторное извлечение работает нормально.

Как работает поиск набора данных

  • Поиск по имени без учета регистра.

  • Нечеткое сопоставление для частичных имен.

  • Наборы данных кэшируются для поиска по имени; промахи кэша вызывают обновление.

  • Если поиск не удался, ошибка включает доступные имена наборов данных, чтобы вы знали, что было на самом деле.

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

Когда вы передаете document_name:

  • Точное совпадение выигрывает, затем "начинается с", затем "содержит", затем частичное.

  • При равенстве выигрывает более недавно обновленный документ.

  • Имена, содержащие 2024, 2023, latest, current или new, получают небольшой бонус к оценке.

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

Обработка ошибок

Разумные сообщения об ошибках для: ошибок API, отсутствующих наборов данных, недоступного RAGFlow, разорванных сессий, неверного ввода и проблем с конфигурацией. Чувствительные значения скрываются в логах.

Переменные окружения

  • RAGFLOW_BASE_URL — переопределяет файл конфигурации. Значение по умолчанию в коде: http://192.168.122.93:9380 (мой локальный экземпляр).

  • RAGFLOW_API_KEY — обязательно.

Разработка

Запуск сервера напрямую:

uv run ragflow-claude-mcp

Он слушает stdio, как и другие MCP-серверы.

Зависимости для разработки:

uv install --extra dev

Это установит pytest + плагины asyncio/mock/cov.

Тесты:

uv run pytest
uv run pytest --cov=src --cov-report=html --cov-report=term
uv run pytest tests/test_server.py
uv run pytest -v

Покрытие составляет около 44%, 22/23 тестов проходят (один пропущен из-за периодического сбоя CI). Тесты охватывают инициализацию сервера, интеграцию API RAGFlow, углубление DSPy, ветки конфигурации OpenAI/OpenRouter и загрузку конфигурации.

Примечания по реализации

API извлечения — это единственная поверхность RAGFlow, на которую полагается сервер. Никаких зависимостей от помощника/чата, никакой конфигурации промптов на стороне сервера — только фрагменты. Проще для понимания, проще для отладки.

Устранение неполадок

  • "Dataset not found": запустите ragflow_list_datasets, чтобы увидеть, что там есть на самом деле.

  • Ошибки подключения: дважды проверьте RAGFLOW_BASE_URL и RAGFLOW_API_KEY.

  • Сервер не запускается: завершилась ли установка uv install?

  • Нужны необработанные фрагменты: используйте ragflow_retrieval_by_name / ragflow_retrieval.

  • Зависшая сессия: ragflow_list_sessions, затем ragflow_reset_session.

  • Ошибки 403 от Cloudflare: подтвердите, что CF_ACCESS_CLIENT_ID / CF_ACCESS_CLIENT_SECRET соответствуют активному сервисному токену в приложении Zero Trust.

Известные проблемы

Переранжирование не работает на стороне сервера

use_rerank=true выдает ошибку UnsupportedProtocol: Request URL is missing an 'http://' or 'https://' protocol. Это дефект на стороне RAGFlow. Обходной путь: оставьте эту функцию выключенной. Я слежу за репозиторием RAGFlow в ожидании исправления.

Участие в разработке

Только через PR — ветка main защищена. Коммиты должны быть подписаны SSH.

  1. Сделайте форк.

  2. git checkout -b feature/your-thing.

  3. Внесите изменения, напишите понятное сообщение коммита.

  4. Отправьте в свой форк.

  5. Откройте PR в main.

PR автоматически проверяются TruffleHog — не включайте ключи, токены или секреты. См. CONTRIBUTING.md для получения подробной информации.

Available Tools

8 tools
ragflow_get_chunksC

Get chunks with references from a specific document

ParametersJSON Schema
NameRequiredDescriptionDefault
dataset_idYesID of the dataset
document_idYesID of the document to get chunks from

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure, but it only states a simple data retrieval. It omits important traits like pagination, rate limits, authentication, or potential side effects, leaving the agent under-informed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no wasted words, but it is overly brief and lacks important details. Conciseness is not valuable at the expense of completeness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema, the description should explain what 'chunks with references' means and the format of the return value. It does not, leaving the agent with insufficient context for a simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters. The description does not add meaning beyond what the schema provides, earning a baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and the resource ('chunks with references from a specific document'), effectively distinguishing it from sibling tools like listing datasets or retrieval. However, 'references' could be more explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as retrieval tools. There is no mention of prerequisites, context, or situations where this tool is inappropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ragflow_list_datasetsA

List all available datasets/knowledge bases in RAGFlow

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It states 'list all available' but omits details like pagination, ordering, or side effects. Adequate but minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with action. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While sufficient for a zero-parameter listing tool, the lack of output schema leaves the agent uninformed about the response structure, which could be improved.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, and schema coverage is 100%. Baseline 4 applies as the description adds no parameter info, which is acceptable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List'), the resource ('all available datasets/knowledge bases'), and distinguishes it from siblings which deal with chunks, documents, and sessions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus siblings. The description only states what it does, leaving the agent to infer usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ragflow_list_documentsC

List documents in a specific dataset

ParametersJSON Schema
NameRequiredDescriptionDefault
dataset_idYesID of the dataset to list documents from

TDQS

C2.9/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses no behavioral traits such as read-only nature, pagination, error handling, or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise and front-loaded, stating the core purpose in a single phrase with no extraneous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description fails to cover return format, pagination, or error conditions, even for a simple list tool it feels incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a description for the single parameter. The tool description adds no additional meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List', resource 'documents', and context 'in a specific dataset'. It distinguishes from siblings such as ragflow_list_datasets (lists datasets) and ragflow_get_chunks (gets chunks).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use or not use this tool versus alternatives. The description only states the basic action without any contextual hints or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ragflow_list_documents_by_nameC

List documents in a dataset by dataset name

ParametersJSON Schema
NameRequiredDescriptionDefault
dataset_nameYesName of the dataset/knowledge base to list documents from

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description is the sole source for behavioral clues. It implies a read operation but does not disclose details such as pagination, authentication requirements, rate limits, or what the response looks like. Minimal transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with key action and resource. Efficient but could benefit from additional context without being verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description should hint at what the returned list contains (e.g., document names, IDs, metadata). It only states what it does, not what the agent gets back. Missing return value details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description only restates the parameter's purpose ('by dataset name') which is already described in the schema. Adds no extra meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the action (List), resource (documents), and filter (by dataset name). It is specific and suggests the tool's scope, but does not explicitly differentiate from the sibling tool 'ragflow_list_documents' which likely lists documents without a dataset name filter.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus the sibling 'ragflow_list_documents', which might list all documents or use different criteria. The description does not mention alternatives or conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ragflow_list_sessionsB

List active chat sessions for all datasets

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden. It only says 'List active chat sessions' but does not explain what 'active' means, any side effects, or limitations. Minimal behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, direct sentence with no wasted words. It is front-loaded with the key action and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no parameters, the description lacks details on output format, pagination, or what constitutes an active session. Without output schema or annotations, the description is insufficient for complete understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema is empty (0 parameters), so schema coverage is 100%. The description adds meaning by specifying the resource and scope, which is beyond the empty schema. Baseline 3, but the context provided justifies a higher score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and the resource 'active chat sessions' with scope 'for all datasets', distinguishing it from sibling tools like ragflow_list_datasets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool over alternatives like ragflow_list_datasets or ragflow_reset_session. The description only states what it does without usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ragflow_reset_sessionB

Reset/clear the chat session for a specific dataset

ParametersJSON Schema
NameRequiredDescriptionDefault
dataset_idYesID of the dataset to reset session for

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. Description merely states the action without disclosing side effects (e.g., whether session history is deleted permanently, if it affects other datasets, or if confirmation is required).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, 10 words, no redundancy. Front-loaded with verb and resource. Efficiently communicates the core function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a simple reset action with one parameter and no output schema, but lacks behavioral details that would help the agent understand consequences. Could mention that the session is cleared without confirmation or return value.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for one parameter. Description mirrors the schema's description ('ID of the dataset to reset session for') without adding new meaning or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the action (reset/clear) and the resource (chat session for a specific dataset). It is distinct from sibling tools which are for listing or retrieval, not mutation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. Does not mention prerequisites, conditions, or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ragflow_retrievalB

Retrieve document chunks directly from RAGFlow datasets using the retrieval API. Returns raw chunks with similarity scores.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination. Defaults to 1.
queryYesSearch query or question
top_kNoNumber of chunks for vector cosine computation. Defaults to 1024.
page_sizeNoNumber of chunks per page. Defaults to 10.
use_rerankNoWhether to enable reranking for better result quality. Default: false (uses vector similarity only).
dataset_idsYesList of IDs of the datasets/knowledge bases to search
document_nameNoOptional document name to filter results to specific document
deepening_levelNoLevel of DSPy query refinement (0-3). 0=none, 1=basic refinement, 2=gap analysis, 3=full optimization. Default: 0
similarity_thresholdNoMinimum similarity score for chunks (0.0 to 1.0). Defaults to 0.2.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must disclose behavioral traits like whether the tool is read-only, permission requirements, or pagination behavior. It only says 'Returns raw chunks' and does not address these aspects, leaving the agent with incomplete understanding of its side effects or constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is succinct: two sentences that convey the core function and output without extraneous words. It is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 9 parameters and no output schema, the description should provide more context on how to use parameters like deepening_level or use_rerank, and what the returned chunks contain. It states 'raw chunks with similarity scores' but lacks detail on the structure of the response, which is necessary for an agent to process the output correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description does not add meaning beyond what the parameter descriptions already provide (e.g., page, top_k). It mentions 'similarity scores' but does not clarify how parameters like similarity_threshold relate to the output.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Retrieve' and the resource 'document chunks' from RAGFlow datasets, and specifies the output as 'raw chunks with similarity scores'. However, it does not explicitly differentiate from sibling tools like ragflow_retrieval_by_name, which likely performs a similar function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as ragflow_get_chunks or ragflow_retrieval_by_name. It merely states what the tool does, without context on prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ragflow_retrieval_by_nameB

Retrieve document chunks by dataset names using the retrieval API. Returns raw chunks with similarity scores.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination. Defaults to 1.
queryYesSearch query or question
top_kNoNumber of chunks for vector cosine computation. Defaults to 1024.
page_sizeNoNumber of chunks per page. Defaults to 10.
use_rerankNoWhether to enable reranking for better result quality. Default: false (uses vector similarity only).
dataset_namesYesList of names of the datasets/knowledge bases to search (e.g., ['BASF', 'Legal'])
document_nameNoOptional document name to filter results to specific document
deepening_levelNoLevel of DSPy query refinement (0-3). 0=none, 1=basic refinement, 2=gap analysis, 3=full optimization. Default: 0
similarity_thresholdNoMinimum similarity score for chunks (0.0 to 1.0). Defaults to 0.2.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It mentions return type (raw chunks with similarity scores) but lacks information on side effects, permissions, rate limits, or destructive potential. 'Retrieve' implies read-only but is not explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loading the purpose. It is efficient but could be slightly more structured without adding verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 9 parameters and no output schema, the description is sparse. It omits details on pagination, reranking, deepening_level, and similarity_threshold behavior, leaving the agent to rely solely on the schema for context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds minimal meaning beyond the schema, only briefly noting retrieval by dataset names and return format. No parameter interaction hints are provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (retrieve), resource (document chunks), and distinguishing parameter (by dataset names). It differentiates from siblings like ragflow_retrieval which likely uses different criteria.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. The description implies usage with dataset names but does not mention exclusions or compare to ragflow_retrieval or other search methods.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 8 tool updatesv0.1.0
    • First observedragflow_get_chunks
    • First observedragflow_list_datasets
    • First observedragflow_list_documents
    • First observedragflow_list_documents_by_name
    • First observedragflow_list_sessions
    • First observedragflow_reset_session
    • First observedragflow_retrieval
    • First observedragflow_retrieval_by_name

TDQS

B3.4/5.0

Scored across 8 tools

Disambiguation4/5

Most tools have distinct purposes, but ragflow_list_documents and ragflow_retrieval each have an alternative by-name variant, which could cause confusion if descriptions are not heeded. However, descriptions clarify the difference between ID-based and name-based operations, keeping overlap minimal.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with snake_case and the 'ragflow_' prefix. Variations like '_by_name' are systematic and predictable, enhancing readability for agents.

Tool Count5/5

With 8 tools, the set is well-scoped for a knowledge base retrieval server. Each tool serves a clear function, and the count is neither too sparse nor overwhelming for the intended purpose.

Completeness4/5

The tool surface covers listing datasets, listing documents, retrieving chunks, and managing chat sessions. It lacks create/update/delete operations, but given the likely read-heavy focus of the server, these gaps are acceptable and do not impede the primary retrieval workflow.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    Integrates R2R (Retrieval-Augmented Generation) with Claude Desktop, enabling semantic search across knowledge bases and RAG-based question answering with support for vector, graph, web, and document search.
    2
    -
  • A
    license
    A
    quality
    F
    maintenance
    Connects Claude Desktop to a RAGBrain knowledge base to enable semantic search, document retrieval, and namespace management. It allows users to browse collections, discover documents by topic, and access full text content through natural language.
    5
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Provides semantic search capabilities by connecting Claude Desktop to a Cloudflare Workers backend powered by Vectorize. It enables natural language querying of knowledge bases using vector similarity and edge-based embedding generation.
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables semantic retrieval and knowledge base management through the RAGFlow API, including dataset, document, chunk, chat, and graph operations.
    5
    MIT