Clover POS for a single merchant: sales, inventory, orders, customers (reads + safe writes).
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Inspect callable tools, capabilities, and parameters exposed to AI agents by Clover POS.
get_merchant_infoprofile + POS config (banking fields never returned)
get_sales_summaryaggregated window (see [Sales summary semantics](#sales-summary-semantics))
get_sales_by_employeeemployee attribution, tip-out, and merchant-local daypart reporting (`PAYMENTS_R`; employee names are best-effort)
list_paymentspayments, refunds, credits, tender types
list_ordersorder history + detail
list_itemsinventory + stock; `get_item(include=[...])` opts in to `modifier_groups`/`tax_rates`/`categories`/`tags` association detail
MCP server for the Clover POS REST API β gives AI assistants (Claude, Cursor, etc.) read and safe-write access to a Clover merchant's sales, inventory, orders, and customers.
Status: v0.7.0 released; working tree (unreleased) β 56 tools, 6 prompts, both auth modes, 399 tests. Runs locally (stdio, single merchant) or remotely over HTTP with OAuth, single- or multi-tenant (see docs/DEPLOY.md). Endpoint contracts are sandbox-verified in docs/endpoints.md.
β οΈ Independent project β not affiliated with, endorsed by, or sponsored by Clover Network, LLC or Fiserv, Inc. "Clover" is a trademark of its respective owner and is used here only nominatively to describe interoperability. Provided as is, without warranty β see Legal & disclaimer.
What it cannot do (by design): process refunds, capture payments, void charges, delete records. Those stay in the Clover dashboard.
| Tool | Kind | Notes |
|---|---|---|
get_merchant_info / get_merchant_properties | read | profile + POS config (banking fields never returned) |
get_sales_summary | read | aggregated window (see Sales summary semantics) |
get_sales_by_employee / get_tips_by_employee / get_sales_by_hour | read | employee attribution, tip-out, and merchant-local daypart reporting (PAYMENTS_R; employee names are best-effort) |
list_payments / list_refunds / list_credits / list_tenders | read | payments, refunds, credits, tender types |
list_orders / get_order / list_open_orders / list_order_types | read | order history + detail |
list_items / get_item / list_low_stock_items | read | inventory + stock; get_item(include=[...]) opts in to modifier_groups/tax_rates/categories/tags association detail |
list_categories / list_modifiers / list_taxes / list_item_groups / list_attributes / list_tags / list_discounts | read | catalog structure |
list_tip_suggestions / get_default_service_charge | read | tip presets + service-charge config |
list_devices / list_opening_hours / list_cash_events | read | terminals, hours, cash-drawer log |
get_top_items | read | best-sellers by units in a window |
list_employees / get_employee / list_shifts / list_active_shifts / list_roles | read | PINs never returned (EMPLOYEES_R) |
search_customers / get_customer | read | cards never returned |
whoami | read | multi-tenant identity diagnostic (no secrets) |
summarize_sales / inventory_reorder_suggestions / detect_sales_anomalies / suggest_item_categories / draft_customer_message | AI | reason via your client's model; read-only suggestions |
create_customer / update_customer | write | dup-check + dry_run; update confirms via elicitation |
create_item / create_category / create_order / add_line_item | write | guarded: dry_run + confirm before writing |
set_item_price_cents / set_item_stock_quantity / update_item_name | write | optimistic-lock pre-check, bounds, dry_run |
apply_order_discount | write | exactly one of percentage / amount_cents / catalogue_discount_id; negates positive amount_cents to Clover's required negative wire value; catalogue path resolves name+value client-side; dry_run preview includes a client-computed line-item subtotal |
create_modifier_group / create_modifier / create_tag | write | dup-guard (group/tag) or parent pre-check (modifier); guarded: dry_run + confirm before writing |
Every tool carries MCP behaviour annotations (readOnlyHint / destructiveHint / idempotentHint) so clients can parallelize reads and prompt before writes.
Published on PyPI β no clone needed:
From source (for development):
Copy .env.example to .env and fill in your values:
Required:
| Variable | Description |
|---|---|
CLOVER_MERCHANT_ID | Your Clover merchant ID |
CLOVER_ACCESS_TOKEN | Your Clover API access token |
Optional:
| Variable | Default | Description |
|---|---|---|
CLOVER_REGION | na | na, eu, or la |
CLOVER_SANDBOX | false | true to use the Clover sandbox |
CLOVER_AUTH_MODE | token | token or oauth_refresh |
CLOVER_READ_ONLY | false | Refuse every write before making a Clover request |
CLOVER_WRITE_LIMIT_COUNT | 10 | Maximum writes per safety window; 0 disables, negative values are rejected |
CLOVER_WRITE_LIMIT_WINDOW_S | 300 | Positive write-safety window in seconds |
token β paste a static access token. Works for sandbox and single-merchant production use. If the token expires, regenerate it in the Clover Developer Dashboard.oauth_refresh β the server auto-refreshes on expiry and persists the new token pair to CLOVER_TOKEN_STORE (default: ~/.config/clover-mcp/tokens.json, mode 0600). Clover refresh tokens are single-use, so the rotated pair is written back after each refresh. Run scripts/get_sandbox_token.py to obtain tokens β it writes them straight to the store, so you only set CLOVER_AUTH_MODE, CLOVER_OAUTH_CLIENT_ID, CLOVER_OAUTH_CLIENT_SECRET, and CLOVER_MERCHANT_ID in .env (no token values needed). Pasting CLOVER_ACCESS_TOKEN / CLOVER_REFRESH_TOKEN into .env still works as an alternative.Use a least-privilege token. Grant only the permission scopes the tools you actually use require (see the table below). A read-only deployment needs no
*_Wscopes at all. Don't reuse a production token in sandbox or vice versa.
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
Add to .cursor/mcp.json in your project (or ~/.cursor/mcp.json globally):
Your token must have the following Clover permission scopes:
| Permission | Used by |
|---|---|
MERCHANT_R | get_merchant_info |
ORDERS_R | list_orders, get_order, list_open_orders |
PAYMENTS_R | list_payments, list_refunds, list_credits, get_sales_summary, get_sales_by_employee, get_tips_by_employee, get_sales_by_hour |
ORDERS_R | β¦also get_top_items |
INVENTORY_R | list_items, get_item, list_low_stock_items, list_categories, list_modifiers, list_taxes, list_discounts, list_item_groups, list_attributes, list_tags |
INVENTORY_W | set_item_price_cents, set_item_stock_quantity, create_item, create_category, update_item_name, create_modifier_group, create_modifier, create_tag |
ORDERS_W | create_order, add_line_item, apply_order_discount |
CUSTOMERS_R | search_customers, get_customer |
CUSTOMERS_W | create_customer, update_customer |
EMPLOYEES_R | list_employees, get_employee, list_shifts, list_active_shifts, list_roles (optional) |
MERCHANT_R | β¦also list_devices, list_tenders, list_order_types, list_opening_hours, list_cash_events, list_tip_suggestions, get_default_service_charge |
Read scopes (*_R) are probed at startup; the server warns about any missing ones (it no longer exits β a hosted server must still start) and the affected tools return a 403 when called. EMPLOYEES_R is optional. Write scopes (*_W) are not probed (a probe would mutate data) β a missing write scope surfaces as a 403 the first time you call that tool. Permission changes on a Clover app require the merchant to reinstall the app.
By default this runs locally over stdio for a single merchant. To run it remotely:
Factual signals from GitHub, npm, and our automated checks β not a rating.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/clover-pos)<a href="https://allmcps.com/mcp/clover-pos"><img src="https://allmcps.com/api/badge/clover-pos?style=directory" alt="Clover POS on AllMCPs" /></a>