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.
Endpoint
POST https://greetu.io/api/mcpJSON-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 crCreate 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 crList recently created greeting cards.
{
"type": "object",
"properties": {
"limit": { "type": "number", "minimum": 1, "maximum": 50, "default": 10 }
}
}greetu.get_replies1 crFetch text replies left on a card.
{
"type": "object",
"properties": {
"cardId": { "type": "string", "description": "The card ID" }
},
"required": ["cardId"]
}greetu.get_reactions1 crFetch emoji reactions left on a card.
{
"type": "object",
"properties": {
"cardId": { "type": "string", "description": "The card ID" }
},
"required": ["cardId"]
}greetu.reply_to_card3 crSend 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 crSchedule 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"
}
}
}
}