advanced-calculator-mcp
by EESHAN-ANAND
README.md
# Advanced Calculator — HTTP (remote-style) MCP server
Unlike the basic `calculator` (stdio, launched by the host), this server runs
over **streamable HTTP** as a standalone service. You start it yourself; clients
connect to its URL: `http://127.0.0.1:8000/mcp`.
## Tools
add, subtract, multiply, divide, power, sqrt, nth_root, absolute, logarithm,
log10, exp, factorial, modulo, gcd, lcm, sin, cos, tan.
## Setup
```bash
cd ~/Documents/Claude/advanced-calculator
uv add "mcp[cli]"
```
## Run the server (must stay running)
```bash
uv run main.py
```
This time it is NOT supposed to exit or "hang silently" — it prints Uvicorn
startup and keeps listening on http://127.0.0.1:8000/mcp. Leave this terminal
open. (Ctrl+C to stop.)
## Test it in the Inspector
In a second terminal:
```bash
cd ~/Documents/Claude/advanced-calculator
uv run mcp dev main.py
```
…or point the Inspector at the running HTTP URL `http://127.0.0.1:8000/mcp`.
## Connect to Claude Desktop (via mcp-remote bridge)
Claude Desktop cannot talk to an HTTP MCP server directly, so we bridge it with
`mcp-remote` (needs Node/npx installed). Add this to claude_desktop_config.json:
```json
"advanced-calculator": {
"command": "npx",
"args": ["-y", "mcp-remote", "http://127.0.0.1:8000/mcp"]
}
```
Keep `uv run main.py` running, then fully restart Claude Desktop.
## Connect from the LangChain client (transport: http)
In a MultiServerMCPClient config, this is where `transport: "http"` lives:
```python
"advanced-calculator": {
"transport": "http",
"url": "http://127.0.0.1:8000/mcp",
}
```
## stdio vs http — the key difference
- stdio servers (calculator, expense-tracker): the host launches them with
`uv --directory ... run main.py`; they exit when the host disconnects.
- http server (this one): YOU run it; it stays up listening on a port, and any
client connects to its URL. `transport="http"` is a client/bridge concept;
on the server side the run transport is `"streamable-http"`.