場景
MCP的出現大大豐富了LLM的功能,對于存量系統,我們希望能讓模型調用已有的接口,以最小的成本讓AI能夠獲取系統內部數據。因此我們開發了一個名為http-api-call
的MCP Server,來支持模型到內部API的調用
實現方案
使用用標準的MCP協議,重寫call_tool
和list_tool
。
- call_tool
在這里實現調用工具的邏輯,將請求信息轉發給已有系統的后端接口調用 - list_tool
在這里實現工具列表的查詢,返回以及配置的API即可
這樣我們將工具列表封裝為tool_message,傳遞給模型,即可讓模型自動選擇合適的API調用。
#[derive(Debug, Clone)]
pub struct McpService;impl McpService {pub fn new() -> Self {Self {}}/// 添加或更新APIfn add_or_update_api(&self, req: Api) -> Res<()> {}/// 刪除APIfn 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: