Books API MCP Server
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" dataLayer 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 toC:\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.txtmacOS / Linux (bash/zsh):
python3 -m venv .venv
./.venv/bin/python -m pip install --upgrade pip
./.venv/bin/python -m pip install -r requirements.txtThe direct-path form above works without "activating" the venv. If you prefer to activate it:
.\.venv\Scripts\Activate.ps1(Windows) orsource .venv/bin/activate(macOS/Linux), after which plainpythonuses the venv.
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.pyTerminal 2 — the MCP server (port 9100):
.\.venv\Scripts\python.exe mcp_server/server.pyPort 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.pyExpected: it lists the tools (list_books, get_book, list_genres,
api_health) and prints results proxied from the Flask API.
Use from VS Code
Open this folder in VS Code (MCP support requires a recent VS Code build).
With both servers running, VS Code reads .vscode/mcp.json and connects to
http://127.0.0.1:9100/mcp.Start the server from the
mcp.jsongutter "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 |
| Liveness probe |
GET |
| List books; filters: |
GET |
| Single book by id |
GET |
| Distinct genres |
MCP tools (layer 2)
Tool | Calls |
|
|
|
|
|
|
|
|
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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