Tablestore集成MCP协议: 标量与向量混合检索的新范式

本文涉及的产品
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: 基于表格存储(Tablestore)实现的MCP(Model Context Protocol)服务,支持文档存储与混合检索工具两大功能。通过Cherry-Studio界面和通义千问qwen-max模型进行演示,展示了文本数据上传、向量嵌入及查询过程。此外,详细说明了Python和Java版本的本地运行步骤、环境配置及二次开发方法,并提供了集成三方工具如Cherry Studio的应用示例。Tablestore凭借混合查询、Serverless低成本、弹性扩展等优势,为MCP场景提供高效解决方案。

概述


MCP(Model Context Protocol)是一个开放协议,旨在通过标准化API连接大型语言模型(LLM)与外部数据源及工具,让AI应用能够高效处理复杂任务。本项目构建了基于阿里云表格存储(Tablestore)的MCP服务实现,通过其向量、标量、全文检索的混合检索能力,为MCP工具提供高效的数据存储与检索解决方案。本文将系统讲解技术实现、部署流程及应用场景。


1. 使用示例


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


1.1 文档存储工具


功能:将文本数据连同语义向量嵌入表格存储。

  • 实现细节通过我们实现的 MCP 的 Store 接口,用户可通过可视化界面直接上传文档:

 image.png

  • 后端行为完整日志显示了数据写入过程:

image.png 

  • 存储结果:表格存储控制台展示结构化数据与向量的存储形态:



 image.png

1.2 混合检索工具

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

  • 查询实例通过 Cherry Studio 界面进行多条件搜索,底层调用 MCP 的 Search 接口:

image.png 


  • 检索逻辑:服务端日志展示了向量转换与查询过程:

image.png 

  • 系统验证:表格存储控制台执行等效查询验证结果一致性:

image.png

2. 技术流程

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

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





3. 为什么选择Tablestore?


与传统数据库和专用向量数据库相比,Tablestore(表格存储)在MCP场景中展现出显著优势:

  • 混合查询:原生支持向量检索+全文检索+标量检索的联合查询。其多元索引可以完成任意列的查询(包括主键列和非主键列)、多字段自由组合查询、地理位置查询、全文检索、模糊查询、前缀查询、嵌套查询、去重、排序、查询数据总行数和统计聚合等丰富的查询能力。
  • Serverless+低成本:Tablestore 提供 Serverless 的结构化数据存储,彻底免除硬件、软件运维与扩容压力。用户按需付费,存储计算分离,无需为闲置资源付费。让用户可以聚焦业务创新,将运维成本降至最低,适合业务快速迭代。
  • 弹性扩展:PB级数据处理能力,支持自动水平分片与弹性资源调度。
  • 快速落地与全周期支持:开发效率极高,帮助业务实现价值最大化。Tablestore(表格存储)提供标准化API接口/SQL接口,集成LangChain、LlamaIndex、PAI-RAG、LangEngine、LangChain4J、Dify、MCP等各种三方开源框架。
  • 数据集成:支持与阿里云大数据生态无缝对接,如RDS、Flink、ODPS等,避免数据孤岛。


4. 本地运行


我们支持 Java 和 Python 2种语言运行 MCP 服务。


4.1 Python 版本

4.1.1 下载源码

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

4.1.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

4.1.3 配置环境变量

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

变量名

必填

含义

默认值

SERVER_HOST

MCP server 的 host

0.0.0.0

SERVER_PORT

MCP server 的 port

8001

TABLESTORE_INSTANCE_NAME

实例名

-

TABLESTORE_ENDPOINT

实例访问地址

-

TABLESTORE_ACCESS_KEY_ID

秘钥 ID

-

TABLESTORE_ACCESS_KEY_SECRET

秘钥 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

4.1.4 Embedding


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

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


4.1.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.2 Java 版本

4.2.1 编译代码


  1. 使用 git clone 将代码 https://github.com/aliyun/alibabacloud-tablestore-mcp-server 下载到本地。
  2. 进入 java 源码的根目录:cd tablestore-mcp-server/tablestore-java-mcp-server代码需要 jdk17 版本以上进行构建,使用了 mvn 进行包和环境管理。
