OpenManus-server 🤖
This project provides a server based on Model Context Protocol (MCP) that exposes OpenManus tool functionalities as standardized APIs.
✨ Features
This MCP server provides access to the following OpenManus tools:
- Browser Automation 🌐 - Navigate webpages, click elements, input text, and more
- Google Search 🔍 - Execute searches and retrieve result links
- Python Code Execution 🐍 - Run Python code in a secure environment
- File Saving 💾 - Save content to local files
- Termination Control 🛑 - Control program execution flow
🚀 Installation
Prerequisites
- Python 3.10+
- OpenManus project dependencies
Installation Steps
- First, install the OpenManus project:
git clone https://github.com/mannaandpoem/OpenManus.git
cd OpenManus
- Install dependencies:
# Using uv (recommended)
curl -LsSf https://astral.sh/uv/install.sh | sh
uv venv
source .venv/bin/activate # Unix/macOS
# or .venv\Scripts\activate # Windows
uv sync
- Install MCP dependencies:
pip install mcp-python
📖 Usage
Starting the MCP Server
The server supports two communication modes: stdio and HTTP.
stdio mode (default)
python mcp_server.py
HTTP mode
python mcp_server.py --transport http --host 127.0.0.1 --port 8000
Command Line Arguments
--transport
: Communication method, choose "stdio" or "http" (default: stdio)--host
: HTTP server host address (default: 127.0.0.1)--port
: HTTP server port (default: 8000)
💻 Client Example
Check out mcp_client_example.py
to learn how to connect to the server and call tools using the MCP client.
Running the Client Example
- First, start the server in HTTP mode:
python mcp_server.py --transport http
- In another terminal, run the client example:
python mcp_client_example.py
🤖 LLM Integration
The MCP server can be integrated with LLMs that support tool calling, such as Claude 3 Opus/Sonnet/Haiku.
Example with Claude
import anthropic
from mcp.client import MCPClient
# Initialize Claude client
client = anthropic.Anthropic(api_key="your_api_key")
# Connect to MCP server
mcp_client = await MCPClient.create_http("http://localhost:8000")
# Get tool definitions
tools = await mcp_client.list_tools()
tool_definitions = [tool.to_dict() for tool in tools]
# Create Claude message
message = client.messages.create(
model="claude-3-opus-20240229",
max_tokens=1000,
temperature=0,
system="You are a helpful assistant that can use tools to help users.",
messages=[{"role": "user", "content": "Search for Model Context Protocol and summarize the top 3 results"}],
tools=tool_definitions
)
# Handle tool calls
for tool_call in message.content:
if hasattr(tool_call, "tool_use"):
tool_name = tool_call.tool_use.name
tool_params = tool_call.tool_use.input
# Call MCP tool
result = await mcp_client.invoke_tool(tool_name, tool_params)
# Send results back to Claude
message = client.messages.create(
model="claude-3-opus-20240229",
max_tokens=1000,
temperature=0,
system="You are a helpful assistant that can use tools to help users.",
messages=[
{"role": "user", "content": "Search for Model Context Protocol and summarize the top 3 results"},
{"role": "assistant", "content": [tool_call]},
{"role": "user", "content": [{"type": "tool_result", "tool_use_id": tool_call.tool_use.id, "content": result}]}
],
tools=tool_definitions
)
🔒 Security Considerations
- By default, the HTTP server only listens on localhost (127.0.0.1) and is not exposed externally
- When using in production, ensure proper authentication and authorization mechanisms are in place
- The Python execution tool has timeout limits to prevent long-running code
📄 License
Same license as the OpenManus project