@talqing/mcp 0.7.0 → 0.8.0

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 (4) hide show
  1. package/README.md +5 -6
  2. package/SKILL.md +50 -45
  3. package/package.json +1 -1
  4. package/tools.json +36 -78
package/README.md CHANGED
@@ -10,9 +10,8 @@ the CoPilot can build, your coding agent can build.
10
10
  ## What you get
11
11
 
12
12
  One operation for everything a workspace is built out of. Agents and agent
13
- tasks, tools and their operation trees, integrations and triggers, knowledge
14
- bases from crawl to ready, carrier accounts and phone numbers, secrets, provider
15
- keys and webhooks; then placing outbound calls, running call and email batches,
13
+ tasks, tools and their operation trees, integrations and triggers, carrier
14
+ accounts and phone numbers, secrets, provider keys and webhooks; then placing outbound calls, running call and email batches,
16
15
  talking to text agents, and reading back transcripts, cost and latency. Each one
17
16
  maps to a Talqing API endpoint, and its arguments mirror that HTTP call: path and
18
17
  query parameters at the top level, request body under `body`.
@@ -107,9 +106,9 @@ Four things are deliberately out of reach:
107
106
  where a human is in the loop.
108
107
  - **Buying credits.** Reading the balance would be harmless; starting a payment
109
108
  spends the workspace's money, and neither belongs on a coding agent's surface.
110
- - **Streaming endpoints**, which are not tool-shaped. Every one has a polling
111
- equivalent here — `list_conversation_items` for a conversation, `get_kb` for a
112
- knowledge build — so nothing is unreachable.
109
+ - **Streaming endpoints**, which are not tool-shaped. Each has a polling
110
+ equivalent here — `list_conversation_items` for a conversation — so nothing is
111
+ unreachable.
113
112
  - **Deleting a call or its recording.** Every other `delete_*` removes
114
113
  configuration you could write again; this one destroys the record of something
115
114
  that happened, and can take a contact's memory of past calls with it.
package/SKILL.md CHANGED
@@ -3,9 +3,9 @@ name: talqing
3
3
  description: >-
4
4
  Build, publish and operate Talqing AI voice, video and text agents — agent
5
5
  config and model stack, custom tools and their operation trees, MCP and
6
- messaging integrations, knowledge bases, phone numbers, secrets and webhooks,
7
- plus placing calls and reading back transcripts, cost and latency. Use
8
- whenever working against a Talqing workspace through the talqing MCP server.
6
+ messaging integrations, phone numbers, secrets and webhooks, plus placing
7
+ calls and reading back transcripts, cost and latency. Use whenever working
8
+ against a Talqing workspace through the talqing MCP server.
9
9
  ---
10
10
 
11
11
  <!-- Generated by openapi/export.py from backend/services/copilot/skill.md. Edit that file, then re-run the export. -->
@@ -14,7 +14,7 @@ description: >-
14
14
 
15
15
  Talqing is a no-code builder for AI voice, video and text agents. Everything you
16
16
  can build here you could otherwise have written as a LiveKit agent by hand: a
17
- model stack, a system prompt, callable tools, knowledge, and lifecycle hooks.
17
+ model stack, a system prompt, callable tools, and lifecycle hooks.
18
18
  The same machinery also runs **agent tasks** — an agent nobody talks to, which
19
19
  takes named inputs and returns a typed result.
20
20
 
@@ -156,13 +156,17 @@ An agent is a single object, `config`, plus what you attach to it:
156
156
  create it, publish v1 and store `{"tool_id": "..."}` in its place, so the
157
157
  agent and its tools can be built in one request. Use it for exactly that.
158
158
  Attaching an existing tool is still `tool_id`.
159
- - **`kb_ids`** — ready knowledge bases for grounded answers.
160
159
  - **`mcps`** — external MCP servers whose tools the agent may call, each
161
160
  `{"integration_id": "..."}` naming an active, MCP-capable integration. Which
162
161
  of a server's tools may be called is the integration's own `allowed_tools`,
163
162
  not this list. As with `tools`, an entry may instead carry `{"mcp": {name,
164
163
  url, headers, allowed_tools, tools_namespace}}`, which is created as a
165
164
  `custom_mcp` integration and replaced by its id.