# 确保 jdk17 环境
./mvnw package -DskipTests -s settings.xml


4.2.2 配置环境变量

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

变量名

必填

含义

默认值

TABLESTORE_INSTANCE_NAME

实例名

-

TABLESTORE_ENDPOINT

实例访问地址

-

TABLESTORE_ACCESS_KEY_ID

秘钥 ID

-

TABLESTORE_ACCESS_KEY_SECRET

秘钥 SECRET

-

TABLESTORE_TABLE_NAME

表名

tablestore_java_mcp_server_v1

TABLESTORE_INDEX_NAME

索引名

tablestore_java_mcp_server_index_v1

TABLESTORE_VECTOR_DIMENSION

向量维度

768

TABLESTORE_TEXT_FIELD

文本字段名

_content

TABLESTORE_VECTOR_FIELD

向量字段名

_embedding

TABLESTORE_TABLE_PK_NAME

主键字段名

id

EMBEDDING_MODEL_NAME

Embedding 模型名字

ai.djl.huggingface.rust/BAAI/bge-base-en-v1.5/0.0.1/bge-base-en-v1.5(维度是768, 和 TABLESTORE_VECTOR_DIMENSION 呼应)

4.2.3  Embedding


为了方便,这里不使用云服务的Embedding能力,而使用了内置的本地Embedding模型,这些模型都是可以应用生产的模型,示例代码仅支持了 DeepJavaLibrary 上自带的Embedding模型,基本上都来自 Hugging Face,使用十分简单。


想用其它Embedding模型可以运行 com.alicloud.openservices.tablestore.sample.service.EmbeddingService.listModels() 方法查看支持的模型。


4.2.4 运行 MCP 服务

export TABLESTORE_ACCESS_KEY_ID=xx
export TABLESTORE_ACCESS_KEY_SECRET=xx
export TABLESTORE_ENDPOINT=xxx
export TABLESTORE_INSTANCE_NAME=xxx

java -jar target/tablestore-java-mcp-server-1.0-SNAPSHOT.jar


5. 集成三方工具

5.1 Cherry Studio

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


  • 安装 :

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

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

 image.png

  • 在聊天里使用MCP服务

可以把一些模版填充到 Cherry Studio 的模版里,生成一个自己的特殊助手,后续可以直接使用。

 image.png




6. 拓展应用场景

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


以Python为例,MCP Server 仅需要修改如下配置即可, 如何写可以参考源码的 settings.py。

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

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


 image.png

7. 贡献代码和二次开发

7.1 Python 版本

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

7.1.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
  1. python 3.10

7.1.2 本地调试: sse 模式

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

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

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

image.png



7.1.3 本地调试: stdio 模式

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

mcp dev src/tablestore_mcp_server/server.py

7.1.4 代码格式化和测试

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

pytest --log-cli-level=INFO

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

ruff check
ruff format


7.2 Java 版本

7.2.1 本地调试: sse 模式

首先在 IDEA 里启动 Spring 的 App.java 文件即可。然后运行可视化调试界面 MCP Inspector, 根据 Terminal的日志提示打开"http://localhost:5173"进行调试。

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

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


image.png

