从零到一:打造高效的金仓社区 API 集成到 MCP 服务方案

今天在使用国产数据库金仓时,我发现每次遇到问题都习惯性地打开金仓社区进行搜索和查看相关信息。可是每次打开浏览器的操作总让我觉得有些麻烦,于是我决定不再依赖这种繁琐的过程。索性今天我把这个接口提取出来,并将其封装成MCP服务端,集成到了我的CodeBuddy中。这样,我无论在何时何地都能直接进行提问和查询,既方便又高效。

今天,我将详细讲解如何一步步地将一个API接口封装成MCP服务器,并在实际项目中加以使用。

MCP

初始化 MCP

要初始化 MCP 服务器,首先需要安装 uv 并设置 Python 项目和环境。命令如下:

创建新项目目录

uv init kingbase_service

cd kingbase_service

创建虚拟环境并激活

uv venv

.venv\Scripts\activate

安装依赖

uv add "mcp[cli]" httpx

在所有操作执行完成之后,我们可以进入该目录并打开 main.py 文件。文件中包含了一个简单的两个数相加的示例,我们无需关注它,直接删除该内容并重新编写即可。

社区 API

由于社区没有提供任何公开的API接口供我们使用,因此我们只能通过手动抓取接口的方式来获取数据。我们在这里不进行具体的演示,最终的实现代码如下:

python 复制代码
from mcp.server.fastmcp import FastMCP
import json
import requests

# 初始化 FastMCP 服务器
mcp = FastMCP("KingBase")

def get_search(query,type):
    cookies = {
        '_ga': 'GA1.3.1791910307.1718679034',
        '__bid_n': '19029f909db92161118c02',
        'Hm_lvt_3c01febe06ffa2353036661fdec1f873': '1718691104,1718792940,1718846376',
        'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%2219029f90aad523-090ebfbc937d5e-4c657b58-2073600-19029f90aae77%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E5%BC%95%E8%8D%90%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fcloud.tencent.com%2F%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTkwMjlmOTBhYWQ1MjMtMDkwZWJmYmM5MzdkNWUtNGM2NTdiNTgtMjA3MzYwMC0xOTAyOWY5MGFhZTc3In0%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%22%2C%22value%22%3A%22%22%7D%2C%22%24device_id%22%3A%2219029f90aad523-090ebfbc937d5e-4c657b58-2073600-19029f90aae77%22%7D',
    }

    headers = {
        'Accept': 'application/json, text/plain, */*',
        'Accept-Language': 'zh-CN',
        'Connection': 'keep-alive',
        'Content-Type': 'application/json;charset=UTF-8',
        # 'Cookie': '_ga=GA1.3.1791910307.1718679034; __bid_n=19029f909db92161118c02; Hm_lvt_3c01febe06ffa2353036661fdec1f873=1718691104,1718792940,1718846376; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2219029f90aad523-090ebfbc937d5e-4c657b58-2073600-19029f90aae77%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E5%BC%95%E8%8D%90%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fcloud.tencent.com%2F%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTkwMjlmOTBhYWQ1MjMtMDkwZWJmYmM5MzdkNWUtNGM2NTdiNTgtMjA3MzYwMC0xOTAyOWY5MGFhZTc3In0%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%22%2C%22value%22%3A%22%22%7D%2C%22%24device_id%22%3A%2219029f90aad523-090ebfbc937d5e-4c657b58-2073600-19029f90aae77%22%7D',
        'Origin': 'https://bbs.kingbase.com.cn',
        'Referer': 'https://bbs.kingbase.com.cn/',
        'Sec-Fetch-Dest': 'empty',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Site': 'same-origin',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0',
        'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Microsoft Edge";v="126"',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': '"Windows"',
    }
    tpe = f'kingbase_blog_{type}'
    json_data = {
        'keyWord': query,
        'type': tpe,
        'pageNum': 1,
        'pageSize': 5,
        'fullSearch': True,
    }

    response = requests.post(
        'https://bbs.kingbase.com.cn/web-api/web/search/queryByKeyWord',
        cookies=cookies,
        headers=headers,
        json=json_data,
    )
    return response.text

