kagent提供了RemoteMCPServer自定义资源定义(CRD)来接入远程的MCP服务器。
基于HTTP的MCP协议简介
Model Context Protocol (MCP) 是一种用于AI应用与其上下文源之间进行通信的协议。MCP支持多种传输层机制,其中基于HTTP的传输协议为远程服务器通信提供了标准化的解决方案。
MCP架构概述
MCP采用客户端-服务器架构,主要参与者包括:
MCP Host: 协调和管理一个或多个MCP客户端的AI应用(如Claude Code、Claude Desktop等)。
MCP Client: 维护与MCP服务器的连接并获取上下文的组件。
MCP Server: 向MCP客户端提供上下文的程序。
HTTP传输层
MCP支持两种传输机制:
Stdio传输: 用于本地进程间通信。
Streamable HTTP传输: 使用HTTP POST进行客户端到服务器的消息传递,支持可选的Server-Sent Events (SSE) 进行流式传输。
Streamable HTTP传输支持标准HTTP认证方法,包括Bearer令牌、API密钥和自定义头信息,并建议使用OAuth获取认证令牌。
核心功能
MCP定义了三类服务器可以暴露的核心原语:
Tools: AI应用可以调用的可执行功能(如文件操作、API调用、数据库查询)。
Resources: 提供上下文信息的数据源(如文件内容、数据库记录、API响应)。
Prompts: 用于与语言模型交互的可重用模板。
在kagent中接入HTTP协议的MCP服务
kagent提供了RemoteMCPServer自定义资源定义(CRD)来接入远程的MCP服务器。
使用示例
apiVersion: kagent.dev/v1alpha2
kind: RemoteMCPServer
metadata:
name: example-http-mcp-server
namespace: default
spec:
description: "示例HTTP协议MCP服务器"
protocol: STREAMABLE_HTTP # 使用HTTP协议
url: https://example-mcp-server.com # MCP服务器URL
headersFrom:
- name: Authorization
valueFrom:
secret:
name: mcp-server-credentials
key: token
timeout: 30s
terminateOnClose: true在Agent中使用RemoteMCPServer
定义好RemoteMCPServer后,可以在Agent中将其作为工具源使用:
apiVersion: kagent.dev/v1alpha2
kind: Agent
metadata:
name: example-agent
namespace: default
spec:
declarative:
systemMessage: "你是一个使用外部工具的AI助手"
tools:
- type: McpServer
mcpServer:
apiGroup: kagent.dev
kind: RemoteMCPServer
name: example-http-mcp-server
toolNames: ["example-tool1", "example-tool2"] # 指定要使用的工具名称认证配置
对于需要认证的MCP服务器,可以通过Secret配置认证信息:
apiVersion: v1
kind: Secret
metadata:
name: mcp-server-credentials
namespace: default
data:
token: <base64-encoded-api-key>然后在RemoteMCPServer中引用。
使用 | 使用 |
通过这种方式,可以轻松地将基于HTTP协议的MCP服务器集成到kagent中,为AI应用提供丰富的上下文和工具能力。
示例:接入百炼平台托管的MCP Server
以下步骤以使用阿里云百炼提供的高德地图MCP为例。
准备工作
在百炼平台的MCP市场开通高德地图MCP。
创建RemoteMCPServer资源
创建一个Secret,用于保存高德地图MCP的API Key。
export AMAP_API_KEY=${百炼平台提供的APIKey} kubectl create secret generic amap-apikey -n kagent --from-literal credential="Bearer $AMAP_API_KEY"创建RemoteMCPServer资源。
kubectl -n kagent apply -f - <<EOF apiVersion: kagent.dev/v1alpha2 kind: RemoteMCPServer metadata: name: amap-mcp-server spec: description: "高德地图的官方MCP Server,高德地图MCP Server现已覆盖12大核心接口,提供全场景覆盖的地理信息服务,包括地理编码、逆地理编码、IP定位、天气查询、骑行路径规划、步行路径规划、驾车路径规划、公交路径规划、距离测量、关键词搜索、周边搜索、详情搜索等。" protocol: SSE url: https://dashscope.aliyuncs.com/api/v1/mcps/amap-maps/sse headersFrom: - name: Authorization valueFrom: type: Secret name: amap-apikey key: credential timeout: 30s terminateOnClose: true EOF确认RemoteMCPServer创建状态。
kubectl get RemoteMCPServer -n kagent预期输出:
NAME PROTOCOL URL ACCEPTED amap-mcp-server SSE https://dashscope.aliyuncs.com/api/v1/mcps/amap-maps/sse True streamablehttp-fetch STREAMABLE_HTTP http://steamablehttp-fetch-service:3000/ True
创建agent
创建出行规划助手Agent。
kubectl -n kagent apply -f - <<EOF apiVersion: kagent.dev/v1alpha2 kind: Agent metadata: name: commute-navigator namespace: kagent spec: declarative: modelConfig: bailian-provider-config stream: true systemMessage: |- ## Agent: CommuteNavigator(系统提示词) 你是一个“智能通勤与出行规划助手”,用于 Web 场景。 ### 1. 角色与风格 - 角色:帮用户规划从起点到终点的出行方案。 - 场景:日常通勤、城市出行、周末出行等。 - 风格要求: - 简洁、专业、直截了当; - 优先用条目式回答,少废话; - 不暴露任何技术细节(例如“接口”“经纬度”“工具名”等),只说“我查了地图/路线/天气”。 ### 2. 基本对话策略 1) 搞清用户需求(必要时补问): - 起点:用户从哪里出发?(地址/地标/大致区域) - 终点:用户要去哪里? - 时间:现在 / 今天稍后 / 明天 / 大致时间段? - 偏好:更想省时间、省钱,还是少走路、少换乘、避免地铁?能不能骑车?有没有行李或带小孩? 2) 规划思路: - 基于起终点信息获取具体位置; - 视情况规划: - 步行路线; - 骑行路线; - 驾车路线; - 公共交通路线(公交/地铁/火车); - 涉及骑行或长时间步行时,尽量考虑天气是否合适; - 对比不同方式的大致: - 时间; - 复杂度(换乘次数、是否绕远); - 费用趋势(公共交通通常更省钱,驾车/打车通常更贵但更省事)。 3) 决策偏好参考(可灵活调整): - 距离 < 2–3km:优先考虑步行或短距离骑行; - 距离约 3–15km:对比骑行 vs 公共交通; - 距离 > 15km:优先考虑公共交通或驾车/打车; - 遇到暴雨、雷暴、极端高温/严寒: - 不要推荐长时间骑行或长距离步行; - 提醒存在风险,建议更稳妥的方式(公共交通或驾车/打车)。 4) 多点和附近搜索场景(简化): - 用户说“顺路去××”或“找我附近的咖啡馆/地铁站/加油站”时: - 帮他找出 1–3 个合适地点(尽量考虑距离与是否顺路); - 让用户选择或直接挑一个最合适的; - 再为该地点规划出行路线。 ### 3. 安全与合理性 - 不要鼓励明显危险或不合理的出行方式: - 极端天气下的长距离骑行或长时间步行; - 超长距离步行作为默认建议。 - 当用户请求不现实或风险较高时: - 温和说明问题(如天气、距离、时间限制等); - 提供 1–2 个更安全、可行的替代方案。 ### 4. 回答格式(Web 文本输出) - 使用简体中文。 - 结构清晰,推荐以下格式: 1) 概览: - 用 1–2 句话给出首选推荐方式和预估时间。 - 示例: - “我建议你优先选择地铁出行,全程大约 45 分钟左右。” 2) 方案详情(1–3 个方案,按需要给出): - 方案一:公共交通 / 驾车 / 骑行 / 步行 - 预计时间:约 XX 分钟; - 大致路线:用自然语言描述主要步骤(如“先步行到 X 站,再乘坐 Y 号线到 Z 站……”); - 优缺点:例如是否受堵车影响、费用大致高低、需要换乘几次、步行距离大致多少。 - 如有第二、第三方案,结构类似,但描述尽量简短。 3) 建议总结: - 明确指出你最推荐哪一个方案,并给出 1–2 个主要理由: - 如:时间更稳定、换乘更少、费用更低、在当前天气下更安全等。 - 不要在回答中出现“接口、API、工具名、经纬度解析”等技术表述,只用“我查了地图/路线/天气/距离”等自然语言表达。 tools: - mcpServer: apiGroup: kagent.dev kind: RemoteMCPServer name: amap-mcp-server toolNames: - maps_direction_bicycling - maps_direction_driving - maps_direction_transit_integrated - maps_direction_walking - maps_distance - maps_geo - maps_regeocode - maps_ip_location - maps_schema_personal_map - maps_around_search - maps_search_detail - maps_text_search - maps_schema_navi - maps_schema_take_taxi - maps_weather type: McpServer description: CommuteNavigator 是一个面向 Web 场景的智能通勤与出行规划助手,它可以根据你的起点、终点、出行时间以及对省时、省钱或少走路等偏好,综合比较步行、骑行、驾车和公共交通等多种方式,为你规划合理、不绕路的出行方案,并在天气不佳或路线不合理时主动给出更安全、更稳妥的建议,帮助你在日常通勤、城市出行或周末出游时快速找到当下最合适的路线选择。 type: Declarative EOF确认agent创建状态。
kubectl get pod -n kagent预期输出:
NAME READY STATUS RESTARTS AGE commute-navigator-6d49fb5db5-gl5vk 1/1 Running 0 69s ...
访问agent
kagent默认提供了Web UI可以直接与agent进行交互。
将kagent-ui服务通过端口转发至本地。
kubectl port-forward -n kagent service/kagent-ui 8082:8080在浏览器中通过
localhost:8082访问agent。问答示例:今天适合骑自行车从望京到香山吗?
