找回密码
 立即注册
首页 业界区 业界 从零到一:打造高效的金仓社区 API 集成到 MCP 服务方案 ...

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

臧莞然 前天 10:13
今天在使用国产数据库金仓时,我发现每次遇到问题都习惯性地打开金仓社区进行搜索和查看相关信息。可是每次打开浏览器的操作总让我觉得有些麻烦,于是我决定不再依赖这种繁琐的过程。索性今天我把这个接口提取出来,并将其封装成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接口供我们使用,因此我们只能通过手动抓取接口的方式来获取数据。我们在这里不进行具体的演示,最终的实现代码如下:
  1. from mcp.server.fastmcp import FastMCP
  2. import json
  3. import requests
  4. # 初始化 FastMCP 服务器
  5. mcp = FastMCP("KingBase")
  6. def get_search(query,type):
  7.     cookies = {
  8.         '_ga': 'GA1.3.1791910307.1718679034',
  9.         '__bid_n': '19029f909db92161118c02',
  10.         'Hm_lvt_3c01febe06ffa2353036661fdec1f873': '1718691104,1718792940,1718846376',
  11.         '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',
  12.     }
  13.     headers = {
  14.         'Accept': 'application/json, text/plain, */*',
  15.         'Accept-Language': 'zh-CN',
  16.         'Connection': 'keep-alive',
  17.         'Content-Type': 'application/json;charset=UTF-8',
  18.         # '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',
  19.         'Origin': 'https://bbs.kingbase.com.cn',
  20.         'Referer': 'https://bbs.kingbase.com.cn/',
  21.         'Sec-Fetch-Dest': 'empty',
  22.         'Sec-Fetch-Mode': 'cors',
  23.         'Sec-Fetch-Site': 'same-origin',
  24.         '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',
  25.         'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Microsoft Edge";v="126"',
  26.         'sec-ch-ua-mobile': '?0',
  27.         'sec-ch-ua-platform': '"Windows"',
  28.     }
  29.     tpe = f'kingbase_blog_{type}'
  30.     json_data = {
  31.         'keyWord': query,
  32.         'type': tpe,
  33.         'pageNum': 1,
  34.         'pageSize': 5,
  35.         'fullSearch': True,
  36.     }
  37.     response = requests.post(
  38.         'https://bbs.kingbase.com.cn/web-api/web/search/queryByKeyWord',
  39.         cookies=cookies,
  40.         headers=headers,
  41.         json=json_data,
  42.     )
  43.     return response.text
  44. @mcp.tool()
  45. def kingbase_serach(query: str, type: str) -> int:
  46.     """
  47.     查询kingbase论坛和博客
  48.     query:查询内容
  49.     type:查询范围固定值:论坛:forum,博客:posts
  50.     """
  51.     return get_search(query,type)
  52. if __name__ == "__main__":
  53.     print("Starting MCP server...")
  54.     mcp.run(transport='stdio')
复制代码
可视化测试

MCP依赖默认提供了一个可视化界面,方便用户进行简单的测试操作。通过该界面,用户可以快速验证本地环境是否能够正常运行,确保系统配置正确无误。测试命令如下:
mcp dev main.py
执行完相关命令后,控制台会输出本地服务的IP地址和端口号。点击该链接,将能够在浏览器中查看到相应的效果,如下图所示:
1.png

看起来都是正常的。
插件配置

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

并在里面添加如下配置信息:
  1. "mcp-kingbase-server": {
  2.   "command": "uv",
  3.   "args": [
  4.     "--directory",
  5.     "D:/project/python/mcp-server/kingbase_service",
  6.     "run",
  7.     "main.py"
  8.   ]
  9. }
复制代码
配置成功后,就会成功解析我们写的工具,效果如图:
3.png

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

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

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

将金仓社区搜索接口封装成MCP服务端并集成到 CodeBuddy 中,带来了显著的效率提升。通过这种方式,不再需要繁琐地打开浏览器进行搜索,直接在开发环境中就能快速查询问题,节省了大量时间。随时随地的查询功能大大简化了工作流程,让问题解决变得更加便捷。
我是努力的小雨,一个正经的 Java 东北服务端开发,整天琢磨着 AI 技术这块儿的奥秘。特爱跟人交流技术,喜欢把自己的心得和大家分享。还当上了腾讯云创作之星,阿里云专家博主,华为云云享专家,掘金优秀作者。各种征文、开源比赛的牌子也拿了。


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册