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())

posted on 2025-05-20 23:11  朝朝暮Mu  阅读(140)  评论(0)    收藏  举报