MCP Server for AI Agents

The first greeting card API built for AI agents.

Any AI assistant — Claude, ChatGPT, Gemini, Cursor, or your own — can now create greeting cards, read replies, and inspect reactions programmatically via the Model Context Protocol. No browser automation needed.

ClaudeChatGPTGeminiCursorVS CodeAny MCP Client

Endpoint

POST https://greetu.io/api/mcp

JSON-RPC 2.0 with initialize, tools/list, and tools/call.

Auth header: X-API-Key: grtu_...

Quick Start (curl)

curl -X POST https://greetu.io/api/mcp \
  -H "Content-Type: application/json" \
  -H "X-API-Key: grtu_xxxxxxxx" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "greetu.create_card",
      "arguments": {
        "recipient_name": "Mom",
        "occasion": "mothers_day",
        "use_ai_message": true
      }
    }
  }'

Python

import requests

API_KEY = "grtu_xxxxxxxx"
URL = "https://greetu.io/api/mcp"

def mcp_call(method, params=None):
    r = requests.post(URL, headers={
        "Content-Type": "application/json",
        "X-API-Key": API_KEY,
    }, json={
        "jsonrpc": "2.0",
        "id": 1,
        "method": method,
        "params": params or {},
    })
    return r.json()

# List available tools
print(mcp_call("tools/list"))

# Create a card
result = mcp_call("tools/call", {
    "name": "greetu.create_card",
    "arguments": {
        "recipient_name": "Sarah",
        "occasion": "birthday",
        "use_ai_message": True,
    }
})
print(result)

TypeScript / Node.js

const API_KEY = "grtu_xxxxxxxx";

async function mcpCall(method: string, params?: object) {
  const res = await fetch("https://greetu.io/api/mcp", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "X-API-Key": API_KEY,
    },
    body: JSON.stringify({
      jsonrpc: "2.0",
      id: 1,
      method,
      params,
    }),
  });
  return res.json();
}

// Create a card
const result = await mcpCall("tools/call", {
  name: "greetu.create_card",
  arguments: {
    recipient_name: "Sarah",
    occasion: "birthday",
    use_ai_message: true,
  },
});
console.log(result);

Tool Schemas

Full input schemas returned by tools/list.

greetu.create_card5 cr

Create a new greeting card with AI-generated or custom message.

{
  "type": "object",
  "properties": {
    "recipient_name": { "type": "string", "description": "Name of the person receiving the card" },
    "sender_name": { "type": "string", "description": "Your name (optional)" },
    "occasion": { "type": "string", "description": "birthday, anniversary, mothers_day, etc." },
    "theme": { "type": "string", "description": "Visual theme (optional)" },
    "message": { "type": "string", "description": "Custom message (omit if use_ai_message=true)" },
    "use_ai_message": { "type": "boolean", "description": "Let AI generate the message" },
    "locked_until": { "type": ["string", "null"], "description": "ISO date to lock the card until" },
    "voice_message": { "type": ["string", "null"], "description": "Base64 audio (optional)" }
  },
  "required": ["recipient_name", "occasion"]
}
greetu.list_cards1 cr

List recently created greeting cards.

{
  "type": "object",
  "properties": {
    "limit": { "type": "number", "minimum": 1, "maximum": 50, "default": 10 }
  }
}
greetu.get_replies1 cr

Fetch text replies left on a card.

{
  "type": "object",
  "properties": {
    "cardId": { "type": "string", "description": "The card ID" }
  },
  "required": ["cardId"]
}
greetu.get_reactions1 cr

Fetch emoji reactions left on a card.

{
  "type": "object",
  "properties": {
    "cardId": { "type": "string", "description": "The card ID" }
  },
  "required": ["cardId"]
}
greetu.reply_to_card3 cr

Send a reply message to a greeting card.

{
  "type": "object",
  "properties": {
    "cardId": { "type": "string", "description": "The card ID" },
    "reply": { "type": "string", "description": "Your reply message" },
    "visitorId": { "type": "string", "description": "Optional visitor identifier" }
  },
  "required": ["cardId", "reply"]
}
greetu.schedule_card5 cr

Schedule a greeting card for future delivery. The card unlocks automatically at the scheduled time.

{
  "type": "object",
  "properties": {
    "recipient_name": { "type": "string", "description": "Name of the person receiving the card" },
    "sender_name": { "type": "string", "description": "Your name (optional)" },
    "occasion": { "type": "string", "description": "birthday, anniversary, mothers_day, etc." },
    "theme": { "type": "string", "description": "Visual theme (optional)" },
    "message": { "type": "string", "description": "Custom message (omit if use_ai_message=true)" },
    "use_ai_message": { "type": "boolean", "description": "Let AI generate the message" },
    "scheduled_at": { "type": "string", "description": "ISO 8601 datetime when the card should unlock" },
    "voice_message": { "type": ["string", "null"], "description": "Base64 audio (optional)" }
  },
  "required": ["recipient_name", "occasion", "scheduled_at"]
}

Client Configuration

Drop these configs into your MCP client. Replace grtu_xxxxxxxx with your API key.

Claude Desktop

Save to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)

{
  "mcpServers": {
    "greetu": {
      "url": "https://greetu.io/api/mcp",
      "headers": {
        "X-API-Key": "grtu_xxxxxxxx"
      }
    }
  }
}

Cursor

Save to ~/.cursor/mcp.json

{
  "mcpServers": {
    "greetu": {
      "type": "http",
      "url": "https://greetu.io/api/mcp",
      "headers": {
        "X-API-Key": "grtu_xxxxxxxx"
      }
    }
  }
}

VS Code (Copilot Chat)

Save to .vscode/mcp.json in your workspace

{
  "servers": {
    "greetu": {
      "type": "http",
      "url": "https://greetu.io/api/mcp",
      "headers": {
        "X-API-Key": "grtu_xxxxxxxx"
      }
    }
  }
}