Skip to main content
Glama
inpost-consumer-mcp
by noxlabs-ai

inpost-consumer-mcp

npm version License: MIT Node.js

npm: inpost-consumer-mcp · GitHub: noxlabs-ai/inpost-consumer-mcp

Local MCP (Model Context Protocol) server and TypeScript client for the InPost mobile / consumer API — SMS login, list parcels, pickup codes, open a Paczkomat, returns, and tracking.

Works with Cursor, Claude Desktop, VS Code (MCP-enabled clients), and any host that supports MCP over stdio.

Powered by NOXLABS.


Table of contents


Related MCP server: MCP API Server

Why this project

InPost’s consumer mobile API powers “my parcels”, locker open, and returns — but it is not a polished public SDK. This package wraps that surface as:

  1. An MCP server so AI assistants can list parcels, track shipments, and (with care) open a locker.

  2. A typed TypeScript client you can import in your own scripts.

Auth is SMS OTP → JWT + refresh token, stored in a local multi-account config file and refreshed automatically.

Sign-in: call inpost_consumer_login. If a saved session exists, it refreshes tokens (no SMS). Otherwise it opens a localhost page for phone + SMS code. Secrets never go through the model. Pass forceSms=true to add another phone. If the MCP client supports URL elicitation, it will prompt you to open that page; otherwise the system browser is used.


Features

Feature

Description

9 MCP tools

Login (SMS), sessions, parcels, locker open/finish, track, returns

Multi-account

Several phone numbers in one local config (v2 store)

Auto token refresh

Proactive expiry check + one 401 retry (not exposed as a tool)

ShipX tracking

Public tracking via ShipX, with status cross-check on parcel lists

Typed client

Import InPostConsumerClient from the same package

stdio MCP

Drop-in for Cursor / Claude Desktop / VS Code


Quick start

Requirements: Node.js 20 or newer.

Published on npm as inpost-consumer-mcp — see the package page for the latest version.

Connect your AI client

Add this server entry to your MCP host’s configuration:

{
  "mcpServers": {
    "inpost-consumer": {
      "command": "npx",
      "args": ["-y", "inpost-consumer-mcp"]
    }
  }
}

Save the config, enable the inpost-consumer server if your client exposes a toggle, then sign in with inpost_consumer_login (refreshes a saved session, or opens browser OTP if needed).

No InPost developer keys. The server uses stdio transport only. Sessions are stored on disk (see Configuration).

Run manually (optional)

npx -y inpost-consumer-mcp

Or install globally:

npm install -g inpost-consumer-mcp
inpost-consumer-mcp

Global install (optional)

If you ran npm install -g inpost-consumer-mcp:

{
  "mcpServers": {
    "inpost-consumer": {
      "command": "inpost-consumer-mcp"
    }
  }
}

Local development

{
  "mcpServers": {
    "inpost-consumer": {
      "command": "node",
      "args": ["/absolute/path/to/inpost-consumer-mcp/dist/cli.js"]
    }
  }
}

Build first: npm install && npm run build.

Environment variables in MCP config

{
  "mcpServers": {
    "inpost-consumer": {
      "command": "npx",
      "args": ["-y", "inpost-consumer-mcp"],
      "env": {
        "INPOST_CONSUMER_CONFIG": "/custom/path/config.json"
      }
    }
  }
}

Tools

Auth uses the current mobile endpoints: POST /v1/account (send OTP) and POST /v1/account/verification (confirm). Parcels use GET /v4/parcels/tracked.

Tool

When to use

inpost_consumer_login

Refresh saved session, or browser SMS if needed (forceSms to add a phone)

inpost_consumer_logout

Sign out one or all phones

inpost_consumer_login_sessions

Show signed-in phones / expiry

inpost_consumer_list_parcels

List your parcels

inpost_consumer_get_parcel

Parcel details / pickup code

inpost_consumer_locker_open

Open Paczkomat (confirm=true)

inpost_consumer_locker_finish

