teletype-mcp-server 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/.env.example +7 -0
  2. package/LAUNCHGUIDE.md +51 -0
  3. package/README-ru.md +49 -11
  4. package/README.md +68 -30
  5. package/dist/config.d.ts +4 -0
  6. package/dist/config.js +17 -0
  7. package/dist/config.js.map +1 -1
  8. package/dist/http.js +69 -1
  9. package/dist/http.js.map +1 -1
  10. package/dist/landing-page.d.ts +1 -0
  11. package/dist/landing-page.js +166 -0
  12. package/dist/landing-page.js.map +1 -0
  13. package/dist/oauth-page.d.ts +1 -0
  14. package/dist/oauth-page.js +242 -0
  15. package/dist/oauth-page.js.map +1 -0
  16. package/dist/oauth-store.d.ts +48 -0
  17. package/dist/oauth-store.js +131 -0
  18. package/dist/oauth-store.js.map +1 -0
  19. package/dist/oauth.d.ts +4 -0
  20. package/dist/oauth.js +382 -0
  21. package/dist/oauth.js.map +1 -0
  22. package/dist/request-context.d.ts +2 -0
  23. package/dist/request-context.js.map +1 -1
  24. package/dist/tool-policy.js +7 -0
  25. package/dist/tool-policy.js.map +1 -1
  26. package/docs/CLIENTS.md +651 -27
  27. package/docs/CONTRIBUTING.md +4 -2
  28. package/docs/OAUTH.md +54 -0
  29. package/docs/SECURITY.md +3 -1
  30. package/docs/ru/CLIENTS.md +651 -27
  31. package/docs/ru/CONTRIBUTING.md +4 -2
  32. package/docs/ru/OAUTH.md +54 -0
  33. package/docs/ru/SECURITY.md +3 -1
  34. package/examples/clients/goose-stdio.yaml +13 -0
  35. package/examples/clients/openclaw.json +13 -0
  36. package/gemini-extension.json +22 -0
  37. package/lhm.plugin.json +1408 -0
  38. package/llms-install.md +17 -0
  39. package/package.json +9 -4
  40. package/plugin/.claude-plugin/plugin.json +37 -0
  41. package/plugin/.cursor-plugin/plugin.json +34 -0
  42. package/plugin/LICENSE +21 -0
  43. package/plugin/README.md +48 -0
  44. package/plugin/assets/README.md +12 -0
  45. package/plugin/assets/consent.js +32 -0
  46. package/plugin/assets/fonts/OFL.txt +93 -0
  47. package/plugin/assets/fonts/manrope.woff2 +0 -0
  48. package/plugin/assets/icon-400.png +0 -0
  49. package/plugin/assets/icon.png +0 -0
  50. package/plugin/assets/icon.svg +15 -0
  51. package/plugin/assets/landing.css +442 -0
  52. package/plugin/assets/landing.js +85 -0
  53. package/plugin/assets/logo.svg +16 -0
  54. package/plugin/commands/client-summary.md +14 -0
  55. package/plugin/commands/draft-reply.md +13 -0
  56. package/plugin/commands/escalate-issue.md +15 -0
  57. package/plugin/commands/shift-handover.md +10 -0
  58. package/plugin/commands/triage-inbox.md +13 -0
  59. package/plugin/mcp.json +10 -0
  60. package/plugin/plugin.json +15 -0
  61. package/plugin/skills/teletype-support/SKILL.md +3 -1
  62. package/plugin/skills/teletype-support/references/installation.md +31 -0
  63. package/server.json +18 -4
  64. package/smithery.yaml +3 -2
@@ -23,6 +23,8 @@
23
23
  1. Откройте доступ к `https://github.com/Teletype-App/teletype-mcp-server` и проверьте адрес репозитория в `package.json` и `server.json`.
24
24
  2. Запустите `https://mcp.teletype.app/mcp` по HTTPS. Выполните `TELETYPE_API_TOKEN=... npm run hosted:smoke` с токеном проекта, чтобы проверить MCP-подключение и чтение через Teletype Public API. Команда не печатает данные проекта или токен.
