RAGFlow Claude MCP Server
RAGFlow Claude MCP 서버
RAGFlow 인스턴스를 Claude Desktop(및 기타 MCP 클라이언트)에 연결하는 소규모 MCP(Model Context Protocol) 서버입니다. RAGFlow REST API를 몇 가지 도구로 노출하여 LLM이 지식 베이스를 쿼리하고 문서 청크를 컨텍스트로 가져올 수 있도록 합니다.
이것은 제가 개인적인 R&D를 위해 작성한 개인용 소프트웨어입니다. 버그가 없을 수 없으며 코드가 깔끔하지도 않습니다. 제가 필요한 용도로는 잘 작동합니다.
기능
직접 검색: RAGFlow의
/retrieval엔드포인트에서 유사도 점수가 포함된 원시 문서 청크를 가져옵니다.다중 KB 검색: 단일 쿼리로 여러 지식 베이스를 동시에 검색할 수 있습니다.
DSPy 쿼리 심화: 선택적 반복 쿼리 개선(LLM을 사용하여 중간 결과를 분석하고 쿼리를 다시 작성).
~~재순위 지정(Reranking)~~ — 현재 RAGFlow 측에서 작동하지 않음, 알려진 문제 참조.
조정 가능한 결과 제어:
page_size,similarity_threshold,top_k, 페이지 매기기.문서 필터: 데이터셋 내의 특정 문서로 결과 제한(퍼지 이름 매칭).
ID 대신 이름으로 데이터셋 조회(대소문자 구분 없음, 퍼지 매칭).
RAGFlow가 Cloudflare Zero Trust 뒤에 있을 때 인증 지원.
Related MCP server: RAGBrain MCP
설치
복제:
git clone https://github.com/norandom/ragflow-claude-desktop-local-mcp cd ragflow-claude-desktop-local-mcp설치:
# On macOS, install DSPy first to dodge build issues: pip install git+https://github.com/stanfordnlp/dspy.git uv install구성: 샘플을 복사하고 RAGFlow 세부 정보를 입력합니다.
cp config.json.sample config.json키:
RAGFLOW_BASE_URL: 예:http://your-ragflow-server:9380RAGFLOW_API_KEY: RAGFlow API 키RAGFLOW_DEFAULT_RERANK: 재순위 지정 모델(기본값rerank-multilingual-v3.0)CF_ACCESS_CLIENT_ID(선택 사항): Cloudflare Zero Trust 서비스 토큰 IDCF_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.0page(선택 사항, 기본값 1)page_size(선택 사항, 기본값 10)use_rerank(선택 사항, 기본값 false) — 현재 업스트림에서 작동하지 않음, 알려진 문제 참조deepening_level(선택 사항, 기본값 0) — DSPy 개선, 0–3
ragflow_retrieval
형태는 같지만 이름 대신 dataset_ids: List[str]을 사용합니다.
다중 KB 검색
한 번의 호출로 여러 지식 베이스를 검색할 수 있습니다. 임베딩 모델을 공유하는지 확인하십시오. 호환되지 않는 임베딩을 혼합하면 관련성 점수가 떨어집니다.
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".교차 KB 쿼리:
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: 1회 개선 패스.
2: 간격 분석을 포함한 2회 패스.
3: 3회 이상의 패스 및 결과 병합.
각 패스: 검색 수행, 상위 결과 요약, LLM에게 누락된 내용 질문, 새 쿼리 생성, 실행. 응답 메타데이터에는 원래 쿼리, 모든 개선된 쿼리, 각 단계에서의 추론이 포함됩니다.
DSPy 필요 사항:
DSPY_MODEL—openai/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-mcpMCP 서버가 하는 방식대로 stdio에서 수신 대기합니다.
개발 의존성:
uv install --extra devpytest + 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 문제로 건너뜀). 테스트는 서버 초기화, RAGFlow API 통합, 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을 실행하십시오.Cloudflare 403:
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 서명이 있어야 합니다.
포크하십시오.
git checkout -b feature/your-thing.변경하고 명확한 커밋 메시지를 작성하십시오.
포크로 푸시하십시오.
main에 대해 PR을 여십시오.
PR은 TruffleHog를 자동으로 실행하므로 키, 토큰 또는 시크릿을 포함하지 마십시오. 자세한 내용은 CONTRIBUTING.md를 참조하십시오.
Available Tools
8 toolsragflow_get_chunksC
Get chunks with references from a specific document
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | Yes | ID of the dataset | |
| document_id | Yes | ID of the document to get chunks from |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | Yes | ID of the dataset to list documents from |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_name | Yes | Name of the dataset/knowledge base to list documents from |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | Yes | ID of the dataset to reset session for |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination. Defaults to 1. | |
| query | Yes | Search query or question | |
| top_k | No | Number of chunks for vector cosine computation. Defaults to 1024. | |
| page_size | No | Number of chunks per page. Defaults to 10. | |
| use_rerank | No | Whether to enable reranking for better result quality. Default: false (uses vector similarity only). | |
| dataset_ids | Yes | List of IDs of the datasets/knowledge bases to search | |
| document_name | No | Optional document name to filter results to specific document | |
| deepening_level | No | Level of DSPy query refinement (0-3). 0=none, 1=basic refinement, 2=gap analysis, 3=full optimization. Default: 0 | |
| similarity_threshold | No | Minimum similarity score for chunks (0.0 to 1.0). Defaults to 0.2. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination. Defaults to 1. | |
| query | Yes | Search query or question | |
| top_k | No | Number of chunks for vector cosine computation. Defaults to 1024. | |
| page_size | No | Number of chunks per page. Defaults to 10. | |
| use_rerank | No | Whether to enable reranking for better result quality. Default: false (uses vector similarity only). | |
| dataset_names | Yes | List of names of the datasets/knowledge bases to search (e.g., ['BASF', 'Legal']) | |
| document_name | No | Optional document name to filter results to specific document | |
| deepening_level | No | Level of DSPy query refinement (0-3). 0=none, 1=basic refinement, 2=gap analysis, 3=full optimization. Default: 0 | |
| similarity_threshold | No | Minimum similarity score for chunks (0.0 to 1.0). Defaults to 0.2. |
TDQS
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.
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.
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.
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.
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.
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.
8 tool updates
v0.1.0- First observed
ragflow_get_chunks - First observed
ragflow_list_datasets - First observed
ragflow_list_documents - First observed
ragflow_list_documents_by_name - First observed
ragflow_list_sessions - First observed
ragflow_reset_session - First observed
ragflow_retrieval - First observed
ragflow_retrieval_by_name
TDQS
Scored across 8 tools
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.
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.
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.
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
Related MCP Connectors
Connect your team's living knowledge base — docs, data, issues, CRM — to Claude and ChatGPT.
Cloud or self-hosted knowledge for AI agents: hybrid search, reranking, GraphRAG, scoped MCP tools.
Ingest, manage, and retrieve documents for RAG-powered AI applications
Search your knowledge bases from any AI assistant using hybrid RAG.
Related MCP Servers
- FlicenseAqualityDmaintenanceIntegrates 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-
- AlicenseAqualityFmaintenanceConnects 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.5MIT
- AlicenseAqualityDmaintenanceProvides 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.2MIT
- AlicenseNot gradedqualityDmaintenanceEnables semantic retrieval and knowledge base management through the RAGFlow API, including dataset, document, chunk, chat, and graph operations.5MIT