Skip to main content
Glama
abdul-hamid-achik

Tarot MCP Server

list_spreads

Retrieve the list of all tarot spreads, including layouts like Celtic Cross and Past-Present-Future, to choose the right one for your divination.

Instructions

List all available tarot spreads

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • The getAllSpreads() method in the TarotTools class returns the full array of spreads from the data file. This is the core handler function that provides the data for the list_spreads tool.
    getAllSpreads(): TarotSpread[] {
      return spreads;
    }
  • src/index.ts:90-97 (registration)
    Tool registration for 'list_spreads' in the TOOLS array: defines name, description ("List all available tarot spreads"), and an empty inputSchema (no parameters required).
    {
      name: 'list_spreads',
      description: 'List all available tarot spreads',
      inputSchema: {
        type: 'object',
        properties: {},
      },
    },
  • The case 'list_spreads' handler in the CallToolRequestSchema switch statement. It calls tarotTools.getAllSpreads() and maps each spread to an object with id, name, description, and cardCount (derived from positions.length), returning it as formatted JSON.
    case 'list_spreads': {
      const spreads = tarotTools.getAllSpreads();
      return {
        content: [
          {
            type: 'text',
            text: JSON.stringify(spreads.map(s => ({
              id: s.id,
              name: s.name,
              description: s.description,
              cardCount: s.positions.length
            })), null, 2),
          },
        ],
      };
    }
  • The TarotSpread type definition used by the list_spreads tool - includes id, name, description, and positions (SpreadPosition[]). The cardCount in the output is derived from positions.length.
    export interface TarotSpread {
      name: string;
      id: string;
      description: string;
      positions: SpreadPosition[];
    }
  • The spreads data array containing all available tarot spreads (Single Card, Past-Present-Future, Celtic Cross, etc.). This is the data that getAllSpreads() returns and that the list_spreads tool serves to the user.
    import { TarotSpread } from '../types/tarot.js';
    
    export const spreads: TarotSpread[] = [
      {
        id: 'single-card',
        name: 'Single Card',
        description: 'A simple one-card draw for quick insight or daily guidance',
        positions: [
          { number: 1, name: 'Present', meaning: 'Current situation or energy' }
        ]
      },
      {
        id: 'past-present-future',
        name: 'Past, Present, Future',
        description: 'A three-card spread showing temporal progression',
        positions: [
          { number: 1, name: 'Past', meaning: 'Past influences affecting the situation' },
          { number: 2, name: 'Present', meaning: 'Current situation and energies' },
          { number: 3, name: 'Future', meaning: 'Likely outcome or future direction' }
        ]
      },
      {
        id: 'situation-action-outcome',
        name: 'Situation, Action, Outcome',
        description: 'A practical three-card spread for decision making',
        positions: [
          { number: 1, name: 'Situation', meaning: 'Current circumstances' },
          { number: 2, name: 'Action', meaning: 'Recommended action or approach' },
          { number: 3, name: 'Outcome', meaning: 'Likely result if action is taken' }
        ]
      },
      {
        id: 'mind-body-spirit',
        name: 'Mind, Body, Spirit',
        description: 'A holistic three-card spread for self-reflection',
        positions: [
          { number: 1, name: 'Mind', meaning: 'Mental state and thoughts' },
          { number: 2, name: 'Body', meaning: 'Physical world and material concerns' },
          { number: 3, name: 'Spirit', meaning: 'Spiritual energy and higher self' }
        ]
      },
      {
        id: 'celtic-cross',
        name: 'Celtic Cross',
        description: 'The classic 10-card spread for in-depth analysis',
        positions: [
          { number: 1, name: 'Present Situation', meaning: 'Current circumstances and state of being' },
          { number: 2, name: 'Cross/Challenge', meaning: 'What crosses you - challenges or opposing forces' },
          { number: 3, name: 'Distant Past', meaning: 'Foundation and root of the matter' },
          { number: 4, name: 'Recent Past', meaning: 'Recent events leading to present' },
          { number: 5, name: 'Possible Future', meaning: 'Potential outcome if path continues' },
          { number: 6, name: 'Immediate Future', meaning: 'What will happen in the near future' },
          { number: 7, name: 'Your Approach', meaning: 'Your current approach to the situation' },
          { number: 8, name: 'External Influences', meaning: 'Environmental factors and other people' },
          { number: 9, name: 'Hopes and Fears', meaning: 'Your deepest hopes or fears about the outcome' },
          { number: 10, name: 'Final Outcome', meaning: 'The likely final outcome' }
        ]
      },
      {
        id: 'relationship-spread',
        name: 'Relationship Spread',
        description: 'A 7-card spread examining relationship dynamics',
        positions: [
          { number: 1, name: 'Your Feelings', meaning: 'How you feel about the relationship' },
          { number: 2, name: 'Their Feelings', meaning: 'How they feel about the relationship' },
          { number: 3, name: 'Connection', meaning: 'The nature of your connection' },
          { number: 4, name: 'Challenges', meaning: 'Current or upcoming challenges' },
          { number: 5, name: 'Strengths', meaning: 'Relationship strengths to build on' },
          { number: 6, name: 'Advice', meaning: 'Guidance for the relationship' },
          { number: 7, name: 'Potential', meaning: 'Where the relationship is heading' }
        ]
      },
      {
        id: 'career-spread',
        name: 'Career Path',
        description: 'A 5-card spread for career guidance',
        positions: [
          { number: 1, name: 'Current Position', meaning: 'Your current career situation' },
          { number: 2, name: 'Strengths', meaning: 'Your professional strengths' },
          { number: 3, name: 'Challenges', meaning: 'Obstacles to overcome' },
          { number: 4, name: 'Opportunities', meaning: 'Upcoming opportunities' },
          { number: 5, name: 'Outcome', meaning: 'Career trajectory if current path continues' }
        ]
      },
      {
        id: 'horseshoe',
        name: 'Horseshoe',
        description: 'A 7-card spread for general guidance',
        positions: [
          { number: 1, name: 'Past', meaning: 'Past influences' },
          { number: 2, name: 'Present', meaning: 'Current situation' },
          { number: 3, name: 'Hidden Influences', meaning: 'Unseen factors at play' },
          { number: 4, name: 'Obstacles', meaning: 'Challenges to overcome' },
          { number: 5, name: 'Environment', meaning: 'External influences' },
          { number: 6, name: 'Advice', meaning: 'Recommended approach' },
          { number: 7, name: 'Outcome', meaning: 'Most likely outcome' }
        ]
      },
      {
        id: 'year-ahead',
        name: 'Year Ahead',
        description: 'A 12-card spread with one card for each month',
        positions: [
          { number: 1, name: 'January', meaning: 'Energy and themes for January' },
          { number: 2, name: 'February', meaning: 'Energy and themes for February' },
          { number: 3, name: 'March', meaning: 'Energy and themes for March' },
          { number: 4, name: 'April', meaning: 'Energy and themes for April' },
          { number: 5, name: 'May', meaning: 'Energy and themes for May' },
          { number: 6, name: 'June', meaning: 'Energy and themes for June' },
          { number: 7, name: 'July', meaning: 'Energy and themes for July' },
          { number: 8, name: 'August', meaning: 'Energy and themes for August' },
          { number: 9, name: 'September', meaning: 'Energy and themes for September' },
          { number: 10, name: 'October', meaning: 'Energy and themes for October' },
          { number: 11, name: 'November', meaning: 'Energy and themes for November' },
          { number: 12, name: 'December', meaning: 'Energy and themes for December' }
        ]
      },
      {
        id: 'decision-making',
        name: 'Decision Making',
        description: 'A 5-card spread for making difficult decisions',
        positions: [
          { number: 1, name: 'The Decision', meaning: 'The core of the decision' },
          { number: 2, name: 'Option A Result', meaning: 'Outcome if you choose option A' },
          { number: 3, name: 'Option B Result', meaning: 'Outcome if you choose option B' },
          { number: 4, name: 'What You Need to Know', meaning: 'Important information to consider' },
          { number: 5, name: 'Guidance', meaning: 'Overall guidance for your decision' }
        ]
      }
    ];
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Only states it lists spreads, with no mention of read-only nature, return format, or any side effects. Minimal information for an agent to understand behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with no wasted words. Front-loaded and appropriately sized for the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple listing tool with no parameters and no output schema, the description is adequate. However, it could hint at the return format (e.g., names or IDs) to improve completeness. Still sufficient for the task.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has zero parameters, so description adds no parameter info. Baseline for 0 params is 4, and schema coverage is trivially 100%. No additional semantics needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description explicitly states the tool lists all available tarot spreads, with a specific verb and resource. It clearly distinguishes from sibling tools like 'list_all_cards' and 'get_spread_info'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like 'get_spread_info' or 'search_cards'. The description implies using it to get an overview, but lacks explicit when-to-use or when-not-to-use instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/abdul-hamid-achik/tarot-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server