25
25
  3. Убедитесь, что имя `teletype-mcp-server` свободно в npm, и настройте Trusted Publisher. Поле `mcpName` в `package.json` должно совпадать с именем в `server.json`.
26
- 4. Обновите версии пакета и записи для реестра вместе. Выполните `npm run check`, `npm run package:smoke`, `npm run mcp:conformance`, `npm run bundle:mcpb` и `GITHUB_REF_NAME=v<версия> npm run release:verify`. Проверьте `server.json` официальной командой `mcp-publisher validate`.
26
+ 4. Обновите версии пакета и записи для реестра вместе. Выполните `npm run check`, `npm run package:smoke`, `npm run mcp:conformance`, `npm run bundle:mcpb` и `GITHUB_REF_NAME=v<версия> npm run release:verify`. Проверьте `server.json` по официальной схеме из его поля `$schema`.
27
27
 
28
- Когда процесс выпуска опубликует npm-пакет, Docker-образ и файл `.mcpb`, проверьте их публичные адреса. Затем авторизуйтесь в [MCP Registry](https://github.com/modelcontextprotocol/registry/blob/main/docs/modelcontextprotocol-io/quickstart.mdx) и выполните `mcp-publisher publish server.json`. Реестр требует, чтобы указанная версия npm-пакета и удалённый адрес уже работали. Публикация в реестре выполняется отдельным шагом.
28
+ После публикации npm процесс выпуска вызывает `publish-registry.yml`. Он сверяет тег, ждёт появления npm-версии и публикует `server.json` через [GitHub OIDC](https://github.com/modelcontextprotocol/registry/blob/main/docs/modelcontextprotocol-io/github-actions.mdx). Отдельный секрет для Registry не нужен. При ошибке запустите **Publish MCP Registry** вручную с существующим тегом релиза. После выпуска проверьте адреса npm, Registry, Docker и `.mcpb`. Удалённый MCP-эндпоинт должен уже работать.
29
+
30
+ Обновляйте версии манифеста LobeHub, расширения Gemini, трёх манифестов плагина, маркетплейсов Claude и Cursor, MCPB и закреплённых npm-запусков вместе с версией пакета. `release:verify` проверяет их согласованность. При изменении инструментов, ресурсов или промптов обновляйте массивы возможностей в манифесте LobeHub.
@@ -0,0 +1,54 @@
1
+ [English](../OAUTH.md) | Русский
2
+
3
+ # OAuth для собственного HTTP-сервера
4
+
5
+ На публичном сервере `https://mcp.teletype.app/mcp` OAuth выключен. Для подключения нужен токен проекта в заголовке `X-Teletype-Api-Token`. Эта инструкция описывает включение OAuth на собственном сервере.
6
+
7
+ OAuth включается отдельно и по умолчанию отключён. Он добавляет подключение через браузер поверх существующего токена проекта Teletype Public API. OAuth-провайдер внутри Teletype не нужен. Пользователь открывает страницу из MCP-клиента, вводит токен своего проекта и подтверждает доступ. Сервер проверяет токен через Teletype, затем выдаёт клиенту отдельные OAuth-токены.
8
+
9
+ Страница подключения доступна на русском и английском. Сначала язык выбирается по настройкам браузера. Ручной выбор сохраняется в cookie. Переключение языка сохраняет введённый токен и разрешения. Ссылка «Где взять токен» открывает [настройки Public API Teletype](https://panel.teletype.app/settings/public-api) в новой вкладке.
10
+
11
+ ## Включение
12
+
13
+ Нужен Node.js 22.13+ или 24.x. На Node.js 20 продолжают работать stdio и HTTP с токеном проекта в заголовке, но OAuth с SQLite недоступен.
14
+
15
+ Задайте переменные в приватном окружении сервера:
16
+
17
+ ```dotenv
18
+ OAUTH_ENABLED=true
19
+ PUBLIC_BASE_URL=https://your-mcp-domain.example
20
+ OAUTH_DB_PATH=/var/lib/teletype-mcp/oauth.sqlite
21
+ OAUTH_ENCRYPTION_KEY=<64-character hex key>
22
+ ```
23
+
24
+ Один раз создайте ключ командой `openssl rand -hex 32` и сохраните его в хранилище секретов. После перезапуска нужен тот же ключ. `PUBLIC_BASE_URL` должен содержать публичный HTTPS origin. HTTP допускается только на loopback для локальной разработки. Проксируйте `/mcp`, `/authorize`, `/oauth/consent`, `/oauth/assets/*`, `/token`, `/register`, `/revoke` и `/.well-known/*` на сервер.
25
+
26
+ Каталог базы должен быть доступен на запись пользователю сервера и сохраняться между развёртываниями. Docker-образ готовит `/data` для пользователя `node`. Подключите named volume в `/data` и задайте `OAUTH_DB_PATH=/data/oauth.sqlite`. Для bind mount передайте каталог на хосте тому же пользователю. SQLite должна находиться на локальном диске. Такой вариант подходит для одного хоста. Репликам на разных машинах потребуется другая реализация общего хранилища.
27
+
28
+ Подключение через `X-Teletype-Api-Token` продолжает работать. OAuth-клиенты передают `Authorization: Bearer <OAuth access token>`. Токен проекта Teletype не является OAuth bearer-токеном. В одном запросе нельзя использовать оба способа авторизации.
29
+
30
+ ## Права и сроки
31
+
32
+ Клиент получает сведения о ресурсе через `/.well-known/oauth-protected-resource/mcp`, а о сервере авторизации через `/.well-known/oauth-authorization-server`. Регистрация, обмен кода с PKCE S256, обновление и отзыв токенов используют маршруты выше.
33
+
34
+ | Scope | Доступ |
35
+ | --- | --- |
36
+ | `read` | Чтение данных проекта. Обязателен для каждого подключения |
37
+ | `write` | Пишущие инструменты и отметка диалогов прочитанными. Выдаётся только после отдельного разрешения на странице подключения |
38
+ | `offline_access` | Автоматическое продление доступа до отзыва подключения |
39
+
40
+ Access-токен действует до часа. С `offline_access` клиент получает новые access-токены без повторного подключения пользователя. Само подключение не имеет фиксированного срока действия. Без `offline_access` оно заканчивается через час. Refresh-токен заменяется при каждом использовании. Повторное использование старого refresh-токена отзывает всё подключение. При обновлении можно уменьшить права, но нельзя добавить новые.
41
+
42
+ Регистрация клиента сохраняется, пока у него есть подключения с продлением доступа. У секрета клиента нет отдельного срока действия. Без подключений с продлением регистрация действует 30 дней. Отзыв одного подключения не прерывает остальные подключения того же клиента.
43
+
44
+ Общие ограничения read-only и toolsets действуют и для OAuth. Требование `confirm: true` у пишущих инструментов сохраняется. Права OAuth не заменяют разрешение пользователя на конкретное действие.
45
+
46
+ ## Хранение и восстановление
47
+
48
+ SQLite хранит регистрации клиентов, ожидающие подтверждения, одноразовые коды, подключения и хеши токенов. Содержимое записей, включая токен проекта, зашифровано AES-256-GCM. Для access-токенов, кодов и браузерных секретов используются хеши SHA-256. У каждого подключения хранится только хеш текущего refresh-токена. Сервер подписывает идентификатор подключения внутри refresh-токена с помощью HMAC. Это позволяет распознавать повторное использование старых токенов без хранения всей их истории. Клиент получает OAuth-токены, исходный токен Teletype ему не передаётся.
49
+
50
+ Погашение кода, замена refresh-токена и отзыв выполняются в коротких транзакциях. Просроченные записи не дают доступ и удаляются при записи в базу. Файл базы создаётся с правами только для владельца. SQLite-файлы исключены из Git и контекста Docker-сборки.
51
+
52
+ Делайте копию базы при остановленном сервере, ключ храните отдельно. Для восстановления нужны оба файла и тот же публичный origin. Неверный ключ или другой origin не позволят серверу запуститься. Замена ключа не является механизмом ротации. Удаление базы сбросит все OAuth-подключения, пользователям придётся подключиться заново. Для отзыва одного подключения используйте действие отключения в клиенте, которое вызывает `/revoke`. Отзыв токена проекта в Teletype также блокирует дальнейшие операции Public API для всех подключений с этим токеном.
53
+
54
+ Отозванное подключение удаляется сразу. Просроченные подключения удаляются при следующей записи в базу. Обработчики OAuth не пишут тела запросов и секреты в журнал. Настройте журнал обратного прокси так, чтобы он не сохранял тела форм и заголовки авторизации.
@@ -4,6 +4,8 @@
4
4
 
5
5
  Сообщайте об уязвимостях приватно на адрес [контакта Teletype по Public API](https://teletype.app/help/api/) [p@teletype.app](mailto:p@teletype.app). Не публикуйте их в issue. В сообщении укажите затронутые версии, шаги воспроизведения и возможные последствия.
6
6
 
7
- HTTP-транспорт требует `X-Teletype-Api-Token` в каждом MCP-запросе и передаёт его в Teletype. Отдельных пользователей и прав в MCP-сервере нет. Для удалённого доступа используйте HTTPS и считайте токен ключом ко всему проекту. Сервер проверяет наличие токена, а Teletype проверяет его действительность при вызове Public API.
7
+ По умолчанию HTTP-транспорт требует `X-Teletype-Api-Token` в каждом MCP-запросе и передаёт его в Teletype. Для удалённого доступа используйте HTTPS и считайте токен ключом ко всему проекту. Teletype проверяет его действительность при вызове Public API.
8
+
9
+ На публичном сервере OAuth выключен. При явном включении [OAuth](OAUTH.md) на собственном сервере он проверяет токен проекта при подключении, хранит его в зашифрованной записи SQLite и выдаёт клиенту отдельные bearer-токены с правами чтения и записи. Эти токены действуют только для ресурса `/mcp` данного сервера. OAuth без права записи блокирует изменения даже на сервере с включёнными пишущими инструментами. Ограничения сервера и явное подтверждение записей сохраняются. Повторное использование старого refresh-токена отзывает подключение. Храните базу и ключ шифрования приватно, резервные копии делайте отдельно.
8
10
 
9
11
  Загрузка локальных файлов через `attachment_path` доступна только в stdio-режиме.
@@ -0,0 +1,13 @@
1
+ extensions:
2
+ teletype:
3
+ name: teletype
4
+ type: stdio
5
+ enabled: true
6
+ cmd: npx
7
+ args:
8
+ - -y
9
+ - teletype-mcp-server
10
+ - --stdio
11
+ envs:
12
+ TELETYPE_API_TOKEN: your-teletype-public-api-token
13
+ timeout: 300
@@ -0,0 +1,13 @@
1
+ {
2
+ "mcp": {
3
+ "servers": {
4
+ "teletype": {
5
+ "url": "https://mcp.teletype.app/mcp",
6
+ "transport": "streamable-http",
7
+ "headers": {
8
+ "X-Teletype-Api-Token": "${TELETYPE_API_TOKEN}"
9
+ }
10
+ }
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "teletype",
3
+ "version": "0.1.1",
4
+ "description": "Teletype customer support: triage conversations, read customer history, draft replies, and hand over shifts.",
5
+ "mcpServers": {
6
+ "teletype": {
7
+ "httpUrl": "https://mcp.teletype.app/mcp",
8
+ "headers": {
9
+ "X-Teletype-Api-Token": "${TELETYPE_API_TOKEN}"
10
+ }
11
+ }
12
+ },
13
+ "contextFileName": "plugin/skills/teletype-support/SKILL.md",
14
+ "settings": [
15
+ {
16
+ "name": "Teletype Public API token",
17
+ "description": "Project token from Teletype settings. The assistant can access this project's conversations and customer data.",
18
+ "envVar": "TELETYPE_API_TOKEN",
19
+ "sensitive": true
20
+ }
21
+ ]
22
+ }