mbxai 0.3.0__py3-none-any.whl → 0.5.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
mbxai/__init__.py CHANGED
@@ -2,4 +2,4 @@
2
2
  MBX AI package.
3
3
  """
4
4
 
5
- __version__ = "0.1.0"
5
+ __version__ = "0.5.0"
mbxai/mcp/client.py CHANGED
@@ -2,11 +2,13 @@
2
2
 
3
3
  from typing import Any, TypeVar, Callable
4
4
  import httpx
5
+ import logging
5
6
  from pydantic import BaseModel, Field
6
7
 
7
8
  from ..tools import ToolClient, Tool
8
9
  from ..openrouter import OpenRouterClient
9
10
 
11
+ logger = logging.getLogger(__name__)
10
12
 
11
13
  T = TypeVar("T", bound=BaseModel)
12
14
 
@@ -101,16 +103,32 @@ class MCPClient(ToolClient):
101
103
 
102
104
  # Fetch tools from the server
103
105
  response = await self._http_client.get(f"{base_url}/tools")
104
- tools_data = response.json()
106
+ response_data = response.json()
107
+
108
+ # Extract tools array from response
109
+ tools_data = response_data.get("tools", [])
110
+ logger.info(f"Received {len(tools_data)} tools from server {name}")
105
111
 
106
112
  # Register each tool
107
- for tool_data in tools_data:
108
- # Create MCPTool instance
109
- tool = MCPTool(**tool_data)
110
-
111
- # Create the tool function
112
- tool_function = self._create_tool_function(tool)
113
+ for idx, tool_data in enumerate(tools_data):
114
+ logger.debug(f"Processing tool {idx}: {tool_data}")
113
115
 
114
- # Register the tool with ToolClient
115
- self._tools[tool.name] = tool
116
- tool.function = tool_function
116
+ # Ensure tool_data is a dictionary
117
+ if not isinstance(tool_data, dict):
118
+ logger.error(f"Invalid tool data type: {type(tool_data)}. Expected dict, got {tool_data}")
119
+ continue
120
+
121
+ try:
122
+ # Create MCPTool instance with proper dictionary unpacking
123
+ tool = MCPTool(**tool_data)
124
+
125
+ # Create the tool function
126
+ tool_function = self._create_tool_function(tool)
127
+
128
+ # Register the tool with ToolClient
129
+ self._tools[tool.name] = tool
130
+ tool.function = tool_function
131
+ logger.info(f"Successfully registered tool: {tool.name}")
132
+ except Exception as e:
133
+ logger.error(f"Failed to register tool: {str(e)}")
134
+ logger.error(f"Tool data that caused the error: {tool_data}")
mbxai/mcp/server.py CHANGED
@@ -31,7 +31,7 @@ class MCPServer:
31
31
  self.app = FastAPI(
32
32
  title=self.name,
33
33
  description=self.description,
34
- version="0.3.0",
34
+ version="0.5.0",
35
35
  )
36
36
 
37
37
  # Initialize MCP server
@@ -80,14 +80,7 @@ class MCPServer:
80
80
  if "$ref" in input_schema:
81
81
  ref = input_schema["$ref"].split("/")[-1]
82
82
  input_schema = tool_metadata.inputSchema.get("$defs", {}).get(ref, {})
83
-
84
- # Handle Pydantic model input
85
- if "properties" in input_schema and "input" in input_schema["properties"]:
86
- input_schema = input_schema["properties"]["input"]
87
- if "$ref" in input_schema:
88
- ref = input_schema["$ref"].split("/")[-1]
89
- input_schema = tool_metadata.inputSchema.get("$defs", {}).get(ref, {})
90
-
83
+
91
84
  # Create and store Tool instance
92
85
  self._tools[tool_metadata.name] = Tool(
93
86
  name=tool_metadata.name,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mbxai
3
- Version: 0.3.0
3
+ Version: 0.5.0
4
4
  Summary: MBX AI SDK
5
5
  Project-URL: Homepage, https://www.mibexx.de
6
6
  Project-URL: Documentation, https://www.mibexx.de
@@ -1,9 +1,9 @@
1
- mbxai/__init__.py,sha256=K4smKVZXrhcJYppSx5ZVow5BySoCQFVW6fgtPb9MUec,47
1
+ mbxai/__init__.py,sha256=wVJ8x7MtN4VeN_VyyppKqGepPR_Ko096DeXHM7znB7E,47
2
2
  mbxai/core.py,sha256=WMvmU9TTa7M_m-qWsUew4xH8Ul6xseCZ2iBCXJTW-Bs,196
3
3
  mbxai/mcp/__init__.py,sha256=_ek9iYdYqW5saKetj4qDci11jxesQDiHPJRpHMKkxgU,175
4
- mbxai/mcp/client.py,sha256=rVYYsWSSUWmF9lWHFeFiPOnqD5yU-N1A9ApXekfhwVg,4411
4
+ mbxai/mcp/client.py,sha256=N5w_cTEF9vMwnBoGvvenYSX8YswAogJBEd312sHyrPM,5324
5
5
  mbxai/mcp/example.py,sha256=oaol7AvvZnX86JWNz64KvPjab5gg1VjVN3G8eFSzuaE,2350
6
- mbxai/mcp/server.py,sha256=UZaZAnwLNgUWJPUfwz0o2OOZOtW8MiGjH8PSKrHimmU,3855
6
+ mbxai/mcp/server.py,sha256=QCRIoHw0eJjrYFpnD1dFngjKHcb3v6_qWAUT2sF8-dk,3462
7
7
  mbxai/openrouter/__init__.py,sha256=Ito9Qp_B6q-RLGAQcYyTJVWwR2YAZvNqE-HIYXxhtD8,298
8
8
  mbxai/openrouter/client.py,sha256=NPccB7Slou5tSc8DvXvItLdoDMgU0pcxW1lKcRKQXp0,8865
9
9
  mbxai/openrouter/config.py,sha256=MTX_YHsFrM7JYqovJSkEF6JzVyIdajeI5Dja2CALH58,2874
@@ -12,7 +12,7 @@ mbxai/tools/__init__.py,sha256=QUFaXhDm-UKcuAtT1rbKzhBkvyRBVokcQIOf9cxIuwc,160
12
12
  mbxai/tools/client.py,sha256=PDkDTvpwAs8-F8CcF6wjjq2Z-VhYpjA9RXTK64Rwa3Y,5418
13
13
  mbxai/tools/example.py,sha256=1HgKK39zzUuwFbnp3f0ThyWVfA_8P28PZcTwaUw5K78,2232
14
14
  mbxai/tools/types.py,sha256=ZHnmiDXpH6wZhiZ-Tj9PiPMJaW1aiDAq5It2gpiwNp0,831
15
- mbxai-0.3.0.dist-info/METADATA,sha256=iIE7s6BDWC1hza4F1O2LGekdpAj8c3wvHRHVlr9aP1I,4107
16
- mbxai-0.3.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
17
- mbxai-0.3.0.dist-info/licenses/LICENSE,sha256=hEyhc4FxwYo3NQ40yNgZ7STqwVk-1_XcTXOnAPbGJAw,1069
18
- mbxai-0.3.0.dist-info/RECORD,,
15
+ mbxai-0.5.0.dist-info/METADATA,sha256=TtjY0FTk9MG12PhtlNggSDNa5VIvp1nSOGa9oLf6pKc,4107
16
+ mbxai-0.5.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
17
+ mbxai-0.5.0.dist-info/licenses/LICENSE,sha256=hEyhc4FxwYo3NQ40yNgZ7STqwVk-1_XcTXOnAPbGJAw,1069
18
+ mbxai-0.5.0.dist-info/RECORD,,
File without changes