🐍 Python mcp-websocket
Full-duplex WebSocket Transport for the Model Context Protocol (MCP) in Python. Built on AnyIO and compatible with FastAPI, Starlette, and standalone websockets.
📦 Installation
# Using uv (recommended)
uv add mcp-websocket
# With pip
pip install mcp-websocket
# With all extras (FastAPI, uvicorn, websockets, mcp CLI)
pip install "mcp-websocket[all]"
🛠️ Quickstart
1. FastMCP Server with WebSocket (examples/fastmcp_server.py)
import asyncio
import websockets
from mcp.server.fastmcp import FastMCP
from mcp_websocket import serve_websocket
mcp = FastMCP("calculator-server")
@mcp.tool()
def add(a: float, b: float) -> float:
"""Adds two numbers."""
return a + b
@mcp.tool()
def get_stock(symbol: str) -> dict:
"""Fetches mock stock price."""
return {"symbol": symbol.upper(), "price": 225.50}
async def main():
async def handler(websocket):
await serve_websocket(mcp._mcp_server, websocket)
print("🚀 MCP WebSocket Server running on ws://0.0.0.0:8765")
async with websockets.serve(handler, "0.0.0.0", 8765):
await asyncio.Future()
if __name__ == "__main__":
asyncio.run(main())
2. Python Client (examples/mcp_tool_client.py)
import asyncio
from mcp.client.session import ClientSession
from mcp_websocket import WebSocketClientTransport
async def main():
async with WebSocketClientTransport("ws://localhost:8765") as (
read_stream,
write_stream,
):
async with ClientSession(read_stream, write_stream) as session:
await session.initialize()
# List available tools
tools = await session.list_tools()
print("Tools:", [t.name for t in tools.tools])
# Call tool
result = await session.call_tool("add", {"a": 15, "b": 27})
print("Result:", result.content[0].text)
if __name__ == "__main__":
asyncio.run(main())
🌉 Desktop Host Bridge (mcp-ws-bridge)
To connect Claude Desktop, LM Studio, Cursor, or Antigravity to a running WebSocket server, use the built-in CLI bridge:
{
"mcpServers": {
"my-websocket-tools": {
"command": "uv",
"args": [
"run",
"--directory",
"path/to/mcp-websocket/python",
"python",
"-m",
"mcp_websocket.bridge",
"--url",
"ws://localhost:8767"
]
}
}
}
🧪 Testing
uv run --all-extras pytest -v
📄 License
MIT License.
Release files for mcp-websocket 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mcp_websocket-0.1.0.tar.gz | 11.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mcp_websocket-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 19.5 kB
Release files / mcp_websocket-0.1.0.tar.gz
| Download URL | mcp_websocket-0.1.0.tar.gz |
|---|---|
| Size | 11.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b6ba0f9d54a21c0d599a37a14eb7dbe192f39d94313ec30f3ed874a464ba7e13
|
|
BLAKE2b-256 checksum How to use checksums |
f9bde6794ff4fdc1314ef54b7d6a115ca7e70fe93ab77eb4be356c8786c5f134
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / mcp_websocket-0.1.0-py3-none-any.whl
| Download URL | mcp_websocket-0.1.0-py3-none-any.whl |
|---|---|
| Size | 8.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
da5f6df78cc1fcbbdd258774c5fd0a9fe9025707888646f8239602c934bf3d65
|
|
BLAKE2b-256 checksum How to use checksums |
04f084236376ce25cf2705e3a4b6811ffb916cdc93a7564f533b49dfb76ccd5e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|