实战Solon开发MCP Server集成在LLM

387 阅读2分钟

参考

mcp官网:modelcontextprotocol.io/introductio…

mcp官方资源:github.com/modelcontex…

mcp热门资源:github.com/punkpeye/aw…

cherry:www.cherry-ai.com/

Glama:glama.ai/mcp/servers

Smithery:smithery.ai

cursor:cursor.directory

MCP.so:mcp.so/zh

Solon-AI文档:solon.noear.org/article/994

阿里百炼:bailian.console.aliyun.com

dify:cloud.dify.ai

关于MCP资料太多了

直接实战

关于MCP的概念,就不多啰嗦了,一句话总结:MCP 是一种让大语言模型“能调用工具、能理解反馈”的控制中枢系统,是 LLM 落地应用的桥梁。

对于solon-web项目开发mcp相当简单,先讲复杂的方法,注意是复杂的方法。

1、依赖

最新版本就好

<dependency>
  <groupId>org.noear</groupId>
  <artifactId>solon-ai-mcp</artifactId>
</dependency>

2、mcp server

代码中详细注释了

/**
 * @author wnhyang
 * @date 2024/4/25
 **/
@Slf4j	// lombok日志
@SaIgnore  // 开发中忽略权限
@Controller  // 对应Spring中的@RestController
@Mapping("/adoc") // 对应Spring中的@RequestMapping
@McpServerEndpoint(sseEndpoint = "/mcp/sse/adoc") // solon-ai,mcp-server注解,标识mcp-server
public class AdocController {

    @Inject //对应Spring @Bean
    private PhoneNoAnalysis phoneNoAnalysis;

    @Inject //对应Spring @Bean
    private IpAnalysis ipAnalysis;

    @Inject //对应Spring @Bean
    private GeoAnalysis geoAnalysis;

    @ToolMapping(description = "查询手机号归属地") //solon-ai,mcp-server具体工具,下面的@ToolParam标注工具参数,相当于大模型提示词,很重要
    public String getPhone(@ToolParam(name = "phone", description = "手机号") String phone) {
        log.info("查询手机号归属地:{}", phone);
        return JsonUtil.toJsonString(phoneNoAnalysis.analysis(phone));
    }

    @ToolMapping(description = "查询IP归属地")
    public String getIp(@ToolParam(name = "ip", description = "IP") String ip) {
        log.info("查询IP归属地:{}", ip);
        return JsonUtil.toJsonString(ipAnalysis.analysis(ip));
    }

    @ToolMapping(description = "查询经纬度归属地")
    public String getGeo(@ToolParam(name = "lonAndLat", description = "经纬度,格式:纬度,经度") String lonAndLat) {
        log.info("查询经纬度归属地:{}", lonAndLat);
        return JsonUtil.toJsonString(geoAnalysis.analysis(lonAndLat));
    }
}

3、正常启动solon就行了

4、测试

cherry studio

先用cherry studio,关于其其他配置自己找资料吧,甚至摸索一下就好了,直接配置mcp-server

对话中选中配置的mcp-server

测试

对比高德

同时看服务端

dify

前面是本地的测试,接着我们把服务部署到远程,这里注意,如果是有使用nginx类似的反向代理工具,注意配置支持sse协议的相关配置。

仅供参考

# sse
location /mcp/sse {
  proxy_pass http://coolguard:8081/mcp/sse;
  
  proxy_buffering off;
  proxy_cache off;
  proxy_read_timeout 86400s;
  proxy_http_version 1.1;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

安装mcp插件,选择第一个

任意智能体或chatflow,这里展示的是chatflow

运行,从工作流中可以看到具体的执行步骤和信息,发现已经调用了远程服务

远程服务器也有记录

回到上面讲的“先讲复杂的方法,注意是复杂的方法。”可能你也没意识到这是复杂的方法,更简单的方法有多可怕,引用自solon.noear.org/article/101…

小结

是否体会到了MCP的强大之处?还是有很多很多可能性,另外A2A听过没?Agent to Agnet