MCP-коннектор

Подключение Taskid к Claude, ChatGPT и другим AI-ассистентам по протоколу Model Context Protocol (Streamable HTTP, spec 2025-11-25).

URL коннектора

Один и тот же URL работает и для OAuth (Claude.ai, ChatGPT), и для Bearer-токена (Desktop / Code / Codex).

Два способа авторизации

OAuth (браузером)

Клиент сам открывает окно авторизации Taskid - вы логинитесь, выбираете доступ и подтверждаете. Токен вручную копировать не нужно.

Подходит: Claude.ai (веб, мобилка), ChatGPT.

Bearer-токен (CLI)

Создаёте API-токен tkd_... в настройках и прописываете его в конфиг MCP-клиента.

Подходит: Claude Desktop, Claude Code, Codex CLI, Cursor.

Claude.ai (OAuth)

  1. Откройте Customize → Connectors → + → Add custom connector.
  2. Вставьте URL https://taskid.app/mcp.
  3. Нажмите Add. Claude откроет страницу авторизации Taskid.
  4. Войдите в аккаунт (если ещё не вошли), выберите уровень доступа и списки.
  5. После подтверждения коннектор готов - Claude увидит ваши задачи.

Поле OAuth Client ID / Secret в advanced-настройках не заполняйте - Taskid использует Client ID Metadata Documents (CIMD) и Dynamic Client Registration, Claude всё подхватит сам.

ChatGPT (OAuth)

Нужен платный тариф и включённый Developer mode. Тариф определяет уровень доступа:

  • Plus / Pro - только чтение (read / fetch).
  • Business / Enterprise / Edu - полный доступ, включая запись.

Шаги:

  1. Включите Developer mode: Workspace Settings → Permissions & Roles → Connected Data → Developer mode (для Business/Enterprise) или в личных настройках (Plus/Pro).
  2. Перейдите в Settings → Connectors (или Apps & Connectors) и нажмите Create / Add new connector.
  3. Имя: Taskid, MCP Server URL: https://taskid.app/mcp.
  4. Authentication: OAuth, отметьте I trust this application.
  5. Сохраните - откроется окно авторизации Taskid.

URL обязательно HTTPS. Запускать пользовательские коннекторы можно только проверив, что сервер безопасен (Taskid - открытый исходный код, домен верифицируется TLS).

Claude Desktop / Claude Code (Bearer)

Desktop и Code пока не принимают URL с OAuth через UI. Используйте REST API-токен tkd_... из раздела API-токены:

claude mcp add --transport http taskid https://taskid.app/mcp \
  --header "Authorization: Bearer tkd_ВАШ_ТОКЕН"

Проверка: claude mcp list - должен показать taskid ... ✓ Connected.

Codex CLI (Bearer)

Для OpenAI Codex передайте токен через переменную окружения - это безопаснее, чем держать секрет прямо в конфиге:

export TASKID_TOKEN='tkd_ВАШ_ТОКЕН'

codex mcp add taskid \
  --url https://taskid.app/mcp \
  --bearer-token-env-var TASKID_TOKEN

Проверка:

codex mcp list
codex mcp get taskid --json

Область доступа (все списки / выбранные, чтение / запись) задаётся при создании токена в настройках.

Что умеет коннектор

Списки: list_lists, get_list, create_list, update_list, delete_list

Группы: list_groups, get_group, create_group, update_group, delete_group

Задачи: list_tasks, get_task, create_task, update_task, complete_task, reopen_task, delete_task

Заметки: list_info, get_info, create_info, update_info, delete_info

Уведомления: list_notifications, get_notification, create_notification, update_notification, delete_notification, attach_file_to_notification, detach_file_from_notification

Файлы: upload_file, attach_file_to_task, detach_file_from_task, attach_file_to_info, detach_file_from_info

Внешние ссылки (без загрузки): attach_link_to_task, attach_link_to_info, attach_link_to_notification

Общие списки

Если вам поделились списком (на сайте - кнопка «Поделиться»), коннектор увидит его наравне с собственными. У каждого списка приходят два поля:

  • is_owner - true, если вы владелец списка; false, если участник чужого.
  • is_shared - true, если у списка есть участники (личный это или общий).

Участник может читать содержимое и создавать/менять/удалять задачи и заметки в общем списке (включая прикрепление файлов). А вот сам список (его имя, иконка, архивация, удаление, перенос в группу) - менять может только владелец; попытка участника даст ошибку.

Поля completed_user_id и deleted_user_id у задач показывают, кто реально закрыл/удалил запись - удобно для аудита в общих списках.

Файлы и ссылки у задач, заметок и уведомлений

У каждой задачи, заметки и уведомления есть массив files - прикреплённые вложения. Если ничего не прикреплено - массив пустой. Каждый элемент:

{
  "id":     "9f1c-...",
  "name":   "contract.pdf",
  "size":   184320,
  "url":    "https://taskid.app/files/aa/bb/cc/9f1c....pdf",
  "source": "upload"           // 'upload' | 'link'
}

Поле source различает два типа прикреплений:

  • "upload" - реально загруженный файл в нашем хранилище. url ведёт на taskid.app и открывается в браузере без авторизации (capability-токен зашит в путь). Учитывается в файловой квоте пользователя.
  • "link" - внешний HTTPS-URL (наш сервер ничего не скачивает и не хранит). url ведёт на сторонний ресурс как есть. В квоте не учитывается; size может быть 0, если сервер ресурса не отдал размер на HEAD при прикреплении.

Как прикрепить загруженный файл (два шага)

  1. upload_file с полями name, mime_type, content_base64 - получите file.id. Файл сам по себе ни к чему не привязан - если не прикрепить его, orphan-sweep его удалит.
  2. attach_file_to_task, attach_file_to_info или attach_file_to_notification с file_ids: ["..."] - прикрепляет к задаче / заметке / уведомлению. В ответе придёт обновлённая запись с уже заполненным files.

Содержимое файла передаётся в base64 (не URL-safe, без префикса data:...). Размер ограничен квотой пользователя; слишком большой файл вернёт ошибку.

Как прикрепить внешний URL (без загрузки)

Если ресурс уже доступен по HTTPS (картинка, дашборд, лог, документ в облаке) - не нужно его скачивать и заливать к нам. Используйте одну из:

  • attach_link_to_task
  • attach_link_to_info
  • attach_link_to_notification

Параметр links - массив объектов { url, name? }. URL должен быть http/https; name опционален - если не задан, сервер возьмёт его из Content-Disposition HEAD-ответа или из последнего сегмента URL. В ответе придёт обновлённая задача / заметка / уведомление с source: "link" у новых элементов.

Открепление

detach_file_from_task / detach_file_from_info / detach_file_from_notification - одинаково работают и для upload, и для link (различаются по source в JSONB). Для upload-файла, загруженного вами, освобождается квота; для link физически ничего не удаляется - просто перестаёт быть прикреплённой.

Уведомления (kind=2)

Помимо задач и заметок ассистент может создавать уведомления - записи, которые на устройстве пользователя приходят видимым push-баннером (как сообщение от мессенджера). Полезно, чтобы напомнить о чём-то немедленно, а не «к завтрашнему утру».

  • create_notification - title, message?, priority? (0..3, severity для иконки/цвета), list_id? (если опущен - «Входящие»). Сразу при создании можно передать file_ids и links.
  • list_notifications / get_notification - чтение.
  • update_notification / delete_notification - редактирование текста и soft-delete. Состояние «прочитано / непрочитано» через MCP не управляется - это клиентский CRDT-флаг, выставляется только в приложении пользователем.

Уведомление видно во вкладке «Уведомления» приложения и попадает в указанный список. На iPhone/iPad/Mac/Android приходит push-баннером; одной кнопкой пользователь может превратить его в задачу.

Управление подключениями

Авторизация выполняется по стандарту OAuth 2.1. Активные подключения видны и отзываются в любой момент в разделе Настройки → MCP.

Нужен REST API (curl, скрипты, интеграции)? Справка по API →