Skip to main content

General Store MCP

Use @conto_finance/general-store-mcp when your own agent should browse the General Store, build carts, create quotes, request owner-approved checkout, and track order status.
The Store MCP server uses a Store connection token (conto_store_...), not an agent SDK key. Approval and payment links are never returned through the agent channel; the account owner receives those out of band.

Install

Claude Code

claude mcp add general-store \
  --env CONTO_STORE_TOKEN=conto_store_xxx... \
  --env CONTO_STORE_BASE_URL=https://conto.finance/api/store/v1 \
  -- npx -y @conto_finance/general-store-mcp

Claude Desktop and other MCP clients

{
  "mcpServers": {
    "general-store": {
      "command": "npx",
      "args": ["-y", "@conto_finance/general-store-mcp"],
      "env": {
        "CONTO_STORE_TOKEN": "conto_store_xxx...",
        "CONTO_STORE_BASE_URL": "https://conto.finance/api/store/v1"
      }
    }
  }
}

Raw REST

curl https://conto.finance/api/store/v1/merchants \
  -H "Authorization: Bearer conto_store_xxx..."
Base URL: https://conto.finance/api/store/v1 Required header: Authorization: Bearer $CONTO_STORE_TOKEN

Environment

VariableDefaultRequired
CONTO_STORE_TOKENnoneYes. Store connection token, format conto_store_....
CONTO_STORE_BASE_URLhttps://conto.finance/api/store/v1No. Override for local dev.

Tools

ToolREST endpointPurpose
list_merchants()GET /merchantsList live merchants with open-now and prep-time data.
get_menu({ merchant })GET /merchants/{slug}/menuRead available menu items.
build_cart({ merchant, items })POST /cartsBuild or replace the connection cart.
create_quote({ cartId })POST /quotesPrice the cart and show limits, expiry, and autoPayArmed.
start_checkout({ quoteId })POST /checkoutRequest checkout. Unarmed BYO orders return approval_pending; auto-pay armed orders can return paid.
get_order_status({ orderId or orderCode })GET /orders/{id}Read status, approval sub-state, and timeline.
list_orders({ status? })GET /ordersList recent orders, optionally filtered by status.
get_limits()GET /limitsRead per-order cap, daily cap, and remaining daily budget when the token has profile:read.

REST examples

Build a cart

curl -X POST https://conto.finance/api/store/v1/carts \
  -H "Authorization: Bearer $CONTO_STORE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "merchantId": "merchant_123",
    "items": [{ "menuItemId": "item_123", "qty": 1 }]
  }'

Create a quote

curl -X POST https://conto.finance/api/store/v1/quotes \
  -H "Authorization: Bearer $CONTO_STORE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "cartId": "cart_123" }'

Start checkout

curl -X POST https://conto.finance/api/store/v1/checkout \
  -H "Authorization: Bearer $CONTO_STORE_TOKEN" \
  -H "Idempotency-Key: general-store-mcp:quote_123" \
  -H "Content-Type: application/json" \
  -d '{ "quoteId": "quote_123" }'
For the default approval lane, the response is an order state for the agent and an approval email for the owner:
{
  "mode": "approval_pending",
  "orderId": "order_123",
  "orderCode": "GS-123ABC"
}
For an auto-pay armed quote, Conto can complete the charge under the owner’s saved ceiling and return a paid state without returning a payment link:
{
  "mode": "paid",
  "orderId": "order_123",
  "orderCode": "GS-123ABC",
  "paymentIntentId": "pi_123",
  "message": "Store auto-pay completed with the saved payment method."
}

Errors

The MCP package maps Store API errors into agent-readable messages:
API outcomeAgent guidance
429 or rate_limitedBack off before retrying.
policy_deniedTell the operator which cap or policy blocked checkout from the response details.
agent_blockedAsk the operator to check AgentScore verification or reputation.
insufficient_scopeAsk the owner to edit connection scopes.
validation_failedFix the tool input and retry.
The package sends user-agent: general-store-mcp/<version> on every request and does not log CONTO_STORE_TOKEN.