Spaces:
Sleeping
Sleeping
import React from 'react'; | |
const codeString = `import asyncio | |
from openai import AsyncOpenAI | |
from openai.types.chat import ChatCompletionUserMessageParam | |
from mcp import ClientSession | |
from mcp.client.sse import sse_client | |
from litellm.experimental_mcp_client.tools import ( | |
transform_mcp_tool_to_openai_tool, | |
transform_openai_tool_call_request_to_mcp_tool_call_request, | |
) | |
async def main(): | |
# Initialize clients | |
client = AsyncOpenAI( | |
api_key="sk-1234", | |
base_url="http://localhost:4000" | |
) | |
# Connect to MCP | |
async with sse_client("http://localhost:4000/mcp/") as (read, write): | |
async with ClientSession(read, write) as session: | |
await session.initialize() | |
mcp_tools = await session.list_tools() | |
print("List of MCP tools for MCP server:", mcp_tools.tools) | |
# Create message | |
messages = [ | |
ChatCompletionUserMessageParam( | |
content="Send an email about LiteLLM supporting MCP", | |
role="user" | |
) | |
] | |
# Request with tools | |
response = await client.chat.completions.create( | |
model="gpt-4o", | |
messages=messages, | |
tools=[transform_mcp_tool_to_openai_tool(tool) for tool in mcp_tools.tools], | |
tool_choice="auto" | |
) | |
# Handle tool call | |
if response.choices[0].message.tool_calls: | |
tool_call = response.choices[0].message.tool_calls[0] | |
if tool_call: | |
# Convert format | |
mcp_call = transform_openai_tool_call_request_to_mcp_tool_call_request( | |
openai_tool=tool_call.model_dump() | |
) | |
# Execute tool | |
result = await session.call_tool( | |
name=mcp_call.name, | |
arguments=mcp_call.arguments | |
) | |
print("Result:", result) | |
# Run it | |
asyncio.run(main())`; | |
export const CodeExample: React.FC = () => { | |
return ( | |
<div className="bg-white rounded-lg shadow h-full"> | |
<div className="border-b px-4 py-3"> | |
<h3 className="text-base font-medium text-gray-900">Using MCP Tools</h3> | |
</div> | |
<div className="p-4"> | |
<div className="flex items-center gap-2 mb-2"> | |
<div className="flex-1"> | |
<div className="text-sm font-medium text-gray-700">Python integration</div> | |
</div> | |
<button | |
className="text-xs bg-gray-100 hover:bg-gray-200 text-gray-600 px-2 py-1 rounded-md transition-colors" | |
onClick={() => { | |
navigator.clipboard.writeText(codeString); | |
}} | |
> | |
Copy | |
</button> | |
</div> | |
<div className="overflow-auto rounded-md bg-gray-50 border" style={{ maxHeight: "calc(100vh - 280px)" }}> | |
<pre className="p-3 text-xs font-mono text-gray-800 whitespace-pre overflow-x-auto"> | |
{codeString} | |
</pre> | |
</div> | |
</div> | |
</div> | |
); | |
}; |