GunStore-POS Admin MCP
The GunStore-POS Admin MCP server provides a comprehensive interface to manage a GunStore-POS system built on Frappe, covering document management, inventory control, firearm compliance, and e-commerce integrations.
Generic Frappe Document Management
List, read, create, update, delete, submit, and cancel documents for any Frappe doctype
Describe doctype fields (including custom fields; credential/password fields are never transmitted)
Run any whitelisted server method by dotted path and execute Script/Query reports
Integration Settings & Testing
Read and update settings for FFL, FastBound, RSR, Payroc, and WooCommerce integrations
Test connections to RSR (FTPS), FastBound (API), and WooCommerce (API)
RSR Distributor Integration
Trigger full RSR catalog sync (background job)
Search the RSR catalog by keyword, stock #, UPC, or manufacturer #
Promote RSR catalog rows into sellable store items and backfill existing items with RSR data (manufacturer, model, caliber, etc.)
Inventory & Stock Management
Check stock on hand per item across warehouses; view available serial numbers with sell prices
Add stock for non-serialized items (Material Receipt) or set stock via Stock Reconciliation
Receive goods (creates Purchase Receipt + FFL Acquisitions for firearms, pushes to FastBound)
Firearms & ATF/FFL Compliance
Live-verify FFL numbers via ATF EZ Check and upsert ATF FFL records
Verify a supplier's FFL and batch re-verify all FFL suppliers on file
Reconcile in-stock firearms against the FastBound bound book (with dry-run capability)
Push per-serial post-acquisition corrections (manufacturer/importer) to FastBound
Toggle a firearm's "Service Needed" flag to open or close gunsmith tasks
Run the "Firearms In Stock" report with optional filters
WooCommerce E-Commerce
Push items to WooCommerce (create or update products, per-serial or item-level)
Delist items from WooCommerce (set to Draft + stock 0)
Reconcile all active serial numbers for an item in one call
Set per-gun WooCommerce listing titles for serials
Item Search
Typeahead search for items by barcode, item code, or name
Safety Guards: Destructive operations (delete, submit, cancel, set stock) require confirm=true; credential and password fields are never read or transmitted.
Integrates with the GunStore-POS Frappe backend to manage inventory, settings, reports, and compliance operations such as RSR sync, FastBound integration, and ATF FFL verification.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@GunStore-POS Admin MCPshow me the current FFL settings for the store"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
GunStore-POS Admin MCP
A local MCP server that wraps the GunStore-POS Frappe REST API, so you can read and change production settings/content from Claude or Codex — toggle integration config, edit item pricing/listing, fix records, trigger RSR/FastBound/ATF operations, run the Firearms-In-Stock report.
Companion repo:
firearm-listing-import— a Claude Code / Codex skill that uses this MCP (per-gun photos + descriptions → Serial No → WooCommerce). Extracted from the gunstore-pos app as a standalone, separately distributable package.
How it works
A small generic backbone (
frappe_*tools) covers every doctype and every whitelisted method — present and future. A curated layer makes the frequent settings/sync/report ops one call.Talks to Frappe over HTTPS with token auth (
Authorization: token key:secret).Safety: delete/cancel/submit and destructive methods — including this domain's own high-consequence verbs (dispose / push / charge / consolidate) — require
confirm=true; password/credential fields are never transmitted (set those in Desk); schema/permission doctypes are read-only.
Related MCP server: Gunsnation MCP
Setup
1. Generate a Frappe API key
In Desk as the user you want to act as (Administrator): top-right avatar → My Settings → API Access → Generate Keys. Copy the API Key and API Secret (the secret is shown only once).
2. Configure credentials
cp .env.example .env
# edit .env: FRAPPE_BASE_URL, FRAPPE_API_KEY, FRAPPE_API_SECRET.env is git-ignored. Point at dev first (http://dev.localhost:8000) to test,
then switch to prod (https://pos.oldsteelarsenal.com).
3. Install
uv sync # creates .venv and installs deps4. Register with your agent
/path/to/gunstore-pos-mcp below is wherever you cloned this repo (the package is
at the repo root). The server loads .env by its own file path, so credentials
never go in the agent config.
Claude Code — add to .mcp.json (project) or run claude mcp add:
{
"mcpServers": {
"gunstore-pos": {
"command": "uv",
"args": ["run", "--directory", "/path/to/gunstore-pos-mcp", "gunstore-mcp"]
}
}
}Claude Desktop — the same block in claude_desktop_config.json.
Codex — add to ~/.codex/config.toml, then restart Codex (it reads MCP
servers at startup):
[mcp_servers.gunstore-pos]
command = "uv" # or an absolute path to uv if it isn't on Codex's PATH
args = ["run", "--directory", "/path/to/gunstore-pos-mcp", "gunstore-mcp"]
startup_timeout_sec = 120Verify with a quick stdio handshake (initialize + tools/list) or just list
tools from within Codex.
Secrets stay in .env (loaded by the server), not in the agent config.
Tools
中文速查手册(按"你想干什么"组织,含安全须知与替代路径):TOOLS.md
Generic backbone
Tool | Purpose |
| list any doctype (filters / fields / limit; |
| fetch one doc (Single: |
| fields incl. custom fields; flags password fields |
| create (credential fields stripped) |
| update (credential fields stripped) |
| delete — needs |
| submit a draft — needs |
| cancel a submitted doc — needs |
| call any whitelisted method by dotted path |
| run a Script/Query report |
Curated
Tool | Purpose |
|
|
| typeahead item search / stock per item / in-stock serials + per-gun prices |
| the Firearms In Stock report |
| Purchase Receipt + FFL acquisitions + FastBound push ( |
| non-serialized stock add / absolute set ( |
| gunsmith flag on a Serial No ( |
| RSR catalog search / full sync / FTPS probe |
| RSR catalog row → sellable Item / backfill Item fields ( |
| FB probe / per-gun correction push ( |
| ATF eZ-Check verifies ( |
| store probe / list / delist / reconcile an Item — all take |
| list / delist ONE gun (SKU |
| per-gun Woo listing title (writes |
| the Pending Order queue: counter/dealer rows + paid web orders (read-only) |
| book the FFL transfer dispositions — stock-out + FastBound push ( |
| Payment Entry against an unpaid submitted invoice; Zelle needs |
| ShipStation label push ( |
| 4473 kickoff / stuck-sale manager override / customer transfer ( |
| multipart file upload → File doc, optionally attached to a doctype+name / Attach field |
Security notes
Uses the key's user (Administrator) = full access. Run locally only; keep
.envout of git (it is, by default).Credentials never transit the MCP: password-type and credential-named fields are stripped from every write. Set secrets in Desk directly.
All writes are logged by Frappe under the key's user (audit trail).
To revoke access, regenerate that user's keys in Desk.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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