telldone について
TellDoneは、音声を中心にノート、タスク、イベント、レポートを管理するプランニングサービスです。MCPサーバーを通じてAIクライアントから記録を操作でき、OAuthまたはBearer Tokenで接続し、テキストも同じ分析フローで処理できます。
主な機能
- 01音声やテキストからノートを構造化
- 02ノート、タスク、イベントの管理
- 03日次・週次・月次・年次レポートの閲覧
- 04保存した記録の検索と絞り込み
- 05OAuthまたはBearer Tokenで接続
活用シーン
- 01口述した考えをノートやタスクに整理
- 02AIクライアントからタスクを作成・完了
- 03日付やテーマからノート、イベント、レポートを検索
MCP 対応
TellDoneのノート、タスク、イベントの読み取り、検索、作成、更新、削除とレポート参照のツールを提供します。MCPクライアントはOAuthまたはBearer Tokenで認証でき、process_noteでテキストをAI分析に渡せます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
TellDone MCP Server
TellDone の音声メモ、タスク、イベント、レポートを、Claude(Desktop、claude.ai、Code)、Cursor、Windsurf、Codex、およびMCP互換クライアントに接続できます。ワンクリックOAuth(ブラウザーでサインインするため、トークンのコピーは不要)またはベアラートークンを利用できます。
TellDoneは、音声入力を中心とした計画アプリです。考えを音声で記録すると、AIが構造化されたメモ、タスク、イベント、日次の生産性レポートを自動的に作成します。
音声録音はiOSとApple Watchで利用できます。Androidには近日対応予定です。また、process_note を使ってMCP経由でテキストを送信し、同じAI分析パイプラインを利用することもできます。
サインアップ後にプロモーションコード
MCPBETA26を使用すると、MCPを無料で利用できます(30日間は読み書き可能、その後1年間は読み取り専用)。
クイックスタート
次の2つの方法のいずれかで接続します。ワンクリックOAuth(推奨 — ブラウザーでサインインし、コピーするものはありません)またはベアラートークン(すべてのMCPクライアントで利用可能)。
オプションA — ワンクリックOAuth · Claude Desktop、claude.ai、Claude Code
TellDoneをコネクターとして追加し、ブラウザーでアカウントにサインインして承認します。アクセストークンは有効期間が短く、スコープが限定されており、Settingsからいつでも取り消せます。コピーしたり保存したりする必要はありません。
Claude Desktopとclaude.ai — SettingsでConnectorsを開き、Add custom connectorを選択して、次の内容を貼り付けます。
https://api.telldone.app/mcp/user
Connectをクリックし、TellDoneにサインインしてアクセスを承認します。手動でアプリを登録する必要はありません。TellDoneはClient ID Metadata Documentsに対応しているため、Claudeが自動的に登録されます。
Claude Code
claude mcp add --transport http telldone https://api.telldone.app/mcp/user
次に /mcp を実行し、telldone → Authenticateを選択して、ブラウザーでTellDoneの同意ページを開きます。サインインして一度承認してください。(CLI v2.1.186以降では、シェルから claude mcp login telldone を実行して同じ操作ができます。)
OAuth 2.1 discovery(RFC 9728 + RFC 8414)に対応しているMCPクライアントは、同じ方法で接続できます。
オプションB — ベアラートークン · Cursor、Windsurf、Codex、またはその他のクライアント
まずトークンを取得します。app.telldone.appでサインアップし、**Settings → AI Agents (MCP)**を開いて、Enableをクリックします。次に、トークンを使ってサーバーを追加します。
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
使い始める
AIツールに次のようなことを尋ねてみましょう。
- 「今日は何に取り組みましたか?」
- 「タスクを作成して:四半期レポートを確認、優先度は高、期限は金曜日」
- 「マーケティング戦略に関するメモをすべて探して」
- 「Figmaのタスクを完了済みにして」
- 「イベントを作成して:明日午前10時にチームの朝会、15分前にリマインドして」
- 「この会議の要約を処理して、タスクを抽出して」
- 「来週のイベントを教えて」
- 「昨日の日次レポートを見せて」
データ形式 — 出力を解析する前にお読みください
すべてのツールはJSONを返します。MCPのワイヤーレスポンスでは、ペイロードは result.content[0].text にJSONエンコードされた文字列として格納されます。json.loads()(または同等の関数)で解析し、実際のデータを取得してください。
デコード後のJSONに含まれるすべての日時、日付、UUIDは、ネイティブ言語の型ではなく文字列です。 これらに対して .toordinal()、.weekday()、または日時メソッドを直接呼び出さないでください。TypeError: 'str' has no attribute 'toordinal' が発生します。先に解析してください。
スカラー出力の型
| フィールドの形式 | ワイヤー形式 | 例 | 解析方法 |
|---|---|---|---|
| UUID | 文字列(小文字の16進数とハイフン) | "b3f3c8a0-9a4d-4e12-9f4a-1a1b2c3d4e5f" | そのまま使用 |
| Datetime(タイムスタンプ) | タイムゾーンオフセット付きISO 8601文字列 | "2026-04-18T11:30:00+00:00" | Pythonでは datetime.fromisoformat(s)、JSでは new Date(s) |
| Date(時刻なしの暦日) | YYYY-MM-DD 形式の文字列 | "2026-04-18" | Pythonでは date.fromisoformat(s) |
| Boolean | JSONの true / false | true | ネイティブ型 |
| Integer | JSONの数値 | 42 | ネイティブ型 |
| Nullableフィールド | JSONの null | null | None / null |
配列/オブジェクトの出力型
| フィールド | ワイヤー形式 |
|---|---|
tags(notes/tasks/events) | 文字列の配列。未設定の場合は null、クリア済みの場合は [] |
reminder_minutes(events、書き込み可能なフィールド) | 入力/出力ともに整数の配列 |
attendees(events、書き込み可能なフィールド) | 文字列(名前/メールアドレス)の配列 |
metadata(notes) | JSON オブジェクトまたは null |
get_note/get_notes_full 内の tasks/events 配列 | 常に含まれ、空の [] の場合があります |
列挙値
priority—"low"、"medium"、"high"、またはnullnote.type—"task"、"idea"、"info"、"status"、"meeting"、"event"、"reflection"note.status—"active"、"archived"(削除済みのレコードはすべての読み取りツールから除外されます)task.status—"todo"、"done"(クエリパラメーターstatus="all"は「削除されていないすべて」を意味します)event.status—"confirmed"、"tentative"、"cancelled"report.type—"daily"、"weekly"、"monthly"、"yearly"source(tasks)、completed_by(tasks) —"mcp"、"app"、"sync"、"audio"、"todoist"、"notion"などの自由形式の文字列
ツールごとの出力フィールド
| ツール | 返されるフィールド(特記がない限り、各配列項目のトップレベルにあります) |
|---|---|
get_profile | id UUID、email str、display_name str|null、locale str、transcription_locale str|null、timezone str(IANA)、subscription str、mcp_mode str、created_at ISO 8601 datetime str、stats {notes:int, tasks:int, events:int} |
get_notes | id UUID、title str、summary str|null、type enum、tags str[]|null、priority enum|null、status enum、recorded_at ISO 8601 datetime str|null、created_at ISO 8601 datetime str |
get_note | ノートのフィールド(id、title、summary、transcript str|null、type、tags、priority、status、metadata obj|null、created_at)+一部のフィールドを含む tasks[] と events[] 配列 |
get_notes_full | tasks[] と events[] が埋め込まれたノートの配列(get_note と同じ一部のフィールド。metadata は含まれません) |
get_tasks | id UUID、title str、description str|null、status enum、priority enum|null、tags str[]|null、deadline YYYY-MM-DD str|null、reminder_at ISO 8601 datetime str|null、completed_at ISO 8601 datetime str|null、completed_by str|null、source str|null、created_at ISO 8601 datetime str |
get_events | id UUID、title str、description str|null、status enum、start_at ISO 8601 datetime str(null 以外)、end_at ISO 8601 datetime str(null 以外)、location str|null、is_all_day bool|null、tags str[]|null、created_at ISO 8601 datetime str。注: attendees、reminder_minutes、recurrence_rule は create_event/update_event で書き込み可能ですが、get_events では返されません。 |
get_reports | id UUID、type enum、period_start YYYY-MM-DD str、period_end YYYY-MM-DD str、content_md str|null、created_at ISO 8601 datetime str |
get_tags | tag str、usage_count int、is_pinned bool、is_manual bool |
search | {notes: [...], tasks: [...], events: [...]} — 各項目は {id UUID, type "note"/"task"/"event", title str, detail str|null, created_at ISO 8601 datetime str} です。3 つの配列は常に含まれ、空の場合があります。 |
| 書き込みツール | 最小限の情報:{id UUID, title str, status enum}(notes では type も含まれます)。完全なレコードが返されるとは限りません。より多くのフィールドが必要な場合は、対応する get_* ツールを呼び出してください。 |
| 削除ツール | {id UUID, deleted: true} |
process_note | {audio_id UUID, status "processing", mode "audio+stt"/"text-only", message str} — 非同期です。最終結果は WebSocket の note_ready、または後続の get_notes 呼び出しで受け取ります。 |
| エラー時のすべてのツール | {error: "message"} — 応答をレコードとして扱う前に、必ず error キーがないことを確認してください。 |
入力パラメーターの形式
note_id、task_id、event_id、parent_*_id— UUID 文字列date_from、date_to、deadline—YYYY-MM-DD形式の文字列(空文字列は「フィルターなし」を意味します)start_at、end_at、reminder_at— ISO 8601 形式の日時文字列。例:"2026-04-15T09:00:00Z"または"2026-04-15T09:00:00+00:00"tags— 入力時はカンマ区切りの文字列(例:"work,urgent")。保存時/返却時はstring[]reminder_minutes、attendees— 入力時はカンマ区切りの文字列。保存時/返却時は配列is_all_day—create_eventではブール値、update_eventでは文字列"true"/"false"recurrence_rule— RRULE 文字列。例:"FREQ=WEEKLY;BYDAY=MO,WE,FR"
解析例(Python)
import json
from datetime import datetime, date
# tools/call response → text → decode
payload = json.loads(response["result"]["content"][0]["text"])
# Check for error first
if "error" in payload:
raise RuntimeError(payload["error"])
# Events: start_at is a STRING like "2026-04-18T11:30:00+00:00"
for e in payload: # payload is list from get_events
start = datetime.fromisoformat(e["start_at"]) # -> tz-aware datetime
if e["end_at"]:
end = datetime.fromisoformat(e["end_at"])
# Tasks: deadline is a STRING like "2026-04-18" (date only)
for t in tasks_payload:
if t["deadline"]:
d = date.fromisoformat(t["deadline"])
days_left = (d - date.today()).days
ノートのフィールド:title、summary、transcript
すべてのノートには、役割も上限も異なる3つのテキストフィールドがあります。適切なフィールドを選ぶことが重要です。create_note または update_note を使う際は、LLM クライアント(Claude Desktop、Cursor など)が内容を適切に分割する必要があります。
| フィールド | 役割 | 上限 | レポートの LLM プロンプトに含まれるか |
|---|---|---|---|
title | リスト、プレビュー、プッシュ通知、メールの件名に表示される1行のタイトルです。 | 200文字 | ✅(リストのヘッダーとして) |
summary | 1~3文の概要です。 | 上限1000文字 — プロダクト上の決定です。 | ✅ そのまま含まれます。 簡潔にしてください。 |
transcript | ノートの本文全体です。詳細ビューに表示されます。 | プランに基づく上限(下記参照) | ❌ 含まれません。長くても問題ありません。 |
プランに基づく transcript の上限(subscription_plans.max_text_length):
| プラン | transcript の最大文字数 |
|---|---|
| Free | 2 000 |
| Basic | 8 000 |
| Pro | 20 000 |
| Ultra | 50 000 |
| Custom | 100 000 |
LLM クライアントの目安:
- 短い出力(ノート、リマインダー、ToDo):
titleとsummaryのみを使います。transcriptは空にします。 - 長い出力(会議メモ、草稿、ブレインストーミング、調査内容): 1~3文の
summaryと、本文全体をtranscriptに入れます。すべてを summary に詰め込まないでください。1000文字の上限エラーが発生します。
上限超過時のエラーメッセージ:
summary too long (max 1000 chars, got N). For long-form content use the 'transcript' parameter (plan-based limit).transcript too long (max 20000 chars for pro plan, got N)
正しい使用例(Claude Desktop が会議を記録する場合):
create_note({
title: "Weekly engineering sync — API versioning",
summary: "Team agreed on semver deprecation policy with 6-month sunset window. Owner: Alex. Next sync: Thu.",
transcript: "Full meeting transcript: Alice raised the question of how to deprecate v1...\n\n[... 5 KB of detail ...]",
tags: "engineering,versioning,meeting"
})
上限が2種類ある理由:
summaryは、日次/週次/月次レポートの LLM プロンプトにそのまま含まれます。各 summary が20 KBにもなり得ると、レポートのプロンプトはコストとレイテンシーが大幅に増加し(さらに、利用量の多いユーザーではコンテキストウィンドウの上限を超えるリスクもあります)。本番データを測定した結果(中央値247、最大554)をもとに、2026年4月に1000文字の上限が設定されました。transcriptはレポートのプロンプトには一切含まれず、UI の詳細ビューにのみ表示されます。長い transcript にかかるコストはストレージのみで、LLM トークンは消費しません。プランごとの上限によって不正利用を防ぎつつ、それ以外は余裕を持たせています。
後方互換性: transcript は省略可能なパラメーターです(デフォルトは "")。create_note(title, summary, tags, type) を呼び出す古いクライアントも、変更なしで引き続き動作します。データベースには transcript = NULL が保存されます。マイグレーションは不要です。
ツール(20)
すべてのツールには MCP アノテーション(title、readOnlyHint、destructiveHint、idempotentHint、openWorldHint)が含まれており、MCP クライアントは適切な確認 UI を表示できます。すべてのツールは Telldone データベースのみを対象に実行されます(openWorldHint: false)。サーバーが外部 API にアクセスすることはありません。
読み取りツール(9)
| ツール | 説明 |
|---|---|
get_profile | 認証済みユーザーのプロフィールを返します。表示名、メールアドレス、ロケール、タイムゾーン、サブスクリプションプラン、利用統計(メモ、タスク、イベントの合計数)が含まれます。アカウントの状態や利用上限を確認するときに使用します。 |
get_notes | 音声メモの一覧を返します。次のフィルターを任意で指定できます:date_from/date_to(ISO 8601)、tag(文字列)、type(task/idea/info/status/meeting/event/reflection)、search(テキスト検索クエリ)、limit(デフォルトは20、最大100)、offset。本文全体を含まないメモのメタデータを返します。詳細には get_note を使用します。 |
get_note | UUID note_id で指定した単一のメモを返します。完全な文字起こし、AI による要約、リンクされたすべての子タスクとイベントが含まれます。get_notes または search でメモを見つけた後、内容全体を確認するときに使用します。 |
get_notes_full | 子要素(タスク+イベント)を含むメモを一括取得します。フィルターは get_notes と同じです。ループ内で get_note を呼び出す代わりに使用します。応答のデータ量が大きくなるため、limit は適切に設定してください。 |
get_tasks | タスクの一覧を返します。次のフィルターを指定できます:status(todo/done/all、デフォルト:todo)、tag、priority(low/medium/high)、期限の範囲を指定する date_from/date_to、limit、offset。タイトル、優先度、期限、reminder_at、タグ、完了状況を返します。 |
get_events | カレンダーイベントの一覧を返します。date_from/date_to で期間を指定するフィルターと、status(confirmed/tentative/cancelled)、limit、offset を指定できます。イベントのタイトル、開始・終了時刻、場所、参加者、リマインダーを返します。 |
get_reports | AI が生成した生産性レポートを返します。period(daily/weekly/monthly/yearly)と date_from/date_to で絞り込めます。レポートには、完了したタスク、パターン、生産性に関する分析がまとめられます。 |
get_tags | ユーザー定義タグを、使用頻度の高い順にすべて返します。パラメーターはありません。メモやタスクを絞り込む前に、利用可能なタグを確認するために使用します。 |
search | メモ、タスク、イベントを対象に、テキスト検索とセマンティック検索を組み合わせたハイブリッド検索を行います。パラメーター:query(文字列)。キーワードの一致とベクトル類似度を組み合わせるため、表現が異なっていても関連する結果を取得できます。関連度スコア付きで、複数の種類の結果を返します。 |
書き込みツール(11)
| ツール | 説明 |
|---|---|
process_note | テキストまたは音声入力に対して AI 分析パイプライン全体を実行します。モバイルアプリで音声メモを録音する場合と同じ処理です。text(文字列)、または audio_base64 と audio_format(m4a/wav/mp3)を受け付けます。AI が構造化されたメモ、タスク、イベント、タグを抽出します。audio_id を返してすぐに応答し、結果は非同期で届きます。処理済みの出力を取得するには、get_notes() でポーリングしてください。 |
create_note | AI 分析なしでプレーンテキストのメモを作成します。パラメーター:title(必須、最大 200 文字)、summary(最大 1000 文字、簡潔な概要。レポートの LLM プロンプトに含まれます)、transcript(プランに基づく上限あり、長文の本文。レポートのプロンプトには含まれません)、type(task/idea/info/status/meeting/event/reflection)、tags(カンマ区切り、最大 20 個)。長文を入力する場所については、メモのフィールドセクションをご覧ください。 |
create_task | title(必須)、description、priority(low/medium/high、既定値:medium)、deadline(ISO 8601 の日付)、reminder_at(ISO 8601 の日時)、tags(カンマ区切り)を指定してタスクを作成します。タスクはステータス「todo」で作成されます。モバイルアプリとリアルタイムで同期されます。 |
create_event | title(必須)、start_at/end_at(ISO 8601 の日時)、location、attendees(カンマ区切り)、reminder_minutes(整数)、recurrence(rrule 文字列)、status(confirmed/tentative)を指定してカレンダーイベントを作成します。 |
update_note | note_id(UUID、必須)でメモのフィールドを更新します。オプション:title、summary(最大 1000 文字)、transcript(プランに基づく上限あり、長文の本文)、type、tags、priority、status。指定したフィールドのみが変更され、省略したフィールドは変更されません。summary または transcript に " "(半角スペース 1 文字)を渡すと、フィールドを消去できます。 |
update_task | task_id(UUID、必須)でタスクのフィールドを更新します。オプション:title、description、priority、deadline、reminder_at、tags、status(todo/done)。完了済みにするには、ショートカットとして complete_task を使用してください。 |
update_event | event_id(UUID、必須)でイベントのフィールドを更新します。オプション:title、start_at、end_at、location、attendees、status(confirmed/tentative/cancelled)、reminder_minutes。 |
complete_task | task_id(UUID)でタスクを完了済みにします。status: "done" を指定する update_task のショートカットです。完了日時とソース("mcp")を記録します。 |
delete_note | note_id(UUID)でメモを論理削除します。リンクされているすべての子タスクとイベントにも連鎖的に適用され、それらも論理削除されます。ウェブアプリから元に戻せます。 |
delete_task | task_id(UUID)でタスクを論理削除します。親メモには影響しません。ウェブアプリから元に戻せます。 |
delete_event | event_id(UUID)でイベントを論理削除します。親メモには影響しません。ウェブアプリから元に戻せます。 |
すべての書き込みツールは、WebSocket 経由で接続中のモバイルクライアントおよびウェブクライアントとリアルタイムで同期します。
フルパイプライン:process_note
process_note ツールは、モバイルアプリでの録音と同じパイプラインを実行します。
Text or Audio --> STT (if audio) --> LLM Analysis --> Note + Tasks + Events + Tags
テキストモード(STT をスキップ):
{"name": "process_note", "arguments": {"text": "Need to buy groceries. Meeting with Katie at 3pm."}}
音声モード(Base64 エンコード):
{"name": "process_note", "arguments": {"audio_base64": "...", "audio_format": "m4a"}}
audio_id を返してすぐに応答します。結果は WebSocket 経由で届くか、get_notes() でポーリングして取得できます。
例
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'])
# NOTE: start_at is a STRING like '2026-04-18T11:30:00+00:00' — parse before date math
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 'Task title'}"
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
プランとアクセス
| プラン | MCP アクセス | 読み取り | 書き込み | 価格 |
|---|---|---|---|---|
| Free | -- | -- | -- | $0 |
| Basic | -- | -- | -- | $4.99/mo |
| Pro | 読み取りと書き込み | 9 ツール | 11 ツール | $11.99/mo |
| Ultra | 読み取りと書き込み | 9 ツール | 11 ツール | $24.99/mo |
Pro と Ultra で利用できる MCP ツールは同じです。Ultra では、より高い利用枠(メモ無制限、STT 月 1500 分、1 日 300 件のアップロード)が利用できます。
認証
TellDone では 2 つの接続方法を利用できます。いずれかを選んでください。
OAuth 2.1(推奨)
ワンクリックでブラウザーからサインインでき、コピーや保存は不要です。標準に準拠しており、OAuth 2.1 と PKCE(S256)、認可サーバーおよび保護対象リソースのディスカバリー(RFC 8414 / RFC 9728)、オーディエンスに紐づくアクセストークン(RFC 8707)、ローテーションするリフレッシュトークン、Client ID Metadata Documents(手動登録なしで Claude Desktop / claude.ai に接続できます)に対応しています。アクセスはスコープで制限されます。アプリに許可する操作を同意画面で選択でき、読み取り専用か読み取り・書き込み可能かはご利用プランに応じます。Settings → AI Agents でいつでもアクセスを取り消すか、MCP を無効にできます。
- コネクター URL:
https://api.telldone.app/mcp/user - ディスカバリー:
https://api.telldone.app/.well-known/oauth-protected-resource - スコープ:
notes:read·notes:write·tasks:read·tasks:write·events:read·events:write·reports:read·tags:read·tags:write·profile:read·offline_access
Bearer トークン
OAuth に対応していないクライアント向けです。Web アプリの Settings → AI Agents (MCP) → Enable で有効期限の長いトークンを生成し、Authorization: Bearer <token> として送信します。
- エンドポイント URL:
https://api.telldone.app/mcp/user/mcp - 再生成:Settings → AI Agents → Regenerate(古いトークンは即時に無効になります)
- 無効化:Settings → AI Agents → Disable(トークンは削除されます)
レート制限(どちらも共通): 5 リクエスト/秒。
トランスポート
MCP Streamable HTTP(ステートレス)。各リクエストは独立しています。
POST https://api.telldone.app/mcp/user/mcp
Authorization: Bearer <token>
Content-Type: application/json
Accept: application/json
リンク
- アプリ:app.telldone.app
- Web サイト:telldone.app
- ドキュメント:docs.telldone.app
- iOS アプリ:App Store
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。