Tarot MCP Server
The Tarot MCP Server provides a bilingual tarot reading service with a visual card table, supporting MCP, WebMCP, HTTP API, and a standalone web UI.
Perform tarot readings using 25+ spreads (single card, Celtic Cross, relationship, career, moon phase, etc.) with customizable questions and session tracking.
Get card information — retrieve detailed meanings for any of the 78 Rider–Waite–Smith cards, with upright/reversed orientation and English/Chinese output.
Search and filter cards — by keyword, suit, element, arcana, number, and orientation; also find similar cards based on meaning.
Get random or daily cards — draw random cards with filters or receive a daily guidance card with optional question.
Compare cards — analyze 2–5 cards together to understand their relationships and combined message.
Create custom spreads — define your own positions and meanings, then draw cards for a fully personalized layout.
Get spread recommendations — receive the most suitable spread based on your question, category, and timeframe.
Moon phase readings — receive a reading tailored to the current (or specified) moon phase.
Session management — maintain persistent reading history within a session and retrieve past summaries.
Database analytics — obtain comprehensive statistics about the card database and improvement recommendations.
Interactive visual draws — via the embedded MCP App UI or browser WebMCP, you can manually shuffle, cut, and select face-down cards before revealing the reading.
Multiple integration surfaces — supports MCP (stdio, HTTP, SSE), MCP Apps, experimental WebMCP browsers, and a standalone HTTP API/web page.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Tarot MCP Server do a Celtic Cross reading about my career path this year"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Tarot MCP
A bilingual tarot reading service and visual card table, built with TypeScript, React and Vite. It includes a complete 78-card Rider–Waite–Smith deck, original Midnight Art Nouveau artwork, 25 built-in spreads, and daily, moon-phase and custom readings.
Write a question, start each shuffle yourself, cut the current deck, and choose face-down cards in order. Confirmation keeps the table visible and retries the same selection; it never silently draws replacement cards. Reveal the cards individually before the overall interpretation appears. In an embedded MCP App, the reader can then explicitly hand the reading to the host conversation; a host that only stages that message says so instead of claiming it was sent. The standalone Web page keeps the server's local interpretation and does not claim to send it anywhere.
Run locally
Requires Node.js 20.19 or later and npm.
npm ci
npm run start:http -- --host 127.0.0.1npm ci runs the package's prepare build. Open
the card table. To rebuild after changes:
npm run buildFor server development, npm run dev:http -- --host 127.0.0.1 executes the
TypeScript source. Rebuild the UI with npm run build:ui after frontend edits;
these commands do not start a Vite development server or hot reload the page.
Related MCP server: Tarot MCP Server
Which protocol is this?
Surface | Implementation | Entry point |
MCP server | Official MCP SDK; stdio, Streamable HTTP and legacy SSE |
|
MCP Apps | Official Apps SDK; single-file embedded React UI |
|
Browser WebMCP | Experimental imperative provider using |
|
HTTP API | Express routes used by the standalone web page |
|
WebMCP is a Community Group draft, not a finalized W3C Standard. The browser provider follows the September 4, 2026 draft's registration surface and also handles Chrome 152's execution callbacks. Unsupported browsers retain the manual card table. MCP Apps and an HTTP MCP endpoint alone are not WebMCP. See the WebMCP implementation notes for the source references, exposed tools, browser differences and verification instructions.
Connect an MCP client
For a local checkout, use the absolute built entry path:
{
"mcpServers": {
"tarot": {
"command": "node",
"args": ["/absolute/path/to/tarot-mcp/dist/index.js"]
}
}
}For a client accepting a remote Streamable HTTP URL, use
http://127.0.0.1:3000/mcp. If MCP_AUTH_TOKEN is configured, supply its Bearer
authorization header. The web page accepts the same token under Connection
settings and stores it only in the current browser tab's session storage.
An MCP Apps client renders the table in its conversation. For local stdio clients without Apps support, the default browser fallback opens a temporary loopback page for the same pending draw. The original tool call stays pending until the user confirms, allowing the conversation to continue with the result. HTTP/SSE servers do not open a browser on the server machine.
Client and environment configuration covers Cursor, ChatWise's long-running option, browser fallback modes, session persistence, authentication and origin/host allowlists.
Code map
Location | Responsibility |
| Canonical deck, card validation, search, analysis and formatting |
| Spreads, reading interpretation, visual draw lifecycle and sessions |
| Domain types, shared visual input schema, localization and utilities |
| Tool implementations calling the domain services |
| MCP protocol, Apps capabilities and browser handoff delivery |
| HTTP listener, middleware and public static assets |
| REST routing, MCP transport sessions and JSON-RPC errors |
| Async requests, cancellation, retries and reading transitions |
| Card selection, animation state and stage composition |
| Browser feature detection, tool registration and live page access |
| Ordered styles for setup, controls, ritual, draw, reading and responsive behavior |
| Web and MCP artwork variants, manifest and QA evidence |
| Reproducible artwork processing and verification |
Original PNGs, artwork provenance and QA files are retained because they are inputs or evidence for the deck pipeline. Full-resolution sources and contact sheets are excluded from the distributable build; they are not duplicate runtime assets. See the artwork workflow.
Checks
npm run build # Server, Web UI, self-contained MCP App and assets
npm run test:all # Domain, transport, UI and WebMCP regression tests
npm run lint
npm run verify:build # Deck integrity and packaged asset checksnpm run test:coverage measures the server suite. Transport tests need permission
to listen on loopback ports and create local IPC sockets.
The UI suite covers selection order, cut/shuffle behavior, confirmation retries, reveal and details, localization, host handoff, and WebMCP lifecycle/cancellation. Native browser checks are described in WebMCP verification.
Deploy
The personal ChatGPT deployment uses the official Secure MCP Tunnel, not a
public endpoint or directory submission. The base Compose listener is restricted
to 127.0.0.1:3000; the tunnel override adds container-to-container Bearer auth
and the pinned ghcr.io/openai/tunnel-client:v0.0.14 image on the project network.
On the chosen server, with Docker running, Compose v2 or newer, curl, and the GitHub CLI available:
cp -n .env.example .env
# Fill the three values privately in .env; do not commit or print the file.
gh attestation verify oci://ghcr.io/openai/tunnel-client:v0.0.14 -R openai/tunnel-client && \
bash deploy.shStop if provenance verification fails. deploy.sh validates required variables
without printing resolved secrets, builds without first taking the service down,
and checks tarot health followed by private tunnel readiness. Readiness is not
proof that ChatGPT has discovered or used the connection.
See private ChatGPT setup
for the runtime-key/organization/workspace requirements, No Authentication
connection, refresh procedure, and verification commands. Use the local Web page
or your own SSH local forwarding; this configuration does not publish /draw to
the internet. The named tarot-sessions volume preserves reading history.
Pending draws remain process-local and are lost on restart; the UI asks the
reader to start again instead of retrying an invalid deck indefinitely.
Claude connects to the same container through a TLS reverse proxy instead of the
OpenAI tunnel. Its custom connectors take a URL with no header field, so the
proxy publishes one unguessable path that maps to /mcp and injects the Bearer
token; every other path on that hostname returns 404. See
private Claude connector
for the proxy requirements, buffering constraints and the host-side widget
rendering caveats.
Further documentation
Code is licensed under MIT. Artwork has its own documented provenance and licensing terms.
Available Tools
14 toolscreate_custom_spreadA
Create a custom tarot spread and draw cards for it. Use this when no existing spread fits your needs and you want to create your own layout with specific positions and meanings.
Inputs: question (required), positions (required), spreadName (required), description (required), +2 more. Returns: cards, question, readingId, sessionId, +3 more
find_similar_cardsARead-onlyIdempotent
Find cards with similar meanings to a given card
Inputs: cardName (required), limit.
get_card_infoARead-onlyIdempotent
Get detailed information about a specific tarot card from the Rider-Waite deck
Inputs: cardName (required), language, orientation.
get_card_meanings_comparisonARead-onlyIdempotent
Compare 2-5 tarot cards, including optional card orientation, to understand their relationships and combined message
Inputs: cards, context, language, cardNames.
get_daily_cardARead-only
Draw a single card for daily guidance and insight
Inputs: language, question. Returns: cards, question, readingId, sessionId, +3 more
get_database_analyticsARead-onlyIdempotent
Get comprehensive analytics and statistics about the tarot card database
Inputs: includeRecommendations.
get_moon_phase_readingBRead-only
Perform a tarot reading based on the current moon phase with an appropriate spread
Inputs: question (required), language, customDate.
get_random_cardsBRead-only
Get random cards with optional filtering
Inputs: suit, count, arcana, element.
get_session_historyARead-onlyIdempotent
List the readings performed so far in a session (summaries with spread, question, time, and drawn cards)
Inputs: sessionId (required). Returns: createdAt, sessionId, readingCount, storedReadings
list_all_cardsARead-onlyIdempotent
List all available tarot cards in the Rider-Waite deck
Inputs: category.
list_available_spreadsARead-onlyIdempotent
List all available tarot spreads with their positions and meanings
Inputs: language.
perform_readingC
Perform a tarot card reading using a specific spread
Inputs: question (required), spreadType (required), language, sessionId. Returns: cards, question, readingId, sessionId, +3 more
recommend_spreadARead-onlyIdempotent
Get a recommendation for the most appropriate tarot spread based on your question or situation
Inputs: question (required), category, language, timeframe. Returns: category, question, timeframe, recommendations
search_cardsARead-onlyIdempotent
Search for tarot cards using various criteria like keywords, suit, element, etc.
Inputs: suit, limit, arcana, number, +3 more. Returns: results, showing, totalMatches
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 14 tools
Each tool has a clearly distinct purpose, from card info to reading types to analytics. While some tools involve drawing cards, their contexts (daily, moon phase, custom spread, general reading) are well-defined and described.
All tools follow a consistent snake_case verb_noun pattern (e.g., get_card_info, perform_reading, list_available_spreads), making the naming predictable and easy to interpret.
14 tools cover the domain thoroughly without being excessive. Each tool serves a specific need in tarot reading, from database exploration to personalized readings.
The tool set covers core tarot functionalities: card info, various reading types, spread management, search, and history. Minor gaps like advanced filtering or reading notes exist but do not hinder primary use cases.
Maintenance
Related MCP Connectors
Tarot card meanings, spreads and seeded reproducible readings for AI agents, one API key.
tarot-draw MCP — wraps StupidAPIs (keyless — no credential needed)
78 astrology calculations, Tarot, symbolic readings and Vedic calendars via two scoped MCP tools.
Horoscope MCP — wraps the keyless Horoscope App API. https://horoscope-app-api.vercel.app
Related MCP Servers
- FlicenseBqualityDmaintenanceEnables users to perform tarot card readings and generate horoscopes based on specified dates, times, and locations. Provides mystical divination services through tarot draws and astrological calculations.2-
- AlicenseAqualityDmaintenanceProvides tarot card reading capabilities with a complete 78-card deck, multiple spread layouts (Celtic Cross, Past-Present-Future, etc.), and detailed card interpretations for divination and daily guidance.918 npm5MIT
- AlicenseAqualityBmaintenanceProvides tarot card meanings, spreads (three-card, yes/no), and random draws for any MCP-compatible client.59 npm3MIT
- AlicenseNot gradedqualityBmaintenanceProvides fortune-telling tools including tarot card spreads, Thai horoscope, zodiac info, and auspicious dates. Enables interactive tarot card picking via an MCP App UI and returns structured JSON for interpretation.1,950 npmMIT