@talqing/mcp 0.3.2 → 0.3.4
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/SKILL.md +50 -26
- package/package.json +2 -2
- package/tools.json +21 -7
package/SKILL.md
CHANGED
|
@@ -209,6 +209,10 @@ An agent is a single object, `config`, plus what you attach to it:
|
|
|
209
209
|
Leaving it out resolves `name` against the team defined on the call that runs
|
|
210
210
|
the agent, which publishes with a warning rather than an error.
|
|
211
211
|
|
|
212
|
+
One model cannot be handed off from at all: `openai/gpt-live-1` refuses new
|
|
213
|
+
instructions once a call is connected, so an agent with both that realtime
|
|
214
|
+
model and a handoff destination is refused on save. Every other model is fine.
|
|
215
|
+
|
|
212
216
|
**`context` is what the next agent starts from** — the same three words an
|
|
213
217
|
agent's own `conversation.context` uses for what a new *call* starts from.
|
|
214
218
|
|
|
@@ -294,10 +298,11 @@ it.
|
|
|
294
298
|
|
|
295
299
|
## Writing config
|
|
296
300
|
|
|
297
|
-
`
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
+
`create_agent` takes a whole config. `update_agent` takes only the fields you
|
|
302
|
+
change: omitted fields are kept, an explicit `null` clears a field, objects
|
|
303
|
+
merge key by key, and lists replace whole — to add one tool, send the complete
|
|
304
|
+
`tools` list with it appended. Naming a new `provider` on `stt`, `tts` or `llm`
|
|
305
|
+
starts that object over, so send its `voice` and settings with it. Unknown fields are refused, not ignored.
|
|
301
306
|
|
|
302
307
|
The config is validated on every write. Unknown models, a model that does not
|
|
303
308
|
support the channel, a language the model does not offer, a speed outside the
|
|
@@ -322,10 +327,11 @@ voice. Read it before choosing; do not assume a model exists.
|
|
|
322
327
|
People can attach a photo to a web chat, a web voice call or a web video call,
|
|
323
328
|
and the agent sees it. **There is no setting for this** — whether an agent can
|
|
324
329
|
read images is decided by the model it runs, and `vision` on that model's catalog
|
|
325
|
-
entry is where it says so.
|
|
326
|
-
`
|
|
327
|
-
sent a photo at all. If a
|
|
328
|
-
|
|
330
|
+
entry is where it says so. Most entries read images; `gemini-3.8-flash`,
|
|
331
|
+
`gemini-3.7-flash`, `openai/gpt-live-1` and the two `grok-voice-*` realtime
|
|
332
|
+
entries do not, and an agent on one of them cannot be sent a photo at all. If a
|
|
333
|
+
user wants image input, check `vision` before picking the model rather than
|
|
334
|
+
changing anything on the agent.
|
|
329
335
|
|
|
330
336
|
A phone call carries no files, so this is web only.
|
|
331
337
|
|
|
@@ -505,7 +511,7 @@ do not promise the user one — change the models or the language instead:
|
|
|
505
511
|
Saaras endpoint on their own schedule and ignore that window entirely, so on
|
|
506
512
|
those two the setting is a floor.
|
|
507
513
|
- **Batch speech-to-text** (`streaming: false` — xAI `xai-stt-batch`, ElevenLabs
|
|
508
|
-
`scribe_v2`, OpenAI `gpt-
|
|
514
|
+
`scribe_v2`, OpenAI `gpt-transcribe`) → it has no endpointer at all, so
|
|
509
515
|
LiveKit's audio end-of-turn model takes over when `config.language` is one of
|
|
510
516
|
the fourteen it was trained on: Arabic, Chinese, Dutch, English, French,
|
|
511
517
|
German, Hindi, Indonesian, Italian, Japanese, Korean, Portuguese, Spanish,
|
|
@@ -1167,6 +1173,12 @@ collides with an output field name (one of the two would be unreachable); a
|
|
|
1167
1173
|
those rows at draft time with `missing_vars` — one row, not the batch, and with
|
|
1168
1174
|
no tokens spent. Flag blank cells in a required column before creating.
|
|
1169
1175
|
|
|
1176
|
+
**A row that can never be sent is never drafted.** If a mapped column the task
|
|
1177
|
+
does NOT write is blank (or `to` is not an address), the row is `skipped` with
|
|
1178
|
+
`skip_reason: "unfillable"` the moment the batch is created, and costs nothing.
|
|
1179
|
+
`skips.unfillable` counts them. Filling the cell in with
|
|
1180
|
+
`patch_email_batch_recipient` brings the row back to drafting.
|
|
1181
|
+
|
|
1170
1182
|
### Two jobs, and a human between them
|
|
1171
1183
|
|
|
1172
1184
|
**Drafting** starts on `start_at` (or immediately), runs `draft_concurrency` rows
|
|
@@ -1177,22 +1189,29 @@ the last row lands. It has no business-hours window: nobody receives a draft. It
|
|
|
1177
1189
|
to review"*, never "finished": it says nothing about what has been sent.
|
|
1178
1190
|
|
|
1179
1191
|
**Sending** is separate, only ever happens when a person asks, and is its own
|
|
1180
|
-
row. `create_email_send` takes `
|
|
1181
|
-
|
|
1182
|
-
|
|
1192
|
+
row. `create_email_send` takes a `scope` and returns a **send** you can steer:
|
|
1193
|
+
|
|
1194
|
+
- `scope: "selected"` with `recipient_ids` sends exactly those rows.
|
|
1195
|
+
- `scope: "all"` is a standing send: every row of the batch as it finishes
|
|
1196
|
+
drafting, including rows not drafted yet — so **it mails drafts nobody has
|
|
1197
|
+
read**. Say so, and get an explicit yes, before creating one. It waits while
|
|
1198
|
+
drafting runs (`next_send_reason: "drafting"`) and ends once drafting has and
|
|
1199
|
+
every draft has gone. It cannot be live beside any other send of the batch —
|
|
1200
|
+
that is a 409 naming the live send.
|
|
1183
1201
|
- `start_at` schedules it, `window` (on its own `timezone`) holds it to business
|
|
1184
|
-
hours, `send_gap_seconds` is the minimum wait between two emails
|
|
1185
|
-
1 hour) and `send_daily_cap` bounds how many
|
|
1186
|
-
omitted comes from the batch.
|
|
1202
|
+
hours, `send_gap_seconds` is the minimum wait between two emails of the
|
|
1203
|
+
**batch** (1 second to 1 hour) and `send_daily_cap` bounds how many the batch
|
|
1204
|
+
may send per local day. Anything omitted comes from the batch.
|
|
1205
|
+
- A draft a live send covers reads `queued`, and is still a draft: it can be
|
|
1206
|
+
edited, skipped or redrafted until the send takes it.
|
|
1187
1207
|
- `pause_email_send` stops on the next email; `resume_email_send` carries on.
|
|
1188
|
-
- `cancel_email_send`
|
|
1189
|
-
|
|
1190
|
-
contains: a send's rows are fixed when it is created, and there is no verb for
|
|
1191
|
-
pulling rows out of one.
|
|
1208
|
+
- `cancel_email_send` ends it; its unsent rows are simply drafts again. A send's
|
|
1209
|
+
scope never changes, so cancel and create another to change what it covers.
|
|
1192
1210
|
- `get_email_send` carries `next_send_at` and `next_send_reason` (`start`,
|
|
1193
|
-
`window`, `daily_cap`, `retry`, `gap`), which is how "waiting for
|
|
1194
|
-
told apart from "stuck". `patch_email_send` reaches a live send
|
|
1195
|
-
minutes, so raising a spent cap or removing a window needs no
|
|
1211
|
+
`window`, `daily_cap`, `retry`, `gap`, `drafting`), which is how "waiting for
|
|
1212
|
+
Monday" is told apart from "stuck". `patch_email_send` reaches a live send
|
|
1213
|
+
within five minutes, so raising a spent cap or removing a window needs no
|
|
1214
|
+
cancel.
|
|
1196
1215
|
|
|
1197
1216
|
**The safeguard here is a RATE, not a row count.** `send_daily_cap` (200 by
|
|
1198
1217
|
default, per batch, `null` for uncapped) is what stands between a 5 000-row list
|
|
@@ -1224,7 +1243,9 @@ action that revives a batch that already finished drafting. Its `selection` is
|
|
|
1224
1243
|
task wrote them), `not_sent`, or `all` — which names every row it refuses.
|
|
1225
1244
|
**Each redrafted row runs the task again and is billed again**, so say the row
|
|
1226
1245
|
count before running `all`. A person's edited cells survive unless
|
|
1227
|
-
`clear_overrides` is set.
|
|
1246
|
+
`clear_overrides` is set. A `queued` row is redrafted too, and its send takes
|
|
1247
|
+
the new draft. Read `draft_failures` before redrafting `failed`: a task that
|
|
1248
|
+
declined a row on purpose will most likely decline it again.
|
|
1228
1249
|
|
|
1229
1250
|
**One address is mailed at most once per batch**, enforced when the row is
|
|
1230
1251
|
claimed for sending: the second row settles `skipped` with
|
|
@@ -1233,9 +1254,12 @@ ours — Resend keeps one and auto-suppresses hard bounces and complaints.
|
|
|
1233
1254
|
|
|
1234
1255
|
### Watching it
|
|
1235
1256
|
|
|
1236
|
-
`get_email_batch` carries live counts, `
|
|
1237
|
-
`
|
|
1238
|
-
|
|
1257
|
+
`get_email_batch` carries live counts, `skips` (why rows were skipped),
|
|
1258
|
+
`draft_failures` (why drafts failed, most common first), `failure_reason`,
|
|
1259
|
+
`sent_today` (against `send_daily_cap`), `drafted_versions`,
|
|
1260
|
+
`stale_redraftable` / `stale_sent` and the drafting cost so far. Measure
|
|
1261
|
+
progress against what can be reached: `unfillable` rows are never drafted, and
|
|
1262
|
+
skipped, failed or cancelled rows are never sent.
|
|
1239
1263
|
|
|
1240
1264
|
**Stopping itself comes in two shapes, and they need different advice.** Ten
|
|
1241
1265
|
consecutive failures **pause** a batch or a send: everything is where it was and
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@talqing/mcp",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.4",
|
|
4
4
|
"description": "MCP server for building Talqing AI voice, video and text agents from Claude Code, Codex, or any MCP client.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://talqing.com",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
],
|
|
18
18
|
"type": "module",
|
|
19
19
|
"bin": {
|
|
20
|
-
"talqing-mcp": "
|
|
20
|
+
"talqing-mcp": "dist/index.js"
|
|
21
21
|
},
|
|
22
22
|
"files": [
|
|
23
23
|
"dist",
|
package/tools.json
CHANGED
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"role": "read"
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
|
-
"description": "
|
|
48
|
+
"description": "Update the agent's draft config. Send only the fields to change.",
|
|
49
49
|
"method": "PATCH",
|
|
50
50
|
"name": "update_agent",
|
|
51
51
|
"parameters": {
|
|
@@ -311,7 +311,7 @@
|
|
|
311
311
|
"role": "read"
|
|
312
312
|
},
|
|
313
313
|
{
|
|
314
|
-
"description": "
|
|
314
|
+
"description": "Update the task's draft config. Send only the fields to change.",
|
|
315
315
|
"method": "PATCH",
|
|
316
316
|
"name": "update_task",
|
|
317
317
|
"parameters": {
|
|
@@ -1319,7 +1319,7 @@
|
|
|
1319
1319
|
"role": "write"
|
|
1320
1320
|
},
|
|
1321
1321
|
{
|
|
1322
|
-
"description": "Put skipped rows back. `selection: \"all_eligible\"` means every skipped row.",
|
|
1322
|
+
"description": "Put skipped rows back. `selection: \"all_eligible\"` means every row a person skipped; an `unfillable` row is restored by filling in its cell instead.",
|
|
1323
1323
|
"method": "POST",
|
|
1324
1324
|
"name": "restore_email_batch_recipients",
|
|
1325
1325
|
"parameters": {
|
|
@@ -1347,7 +1347,7 @@
|
|
|
1347
1347
|
"role": "write"
|
|
1348
1348
|
},
|
|
1349
1349
|
{
|
|
1350
|
-
"description": "Send
|
|
1350
|
+
"description": "Send rows. **This mails real people and cannot be undone.**",
|
|
1351
1351
|
"method": "POST",
|
|
1352
1352
|
"name": "create_email_send",
|
|
1353
1353
|
"parameters": {
|
|
@@ -1403,7 +1403,7 @@
|
|
|
1403
1403
|
"role": "write"
|
|
1404
1404
|
},
|
|
1405
1405
|
{
|
|
1406
|
-
"description": "Stop sending. It takes hold on the next email, and nothing is lost \u2014 the rows stay queued
|
|
1406
|
+
"description": "Stop sending. It takes hold on the next email, and nothing is lost \u2014 the rows stay queued, and editable, until you resume.",
|
|
1407
1407
|
"method": "POST",
|
|
1408
1408
|
"name": "pause_email_send",
|
|
1409
1409
|
"parameters": {
|
|
@@ -1431,7 +1431,7 @@
|
|
|
1431
1431
|
"role": "write"
|
|
1432
1432
|
},
|
|
1433
1433
|
{
|
|
1434
|
-
"description": "Stop this send
|
|
1434
|
+
"description": "Stop this send for good. Every row it has not sent stays a draft, exactly as it was, ready for another send \u2014 not a destructive action.",
|
|
1435
1435
|
"method": "POST",
|
|
1436
1436
|
"name": "cancel_email_send",
|
|
1437
1437
|
"parameters": {
|
|
@@ -1823,7 +1823,7 @@
|
|
|
1823
1823
|
"role": "read"
|
|
1824
1824
|
},
|
|
1825
1825
|
{
|
|
1826
|
-
"description": "Search the
|
|
1826
|
+
"description": "Search the models a provider offers too many of to list.",
|
|
1827
1827
|
"method": "GET",
|
|
1828
1828
|
"name": "search_models",
|
|
1829
1829
|
"parameters": {
|
|
@@ -1836,6 +1836,20 @@
|
|
|
1836
1836
|
"read_only": true,
|
|
1837
1837
|
"role": "read"
|
|
1838
1838
|
},
|
|
1839
|
+
{
|
|
1840
|
+
"description": "The hosts that can serve one OpenRouter language model; fastest first when the workspace has an OpenRouter key. Each `host` is a valid entry for `llm.hosts`.",
|
|
1841
|
+
"method": "GET",
|
|
1842
|
+
"name": "list_model_hosts",
|
|
1843
|
+
"parameters": {
|
|
1844
|
+
"additionalProperties": true,
|
|
1845
|
+
"description": "Arguments not inlined: call describe_function('list_model_hosts').",
|
|
1846
|
+
"properties": {},
|
|
1847
|
+
"type": "object"
|
|
1848
|
+
},
|
|
1849
|
+
"path": "/v1/catalog/models/hosts",
|
|
1850
|
+
"read_only": true,
|
|
1851
|
+
"role": "read"
|
|
1852
|
+
},
|
|
1839
1853
|
{
|
|
1840
1854
|
"description": "The Anam avatar gallery \u2014 the faces a video agent can wear.",
|
|
1841
1855
|
"method": "GET",
|