Skip to main content
Glama
400861

Books API MCP Server

by 400861

my-mcp-server — 3-layer HTTP + MCP demo

A small, all-Python demo of three layers wired together over HTTP:

VS Code (native MCP client)
        │  HTTP  →  http://127.0.0.1:9100/mcp
        ▼
MCP server  (mcp_server/server.py, Streamable HTTP transport)
        │  HTTP  →  http://127.0.0.1:8000
        ▼
HTTP API server  (http_server/app.py, Flask, GET endpoints)
        │
        ▼
   in-memory "books" data
  • Layer 1 — HTTP API (http_server/app.py): a plain Flask REST-ish API with GET endpoints. Knows nothing about MCP.

  • Layer 2 — MCP server (mcp_server/server.py): exposes MCP tools over the Streamable HTTP transport. Each tool calls a layer-1 endpoint with httpx.

  • Layer 3 — VS Code: uses its built-in MCP client via .vscode/mcp.json to connect to layer 2 over HTTP. No custom extension or Node.js needed.

Setup

Note: a Windows .venv/ is committed to this repo for convenience. It contains hardcoded paths to C:\Users\400861\... and Windows-only binaries, so it will not work on macOS/Linux or other machines. On any other setup, delete .venv/ and rebuild it with the steps below.

Create a project-local virtual environment and install the pinned deps. Each machine should build its own venv from requirements.txt.

Windows (PowerShell):

python -m venv .venv
.\.venv\Scripts\python.exe -m pip install --upgrade pip
.\.venv\Scripts\python.exe -m pip install -r requirements.txt

macOS / Linux (bash/zsh):

python3 -m venv .venv
./.venv/bin/python -m pip install --upgrade pip
./.venv/bin/python -m pip install -r requirements.txt

The direct-path form above works without "activating" the venv. If you prefer to activate it: .\.venv\Scripts\Activate.ps1 (Windows) or source .venv/bin/activate (macOS/Linux), after which plain python uses the venv.

Related MCP server: Flask MCP Server Implementation Guide

Run (two terminals)

Use the venv's Python. Windows examples use .\.venv\Scripts\python.exe; on macOS/Linux swap in ./.venv/bin/python.

Terminal 1 — the HTTP API (port 8000):

.\.venv\Scripts\python.exe http_server/app.py

Terminal 2 — the MCP server (port 9100):

.\.venv\Scripts\python.exe mcp_server/server.py

Port 9100 is used because 9000 is occupied by Zscaler (ZSATunnel) on this machine. Override any port with env vars: HTTP_SERVER_PORT, MCP_SERVER_PORT, HTTP_API_BASE_URL.

Verify the chain

With both servers running:

.\.venv\Scripts\python.exe mcp_server/test_client.py

Expected: it lists the tools (list_books, get_book, list_genres, api_health) and prints results proxied from the Flask API.

Use from VS Code

  1. Open this folder in VS Code (MCP support requires a recent VS Code build).

  2. With both servers running, VS Code reads .vscode/mcp.json and connects to http://127.0.0.1:9100/mcp.

  3. Start the server from the mcp.json gutter "Start" action (or the MCP: List Servers command), then use the tools from Copilot Chat's Agent mode.

HTTP API endpoints (layer 1)

Method

Path

Description

GET

/health

Liveness probe

GET

/books

List books; filters: ?genre=, ?author=

GET

/books/<id>

Single book by id

GET

/genres

Distinct genres

MCP tools (layer 2)

Tool

Calls

list_books

GET /books

get_book

GET /books/<id>

list_genres

GET /genres

api_health

GET /health

F
license - not found
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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/400861/my-mcp-server'

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