mcpField
T
telldone

telldone

ローカル
github.com/exp78生産性017 週間前に更新

telldone について

TellDoneは、音声を中心にノート、タスク、イベント、レポートを管理するプランニングサービスです。MCPサーバーを通じてAIクライアントから記録を操作でき、OAuthまたはBearer Tokenで接続し、テキストも同じ分析フローで処理できます。

主な機能

  1. 01音声やテキストからノートを構造化
  2. 02ノート、タスク、イベントの管理
  3. 03日次・週次・月次・年次レポートの閲覧
  4. 04保存した記録の検索と絞り込み
  5. 05OAuthまたはBearer Tokenで接続

活用シーン

  1. 01口述した考えをノートやタスクに整理
  2. 02AIクライアントからタスクを作成・完了
  3. 03日付やテーマからノート、イベント、レポートを検索

MCP 対応

TellDoneのノート、タスク、イベントの読み取り、検索、作成、更新、削除とレポート参照のツールを提供します。MCPクライアントはOAuthまたはBearer Tokenで認証でき、process_noteでテキストをAI分析に渡せます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"exp78-telldone": {
"command": "npx",
"args": [
"-y",
"telldone-mcp"
],
"env": {
"TELLDONE_TOKEN": "<TELLDONE_TOKEN>"
}
}
}
}
起動コマンドnpx -y telldone-mcp
設定が必要な環境変数
TELLDONE_TOKENシークレットBearer token from app.telldone.app -> Settings -> AI Agents (MCP)

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmtelldone-mcp1.0.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

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)
BooleanJSONの true / falsetrueネイティブ型
IntegerJSONの数値42ネイティブ型
NullableフィールドJSONの nullnullNone / 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"、または null
  • note.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_profileid 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_notesid 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_fulltasks[] と events[] が埋め込まれたノートの配列(get_note と同じ一部のフィールド。metadata は含まれません)
get_tasksid 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_eventsid 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_reportsid 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_tagstag 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文字✅(リストのヘッダーとして)
summary1~3文の概要です。上限1000文字 — プロダクト上の決定です。✅ そのまま含まれます。 簡潔にしてください。
transcriptノートの本文全体です。詳細ビューに表示されます。プランに基づく上限(下記参照)❌ 含まれません。長くても問題ありません。

プランに基づく transcript の上限(subscription_plans.max_text_length):

プランtranscript の最大文字数
Free2 000
Basic8 000
Pro20 000
Ultra50 000
Custom100 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_noteUUID 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_reportsAI が生成した生産性レポートを返します。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_noteAI 分析なしでプレーンテキストのメモを作成します。パラメーター:title(必須、最大 200 文字)、summary(最大 1000 文字、簡潔な概要。レポートの LLM プロンプトに含まれます)、transcript(プランに基づく上限あり、長文の本文。レポートのプロンプトには含まれません)、type(task/idea/info/status/meeting/event/reflection)、tags(カンマ区切り、最大 20 個)。長文を入力する場所については、メモのフィールドセクションをご覧ください。
create_tasktitle(必須)、description、priority(low/medium/high、既定値:medium)、deadline(ISO 8601 の日付)、reminder_at(ISO 8601 の日時)、tags(カンマ区切り)を指定してタスクを作成します。タスクはステータス「todo」で作成されます。モバイルアプリとリアルタイムで同期されます。
create_eventtitle(必須)、start_at/end_at(ISO 8601 の日時)、location、attendees(カンマ区切り)、reminder_minutes(整数)、recurrence(rrule 文字列)、status(confirmed/tentative)を指定してカレンダーイベントを作成します。
update_notenote_id(UUID、必須)でメモのフィールドを更新します。オプション:title、summary(最大 1000 文字)、transcript(プランに基づく上限あり、長文の本文)、type、tags、priority、status。指定したフィールドのみが変更され、省略したフィールドは変更されません。summary または transcript に " "(半角スペース 1 文字)を渡すと、フィールドを消去できます。
update_tasktask_id(UUID、必須)でタスクのフィールドを更新します。オプション:title、description、priority、deadline、reminder_at、tags、status(todo/done)。完了済みにするには、ショートカットとして complete_task を使用してください。
update_eventevent_id(UUID、必須)でイベントのフィールドを更新します。オプション:title、start_at、end_at、location、attendees、status(confirmed/tentative/cancelled)、reminder_minutes。
complete_tasktask_id(UUID)でタスクを完了済みにします。status: "done" を指定する update_task のショートカットです。完了日時とソース("mcp")を記録します。
delete_notenote_id(UUID)でメモを論理削除します。リンクされているすべての子タスクとイベントにも連鎖的に適用され、それらも論理削除されます。ウェブアプリから元に戻せます。
delete_tasktask_id(UUID)でタスクを論理削除します。親メモには影響しません。ウェブアプリから元に戻せます。
delete_eventevent_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

リンク

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。