mbxai 0.4.0__py3-none-any.whl → 0.5.1__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.1"
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
 
@@ -17,6 +19,7 @@ class MCPTool(Tool):
17
19
  service: str = Field(description="The service that provides the tool")
18
20
  strict: bool = Field(default=True, description="Whether the tool response is strictly validated")
19
21
  input_schema: dict[str, Any] = Field(description="The input schema for the tool")
22
+ function: Callable[..., Any] | None = Field(default=None, description="The function that implements the tool")
20
23
 
21
24
  def to_openai_function(self) -> dict[str, Any]:
22
25
  """Convert the tool to an OpenAI function definition."""
@@ -101,16 +104,34 @@ class MCPClient(ToolClient):
101
104
 
102
105
  # Fetch tools from the server
103
106
  response = await self._http_client.get(f"{base_url}/tools")
104
- tools_data = response.json()
107
+ response_data = response.json()
108
+
109
+ # Extract tools array from response
110
+ tools_data = response_data.get("tools", [])
111
+ logger.info(f"Received {len(tools_data)} tools from server {name}")
105
112
 
106
113
  # 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)
114
+ for idx, tool_data in enumerate(tools_data):
115
+ logger.debug(f"Processing tool {idx}: {tool_data}")
113
116
 
114
- # Register the tool with ToolClient
115
- self._tools[tool.name] = tool
116
- tool.function = tool_function
117
+ # Ensure tool_data is a dictionary
118
+ if not isinstance(tool_data, dict):
119
+ logger.error(f"Invalid tool data type: {type(tool_data)}. Expected dict, got {tool_data}")
120
+ continue
121
+
122
+ try:
123
+ # Create MCPTool instance with proper dictionary unpacking
124
+ tool = MCPTool(**tool_data)
125
+
126
+ # Create the tool function
127
+ tool_function = self._create_tool_function(tool)
128
+
129
+ # Set the function after creation
130
+ tool.function = tool_function
131
+
132
+ # Register the tool with ToolClient
133
+ self._tools[tool.name] = tool
134
+ logger.info(f"Successfully registered tool: {tool.name}")
135
+ except Exception as e:
136
+ logger.error(f"Failed to register tool: {str(e)}")
137
+ 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.4.0",
34
+ version="0.5.1",
35
35
  )
36
36
 
37
37
  # Initialize MCP server
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mbxai
3
- Version: 0.4.0
3
+ Version: 0.5.1
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=kyNYdkqdxssgIHfUQJw8pEuP8HOGhC7hR1d9oaAcGco,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=CYm_5HiB3hZUYfahzM_senilPgH2oZwSevf2up1JTF0,5506
5
5
  mbxai/mcp/example.py,sha256=oaol7AvvZnX86JWNz64KvPjab5gg1VjVN3G8eFSzuaE,2350
6
- mbxai/mcp/server.py,sha256=d_p2oLZcj6_9MbpbV5xxVCz1IMTlXQDYF9d8Sq0M4HY,3462
6
+ mbxai/mcp/server.py,sha256=11TgdqtWs_IhaqbQtLbeRbBpYwCYVo692JvQT0kbQJo,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.4.0.dist-info/METADATA,sha256=bgDoeH6t7D0pJ30Bif6hwf9yRJ8j2mfOnmqtbgaIlVY,4107
16
- mbxai-0.4.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
17
- mbxai-0.4.0.dist-info/licenses/LICENSE,sha256=hEyhc4FxwYo3NQ40yNgZ7STqwVk-1_XcTXOnAPbGJAw,1069
18
- mbxai-0.4.0.dist-info/RECORD,,
15
+ mbxai-0.5.1.dist-info/METADATA,sha256=g61BMob_rXCUGO5GOo6yRT-0U0g0MfwRJhWst9KJ02g,4107
16
+ mbxai-0.5.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
17
+ mbxai-0.5.1.dist-info/licenses/LICENSE,sha256=hEyhc4FxwYo3NQ40yNgZ7STqwVk-1_XcTXOnAPbGJAw,1069
18
+ mbxai-0.5.1.dist-info/RECORD,,
File without changes