Skip to main content
Glama
vikramjt

MCP Commerce Server

by vikramjt

MCP Commerce Server (PostgreSQL + Hugging Face)

This project provides a deployment-ready MCP server that can be invoked from a LangGraph orchestration flow.
It accepts natural-language input, uses an open-source Hugging Face model to derive query intent, and safely fetches data from PostgreSQL.

What is implemented

  • MCP tools:

    • query_commerce(query, user_context?, limit?)

    • get_product_price(product_name, limit?)

    • get_user_orders(user_id?, email?, limit?)

    • calculate_two_numbers(a, b, operation?) where operation supports add/subtract

  • PostgreSQL schema for:

    • Product prices (products)

    • Users (users)

    • Orders (orders, order_items)

  • Hugging Face model integration (open-source text-to-text model default: google/flan-t5-base)

  • SQL-injection-safe query layer (no model SQL execution; only parameterized, pre-approved SQL templates)

  • OpenTelemetry tracing and structured logging for MCP tool flow, intent parsing, DB connection, and query execution

  • Docker + docker-compose setup for deployment

Related MCP server: PostgreSQL MCP Server

Why this is SQL-injection safe

  1. LLM output is treated as intent only, not executable SQL.

  2. The server maps intent to a fixed set of SQL templates.

  3. All runtime values are passed as query parameters via psycopg (%s placeholders).

  4. limit is bounded server-side to prevent abuse.

Project structure

.
├── db/init.sql
├── docker-compose.yml
├── Dockerfile
├── examples/langgraph_client.py
├── pyproject.toml
├── requirements.txt
└── src/mcp_commerce_server
    ├── config.py
    ├── db.py
    ├── hf_intent.py
    ├── main.py
    ├── query_service.py
    └── server.py

1. Local development setup

  1. Create and activate a virtual environment:

    python -m venv .venv
    source .venv/bin/activate
  2. Install dependencies:

    pip install -r requirements.txt
  3. Create env file:

    cp .env.example .env
  4. Start PostgreSQL and seed schema:

    • Option A: Use your own DB and run db/init.sql.

    • Option B: Use docker-compose (recommended below).

2. Run with docker-compose (deployment-ready local)

  1. Ensure .env exists and has HF_API_KEY.

  2. Start services:

    docker compose up --build
  3. MCP server is exposed at:

    • http://localhost:8000/mcp (streamable-http transport)

3. Run MCP server directly (stdio for local MCP clients)

python -m mcp_commerce_server.main

Set MCP_TRANSPORT=stdio in .env for this mode.

4. LangGraph orchestration usage

  • See examples/langgraph_client.py for end-to-end invocation.

  • The example now connects to two MCP servers:

    • commerce at MCP_COMMERCE_URL (default http://localhost:8000/mcp)

    • knowledge at MCP_KNOWLEDGE_URL (default http://localhost:8001/mcp)

  • It sends different prompts so the model routes to different tools (commerce query tools, calculate_two_numbers, and knowledge tools).

5. Environment variables

Variable

Description

Required

POSTGRES_HOST

PostgreSQL host

Yes

POSTGRES_PORT

PostgreSQL port

Yes

POSTGRES_DB

Database name

Yes

POSTGRES_USER

Database user

Yes

POSTGRES_PASSWORD

Database password

Yes

HF_API_KEY

Hugging Face API key

Yes (for model inference)

HF_MODEL_ID

Open-source HF model id

No (google/flan-t5-base)

MCP_TRANSPORT

stdio or streamable-http

No (stdio)

MCP_HOST

HTTP host for streamable MCP

No (0.0.0.0)

MCP_PORT

HTTP port for streamable MCP

No (8000)

LOG_LEVEL

Python logging level

No (INFO)

OTEL_SERVICE_NAME

OpenTelemetry service name

No (commerce-postgres-mcp)

6. Deployment steps (production-oriented)

  1. Build image:

    docker build -t commerce-mcp-server:latest .
  2. Push image to your registry:

    docker tag commerce-mcp-server:latest <registry>/<namespace>/commerce-mcp-server:latest
    docker push <registry>/<namespace>/commerce-mcp-server:latest
  3. Provision managed PostgreSQL (AWS RDS / Azure Database / Cloud SQL).

  4. Apply db/init.sql once (or convert to migration pipeline).

  5. Deploy container to your platform (Kubernetes, ECS, App Service, Cloud Run, etc.) with:

    • MCP_TRANSPORT=streamable-http

    • DB connection variables

    • HF_API_KEY secret

  6. Expose HTTP endpoint and allow only trusted callers (VPC/ingress ACL, auth gateway, or service mesh policy).

  7. Configure LangGraph to call deployed MCP URL.

7. Hardening recommendations before go-live

  1. Use DB least-privilege user (read-only if writes are unnecessary).

  2. Add request auth in front of MCP endpoint (API gateway/JWT/mTLS).

  3. Add query logging + tracing.

  4. Add circuit breakers/timeouts for HF and DB.

  5. Add schema migrations (Alembic/Flyway/liquibase) for controlled releases.

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/vikramjt/mcp_demo'

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