场景

MCP的出现大大丰富了LLM的功能,对于存量系统,我们希望能让模型调用已有的接口,以最小的成本让AI能够获取系统内部数据。因此我们开发了一个名为http-api-call的MCP Server,来支持模型到内部API的调用

实现方案

使用用标准的MCP协议,重写call_toollist_tool

  • call_tool
    在这里实现调用工具的逻辑,将请求信息转发给已有系统的后端接口调用
  • list_tool
    在这里实现工具列表的查询,返回以及配置的API即可

这样我们将工具列表封装为tool_message,传递给模型,即可让模型自动选择合适的API调用。


#[derive(Debug, Clone)]
pub struct McpService;

impl McpService {
    pub fn new() -> Self {
        Self {}
    }

    /// 添加或更新API
    fn add_or_update_api(&self, req: Api) -> Res<()> {}

    /// 删除API
    fn remove_api(&self, req: RemoveApiReq) -> Res<()> {}
    
    /// 查询API列表
    fn list_api(&self, req: Option<ListApiReq>) -> Res<PageRes<Api>> {}
}

impl ServerHandler for McpService {
    async fn call_tool(
        &self,
        request: CallToolRequestParam,
        _context: RequestContext<RoleServer>,
    ) -> Result<CallToolResult, Error> {
    	// 请求转发
    }

    fn list_tools(
        &self,
        _request: PaginatedRequestParam,
        _context: RequestContext<RoleServer>,
    ) -> impl Future<Output = Result<ListToolsResult, Error>> + Send + '_ {
		//返回API列表
	}
}

配置API:
在这里插入图片描述

在模型中使用API:
在这里插入图片描述

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