Skip to main content
Glama
xuanji86

GunStore-POS Admin MCP

by xuanji86

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
FRAPPE_API_KEYYesFrappe API key generated from user settings
FRAPPE_BASE_URLYesBase URL of the Frappe instance (e.g., https://pos.oldsteelarsenal.com)
FRAPPE_API_SECRETYesFrappe API secret generated from user settings

Capabilities

Features and capabilities supported by this server

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

Tools

Functions exposed to the LLM to take actions

NameDescription
frappe_list_documentsA

List documents of any doctype.

filters are Frappe-style: a list of [field, operator, value] (e.g. [["is_firearm","=",1],["status","=","Active"]]) or a simple {field: value} dict. limit defaults to 20; pass limit=0 for all rows. Call frappe_describe_doctype first if unsure of field names.

frappe_get_documentA

Fetch one document by name. For a Single/Settings doctype, name == doctype (e.g. doctype='RSR Settings', name='RSR Settings').

frappe_describe_doctypeA

List a doctype's fields (custom fields included): fieldname, label, fieldtype, options, reqd. Fields flagged is_password=true can never be written through this MCP — set those in Desk.

frappe_create_documentC

Create a document. Credential/password fields are stripped automatically.

frappe_update_documentA

Update fields on a document. Credential/password fields are stripped automatically (set those in Desk).

frappe_delete_documentA

Delete a document. Requires confirm=true. For firearms/Items prefer frappe_run_method('ffl_core.api.item_admin.force_delete', ...) which preserves the A&D audit trail.

frappe_submit_documentA

Submit a draft document (docstatus 0 -> 1). Requires confirm=true — submitting can fire side effects (e.g. a FastBound push on FFL Acquisition).

frappe_cancel_documentB

Cancel a submitted document (docstatus 1 -> 2). Requires confirm=true.

frappe_run_methodA

Call any whitelisted server method by dotted path, e.g. 'ffl_integrations.rsr.tasks.sync_catalog_now'. Generic Frappe mutators (frappe.client.set_value/insert/save/delete/bulk_update/...) are refused — use the structured frappe_*_document tools, which enforce the guards. Methods whose name implies a destructive action require confirm=true.

frappe_run_reportB

Run a Script/Query Report (e.g. 'Firearms In Stock') and return its columns + result rows.

get_settingsA

Read an integration's Settings. which: ffl | fastbound | rsr | payroc | woocommerce. Password fields are never returned by Frappe.

update_settingsA

Update an integration's Settings. which: ffl | fastbound | rsr | payroc | woocommerce. Credential/password fields are stripped — set those in Desk.

rsr_sync_catalogA

Trigger a full RSR catalog sync. Runs in the background — returns once queued.

rsr_test_connectionA

Probe the RSR FTPS connection + configuration (read-only).

fastbound_test_connectionA

Probe the FastBound API connection (read-only).

woo_test_connectionA

Probe the WooCommerce API connection (read-only).

woo_push_itemA

Push (create or update) the WooCommerce product(s) for an Item. Per-serial firearms push every Active Serial No individually; non-firearm and uniform-price firearms push a single item-level product. Consequential — confirm=true.

woo_delist_itemA

Set the WooCommerce product for an Item to Draft + stock 0, hiding it from the shop immediately. confirm=true.

woo_reconcileB

Push the item-level product AND all Active Serial Nos for an Item in one call. Suitable for the initial listing of a per-serial firearm where everything needs to go live at once. confirm=true.

atf_verify_fflA

Live-verify an FFL number via ATF EZ Check and upsert an ATF FFL Record. Creates/updates a record, so requires confirm=true.

firearms_in_stockA

Run the 'Firearms In Stock' report — in-stock firearms by serial, with acquisition source + FastBound link. Optional warehouse / manufacturer filter.

find_itemB

Typeahead search for Items by barcode / item code / name.

item_stockA

Stock on hand per item: {item_code: qty} summed across all warehouses. Accepts a list, a JSON list, or a comma-separated string. Read-only.

available_serialsA

In-stock Serial Nos per firearm item, each with its per-gun sell price: {item_code: [{serial, sell_price, ...}]}. Use for 'which units do we have of this model + at what price'. Read-only.

rsr_catalog_searchA

Search the RSR distributor CATALOG (not local stock) by keyword / RSR stock # / UPC / MFG #. Use find_item for items already in this store. Read-only. Promote a catalog row to a sellable Item with promote_to_item.

boundbook_reconcileA

Reconcile in-stock firearm Serial Nos against the FastBound bound book — find guns FastBound shows as disposed but still Active in our inventory. apply=false (default) is a READ-ONLY dry run that just reports them. apply=true removes them from stock and requires confirm=true. Optional item_ids (FastBound item ids) narrows the scan.

receive_goodsA

Receive stock via the Receive Goods flow: creates + submits a Purchase Receipt; for firearms it also creates one FFL Acquisition per serial and pushes them to FastBound. payload mirrors the Receive Goods page: {supplier, source, warehouse, acquisition_source, items:[{item_code, qty, rate, serials:[...], manufacturer, model_name, caliber, firearm_type, importer, sell_price, service_need}], ...}. Consequential — confirm=true.

add_stockA

Add stock for a NON-serialized item (Material Receipt Stock Entry). Do NOT use for serial-tracked firearms — those go through receive_goods so the FFL flow runs. confirm=true.

set_stockA

Set a NON-serialized item's on-hand qty to an absolute value via Stock Reconciliation (physical count / write-off). reason is recorded in the audit trail. confirm=true.

toggle_service_needB

Set a firearm's 'Service Needed' (gunsmith) flag on its Serial No, opening or closing the gunsmith ToDo accordingly. confirm=true.

push_serial_to_fastboundA

Push a post-acquisition per-unit correction (manufacturer / importer) for one already-booked firearm to FastBound, editing the bound-book item in place (PUT /Items/{id}). No-op if the gun isn't in FastBound yet. confirm=true.

verify_supplier_fflB

Live ATF EZ Check on a Supplier's FFL and update that supplier's verification status/fields. confirm=true (it writes to the Supplier).

reverify_all_fflsC

Re-run ATF EZ Check for EVERY FFL supplier on file (batch re-verification). confirm=true.

promote_to_itemA

Promote an RSR catalog row into a sellable Item (manufacturer / model / caliber / prices / images flow in from the catalog). payload mirrors the promote flow, e.g. {rsr_stock_number, item_code?, item_name?, ...}. confirm=true. Find candidates with rsr_catalog_search.

backfill_from_rsrA

Backfill manufacturer / model / caliber / etc. on existing Items from the RSR catalog (fills only empty fields, never overwrites). item_codes omitted = all RSR-linked items. confirm=true.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

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/xuanji86/gunstore-pos-mcp'

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