GunStore-POS Admin MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FRAPPE_API_KEY | Yes | Frappe API key generated from user settings | |
| FRAPPE_BASE_URL | Yes | Base URL of the Frappe instance (e.g., https://pos.oldsteelarsenal.com) | |
| FRAPPE_API_SECRET | Yes | Frappe API secret generated from user settings |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
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