82 lines
2.1 KiB
Python
82 lines
2.1 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
import requests
|
|||
|
|
import json
|
|||
|
|
|
|||
|
|
session_id="123456789"
|
|||
|
|
|
|||
|
|
class MCPClient:
|
|||
|
|
def __init__(self, url):
|
|||
|
|
self.url = url
|
|||
|
|
self.session = requests.Session()
|
|||
|
|
self.session_id = None
|
|||
|
|
|
|||
|
|
def initialize(self):
|
|||
|
|
"""初始化 MCP 会话"""
|
|||
|
|
payload = {
|
|||
|
|
"jsonrpc": "2.0",
|
|||
|
|
"id": 1,
|
|||
|
|
"method": "initialize",
|
|||
|
|
"params": {
|
|||
|
|
"protocolVersion": "2024-11-05",
|
|||
|
|
"capabilities": {},
|
|||
|
|
"clientInfo": {
|
|||
|
|
"name": "python-client",
|
|||
|
|
"version": "1.0.0"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
response = self.session.post(
|
|||
|
|
self.url,
|
|||
|
|
json=payload,
|
|||
|
|
headers={
|
|||
|
|
"Content-Type": "application/json",
|
|||
|
|
"Accept": "application/json, text/event-stream",
|
|||
|
|
}
|
|||
|
|
)
|
|||
|
|
self.session_id = response.headers['Mcp-Session-Id']
|
|||
|
|
|
|||
|
|
|
|||
|
|
def call_method(self, method, params=None, request_id=None):
|
|||
|
|
"""调用 MCP 方法"""
|
|||
|
|
payload = {
|
|||
|
|
"jsonrpc": "2.0",
|
|||
|
|
"id": request_id or method,
|
|||
|
|
"method": method
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if params:
|
|||
|
|
payload["params"] = params
|
|||
|
|
|
|||
|
|
headers = {
|
|||
|
|
"Content-Type": "application/json",
|
|||
|
|
"Accept": "application/json, text/event-stream"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 如果有 session ID,添加到头部
|
|||
|
|
if self.session_id:
|
|||
|
|
headers["Mcp-Session-Id"] = self.session_id
|
|||
|
|
|
|||
|
|
response = self.session.post(
|
|||
|
|
self.url,
|
|||
|
|
json=payload,
|
|||
|
|
headers=headers
|
|||
|
|
)
|
|||
|
|
print(response.text)
|
|||
|
|
return response.json()
|
|||
|
|
|
|||
|
|
|
|||
|
|
# 使用示例
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
client = MCPClient("http://iot.gesukj.com:7999/mcp")
|
|||
|
|
|
|||
|
|
# 初始化
|
|||
|
|
print("Initializing...")
|
|||
|
|
init_result = client.initialize()
|
|||
|
|
# print(json.dumps(init_result, indent=2))
|
|||
|
|
|
|||
|
|
# 列出工具
|
|||
|
|
print("\nListing tools...")
|
|||
|
|
tools_result = client.call_method("tools/list", request_id=4)
|
|||
|
|
print(json.dumps(tools_result, indent=2))
|