Skip to main content
Glama

tag_reviewed_cards

Add review date tags to Anki cards to track when they were last reviewed, using customizable tag prefixes for organization.

Instructions

Add a 'reviewed on date' tag to specified cards

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
card_idsYesArray of card IDs to tag as reviewed
custom_tag_prefixNoCustom prefix for the tag (default: '見直し')

Implementation Reference

  • src/index.ts:502-522 (registration)
    Registration of the 'tag_reviewed_cards' tool in the ListToolsRequestHandler, including name, description, and input schema
    {
      name: "tag_reviewed_cards",
      description: "Add a 'reviewed on date' tag to specified cards",
      inputSchema: {
        type: "object",
        properties: {
          card_ids: {
            type: "array",
            items: {
              type: "number",
            },
            description: "Array of card IDs to tag as reviewed",
          },
          custom_tag_prefix: {
            type: "string",
            description: "Custom prefix for the tag (default: '見直し')",
          },
        },
        required: ["card_ids"],
      },
    },
  • Main handler function for executing the 'tag_reviewed_cards' tool logic, validates input, calls AnkiConnect to add tags, and returns success response
    private async handleTagReviewedCards(request: any) {
      const cardIds = request.params.arguments?.card_ids;
      const customTagPrefix = request.params.arguments?.custom_tag_prefix;
    
      // Validate card IDs
      if (!cardIds || !Array.isArray(cardIds) || cardIds.length === 0) {
        return {
          content: [
            {
              type: "text",
              text: "Error: No card IDs provided. Please provide an array of card IDs to tag.",
            },
          ],
          isError: true,
        };
      }
    
      // Add tags to cards
      // addTagsは成功してもresultもerrorもnullなので、例外発生しなければ成功
      await this.ankiClient.addTagsToCards(cardIds, customTagPrefix);
    
      const now = new Date();
      const tagDate = `${now.getFullYear()}${String(now.getMonth() + 1).padStart(
        2,
        "0"
      )}${String(now.getDate()).padStart(2, "0")}`;
      const tagPrefix = customTagPrefix || "見直し";
    
      return {
        content: [
          {
            type: "text",
            text: JSON.stringify(
              {
                message: `Successfully tagged ${cardIds.length} cards with '${tagPrefix}_${tagDate}'`,
                tagged_cards: cardIds,
                tag_added: `${tagPrefix}_${tagDate}`,
                success: true,
              },
              null,
              2
            ),
          },
        ],
      };
    }
  • Core helper method in AnkiConnectClient that converts card IDs to note IDs, generates date-based tag, and adds the tag via AnkiConnect API
    async addTagsToCards(
      cardIds: number[],
      customTagPrefix?: string
    ): Promise<boolean> {
      if (cardIds.length === 0) {
        console.error("No cards provided to tag");
        return false;
      }
    
      try {
        // First, get the note IDs for the specified cards
        const cardsInfo = await this.request<any[]>("cardsInfo", {
          cards: cardIds,
        });
    
        // Extract unique note IDs
        const noteIds = [...new Set(cardsInfo.map((card) => card.note))];
    
        if (noteIds.length === 0) {
          console.error("Could not find note IDs for the provided card IDs");
          return false;
        }
    
        // Generate the tag with current date
        const reviewedTag = this.generateReviewedTag(customTagPrefix);
    
        // Add the tag to all notes
        const result = await this.request<boolean>("addTags", {
          notes: noteIds,
          tags: reviewedTag,
        });
    
        return result;
      } catch (error) {
        console.error("Error adding tags to cards:", error);
        throw error;
      }
    }
  • Helper method to generate the date-based reviewed tag string used by addTagsToCards
    private generateReviewedTag(customPrefix: string = "見直し"): string {
      const now = new Date();
      const year = now.getFullYear();
      const month = String(now.getMonth() + 1).padStart(2, "0");
      const day = String(now.getDate()).padStart(2, "0");
      return `${customPrefix}::${year}${month}${day}`;
    }
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/captain-blue210/anki-mcp-server'

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