@mcp.tool()
def kingbase_serach(query: str, type: str) -> int:
    """
    查询kingbase论坛和博客
    query:查询内容
    type:查询范围固定值:论坛:forum,博客:posts
    """
    return get_search(query,type) 

if __name__ == "__main__":
    print("Starting MCP server...")
    mcp.run(transport='stdio')

可视化测试

MCP依赖默认提供了一个可视化界面,方便用户进行简单的测试操作。通过该界面,用户可以快速验证本地环境是否能够正常运行,确保系统配置正确无误。测试命令如下:

mcp dev main.py

执行完相关命令后,控制台会输出本地服务的IP地址和端口号。点击该链接,将能够在浏览器中查看到相应的效果,如下图所示:

看起来都是正常的。

插件配置

我们现在配置一下腾讯云的 CodeBuddy 编程助手插件,

并在里面添加如下配置信息:

json 复制代码
"mcp-kingbase-server": {
  "command": "uv",
  "args": [
    "--directory",
    "D:/project/python/mcp-server/kingbase_service",
    "run",
    "main.py"
  ]
}

配置成功后,就会成功解析我们写的工具,效果如图:

接着,我们就可以开始使用配置进行随时随地的查询了。

效果演示

我们直接在左侧的Craft标签中开始使用一下,这里简单问一下Kingbase 数据库如何通过参数配置实现透明数据加密(TDE)问题,看看能不能回答我,效果如下:

效果确实非常不错,这样一来,工作中遇到问题时,只需轻松查询,随时就能找到解决方案,极大提高了效率。

小结

将金仓社区搜索接口封装成MCP服务端并集成到 CodeBuddy 中,带来了显著的效率提升。通过这种方式,不再需要繁琐地打开浏览器进行搜索,直接在开发环境中就能快速查询问题,节省了大量时间。随时随地的查询功能大大简化了工作流程,让问题解决变得更加便捷。


我是努力的小雨,一个正经的 Java 东北服务端开发,整天琢磨着 AI 技术这块儿的奥秘。特爱跟人交流技术,喜欢把自己的心得和大家分享。还当上了腾讯云创作之星,阿里云专家博主,华为云云享专家,掘金优秀作者。各种征文、开源比赛的牌子也拿了。

💡 想把我在技术路上走过的弯路和经验全都分享出来,给你们的学习和成长带来点启发,帮一把。

🌟 欢迎关注努力的小雨,咱一块儿进步!🌟

相关推荐
wangbaowo3 小时前
MySQL数据库下篇
数据库·经验分享·笔记·学习·mysql·安全
chennalC#c.h.JA Ptho3 小时前
生成了一个AI算法
经验分享·笔记·aigc
大刘讲IT6 小时前
IT/OT 融合架构下的工业控制系统安全攻防实战研究
经验分享·安全·web安全·架构·制造
Go高并发架构_王工7 小时前
从零到精通:GoFrame ORM 使用指南 - 特性、实践与经验分享
数据结构·经验分享·golang
笨笨5618 小时前
SEMI E40-0200 STANDARD FOR PROCESSING MANAGEMENT(加工管理标准)-(三)完结
经验分享
亦世凡华、13 小时前
前端npm包发布流程:从准备到上线的完整指南
前端·经验分享·npm·node.js·npm发包
航Hang*13 小时前
C PRIMER PLUS——第6-2节:二维数组与多维数组
c语言·开发语言·经验分享·程序人生·算法·学习方法·visual studio
孞㐑¥14 小时前
Linux之进程概念
linux·c++·经验分享·笔记
努力的小雨14 小时前
MCP 实践系列:看热点、蹭热点,创作与摸鱼两手抓!
经验分享·ai智能