Skip to main content

MCP Access (AI agents)

Pro plan and above

MCP Access requires a Pro or Ultra plan. Both plans get full read + write access (20 tools). Ultra has higher quotas.

MCP (Model Context Protocol) lets you connect AI coding assistants and automation tools directly to your TellDone data. Once connected, your AI agent can read your notes, tasks, events, and reports - and create, update, and delete items. There are 20 tools total: 9 for reading data and 11 for writing.

Plan requirements

FeatureFreeBasicProUltra
MCP Access--Read + Write (20 tools)Read + Write (20 tools, higher quotas)

How to enable

MCP is currently configured only in the web app at app.telldone.app (not available in the iOS app yet):

  1. Go to Settings > Integrations > AI Agents (MCP)
  2. Click Enable
  3. Choose your access mode:
    • Read-only - the agent can view your data but not modify it
    • Read + Write - the agent can also create, update, and delete items
  4. Copy your connection token - you will need it to connect your AI tool
tip

Keep your connection token private. Anyone with the token can access your TellDone data. You can regenerate it at any time from the same settings page.

Connecting your AI tool

Claude Code

Run this command in your terminal:

claude mcp add telldone --transport http \
https://api.telldone.app/mcp/user/mcp \
--header "Authorization: Bearer YOUR_TOKEN"

Cursor

Add to .cursor/mcp.json:

{
"mcpServers": {
"telldone": {
"url": "https://api.telldone.app/mcp/user/mcp",
"headers": { "Authorization": "Bearer YOUR_TOKEN" }
}
}
}

Windsurf

Add to .codeium/windsurf/mcp_config.json:

{
"mcpServers": {
"telldone": {
"serverUrl": "https://api.telldone.app/mcp/user/mcp",
"headers": { "Authorization": "Bearer YOUR_TOKEN" }
}
}
}

Codex

Add to codex.json:

{
"mcpServers": {
"telldone": {
"type": "http",
"url": "https://api.telldone.app/mcp/user/mcp",
"headers": { "Authorization": "Bearer YOUR_TOKEN" }
}
}
}

OpenClaw

Settings > MCP Servers > Add:

  • Name: TellDone
  • URL: https://api.telldone.app/mcp/user/mcp
  • Auth: Bearer YOUR_TOKEN

Other MCP clients

Any tool that supports MCP over HTTP can connect. Use the endpoint https://api.telldone.app/mcp/user/mcp with a Bearer YOUR_TOKEN authorization header.

Replace YOUR_TOKEN with the token from your settings in all examples above.

Testing your connection

You can verify your token works with a simple cURL command:

curl -X POST https://api.telldone.app/mcp/user/mcp \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}'

A successful response lists all available tools.

What you can do

Read tools (9) - Pro and Ultra

ToolWhat it does
get_notesList notes with filters (tags, date range, text search)
get_noteView a single note with its child tasks, events, and full transcript
get_notes_fullGet multiple notes with embedded tasks and events in one call
get_tasksList tasks filtered by status (to-do, done, all), tags, or dates
get_eventsList calendar events, filter by date range
get_reportsRead your daily, weekly, monthly, and yearly reports (full markdown)
get_tagsView all your tags sorted by usage
get_profileSee your account info and usage stats
searchSearch across notes, tasks, and events (text + semantic search for notes)
tip

The search tool supports semantic search for notes - it finds results by meaning, not just keywords. For example, searching "meetings about budget" will find notes about financial discussions even if they don't contain the word "budget."

Write tools (11) - Pro and Ultra

ToolWhat it does
process_noteFull AI pipeline - send text or audio, get back a note with tasks, events, and tags
create_noteAdd a plain text note (no AI analysis)
create_taskAdd a task with priority, deadline, reminder, and tags
create_eventAdd a calendar event with date, time, location, reminders, attendees, and recurrence
update_noteChange note title, summary, type, tags, priority, or status
update_taskChange task title, description, priority, deadline, reminder, tags, or status
complete_taskMark a task as done
update_eventChange event details, time, location, reminders, attendees, recurrence, tags, or status
delete_noteDelete a note and all its linked tasks and events
delete_taskDelete a task
delete_eventDelete an event

All write and delete operations appear instantly on your connected devices (phone, web app) via real-time sync.

Tools reference

get_notes

List notes with optional filtering. Date filters use recorded_at (when you recorded the voice note), not created_at.

ParameterTypeDefaultDescription
limitint20Number of notes to return (max 50)
offsetint0Skip this many notes (for pagination, max 10000)
tagsstring-Filter by tags, comma-separated (matches any)
searchstring-Text search on title and summary
date_fromstring-Start date, YYYY-MM-DD (inclusive)
date_tostring-End date, YYYY-MM-DD (exclusive)

