@jambonz/mcp-schema-server 0.1.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.
- package/AGENTS.md +305 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +135 -0
- package/dist/index.js.map +1 -0
- package/package.json +47 -0
- package/schema/components/actionHook.schema.json +36 -0
- package/schema/components/actionHookDelayAction.schema.json +37 -0
- package/schema/components/auth.schema.json +18 -0
- package/schema/components/bidirectionalAudio.schema.json +22 -0
- package/schema/components/fillerNoise.schema.json +25 -0
- package/schema/components/recognizer.schema.json +280 -0
- package/schema/components/synthesizer.schema.json +82 -0
- package/schema/components/target.schema.json +105 -0
- package/schema/components/vad.schema.json +48 -0
- package/schema/jambonz-app.schema.json +106 -0
- package/schema/verbs/alert.schema.json +20 -0
- package/schema/verbs/answer.schema.json +12 -0
- package/schema/verbs/conference.schema.json +43 -0
- package/schema/verbs/config.schema.json +174 -0
- package/schema/verbs/dequeue.schema.json +36 -0
- package/schema/verbs/dial.schema.json +157 -0
- package/schema/verbs/dtmf.schema.json +27 -0
- package/schema/verbs/dub.schema.json +52 -0
- package/schema/verbs/enqueue.schema.json +38 -0
- package/schema/verbs/gather.schema.json +145 -0
- package/schema/verbs/hangup.schema.json +29 -0
- package/schema/verbs/leave.schema.json +12 -0
- package/schema/verbs/listen.schema.json +110 -0
- package/schema/verbs/llm.schema.json +131 -0
- package/schema/verbs/message.schema.json +30 -0
- package/schema/verbs/pause.schema.json +26 -0
- package/schema/verbs/pipeline.schema.json +61 -0
- package/schema/verbs/play.schema.json +69 -0
- package/schema/verbs/redirect.schema.json +23 -0
- package/schema/verbs/say.schema.json +84 -0
- package/schema/verbs/sip-decline.schema.json +31 -0
- package/schema/verbs/sip-refer.schema.json +41 -0
- package/schema/verbs/sip-request.schema.json +33 -0
- package/schema/verbs/stream.schema.json +30 -0
- package/schema/verbs/tag.schema.json +21 -0
- package/schema/verbs/transcribe.schema.json +44 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://jambonz.org/schema/verbs/say",
|
|
4
|
+
"title": "Say",
|
|
5
|
+
"description": "Speaks text to the caller using text-to-speech. The text can be plain text or SSML. Optionally streams TTS output incrementally for lower latency. This is one of the most commonly used verbs in jambonz applications.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"verb": {
|
|
9
|
+
"const": "say",
|
|
10
|
+
"description": "The verb name."
|
|
11
|
+
},
|
|
12
|
+
"id": {
|
|
13
|
+
"type": "string",
|
|
14
|
+
"description": "An optional unique identifier for this verb instance. Can be used to reference it in other contexts."
|
|
15
|
+
},
|
|
16
|
+
"text": {
|
|
17
|
+
"oneOf": [
|
|
18
|
+
{ "type": "string" },
|
|
19
|
+
{
|
|
20
|
+
"type": "array",
|
|
21
|
+
"items": { "type": "string" }
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
"description": "The text to speak. Can be plain text or SSML markup. If an array is provided, one entry is selected at random (useful for variety in prompts).",
|
|
25
|
+
"examples": [
|
|
26
|
+
"Hello, welcome to our service.",
|
|
27
|
+
"<speak>Hello <break time='500ms'/> welcome.</speak>",
|
|
28
|
+
["Hello!", "Hi there!", "Welcome!"]
|
|
29
|
+
]
|
|
30
|
+
},
|
|
31
|
+
"instructions": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"description": "Natural language instructions to guide TTS expression and delivery. Supported by vendors that offer instruction-based synthesis (e.g. ElevenLabs, some OpenAI models).",
|
|
34
|
+
"examples": ["Speak in a warm, friendly tone", "Sound excited and energetic"]
|
|
35
|
+
},
|
|
36
|
+
"stream": {
|
|
37
|
+
"type": "boolean",
|
|
38
|
+
"description": "If true, stream TTS audio to the caller incrementally as it is generated, rather than waiting for the complete audio. Reduces time-to-first-byte for long utterances. Requires a vendor that supports streaming synthesis."
|
|
39
|
+
},
|
|
40
|
+
"loop": {
|
|
41
|
+
"oneOf": [
|
|
42
|
+
{ "type": "number" },
|
|
43
|
+
{ "type": "string" }
|
|
44
|
+
],
|
|
45
|
+
"description": "Number of times to repeat the speech. Use 0 or 'forever' to loop indefinitely until interrupted.",
|
|
46
|
+
"examples": [2, "forever"]
|
|
47
|
+
},
|
|
48
|
+
"synthesizer": {
|
|
49
|
+
"$ref": "../components/synthesizer",
|
|
50
|
+
"description": "Override the session-level TTS configuration for this specific utterance."
|
|
51
|
+
},
|
|
52
|
+
"earlyMedia": {
|
|
53
|
+
"type": "boolean",
|
|
54
|
+
"description": "If true, play the audio as early media (before the call is answered). Used for playing announcements or prompts to the caller before the call is formally connected."
|
|
55
|
+
},
|
|
56
|
+
"disableTtsCache": {
|
|
57
|
+
"type": "boolean",
|
|
58
|
+
"description": "If true, bypass the TTS cache and always generate fresh audio. Useful when the same text should be re-synthesized (e.g. with different SSML or when the voice has been updated)."
|
|
59
|
+
},
|
|
60
|
+
"closeStreamOnEmpty": {
|
|
61
|
+
"type": "boolean",
|
|
62
|
+
"description": "If true, close the TTS stream when an empty text string is received. Only applies when stream is true."
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"examples": [
|
|
66
|
+
{
|
|
67
|
+
"verb": "say",
|
|
68
|
+
"text": "Hello, welcome to Acme Corp. How can I help you today?"
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"verb": "say",
|
|
72
|
+
"text": "Please hold while I transfer your call.",
|
|
73
|
+
"synthesizer": {
|
|
74
|
+
"vendor": "elevenlabs",
|
|
75
|
+
"voice": "Rachel"
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"verb": "say",
|
|
80
|
+
"text": ["Hello!", "Hi there!", "Welcome!"],
|
|
81
|
+
"loop": 1
|
|
82
|
+
}
|
|
83
|
+
]
|
|
84
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://jambonz.org/schema/verbs/sip:decline",
|
|
4
|
+
"title": "SIP Decline",
|
|
5
|
+
"description": "Rejects an incoming call with a SIP error response. Used to decline calls with a specific status code and reason (e.g. 486 Busy Here, 603 Decline).",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"verb": { "const": "sip:decline" },
|
|
9
|
+
"id": { "type": "string", "description": "An optional unique identifier for this verb instance." },
|
|
10
|
+
"status": {
|
|
11
|
+
"type": "number",
|
|
12
|
+
"description": "The SIP response status code to send.",
|
|
13
|
+
"examples": [486, 603, 404, 480]
|
|
14
|
+
},
|
|
15
|
+
"reason": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"description": "The SIP reason phrase to include in the response.",
|
|
18
|
+
"examples": ["Busy Here", "Decline", "Not Found"]
|
|
19
|
+
},
|
|
20
|
+
"headers": {
|
|
21
|
+
"type": "object",
|
|
22
|
+
"description": "Custom SIP headers to include in the response.",
|
|
23
|
+
"additionalProperties": { "type": "string" }
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"required": ["status"],
|
|
27
|
+
"examples": [
|
|
28
|
+
{ "verb": "sip:decline", "status": 486, "reason": "Busy Here" },
|
|
29
|
+
{ "verb": "sip:decline", "status": 603, "reason": "Decline" }
|
|
30
|
+
]
|
|
31
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://jambonz.org/schema/verbs/sip:refer",
|
|
4
|
+
"title": "SIP Refer",
|
|
5
|
+
"description": "Sends a SIP REFER request to transfer the call to another party. Initiates an attended or unattended (blind) transfer.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"verb": { "const": "sip:refer" },
|
|
9
|
+
"id": { "type": "string", "description": "An optional unique identifier for this verb instance." },
|
|
10
|
+
"referTo": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"description": "The SIP URI or phone number to transfer the call to.",
|
|
13
|
+
"examples": ["sip:alice@example.com", "+15085551212"]
|
|
14
|
+
},
|
|
15
|
+
"referredBy": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"description": "The SIP URI to use in the Referred-By header."
|
|
18
|
+
},
|
|
19
|
+
"referredByDisplayName": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"description": "The display name to use in the Referred-By header."
|
|
22
|
+
},
|
|
23
|
+
"headers": {
|
|
24
|
+
"type": "object",
|
|
25
|
+
"description": "Custom SIP headers to include in the REFER request.",
|
|
26
|
+
"additionalProperties": { "type": "string" }
|
|
27
|
+
},
|
|
28
|
+
"actionHook": {
|
|
29
|
+
"$ref": "../components/actionHook",
|
|
30
|
+
"description": "A webhook invoked when the REFER completes (or fails)."
|
|
31
|
+
},
|
|
32
|
+
"eventHook": {
|
|
33
|
+
"$ref": "../components/actionHook",
|
|
34
|
+
"description": "A webhook invoked for NOTIFY events during the REFER process, providing transfer progress updates."
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"required": ["referTo"],
|
|
38
|
+
"examples": [
|
|
39
|
+
{ "verb": "sip:refer", "referTo": "sip:alice@example.com", "actionHook": "/refer-complete" }
|
|
40
|
+
]
|
|
41
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://jambonz.org/schema/verbs/sip:request",
|
|
4
|
+
"title": "SIP Request",
|
|
5
|
+
"description": "Sends a SIP request within the current dialog. Used to send INFO, NOTIFY, or other SIP methods to the remote party during an active call.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"verb": { "const": "sip:request" },
|
|
9
|
+
"id": { "type": "string", "description": "An optional unique identifier for this verb instance." },
|
|
10
|
+
"method": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"description": "The SIP method to send.",
|
|
13
|
+
"examples": ["INFO", "NOTIFY", "MESSAGE"]
|
|
14
|
+
},
|
|
15
|
+
"body": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"description": "The body of the SIP request."
|
|
18
|
+
},
|
|
19
|
+
"headers": {
|
|
20
|
+
"type": "object",
|
|
21
|
+
"description": "Custom SIP headers to include in the request.",
|
|
22
|
+
"additionalProperties": { "type": "string" }
|
|
23
|
+
},
|
|
24
|
+
"actionHook": {
|
|
25
|
+
"$ref": "../components/actionHook",
|
|
26
|
+
"description": "A webhook invoked when the response to the SIP request is received."
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"required": ["method"],
|
|
30
|
+
"examples": [
|
|
31
|
+
{ "verb": "sip:request", "method": "INFO", "body": "Signal=1\nDuration=250", "headers": { "Content-Type": "application/dtmf-relay" } }
|
|
32
|
+
]
|
|
33
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://jambonz.org/schema/verbs/stream",
|
|
4
|
+
"title": "Stream",
|
|
5
|
+
"description": "Streams real-time call audio to an external websocket endpoint. Functionally equivalent to 'listen' — this is an alias provided for naming clarity when the intent is audio streaming rather than recording.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"verb": { "const": "stream" },
|
|
9
|
+
"id": { "type": "string", "description": "An optional unique identifier for this verb instance." },
|
|
10
|
+
"url": { "type": "string", "format": "uri", "description": "The websocket URL to stream audio to." },
|
|
11
|
+
"actionHook": { "$ref": "../components/actionHook", "description": "A webhook invoked when the stream ends." },
|
|
12
|
+
"wsAuth": { "$ref": "../components/auth", "description": "Authentication credentials for the websocket connection." },
|
|
13
|
+
"mixType": { "type": "string", "enum": ["mono", "stereo", "mixed"], "description": "How to mix audio channels." },
|
|
14
|
+
"metadata": { "type": "object", "description": "Metadata to send with the initial connection.", "additionalProperties": true },
|
|
15
|
+
"sampleRate": { "type": "number", "description": "Audio sample rate in Hz.", "examples": [8000, 16000] },
|
|
16
|
+
"finishOnKey": { "type": "string", "description": "DTMF key that ends the stream." },
|
|
17
|
+
"maxLength": { "type": "number", "description": "Maximum duration in seconds." },
|
|
18
|
+
"passDtmf": { "type": "boolean", "description": "Forward DTMF events to the websocket." },
|
|
19
|
+
"playBeep": { "type": "boolean", "description": "Play a beep before streaming begins." },
|
|
20
|
+
"disableBidirectionalAudio": { "type": "boolean", "description": "Disable receiving audio from the websocket." },
|
|
21
|
+
"bidirectionalAudio": { "$ref": "../components/bidirectionalAudio", "description": "Bidirectional audio configuration." },
|
|
22
|
+
"timeout": { "type": "number", "description": "Inactivity timeout in seconds." },
|
|
23
|
+
"transcribe": { "type": "object", "description": "Simultaneous transcription configuration.", "additionalProperties": true },
|
|
24
|
+
"earlyMedia": { "type": "boolean", "description": "Stream audio before the call is answered." }
|
|
25
|
+
},
|
|
26
|
+
"required": ["url"],
|
|
27
|
+
"examples": [
|
|
28
|
+
{ "verb": "stream", "url": "wss://myapp.example.com/audio", "sampleRate": 16000, "mixType": "stereo" }
|
|
29
|
+
]
|
|
30
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://jambonz.org/schema/verbs/tag",
|
|
4
|
+
"title": "Tag",
|
|
5
|
+
"description": "Attaches arbitrary metadata to the current call. Tagged data is included in all subsequent webhook requests and in the call detail record (CDR). Useful for tracking business context, routing decisions, or analytics data through the call lifecycle.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"verb": { "const": "tag" },
|
|
9
|
+
"id": { "type": "string", "description": "An optional unique identifier for this verb instance." },
|
|
10
|
+
"data": {
|
|
11
|
+
"type": "object",
|
|
12
|
+
"description": "An object containing the metadata to attach to the call. Keys and values are application-defined.",
|
|
13
|
+
"additionalProperties": true,
|
|
14
|
+
"examples": [{ "customerId": "12345", "department": "support", "priority": "high" }]
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"required": ["data"],
|
|
18
|
+
"examples": [
|
|
19
|
+
{ "verb": "tag", "data": { "customerId": "12345", "intent": "billing-inquiry" } }
|
|
20
|
+
]
|
|
21
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://jambonz.org/schema/verbs/transcribe",
|
|
4
|
+
"title": "Transcribe",
|
|
5
|
+
"description": "Enables real-time transcription of the call audio. Transcription results are sent to the transcriptionHook as they are produced. Runs as a background process — subsequent verbs execute immediately while transcription continues.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"verb": { "const": "transcribe" },
|
|
9
|
+
"id": { "type": "string", "description": "An optional unique identifier for this verb instance." },
|
|
10
|
+
"transcriptionHook": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"format": "uri",
|
|
13
|
+
"description": "The webhook URL to receive transcription results."
|
|
14
|
+
},
|
|
15
|
+
"translationHook": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"format": "uri",
|
|
18
|
+
"description": "The webhook URL to receive translated transcription results."
|
|
19
|
+
},
|
|
20
|
+
"recognizer": {
|
|
21
|
+
"$ref": "../components/recognizer",
|
|
22
|
+
"description": "STT configuration for the transcription."
|
|
23
|
+
},
|
|
24
|
+
"earlyMedia": {
|
|
25
|
+
"type": "boolean",
|
|
26
|
+
"description": "If true, begin transcribing before the call is answered."
|
|
27
|
+
},
|
|
28
|
+
"channel": {
|
|
29
|
+
"type": "number",
|
|
30
|
+
"description": "Specific audio channel to transcribe."
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"examples": [
|
|
34
|
+
{
|
|
35
|
+
"verb": "transcribe",
|
|
36
|
+
"transcriptionHook": "https://myapp.example.com/transcription",
|
|
37
|
+
"recognizer": {
|
|
38
|
+
"vendor": "deepgram",
|
|
39
|
+
"language": "en-US",
|
|
40
|
+
"deepgramOptions": { "model": "nova-2", "smartFormatting": true }
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
}
|