-
Notifications
You must be signed in to change notification settings - Fork 40
Open
Description
from typing import Callable
import mcp
from llama_index.core.tools import FunctionTool, ToolMetadata
from mcpadapt.core import ToolAdapter
from mcpadapt.utils import modeling
class LlamaIndexAdapter(ToolAdapter):
def _create_tool_fn(self, func: Callable[[dict | None], mcp.types.CallToolResult]) -> Callable:
async def tool_fn(**kwargs):
return func(kwargs)
return tool_fn
def adapt(self,
func: Callable[[dict | None], mcp.types.CallToolResult],
mcp_tool: mcp.types.Tool
) -> FunctionTool:
"""
Adapt a MCP tool to a LlamaIndex MCP tool.
Args:
func: The function to adapt.
mcp_tool: The MCP tool to adapt.
Returns:
A LlamaIndex MCP tool.
"""
fn = self._create_tool_fn(func)
model_schema = modeling.create_model_from_json_schema(
mcp_tool.inputSchema, model_name=f"{mcp_tool.name}_Schema"
)
metadata = ToolMetadata(
name=mcp_tool.name,
description=mcp_tool.description,
fn_schema=model_schema,
)
return FunctionTool.from_defaults(fn=fn, tool_metadata=metadata)
def async_adapt(self,
func: Callable[[dict | None], mcp.types.CallToolResult],
mcp_tool: mcp.types.Tool
) -> FunctionTool:
fn = self._create_tool_fn(func)
model_schema = modeling.create_model_from_json_schema(
mcp_tool.inputSchema, model_name=f"{mcp_tool.name}_Schema"
)
metadata = ToolMetadata(
name=mcp_tool.name,
description=mcp_tool.description,
fn_schema=model_schema,
)
return FunctionTool.from_defaults(fn=fn, tool_metadata=metadata)
Metadata
Metadata
Assignees
Labels
No labels