Returns: list of notes with id, title, summary, type, tags, priority, status, recorded_at, created_at.

get_note

Get a single note with its full transcript and all linked tasks and events.

ParameterTypeDescription
note_idstringThe note's UUID

Returns: note with title, summary, transcript, type, tags, priority, status, metadata, created_at, plus tasks[] and events[] arrays.

get_notes_full

Get multiple notes with their tasks and events in a single call. Same filters as get_notes, but each note includes embedded tasks[] and events[].

ParameterTypeDefaultDescription
limitint10Number of notes (max 20)
offsetint0Skip this many notes
tagsstring-Filter by tags
date_fromstring-Start date, YYYY-MM-DD
date_tostring-End date, YYYY-MM-DD

get_tasks

List tasks with filtering.

ParameterTypeDefaultDescription
statusstring"todo"Filter: todo, done, or all
limitint30Number of tasks (max 100)
offsetint0Skip this many tasks
tagsstring-Filter by tags, comma-separated
date_fromstring-Start date, YYYY-MM-DD (by created_at)
date_tostring-End date, YYYY-MM-DD

Returns: list of tasks with id, title, description, status, priority, tags, deadline, reminder_at, completed_at, completed_by, source, created_at.

get_events

List calendar events with date range filtering.

ParameterTypeDefaultDescription
limitint30Number of events (max 100)
offsetint0Skip this many events
date_fromstring-Start date, YYYY-MM-DD (filters by event start time)
date_tostring-End date, YYYY-MM-DD

Returns: list of events with id, title, description, status, start_at, end_at, location, is_all_day, tags, created_at.

get_reports

Get your AI-generated reports with full markdown content.

ParameterTypeDefaultDescription
report_typestring"daily"Type: daily, weekly, monthly, or yearly
limitint5Number of reports (max 10)

Returns: list of reports with id, type, period_start, period_end, content_md, created_at.

note

Monthly reports can be 3,000-5,000 words. Use limit=1 if your AI tool has a tight context window.

get_tags

Get all your tags, sorted by pinned first, then by usage count.

No parameters. Returns up to 100 tags, each with tag, usage_count, is_pinned, is_manual.

get_profile

Get your account info and usage statistics.

No parameters. Returns email, display_name, locale, transcription_locale, timezone, subscription, mcp_mode, created_at, and stats (note/task/event counts).

Search across notes, tasks, and events at once. For notes, supports both text search and semantic search (finds results by meaning using AI embeddings).

ParameterTypeDefaultDescription
querystringrequiredSearch text (max 500 characters)
limitint20Max results per type (max 20)
semanticbooltrueEnable semantic search for notes

Returns results grouped by type: notes[], tasks[], events[]. Each result has id, type, title, detail, created_at.

Set semantic=false for faster text-only search.

process_note (Pro and Ultra)

Full AI pipeline - works the same as recording in the app. Send text or audio, and TellDone will transcribe, analyze with AI, and create a structured note with extracted tasks, events, tags, and embeddings.

This tool is asynchronous: it returns immediately with an audio_id and processes in the background. Results arrive via real-time sync to your connected devices, or you can poll with get_notes().

ParameterTypeDescription
textstringText to analyze (skips transcription if no audio provided)
audio_base64stringBase64-encoded audio file (up to 50MB, triggers transcription)
audio_formatstringm4a, ogg, wav, or mp3 (default: m4a)
parent_task_idstringUUID of a task this is a follow-up to
parent_note_idstringUUID of a note this is a follow-up to
parent_event_idstringUUID of an event this is a follow-up to

You must provide either text or audio_base64 (or both - audio takes priority for transcription).

Returns: {"audio_id": "...", "status": "processing", "mode": "text-only"} or "mode": "audio+stt" if audio was provided.

note

process_note is subject to your plan's quotas (uploads per day, notes per month, max text length). Use get_profile to check your current usage.

create_note (Pro and Ultra)

Create a plain text note instantly. Does not trigger AI analysis - no tasks or events are extracted. For full AI analysis with task/event extraction, use process_note instead.

ParameterTypeLimitDescription
titlestring200 charsRequired
summarystring1000 charsOptional
tagsstring20 tagsComma-separated, optional

create_task (Pro and Ultra)

Create a new task.

ParameterTypeLimitDescription
titlestring200 charsRequired
descriptionstring2000 charsOptional
prioritystring-low, medium (default), or high
deadlinestring-YYYY-MM-DD, optional
reminder_atstring-ISO 8601 datetime (e.g. 2026-04-15T09:00:00Z), optional
tagsstring20 tagsComma-separated, optional
note_idstring-UUID to link task to a parent note, optional

