更新时间:2026-09-24 GMT+08:00
列出网关工具
在请求体中指定tools/list作为请求方法,获取网关提供的所有可用工具列表。返回结果包含工具名称、描述和参数定义等信息,可用于后续工具调用。
请求体示例:
{
"jsonrpc": "2.0",
"id": "list-tools-request",
"method": "tools/list",
"params": {
"cursor": "<CURSOR>"
}
} 其中cursor为可选参数,用于分页请求,首次请求无需携带。
响应体示例:
{
"jsonrpc": "2.0",
"id": "list-tools-request",
"result": {
"tools": [
{
"name": "tool_name",
"description": "工具描述",
"inputSchema": {}
}
],
"nextCursor": "<NEXT_CURSOR>"
}
} 网关支持分页返回工具列表。当Target响应tools/list请求返回nextCursor字段且非空时,表示该Target有更多工具未返回,需要将nextCursor的值作为下一次请求的cursor参数继续请求,重复此过程直至nextCursor为空,即可获取完整的工具列表,详情请参见MCP协议分页介绍。
网关会根据不同的Target进行分页,每个Target的工具列表独立分页返回。即每次返回的工具属于同一Target,获取下一个Target的工具需要继续分页请求。每个Target最多返回1000个工具。
- API Key认证的tools/list调用示例
import requests import json import re def list_tools(gateway_url, access_token): headers = { "Content-Type": "application/json", "Accept": "application/json, text/event-stream", "mcp-session-id": "<MCP_SESSION_ID>", # MCP会话ID,相同的sessionid会使用同一网关资源,调用时请配置此参数,例如:4ada96ff-1e16-4e5b-8fb4-b3f0f207a4f3 "Mcp-Protocol-Version": "<MCP_PROTOCOL_VERSION>", # MCP协议版本 "Authorization": f"Bearer {access_token}" } payload = {"jsonrpc": "2.0","id": "list-tools-request","method": "tools/list"} response = requests.post(gateway_url, headers=headers, json=payload) # 若需要忽略ssl校验,可补充参数verify=False raw = response.content.decode('utf-8', errors='replace') ct = response.headers.get('content-type', '') if 'text/event-stream' in ct: for line in raw.strip().split('\n'): if line.startswith('data:'): try: return json.loads(line[5:].strip()) except json.JSONDecodeError: continue m = re.search(r'\{.*\}', raw, re.DOTALL) if m: return json.loads(m.group()) try: return json.loads(raw) except json.JSONDecodeError: print(f"[Fail]: {raw[:200]}") return None gateway_url = "<GATEWAY_URL>" # 网关接口地址(业务API调用入口) access_token = "<API_KEY>" # 认证凭证:APIKey认证直接填写密钥;无认证则留空/删除 result = list_tools(gateway_url, access_token) if result: print(json.dumps(result, indent=2, ensure_ascii=False)) - IAM认证的tools/list调用示例 API签名详情请参见API签名指南:
import requests import json import re def list_tools(gateway_url, access_token): headers = { "Content-Type": "application/json", "Accept": "application/json, text/event-stream", "mcp-session-id": "<MCP_SESSION_ID>", # MCP会话ID,相同的sessionid会使用同一网关资源,调用时请配置此参数,例如:4ada96ff-1e16-4e5b-8fb4-b3f0f207a4f3 "Mcp-Protocol-Version": "<MCP_PROTOCOL_VERSION>", # MCP协议版本 "X-Sdk-Date": "<X_SDK_DATE>", # 网关鉴权时间戳 "X-Sdk-Content-Sha256": "UNSIGNED-PAYLOAD", "Authorization": access_token } payload = {"jsonrpc": "2.0", "id": "list-tools-request", "method": "tools/list"} response = requests.post(gateway_url, headers=headers, json=payload) # 若需要忽略ssl校验,可补充参数verify=False raw = response.content.decode('utf-8', errors='replace') ct = response.headers.get('content-type', '') if 'text/event-stream' in ct: for line in raw.strip().split('\n'): if line.startswith('data:'): try: return json.loads(line[5:].strip()) except json.JSONDecodeError: continue m = re.search(r'\{.*\}', raw, re.DOTALL) if m: return json.loads(m.group()) try: return json.loads(raw) except json.JSONDecodeError: print(f"[Fail]: {raw[:200]}") return None gateway_url = "<GATEWAY_URL>" # 网关接口地址(业务API调用入口) access_token = "<AUTHORIZATION>" # 鉴权Authorization result = list_tools(gateway_url, access_token) if result: print(json.dumps(result, indent=2, ensure_ascii=False))
父主题: 调测与调用MCP Target