MCPcopy Create free account
hub / github.com/InternScience/InternAgent / MyAgent

Class MyAgent

mcp_demo.py:94–168  ·  view source on GitHub ↗

Assistant agent with support for both function-based and MCP tools

Source from the content-addressed store, hash-verified

92
93
94class MyAgent(BaseAgent):
95 """Assistant agent with support for both function-based and MCP tools"""
96
97 def __init__(self, model: BaseModel, config: Dict[str, Any]):
98 super().__init__(model, config)
99
100 # Get tool registry
101 self.tool_registry = get_registry()
102
103 # Get allowed tools list from config (whitelist mode)
104 self.allowed_tools = config.get("allowed_tools", None)
105
106 logger.info(f"MyAgent '{self.name}' initialized")
107 if self.allowed_tools:
108 logger.info(f"Allowed tools: {self.allowed_tools}")
109 else:
110 logger.info(f"All tools available")
111
112 async def _execute_tool(self, function_name: str, function_args: Dict[str, Any]) -> Any:
113 """Execute tool function (routes to either function-based or MCP tool)"""
114 logger.info(f"Executing tool: {function_name}")
115 logger.debug(f"Arguments: {json.dumps(function_args, ensure_ascii=False)}")
116
117 try:
118 result = await self.tool_registry.execute(function_name, **function_args)
119 logger.info(f"Tool execution successful: {function_name}")
120 logger.info(f"Tool Call Result: {result}")
121 return result
122 except Exception as e:
123 logger.error(f"Tool execution failed for {function_name}: {e}")
124 raise
125
126 async def get_registered_tools(self) -> list:
127 """Get all tool definitions in OpenAI format (with permission filtering applied)"""
128 return await self.tool_registry.get_all_definitions(
129 allowed_tools=self.allowed_tools
130 )
131
132 async def execute(self, context: Dict[str, Any], params: Dict[str, Any]) -> Dict[str, Any]:
133 """Execute agent task"""
134 query = context.get("query", "")
135
136 if not query:
137 return {"status": "error", "error": "No query provided"}
138
139 logger.info(f"Processing query: {query}")
140
141 try:
142 tools = await self.get_registered_tools()
143 logger.info(f"Available tools: {len(tools)}")
144
145
146 # Retrieve related tools
147 related_tools = get_related_tools(query, tools)
148 logger.info(f"Related tools found: {len(related_tools)}")
149
150 response = await self._call_model_with_tools(
151 system_prompt="",

Callers 1

mainFunction · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected