npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

telldone-mcp

v1.0.1

Published

TellDone MCP Server - voice-first planning for AI tools

Downloads

36

Readme

TellDone MCP Server

Connect your TellDone voice notes, tasks, events, and reports to AI tools like Claude Code, Cursor, Windsurf, Codex, and any MCP-compatible client.

TellDone is a voice-first planning app. Dictate your thoughts, and AI automatically creates structured notes, tasks, events, and daily productivity reports.

Voice recording is available on iOS and Apple Watch. Android coming soon. You can also send text through MCP using process_note for the same AI analysis pipeline.

Use promo code MCPBETA26 after signup to get free MCP access (read & write for 30 days, then read-only for a year).

Quick Start

1. Get Your Token

Sign up at app.telldone.app, then go to Settings > AI Agents (MCP) and click Enable.

2. Connect

Claude Code

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

Cursor .cursor/mcp.json

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

Windsurf .codeium/windsurf/mcp_config.json

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

Codex 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

3. Start Using

Ask your AI tool things like:

  • "What did I work on today?"
  • "Create a task: review quarterly report, high priority, deadline Friday"
  • "Find all notes about the marketing strategy"
  • "Mark the Figma task as done"
  • "Create an event: team standup tomorrow at 10am, remind me 15 min before"
  • "Process this meeting summary and extract tasks"
  • "What events do I have next week?"
  • "Show me my daily report from yesterday"

Tools (21)

Read Tools (10)

| Tool | Description | |------|-------------| | get_profile | Returns the authenticated user's profile including display name, email, locale, timezone, subscription plan, and usage statistics (total notes, tasks, events). Use this to check account status or quota. | | get_notes | Lists voice notes with optional filters: date_from/date_to (ISO 8601), tag (string), type (task/idea/info/status/meeting/event/reflection), search (text query), limit (default 20, max 100), offset. Returns note metadata without full body — use get_note for details. | | get_note | Returns a single note by UUID note_id, including full transcription, AI summary, and all linked child tasks and events. Use when you need complete note content after finding it via get_notes or search. | | get_notes_full | Bulk retrieval of notes with embedded children (tasks + events). Same filters as get_notes. Use instead of calling get_note in a loop. Returns larger payloads — set limit appropriately. | | get_tasks | Lists tasks with filters: status (todo/done/all, default: todo), tag, priority (low/medium/high), date_from/date_to for deadline range, limit, offset. Returns title, priority, deadline, reminder_at, tags, completion status. | | get_events | Lists calendar events with date_from/date_to range filters, status (confirmed/tentative/cancelled), limit, offset. Returns event title, start/end times, location, attendees, and reminders. | | get_reports | Returns AI-generated productivity reports. Filter by period (daily/weekly/monthly/yearly) and date_from/date_to. Reports summarize completed tasks, patterns, and productivity insights. | | get_tags | Returns all user-defined tags sorted by usage frequency (most used first). No parameters. Use to discover available tags before filtering notes or tasks. | | search | Hybrid text + semantic search across notes, tasks, and events. Parameter: query (string). Combines keyword matching with vector similarity for relevant results even with different wording. Returns mixed result types with relevance scores. |

Write Tools (11)

| Tool | Description | |------|-------------| | process_note | Runs the full AI analysis pipeline on text or audio input — identical to recording a voice note in the mobile app. Accepts text (string) or audio_base64 + audio_format (m4a/wav/mp3). AI extracts structured note + tasks + events + tags. Returns immediately with audio_id; results arrive asynchronously. Poll with get_notes() to retrieve processed output. | | create_note | Creates a plain text note without AI analysis. Parameters: title (required), summary, type (task/idea/info/status/meeting/event/reflection), tags (comma-separated). Use when you want to store structured text directly without LLM processing. | | create_task | Creates a task with title (required), description, priority (low/medium/high, default: medium), deadline (ISO 8601 date), reminder_at (ISO 8601 datetime), tags (comma-separated). Task is created with status "todo". Syncs to mobile app in real-time. | | create_event | Creates a calendar event with title (required), start_at/end_at (ISO 8601 datetime), location, attendees (comma-separated), reminder_minutes (integer), recurrence (rrule string), status (confirmed/tentative). | | update_note | Updates note fields by note_id (UUID, required). Optional: title, summary, type, tags, priority, status. Only provided fields are changed; omitted fields remain unchanged. | | update_task | Updates task fields by task_id (UUID, required). Optional: title, description, priority, deadline, reminder_at, tags, status (todo/done). Use complete_task as a shortcut for marking done. | | update_event | Updates event fields by event_id (UUID, required). Optional: title, start_at, end_at, location, attendees, status (confirmed/tentative/cancelled), reminder_minutes. | | complete_task | Marks a task as done by task_id (UUID). Shortcut for update_task with status: "done". Records completion timestamp and source ("mcp"). | | delete_note | Soft-deletes a note by note_id (UUID). Cascades to all linked child tasks and events — they are also soft-deleted. Reversible from the web app. | | delete_task | Soft-deletes a task by task_id (UUID). Does not affect the parent note. Reversible from the web app. | | delete_event | Soft-deletes an event by event_id (UUID). Does not affect the parent note. Reversible from the web app. |

