开发 MCP Proxy(代理)也可以用 Solon AI MCP 哟!
MCP 有三种通讯方式:
通道 | 说明 | 备注 |
---|---|---|
stdio | 本地进程内通讯 | 现有 |
sse http | 远程 http 通讯 | 现有 |
streamable http | 远程 http 通讯 | (MCP 官方刚通过决定,mcp-java-sdk 还没实现) |
也可以按两大类分:
- 本地进程间通讯
- 远程通讯(比如给前端用,或远程接口用)。
目前看,行业内已经积累了大最 stdio mcp-server。而且还有提供代理转换的开源项目,比如:mcpo,mcp-proxy 之类的。如果是 Java,则可以使用 solon-ai-mcp 开发类似的代理。
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-ai-mcp</artifactId>
<version>3.2.1-M3</version>
</dependency>
可以借用两种配置方式(也可以手动柜构建):
1、使用经典的 mcpServers 配置格式加载
这种配置格式,目前 mcp 代理很常用。stdio mcp-server 的各种项目也会提供这种配置。添加示例配置(或者找个 mcp-server 复制下),我们从 gitee 的一个项目上,复制了一份并命名为 mcp/mcpServers.case1.json
:
{
"mcpServers": {
"gitee": {
"command": "mcp-gitee-ent",
"env": {
"GITEE_ENT_API_BASE": "https://api.gitee.com/enterprises",
"GITEE_ENT_MCP_ACCESS_TOKEN": "<your mcp ent access token>",
}
}
}
}
solon-ai-mcp 直接提供了解析此配置格式的快捷方法。以下是创建代理服务端示例:
@McpServerEndpoint(sseEndpoint = "/mcp/proxy/gitee")
public class McpServerTool implements ToolProvider {
McpClientToolProvider toolProvider = McpClientToolProvider
.fromMcpServers("classpath:mcp/mcpServers.case1.json")
.get("gitee")
@Override
public Collection<FunctionTool> getTools() {
return toolProvider.getTools();
}
}
mcpServers 配置是支持多服务配置的,所以解析后会是个Map。在原理上,我们用 McpClientToolProvider 加载了 mcpServers,并作为工具提供给 McpServerEndpoint 输出,形成了代理效果。
2、使用 yaml 格式配置加载
这个规范需要参考对应 McpClientProperties 实体属性。在 app.yml 配置里添加 mcp-client 配置。
solon.ai:
mcp:
client:
gitee: # McpClientProperties 实体属性
channel: "stdio"
serverParameters:
command: "mcp-gitee-ent"
env:
GITEE_ENT_API_BASE: "https://api.gitee.com/enterprises"
GITEE_ENT_MCP_ACCESS_TOKEN: "<your mcp ent access token>"
创建代理服务端
@McpServerEndpoint(sseEndpoint = "/mcp/proxy/gitee")
public class McpServerTool implements ToolProvider {
@Inject("${solon.ai.mcp.client.gitee}") //通过配置,可直接注入
McpClientToolProvider toolProvider;
@Override
public Collection<FunctionTool> getTools() {
return toolProvider.getTools();
}
}
3、还可以反向代理
其实我们还可以把 sse mcp-server 代理成 stdio 的方式输出:
@McpServerEndpoint(channel = McpChannel.STDIO)
public class McpServerTool implements ToolProvider {
McpClientToolProvider sseToolProvider = McpClientToolProvider.builder()
.apiUrl("http://localhost:8081/mcp/sse")
.build();
@Override
public Collection<FunctionTool> getTools() {
return toolProvider.getTools();
}
}
打包后,就可以通过 mcpServers 配置,被其它工具使用了:
{
"mcpServers": {
"demo1": {
"command": "java",
"args": ["-jar", "/demo-mcp-stdio/target/demo-mcp-stdio.jar"]
}
}
}
如果是 java ,还可以使用 solon-ai-mcp 。示例:
McpClientToolProvider mcpClient = McpClientToolProvider.builder()
.channel(McpChannel.STDIO) //表示使用 stdio
.serverParameters(McpServerParameters.builder("java")
.args("-jar", "/demo-mcp-stdio/target/demo-mcp-stdio.jar")
.build())
.build();
4、总结
开发 MCP Proxy(代理)也可以用 Solon AI MCP 哟!尤其是 Java 环境,我们同时支持 java8,java11,java17,java21,java24。
开发 MCP Proxy(代理)也可以用 Solon AI MCP 哟!的更多相关文章
- VUE配置proxy代理、开发环境、测试环境、生产环境
VUE配置proxy代理.开发环境.测试环境.生产环境 前端开发过程中,我们经常会碰到跨域的问题,下面我们来配置下,不同的环境下,统一的跨域问题解决. 1.根目录下新建三个环境的配置文件,.env.d ...
- PHP开发模式之代理技术
在实际开发中,我们经常要调用第三方的类库如SOAP服务等.使用这些第三方 组件并不难,最麻烦的莫过于调用了,一般的调试手段最方便的莫过于记日志了. 示例: 假如有以下第三方类库. // filenam ...
- Proxy 代理模式
简介 代理模式是用一个简单的对象来代替一个复杂的或者创建耗时的对象. java.lang.reflect.Proxy RMI 代理模式是对象的结构模式.代理模式给某一个对象提供一个代理对象,并由代理对 ...
- 豌豆夹Redis解决方式Codis源代码剖析:Proxy代理
豌豆夹Redis解决方式Codis源代码剖析:Proxy代理 1.预备知识 1.1 Codis Codis就不详细说了,摘抄一下GitHub上的一些项目描写叙述: Codis is a proxy b ...
- 豌豆夹Redis解决方案Codis源码剖析:Proxy代理
豌豆夹Redis解决方案Codis源码剖析:Proxy代理 1.预备知识 1.1 Codis Codis就不详细说了,摘抄一下GitHub上的一些项目描述: Codis is a proxy base ...
- C# 使用 Proxy 代理请求资源
C# 使用 Proxy 请求资源,基于 HttpWebRequest 类 前言 这是上周在开发 C# 中使用 Proxy 代理时开发的一些思考和实践.主要需求是这样的,用户可以配置每次请求是否需要代理 ...
- java中Proxy(代理与动态代理)
转自: https://blog.csdn.net/pangqiandou/article/details/52964066 一.代理的概念 动态代理技术是整个java技术中最重要的一个技术,它是学习 ...
- Proxy 代理模式 动态代理 cglib MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 设计模式12: Proxy 代理模式(结构型模式)
Proxy 代理模式(结构型模式) 直接与间接 人们对于复杂的软件系统常常有一种处理手法,即增加一层间接层,从而对系统获得一种更为灵活.满足特定需求的解决方案.如下图,开始时,A需要和B进行3次通信, ...
- C++设计模式-Proxy代理模式
Proxy代理模式 作用:为其他对象提供一种代理以控制对这个对象的访问. 代理的种类: 如果按照使用目的来划分,代理有以下几种: 远程(Remote)代理:为一个位于不同的地址空间的对象提供一个局域代 ...
随机推荐
- 探索AI,拥抱未来,欢迎加入魔乐世界!
近日,2024开放原子开源生态大会在北京亦庄开幕,大会以"开源赋能产业,生态共筑未来"为主题,来自政府.企业.学术界.研究机构的专家学者汇聚一堂,共同探讨开源在人工智能领域的创新应 ...
- JMeter下载与环境配置
前置 使用JMeter前需要先配置好Java的环境变量,不会的朋友可以阅读:https://www.cnblogs.com/test-gang/p/18144441 JMeter下载 JMeter官网 ...
- DeepSeek部署本地知识库
技术背景 在前面的两篇文章中,分别介绍过Ubuntu上关于DeepSeek的部署以及Windows平台关于DeepSeek的部署.其中内容包含了Ollama的下载安装和基本使用.DeepSeek模型文 ...
- lxl 讲课的记录
D1 lxl:LCT 没有前途.所以平衡树一般只需要 fhq-treap. 线段树.平衡树简单例题 P3215 注意到抵消掉合法括号串之后一定是这样的情况:))))((((即前缀最小值 \(a\).后 ...
- [ZJOI2015] 地震后的幻想乡积分题解
题意: 给定一个无向图,边权为 \([0,1]\) 之间的随机变量.求图最小生成树最大边权的期望. \(n\le 10\). Soluion: Meatherm口诏:我都不知道这个东西怎么想出来的 针 ...
- 安川MOTOMAN机器人NX100维修的注意事项
安川MOTOMAN机器人NX100维修,操作人员安全注意事项 整个机器人的最大动作范围内均具有潜在的危险性. 为机器人工作的所有人员 (安全管理员.安装人员.操作人员和机器人维修人员) 必须时刻树 ...
- el-cascader 最后一级不显示出来
1.业务背景 业务需要做一个父级查询,父级查询的级联组件不显示最后一级,其他层级均显示 2.解决办法 1.页面设计见上文 TypeError: Cannot read properties of nu ...
- 【配置化】C# dapper是怎么实现的?精短ORM
目录 一.什么是dapper 二.实现问题与思路 & 源码参考 三.小结 一.什么是dapper dapper是个组件,一个dll文件,可以通过NuGet下载. 作用:快速访问数据库并自动完成 ...
- Socket通信-Linux系统中C语言实现TCP/UDP图片和文件传输
TCP实现 传输控制协议(TCP,Transmission Control Protocol) 是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议.TCP是因特网中的传输层协议, ...
- ISCSI数据盘的多路径配置
本文分享自天翼云开发者社区<ISCSI数据盘的多路径配置>,作者:w****n 多路径出现的背景 多路径,就是说,主机到存储可以有多条路径可以选择.主机到存储之间的IO由多条路径可以选择. ...