End a pickup session

inpost_consumer_track

Track a shipment (ShipX)

inpost_consumer_list_returns

List return tickets

Safety: inpost_consumer_locker_open is destructive — anyone at the machine can take the parcel. Only call it when you are physically at the correct Paczkomat, and always pass confirm=true.


Configuration

Variable

Default

Description

INPOST_CONSUMER_CONFIG

OS app-config dir inpost-consumer-mcp/config.json

Path to the local auth/config JSON

INPOST_CONSUMER_BASE_URL

mobile API default

Override mobile API base URL

INPOST_SHIPX_BASE_URL

ShipX default

Override ShipX tracking base URL


Library

import { InPostConsumerClient } from "inpost-consumer-mcp";

const client = new InPostConsumerClient();
await client.sendSmsCode("+48123456789");
await client.confirmSmsCode("+48123456789", "123456");
const parcels = await client.listParcels({ statuses: ["ready_to_pickup"] });

Also exported: createMcpServer, ConfigStore, JWT helpers, status helpers, startLoginUi, openBrowser, and TOOL_NAMES.

The library still exposes sendSmsCode / confirmSmsCode for programmatic use. The MCP server uses a localhost browser UI instead so OTP codes never enter the chat.


How it works

flowchart LR
  Client[MCP client] -->|stdio| Server[inpost-consumer-mcp]
  Server --> Store[Local config store]
  Server --> Mobile[InPost mobile API]
  Server --> ShipX[ShipX tracking]
  Store --> JWT[JWT + refresh]
  1. The MCP host starts inpost-consumer-mcp as a subprocess.

  2. inpost_consumer_login refreshes a saved session when possible; otherwise opens a localhost page for SMS OTP and writes tokens to the local config file.

  3. Parcel / locker / returns tools call the mobile API with auto-refreshed JWTs.

  4. Tracking uses ShipX; parcel lists can cross-check public status.


Development

git clone https://github.com/noxlabs-ai/inpost-consumer-mcp.git
cd inpost-consumer-mcp
npm install
npm run gen        # optional: types from openapi/inpost-mobile.yml
npm run typecheck
npm run build
npm run smoke
npm run pack:check # dry-run npm pack

OpenAPI under openapi/inpost-mobile.yml describes the mobile endpoints used by this client.

Project layout

src/
  cli.ts                 # MCP stdio entrypoint (bin)
  index.ts               # Library exports
  auth/                  # Config store, JWT helpers, login UI, types
  client/                # HTTP + InPostConsumerClient
  mcp/                   # Server, tools, env config
  generated/             # Types from OpenAPI
openapi/
  inpost-mobile.yml
scripts/
  gen-types.mjs
  smoke.mts

Contributing

Contributions are welcome. Please:

  1. Open an issue for larger changes.

  2. Keep PRs focused; match existing TypeScript style.

  3. Run npm run typecheck && npm run build before submitting.


Publishing

Package: https://www.npmjs.com/package/inpost-consumer-mcp

Repository: https://github.com/noxlabs-ai/inpost-consumer-mcp

For maintainers releasing a new version:

npm login
npm run pack:check
npm version patch   # or minor / major
npm publish

prepublishOnly runs typecheck and the build automatically.


Disclaimer

  • This project is not affiliated with InPost Sp. z o.o. or InPost Group.

  • It uses unofficial mobile API patterns that may change without notice.

  • Opening a locker remotely can allow anyone nearby to take the parcel — use that tool only when you are at the machine.

  • Use at your own risk; respect InPost terms of use and applicable law.


License

MIT © NOXLABS

Available Tools

10 tools
inpost_consumer_get_parcelParcel detailsA
Read-only

Get details for one parcel by shipment number (or a unique short prefix): status, locker, pickup code, and QR payload for the app/scanner.

Inputs: shipmentNumber (required), phoneNumbers.

inpost_consumer_list_parcelsList my parcelsA
Read-only

