Downloads
Every skill, rule and profile has a download count. It appears next to the artifact on the site and in the MCP list tools. This page explains what increases it, what is recorded each time, and what the number does and does not tell you.
What counts as a download
A download is counted when the server has assembled an artifact's files and is about to hand them over. There are two ways to get them, and both count:
- An archive download. A request for the
.tar.gzof an artifact, such as the link on its page, that finds files to put in it. - An MCP install. A call to
install_skill,install_ruleorinstall_profilethat finds the artifact's files.
These do not count:
- viewing a listing, an artifact page or one of its tabs
- the MCP list and version tools
- a request for an unknown artifact or version, which returns an error and not files
- archive downloads from a locally running website, which is a development setup
Every successful request counts. Nothing removes repeats from the same person or address, and nothing filters out scripts or bots.
What is recorded
Each counted download makes two writes in DynamoDB.
The counter
The openkata-downloads table has one row for each artifact. Its key
is <type>/<name>, for example skills/grill-me, and its
downloads attribute goes up by one with an atomic add. All
versions of an artifact share the same counter, so the count says how
often the artifact was fetched, not which version.
The event
The openkata-download-events table gets one row for each download,
keyed by artifact and timestamp. It keeps these fields:
| Field | Value |
|---|---|
artifact |
<type>/<name> |
timestamp |
The time of the download, in UTC |
version |
The version that was served |
source |
web for an archive download, mcp for an MCP install |
client |
The kind of client, as described below |
country |
The viewer's country, for archive downloads |
For an archive download, the client is guessed from the
User-Agent header, checking in this order: a name containing
claude gives Claude-Desktop, cursor gives Cursor, kiro
gives Kiro, curl gives curl, and mozilla gives browser.
Anything else is unknown. The country comes from the
CloudFront-Viewer-Country header that CloudFront adds.
An MCP install always records the client as unknown and leaves the
country empty, because the server does not look at either.
Failures
A download does not depend on its bookkeeping. If the counter update fails, the error is ignored and that download is not counted. If the event write fails, the error is logged and the download still completes. The counts are therefore best-effort: a failed write means a missed count. The count is also taken when the files are ready, so a download that the client then abandons is still counted.
If the counter table cannot be read, pages and the MCP list tools
show 0 for every artifact.
Where the counts appear
- The skills, rules and profiles listings, as
42 ↓next to each entry. - The artifact's own page, next to the
.tar.gzlink. - The
downloadsfield of every entry thelist_skills,list_rulesandlist_profilestools return.
The counts are read from the table each time a listing, an artifact page or an MCP list result is built, so a new download shows up on the next load.