Skip to main content
Glama
kkroekerMTB

Tally MCP Server

by kkroekerMTB
README.md
# mymarketaccount.net Tally MCP Server

Lightweight Node MCP server for querying Tally product/category data used by `mymarketaccount.net`.

It uses the same endpoints seen in the web app:
- `GET /cartapi/cart/categories`
- `GET /cartapi/cart/products`

and sends `Authorization: Bearer <token>`.

## Prerequisites

- Node.js 18+
- A valid Tally bearer token (not the gateway/Auth0 token)
- Your `locationId` and `accountId`

## Install

```bash
npm install
```

## Run

```bash
npm start
```

## Optional environment variables

- `TALLY_TOKEN` default bearer token
- `TALLY_LOCATION_ID` default `4dfd336941716947dba20acffc45660d`
- `TALLY_ACCOUNT_ID` default account
- `TALLY_PAGE_SIZE` default page size for product paging (default `100`)
- `TALLY_BASE_URL` default `https://tally.prod.readytouchpos.com`
- `TALLY_API_KEY` default `3C9DEDE2-EC3E-43E3-9C20-E591ED341127`

## MCP tools

- `set_tally_token(token)`
- `list_categories(locationId?, token?)`
- `list_products(locationId?, accountId?, token?, category?, search?, minPrice?, maxPrice?, sortBy?, limit?, pageSize?, maxPages?, maxRecords?)`
- `ask_products(question, locationId?, accountId?, token?, category?, search?, minPrice?, maxPrice?, sortBy?, limit?, pageSize?, maxPages?, maxRecords?)`

`ask_products` supports lightweight question inference for phrases like:
- `under $3`
- `over 5`
- `between 2 and 4`
- `top 10`
- `cheapest`, `best deal`, `average`, `how many`

## Example MCP client config

```json
{
  "mcpServers": {
    "tally": {
      "command": "node",
      "args": ["/home/kurtk/mtb-hq-snack-kiosk-mcp/src/index.js"],
      "env": {
        "TALLY_LOCATION_ID": "4dfd336941716947dba20acffc45660d",
        "TALLY_ACCOUNT_ID": "<account-id>"
      }
    }
  }
}
```

```toml
[mcp_servers.tally]
command = "node"
args = ["<path to repo>/src/index.js"]

[mcpServers.tally.env]
TALLY_LOCATION_ID = "4dfd336941716947dba20acffc45660d"
TALLY_ACCOUNT_ID = "<account-id>"
```

Then call:
1. `set_tally_token` with your current token.
2. `ask_products` or `list_products` for product/price questions.

## Notes

- Token minting (`/tallyapi/auth/register` and `/tallyapi/auth/login`) is intentionally not implemented here; this server expects an already valid token.
- Token set via `set_tally_token` is held in process memory for the running MCP session.

TDQS

B3.2/5.0

Scored across 4 tools

Disambiguation4/5

set_tally_token and list_categories are clearly distinct from the other tools. list_products and ask_products both retrieve product data, so they could be confused, but their descriptions separate structured filtering from natural-language querying.

Naming Consistency4/5

Most tool names follow a clear verb_noun snake_case pattern: set_tally_token, list_categories, list_products. ask_products deviates slightly from the action style but remains readable and consistent with the overall convention.

Tool Count4/5

Four tools form a compact, focused server for exploring and querying product/category data. The count is small but appropriate for a read-oriented Tally integration, and each tool has a clear role.

Completeness4/5

The set covers authentication, category listing, product listing/filtering, and natural-language product questions, which covers the core query workflow. Some gaps exist, such as no explicit product detail-by-ID or location-listing tool, but agents can likely work around these.

Maintenance

ActivityInactive
ResponsivenessNo issues