EDAS支持将部署在EDAS上的Java微服务应用,如SpringCloud、Dubbo应用,基于EDAS平台收集到的服务元数据和接口定义,快速转换生成一个基于Python3.13编写的MCP Server端代码文件。
背景信息
EDAS支持将部署在EDAS上的Java微服务应用,如SpringCloud、Dubbo应用,基于EDAS平台收集到的服务元数据和接口定义,快速转换生成一个基于Python3.13编写的MCP Server端代码文件。生成的代码文件中包含了对SpringCloud、Dubbo微服务接口的调用封装,和封装后接口的MCP 工具封装。
转换生成的代码默认以SSE协议暴露,MCP Client端可以使用转换生成的MCP Server应用暴露的端点访问部署在EDAS上的Java微服务应用。
代码生成能力由qwen3-coder-plus提供,您可以根据实际使用场景修改生成的代码。
操作步骤
在EDAS上预创建一个SpringCloud微服务应用,本示例以EDAS上支持的Demo SpringCloud服务端应用为示例。

应用部署成功后,点击应用详情页的服务列表菜单,可以看到EDAS收集的应用注册微服务信息。

点击注册的服务,进入查看微服务详情信息。

查看接口元数据信息,勾选其中需要转化为MCP 工具的接口,并点击 生成MCP工具。

等待生成进度完成,查看已生成的MCP Server的代码内容。

查看生成的代码内容,可按需修改生成的代码,如修改工具执行逻辑、修改工具描述信息、修改工具参数定义等,然后点击下一步。
点击下一步进入查看生成的测试代码内容,生成的测试代码是基于生成的MCP代码暴露的工具生成,测试代码中包含了对每个暴露的MCP工具的测试调用。

(可选)点击执行测试可基于模拟的MCP Client端代码,对生成的MCP Server端工具进行测试验证。测试执行流程可以点击下方的内容查看详细信息。

继续点击下一步,进入生成代码发布为应用界面。输入期望生成的MCP应用名称,即可快速生成MCP应用。

(可选)网络暴露设置可以将MCP 应用端点通过支持对接的入口网关进行服务暴露。目前支持对接Nginx Ingress。

点击开始部署,即可直接部署生成的MCP代码为EDAS应用。
访问生成的MCP应用
使用Nginx Ingress访问生成的MCP应用
前提条件
待部署MCP应用的K8s集群中已安装Nginx Ingress Controller组件。
Nginx Ingress Controller组件的配置ConfigMap(通常为kube-system命名空间下的nginx-configuration)开启了allow-snippet-annotations:"true"。
生成并部署MCP应用时网络配置做了Nginx Ingress路由配置。

应用部署成功后即可使用如下MCP Server的JSON配置快速接入该MCP Server:
{
"mcpServers": {
"edasService": {
"url": "http://42.xxx.xxx.xx/mcp-generated-demo/sse",
"type": "sse",
"headers": {
"edas_mcp_server": "mcp-generated-demo"
}
}
}
}上述MCP Server的JSON配置中设置的请求头是EDAS基于Nginx Ingress做的路由策略。
其中url中的42.xxx.xxx.xx/mcp-generated-demo替换为实际的Ingress入口端点及在步骤一显示的MCP转发路径。
headers中的edas_mcp_server为请求固定的Key,请不要修改。
headers中的edas_mcp_server的值“mcp-generated-demo”,请替换为生成的MCP应用名称。
示例的MCP Client端测试代码如下:
import asyncio
from mcp_use import MCPClient
async def main():
# Configuration for edas-service MCP server
config = {
"mcpServers": {
"edasService": {
"url": "http://42.xxx.xxx.xx/mcp-generated-demo/sse",
"type": "sse",
"headers": {
"edas_mcp_server": "mcp-generated-demo"
}
}
}
}
# Initialize client and create session
client = MCPClient.from_dict(config)
session = await client.create_session("edasService")
# List available tools
tools = await session.list_tools()
print("\nConnected to server with tools:", [tool.name for tool in tools])
# Dubbo tool
result = await session.call_tool('echo_tool', {'str_param': 'my test invoke'})
print("\nCall tool result:", result.content[0].text)
if __name__ == "__main__":
asyncio.run(main())
示例执行结果:
Connected to server with tools: ['echo_tool', 'ping_tool']
Call tool result:
1767678574910 Provider received.
Provider processed after sleep 1 second! Echo String: "my test invoke"
1767678575910 Provider Return使用SLB访问MCP Server应用
根据上述步骤创建了MCP应用,进入MCP应用详情页在访问方式设置菜单中选择添加公网负载均衡:

在本示例中设置一个TCP监听暴露MCP应用的8000端口(默认)。
实际的容器端口请修改为生成代码实际修改后的监听端口。
等待绑定SLB成功后客户端使用以下MCP Server JSON配置进行连接:
{
"mcpServers": {
"edasService": {
"url": "http://8.140.xxx.xx/sse",
"type": "sse"
}
}
}上述配置中的url端点8.140.xxx.xx替换为应用绑定的实际的SLB的IP地址。
使用以下MCP Client端代码进行访问验证:
import asyncio
from mcp_use import MCPClient
async def main():
# Configuration for edas-service MCP server
config = {
"mcpServers": {
"edasService": {
"url": "http://8.140.xxx.xx/sse",
"type": "sse"
}
}
}
# Initialize client and create session
client = MCPClient.from_dict(config)
session = await client.create_session("edasService")
# List available tools
tools = await session.list_tools()
print("\nConnected to server with tools:", [tool.name for tool in tools])
# Dubbo tool
result = await session.call_tool('echo', {'str_param': 'my test invoke'})
print("\nCall tool result:", result.content[0].text)
if __name__ == "__main__":
asyncio.run(main())
示例执行结果:
Connected to server with tools: ['echo', 'ping']
Call tool result:
1767682903298 Provider received.
Provider processed after sleep 1 second! Echo String: "my test invoke"
1767682904298 Provider Return
注意事项
代码生成能力由qwen3-coder-plus提供,您可以根据实际使用场景修改生成的代码。
如果生成的MCP Server应用无监控数据,请确保K8s集群中安装并升级了组件ack-onepilot的最新版本。
如果生成的MCP Server应用无监控数据,请确保应用挂载的监控及治理Python探针版本高于2.2.0。