|
|
@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
Both stack‑traces come from very small compatibility issues in **your local copy** of the library.
|
|
|
|
|
|
|
|
Fixing them just needs two tiny edits.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 1 `'Agent' object has no attribute 'mcp_servers'`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
`Agent.__init__()` used to take `mcp_servers`, but in your checkout that
|
|
|
|
|
|
|
|
parameter line is commented out:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
|
|
|
# mcp_servers: List[MCPServerSseParams] = [],
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Yet `handle_tool_init()` still refers to `self.mcp_servers`, so the
|
|
|
|
|
|
|
|
attribute is missing when the object is created.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Patch
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```diff
|
|
|
|
|
|
|
|
@@ class Agent:
|
|
|
|
|
|
|
|
- # mcp_servers: List[MCPServerSseParams] = [],
|
|
|
|
|
|
|
|
+ mcp_servers: Optional[list] = None, # list[MCPServerSseParams]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ def __init__(...):
|
|
|
|
|
|
|
|
- self.tools_list_dictionary = tools_list_dictionary
|
|
|
|
|
|
|
|
- # self.mcp_servers = mcp_servers
|
|
|
|
|
|
|
|
+ self.tools_list_dictionary = tools_list_dictionary
|
|
|
|
|
|
|
|
+ self.mcp_servers = mcp_servers
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> *Nothing else has to change; the `exists(self.mcp_servers)` check will now
|
|
|
|
|
|
|
|
> work, and you can pass `mcp_servers=[server_one]` from your smoke‑test.*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 2 `ImportError: cannot import name 'NotRequired' from typing`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
`typing.NotRequired` only exists in **Python ≥ 3.11**.
|
|
|
|
|
|
|
|
On 3.10 you have to import it from **`typing_extensions`**.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The top of `swarms/tools/mcp_integration.py` currently has:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
|
|
|
from typing import Any, Dict, List, Optional, TypedDict, NotRequired
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Patch
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```diff
|
|
|
|
|
|
|
|
-from typing import Any, Dict, List, Optional, TypedDict, NotRequired
|
|
|
|
|
|
|
|
+from typing import Any, Dict, List, Optional
|
|
|
|
|
|
|
|
+from typing_extensions import NotRequired, TypedDict
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(There is already a `typing_extensions` import later, so you can simply reuse
|
|
|
|
|
|
|
|
it and remove `NotRequired` from the `typing` line.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> Make sure the wheel `typing‑extensions` is installed:
|
|
|
|
|
|
|
|
> ```bash
|
|
|
|
|
|
|
|
> pip install -U typing_extensions
|
|
|
|
|
|
|
|
> ```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### After the fixes
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Your smoke‑test script should run:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
|
|
|
from swarms.tools.mcp_integration import MCPServerSseParams
|
|
|
|
|
|
|
|
from swarms.prompts.agent_prompts import MATH_AGENT_PROMPT
|
|
|
|
|
|
|
|
from swarms import Agent
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
server_one = MCPServerSseParams(
|
|
|
|
|
|
|
|
url="http://127.0.0.1:6274",
|
|
|
|
|
|
|
|
headers={"Content-Type": "application/json"},
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
agent = Agent(
|
|
|
|
|
|
|
|
agent_name="Math‑Tester",
|
|
|
|
|
|
|
|
agent_description="Does arithmetic via MCP add tool",
|
|
|
|
|
|
|
|
system_prompt=MATH_AGENT_PROMPT,
|
|
|
|
|
|
|
|
max_loops=1,
|
|
|
|
|
|
|
|
mcp_servers=[server_one],
|
|
|
|
|
|
|
|
output_type="final",
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print(agent.run("Use the add tool to add 2 and 2"))
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**Summary**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* add the `mcp_servers` parameter back into `Agent.__init__`
|
|
|
|
|
|
|
|
* import `NotRequired` from `typing_extensions`, not `typing`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
After these two edits the “attribute missing” and “ImportError” messages
|
|
|
|
|
|
|
|
disappear and the agent can reach the MCP server for your smoke‑test.
|