create_event (Pro and Ultra)

Create a calendar event.

ParameterTypeLimitDescription
titlestring200 charsRequired
start_atstring-ISO 8601 datetime, required
end_atstring-ISO 8601 datetime (default: start + 1 hour)
descriptionstring2000 charsOptional
locationstring200 charsOptional
is_all_daybool-Default: false
tagsstring20 tagsComma-separated, optional
reminder_minutesstring-Comma-separated minutes before event (e.g. 15,60), optional
attendeesstring-Comma-separated names or emails, optional
recurrence_rulestring-RRULE string (e.g. FREQ=WEEKLY;BYDAY=MO,WE,FR), optional
note_idstring-UUID to link event to a parent note, optional

update_note (Pro and Ultra)

Update one or more fields on an existing note. Only fields you provide are changed. The transcript is not editable (it's the source of truth from speech-to-text).

ParameterTypeDescription
note_idstringRequired, the note's UUID
titlestringNew title (max 200 chars)
summarystringNew summary (max 1000 chars, pass a space " " to clear)
typestringtask, idea, info, status, meeting, event, or reflection
tagsstringComma-separated tags (replaces all existing tags, max 20)
prioritystringlow, medium, or high
statusstringactive or archived

update_task (Pro and Ultra)

Update one or more fields on an existing task. Only fields you provide are changed.

ParameterTypeDescription
task_idstringRequired, the task's UUID
titlestringNew title
descriptionstringNew description (pass a space " " to clear)
prioritystringlow, medium, or high
deadlinestringYYYY-MM-DD (pass a space to clear)
statusstringtodo or done
tagsstringComma-separated tags (replaces all existing tags, max 20)
reminder_atstringISO 8601 datetime (pass a space to clear)

Setting status to done also records when and how the task was completed.

complete_task (Pro and Ultra)

Shortcut to mark a task as done.

ParameterTypeDescription
task_idstringRequired, the task's UUID

Returns an error if the task doesn't exist or is already completed.

update_event (Pro and Ultra)

Update one or more fields on an existing event. Only fields you provide are changed.

ParameterTypeDescription
event_idstringRequired, the event's UUID
titlestringNew title
descriptionstringNew description (pass a space to clear)
start_atstringNew start time (ISO 8601)
end_atstringNew end time (ISO 8601)
locationstringNew location (pass a space to clear)
statusstringconfirmed, tentative, or cancelled
tagsstringComma-separated tags (replaces all existing tags, max 20)
is_all_daystring"true" or "false"
reminder_minutesstringComma-separated minutes before event (e.g. 15,60)
attendeesstringComma-separated names or emails
recurrence_rulestringRRULE string (pass a space to clear)

delete_note (Pro and Ultra)

Delete a note. This also deletes all tasks and events that were created from this note.

ParameterTypeDescription
note_idstringRequired, the note's UUID

delete_task (Pro and Ultra)

Delete a task.

ParameterTypeDescription
task_idstringRequired, the task's UUID

delete_event (Pro and Ultra)

Delete an event.

ParameterTypeDescription
event_idstringRequired, the event's UUID

Input limits

FieldMax lengthUsed in
title200 characterscreate/update note, task, event
description2,000 characterscreate/update task, event
summary1,000 characterscreate/update note
location200 characterscreate/update event
tags20 tagscreate/update note, task, event
search query500 characterssearch

If you exceed a limit, the tool returns an error message like "title too long (max 200 chars, got 250)".

Error handling

All tools return JSON. Errors use this format:

{"error": "description of what went wrong"}

Common errors:

ErrorWhen
"MCP access is read-only..."Write tool called with read-only mode
"Invalid note_id format"Non-UUID string passed as ID
"Note not found"ID doesn't exist or belongs to another user
"Task not found or already completed"complete_task on non-existent or already done task
"title too long (max 200 chars, got N)"Input limit exceeded
"Too many tags (max 20)"More than 20 tags provided

HTTP-level errors:

CodeMeaning
401Invalid or missing Bearer token
403MCP disabled or plan doesn't allow MCP
429Rate limit exceeded (5 req/s)

Usage examples

All examples use cURL with the MCP JSON-RPC protocol. Replace YOUR_TOKEN with your connection token.

Reading data

# Get your profile and stats
curl -s -X POST https://api.telldone.app/mcp/user/mcp \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"get_profile"}}'

# List recent notes (limit 5, from April 2026)
curl -s -X POST https://api.telldone.app/mcp/user/mcp \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call",
"params":{"name":"get_notes","arguments":{"limit":5,"date_from":"2026-04-01"}}}'

