Skip to main content
Glama
janishkumar

po-guard-mcp

by janishkumar

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
ERPNEXT_URLNoURL of the ERPNext instance, e.g. http://localhost:8080.
SAP_API_KEYNoSAP api.sap.com API key (free account). For sandbox reads; the sandbox is read-only.
PO_GUARD_ERPYesWhich ERP connector to use: "erpnext" or "sap".
ERPNEXT_API_KEYNoERPNext API key of the acting user (identity comes from this key, never from a tool argument).
ERPNEXT_API_SECRETNoERPNext API secret paired with ERPNEXT_API_KEY.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
previewA

Show exactly what a write would do and every check result, without writing anything.

Returns a one-time confirmation code when no check blocks. Pass that code to the write tool together with the identical arguments.

Args: action: The write tool to preview: create_purchase_order, onboard_supplier, submit_for_approval, approve_purchase_order, reject_purchase_order, cancel_purchase_order or amend_purchase_order. args: The exact arguments you will pass to that tool (without confirmation_code).

search_suppliersA

Find suppliers by name (fuzzy). Use before ordering, to get the supplier ID.

Args: query: Part of the supplier's name, e.g. "herc rentals". limit: Maximum rows (1-50).

get_purchase_orderA

One purchase order: supplier, cost centre, lines, total, status, requester, approver.

Args: po: Purchase order ID, e.g. "PUR-ORD-2026-00012".

list_purchase_ordersA

List purchase orders, newest first.

Args: supplier: Optional supplier ID. cost_centre: Optional cost centre. status: Optional: Draft, Pending Approval, Approved, Rejected or Cancelled. limit: Maximum rows (1-100).

budget_statusB

A cost centre's annual budget, what live orders already commit, and what's left.

Args: cost_centre: Cost centre name, e.g. "Fleet Operations - LDU".

audit_logA

Recent po-guard audit records (every write attempt, including refused ones).

Args: target: Optional document ID (purchase order or supplier) to filter on. limit: Maximum rows (1-100).

whoamiA

The ERP user this server acts as, and their approval authority.

create_purchase_orderA

Create a draft purchase order. Needs a confirmation code from preview.

Args: supplier: Supplier ID (from search_suppliers). cost_centre: Cost centre to charge. lines: [{"item_code": ..., "qty": ..., "rate": ..., "description": optional}]. confirmation_code: From preview("create_purchase_order", ). required_by: Optional ISO date, e.g. "2026-11-30". notes: Optional free text, stored as-is.

onboard_supplierA

Add a supplier to the master after duplicate checks. No bank details, ever.

Args: name: Legal name. confirmation_code: From preview("onboard_supplier", ). tax_id: Optional tax ID (e.g. US EIN), checked for duplicates. notes: Optional free text, stored as-is.

submit_for_approvalA

Send a draft (or rejected and fixed) purchase order for approval.

Args: po: Purchase order ID. confirmation_code: From preview("submit_for_approval", {"po": ...}).

approve_purchase_orderA

Approve a pending purchase order as the configured user (never its requester).

Args: po: Purchase order ID. confirmation_code: From preview("approve_purchase_order", ). comment: Optional approval comment.

reject_purchase_orderA

Reject a pending purchase order back to its requester.

Args: po: Purchase order ID. reason: Why, for the requester. confirmation_code: From preview("reject_purchase_order", ).

cancel_purchase_orderA

Cancel a purchase order. It stays on record as cancelled; nothing is deleted.

Args: po: Purchase order ID. reason: Why. confirmation_code: From preview("cancel_purchase_order", ).

amend_purchase_orderA

Replace the lines of an unapproved order. It goes back to Draft for resubmission.

Args: po: Purchase order ID. lines: The full new set of lines (same shape as create_purchase_order). confirmation_code: From preview("amend_purchase_order", ). notes: Optional new notes.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4/5.0

Scored across 14 tools

Disambiguation5/5

Each tool targets a distinct resource+action: get vs list are clearly scoped, and the approval-state transitions (submit, approve, reject, cancel, amend) are each explicitly delimited. The `preview` meta-tool is clearly distinguished as a dry-run gate for writes, including an enumerated action list.

Naming Consistency4/5

The dominant pattern is consistent verb_noun (get_purchase_order, list_purchase_orders, create/amend/submit/approve/reject/cancel_purchase_order, search_suppliers). Deviations are noun-only utility tools (budget_status, audit_log) and the generic `preview`/quirky `whoami`, but these remain readable and predictable.

Tool Count5/5

14 tools is well within a healthy range and each earns its place: a full PO lifecycle, plus supporting reads (search, budget, audit, whoami) and a safety-gate preview. Nothing appears redundant or padding.

Completeness4/5

Purchase-order coverage is strong: create, amend, submit, approve, reject, cancel, get, list, plus budget and audit context. The supplier surface is thin (only search and onboard, no get/update/deactivate), and there is no goods-receipt or invoice-matching operation, but core workflows are workable.

Maintenance

ActivityMaintained
ResponsivenessNo issues