相关实践学习
阿里云表格存储使用教程
表格存储(Table Store)是构建在阿里云飞天分布式系统之上的分布式NoSQL数据存储服务,根据99.99%的高可用以及11个9的数据可靠性的标准设计。表格存储通过数据分片和负载均衡技术,实现数据规模与访问并发上的无缝扩展,提供海量结构化数据的存储和实时访问。 产品详情:https://www.aliyun.com/product/ots
目录
相关文章
|
1月前
|
SQL 数据可视化 关系型数据库
MCP与PolarDB集成技术分析:降低SQL门槛与简化数据可视化流程的机制解析
阿里云PolarDB与MCP协议融合,打造“自然语言即分析”的新范式。通过云原生数据库与标准化AI接口协同,实现零代码、分钟级从数据到可视化洞察,打破技术壁垒,提升分析效率99%,推动企业数据能力普惠化。
163 3
|
1月前
|
存储 人工智能 资源调度
MCP协议深度集成:生产级研究助手架构蓝图
本文详解基于LangGraph与MCP协议构建研究助手的技术方案,涵盖双服务器集成、状态化智能体设计与用户元命令控制,助你掌握生产级代理系统开发要点。
178 1
|
3月前
|
人工智能 运维 API
Dify开发者必看:如何破解MCP集成与Prompt迭代难题?
Dify 是一个面向AI时代的开源大语言模型(LLM)应用开发平台,致力于让复杂的人工智能应用构建变得简单高效,目前已在全球范围内形成显著影响力,其 GitHub 仓库 Star 数截至 2025 年 6 月已突破 100,000+,目前,Dify 已经成为 LLMOps 领域增长最快的开源项目之一。
|
1月前
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
304 12
|
1月前
|
存储 缓存 数据处理
孔夫子旧书网开放平台接口实战:古籍图书检索与商铺数据集成
本文详解孔夫子旧书网古籍数据接口的实战调用,涵盖认证签名、古籍检索、商铺集成与特色数据处理四大场景,提供可复用的Python代码及避坑指南,助力学术研究、旧书商管理与古籍数字化落地。
|
1月前
|
人工智能 安全 数据库
构建可扩展的 AI 应用:LangChain 与 MCP 服务的集成模式
本文以LangChain和文件系统服务器为例,详细介绍了MCP的配置、工具创建及调用流程,展现了其“即插即用”的模块化优势,为构建复杂AI应用提供了强大支持。
|
2月前
|
人工智能 自然语言处理 安全
Python构建MCP服务器:从工具封装到AI集成的全流程实践
MCP协议为AI提供标准化工具调用接口,助力模型高效操作现实世界。
567 1
|
3月前
|
人工智能 安全 API
MCP vs 传统集成方案:REST API、GraphQL、gRPC的终极对比
作为一名长期关注AI技术发展的博主摘星,我深刻感受到了当前AI应用集成领域正在经历的巨大变革。随着Anthropic推出的Model Context Protocol(MCP,模型上下文协议)逐渐成熟,我们不得不重新审视传统的系统集成方案。在过去的几年中,REST API凭借其简单易用的特性成为了Web服务的标准选择,GraphQL以其灵活的数据查询能力赢得了前端开发者的青睐,而gRPC则以其高性能的特点在微服务架构中占据了重要地位。然而,当我们将视角转向AI应用场景时,这些传统方案都暴露出了一些局限性:REST API的静态接口设计难以适应AI模型的动态需求,GraphQL的复杂查询机制在处
286 0
MCP vs 传统集成方案:REST API、GraphQL、gRPC的终极对比
|
人工智能 运维 API
Dify 开发者必看:如何破解 MCP 集成与 Prompt 迭代难题?
Dify 是面向 AI 时代的开源大语言模型应用开发平台,GitHub Star 数超 10 万,为 LLMOps 领域增长最快项目之一。然而其在 MCP 协议集成、Prompt 敏捷调整及运维配置管理上存在短板。Nacos 3.0 作为阿里巴巴开源的注册配置中心,升级支持 MCP 动态管理、Prompt 实时变更与 Dify 环境变量托管,显著提升 Dify 应用的灵活性与运维效率。通过 Nacos,Dify 可动态发现 MCP 服务、按需路由调用,实现 Prompt 无感更新和配置白屏化运维,大幅降低 AI 应用开发门槛与复杂度。
686 20
|
3月前
|
存储 人工智能 搜索推荐
Tablestore OpenMemory MCP : 跨会话、跨模型的智能记忆解决方案
本文介绍了Mem0的原理与应用场景,并基于Mem0构建了Tablestore OpenMemory MCP服务,实现个性化旅行规划助理。Mem0是一种为大型语言模型设计的智能记忆层,通过向量数据库持续学习用户交互信息,实现跨会话的个性化记忆管理。该服务提供多种MCP工具,便于集成到各类AI应用中。最后演示了个性化旅行规划应用,并介绍了服务的运行与配置方式。
555 0