# Search notes (hybrid text + semantic)
curl -s -X POST https://api.telldone.app/mcp/user/mcp \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call",
"params":{"name":"search","arguments":{"query":"project deadline","limit":5}}}'

Writing data (Pro and Ultra)

# Process a note through full AI pipeline (extracts tasks + events)
curl -s -X POST https://api.telldone.app/mcp/user/mcp \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"jsonrpc":"2.0","id":10,"method":"tools/call",
"params":{"name":"process_note","arguments":{"text":"Need to buy groceries tomorrow. Meeting with Katie at 3pm at the cafe to discuss the project."}}}'

# Create a task with deadline and reminder
curl -s -X POST https://api.telldone.app/mcp/user/mcp \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"jsonrpc":"2.0","id":11,"method":"tools/call",
"params":{"name":"create_task","arguments":{"title":"Review PR","priority":"high","deadline":"2026-04-15","reminder_at":"2026-04-15T09:00:00Z","tags":"dev"}}}'

# Create a recurring event with reminders and attendees
curl -s -X POST https://api.telldone.app/mcp/user/mcp \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"jsonrpc":"2.0","id":12,"method":"tools/call",
"params":{"name":"create_event","arguments":{"title":"Team standup","start_at":"2026-04-12T10:00:00Z","reminder_minutes":"15","attendees":"Katie,John","recurrence_rule":"FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR","tags":"meeting"}}}'

# Complete a task
curl -s -X POST https://api.telldone.app/mcp/user/mcp \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"jsonrpc":"2.0","id":13,"method":"tools/call",
"params":{"name":"complete_task","arguments":{"task_id":"<task-uuid>"}}}'

A successful response looks like:

{
"jsonrpc": "2.0",
"id": 10,
"result": {
"content": [{"type": "text", "text": "{\"id\":\"...\",\"title\":\"Review PR\",\"status\":\"todo\"}"}]
}
}
note

Write and update tools return minimal responses with only id, title, and status. To get full details (tags, priority, deadline, etc.) after a write, make a follow-up read call like get_tasks or get_note.

Token management

ActionHow
View tokenSettings > Integrations > AI Agents > eye icon
Copy tokenClick the copy icon next to the token
RegenerateClick "Regenerate" and confirm. The old token stops working immediately
Change modeToggle between Read-only and Read + Write
DisableClick "Disable" and confirm. Token is deleted, all connections stop

What you can ask your AI agent

Once connected, ask your AI tool things like:

Review your day:

  • "What did I work on today?"
  • "Show me my notes from this week"
  • "What tasks are overdue?"

Manage tasks:

  • "Create a task: review quarterly report, high priority, deadline Friday"
  • "Mark the Figma task as done"
  • "What tasks am I working on?"

Search and analyze:

  • "Find all notes about the marketing strategy"
  • "What events do I have next week?"
  • "Summarize my daily reports from last week"

Plan ahead:

  • "Create an event: team standup tomorrow at 10am"
  • "What's on my calendar this week?"
  • "Show me my top tags - what do I spend most time on?"

The AI agent has full access to your notes, tasks, events, and reports. It can read, create, update, and delete data, and answer complex questions by combining information from multiple tools.

Important notes

  • Two ways to create notes - create_note creates a plain text note instantly (no AI analysis). process_note runs the full AI pipeline (same as recording in the app) - it analyzes the text, extracts tasks and events, generates tags and embeddings. Use process_note when you want TellDone to do the thinking for you.
  • No integration sync - items created or updated via MCP don't trigger webhook automations or integration syncs (Todoist, Notion). They will appear in your apps on the next sync.
  • Semantic search depends on the tool - notes created with process_note get embeddings and appear in semantic search. Notes created with create_note do not get embeddings, so they only appear in text search.
  • Write responses are minimal - create and update tools return only id, title, and status. To get all fields after a write, make a follow-up read call.
  • Date filters use UTC - date_from/date_to parameters are compared as UTC timestamps. For users in non-UTC timezones, boundary dates may include or exclude items from adjacent days.
  • Rate limit - 5 requests per second. For bulk operations, pace your requests.

Security

  • Each user gets a unique 384-bit connection token
  • Your token is revoked instantly when you disable MCP or regenerate it
  • All data is strictly isolated to your account - your agent can only access your own data
  • Every request is scoped to your user - there is no way for an agent to access another user's data
  • Connection uses HTTPS with rate limiting (5 req/s)

See also