List your InPost parcels (status, locker, pickup code when available). Statuses are kept up to date with public tracking. Optional filter by status (e.g. ready_to_pickup, delivered) — case does not matter.

Inputs: statuses, phoneNumbers.

inpost_consumer_list_returnsList my returnsA
Read-only

List your InPost return tickets. Optionally filter by status.

Inputs: statuses, phoneNumbers.

inpost_consumer_locker_finishFinish locker sessionA

End a Paczkomat pickup session after opening (or if you need to tear it down). Use the session id returned by inpost_consumer_locker_open.

Inputs: sessionUuid (required), phoneNumbers.

inpost_consumer_locker_openOpen lockerA
Destructive

Remotely open the Paczkomat compartment for a parcel. Anyone standing at the machine can take it — only use when you are there. Set confirm=true to proceed. Prefer picking up in person at the correct locker.

Inputs: confirm (required), shipmentNumber (required), openCode, phoneNumbers.

inpost_consumer_login_confirmConfirm login codeA

Enter the SMS code to sign in. Saves your session on this device so you can list parcels and open lockers.

Inputs: smsCode (required), phoneNumber (required).

inpost_consumer_login_send_smsSend login codeA

Send a one-time login code by SMS to your phone. Next: inpost_consumer_login_confirm with the code from the message.

Inputs: phoneNumber (required).

inpost_consumer_login_sessionsShow signed-in phonesA
Read-only

List phone numbers currently signed in on this device, with when each session expires. Login codes refresh automatically when you use other tools.

Inputs: no named parameters.

inpost_consumer_logoutSign outA

Sign out and remove saved login(s) from this device. Does not change anything in the InPost app.

Inputs: all, phoneNumber.

inpost_consumer_trackTrack a parcelA
Read-only

Public tracking for any InPost shipment number (no login required for full numbers). If you pass a short prefix, it is matched against your signed-in parcels when needed.

Inputs: shipmentNumber (required).

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A4.1/5.0

    Scored across 10 tools

    Disambiguation5/5

    Each tool has a clearly distinct purpose: login flow tools are separate from parcel listing/detail, locker operations are distinct from tracking and returns. No two tools overlap in a way that would cause misselection; even list_parcels and get_parcel are clearly list vs. single-item operations.

    Naming Consistency4/5

    All tools share the 'inpost_consumer_' prefix, and most follow a verb_noun pattern (list_parcels, get_parcel, track, list_returns). However, some names are structured as noun_verb (locker_open, locker_finish) or use a domain prefix (login_send_sms, login_sessions, login_confirm), creating minor inconsistency in the verb/noun order.

    Tool Count5/5

    Ten tools is well within the ideal 3-15 range for a consumer-focused InPost service. Each tool covers a necessary part of the user journey—auth, parcel viewing, locker operation, tracking, and returns—without unnecessary bloat or sparseness.

    Completeness4/5

    The tool surface covers the core lifecycle: login, logout, session management, listing and getting parcels, opening and finishing locker sessions, tracking, and listing returns. Minor gaps exist, such as no per-return detail view or explicit support for creating a return, but these are edge cases and the essential workflows are fully supported.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      A demonstration MCP server built in TypeScript that shows how to implement stdio-based communication for integration with MCP clients. Serves as a template for building custom MCP servers with strong typing and maintainability.
      ISC
    • A
      license
      C
      quality
      D
      maintenance
      A modular MCP server that connects to external APIs, providing tools for weather data, user management, and company operations. Features a scalable architecture with TypeScript support, HTTP client abstraction, and robust error handling.
      5
      ISC
    • A
      license
      Not graded
      quality
      D
      maintenance
      A horizontally scalable Model Context Protocol server for exposing shipment tracking (and other data sources) as authenticated MCP tools, starting with DB Schenker's public tracking endpoint.
      1
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      General TypeScript MCP server that provides tools for OpenClaw capabilities, including balance and invoice retrieval from RMappi/Osuria.
      3
      9 npm
      Apache 2.0