165
+ - **`faqs`** — FAQs the agent answers from, each `{"faq_id": "..."}`, up to ten
166
+ (see FAQs below). As with `tools`, an entry may instead carry `{"faq": {name,
167
+ entries: [{question, answer}]}}`, which `create_agent` and `update_agent`
168
+ create as a stored FAQ and replace by its id — so an agent and its FAQ can be
169
+ built in one request.
166
170
  - **`tasks`** — jobs this agent can enter and come back from, each
167
171
  `{"name": "collect_shipping_address", "task_id": "...", "description": "...",
168
172
  "message": "..."}`. Each becomes one ordinary tool the model can call: the
@@ -337,9 +341,8 @@ starts that object over, so send its `voice` and settings with it. Unknown field
337
341
 
338
342
  The config is validated on every write. Unknown models, a model that does not
339
343
  support the channel, a language the model does not offer, a speed outside the
340
- model's range, an unpublished tool, a knowledge base that is not ready — all are
341
- refused with an explanation. Read the error and correct it; that is faster than
342
- guessing.
344
+ model's range, an unpublished tool — all are refused with an explanation. Read
345
+ the error and correct it; that is faster than guessing.
343
346
 
344
347
  Some fields are normalized for you. Switching to `text` clears `stt`, `tts`,
345
348
  `greeting`, `turn_handling` and `avatar`. Switching to `video` fills in an
@@ -579,7 +582,7 @@ of whatever the models cost.
579
582
  A tool is one capability the agent's LLM can call mid-conversation. It has:
580
583
 
581
584
  - **`name`** — the function name the LLM sees. A valid identifier, snake_case,
582
- describing the capability. `knowledge_fetch` is reserved.
585
+ describing the capability.
583
586
  - **`description`** — tells the LLM *when* to call it. This matters as much as
584
587
  the implementation.
585
588
  - **`json_schema`** — the arguments the LLM supplies. Declare only values the
@@ -871,9 +874,9 @@ Each hook points at a **published tool id**, or null.
871
874
  ## Agent tasks
872
875
 
873
876
  An **agent task** takes named inputs, does some work, and returns a **typed
874
- structured output**. Same prompt, same model, same tools, same MCP servers, same
875
- knowledge and same lifecycle hooks as an agent — minus everything that belongs
876
- to a *session*, because a task never owns one.
877
+ structured output**. Same prompt, same model, same tools, same MCP servers and
878
+ same lifecycle hooks as an agent — minus everything that belongs to a
879
+ *session*, because a task never owns one.
877
880
 
878
881
  **It runs two ways, and declares nothing that ties it to either.** On its own —
879
882
  `POST /v1/tasks/{task_id}/runs`, or an email batch drafting a row — it is an LLM
@@ -901,7 +904,7 @@ message, draft an opening line, take a shipping address mid-call.
901
904
  a step rather than as one, so it costs no steps and real seconds. It is the
902
905
  one media slot a task keeps, because an LLM is stateless per request and
903
906
  swapping one in rebuilds nothing.
904
- - **`kb_ids`**, **`on_enter`**, **`on_exit`**, **`on_user_turn_completed`** —
907
+ - **`on_enter`**, **`on_exit`**, **`on_user_turn_completed`** —
905
908
  exactly an agent's. `on_user_turn_completed` only ever fires when an agent
906
909
  entered the task; a standalone run has nobody to take a turn.
907
910
  - There is no `stt`, `tts`, `realtime`, `language`, `turn_handling`, `channel`,
@@ -913,6 +916,7 @@ message, draft an opening line, take a shipping address mid-call.
913
916
  - **`tools`** / **`mcps`** — exactly an agent's, attached by id or defined
914
917
  inline, and pinned by publish exactly as an agent's are: republishing a tool
915
918
  does not change a published task until that task is published again.
919
+ - **`faqs`** — exactly an agent's.
916
920
  - **`vars`** — the task's **inputs**, declared exactly as an agent's variables
917
921
  are: a `name`, a `description`, an optional `default` and `required`. A run
918
922
  supplies values by name; one it omits falls back to the `default`, and a
@@ -1048,14 +1052,42 @@ tell apart.
1048
1052
  Task runs are **not** in the Observability charts, which are built on calls and
1049
1053
  conversations. `list_task_runs` is where a task's own history lives.
1050
1054
 
1055
+ ## FAQs
1056
+
1057
+ An FAQ is a named list of question/answer pairs the business wrote. Attached
1058
+ through `faqs`, its **questions** are added to the agent's prompt and the agent
1059
+ gets one generated tool, `get_faq_answers`, that returns the written **answers**
1060
+ for the questions it picks — so what the agent says is the business's own text.
1061
+ Do not create a tool with that name; it is reserved.
1062
+
1063
+ - **Use one for stable facts people ask often and the business wants answered
1064
+ exactly**: opening hours, refund policy, delivery areas, pricing. Behaviour,
1065
+ tone and what to do next belong in the prompt; anything that changes per
1066
+ caller or needs a live lookup belongs in a tool.
1067
+ - **Edits are live.** Changing a question or an answer reaches every agent using
1068
+ the FAQ from its next session, with no republish. Attaching or detaching an
1069
+ FAQ is a config change and does take a publish.
1070
+ - **Phrase each question the way a caller would ask it** — "Do you deliver on
1071
+ Sundays?", not "Sunday delivery policy". The model matches what was asked
1072
+ against the question text, so paraphrases need no extra entries.
1073
+ - **Keep answers short and speakable on a voice agent**: one or two sentences,
1074
+ no lists, links or markdown, since the agent will say it aloud.
1075
+ - **Add many at once with `create_faq_entries`** (up to 500 per FAQ, all or
1076
+ nothing), and fix one with `update_faq_entry` rather than recreating the FAQ.
1077
+ A question may appear only once per FAQ.
1078
+ - Do not also paste the answers into the prompt, and do not tell the agent to
1079
+ refuse what the FAQ lacks unless the user asks for that.
1080
+
1081
+ `delete_faq` is refused with 409 while an agent or task attaches it; detach it
1082
+ there first.
1083
+
1051
1084
  ## Integrations
1052
1085
 
1053
1086
  Integrations are external services, and they come in two shapes.
1054
1087
 
1055
1088
  **MCP integrations** give an agent tools from an external server. Attach them
1056
- in the agent's own config, as `mcps` — the same place as `tools` and
1057
- `kb_ids`, written by `create_agent` or `update_agent`, and frozen at publish
1058
- like the rest of it. So attaching one **takes a publish** before a call sees it.
1089
+ in the agent's own config, as `mcps` — the same place as `tools`, written by
1090
+ `create_agent` or `update_agent`, and frozen at publish like the rest of it. So attaching one **takes a publish** before a call sees it.
1059
1091
  `list_integration_mcp_tools` connects to the server and lists everything it
1060
1092
  offers, which also proves the connection works.
1061
1093
 
@@ -1357,33 +1389,6 @@ Replies are answered by the agent on the sender's
1357
1389
  `{{userdata.<column>}}` and the whole template, buttons included, as its own
1358
1390
  first message — so write that agent's prompt against the CSV's column names.
1359
1391
 
1360
- ## Knowledge bases
1361
-
1362
- A knowledge base gives an agent grounded answers over crawled content. Attach
1363
- it through the agent's `kb_ids`. A call reads only `ready` ones, so one still
1364
- building can be attached now and is used once it finishes.
1365
-
1366
- Building one runs in three stages and takes minutes, not seconds:
1367
-
1368
- 1. `create_kb` with the site URLs starts the crawl. It returns immediately at
1369
- `discovering` — poll `get_kb` until `status` is `review`.
1370
- 2. At `review`, `discovered` holds every URL the crawl found. Choose the ones
1371
- worth indexing and pass them to `build_kb`. This choice decides the quality
1372
- of the whole knowledge base: prefer pages that answer real questions over
1373
- everything the crawl happened to reach.
1374
- 3. The KB moves through `transcribing` and `generating` to `ready`. Keep
1375
- polling `get_kb`; `progress` says what stage it is in and `error` says if it
1376
- stopped.
1377
-
1378
- Once ready, `get_kb_prompt` is the table of contents exactly as the agent
1379
- receives it — read it to judge what the agent will actually be able to find,
1380
- since a vague entry is one it will never fetch. `list_pages` shows which URLs
1381
- failed to transcribe, `patch_node` corrects an entry by hand, and
1382
- `regenerate_toc` rebuilds the structure without crawling again.
1383
-
1384
- Tell the user a build is running rather than waiting silently through it, and
1385
- never poll a build in a tight loop.
1386
-
1387
1392
  ## Secrets, keys and webhooks
1388
1393
 
1389
1394
  **Secrets** are workspace values referenced as `{{secrets.NAME}}` from tool
@@ -1496,8 +1501,8 @@ and the final `userdata` usually name the cause.
1496
1501
  connected channel is a message they receive. Both are irreversible. Test
1497
1502
  against a number or thread the user has named, never one you picked.
1498
1503
  - **Delete only on an explicit request naming the target.** Agents, tools,
1499
- knowledge bases, carrier accounts, integrations, triggers, secrets, webhooks
1500
- and tokens are all permanent. Taking a phone number out of service stops real
1504
+ carrier accounts, integrations, triggers, secrets, webhooks and tokens are
1505
+ all permanent. Taking a phone number out of service stops real
1501
1506
  callers from reaching anyone — treat it the same way.
1502
1507
  - **Never echo a secret back.** Personal access tokens, webhook signing secrets
1503
1508
  and provider keys are shown once; repeating one puts it in the conversation
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@talqing/mcp",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
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",
package/tools.json CHANGED
@@ -591,156 +591,114 @@
591
591
  "role": "write"
592
592
  },
593
593
  {
594
- "description": "List the workspace's knowledge bases with their build status.",
594
+ "description": "List the workspace's FAQs by name, with how many questions each holds.",
595
595
  "method": "GET",
596
- "name": "list_kbs",
596
+ "name": "list_faqs",
597
597
  "parameters": {
598
598
  "additionalProperties": true,
599
- "description": "Arguments not inlined: call describe_function('list_kbs').",
599
+ "description": "Arguments not inlined: call describe_function('list_faqs').",
600
600
  "properties": {},
601
601
  "type": "object"
602
602
  },
603
- "path": "/v1/knowledge",
603
+ "path": "/v1/faqs",
604
604
  "read_only": true,
605
605
  "role": "read"
606
606
  },
607
607
  {
608
- "description": "Start a knowledge base by crawling one or more websites.",
608
+ "description": "Create an FAQ, optionally with its first question/answer entries.",
609
609
  "method": "POST",
610
- "name": "create_kb",
610
+ "name": "create_faq",
611
611
  "parameters": {
612
612
  "additionalProperties": true,
613
- "description": "Arguments not inlined: call describe_function('create_kb').",
613
+ "description": "Arguments not inlined: call describe_function('create_faq').",
614
614
  "properties": {},
615
615
  "type": "object"
616
616
  },
617
- "path": "/v1/knowledge",
617
+ "path": "/v1/faqs",
618
618
  "read_only": false,
619
619
  "role": "write"
620
620
  },
621
621
  {
622
- "description": "Read one knowledge base: build status, progress and content tree.",
622
+ "description": "Get one FAQ with every entry, in the order they were added.",
623
623
  "method": "GET",
624
- "name": "get_kb",
624
+ "name": "get_faq",
625
625
  "parameters": {
626
626
  "additionalProperties": true,
627
- "description": "Arguments not inlined: call describe_function('get_kb').",
627
+ "description": "Arguments not inlined: call describe_function('get_faq').",
628
628
  "properties": {},
629
629
  "type": "object"
630
630
  },
631
- "path": "/v1/knowledge/{kb_id}",
631
+ "path": "/v1/faqs/{faq_id}",
632
632
  "read_only": true,
633
633
  "role": "read"
634
634
  },
635
635
  {
636
- "description": "Index the chosen pages, then write the table of contents.",
637
- "method": "POST",
638
- "name": "build_kb",
636
+ "description": "Rename an FAQ.",
637
+ "method": "PATCH",
638
+ "name": "update_faq",
639
639
  "parameters": {
640
640
  "additionalProperties": true,
641
- "description": "Arguments not inlined: call describe_function('build_kb').",
641
+ "description": "Arguments not inlined: call describe_function('update_faq').",
642
642
  "properties": {},
643
643
  "type": "object"
644
644
  },
645
- "path": "/v1/knowledge/{kb_id}/build",
645
+ "path": "/v1/faqs/{faq_id}",
646
646
  "read_only": false,
647
647
  "role": "write"
648
648
  },
649
649
  {
650
- "description": "Rewrite the table of contents from the pages already indexed.",
651
- "method": "POST",
652
- "name": "regenerate_toc",
650
+ "description": "Delete an FAQ and its entries. Refused with 409 while an agent or task still attaches it.",
651
+ "method": "DELETE",
652
+ "name": "delete_faq",
653
653
  "parameters": {
654
654
  "additionalProperties": true,
655
- "description": "Arguments not inlined: call describe_function('regenerate_toc').",
655
+ "description": "Arguments not inlined: call describe_function('delete_faq').",
656
656
  "properties": {},
657
657
  "type": "object"
658
658
  },
659
- "path": "/v1/knowledge/{kb_id}/toc",
659
+ "path": "/v1/faqs/{faq_id}",
660
660
  "read_only": false,
661
661
  "role": "write"
662
662
  },
