Skip to main content
Glama
mcp-server-demo

mcp-server-demo

MCP Server Demo (Python)

Quickstart (local run)

  1. Create and activate a virtual environment.

python -m venv .venv
source .venv/bin/activate
  1. Install Python dependencies.

pip install -U pip
pip install -r requirements.txt
pip install -e .
  1. Set up environment variables.

cp .env.example .env

Fill in your OPENAI_API_KEY and keep MCP_DEMO_DB_PATH=demo.db. If you want to use file tools, set MCP_FILE_OPS_ROOT to a local folder path that the server is allowed to manage.

You will fill out the MCP_SERVER_URL in a later step

  1. If you plan to expose your local MCP server publicly, make sure ngrok is installed sudo snap install ngrok and your account is set up and authenticated first. You can set up an account for free. Once set up, add token using terminal ngrok config add-authtoken <AUTHTOKEN> You can find the token on https://dashboard.ngrok.com/get-started/your-authtoken

  2. Start the MCP server (HTTP transport).

MCP_TRANSPORT=streamable-http MCP_HOST=0.0.0.0 MCP_PORT=8000 MCP_PATH=/mcp mcp-server-demo
  1. In a new terminal, start ngrok.

ngrok http 8000

Once you have ngrok running, you need to update MCP_SERVER_URL in your .env file use the address from 'Forwarding'. Your .env will now look like MCP_SERVER_URL=<Full forwarding Address>/mcp

  1. (Optional) In another terminal, run MCP Inspector.

npx @modelcontextprotocol/inspector

It should open up a web browser. In the left hand panel update Command to be mcp-server-demo Press connect. You can select "tools" in the top menu to test the available tools and see history and notifications at the bottom of the page

  1. (Optional) Launch the Streamlit client.

streamlit run web_client.py

A from-scratch local MCP server with tools for weather, SQLite reads, and local file operations:

  • weather(city) → current weather via wttr.in

  • query_db(sql) → read-only SQLite SELECT query

  • make_directory(path) → create directories inside MCP_FILE_OPS_ROOT

  • move_file(source_path, destination_path) → move files inside MCP_FILE_OPS_ROOT

  • move_files_by_glob(source_dir, pattern, destination_dir) → move many files in one call (e.g., *.txt)

  • list_files(path=".") → list files in a folder inside MCP_FILE_OPS_ROOT

  • list_directories(path=".") → list directories in a folder inside MCP_FILE_OPS_ROOT

  • read_file(path) → read text files inside MCP_FILE_OPS_ROOT

  • inspect_file(path, preview_chars=4000, include_base64=False) → metadata + preview for text/csv/image files

  • analyze_image_with_openai(path, prompt, model='gpt-4.1-mini') → send image to OpenAI vision-capable model

Related MCP server: Swiss Meteo MCP

Notes

  • Default local MCP endpoint is: http://127.0.0.1:8000/mcp

  • The server creates demo.db automatically with sample rows.

  • npx requires Node.js/npm installed locally.

  • streamlit is included in requirements.txt.

OpenAI API integration option

  1. Ensure .env includes your key and MCP server URL.

  2. Start server in HTTP mode.

  3. Run:

python client_openai_api.py

Tool behavior

weather(city: str)

Returns JSON summary fields including temperature, feels-like, humidity, wind, and short conditions.

query_db(sql: str)

  • Allows only SELECT ... queries.

  • Returns rows as JSON.

  • Rejects non-SELECT SQL for safety in this starter demo.

Project files

  • server.py — FastMCP server + tool definitions.

  • client_openai_api.py — simple OpenAI API call that can invoke MCP tools.

  • web_client.py — Streamlit chat client.

  • pyproject.toml — package metadata + script entrypoint.

  • requirements.txt — pinned runtime dependencies for local setup.

File operation tools

  • All file operations are constrained to MCP_FILE_OPS_ROOT.

  • The server rejects paths that try to escape that root.

  • MCP_FILE_OPS_ROOT directories are created automatically if they do not exist.

Available Tools

10 tools
analyze_image_with_openaiC

Analyze an image file with an OpenAI vision-capable model.

Inputs: path (required), prompt (required), model. Returns: result

inspect_fileC

Return file metadata and content preview for text/csv/image workflows.

Inputs: path (required), preview_chars, include_base64. Returns: result

list_directoriesC

List directories directly inside a folder within MCP_FILE_OPS_ROOT.

Inputs: path. Returns: result

list_filesB

List files directly inside a folder within MCP_FILE_OPS_ROOT.

Inputs: path. Returns: result

make_directoryC

Create a directory inside MCP_FILE_OPS_ROOT.

Inputs: path (required). Returns: result

move_fileC

Move a file from source_path to destination_path inside MCP_FILE_OPS_ROOT.

Inputs: source_path (required), destination_path (required). Returns: result

move_files_by_globC

Move all files matching a glob pattern from source_dir into destination_dir.

Inputs: source_dir (required), pattern (required), destination_dir (required). Returns: result

query_dbA

Run a read-only SELECT query against local SQLite demo.db.

Inputs: sql (required). Returns: result

read_fileC

Read a UTF-8 text file inside MCP_FILE_OPS_ROOT.

Inputs: path (required). Returns: result

weatherB

Return current weather for a city using wttr.in.

Inputs: city (required). Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.9/5.0

    Scored across 10 tools

    Disambiguation4/5

    Most tools have distinct purposes, but there is some overlap between inspect_file and read_file (both provide file content), and move_file vs move_files_by_glob are similar in name and action.

    Naming Consistency4/5

    Majority follow verb_noun pattern with underscores, but 'weather' is a lone noun and 'analyze_image_with_openai' is verbose and breaks the pattern.

    Tool Count4/5

    10 tools is a reasonable number, but the server covers multiple unrelated domains (files, DB, weather, image), making it feel a bit scattered.

    Completeness2/5

    File operations lack delete/copy, DB only has read-only query, weather and image analysis are single-tool services. The surface is incomplete for any single domain.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      C
      quality
      D
      maintenance
      An experimental MCP server that provides weather information tools, including temperature lookup via wttr.io, along with note-taking capabilities for learning MCP server development with GitHub Copilot.
      3
      -
    • F
      license
      Not graded
      quality
      D
      maintenance
      A demo MCP server that provides AI assistants access to live US weather data via the free National Weather Service API, offering forecast and alert tools without requiring an API key.
      -
    • F
      license
      Not graded
      quality
      D
      maintenance
      A lightweight MCP server providing tools for adding integers, getting current time, and fetching weather forecasts via wttr.in.
      -