Tally MCP Server
# 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
Scored across 4 tools
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.
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.
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.
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.