You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
swarms/attached_assets/Pasted--What-happened-The-R...

116 lines
3.0 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

### What happened?
The Replit automerge put **two very different things in one file**:
1. **FastMCP server code** (`add / multiply / divide` tools)
2. **Client/Agent code** that is supposed to *call* those tools
That hybrid script cant work correctly:
* The moment `mcp.run()` starts the SSE server loop, the code **after it never executes**, so the `Agent` you created would never run.
* Even if it did, youd be pointing the client back to *itself* on the same port—nothing useful.
---
### Correct separation
| File | Role | Runs in its own process |
|------|------|-------------------------|
| **`math_server.py`** | Hosts the tools (`@mcp.tool()`), listens on :8000 | ✅ |
| **`math_agent.py`** | Swarms `Agent` that talks to that server | ✅ |
---
#### 1 . `math_server.py`  *serveronly*
```python
# math_server.py
from fastmcp import FastMCP
import time
mcp = FastMCP("MathMockServer")
@mcp.tool()
def add(a: int, b: int) -> int:
time.sleep(0.1)
return a + b
@mcp.tool()
def multiply(a: int, b: int) -> int:
time.sleep(0.1)
return a * b
@mcp.tool()
def divide(a: int, b: int) -> float:
if b == 0:
raise ValueError("Cannot divide by zero")
time.sleep(0.1)
return a / b
if __name__ == "__main__":
print("🚀 Math MCP server on :8000")
mcp.run(transport="sse", host="0.0.0.0", port=8000)
```
(`server.py` never imports `Agent` or `MCPServerSseParams`.)
---
#### 2 . `math_agent.py`  *client/agentonly*
```python
# math_agent.py
from swarms import Agent
from swarms.tools.mcp_integration import MCPServerSseParams
MATH_SERVER = MCPServerSseParams(
url="http://127.0.0.1:8000", # no “/mcp” path required
headers={"Content-Type": "application/json"},
)
agent = Agent(
agent_name="Math-Processing-Agent",
agent_description="Specialised agent for basic math ops",
system_prompt=(
"You can use the add, multiply and divide MCP tools "
"to answer any arithmetic question."
),
max_loops=1,
mcp_servers=[MATH_SERVER],
model_name="gpt-4o-mini",
output_type="final",
)
if __name__ == "__main__":
answer = agent.run("Use the add tool to add 2 and 2")
print("Agent replied ➜", answer)
```
---
### How to run (locally or on Replit)
```bash
# Terminal 1 (or first Replit tab)
python math_server.py
# Terminal 2 (second tab)
python math_agent.py
```
Expected console:
```
🚀 Math MCP server on :8000
Agent replied ➜ 4
```
---
### Key points to remember
1. **Never start an Agent in the same process that is serving MCP**—keep client and server separate.
2. `MCPServerSseParams.url` points to the **root** of the FastMCP server, not `/mcp`.
3. The Swarms base `Agent` already knows how to wrap the JSONRPC call; you only supply `mcp_servers=[…]`.
Follow that structure, and your managers “initialize the agent like this” requirement is fully satisfied.