Skip to main content

MCP server for retrieving context from a tablestore vector database

Project description

tablestore-mcp-server

A Tablestore Python MCP Server.

模型上下文协议(Model Context Protocol,MCP)是一个开放协议,支持大型语言模型(LLM)应用程序与外部数据源及工具之间的无缝集成。 无论是开发AI驱动的集成开发环境(IDE)、增强聊天界面功能,还是创建定制化AI工作流,MCP均提供了一种标准化方案, 可将LLMs与其所需的关键背景信息高效连接。

这篇文章介绍如何基于Tablestore(表格存储)构建一个MCP服务,使用其向量和标量的混合检索,提供检索相关的 tool 能力。

1. 效果

这里展示 2 个 tool 的能力,一个是存储工具,一个是搜索工具。 我们使用的软件是热门的开源软件 cherry-studio, 使用的大模型是通义千问的 qwen-max 模型

1.1 写入到Tablestore

cherry-studio 使用示例如下图:

store

python Server 端代码的写入日志如下图:

store_log

Tablestore(表格存储) 控制台数据存储结果如下图:

store_ots

1.2 搜索文档

Tablestore(表格存储) 的多元索引支持向量、标量、全文检索等各种类型的组合查询,该示例代码中使用了混合检索,如需更复杂的查询,可以参考文章最后的“贡献代码和二次开发”章节了解如何自定义开发。

cherry-studio 搜索查询示例如下图:

search_ui

python Server 端的查询日志如下图:

search_log

Tablestore(表格存储) 控制台数据也可以进行查询,这里以全文检索示例:

search_ots

2. 流程

search_ots

MCP server 提供的 2 个工具十分简单:

  1. 写入: 文档经过 MCP server 内置的 Embedding ( 默认为 BAAI/bge-base-zh-v1.5 ) 模型,写入到Tablestore(表格存储)即可。
  2. 查询: 用户的查询文本经过 MCP server 内置的 Embedding 模型转成向量,然后调用表格存储的 多元索引即可,其内部使用了 向量检索全文检索 进行混合查询,最终召回用户期望的结果。

3. 本地运行

3.1 下载源码

  1. 使用 git clone 将代码下载到本地。
  2. 进入 python 源码的根目录:cd tablestore-mcp-server/tablestore-python-mcp-server

3.2 准备环境

代码需要 python3.10 版本以上进行构建,使用了 uv 进行包和环境管理。

安装 uv:

  # 方式1:使用现有 python3 安装 uv
  pip3 install uv
  # 方式2:源码安装 uv:
  curl -LsSf https://astral.sh/uv/install.sh | sh

准备 Python 环境:

如果本地有 python3.10 版本以上环境,无需执行这一小步。

因为我们项目至少需要 python3.10 版本,这里使用 python3.12 进行示例。

  # 查看当前有哪些 python 环境
  uv python list
  # 如果没有python 3.12.x 相关版本,请安装 python3.12 版本. 内部会从 github 下载 uv 官方维护的 python 包。 
  uv python install 3.12

创建虚拟环境:

  # 使用 python 3.12 版本当做虚拟环境
  uv venv --python 3.12

3.3 配置环境变量

代码里所有的配置是通过环境变量来实现的,出完整的变量见下方表格。 主要依赖的数据库 Tablestore(表格存储) 支持按量付费,使用该工具,表和索引都会自动创建,仅需要在控制台上申请一个实例即可。

变量名 必填 含义 默认值
SERVER_HOST MCP server 的 host 0.0.0.0
SERVER_PORT MCP server 的 port 8001
TABLESTORE_INSTANCE_NAME 是(yes) 实例名 -
TABLESTORE_ENDPOINT 是(yes) 实例访问地址 -
TABLESTORE_ACCESS_KEY_ID 是(yes) 秘钥 ID -
TABLESTORE_ACCESS_KEY_SECRET 是(yes) 秘钥 SECRET -
TABLESTORE_TABLE_NAME 表名 ts_mcp_server_py_v1
TABLESTORE_INDEX_NAME 索引名 ts_mcp_server_py_index_v1
TABLESTORE_VECTOR_DIMENSION 向量维度 768
TABLESTORE_TEXT_FIELD 文本字段名 _content
TABLESTORE_VECTOR_FIELD 向量字段名 _embedding
EMBEDDING_PROVIDER_TYPE Embedding 模型提供者 hugging_face(当前仅支持 hugging_face)
EMBEDDING_MODEL_NAME Embedding 模型名字 BAAI/bge-base-zh-v1.5(维度是768,和 TABLESTORE_VECTOR_DIMENSION 呼应)
TOOL_STORE_DESCRIPTION 写入的 MCP tool 的描述文字 参考 settings.py
TOOL_SEARCH_DESCRIPTION 查询的 MCP tool 的描述文字 参考 settings.py

3.4 Embedding

为了方便,这里不使用云服务的Embedding能力,而使用了内置的本地Embedding模型,示例代码仅支持了 HuggingFace 的本地Embedding模型,使用十分简单,如果网络不好,可以配置 HuggingFace 的镜像。

   export HF_ENDPOINT=http://hf-mirror.com

3.5 运行 MCP 服务

   # 加速下载 Hugging 的 Embedding Model
   export HF_ENDPOINT=http://hf-mirror.com
    
   export TABLESTORE_ACCESS_KEY_ID=xx
   export TABLESTORE_ACCESS_KEY_SECRET=xx
   export TABLESTORE_ENDPOINT=xxx
   export TABLESTORE_INSTANCE_NAME=xxx
   # 默认以 sse 模式运行,如果希望以 stdio 模式运行可以添加: `--transport stdio`
   uv run tablestore-mcp-server

4. 集成三方工具

4.1 Cherry Studio

Cherry-Studio,是一个热门的开源的 AI Client 软件, 免费使用,其支持 MCP 服务。

安装 :Github链接 下载最新版本的适合自己机器运行环境的安装包. 比如我的电脑是m1芯片的mac,因此下载 Cherry-Studio-1.1.4-arm64.dmg 进行安装。安装好后,需要配置大模型的 api-key 相关信息,这里不再一一描述。

按照如下所示创建MCP服务:

search_ui

在聊天里使用MCP服务(可以把一些模版填充到 Cherry Studio 的模版里,生成一个自己的特殊助手,后续可以直接使用):

search_ui

5.1 拓展应用场景

MCP 的 Tool 的能力和场景是 Tool 的描述来提供的,因此我们可以定义一些特殊的能力,可以发挥你的想象力。另外,当前我们没有接入一些复杂的多字段自由 Filter 能力、稀疏向量(Sparse Vector)能力,后续有时间会继续进行集成。

仅需要修改如下配置即可, 如何写可以参考 settings.py

  export TOOL_STORE_DESCRIPTION="你的自定义的描述"
  export TOOL_SEARCH_DESCRIPTION="你的自定义的描述"

修改后从 MCP Client 中可以看到工具 (Tool) 的描述已经变成了自定义的描述,那么大模型(LLM)就会根据你的描述去使用工具(Tool)。

search_ui

6. 贡献代码和二次开发

如果你需要基于此代码进行二次开发,可以参考如下。

6.1 依赖

  1. uv tool
    1. Make sure you are working with PyCharm version 2024.3.2 or later.
    2. Configure a uv environment in PyCharm
  2. python 3.10

6.2 本地调试: sse 模式

首先在 PyCharm 里启动 src/tablestore_mcp_server/main.py即可,然后运行可视化调试界面 MCP Inspector, 根据 Terminal的日志提示打开"http://localhost:5173"进行调试。

  # 启动 MCP Inspector
  npx @modelcontextprotocol/inspector node build/index.js

即可连接并展示MCP的一些能力,我们这里仅仅使用了Tools,可以直接在界面上进行调试和运行。

search_ui

6.3 本地调试: stdio 模式

下面命令会自动运行 MCP Inspector,打开UI界面使用 stdio 进行链接即可,但是体验没有 sse 模式友好。因此建议 AI client 使用 sse 传输连接到 MCP 服务器,sse 模式可以轻松地与你的团队共享服务器或在云环境中使用。

  mcp dev src/tablestore_mcp_server/server.py

6.4 代码格式化和测试

运行测试前,需要配置Tablestore相关的4个环境变量。

   pytest --log-cli-level=INFO

提交代码前,自己运行代码检查和格式化。

   ruff check
   ruff format

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tablestore_mcp_server-0.1.0.tar.gz (3.4 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tablestore_mcp_server-0.1.0-py3-none-any.whl (15.3 kB view details)

Uploaded Python 3

File details

Details for the file tablestore_mcp_server-0.1.0.tar.gz.

File metadata

File hashes

Hashes for tablestore_mcp_server-0.1.0.tar.gz
Algorithm Hash digest
SHA256 3d650b04c3d19bf772311a253639d55fa2592ca75f954219ff7aaaabba7754b4
MD5 888375abb57cbfbc4afc66f22738f43e
BLAKE2b-256 fd1f9a3371d146a853a68a50c72e16b83a49a18fa05beee6aa4867f2d1d13260

See more details on using hashes here.

File details

Details for the file tablestore_mcp_server-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for tablestore_mcp_server-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 925349d2f0b4869ec14d3adb3591b2122ecf572b032dde81b3165cc94fc1cc23
MD5 3d812dc666c53638d8a91ab34f0c15d9
BLAKE2b-256 765415d408ec5265dda6af1fe2fcafa8cf5cf77f0cec8b82c97a536ad5926553

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page