sadakio-mcp
MCP server for the Sadakio Public API. It gives any MCP client — Claude Code, Claude Desktop, Cursor, your own agent — read access to one business's own guests, visits and retention numbers.
Sadakio is the operating layer for small hospitality businesses in Türkiye: guest base, loyalty programme, return visits, QR menu, Apple Wallet cards. If you are building something for cafés, salons or shops — your own product, a dashboard for a client, or an integration with a POS you already sell — this is the read side of that data without you having to build and run a loyalty engine.
Read-only today, because the Public API v1 is read-only. Write tools arrive with the write endpoints, and each one will name the guard it goes through.
Install
Nothing to install. Point your client at it with uvx.
Get a key
A business owner creates the key in the Sadakio panel under Ayarlar → API. The raw key is shown once, at creation; only its fingerprint is stored.
Each key belongs to exactly one business and carries the read scope. It can
never name another business's row — a foreign id answers 404, not 403, so
the API cannot be used to discover what exists elsewhere.
Configure
{
"mcpServers": {
"sadakio": {
"command": "uvx",
"args": ["sadakio-mcp"],
"env": { "SADAKIO_API_KEY": "your key from Ayarlar → API" }
}
}
}
Claude Code takes the same block in .mcp.json, Claude Desktop in
claude_desktop_config.json, Cursor in .cursor/mcp.json.
This is the Python twin of sadakio-mcp on npm. Same four tools, same names,
same wording, so an agent gets the same answer whichever one you installed —
pick whichever fits your stack.
| Variable | Required | Default |
|---|---|---|
SADAKIO_API_KEY |
yes | — |
SADAKIO_BASE_URL |
no | https://api.sadakio.com/api/v1 |
Tools
| Tool | What it answers |
|---|---|
list_guests |
The business's guest base, cursor-paginated. updated_since matches guests who visited or were created since that moment, so an incremental sync never misses a brand-new guest. |
get_guest |
One guest with their loyalty cards and balances. |
list_visits |
The earn-event feed: stamps, points, cashback, redeems. |
get_retention |
Returned-guest numbers over a window. |
Two resources come with it: sadakio://docs/quickstart, which an agent can read
before its first call, and sadakio://docs/openapi, which fetches the live
contract rather than a vendored copy that would drift on the next deploy.
Four things worth knowing before you trust a number
Phones are always masked. Last four digits only, and there is no unmasked path. This is a KVKK decision, not a scope you can request your way past.
Pagination is by cursor. Every list answers with data and next_cursor;
pass next_cursor back as cursor, and null means you are on the last page.
Cursors run by ascending id, so a page stays stable while new rows arrive.
A reversed earn keeps its row, with reversed_at set. History is never
deleted, so exclude reversed rows yourself when you count.
No money figure is invented. get_retention returns
estimated_returned_value only when you supply a real avg_ticket. Without
one, you get counts and no currency.
Errors
Failures come back as tool errors carrying the API's own message plus the one
step that fixes it. 401 means the key is missing, unknown or revoked. 403
means the key lacks a scope, or the business account is not active. 404 means
the row is not inside this key's business. 422 names the parameter. On 429
the message carries the seconds from Retry-After; nothing is retried behind
your back, so your agent decides when to come back.
The host serves only /api/v1; everything else there answers 404. The older
https://app.sadakio.com/api/v1 still answers identically and is not
deprecated, so nothing already integrated needs to move.
Contract
The machine-readable contract is served publicly, without a key, at
https://api.sadakio.com/api/v1/openapi.yaml. Response fields may be added
over time, never renamed or removed — so parse leniently and you will not be
broken by a release.
Examples you can read and run: https://github.com/lio-maker/sadakio-examples
Docs and quickstart: https://sadakio.com/gelistirici Questions: biz@sadakio.com
Python 3.10 and up. MIT licensed. Built by the Sadakio team, and pull requests are welcome.
Release files for sadakio-mcp 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sadakio_mcp-0.1.1.tar.gz | 12.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sadakio_mcp-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 24.8 kB
Release files / sadakio_mcp-0.1.1.tar.gz
| Download URL | sadakio_mcp-0.1.1.tar.gz |
|---|---|
| Size | 12.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
61d8d10eda83d1663795aaabef3da2cc8a06157feffc6f26cf7ec13988bbf2ad
|
|
BLAKE2b-256 checksum How to use checksums |
84926c5f59d3279f8bc33b76863b4e5da82a7b0b5178946a10556511c2e29b35
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 20, 2026.
Transparency logRelease files / sadakio_mcp-0.1.1-py3-none-any.whl
| Download URL | sadakio_mcp-0.1.1-py3-none-any.whl |
|---|---|
| Size | 12.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
11f2909ed8171c5f8f15940cb8aaacf647b460d2c74dd1d3fa889893f0dd6552
|
|
BLAKE2b-256 checksum How to use checksums |
a3845f1ed2361165f607a2f7e10da957329111dd9e87a18e535151c4cfc5c0d6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 20, 2026.
Transparency log