deepseek+mcp
import asyncio
import json
from http.client import responses
from typing import Optional, List
from openai import OpenAI
from anthropic import Anthropic
from mcp import ClientSession, StdioServerParameters, stdio_client
class MCPClient:
def init(self):
self.session: Optional[ClientSession] = None
self.anthropic = Anthropic()
self.available_tools: List[dict] = []
self.client = OpenAI(
api_key="****",
base_url="https://api.deepseek.com",
)
async def connect_to_server(self):
server_params = StdioServerParameters(
command='/opt/anaconda3/envs/mcp/bin/python',
args=['server.py'],
env=None
)
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
self.session = session
await session.initialize()
response = await session.list_tools()
tools = response.tools
print("\nConnected to server with tools:", [tool.name for tool in tools])
self.available_tools = [
{
'type': 'function',
'function': {
'name': tool.name,
'description': tool.description,
"parameters": {
"type": "object",
"properties": tool.inputSchema.get('properties', {}),
},
"required": tool.inputSchema.get('required', []),
}
} for tool in tools
]
messages = [{"role": "user", "content": "我身高170cm,体重75kg,提供锻炼计划!"}]
# messages = [{"role": "user", "content": "帮我做一首诗"}]
content = self.client.chat.completions.create(
model="deepseek-chat",
messages=messages,
tools=self.available_tools
)
while True:
tool_calls = content.choices[0].message.tool_calls
if tool_calls is not None:
function = tool_calls[0].function
messages.append(content.choices[0].message)
result = await session.call_tool(function.name, arguments=json.loads(function.arguments))
messages.append({
'role': 'tool',
'tool_call_id': tool_calls[0].id,
'content': result.content[0].text
})
print(messages)
content = self.client.chat.completions.create(
model="deepseek-chat",
messages=messages,
tools=self.available_tools
)
else:
print(content.choices[0].message.content)
break
async def main():
client = MCPClient()
await client.connect_to_server()
if name == 'main':
asyncio.run(main())
浙公网安备 33010602011771号