Skip to main content
Glama

bluedart-mcp-server

Model Context Protocol (MCP) server for the BlueDart (DHL eCommerce India) shipping API.

Exposes BlueDart's APIGEE endpoints — waybill creation, cancellation, pickup scheduling, transit-time lookup, tracking, and master downloads — as MCP tools that can be used by Claude Desktop, Claude Code, ChatGPT, and other standard MCP clients.

Tools

Tool

Method

What it does

bluedart_generate_waybill

write

Create a single AWB (POST /waybill/v1/GenerateWayBill)

bluedart_import_waybill

write

Bulk-create AWBs (POST /waybill/v1/ImportData)

bluedart_cancel_waybill

write

Cancel an AWB before in-scan

bluedart_register_pickup

write

Schedule a pickup

bluedart_cancel_pickup

write

Cancel a registered pickup

bluedart_get_transit_time

read

Estimate delivery date between two pincodes

bluedart_track_shipment

read

Track a shipment by AWB (markdown or json)

bluedart_download_pincode_master

read

Download serviceable pincode master

All tools return both a text and a structuredContent payload, with BlueDart's error fields (Status[].StatusInformation, IsError, etc.) surfaced into a normalised error field.

Related MCP server: Boxzooka MCP Server

Setup

npm install
cp .env.example .env       # fill in your BlueDart APIGEE credentials
npm run build

Environment variables

Var

Required

Description

BLUEDART_BASE_URL

yes

https://apigateway-sandbox.bluedart.com/in/transportation (sandbox) or https://apigateway.bluedart.com/in/transportation (prod)

BLUEDART_CLIENT_ID

yes

OAuth Consumer Key from your APIGEE app

BLUEDART_CLIENT_SECRET

yes

OAuth Consumer Secret

BLUEDART_LOGIN_ID

yes

Profile LoginID (used in BlueDart payload)

BLUEDART_LICENSE_KEY

yes

Profile LicenceKey

BLUEDART_API_TYPE

no

S (sandbox) or as documented (default: S)

BLUEDART_DEBUG

no

true for verbose stderr logging

JWT tokens are fetched once from /token/v1/login and cached in memory; the server auto-refreshes when the token is within 30 seconds of expiry, and will retry once on a 401/403.

Client configuration

Claude Desktop / Claude Code

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):

{
  "mcpServers": {
    "bluedart": {
      "command": "node",
      "args": ["/absolute/path/to/bluedart-mcp-server/dist/index.js"],
      "env": {
        "BLUEDART_BASE_URL": "https://apigateway-sandbox.bluedart.com/in/transportation",
        "BLUEDART_CLIENT_ID": "...",
        "BLUEDART_CLIENT_SECRET": "...",
        "BLUEDART_LOGIN_ID": "...",
        "BLUEDART_LICENSE_KEY": "...",
        "BLUEDART_API_TYPE": "S"
      }
    }
  }
}

ChatGPT

Configure as a stdio MCP server with the same node dist/index.js command and environment variables.

Notes & caveats

  • OriginArea must match the shipper pincode region. A mismatch returns InvalidAreaScNotInRegion. Example: OriginArea='DEL' with pincode 110030.

  • CreditReferenceNo must be unique per shipment. Reuse triggers Waybill already generated.

  • Weight is in kilograms; dimensions in centimetres.

  • The label PDF (AWBPrintContent) is base64-encoded and can be very large — set PDFOutputNotRequired: true in Services if you don't need it.

  • This server only does API I/O. Custom label rendering (e.g. with logos/barcodes) is intentionally out of scope — do that in your application layer.

Development

npm run dev      # tsx watch mode
npm run build    # compile to dist/
npm start        # run built server (stdio)

License

MIT

Available Tools

8 tools
bluedart_cancel_pickupCancel BlueDart PickupA
DestructiveIdempotent

Cancel a previously registered pickup via POST /cancel-pickup/v1/CancelPickup. Requires the TokenNumber returned by bluedart_register_pickup and the original ShipmentPickupDate.

Inputs: token_number (required), shipment_pickup_date (required).

bluedart_cancel_waybillCancel BlueDart WaybillA
DestructiveIdempotent

Cancel a BlueDart waybill by AWB number via POST /waybill/v1/CancelWaybill. Only works before the shipment has been manifest-scanned (in-scanned). After in-scan, cancellation is rejected by BlueDart.

Inputs: awb_no (required).

bluedart_download_pincode_masterDownload BlueDart Pincode MasterA
Read-onlyIdempotent

Download serviceable pincode master data via POST /masterdownload/v1/DownloadPinCodeMaster. Pass last_sync_date to get only changes since that date. The response can be very large; consider syncing incrementally.

Inputs: last_sync_date (required).

bluedart_generate_waybillGenerate BlueDart WaybillA
Destructive

Create a single BlueDart Air Waybill (AWB) for a shipment. Calls POST /waybill/v1/GenerateWayBill. Returns the AWB number, routing info, and (unless suppressed) a base64 AWB label PDF in AWBPrintContent. PRECONDITIONS: OriginArea must match the shipper pincode region (e.g. OriginArea='DEL' for pin '110030') or BlueDart returns InvalidAreaScNotInRegion. CreditReferenceNo must be unique per shipment or BlueDart rejects with 'Waybill already generated'. Weight is in kilograms, dimensions in centimetres.

Inputs: Consignee (required), Shipper (required), Returnadds (required), Services (required).

bluedart_get_transit_timeGet BlueDart Domestic Transit TimeA
Read-onlyIdempotent

Estimate the expected delivery date for a shipment between two Indian pincodes via POST /transit/v1/GetDomesticTransitTimeForPinCodeandProduct. Read-only; safe to call repeatedly.

Inputs: origin_pincode (required), destination_pincode (required), product_code, sub_product_code, +2 more.

bluedart_import_waybillBulk Import BlueDart WaybillsA
Destructive

Create multiple BlueDart waybills in a single request via POST /waybill/v1/ImportData. Each entry has the same shape as bluedart_generate_waybill. Returns per-shipment results; partial successes are possible.

Inputs: shipments (required).

bluedart_register_pickupRegister BlueDart PickupA
Destructive

Schedule a BlueDart pickup at the customer location via POST /pickup/v1/RegisterPickup. Returns a TokenNumber that is required to cancel the pickup later. AreaCode must match the pickup pincode region (same constraint as waybill OriginArea).

Inputs: ProductCode (required), AreaCode (required), CustomerCode (required), CustomerName (required), +13 more.

bluedart_track_shipmentTrack BlueDart ShipmentA
Read-onlyIdempotent

Track a BlueDart shipment by AWB number. Read-only. Returns the current status, expected delivery date, and (when include_scans=true) the scan history. Set response_format='markdown' for a human-readable summary or 'json' for the raw payload.

Inputs: awb_number (required), include_scans, response_format.

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A4.2/5.0

    Scored across 8 tools

    Disambiguation5/5

    Each tool targets a distinct operation (cancel, create, track, schedule, etc.) with no overlap. The descriptions clearly differentiate their purposes.

    Naming Consistency5/5

    All tools follow the consistent pattern 'bluedart_verb_noun' (e.g., bluedart_cancel_pickup, bluedart_generate_waybill), making the set predictable.

    Tool Count5/5

    With 8 tools, the server covers the core logistics workflows without being overwhelming or too sparse—excellent scope for a single domain.

    Completeness4/5

    The tool set covers essential CRUD-like operations for waybills and pickups, plus tracking and transit time. Minor gaps like updating a shipment or listing waybills are not critical for the primary use cases.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers