跳到主要内容

源码与扩展

Native MCP 是一个开源项目,我们欢迎社区贡献。本篇文档将解析项目的源码结构,并指导您如何进行二次开发和功能扩展。

源码仓库

您可以通过以下地址访问我们的源码仓库:


项目结构解析

项目目录结构

项目的核心目录结构说明如下:

  • src: 项目的主源码目录。
  • src/imsdk: 对底层 Rust SDK 的封装,engine.py 是核心的引擎实现。
  • src/lib: 包含预编译的 Rust SDK 库文件、头文件以及由 CFFI 生成的 Python 接口文件 rcim_client.py
  • src/server: 业务接口实现目录,server.py 是 MCP Tool 的主要定义文件。

二次开发与扩展指南

如果您希望基于此项目扩展更多功能(例如,调用更多 Rust SDK 提供的原生 IM 能力),可以遵循以下步骤:

步骤一:在 server.py 中暴露新接口

src/server/server.py 文件中,通过 @app.tool() 装饰器定义一个新的方法。该方法将被自动注册为可供大模型调用的 MCP Tool。

在 server.py 中添加新接口

步骤二:在 engine.py 中实现底层调用

  1. 查找可用接口: 所有 Rust SDK 提供的底层接口都已通过 CFFI 转换为 Python 可调用的方法,您可以在 src/lib/rcim_client.py 文件中查找可用的接口、参数类型和返回值类型。

  2. 实现调用逻辑: 在 src/imsdk/engine.py 中,添加一个新的方法来调用您在 rcim_client.py 中找到的接口。请务必确保传入的参数类型与接口定义一致。

    send_message 为例,下方代码展示了其在 rcim_client.py 中的定义。您可以看到它需要的参数列表和类型。在 engine.py 中调用时,需要构建并传入正确的参数。

python
try:
rcim_engine_send_message = _libraries['FIXME_STUB'].rcim_engine_send_message
rcim_engine_send_message.restype = None
rcim_engine_send_message.argtypes = [ctypes.POINTER(struct_RcimEngineSync), ctypes.POINTER(struct_RcimMessageBox), ctypes.POINTER(struct_RcimSendMessageOption), ctypes.POINTER(None), RcimCodeMessageCb, RcimMessageCb]
except AttributeError:
pass