map-server
by gcordova17
README.md
# Example MCP Server (Streamable HTTP)
A minimal MCP server built on the official Python SDK (`mcp==2.0.0`), running
over Streamable HTTP so it can live in a container and be reached over the
network.
It ships with two demo tools (`echo`, `add`) and one resource (`time://now`)
so you have something to test against immediately — replace them with your
own.
## Run it
```bash
docker compose up -d --build
docker compose logs -f mcp-server
```
The server listens on `http://localhost:8000/mcp`.
## Test it without a client
```bash
curl -i -X POST http://localhost:8000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"test","version":"0.1"}}}'
```
The response headers include `mcp-session-id` — reuse it in an
`Mcp-Session-Id` header on subsequent calls (`tools/list`, `tools/call`,
`resources/read`, etc.) once you've sent a `notifications/initialized`
message.
## Point a client at it
Any MCP client that supports Streamable HTTP just needs the URL:
`http://localhost:8000/mcp` (or your host's address/port if not running
locally).
## Add your own tools
```python
@mcp.tool()
def my_tool(arg: str) -> str:
"""This docstring becomes the tool description the model sees."""
return do_something(arg)
```
Resources (`@mcp.resource("scheme://path")`) and prompts (`@mcp.prompt()`)
follow the same pattern. Restart the container after changes:
```bash
docker compose up -d --build
```
## Notes
- `MCP_HOST` / `MCP_PORT` env vars control what the server binds to inside
the container — leave `MCP_HOST=0.0.0.0` or it won't be reachable from
outside the container.
- This has no authentication. Fine for local/dev use behind
`localhost:8000`; if you expose it beyond your machine, put it behind a
reverse proxy or gateway that handles auth (or use the SDK's built-in
OAuth support via `token_verifier`/`auth_server_provider`).
- The old `from mcp.server.fastmcp import FastMCP` import path some
tutorials still show is gone as of `mcp==2.0.0` — it's now
`from mcp.server import MCPServer`.
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues