@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.
Files changed (3) hide show
  1. package/SKILL.md +50 -26
  2. package/package.json +2 -2
  3. 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
- `update_agent` and `create_agent` take the **whole** config, not a patch.
298
- Anything you leave out reverts to its default — omitting `tools` detaches
299
- every tool. Always read the current config first, apply your change to it, and
300
- send the result back.
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. Every LLM entry today reads images; the two
326
- `grok-voice-*` realtime entries do not, and an agent on one of them cannot be
327
- sent a photo at all. If a user wants image input, check `vision` before picking
328
- the model rather than changing anything on the agent.
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-4o-transcribe`) → it has no endpointer at all, so
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 `recipient_ids` or `selection: "all_drafts"` and
1181
- returns a **send** you can steer:
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 (1 second to
1185
- 1 hour) and `send_daily_cap` bounds how many may leave per local day. Anything
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` gives **every unsent row back as a draft**, ready for
1189
- another send. It is also the ONLY way to change what a scheduled send
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 Monday" is
1194
- told apart from "stuck". `patch_email_send` reaches a live send within five
1195
- minutes, so raising a spent cap or removing a window needs no cancel.
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, `failure_reason`, `sent_today` (against
1237
- `send_daily_cap`), `drafted_versions`, `stale_redraftable` and the drafting cost
1238
- so far.
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.2",
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": "./dist/index.js"
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": "Replace the agent's draft config with the one supplied.",
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": "Replace the task's draft config with the one supplied.",
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 these rows. **This mails real people and cannot be undone.**",
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 for whenever you resume.",
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, and give every row it has not sent back as a draft.",
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 language models a provider offers too many of to list.",
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",