All write tools sync in real-time to connected mobile and web clients via WebSocket.

Full Pipeline: process_note

The process_note tool runs the same pipeline as recording in the mobile app:

Text or Audio --> STT (if audio) --> LLM Analysis --> Note + Tasks + Events + Tags

Text mode (skip STT):

{"name": "process_note", "arguments": {"text": "Need to buy groceries. Meeting with Katie at 3pm."}}

Audio mode (base64-encoded):

{"name": "process_note", "arguments": {"audio_base64": "...", "audio_format": "m4a"}}

Returns immediately with audio_id. Results arrive via WebSocket or poll with get_notes().

Examples

examples/test-connection.sh

#!/bin/bash
# Test your TellDone MCP connection
TOKEN="${1:?Usage: ./test-connection.sh YOUR_TOKEN}"
URL="https://api.telldone.app/mcp/user/mcp"

echo "=== Testing connection ==="
curl -s -X POST "$URL" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_profile"}}' \
  | python3 -m json.tool

echo ""
echo "=== Listing tools ==="
curl -s -X POST "$URL" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
  | python3 -c "import sys,json; tools=json.load(sys.stdin).get('result',{}).get('tools',[]); print(f'{len(tools)} tools available'); [print(f'  {t[\"name\"]}') for t in tools]"

examples/daily-summary.sh

#!/bin/bash
# Get today's tasks and notes summary
TOKEN="${1:?Usage: ./daily-summary.sh YOUR_TOKEN}"
URL="https://api.telldone.app/mcp/user/mcp"
TODAY=$(date +%Y-%m-%d)

call() {
  curl -s -X POST "$URL" \
    -H "Authorization: Bearer $TOKEN" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d "$1"
}

echo "=== Today's Notes ($TODAY) ==="
call "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"get_notes\",\"arguments\":{\"date_from\":\"$TODAY\",\"limit\":20}}}" \
  | python3 -c "
import sys, json
r = json.loads(json.load(sys.stdin)['result']['content'][0]['text'])
for n in r: print(f'  [{n[\"type\"]}] {n[\"title\"]}')" 2>/dev/null

echo ""
echo "=== Active Tasks ==="
call '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_tasks","arguments":{"status":"todo","limit":10}}}' \
  | python3 -c "
import sys, json
r = json.loads(json.load(sys.stdin)['result']['content'][0]['text'])
for t in r: print(f'  [{t[\"priority\"]}] {t[\"title\"]}')" 2>/dev/null

echo ""
echo "=== Upcoming Events ==="
call "{\"jsonrpc\":\"2.0\",\"id\":3,\"method\":\"tools/call\",\"params\":{\"name\":\"get_events\",\"arguments\":{\"date_from\":\"$TODAY\",\"limit\":5}}}" \
  | python3 -c "
import sys, json
r = json.loads(json.load(sys.stdin)['result']['content'][0]['text'])
for e in r: print(f'  {e[\"start_at\"][:16]} {e[\"title\"]}')" 2>/dev/null

examples/create-task.sh

#!/bin/bash
# Create a task via MCP
TOKEN="${1:?Usage: ./create-task.sh YOUR_TOKEN}"
TITLE="${2:?Usage: ./create-task.sh YOUR_TOKEN 'Task title'}"
PRIORITY="${3:-medium}"

curl -s -X POST "https://api.telldone.app/mcp/user/mcp" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"create_task\",\"arguments\":{\"title\":\"$TITLE\",\"priority\":\"$PRIORITY\"}}}" \
  | python3 -m json.tool

Plans and Access

| Plan | MCP Access | Read | Write | Price | |------|-----------|------|-------|-------| | Free | -- | -- | -- | $0 | | Basic | -- | -- | -- | $4.99/mo | | Pro | Read & Write | 10 tools | 11 tools | $11.99/mo | | Ultra | Read & Write | 10 tools | 11 tools | $24.99/mo |

Pro and Ultra have the same MCP tools. Ultra has higher quotas (unlimited notes, 1500 STT min/mo, 300 uploads/day).

Authentication

Every request requires a Bearer token in the Authorization header. Tokens are generated in the web app settings.

  • Regenerate: Settings > AI Agents > Regenerate (old token revoked instantly)
  • Disable: Settings > AI Agents > Disable (token deleted)
  • Rate limit: 5 requests/second

Transport

MCP Streamable HTTP (stateless). Each request is independent.

POST https://api.telldone.app/mcp/user/mcp
Authorization: Bearer <token>
Content-Type: application/json
Accept: application/json

Links