Skip to main content
Glama

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) or pip

Install

Using uv (recommended):

uv run python -V # will create a venv and sync deps from pyproject

Using 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/mcp

Example .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 } (reads Authorization from 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-appapp.main:run_http

  • run-stdioapp.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 markdown

Implementation notes

  • The Starlette app is defined in app/main.py and mounts http_mcp.server.MCPServer at /mcp.

  • Tool inputs/outputs are validated with Pydantic v2 models; async tool functions receive a typed ToolArguments with inputs, context, and (in HTTP mode) request.

  • A simple Context keeps track of called tool names during a session.

License

MIT — see LICENSE.

Deploy Server
A
security – no known vulnerabilities
A
license - permissive license
A
quality - confirmed to work

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/yeison-liscano/demo_http_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server