Arcana Cli — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Arcana Cli (MCP Server) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A tarot reading CLI built with Ink. Full 78-card deck with authored interpretations for every card, six spread types, elemental dignities, animated terminal output, and an MCP server for LLM integration.
npm install
npm run buildTo make arcana available globally:
npm linkarcana # three-card spread (defaults to OS username)
arcana kelly # reading for "kelly"
arcana kelly --new # force a fresh draw
arcana card # single daily card
arcana yes-no # yes/no oracle (upright = yes)
arcana five-card # five-card cross
arcana horseshoe # seven-card horseshoe
arcana celtic-cross # ten-card celtic cross
arcana history # browse past readingsEach person gets one reading per day per spread type. Running again shows the same cards. --new forces a fresh draw.
| Spread | Cards | Positions |
|---|---|---|
| Three-Card (default) | 3 | past, present, future |
| Daily Card | 1 | present |
| Five-Card Cross | 5 | above, past, present, future, below |
| Horseshoe | 7 | past, present, future, self, environment, obstacle, outcome |
| Celtic Cross | 10 | present, challenge, past, future, above, below, self, environment, hopes & fears, outcome |
| Yes or No | 1 | upright = yes, reversed = no |
Pick your own cards from a shuffled pool. Arrow keys to navigate, Enter to select.
arcana -i
arcana kelly --interactiveFive ways to read reversed cards:
arcana --reversals opposite # authored reversed passage (default)
arcana --reversals blocked # upright meaning, blocked energy
arcana --reversals shadow # upright meaning, shadow/unconscious framing
arcana --reversals weakened # upright meaning, diminished intensity
arcana --reversals none # ignore reversals entirelyarcana --theme default # magenta/green palette
arcana --theme classic # yellow/cyan palette
arcana --no-color # disable color outputarcana history # your history
arcana history kelly # kelly's historyShows past readings in reverse chronological order. With five or more readings, includes pattern analysis: most drawn card, suit dominance, and reversal rate.
For scripts and LLM integrations:
arcana kelly --json
arcana celtic-cross kelly --json --newReturns the full reading as structured JSON: spread data, per-card interpretations, narrative text, and relational analysis.
Every card has authored passages for each position and orientation. The engine layers three things on top of the individual card readings:
An MCP server for LLM tool integration. Four tools over stdio:
| Tool | Description |
|---|---|
draw_reading | Draw a spread for a person. Supports all six spread types and reversal modes. |
get_card | Look up a card by ID or name with all interpretation passages. |
list_cards | Browse the deck, filtered by arcana or suit. |
reading_history | Retrieve recent readings for a person. |
node dist/mcp.jsThe project includes a .mcp.json that Claude Code auto-discovers when working in this directory.
For global access, add to ~/.claude/settings.json:
{
"mcpServers": {
"arcana": {
"command": "arcana-mcp"
}
}
}(Requires npm link so arcana-mcp is on your PATH.)
`draw_reading`
Input: { name: string, spread_type?: string, force_new?: boolean, reversal_mode?: string }
Output: { name, spread, reading: { cards, narrative, relational } }`get_card`
Input: { query: string } // "major-00", "fool", "ten of cups"
Output: { card, interpretations: { upright: { past, present, future, ... }, reversed: { ... } } }`list_cards`
Input: { arcana?: "major" | "minor", suit?: "cups" | "pentacles" | "swords" | "wands" }
Output: TarotCard[]`reading_history`
Input: { name: string, limit?: number }
Output: Reading[]Readings are stored in $XDG_DATA_HOME/arcana/ (defaults to ~/.local/share/arcana/), one JSON file per person per spread type, keyed by date. History is stored separately in {name}.history.json.
npm run dev # watch mode
npm run build # compile to dist/
npm start # run the CLI
npm run lint # eslint
npm run format # prettier~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.