add docs
This commit is contained in:
8
docs/develop/mcp/_category_.json
Normal file
8
docs/develop/mcp/_category_.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"label": "MCP",
|
||||
"position": 40,
|
||||
"link": {
|
||||
"type": "generated-index",
|
||||
"description": "Guides and references on accessing RAGFlow's datasets via MCP."
|
||||
}
|
||||
}
|
||||
212
docs/develop/mcp/launch_mcp_server.md
Normal file
212
docs/develop/mcp/launch_mcp_server.md
Normal file
@@ -0,0 +1,212 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
slug: /launch_mcp_server
|
||||
---
|
||||
|
||||
# Launch RAGFlow MCP server
|
||||
|
||||
Launch an MCP server from source or via Docker.
|
||||
|
||||
---
|
||||
|
||||
A RAGFlow Model Context Protocol (MCP) server is designed as an independent component to complement the RAGFlow server. Note that an MCP server must operate alongside a properly functioning RAGFlow server.
|
||||
|
||||
An MCP server can start up in either self-host mode (default) or host mode:
|
||||
|
||||
- **Self-host mode**:
|
||||
When launching an MCP server in self-host mode, you must provide an API key to authenticate the MCP server with the RAGFlow server. In this mode, the MCP server can access *only* the datasets of a specified tenant on the RAGFlow server.
|
||||
- **Host mode**:
|
||||
In host mode, each MCP client can access their own datasets on the RAGFlow server. However, each client request must include a valid API key to authenticate the client with the RAGFlow server.
|
||||
|
||||
Once a connection is established, an MCP server communicates with its client in MCP HTTP+SSE (Server-Sent Events) mode, unidirectionally pushing responses from the RAGFlow server to its client in real time.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
1. Ensure RAGFlow is upgraded to v0.18.0 or later.
|
||||
2. Have your RAGFlow API key ready. See [Acquire a RAGFlow API key](../acquire_ragflow_api_key.md).
|
||||
|
||||
:::tip INFO
|
||||
If you wish to try out our MCP server without upgrading RAGFlow, community contributor [yiminghub2024](https://github.com/yiminghub2024) 👏 shares their recommended steps [here](#launch-an-mcp-server-without-upgrading-ragflow).
|
||||
:::
|
||||
|
||||
## Launch an MCP server
|
||||
|
||||
You can start an MCP server either from source code or via Docker.
|
||||
|
||||
### Launch from source code
|
||||
|
||||
1. Ensure that a RAGFlow server v0.18.0+ is properly running.
|
||||
2. Launch the MCP server:
|
||||
|
||||
|
||||
```bash
|
||||
# Launch the MCP server to work in self-host mode, run either of the following
|
||||
uv run mcp/server/server.py --host=127.0.0.1 --port=9382 --base-url=http://127.0.0.1:9380 --api-key=ragflow-xxxxx
|
||||
# uv run mcp/server/server.py --host=127.0.0.1 --port=9382 --base-url=http://127.0.0.1:9380 --mode=self-host --api-key=ragflow-xxxxx
|
||||
|
||||
# To launch the MCP server to work in host mode, run the following instead:
|
||||
# uv run mcp/server/server.py --host=127.0.0.1 --port=9382 --base-url=http://127.0.0.1:9380 --mode=host
|
||||
```
|
||||
|
||||
Where:
|
||||
|
||||
- `host`: The MCP server's host address.
|
||||
- `port`: The MCP server's listening port.
|
||||
- `base_url`: The address of the running RAGFlow server.
|
||||
- `mode`: The launch mode.
|
||||
- `self-host`: (default) self-host mode.
|
||||
- `host`: host mode.
|
||||
- `api_key`: Required in self-host mode to authenticate the MCP server with the RAGFlow server. See [here](../acquire_ragflow_api_key.md) for instructions on acquiring an API key.
|
||||
|
||||
### Transports
|
||||
|
||||
The RAGFlow MCP server supports two transports: the legacy SSE transport (served at `/sse`), introduced on November 5, 2024 and deprecated on March 26, 2025, and the streamable-HTTP transport (served at `/mcp`). The legacy SSE transport and the streamable HTTP transport with JSON responses are enabled by default. To disable either transport, use the flags `--no-transport-sse-enabled` or `--no-transport-streamable-http-enabled`. To disable JSON responses for the streamable HTTP transport, use the `--no-json-response` flag.
|
||||
|
||||
### Launch from Docker
|
||||
|
||||
#### 1. Enable MCP server
|
||||
|
||||
The MCP server is designed as an optional component that complements the RAGFlow server and disabled by default. To enable MCP server:
|
||||
|
||||
1. Navigate to **docker/docker-compose.yml**.
|
||||
2. Uncomment the `services.ragflow.command` section as shown below:
|
||||
|
||||
```yaml {6-13}
|
||||
services:
|
||||
ragflow:
|
||||
...
|
||||
image: ${RAGFLOW_IMAGE}
|
||||
# Example configuration to set up an MCP server:
|
||||
command:
|
||||
- --enable-mcpserver
|
||||
- --mcp-host=0.0.0.0
|
||||
- --mcp-port=9382
|
||||
- --mcp-base-url=http://127.0.0.1:9380
|
||||
- --mcp-script-path=/ragflow/mcp/server/server.py
|
||||
- --mcp-mode=self-host
|
||||
- --mcp-host-api-key=ragflow-xxxxxxx
|
||||
# Optional transport flags for the RAGFlow MCP server.
|
||||
# If you set `mcp-mode` to `host`, you must add the --no-transport-streamable-http-enabled flag, because the streamable-HTTP transport is not yet supported in host mode.
|
||||
# The legacy SSE transport and the streamable-HTTP transport with JSON responses are enabled by default.
|
||||
# To disable a specific transport or JSON responses for the streamable-HTTP transport, use the corresponding flag(s):
|
||||
# - --no-transport-sse-enabled # Disables the legacy SSE endpoint (/sse)
|
||||
# - --no-transport-streamable-http-enabled # Disables the streamable-HTTP transport (served at the /mcp endpoint)
|
||||
# - --no-json-response # Disables JSON responses for the streamable-HTTP transport
|
||||
```
|
||||
|
||||
Where:
|
||||
|
||||
- `mcp-host`: The MCP server's host address.
|
||||
- `mcp-port`: The MCP server's listening port.
|
||||
- `mcp-base-url`: The address of the running RAGFlow server.
|
||||
- `mcp-script-path`: The file path to the MCP server’s main script.
|
||||
- `mcp-mode`: The launch mode.
|
||||
- `self-host`: (default) self-host mode.
|
||||
- `host`: host mode.
|
||||
- `mcp-host-api_key`: Required in self-host mode to authenticate the MCP server with the RAGFlow server. See [here](../acquire_ragflow_api_key.md) for instructions on acquiring an API key.
|
||||
|
||||
:::tip INFO
|
||||
If you set `mcp-mode` to `host`, you must add the `--no-transport-streamable-http-enabled` flag, because the streamable-HTTP transport is not yet supported in host mode.
|
||||
:::
|
||||
|
||||
#### 2. Launch a RAGFlow server with an MCP server
|
||||
|
||||
Run `docker compose -f docker-compose.yml up` to launch the RAGFlow server together with the MCP server.
|
||||
|
||||
*The following ASCII art confirms a successful launch:*
|
||||
|
||||
```bash
|
||||
ragflow-server | Starting MCP Server on 0.0.0.0:9382 with base URL http://127.0.0.1:9380...
|
||||
ragflow-server | Starting 1 task executor(s) on host 'dd0b5e07e76f'...
|
||||
ragflow-server | 2025-04-18 15:41:18,816 INFO 27 ragflow_server log path: /ragflow/logs/ragflow_server.log, log levels: {'peewee': 'WARNING', 'pdfminer': 'WARNING', 'root': 'INFO'}
|
||||
ragflow-server |
|
||||
ragflow-server | __ __ ____ ____ ____ _____ ______ _______ ____
|
||||
ragflow-server | | \/ |/ ___| _ \ / ___|| ____| _ \ \ / / ____| _ \
|
||||
ragflow-server | | |\/| | | | |_) | \___ \| _| | |_) \ \ / /| _| | |_) |
|
||||
ragflow-server | | | | | |___| __/ ___) | |___| _ < \ V / | |___| _ <
|
||||
ragflow-server | |_| |_|\____|_| |____/|_____|_| \_\ \_/ |_____|_| \_\
|
||||
ragflow-server |
|
||||
ragflow-server | MCP launch mode: self-host
|
||||
ragflow-server | MCP host: 0.0.0.0
|
||||
ragflow-server | MCP port: 9382
|
||||
ragflow-server | MCP base_url: http://127.0.0.1:9380
|
||||
ragflow-server | INFO: Started server process [26]
|
||||
ragflow-server | INFO: Waiting for application startup.
|
||||
ragflow-server | INFO: Application startup complete.
|
||||
ragflow-server | INFO: Uvicorn running on http://0.0.0.0:9382 (Press CTRL+C to quit)
|
||||
ragflow-server | 2025-04-18 15:41:20,469 INFO 27 found 0 gpus
|
||||
ragflow-server | 2025-04-18 15:41:23,263 INFO 27 init database on cluster mode successfully
|
||||
ragflow-server | 2025-04-18 15:41:25,318 INFO 27 load_model /ragflow/rag/res/deepdoc/det.onnx uses CPU
|
||||
ragflow-server | 2025-04-18 15:41:25,367 INFO 27 load_model /ragflow/rag/res/deepdoc/rec.onnx uses CPU
|
||||
ragflow-server | ____ ___ ______ ______ __
|
||||
ragflow-server | / __ \ / | / ____// ____// /____ _ __
|
||||
ragflow-server | / /_/ // /| | / / __ / /_ / // __ \| | /| / /
|
||||
ragflow-server | / _, _// ___ |/ /_/ // __/ / // /_/ /| |/ |/ /
|
||||
ragflow-server | /_/ |_|/_/ |_|\____//_/ /_/ \____/ |__/|__/
|
||||
ragflow-server |
|
||||
ragflow-server |
|
||||
ragflow-server | 2025-04-18 15:41:29,088 INFO 27 RAGFlow version: v0.18.0-285-gb2c299fa full
|
||||
ragflow-server | 2025-04-18 15:41:29,088 INFO 27 project base: /ragflow
|
||||
ragflow-server | 2025-04-18 15:41:29,088 INFO 27 Current configs, from /ragflow/conf/service_conf.yaml:
|
||||
ragflow-server | ragflow: {'host': '0.0.0.0', 'http_port': 9380}
|
||||
...
|
||||
ragflow-server | * Running on all addresses (0.0.0.0)
|
||||
ragflow-server | * Running on http://127.0.0.1:9380
|
||||
ragflow-server | * Running on http://172.19.0.6:9380
|
||||
ragflow-server | ______ __ ______ __
|
||||
ragflow-server | /_ __/___ ______/ /__ / ____/ _____ _______ __/ /_____ _____
|
||||
ragflow-server | / / / __ `/ ___/ //_/ / __/ | |/_/ _ \/ ___/ / / / __/ __ \/ ___/
|
||||
ragflow-server | / / / /_/ (__ ) ,< / /____> </ __/ /__/ /_/ / /_/ /_/ / /
|
||||
ragflow-server | /_/ \__,_/____/_/|_| /_____/_/|_|\___/\___/\__,_/\__/\____/_/
|
||||
ragflow-server |
|
||||
ragflow-server | 2025-04-18 15:41:34,501 INFO 32 TaskExecutor: RAGFlow version: v0.18.0-285-gb2c299fa full
|
||||
ragflow-server | 2025-04-18 15:41:34,501 INFO 32 Use Elasticsearch http://es01:9200 as the doc engine.
|
||||
...
|
||||
```
|
||||
|
||||
#### Launch an MCP server without upgrading RAGFlow
|
||||
|
||||
:::info KUDOS
|
||||
This section is contributed by our community contributor [yiminghub2024](https://github.com/yiminghub2024). 👏
|
||||
:::
|
||||
|
||||
1. Prepare all MCP-specific files and directories.
|
||||
i. Copy the [mcp/](https://github.com/infiniflow/ragflow/tree/main/mcp) directory to your local working directory.
|
||||
ii. Copy [docker/docker-compose.yml](https://github.com/infiniflow/ragflow/blob/main/docker/docker-compose.yml) locally.
|
||||
iii. Copy [docker/entrypoint.sh](https://github.com/infiniflow/ragflow/blob/main/docker/entrypoint.sh) locally.
|
||||
iv. Install the required dependencies using `uv`:
|
||||
- Run `uv add mcp` or
|
||||
- Copy [pyproject.toml](https://github.com/infiniflow/ragflow/blob/main/pyproject.toml) locally and run `uv sync --python 3.10 --all-extras`.
|
||||
2. Edit **docker-compose.yml** to enable MCP (disabled by default).
|
||||
3. Launch the MCP server:
|
||||
|
||||
```bash
|
||||
docker compose -f docker-compose.yml up -d
|
||||
```
|
||||
|
||||
### Check MCP server status
|
||||
|
||||
Run the following to check the logs the RAGFlow server and the MCP server:
|
||||
|
||||
```bash
|
||||
docker logs ragflow-server
|
||||
```
|
||||
|
||||
## Security considerations
|
||||
|
||||
As MCP technology is still at early stage and no official best practices for authentication or authorization have been established, RAGFlow currently uses [API key](./acquire_ragflow_api_key.md) to validate identity for the operations described earlier. However, in public environments, this makeshift solution could expose your MCP server to potential network attacks. Therefore, when running a local SSE server, it is recommended to bind only to localhost (`127.0.0.1`) rather than to all interfaces (`0.0.0.0`).
|
||||
|
||||
For further guidance, see the [official MCP documentation](https://modelcontextprotocol.io/docs/concepts/transports#security-considerations).
|
||||
|
||||
## Frequently asked questions
|
||||
|
||||
### When to use an API key for authentication?
|
||||
|
||||
The use of an API key depends on the operating mode of your MCP server.
|
||||
|
||||
- **Self-host mode** (default):
|
||||
When starting the MCP server in self-host mode, you should provide an API key when launching it to authenticate it with the RAGFlow server:
|
||||
- If launching from source, include the API key in the command.
|
||||
- If launching from Docker, update the API key in **docker/docker-compose.yml**.
|
||||
- **Host mode**:
|
||||
If your RAGFlow MCP server is working in host mode, include the API key in the `headers` of your client requests to authenticate your client with the RAGFlow server. An example is available [here](https://github.com/infiniflow/ragflow/blob/main/mcp/client/client.py).
|
||||
241
docs/develop/mcp/mcp_client_example.md
Normal file
241
docs/develop/mcp/mcp_client_example.md
Normal file
@@ -0,0 +1,241 @@
|
||||
---
|
||||
sidebar_position: 3
|
||||
slug: /mcp_client
|
||||
|
||||
---
|
||||
|
||||
# RAGFlow MCP client examples
|
||||
|
||||
Python and curl MCP client examples.
|
||||
|
||||
------
|
||||
|
||||
## Example MCP Python client
|
||||
|
||||
We provide a *prototype* MCP client example for testing [here](https://github.com/infiniflow/ragflow/blob/main/mcp/client/client.py).
|
||||
|
||||
:::info IMPORTANT
|
||||
If your MCP server is running in host mode, include your acquired API key in your client's `headers` when connecting asynchronously to it:
|
||||
|
||||
```python
|
||||
async with sse_client("http://localhost:9382/sse", headers={"api_key": "YOUR_KEY_HERE"}) as streams:
|
||||
# Rest of your code...
|
||||
```
|
||||
|
||||
Alternatively, to comply with [OAuth 2.1 Section 5](https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-1-12#section-5), you can run the following code *instead* to connect to your MCP server:
|
||||
|
||||
```python
|
||||
async with sse_client("http://localhost:9382/sse", headers={"Authorization": "YOUR_KEY_HERE"}) as streams:
|
||||
# Rest of your code...
|
||||
```
|
||||
:::
|
||||
|
||||
## Use curl to interact with the RAGFlow MCP server
|
||||
|
||||
When interacting with the MCP server via HTTP requests, follow this initialization sequence:
|
||||
|
||||
1. **The client sends an `initialize` request** with protocol version and capabilities.
|
||||
2. **The server replies with an `initialize` response**, including the supported protocol and capabilities.
|
||||
3. **The client confirms readiness with an `initialized` notification**.
|
||||
_The connection is established between the client and the server, and further operations (such as tool listing) may proceed._
|
||||
|
||||
:::tip NOTE
|
||||
For more information about this initialization process, see [here](https://modelcontextprotocol.io/docs/concepts/architecture#1-initialization).
|
||||
:::
|
||||
|
||||
In the following sections, we will walk you through a complete tool calling process.
|
||||
|
||||
### 1. Obtain a session ID
|
||||
|
||||
Each curl request with the MCP server must include a session ID:
|
||||
|
||||
```bash
|
||||
$ curl -N -H "api_key: YOUR_API_KEY" http://127.0.0.1:9382/sse
|
||||
```
|
||||
|
||||
:::tip NOTE
|
||||
See [here](../acquire_ragflow_api_key.md) for information about acquiring an API key.
|
||||
:::
|
||||
|
||||
#### Transport
|
||||
|
||||
The transport will stream messages such as tool results, server responses, and keep-alive pings.
|
||||
|
||||
_The server returns the session ID:_
|
||||
|
||||
```bash
|
||||
event: endpoint
|
||||
data: /messages/?session_id=5c6600ef61b845a788ddf30dceb25c54
|
||||
```
|
||||
|
||||
### 2. Send an `Initialize` request
|
||||
|
||||
The client sends an `initialize` request with protocol version and capabilities:
|
||||
|
||||
```bash
|
||||
session_id="5c6600ef61b845a788ddf30dceb25c54" && \
|
||||
|
||||
curl -X POST "http://127.0.0.1:9382/messages/?session_id=$session_id" \
|
||||
-H "api_key: YOUR_API_KEY" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1,
|
||||
"method": "initialize",
|
||||
"params": {
|
||||
"protocolVersion": "1.0",
|
||||
"capabilities": {},
|
||||
"clientInfo": {
|
||||
"name": "ragflow-mcp-client",
|
||||
"version": "0.1"
|
||||
}
|
||||
}
|
||||
}' && \
|
||||
```
|
||||
|
||||
#### Transport
|
||||
|
||||
_The server replies with an `initialize` response, including the supported protocol and capabilities:_
|
||||
|
||||
```bash
|
||||
event: message
|
||||
data: {"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-03-26","capabilities":{"experimental":{"headers":{"host":"127.0.0.1:9382","user-agent":"curl/8.7.1","accept":"*/*","api_key":"ragflow-xxxxxxxxxxxx","accept-encoding":"gzip"}},"tools":{"listChanged":false}},"serverInfo":{"name":"ragflow-server","version":"1.9.4"}}}
|
||||
```
|
||||
|
||||
### 3. Acknowledge readiness
|
||||
|
||||
The client confirms readiness with an `initialized` notification:
|
||||
|
||||
```bash
|
||||
curl -X POST "http://127.0.0.1:9382/messages/?session_id=$session_id" \
|
||||
-H "api_key: YOUR_API_KEY" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "notifications/initialized",
|
||||
"params": {}
|
||||
}' && \
|
||||
```
|
||||
|
||||
_The connection is established between the client and the server, and further operations (such as tool listing) may proceed._
|
||||
|
||||
### 4. Tool listing
|
||||
|
||||
```bash
|
||||
curl -X POST "http://127.0.0.1:9382/messages/?session_id=$session_id" \
|
||||
-H "api_key: YOUR_API_KEY" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 3,
|
||||
"method": "tools/list",
|
||||
"params": {}
|
||||
}' && \
|
||||
```
|
||||
|
||||
#### Transport
|
||||
|
||||
```bash
|
||||
event: message
|
||||
data: {"jsonrpc":"2.0","id":3,"result":{"tools":[{"name":"ragflow_retrieval","description":"Retrieve relevant chunks from the RAGFlow retrieve interface based on the question, using the specified dataset_ids and optionally document_ids. Below is the list of all available datasets, including their descriptions and IDs. If you're unsure which datasets are relevant to the question, simply pass all dataset IDs to the function.","inputSchema":{"type":"object","properties":{"dataset_ids":{"type":"array","items":{"type":"string"}},"document_ids":{"type":"array","items":{"type":"string"}},"question":{"type":"string"}},"required":["dataset_ids","question"]}}]}}
|
||||
|
||||
```
|
||||
|
||||
### 5. Tool calling
|
||||
|
||||
```bash
|
||||
curl -X POST "http://127.0.0.1:9382/messages/?session_id=$session_id" \
|
||||
-H "api_key: YOUR_API_KEY" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 4,
|
||||
"method": "tools/call",
|
||||
"params": {
|
||||
"name": "ragflow_retrieval",
|
||||
"arguments": {
|
||||
"question": "How to install neovim?",
|
||||
"dataset_ids": ["DATASET_ID_HERE"],
|
||||
"document_ids": []
|
||||
}
|
||||
}
|
||||
}'
|
||||
```
|
||||
|
||||
#### Transport
|
||||
|
||||
```bash
|
||||
event: message
|
||||
data: {"jsonrpc":"2.0","id":4,"result":{...}}
|
||||
|
||||
```
|
||||
|
||||
### A complete curl example
|
||||
|
||||
```bash
|
||||
session_id="YOUR_SESSION_ID" && \
|
||||
|
||||
# Step 1: Initialize request
|
||||
curl -X POST "http://127.0.0.1:9382/messages/?session_id=$session_id" \
|
||||
-H "api_key: YOUR_API_KEY" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1,
|
||||
"method": "initialize",
|
||||
"params": {
|
||||
"protocolVersion": "1.0",
|
||||
"capabilities": {},
|
||||
"clientInfo": {
|
||||
"name": "ragflow-mcp-client",
|
||||
"version": "0.1"
|
||||
}
|
||||
}
|
||||
}' && \
|
||||
|
||||
sleep 2 && \
|
||||
|
||||
# Step 2: Initialized notification
|
||||
curl -X POST "http://127.0.0.1:9382/messages/?session_id=$session_id" \
|
||||
-H "api_key: YOUR_API_KEY" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "notifications/initialized",
|
||||
"params": {}
|
||||
}' && \
|
||||
|
||||
sleep 2 && \
|
||||
|
||||
# Step 3: Tool listing
|
||||
curl -X POST "http://127.0.0.1:9382/messages/?session_id=$session_id" \
|
||||
-H "api_key: YOUR_API_KEY" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 3,
|
||||
"method": "tools/list",
|
||||
"params": {}
|
||||
}' && \
|
||||
|
||||
sleep 2 && \
|
||||
|
||||
# Step 4: Tool call
|
||||
curl -X POST "http://127.0.0.1:9382/messages/?session_id=$session_id" \
|
||||
-H "api_key: YOUR_API_KEY" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 4,
|
||||
"method": "tools/call",
|
||||
"params": {
|
||||
"name": "ragflow_retrieval",
|
||||
"arguments": {
|
||||
"question": "How to install neovim?",
|
||||
"dataset_ids": ["DATASET_ID_HERE"],
|
||||
"document_ids": []
|
||||
}
|
||||
}
|
||||
}'
|
||||
|
||||
```
|
||||
12
docs/develop/mcp/mcp_tools.md
Normal file
12
docs/develop/mcp/mcp_tools.md
Normal file
@@ -0,0 +1,12 @@
|
||||
---
|
||||
sidebar_position: 2
|
||||
slug: /mcp_tools
|
||||
---
|
||||
|
||||
# RAGFlow MCP tools
|
||||
|
||||
The MCP server currently offers a specialized tool to assist users in searching for relevant information powered by RAGFlow DeepDoc technology:
|
||||
|
||||
- **retrieve**: Fetches relevant chunks from specified `dataset_ids` and optional `document_ids` using the RAGFlow retrieve interface, based on a given question. Details of all available datasets, namely, `id` and `description`, are provided within the tool description for each individual dataset.
|
||||
|
||||
For more information, see our Python implementation of the [MCP server](https://github.com/infiniflow/ragflow/blob/main/mcp/server/server.py).
|
||||
Reference in New Issue
Block a user