The Demo HTTP MCP Server provides tools for data fetching, request handling, and session tracking, plus advice generation capabilities.
• Get Weather: Retrieve current weather for any location with customizable temperature units (celsius default)
• Get Current Time: Obtain the current time in standardized format
• Access Request Context: Interact with request headers (e.g., Authorization) using a username parameter
• Track Tool Usage: View a list of all tools called during the current session
• Generate Advice: Get structured advice on topics with optional actionable steps
• Multiple Connectivity: Operates over HTTP (Starlette/Uvicorn) or stdio for broad MCP client compatibility
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Demo HTTP MCP Serverwhat's the weather in London right now?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
test-http-mcp
Demo Model Context Protocol (MCP) server implemented in Python using the
http-mcp package. It can run over HTTP (Starlette/Uvicorn) or over stdio,
exposing example Tools and Prompts to any MCP-capable client.
Requirements
Python 3.13
uv(recommended) orpip
Install
Using uv (recommended):
uv run python -V # will create a venv and sync deps from pyprojectUsing pip (alternative):
python3.13 -m venv .venv
source .venv/bin/activate
pip install .Run (HTTP mode)
Starts a Starlette app and mounts the MCP server under /mcp on port 8000.
uv run run-app
# → http://localhost:8000/mcpExample .cursor/mcp.json:
{
"mcpServers": {
"test-http-mcp": {
"type": "http",
"url": "http://localhost:8000/mcp/",
"headers": {
"Authorization": "Bearer $TEST_TOKEN"
}
}
}
}Usage with Gemini:
{
"mcpServers": {
"test": {
"httpUrl": "http://localhost:8000/mcp/",
"timeout": 5000,
"headers": {
"Authorization": "Bearer TEST_TOKEN"
}
}
}
}Run (stdio mode)
Use with Cursor or other MCP clients
Example .cursor/mcp.json entry to connect via stdio:
{
"mcpServers": {
"test_studio": {
"command": "uv",
"args": ["run", "run-stdio"],
"env": { "AUTHORIZATION_TOKEN": "Bearer TEST_TOKEN" }
}
}
}What this server exposes
Tools (see
app/tools.py):get_weather(location: str, unit: str = "celsius") -> { weather: str }get_time() -> { time: str }tool_that_access_request(username: str) -> { message: str }(readsAuthorizationfrom the incoming request headers)get_called_tools() -> { called_tools: string[] }
Prompts (see
app/prompts.py):get_advice(topic: str, include_actionable_steps: bool = false)→ returns a single user message template
Project scripts
Two console entry points are defined in pyproject.toml:
run-app→app.main:run_httprun-stdio→app.main:run_stdio
Development
Common tasks (using uv):
uv run ruff check . # lint
uv run mypy . # type check
uv run pytest # tests
uv run mdformat . # format markdownImplementation notes
The Starlette app is defined in
app/main.pyand mountshttp_mcp.server.MCPServerat/mcp.Tool inputs/outputs are validated with Pydantic v2 models; async tool functions receive a typed
ToolArgumentswithinputs,context, and (in HTTP mode)request.A simple
Contextkeeps track of called tool names during a session.
License
MIT — see LICENSE.