All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 55s
- tools.js: expose type enum ['text','markdown','richtext','checklist'] in create_note & update_note - default changed from 'text' to 'richtext' (matches Prisma schema) - isMarkdown marked as deprecated in favour of type='markdown' - N8N-CONFIG.md: full French → English translation - N8N-WORKFLOWS.md: full French → English translation - N8N-EXAMPLES.md: new comprehensive examples for all 22 MCP tools + workflow patterns - n8n-workflow-mcp-reminder-bot.json: cron → get_due_reminders → Telegram → mark done - n8n-workflow-mcp-email-to-note.json: IMAP → create_note → urgent Slack alert - n8n-workflow-mcp-daily-digest.json: 8AM cron → notes + reminders digest → save + Slack - n8n-workflow-mcp-webhook-to-note.json: universal webhook → create_note → respond - notebooks-list.tsx: fix truncated notebook names (pe-24→pe-14), replace hover overlay with Tooltip
156 lines
5.1 KiB
JSON
156 lines
5.1 KiB
JSON
{
|
||
"name": "Memento MCP — Reminder Bot",
|
||
"nodes": [
|
||
{
|
||
"parameters": {
|
||
"rule": {
|
||
"interval": [
|
||
{
|
||
"field": "cronExpression",
|
||
"expression": "0 */30 * * * *"
|
||
}
|
||
]
|
||
}
|
||
},
|
||
"id": "schedule-trigger",
|
||
"name": "Every 30 Minutes",
|
||
"type": "n8n-nodes-base.scheduleTrigger",
|
||
"typeVersion": 1.2,
|
||
"position": [240, 300]
|
||
},
|
||
{
|
||
"parameters": {
|
||
"method": "POST",
|
||
"url": "http://memento-mcp:3001/mcp",
|
||
"authentication": "genericCredentialType",
|
||
"genericAuthType": "httpHeaderAuth",
|
||
"sendHeaders": true,
|
||
"headerParameters": {
|
||
"parameters": [
|
||
{
|
||
"name": "Content-Type",
|
||
"value": "application/json"
|
||
},
|
||
{
|
||
"name": "x-api-key",
|
||
"value": "={{ $vars.MEMENTO_API_KEY }}"
|
||
}
|
||
]
|
||
},
|
||
"sendBody": true,
|
||
"specifyBody": "json",
|
||
"jsonBody": "{\n \"jsonrpc\": \"2.0\",\n \"id\": 1,\n \"method\": \"tools/call\",\n \"params\": {\n \"name\": \"get_due_reminders\",\n \"arguments\": {}\n }\n}"
|
||
},
|
||
"id": "mcp-get-reminders",
|
||
"name": "MCP — Get Due Reminders",
|
||
"type": "n8n-nodes-base.httpRequest",
|
||
"typeVersion": 4.2,
|
||
"position": [480, 300]
|
||
},
|
||
{
|
||
"parameters": {
|
||
"jsCode": "// Parse MCP response\nconst response = $input.item.json;\nconst result = JSON.parse(response.result?.content?.[0]?.text || '[]');\n\nif (!Array.isArray(result) || result.length === 0) {\n return [];\n}\n\nreturn result.map(note => ({\n json: {\n noteId: note.id,\n title: note.title || 'Untitled reminder',\n reminder: note.reminder,\n reminderFormatted: new Date(note.reminder).toLocaleString('en-GB'),\n content: (note.content || '').substring(0, 200),\n labels: Array.isArray(note.labels) ? note.labels.join(', ') : ''\n }\n}));"
|
||
},
|
||
"id": "parse-reminders",
|
||
"name": "Parse Reminders",
|
||
"type": "n8n-nodes-base.code",
|
||
"typeVersion": 2,
|
||
"position": [720, 300]
|
||
},
|
||
{
|
||
"parameters": {
|
||
"conditions": {
|
||
"options": { "caseSensitive": true },
|
||
"conditions": [
|
||
{
|
||
"id": "has-items",
|
||
"leftValue": "={{ $items().length }}",
|
||
"rightValue": 0,
|
||
"operator": {
|
||
"type": "number",
|
||
"operation": "gt"
|
||
}
|
||
}
|
||
],
|
||
"combinator": "and"
|
||
}
|
||
},
|
||
"id": "check-has-reminders",
|
||
"name": "Has Reminders?",
|
||
"type": "n8n-nodes-base.if",
|
||
"typeVersion": 2.1,
|
||
"position": [960, 300]
|
||
},
|
||
{
|
||
"parameters": {
|
||
"chatId": "={{ $vars.TELEGRAM_CHAT_ID }}",
|
||
"text": "⏰ *Reminder — Memento*\n\n📌 *{{ $json.title }}*\n🕐 {{ $json.reminderFormatted }}\n\n{{ $json.content }}{{ $json.labels ? '\n🏷️ ' + $json.labels : '' }}",
|
||
"additionalFields": {
|
||
"parse_mode": "Markdown"
|
||
}
|
||
},
|
||
"id": "send-telegram",
|
||
"name": "Send Telegram Notification",
|
||
"type": "n8n-nodes-base.telegram",
|
||
"typeVersion": 1.2,
|
||
"position": [1200, 200],
|
||
"continueOnFail": true
|
||
},
|
||
{
|
||
"parameters": {
|
||
"method": "POST",
|
||
"url": "http://memento-mcp:3001/mcp",
|
||
"sendHeaders": true,
|
||
"headerParameters": {
|
||
"parameters": [
|
||
{
|
||
"name": "Content-Type",
|
||
"value": "application/json"
|
||
},
|
||
{
|
||
"name": "x-api-key",
|
||
"value": "={{ $vars.MEMENTO_API_KEY }}"
|
||
}
|
||
]
|
||
},
|
||
"sendBody": true,
|
||
"specifyBody": "json",
|
||
"jsonBody": "={\n \"jsonrpc\": \"2.0\",\n \"id\": 2,\n \"method\": \"tools/call\",\n \"params\": {\n \"name\": \"update_note\",\n \"arguments\": {\n \"id\": \"{{ $json.noteId }}\",\n \"isReminderDone\": true\n }\n }\n}"
|
||
},
|
||
"id": "mcp-mark-done",
|
||
"name": "MCP — Mark Reminder Done",
|
||
"type": "n8n-nodes-base.httpRequest",
|
||
"typeVersion": 4.2,
|
||
"position": [1440, 200],
|
||
"continueOnFail": true
|
||
}
|
||
],
|
||
"connections": {
|
||
"Every 30 Minutes": {
|
||
"main": [[{ "node": "MCP — Get Due Reminders", "type": "main", "index": 0 }]]
|
||
},
|
||
"MCP — Get Due Reminders": {
|
||
"main": [[{ "node": "Parse Reminders", "type": "main", "index": 0 }]]
|
||
},
|
||
"Parse Reminders": {
|
||
"main": [[{ "node": "Has Reminders?", "type": "main", "index": 0 }]]
|
||
},
|
||
"Has Reminders?": {
|
||
"main": [
|
||
[{ "node": "Send Telegram Notification", "type": "main", "index": 0 }],
|
||
[]
|
||
]
|
||
},
|
||
"Send Telegram Notification": {
|
||
"main": [[{ "node": "MCP — Mark Reminder Done", "type": "main", "index": 0 }]]
|
||
}
|
||
},
|
||
"pinData": {},
|
||
"settings": { "executionOrder": "v1" },
|
||
"staticData": null,
|
||
"tags": [{ "id": "memento-mcp", "name": "Memento MCP" }],
|
||
"triggerCount": 1,
|
||
"updatedAt": "2026-05-03T00:00:00.000Z",
|
||
"versionId": "1"
|
||
}
|