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.
- package/.env.example +7 -0
- package/LAUNCHGUIDE.md +51 -0
- package/README-ru.md +49 -11
- package/README.md +68 -30
- package/dist/config.d.ts +4 -0
- package/dist/config.js +17 -0
- package/dist/config.js.map +1 -1
- package/dist/http.js +69 -1
- package/dist/http.js.map +1 -1
- package/dist/landing-page.d.ts +1 -0
- package/dist/landing-page.js +166 -0
- package/dist/landing-page.js.map +1 -0
- package/dist/oauth-page.d.ts +1 -0
- package/dist/oauth-page.js +242 -0
- package/dist/oauth-page.js.map +1 -0
- package/dist/oauth-store.d.ts +48 -0
- package/dist/oauth-store.js +131 -0
- package/dist/oauth-store.js.map +1 -0
- package/dist/oauth.d.ts +4 -0
- package/dist/oauth.js +382 -0
- package/dist/oauth.js.map +1 -0
- package/dist/request-context.d.ts +2 -0
- package/dist/request-context.js.map +1 -1
- package/dist/tool-policy.js +7 -0
- package/dist/tool-policy.js.map +1 -1
- package/docs/CLIENTS.md +651 -27
- package/docs/CONTRIBUTING.md +4 -2
- package/docs/OAUTH.md +54 -0
- package/docs/SECURITY.md +3 -1
- package/docs/ru/CLIENTS.md +651 -27
- package/docs/ru/CONTRIBUTING.md +4 -2
- package/docs/ru/OAUTH.md +54 -0
- package/docs/ru/SECURITY.md +3 -1
- package/examples/clients/goose-stdio.yaml +13 -0
- package/examples/clients/openclaw.json +13 -0
- package/gemini-extension.json +22 -0
- package/lhm.plugin.json +1408 -0
- package/llms-install.md +17 -0
- package/package.json +9 -4
- package/plugin/.claude-plugin/plugin.json +37 -0
- package/plugin/.cursor-plugin/plugin.json +34 -0
- package/plugin/LICENSE +21 -0
- package/plugin/README.md +48 -0
- package/plugin/assets/README.md +12 -0
- package/plugin/assets/consent.js +32 -0
- package/plugin/assets/fonts/OFL.txt +93 -0
- package/plugin/assets/fonts/manrope.woff2 +0 -0
- package/plugin/assets/icon-400.png +0 -0
- package/plugin/assets/icon.png +0 -0
- package/plugin/assets/icon.svg +15 -0
- package/plugin/assets/landing.css +442 -0
- package/plugin/assets/landing.js +85 -0
- package/plugin/assets/logo.svg +16 -0
- package/plugin/commands/client-summary.md +14 -0
- package/plugin/commands/draft-reply.md +13 -0
- package/plugin/commands/escalate-issue.md +15 -0
- package/plugin/commands/shift-handover.md +10 -0
- package/plugin/commands/triage-inbox.md +13 -0
- package/plugin/mcp.json +10 -0
- package/plugin/plugin.json +15 -0
- package/plugin/skills/teletype-support/SKILL.md +3 -1
- package/plugin/skills/teletype-support/references/installation.md +31 -0
- package/server.json +18 -4
- package/smithery.yaml +3 -2
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
@font-face {
|
|
2
|
+
font-family: Manrope;
|
|
3
|
+
src: url("/assets/fonts/manrope.woff2") format("woff2");
|
|
4
|
+
font-weight: 200 800;
|
|
5
|
+
font-style: normal;
|
|
6
|
+
font-display: swap;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
:root {
|
|
10
|
+
color-scheme: light;
|
|
11
|
+
--surface: #fff;
|
|
12
|
+
--background: #f8f8f8;
|
|
13
|
+
--ink: #1c1c1c;
|
|
14
|
+
--muted: #555;
|
|
15
|
+
--line: #d8d8d8;
|
|
16
|
+
--blue: #006de5;
|
|
17
|
+
--blue-hover: #005fc9;
|
|
18
|
+
--blue-soft: #eef5ff;
|
|
19
|
+
--focus: #0079ff;
|
|
20
|
+
font-family: Manrope, sans-serif;
|
|
21
|
+
font-synthesis: none;
|
|
22
|
+
color: var(--ink);
|
|
23
|
+
background: var(--background);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
* {
|
|
27
|
+
box-sizing: border-box;
|
|
28
|
+
}
|
|
29
|
+
body {
|
|
30
|
+
margin: 0;
|
|
31
|
+
font-size: 16px;
|
|
32
|
+
line-height: 1.6;
|
|
33
|
+
}
|
|
34
|
+
::selection {
|
|
35
|
+
color: var(--ink);
|
|
36
|
+
background: #dcecff;
|
|
37
|
+
}
|
|
38
|
+
:focus-visible {
|
|
39
|
+
outline: 3px solid var(--focus);
|
|
40
|
+
outline-offset: 4px;
|
|
41
|
+
}
|
|
42
|
+
a,
|
|
43
|
+
button,
|
|
44
|
+
input {
|
|
45
|
+
-webkit-tap-highlight-color: transparent;
|
|
46
|
+
}
|
|
47
|
+
a {
|
|
48
|
+
color: var(--blue-hover);
|
|
49
|
+
text-underline-offset: 4px;
|
|
50
|
+
}
|
|
51
|
+
a:hover {
|
|
52
|
+
color: #004ca3;
|
|
53
|
+
}
|
|
54
|
+
button,
|
|
55
|
+
input {
|
|
56
|
+
font: inherit;
|
|
57
|
+
}
|
|
58
|
+
button[hidden] {
|
|
59
|
+
display: none;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.page {
|
|
63
|
+
width: 100%;
|
|
64
|
+
max-width: 860px;
|
|
65
|
+
min-height: 100svh;
|
|
66
|
+
margin-inline: auto;
|
|
67
|
+
padding: 48px 24px;
|
|
68
|
+
display: flex;
|
|
69
|
+
flex-direction: column;
|
|
70
|
+
}
|
|
71
|
+
.page-header {
|
|
72
|
+
display: flex;
|
|
73
|
+
align-items: center;
|
|
74
|
+
justify-content: space-between;
|
|
75
|
+
gap: 16px;
|
|
76
|
+
margin-bottom: 24px;
|
|
77
|
+
}
|
|
78
|
+
.brand {
|
|
79
|
+
display: inline-flex;
|
|
80
|
+
align-items: center;
|
|
81
|
+
min-height: 44px;
|
|
82
|
+
}
|
|
83
|
+
.brand img {
|
|
84
|
+
display: block;
|
|
85
|
+
width: 184px;
|
|
86
|
+
height: 42px;
|
|
87
|
+
}
|
|
88
|
+
.languages {
|
|
89
|
+
display: flex;
|
|
90
|
+
gap: 2px;
|
|
91
|
+
padding: 3px;
|
|
92
|
+
border: 1px solid var(--line);
|
|
93
|
+
border-radius: 10px;
|
|
94
|
+
}
|
|
95
|
+
.languages[hidden] {
|
|
96
|
+
display: none;
|
|
97
|
+
}
|
|
98
|
+
.languages button {
|
|
99
|
+
display: inline-flex;
|
|
100
|
+
align-items: center;
|
|
101
|
+
min-height: 44px;
|
|
102
|
+
padding: 8px 10px;
|
|
103
|
+
border-radius: 6px;
|
|
104
|
+
border: 0;
|
|
105
|
+
background: transparent;
|
|
106
|
+
font-size: 13px;
|
|
107
|
+
color: var(--muted);
|
|
108
|
+
text-decoration: none;
|
|
109
|
+
cursor: pointer;
|
|
110
|
+
}
|
|
111
|
+
.languages button:hover {
|
|
112
|
+
color: var(--ink);
|
|
113
|
+
background: #eee;
|
|
114
|
+
}
|
|
115
|
+
.languages button[aria-pressed="true"] {
|
|
116
|
+
color: var(--blue-hover);
|
|
117
|
+
background: var(--surface);
|
|
118
|
+
font-weight: 700;
|
|
119
|
+
box-shadow: 0 1px 4px rgb(0 0 0 / 8%);
|
|
120
|
+
}
|
|
121
|
+
.landing {
|
|
122
|
+
padding: 48px;
|
|
123
|
+
background: var(--surface);
|
|
124
|
+
border-radius: 16px;
|
|
125
|
+
box-shadow: 0 12px 48px rgb(0 0 0 / 6%);
|
|
126
|
+
}
|
|
127
|
+
h1 {
|
|
128
|
+
margin: 0 0 16px;
|
|
129
|
+
font-size: clamp(32px, 5vw, 48px);
|
|
130
|
+
font-weight: 750;
|
|
131
|
+
line-height: 1.15;
|
|
132
|
+
letter-spacing: -0.035em;
|
|
133
|
+
text-wrap: balance;
|
|
134
|
+
}
|
|
135
|
+
.description {
|
|
136
|
+
max-width: 52ch;
|
|
137
|
+
margin: 0;
|
|
138
|
+
font-size: 19px;
|
|
139
|
+
line-height: 1.65;
|
|
140
|
+
text-wrap: pretty;
|
|
141
|
+
}
|
|
142
|
+
.connection {
|
|
143
|
+
margin-top: 32px;
|
|
144
|
+
max-width: 540px;
|
|
145
|
+
}
|
|
146
|
+
.connection label {
|
|
147
|
+
display: block;
|
|
148
|
+
margin-bottom: 8px;
|
|
149
|
+
color: var(--muted);
|
|
150
|
+
font-size: 13px;
|
|
151
|
+
}
|
|
152
|
+
.address {
|
|
153
|
+
display: flex;
|
|
154
|
+
align-items: center;
|
|
155
|
+
gap: 8px;
|
|
156
|
+
padding: 6px;
|
|
157
|
+
border: 1px solid var(--line);
|
|
158
|
+
border-radius: 10px;
|
|
159
|
+
}
|
|
160
|
+
.address input {
|
|
161
|
+
width: 100%;
|
|
162
|
+
min-width: 0;
|
|
163
|
+
min-height: 44px;
|
|
164
|
+
padding: 8px;
|
|
165
|
+
border: 0;
|
|
166
|
+
border-radius: 4px;
|
|
167
|
+
color: var(--ink);
|
|
168
|
+
background: transparent;
|
|
169
|
+
font-size: 16px;
|
|
170
|
+
caret-color: var(--blue);
|
|
171
|
+
}
|
|
172
|
+
.address button {
|
|
173
|
+
min-height: 44px;
|
|
174
|
+
padding: 8px 12px;
|
|
175
|
+
border: 0;
|
|
176
|
+
border-radius: 6px;
|
|
177
|
+
background: var(--blue-soft);
|
|
178
|
+
color: var(--blue-hover);
|
|
179
|
+
font-size: 13px;
|
|
180
|
+
font-weight: 700;
|
|
181
|
+
white-space: nowrap;
|
|
182
|
+
cursor: pointer;
|
|
183
|
+
}
|
|
184
|
+
.address button:hover {
|
|
185
|
+
background: #e0edff;
|
|
186
|
+
}
|
|
187
|
+
.address button:disabled {
|
|
188
|
+
cursor: wait;
|
|
189
|
+
opacity: 0.7;
|
|
190
|
+
}
|
|
191
|
+
.copy-icon,
|
|
192
|
+
.copy-check {
|
|
193
|
+
display: none;
|
|
194
|
+
}
|
|
195
|
+
.address button[data-state="copied"] .copy-document {
|
|
196
|
+
display: none;
|
|
197
|
+
}
|
|
198
|
+
.address button[data-state="copied"] .copy-check {
|
|
199
|
+
display: block;
|
|
200
|
+
}
|
|
201
|
+
.actions {
|
|
202
|
+
display: flex;
|
|
203
|
+
align-items: center;
|
|
204
|
+
flex-wrap: wrap;
|
|
205
|
+
gap: 12px 24px;
|
|
206
|
+
margin-top: 24px;
|
|
207
|
+
}
|
|
208
|
+
.button {
|
|
209
|
+
display: inline-flex;
|
|
210
|
+
justify-content: center;
|
|
211
|
+
align-items: center;
|
|
212
|
+
min-height: 48px;
|
|
213
|
+
padding: 12px 22px;
|
|
214
|
+
border-radius: 8px;
|
|
215
|
+
color: #fff;
|
|
216
|
+
background: var(--blue);
|
|
217
|
+
font-size: 15px;
|
|
218
|
+
font-weight: 700;
|
|
219
|
+
text-decoration: none;
|
|
220
|
+
}
|
|
221
|
+
.button:hover {
|
|
222
|
+
color: #fff;
|
|
223
|
+
background: var(--blue-hover);
|
|
224
|
+
}
|
|
225
|
+
.button:active {
|
|
226
|
+
background: #0052b0;
|
|
227
|
+
}
|
|
228
|
+
.source {
|
|
229
|
+
display: inline-flex;
|
|
230
|
+
align-items: center;
|
|
231
|
+
min-height: 44px;
|
|
232
|
+
font-size: 15px;
|
|
233
|
+
}
|
|
234
|
+
footer {
|
|
235
|
+
margin-top: 16px;
|
|
236
|
+
display: flex;
|
|
237
|
+
justify-content: center;
|
|
238
|
+
flex-wrap: wrap;
|
|
239
|
+
gap: 4px 24px;
|
|
240
|
+
text-align: center;
|
|
241
|
+
}
|
|
242
|
+
footer a {
|
|
243
|
+
display: inline-flex;
|
|
244
|
+
align-items: center;
|
|
245
|
+
min-height: 44px;
|
|
246
|
+
font-size: 13px;
|
|
247
|
+
}
|
|
248
|
+
.sr-only {
|
|
249
|
+
position: absolute;
|
|
250
|
+
width: 1px;
|
|
251
|
+
height: 1px;
|
|
252
|
+
padding: 0;
|
|
253
|
+
margin: -1px;
|
|
254
|
+
overflow: hidden;
|
|
255
|
+
clip-path: inset(50%);
|
|
256
|
+
white-space: nowrap;
|
|
257
|
+
border: 0;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
h2 {
|
|
261
|
+
margin: 0 0 16px;
|
|
262
|
+
font-size: 25px;
|
|
263
|
+
font-weight: 750;
|
|
264
|
+
line-height: 1.35;
|
|
265
|
+
letter-spacing: -0.025em;
|
|
266
|
+
text-wrap: balance;
|
|
267
|
+
}
|
|
268
|
+
.examples {
|
|
269
|
+
margin-top: 44px;
|
|
270
|
+
padding-top: 36px;
|
|
271
|
+
border-top: 1px solid var(--line);
|
|
272
|
+
}
|
|
273
|
+
.examples dl {
|
|
274
|
+
margin: 0;
|
|
275
|
+
}
|
|
276
|
+
.example {
|
|
277
|
+
display: grid;
|
|
278
|
+
grid-template-columns: 180px minmax(0, 1fr);
|
|
279
|
+
gap: 24px;
|
|
280
|
+
padding-block: 16px;
|
|
281
|
+
}
|
|
282
|
+
.example + .example {
|
|
283
|
+
border-top: 1px solid #ededed;
|
|
284
|
+
}
|
|
285
|
+
.example dt {
|
|
286
|
+
font-size: 15px;
|
|
287
|
+
font-weight: 700;
|
|
288
|
+
}
|
|
289
|
+
.example dd {
|
|
290
|
+
margin: 0;
|
|
291
|
+
color: var(--muted);
|
|
292
|
+
font-size: 15px;
|
|
293
|
+
line-height: 1.7;
|
|
294
|
+
}
|
|
295
|
+
:lang(ru) q {
|
|
296
|
+
quotes: "«" "»";
|
|
297
|
+
}
|
|
298
|
+
:lang(en) q {
|
|
299
|
+
quotes: "“" "”";
|
|
300
|
+
}
|
|
301
|
+
.setup {
|
|
302
|
+
margin-top: 32px;
|
|
303
|
+
}
|
|
304
|
+
.setup p {
|
|
305
|
+
margin: 0;
|
|
306
|
+
color: var(--muted);
|
|
307
|
+
font-size: 15px;
|
|
308
|
+
}
|
|
309
|
+
.setup ol {
|
|
310
|
+
margin: 16px 0 0;
|
|
311
|
+
padding-left: 24px;
|
|
312
|
+
font-size: 15px;
|
|
313
|
+
}
|
|
314
|
+
.setup li {
|
|
315
|
+
padding-left: 6px;
|
|
316
|
+
}
|
|
317
|
+
.setup li + li {
|
|
318
|
+
margin-top: 12px;
|
|
319
|
+
}
|
|
320
|
+
.setup li::marker {
|
|
321
|
+
color: var(--blue-hover);
|
|
322
|
+
font-weight: 700;
|
|
323
|
+
}
|
|
324
|
+
.setup a {
|
|
325
|
+
display: inline-block;
|
|
326
|
+
vertical-align: top;
|
|
327
|
+
padding-block: 8px;
|
|
328
|
+
margin-block: -8px;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
@media (max-width: 560px) {
|
|
332
|
+
.page {
|
|
333
|
+
justify-content: flex-start;
|
|
334
|
+
padding: 20px 20px max(28px, env(safe-area-inset-bottom));
|
|
335
|
+
background: var(--surface);
|
|
336
|
+
}
|
|
337
|
+
.page-header {
|
|
338
|
+
gap: 12px;
|
|
339
|
+
margin-bottom: 28px;
|
|
340
|
+
}
|
|
341
|
+
.brand img {
|
|
342
|
+
width: 144px;
|
|
343
|
+
height: auto;
|
|
344
|
+
}
|
|
345
|
+
.languages {
|
|
346
|
+
padding: 0;
|
|
347
|
+
border: 0;
|
|
348
|
+
}
|
|
349
|
+
.languages button {
|
|
350
|
+
padding-inline: 8px;
|
|
351
|
+
font-size: 12px;
|
|
352
|
+
}
|
|
353
|
+
.languages button[aria-pressed="true"] {
|
|
354
|
+
background: var(--blue-soft);
|
|
355
|
+
box-shadow: none;
|
|
356
|
+
}
|
|
357
|
+
.landing {
|
|
358
|
+
padding: 0;
|
|
359
|
+
border-radius: 0;
|
|
360
|
+
box-shadow: none;
|
|
361
|
+
}
|
|
362
|
+
h1 {
|
|
363
|
+
font-size: clamp(32px, 9vw, 40px);
|
|
364
|
+
}
|
|
365
|
+
.description {
|
|
366
|
+
font-size: 17px;
|
|
367
|
+
}
|
|
368
|
+
.address {
|
|
369
|
+
gap: 4px;
|
|
370
|
+
padding: 4px;
|
|
371
|
+
}
|
|
372
|
+
.address input {
|
|
373
|
+
flex: 1;
|
|
374
|
+
}
|
|
375
|
+
.address button {
|
|
376
|
+
display: inline-flex;
|
|
377
|
+
justify-content: center;
|
|
378
|
+
align-items: center;
|
|
379
|
+
flex: 0 0 44px;
|
|
380
|
+
padding: 0;
|
|
381
|
+
}
|
|
382
|
+
.address button[hidden] {
|
|
383
|
+
display: none;
|
|
384
|
+
}
|
|
385
|
+
.copy-icon {
|
|
386
|
+
display: block;
|
|
387
|
+
}
|
|
388
|
+
.copy-label {
|
|
389
|
+
position: absolute;
|
|
390
|
+
width: 1px;
|
|
391
|
+
height: 1px;
|
|
392
|
+
padding: 0;
|
|
393
|
+
margin: -1px;
|
|
394
|
+
overflow: hidden;
|
|
395
|
+
clip-path: inset(50%);
|
|
396
|
+
white-space: nowrap;
|
|
397
|
+
}
|
|
398
|
+
.actions {
|
|
399
|
+
display: grid;
|
|
400
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
401
|
+
gap: 12px;
|
|
402
|
+
margin-top: 16px;
|
|
403
|
+
}
|
|
404
|
+
.button {
|
|
405
|
+
padding-inline: 16px;
|
|
406
|
+
}
|
|
407
|
+
.source {
|
|
408
|
+
justify-content: center;
|
|
409
|
+
min-height: 48px;
|
|
410
|
+
padding: 12px 18px;
|
|
411
|
+
border: 1px solid var(--line);
|
|
412
|
+
border-radius: 8px;
|
|
413
|
+
text-decoration: none;
|
|
414
|
+
}
|
|
415
|
+
h2 {
|
|
416
|
+
font-size: 23px;
|
|
417
|
+
}
|
|
418
|
+
.examples {
|
|
419
|
+
margin-top: 32px;
|
|
420
|
+
padding-top: 28px;
|
|
421
|
+
}
|
|
422
|
+
.example {
|
|
423
|
+
grid-template-columns: minmax(0, 1fr);
|
|
424
|
+
gap: 6px;
|
|
425
|
+
padding-block: 18px;
|
|
426
|
+
}
|
|
427
|
+
.example dt,
|
|
428
|
+
.example dd {
|
|
429
|
+
font-size: 16px;
|
|
430
|
+
}
|
|
431
|
+
.setup {
|
|
432
|
+
margin-top: 28px;
|
|
433
|
+
padding-top: 28px;
|
|
434
|
+
border-top: 1px solid var(--line);
|
|
435
|
+
}
|
|
436
|
+
footer {
|
|
437
|
+
justify-content: flex-start;
|
|
438
|
+
gap: 4px 20px;
|
|
439
|
+
margin-top: 24px;
|
|
440
|
+
text-align: left;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
const button = document.getElementById("copy-url");
|
|
2
|
+
const input = document.getElementById("mcp-url");
|
|
3
|
+
const status = document.getElementById("copy-status");
|
|
4
|
+
const label = button.querySelector(".copy-label");
|
|
5
|
+
const translations = JSON.parse(document.querySelector(".page").dataset.translations);
|
|
6
|
+
const languages = document.querySelectorAll(".languages [data-locale]");
|
|
7
|
+
let reset;
|
|
8
|
+
let feedback;
|
|
9
|
+
|
|
10
|
+
function showFeedback(key) {
|
|
11
|
+
feedback = key;
|
|
12
|
+
status.textContent = key ? button.dataset[key] : "";
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function setState(state) {
|
|
16
|
+
label.textContent = button.dataset[state];
|
|
17
|
+
button.title = button.dataset[state];
|
|
18
|
+
button.dataset.state = state;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
button.hidden = false;
|
|
22
|
+
button.addEventListener("click", async () => {
|
|
23
|
+
clearTimeout(reset);
|
|
24
|
+
showFeedback();
|
|
25
|
+
button.disabled = true;
|
|
26
|
+
setState("copying");
|
|
27
|
+
try {
|
|
28
|
+
await navigator.clipboard.writeText(input.value);
|
|
29
|
+
setState("copied");
|
|
30
|
+
showFeedback("copied");
|
|
31
|
+
reset = setTimeout(() => {
|
|
32
|
+
setState("copy");
|
|
33
|
+
}, 2000);
|
|
34
|
+
} catch {
|
|
35
|
+
input.focus();
|
|
36
|
+
input.select();
|
|
37
|
+
setState("copy");
|
|
38
|
+
showFeedback("fallback");
|
|
39
|
+
} finally {
|
|
40
|
+
button.disabled = false;
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
function changeLanguage(locale, announce = false) {
|
|
45
|
+
if (locale !== "ru" && locale !== "en") return;
|
|
46
|
+
const copy = translations[locale];
|
|
47
|
+
if (!copy) return;
|
|
48
|
+
document.documentElement.lang = locale;
|
|
49
|
+
document.querySelectorAll("[data-i18n]").forEach((element) => {
|
|
50
|
+
element.textContent = element.dataset.i18n.split(".").reduce((value, key) => value[key], copy);
|
|
51
|
+
});
|
|
52
|
+
document.querySelectorAll("[data-i18n-href]").forEach((element) => {
|
|
53
|
+
element.href = copy[element.dataset.i18nHref];
|
|
54
|
+
});
|
|
55
|
+
document.querySelector(".brand").setAttribute("aria-label", copy.website + copy.newTab);
|
|
56
|
+
document.querySelector(".actions").setAttribute("aria-label", copy.links);
|
|
57
|
+
document
|
|
58
|
+
.querySelectorAll('meta[name="description"], meta[property="og:description"]')
|
|
59
|
+
.forEach((element) => element.setAttribute("content", copy.description));
|
|
60
|
+
for (const key of ["copy", "copied", "copying", "copyFallback"]) {
|
|
61
|
+
button.dataset[key === "copyFallback" ? "fallback" : key] = copy[key];
|
|
62
|
+
}
|
|
63
|
+
setState(button.dataset.state || "copy");
|
|
64
|
+
showFeedback(feedback);
|
|
65
|
+
languages.forEach((link) => {
|
|
66
|
+
link.setAttribute("aria-pressed", String(link.dataset.locale === locale));
|
|
67
|
+
});
|
|
68
|
+
document.cookie = `teletype_oauth_locale=${locale}; Path=/; Max-Age=31536000; SameSite=Lax${location.protocol === "https:" ? "; Secure" : ""}`;
|
|
69
|
+
if (announce) document.getElementById("language-status").textContent = copy.languageChanged;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
languages.forEach((link) => {
|
|
73
|
+
link.addEventListener("click", () => {
|
|
74
|
+
const locale = link.dataset.locale;
|
|
75
|
+
if (locale === document.documentElement.lang) return;
|
|
76
|
+
changeLanguage(locale, true);
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
document.querySelector(".languages").hidden = false;
|
|
81
|
+
const url = new URL(location.href);
|
|
82
|
+
if (url.searchParams.has("lang")) {
|
|
83
|
+
url.searchParams.delete("lang");
|
|
84
|
+
history.replaceState(history.state, "", url);
|
|
85
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<svg width="1533" height="350" viewBox="0 0 1533 350" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M622.762 218.064V101.3C622.762 95.0849 627.599 90 633.925 90C640.25 90 645.273 95.0849 645.273 101.3V218.064C645.273 224.467 640.25 229.364 633.925 229.364C627.785 229.364 622.762 224.467 622.762 218.064ZM464.232 217.876V118.061H432.605C426.651 118.061 422 113.165 422 107.326C422 101.488 426.651 96.5916 432.605 96.5916H519.115C524.882 96.5916 529.534 101.488 529.534 107.326C529.534 113.165 524.882 118.061 519.115 118.061H487.302V217.876C487.302 224.279 482.092 229.364 475.767 229.364C469.441 229.364 464.232 224.279 464.232 217.876ZM535.962 171.735H586.38C584.892 157.046 576.333 145.558 561.45 145.558C547.683 145.558 538.008 156.292 535.962 171.735ZM564.053 230.683C579.309 230.683 590.472 225.598 599.402 217.5C601.076 215.805 602.378 213.356 602.378 210.531C602.378 205.258 598.472 201.303 593.448 201.303C590.844 201.303 589.355 202.057 587.681 203.375C581.355 208.648 573.914 212.038 564.425 212.038C549.914 212.038 538.565 202.998 536.147 186.802H597.727C603.495 186.802 608.332 182.282 608.332 175.879C608.332 152.903 592.89 126.913 561.635 126.913C533.542 126.913 513.635 150.266 513.635 178.704V179.08C513.635 209.778 535.589 230.683 564.053 230.683ZM732.071 171.735H681.653C683.699 156.292 693.374 145.558 707.141 145.558C722.024 145.558 730.582 157.046 732.071 171.735ZM745.095 217.5C736.165 225.598 725.002 230.683 709.747 230.683C681.282 230.683 659.329 209.778 659.329 179.08V178.704C659.329 150.266 679.235 126.913 707.328 126.913C738.583 126.913 754.025 152.903 754.025 175.879C754.025 182.282 749.188 186.802 743.421 186.802H681.84C684.259 202.998 695.607 212.038 710.119 212.038C719.607 212.038 727.049 208.648 733.374 203.375C735.049 202.057 736.537 201.303 739.142 201.303C744.165 201.303 748.072 205.258 748.072 210.531C748.072 213.356 746.769 215.805 745.095 217.5ZM771.801 200.927C771.801 222.773 783.521 230.118 800.079 230.118C806.033 230.118 810.684 229.176 815.521 227.481C818.684 226.163 821.474 222.773 821.474 218.63C821.474 213.356 817.009 209.213 811.986 209.213C811.727 209.213 811.287 209.282 810.714 209.371L810.714 209.371C809.641 209.538 808.102 209.778 806.405 209.778C798.777 209.778 794.312 206.2 794.312 197.348V148.571H811.986C817.381 148.571 821.846 144.239 821.846 138.778C821.846 133.316 817.381 128.985 811.986 128.985H794.312V112.035C794.312 105.82 789.289 100.735 783.149 100.735C776.824 100.735 771.801 105.82 771.801 112.035V128.985H768.08C762.684 128.985 758.405 133.316 758.405 138.778C758.405 144.239 762.684 148.571 768.08 148.571H771.801V200.927ZM851.531 259.12C845.205 259.12 840.554 258.178 835.903 256.295C832.554 255.165 828.834 252.34 828.834 246.878C828.834 241.228 833.113 237.462 837.95 237.462C839.81 237.462 840.926 237.839 842.043 238.215C844.647 238.968 846.694 239.533 849.857 239.533C856.554 239.533 860.089 236.709 863.81 228.987L864.554 226.915L828.089 144.427C827.345 142.732 826.787 140.472 826.787 138.965C826.787 132.562 831.624 127.854 837.95 127.854C843.717 127.854 846.88 131.244 848.926 136.517L875.345 202.621L899.902 136.517C901.763 131.809 904.926 127.854 910.693 127.854C916.646 127.854 921.484 132.562 921.484 138.589C921.484 140.472 920.925 142.92 920.553 144.05L884.647 231.247C876.275 251.587 867.345 259.12 851.531 259.12ZM932.935 139.343V248.197C932.935 254.601 937.958 259.497 944.097 259.497C950.423 259.497 955.446 254.601 955.446 248.197V212.98C962.33 222.208 972.562 230.494 988.934 230.494C1012.19 230.494 1034.51 211.85 1034.51 178.892V178.515C1034.51 145.369 1012 126.913 988.934 126.913C972.934 126.913 962.702 135.2 955.446 145.558V139.343C955.446 132.94 950.423 127.855 944.097 127.855C937.772 127.855 932.935 132.94 932.935 139.343ZM983.539 210.719C998.981 210.719 1011.63 198.477 1011.63 178.891V178.514C1011.63 159.305 998.795 146.687 983.539 146.687C968.284 146.687 954.889 159.493 954.889 178.514V178.891C954.889 197.912 968.284 210.719 983.539 210.719ZM1115.17 171.735H1064.76C1066.8 156.292 1076.48 145.558 1090.24 145.558C1105.13 145.558 1113.69 157.046 1115.17 171.735ZM1128.2 217.5C1119.27 225.598 1108.11 230.683 1092.85 230.683C1064.38 230.683 1042.43 209.778 1042.43 179.08V178.704C1042.43 150.266 1062.34 126.913 1090.43 126.913C1121.69 126.913 1137.13 152.903 1137.13 175.879C1137.13 182.282 1132.29 186.802 1126.52 186.802H1064.94C1067.36 202.998 1078.71 212.038 1093.22 212.038C1102.71 212.038 1110.15 208.648 1116.48 203.375C1118.15 202.057 1119.64 201.303 1122.24 201.303C1127.27 201.303 1131.17 205.258 1131.17 210.531C1131.17 213.356 1129.87 215.805 1128.2 217.5ZM1172.44 225.872C1173.79 227.957 1176.24 229 1179.8 229H1182.74C1188.51 229 1192.31 226.24 1194.15 220.72L1201.33 200.664H1250.82L1258 220.72C1259.84 226.24 1263.64 229 1269.41 229H1272.9C1276.46 229 1278.91 227.957 1280.26 225.872C1281.74 223.787 1281.8 220.965 1280.45 217.408L1238.68 108.296C1236.84 102.899 1232.98 100.2 1227.09 100.2H1225.62C1219.73 100.2 1215.86 102.899 1214.02 108.296L1172.44 217.408C1171.09 220.965 1171.09 223.787 1172.44 225.872ZM1244.02 180.976H1208.32L1226.35 130.744L1244.02 180.976ZM1289 247.284V138.43C1289 132.027 1293.84 126.942 1300.16 126.942C1306.49 126.942 1311.51 132.027 1311.51 138.43V144.645C1318.77 134.287 1329 126 1345 126C1368.07 126 1390.58 144.456 1390.58 177.602V177.979C1390.58 210.937 1368.25 229.581 1345 229.581C1328.63 229.581 1318.39 221.295 1311.51 212.067V247.284C1311.51 253.687 1306.49 258.584 1300.16 258.584C1294.02 258.584 1289 253.687 1289 247.284ZM1398 138.43V247.284C1398 253.687 1403.02 258.584 1409.16 258.584C1415.49 258.584 1420.51 253.687 1420.51 247.284V212.067C1427.39 221.295 1437.63 229.581 1454 229.581C1477.25 229.581 1499.58 210.937 1499.58 177.979V177.602C1499.58 144.456 1477.07 126 1454 126C1438 126 1427.77 134.287 1420.51 144.645V138.43C1420.51 132.027 1415.49 126.942 1409.16 126.942C1402.84 126.942 1398 132.027 1398 138.43ZM1340.6 209.806C1356.05 209.806 1368.7 197.564 1368.7 177.978V177.601C1368.7 158.392 1355.86 145.774 1340.6 145.774C1325.35 145.774 1311.95 158.58 1311.95 177.601V177.978C1311.95 196.999 1325.35 209.806 1340.6 209.806ZM1477.7 177.978C1477.7 197.564 1465.05 209.806 1449.6 209.806C1434.35 209.806 1420.95 196.999 1420.95 177.978V177.601C1420.95 158.58 1434.35 145.774 1449.6 145.774C1464.86 145.774 1477.7 158.392 1477.7 177.601V177.978Z" fill="black"/>
|
|
3
|
+
<g clip-path="url(#clip0_512_1393)">
|
|
4
|
+
<path d="M365 175C365 96.0233 300.977 32 222 32C143.023 32 79 96.0233 79 175C79 253.977 143.023 318 222 318C300.977 318 365 253.977 365 175Z" fill="#0079FF"/>
|
|
5
|
+
<path d="M222 84.4333C272.018 84.4333 312.567 124.941 312.567 174.911C312.567 224.882 272.019 265.39 222 265.39C212.97 265.39 204.252 264.064 196.022 261.606L165.185 279.867V245.369C144.603 228.783 131.433 203.386 131.433 174.912C131.433 124.942 171.981 84.4333 222 84.4333ZM265.842 189.524C263.047 188.668 260.105 190.344 259.281 193.165C254.474 209.838 239.146 221.483 222.001 221.483C204.855 221.483 189.515 209.837 184.714 193.165C183.896 190.344 180.99 188.669 178.148 189.524C175.335 190.356 173.729 193.334 174.546 196.167C180.654 217.372 200.177 232.2 222 232.2C243.824 232.2 263.335 217.372 269.455 196.167C270.272 193.334 268.654 190.356 265.842 189.524Z" fill="url(#paint0_linear_512_1393)"/>
|
|
6
|
+
</g>
|
|
7
|
+
<defs>
|
|
8
|
+
<linearGradient id="paint0_linear_512_1393" x1="159.451" y1="117.327" x2="292.509" y2="223.659" gradientUnits="userSpaceOnUse">
|
|
9
|
+
<stop stop-color="white"/>
|
|
10
|
+
<stop offset="1" stop-color="#E8F3FF"/>
|
|
11
|
+
</linearGradient>
|
|
12
|
+
<clipPath id="clip0_512_1393">
|
|
13
|
+
<rect width="286" height="286" fill="white" transform="translate(79 32)"/>
|
|
14
|
+
</clipPath>
|
|
15
|
+
</defs>
|
|
16
|
+
</svg>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Summarize a Teletype client's profile, notes, and recent requests
|
|
3
|
+
argument-hint: "<name | phone | email | client_id>"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Client summary for: $ARGUMENTS
|
|
7
|
+
|
|
8
|
+
1. Call `lookup_client_profile` with that client.
|
|
9
|
+
2. Create a short summary:
|
|
10
|
+
- Name and contact details
|
|
11
|
+
- Tags and custom fields (segment, order number)
|
|
12
|
+
- Operator notes
|
|
13
|
+
- History and status of recent requests
|
|
14
|
+
- Recommendations for further work with the client.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Read a Teletype conversation and draft a reply for approval
|
|
3
|
+
argument-hint: "<dialog_id> [instructions]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Preparing a response to the Teletype conversation from: $ARGUMENTS
|
|
7
|
+
|
|
8
|
+
1. Call `read_conversation_thread` for that dialog to read the recent messages.
|
|
9
|
+
2. If needed, call `lookup_client_profile` for context.
|
|
10
|
+
3. Draft a clear, empathetic reply in the language requested by the user or used by the client. Apply any extra instructions from the arguments.
|
|
11
|
+
4. Show the draft to the user before calling `send_reply_to_client`. Sending requires `confirm: true` and the user's explicit approval.
|
|
12
|
+
|
|
13
|
+
Follow the `teletype-support` skill rules for dry-run and delivery reporting.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Create a structured bug report or escalation from a Teletype conversation
|
|
3
|
+
argument-hint: "<dialog_id> [component]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Escalation from the Teletype conversation: $ARGUMENTS
|
|
7
|
+
|
|
8
|
+
1. Call `read_conversation_thread` for that dialog.
|
|
9
|
+
2. Write a bug report with:
|
|
10
|
+
- Component (from the arguments, or infer it and say so)
|
|
11
|
+
- The issue as reported by the client
|
|
12
|
+
- Reproduction steps, if known
|
|
13
|
+
- Expected and actual behavior
|
|
14
|
+
- Client environment, including browser, OS, screenshots, and links
|
|
15
|
+
- A link to the Teletype conversation.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Prepare a support shift handover from Teletype data
|
|
3
|
+
argument-hint: "[channel]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Support shift report for the Teletype project.
|
|
7
|
+
|
|
8
|
+
1. Call `get_project_status` with `aspect: "all"` for balance, operator availability, API status, and channel issues.
|
|
9
|
+
2. Call `find_conversations` with `status: "unanswered"` and `limit: 20` for the queue. Focus on the channel from: $ARGUMENTS, if given.
|
|
10
|
+
3. Prepare a shift handover covering project status, available operators, unanswered conversations with links, and risks for the next shift.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Triage unanswered Teletype conversations by urgency and suggest next actions
|
|
3
|
+
argument-hint: "[channel] [limit]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Triage the queue of unanswered Teletype requests.
|
|
7
|
+
|
|
8
|
+
1. Call `find_conversations` with `status: "unanswered"`. Apply a channel or limit from: $ARGUMENTS. Default limit: 10.
|
|
9
|
+
2. For each conversation, study the client's last message and the wait time.
|
|
10
|
+
3. Classify urgency: 🔴 Critical (complaints, payment failures, VIP clients), 🟡 Standard questions (delivery, consultation), 🟢 Low priority (information requests).
|
|
11
|
+
4. Show a short summary table with links to dialogs and recommended next actions. Draft nothing and send nothing yet.
|
|
12
|
+
|
|
13
|
+
Follow the `teletype-support` skill rules for links, confirmation, and dry-run.
|
package/plugin/mcp.json
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
|
|
3
|
+
"name": "teletype",
|
|
4
|
+
"version": "0.1.1",
|
|
5
|
+
"description": "Teletype support tools and workflows: triage the inbox, send replies safely, summarize clients, escalate issues, hand over shifts.",
|
|
6
|
+
"author": {
|
|
7
|
+
"name": "Teletype-App",
|
|
8
|
+
"url": "https://github.com/Teletype-App",
|
|
9
|
+
"email": "p@teletype.app"
|
|
10
|
+
},
|
|
11
|
+
"repository": "https://github.com/Teletype-App/teletype-mcp-server",
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"keywords": ["mcp", "teletype", "customer-support", "messaging", "omnichat"],
|
|
14
|
+
"homepage": "https://github.com/Teletype-App/teletype-mcp-server/tree/main/plugin"
|
|
15
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: teletype-support
|
|
3
|
-
description: Support workflows for the Teletype MCP server: triage the unanswered inbox, draft and send replies safely, summarize clients, escalate issues, and prepare shift handovers. Use when the task mentions Teletype conversations, the support queue, operator work, or client follow-up.
|
|
3
|
+
description: "Support workflows for the Teletype MCP server: triage the unanswered inbox, draft and send replies safely, summarize clients, escalate issues, and prepare shift handovers. Use when the task mentions Teletype conversations, the support queue, operator work, or client follow-up."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Teletype support workflows
|
|
@@ -9,6 +9,8 @@ Regulations for working with a Teletype support project through its MCP tools. E
|
|
|
9
9
|
|
|
10
10
|
## Before any work
|
|
11
11
|
|
|
12
|
+
If Teletype tools are absent, read [connection instructions](references/installation.md) and help the user configure the MCP server. Installing this skill alone does not connect a project. Never request the project token in chat.
|
|
13
|
+
|
|
12
14
|
1. If the tool list looks unexpected or a call fails with a policy error, call `get_capabilities` once. It reports the project identity, read-only mode, and active toolsets.
|
|
13
15
|
2. Read tools (`find_conversations`, `find_messages`, `list_clients`, `lookup_client_profile`, `read_conversation_thread`, `read_client_history`, `list_workspace_metadata`, `get_project_status`) are safe to call whenever the task needs them. For old message text, continue `find_messages` through pages while `has_more` is true.
|
|
14
16
|
3. Write tools require both `confirm: true` in the arguments and the user's explicit approval. "Send it" approves one specific message, not a batch.
|