Skip to main content
Glama
r3tr056

GeM MCP Server

by r3tr056

GeM MCP Server β€” Government e-Marketplace Intelligence

A fully-featured, Claude-compatible Model Context Protocol (MCP) server for interacting with India's Government e-Marketplace (GeM) bid data.

Deploy on Render and connect from Claude Code, Claude Web, or any MCP-compatible agent.


Features

πŸ”§ MCP Tools (9 tools)

Tool

Description

search_bids

Search the live GeM portal by keyword, date, ministry, org

get_latest_bids

Crawl latest N pages of bid listings

search_drone_bids

Find all drone/UAV procurement opportunities

get_stored_bids

Query stored bids with filters (status, ministry, type, etc.)

get_bid_detail

Fetch extended info from a bid detail page

lookup_bid

Look up a specific bid by number from the database

get_bid_stats

Database statistics (counts, top ministries, etc.)

cleanup_old_bids

Delete bids older than N days

export_bids

Export all stored bids as JSON

πŸ“„ MCP Resources (4 resources)

URI

Description

gem://keywords

Monitored drone/UAV keywords list

gem://config

Server configuration (non-sensitive)

gem://stats

Live database statistics

gem://urls

GeM portal URL structure and endpoints

πŸ’¬ MCP Prompts (3 prompts)

Prompt

Description

analyze_procurement

Sector-specific procurement analysis workflow

drone_opportunity_report

Comprehensive drone/UAV opportunity report

bid_deep_dive

Detailed analysis of a specific bid


Quick Start

1. Clone and Install

git clone <your-repo-url>
cd gem_mcp
pip install -r requirements.txt

2. Configure MongoDB

Copy .env.example to .env and set your MongoDB connection string:

cp .env.example .env
# MongoDB Atlas free tier
MONGODB_URI=mongodb+srv://user:password@cluster0.xxxxx.mongodb.net/?retryWrites=true&w=majority
MONGODB_DB=gem_mcp

3. Run Locally

python server.py

Server starts at http://localhost:8000:

  • MCP endpoint: http://localhost:8000/mcp

  • Health check: http://localhost:8000/health

4. Connect a Client

Claude Code:

claude mcp add --transport http gem-server http://localhost:8000/mcp

MCP Inspector:

npx -y @modelcontextprotocol/inspector
# Connect to: http://localhost:8000/mcp

Deploy to Render

Option A: Blueprint (one-click)

  1. Push this repo to GitHub

  2. Go to Render Dashboard β†’ New β†’ Blueprint

  3. Connect your repo β€” Render reads render.yaml automatically

  4. Set the MONGODB_URI environment variable in the Render dashboard

Option B: Manual Docker Deploy

  1. New β†’ Web Service β†’ Docker

  2. Point to your repo

  3. Set environment variables:

    • MONGODB_URI = your Atlas connection string

    • MONGODB_DB = gem_mcp

  4. Health check path: /health

After Deploy

# Add to Claude Code
claude mcp add --transport http gem-server https://your-app.onrender.com/mcp

Architecture

Client (Claude Code / Claude Web / Any MCP Agent)
        β”‚
        β”‚ MCP Protocol (Streamable HTTP)
        β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  server.py (FastMCP + Starlette)β”‚  ← Render Web Service
β”‚  POST /mcp  β€” MCP endpoint     β”‚
β”‚  GET  /health β€” health check   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  gem_scraper.py                 β”‚  ← Scraping + parsing logic
β”‚  (requests + BeautifulSoup)     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
          β”‚                    β”‚
          β–Ό                    β–Ό
   MongoDB Atlas        bidplus.gem.gov.in
   (persistent           (live scraping)
    storage)

Data Fields

Field

Description

bid_no

Unique bid number (e.g. GEM/2024/B/123456)

title

Bid title / product description

quantity

Number of units required

uom

Unit of measurement

start_date

Bid opening date

end_date

Bid closing deadline

ministry

Procuring ministry/department

buyer_org

Buying organization

bid_type

BID / RA (Reverse Auction) / Service BID

status

open / closed / awarded

detail_url

Full URL to bid detail page

is_relevant

Auto-tagged if matches drone/UAV keywords


GeM Portal URLs (Reverse-Engineered)

BASE:  https://bidplus.gem.gov.in

Listings:
  /all-bids                    β†’ All bids (paginated)
  /bidlists                    β†’ Ongoing bids
  /bidresultlists              β†’ Completed bids
  /advance-search              β†’ Search (POST)

Detail:
  /bidding/bid/getBidResultView/{id}

Search POST params:
  search_bid, ministry, org_name, bid_no, date_from, date_to

Rate Limiting

  • Default: 1.5s between requests (configurable via REQUEST_DELAY_SEC env var)

  • GeM is a public portal β€” public bid data is freely accessible

  • Don't run concurrent crawls to avoid IP blocking


Files

gem_mcp/
β”œβ”€β”€ server.py           ← MCP server (main entry point)
β”œβ”€β”€ gem_scraper.py      ← Scraping logic + MongoDB operations
β”œβ”€β”€ requirements.txt    ← Python dependencies
β”œβ”€β”€ Dockerfile          ← Container for Render
β”œβ”€β”€ render.yaml         ← Render blueprint
β”œβ”€β”€ .env.example        ← Environment variable template
β”œβ”€β”€ .gitignore          ← Git ignore rules
└── README.md           ← This file
-
security - not tested
F
license - not found
-
quality - not tested

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/r3tr056/gem_mcp'

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