Demo HTTP MCP Server
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
Provides OAuth2 authentication for the MCP endpoint, requiring valid Auth0 Bearer tokens with specific tool scopes, and supports dynamic client registration via RFC 7591.
Manages environment variables for backend configuration through .envrc and .env files.
Provides linting for the frontend codebase as part of the development workflow.
Serves as the backend framework for the MCP server, handling HTTP routes and mounting the MCP app with authentication middleware.
Renders formatted responses in the chat interface using the marked library for markdown processing.
Powers the chat interface agent that can call MCP tools to search for vulnerabilities in the National Vulnerability Database (NVD).
Handles configuration settings and data validation throughout the backend application.
Used for testing the Python backend codebase as part of the development workflow.
Provides the frontend chat interface for querying vulnerabilities, built with React and TypeScript using Vite.
Provides linting for the Python backend codebase as part of the development workflow.
Persists chat history and message data locally through SQLite database integration for the chat interface.
Used for Python dependency management and configuration in pyproject.toml files.
Used for the frontend implementation with typed interfaces for the chat application and API client.
Builds and serves the React frontend in development with proxy configuration to the backend, and handles production builds.
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. The project
includes a React frontend that provides a chat interface for querying
vulnerabilities via the NVD (National Vulnerability Database).

Project structure
test-http-mcp/
├── backend/ # Python backend (FastAPI + MCP server)
│ ├── app/ # Application source code
│ │ ├── app.py # FastAPI app, routes, MCP mount
│ │ ├── main.py # Entry points (HTTP / stdio)
│ │ ├── agen_memory.py # SQLite message persistence
│ │ ├── config.py # Settings via pydantic-settings
│ │ ├── auth0/ # Auth0 integration
│ │ │ ├── __init__.py # JWT token validator
│ │ │ └── client_store.py # Dynamic client registration (RFC 7591)
│ │ ├── tools/ # MCP tools (CPE/CVE search via NVD)
│ │ └── prompts/ # MCP prompt templates
│ ├── pyproject.toml # Python deps & scripts
│ ├── uv.lock # Locked dependencies
│ ├── ruff.toml # Linter config
│ ├── mypy.ini # Type-checker config
│ └── .envrc # direnv auto-activation
├── frontend/ # React + TypeScript frontend (Vite)
│ ├── src/
│ │ ├── components/ # ChatApp, ChatInput, MessageList, MessageBubble
│ │ ├── api.ts # API client (fetch history, stream messages)
│ │ ├── types.ts # Shared TypeScript types
│ │ ├── App.tsx # Root component
│ │ └── App.css # Styles
│ ├── vite.config.ts # Vite config with dev proxy
│ └── package.json # Node dependencies
├── AGENTS.md
├── LICENSE
└── README.mdAuthentication (Auth0)
The MCP endpoint (/mcp/) is protected with Auth0 OAuth2 authentication.
Tools require scopes (tool:search_cpe, tool:search_cve) to be present in
the access token.
Required environment variables
Variable | Description |
| Auth0 tenant domain (e.g. |
| API identifier for token validation |
| Auth0 application client ID for the MCP app |
| Management API client ID (for dynamic registration) |
| Management API client secret |
| Set to |
Place these in backend/.env (git-ignored).
App mount structure
Path | App | Auth |
| Protected MCP server | Auth0 Bearer token required |
| Dynamic client registration (RFC 7591) | Unauthenticated |
| OAuth/resource metadata | Unauthenticated |
| Chat interface endpoints | Unauthenticated (see note) |
| Frontend static files | Unauthenticated |
Note: The chat endpoints are intentionally unauthenticated for local development. Add authentication before exposing beyond localhost.
Requirements
Python 3.13
Node.js 18+ and npm
uv(recommended) orpip
Install
Backend (using uv):
cd backend
uv run python -V # creates a venv and syncs deps from pyprojectBackend (using pip):
cd backend
python3.13 -m venv .venv
source .venv/bin/activate
pip install .Frontend:
cd frontend
npm installRun
Development (frontend + backend separately)
Start the backend:
cd backend
uv run run-app
# → API on http://localhost:8000
# → MCP endpoint on http://localhost:8000/mcp/Start the frontend dev server (in a separate terminal):
cd frontend
npm run dev
# → UI on http://localhost:5173 (proxies /api/* → backend)Production (backend serves the built frontend)
Build the frontend and start the backend:
cd frontend && npm run build && cd ..
cd backend && uv run run-app
# → Everything on http://localhost:8000Run (stdio mode)
Use with Cursor or other MCP clients
With Auth0 enabled, clients must obtain an OAuth2 access token. The server
supports RFC 7591 Dynamic Client Registration
at /register, so MCP clients that implement the auth spec will register
automatically.
Example .cursor/mcp.json for HTTP mode:
{
"mcpServers": {
"test-http-mcp": {
"type": "http",
"url": "http://localhost:8000/mcp/"
}
}
}Usage with Gemini:
{
"mcpServers": {
"test": {
"httpUrl": "http://localhost:8000/mcp/",
"timeout": 5000
}
}
}Example .cursor/mcp.json entry to connect via stdio:
{
"mcpServers": {
"test_studio": {
"command": "uv",
"args": ["run", "--project", "backend", "run-stdio"],
"env": { "AUTHORIZATION_TOKEN": "Bearer TEST_TOKEN" }
}
}
}What this server exposes
Tools (see
backend/app/tools/):search_cpe(product, version, vendor)— search Common Platform Enumerations via NVDsearch_cve(cpe_name)— search Common Vulnerabilities and Exposures for a given CPE
Prompts (see
backend/app/prompts/):sync_nvd_search(dependency, version)— simple vulnerability search promptasync_nvd_search(dependency, version)— advanced prompt with pre-fetched CVE data
Project scripts
Two console entry points are defined in backend/pyproject.toml:
run-app→app.main:run_httprun-stdio→app.main:run_stdiorun-app-local→app.app:main(with auto-reload)
Development
Common tasks (run from the backend/ directory):
uv run ruff check . # lint
uv run mypy . # type check
uv run pytest # tests
uv run mdformat . # format markdownFrontend tasks (run from the frontend/ directory):
npm run dev # start dev server
npm run build # production build
npm run lint # lint with ESLint
npx tsc --noEmit # type checkImplementation notes
The root ASGI app is an Auth0-protected MCP app created by
auth_mcp, which mounts the FastAPI sub-app at/api.The MCP endpoint at
/mcp/requires a valid Auth0 Bearer token with the appropriate tool scopes.Dynamic client registration at
/registerproxies to a pre-created Auth0 application, updating its allowed callback URLs. Redirect URIs are validated (HTTPS required; HTTP allowed only for localhost).The chat interface uses
pydantic-aiwith an Ollama agent that can call MCP tools to search for vulnerabilities.Chat history is persisted in a local SQLite database via
agen_memory.py.The React frontend streams responses as newline-delimited JSON and renders markdown with the
markedlibrary.In production, the backend serves the built frontend from
frontend/dist/with SPA fallback routing (path traversal protected).In development, Vite proxies
/api/*requests to the backend on port 8000.
License
MIT — see LICENSE.
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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