663
663
  {
664
- "description": "List the crawled pages and how each one transcribed.",
665
- "method": "GET",
666
- "name": "list_pages",
667
- "parameters": {
668
- "additionalProperties": true,
669
- "description": "Arguments not inlined: call describe_function('list_pages').",
670
- "properties": {},
671
- "type": "object"
672
- },
673
- "path": "/v1/knowledge/{kb_id}/pages",
674
- "read_only": true,
675
- "role": "read"
676
- },
677
- {
678
- "description": "The table of contents exactly as an agent using this KB is given it.",
679
- "method": "GET",
680
- "name": "get_kb_prompt",
681
- "parameters": {
682
- "additionalProperties": true,
683
- "description": "Arguments not inlined: call describe_function('get_kb_prompt').",
684
- "properties": {},
685
- "type": "object"
686
- },
687
- "path": "/v1/knowledge/{kb_id}/prompt",
688
- "read_only": true,
689
- "role": "read"
690
- },
691
- {
692
- "description": "Read one entry of the table of contents, with its full content.",
693
- "method": "GET",
694
- "name": "get_node",
695
- "parameters": {
696
- "additionalProperties": true,
697
- "description": "Arguments not inlined: call describe_function('get_node').",
698
- "properties": {},
699
- "type": "object"
700
- },
701
- "path": "/v1/knowledge/{kb_id}/nodes/{node_id}",
702
- "read_only": true,
703
- "role": "read"
704
- },
705
- {
706
- "description": "Correct one entry's title, summary or content by hand \u2014 the way to fix a fact the crawl got wrong without rebuilding.",
707
- "method": "PATCH",
708
- "name": "patch_node",
664
+ "description": "Append question/answer entries to an FAQ, all or nothing. Live at once: agents using the FAQ read them from their next session.",
665
+ "method": "POST",
666
+ "name": "create_faq_entries",
709
667
  "parameters": {
710
668
  "additionalProperties": true,
711
- "description": "Arguments not inlined: call describe_function('patch_node').",
669
+ "description": "Arguments not inlined: call describe_function('create_faq_entries').",
712
670
  "properties": {},
713
671
  "type": "object"
714
672
  },
715
- "path": "/v1/knowledge/{kb_id}/nodes/{node_id}",
673
+ "path": "/v1/faqs/{faq_id}/entries",
716
674
  "read_only": false,
717
675
  "role": "write"
718
676
  },
719
677
  {
720
- "description": "Drop one entry from the table of contents, permanently.",
721
- "method": "DELETE",
722
- "name": "delete_node",
678
+ "description": "Change one entry's question, answer or both. Live from the next session.",
679
+ "method": "PATCH",
680
+ "name": "update_faq_entry",
723
681
  "parameters": {
724
682
  "additionalProperties": true,
725
- "description": "Arguments not inlined: call describe_function('delete_node').",
683
+ "description": "Arguments not inlined: call describe_function('update_faq_entry').",
726
684
  "properties": {},
727
685
  "type": "object"
728
686
  },
729
- "path": "/v1/knowledge/{kb_id}/nodes/{node_id}",
687
+ "path": "/v1/faqs/{faq_id}/entries/{entry_id}",
730
688
  "read_only": false,
731
689
  "role": "write"
732
690
  },
733
691
  {
734
- "description": "Delete a knowledge base and everything crawled into it, permanently.",
692
+ "description": "Delete one entry from an FAQ.",
735
693
  "method": "DELETE",
736
- "name": "delete_kb",
694
+ "name": "delete_faq_entry",
737
695
  "parameters": {
738
696
  "additionalProperties": true,
739
- "description": "Arguments not inlined: call describe_function('delete_kb').",
697
+ "description": "Arguments not inlined: call describe_function('delete_faq_entry').",
740
698
  "properties": {},
741
699
  "type": "object"
742
700
  },
743
- "path": "/v1/knowledge/{kb_id}",
701
+ "path": "/v1/faqs/{faq_id}/entries/{entry_id}",
744
702
  "read_only": false,
745
703
  "role": "write"
746
704
  },