Final_Assignment_Template / custom_mcp.py
thewimo's picture
Create custom_mcp.py
b1d8992 verified
import os
from smolagents.mcp_client import MCPClient
from mcpadapt.smolagents_adapter import SmolAgentsAdapter
from mcpadapt.core import MCPAdapt
from mcp import StdioServerParameters
from mcp.types import Tool
from typing import Callable, Any
import smolagents
from functools import partial
# Custom adapter to fix tool names
class CustomSmolAgentsAdapter(SmolAgentsAdapter):
def adapt(
self,
func: Callable[[dict | None], Any],
mcp_tool: Tool
) -> smolagents.Tool:
# Fix the tool name before passing it to the original adapter
fixed_tool = Tool(
name=mcp_tool.name.replace('-', '_'),
description=mcp_tool.description,
inputSchema=mcp_tool.inputSchema
)
return super().adapt(func, fixed_tool)
# Custom client that uses our adapter
def create_mcp_client(server_params):
adapter = MCPAdapt(server_params, CustomSmolAgentsAdapter())
# Create a client-like object with the same interface
class CustomMCPClient:
def __init__(self):
self._tools = None
self.connect()
def connect(self):
self._tools = adapter.__enter__()
def disconnect(self, *args, **kwargs):
adapter.__exit__(None, None, None)
def get_tools(self):
return self._tools
return CustomMCPClient()