写这个的目的,主要是好奇,想了解MCP服务 底层的原理。
拿 高德 mcp 服务 举例
1 查询 高德 mcp 服务 , 提供了哪些工具可以调用
这4个参数是 JSON-RPC 2.0 协议的标准字段,作用如下:
-
jsonrpc: "2.0":声明使用的协议版本。 -
id: 1:请求的唯一编号,用于将响应与当前请求配对。 -
method: "tools/list":要执行的方法名,即"获取工具列表"。 -
params: {}:方法所需的参数,此处为空表示不需要额外传参。curl --location --request POST 'https://mcp.amap.com/mcp?key=xxxxxxxx'
--header 'Accept: application/json, text/event-stream'
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)'
--header 'Content-Type: application/json'
--header 'Host: mcp.amap.com'
--header 'Connection: keep-alive'
--data-raw '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list",
"params": {}
}'
2 调用 某个工具,如查天气
-
jsonrpc: "2.0":声明遵循 JSON-RPC 2.0 协议版本。
-
id: 3:本次请求的唯一标识符,用于匹配服务器返回的响应结果。
-
method: "tools/call":指定要执行的方法为"调用工具"。
-
params:包含调用该工具所需的具体参数对象,内部细分为:
-
name: "maps_weather":指明要调用的具体工具名称。
-
arguments:传递给该工具的输入参数,这里传入了 {"city": "北京"}。
curl --location --request POST 'https://mcp.amap.com/mcp?key=xxxxxxxx'
--header 'Accept: application/json, text/event-stream'
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)'
--header 'Content-Type: application/json'
--header 'Host: mcp.amap.com'
--header 'Connection: keep-alive'
--data-raw '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "maps_weather",
"arguments": {
"city": "北京"
}
}
}'
3 调用 某个工具,根据 经纬度 查询地址
curl --location --request POST 'https://mcp.amap.com/mcp?key=xxxxxxxx' \
--header 'Accept: application/json, text/event-stream' \
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \
--header 'Content-Type: application/json' \
--header 'Host: mcp.amap.com' \
--header 'Connection: keep-alive' \
--data-raw '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "maps_regeocode",
"arguments": {
"location": "116.397128,39.916527"
}
}
}'