@egain/egain-mcp-server 1.0.20 → 1.0.22
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/bin/mcp-server.js +294 -114
- package/bin/mcp-server.js.map +40 -34
- package/esm/src/funcs/queryAnswers.d.ts +7 -3
- package/esm/src/funcs/queryAnswers.d.ts.map +1 -1
- package/esm/src/funcs/queryAnswers.js +9 -7
- package/esm/src/funcs/queryAnswers.js.map +1 -1
- package/esm/src/funcs/queryRetrieve.d.ts +2 -2
- package/esm/src/funcs/queryRetrieve.d.ts.map +1 -1
- package/esm/src/funcs/queryRetrieve.js +4 -10
- package/esm/src/funcs/queryRetrieve.js.map +1 -1
- package/esm/src/funcs/querySearch.d.ts +3 -3
- package/esm/src/funcs/querySearch.d.ts.map +1 -1
- package/esm/src/funcs/querySearch.js +9 -3
- package/esm/src/funcs/querySearch.js.map +1 -1
- package/esm/src/hooks/server-routing-hook.js +2 -2
- package/esm/src/hooks/server-routing-hook.js.map +1 -1
- package/esm/src/lib/config.d.ts +2 -2
- package/esm/src/lib/config.js +2 -2
- package/esm/src/mcp-server/mcp-server.js +1 -1
- package/esm/src/mcp-server/server.js +4 -4
- package/esm/src/mcp-server/server.js.map +1 -1
- package/esm/src/mcp-server/tools/queryAnswers.d.ts +1 -1
- package/esm/src/mcp-server/tools/queryAnswers.d.ts.map +1 -1
- package/esm/src/mcp-server/tools/queryAnswers.js +7 -3
- package/esm/src/mcp-server/tools/queryAnswers.js.map +1 -1
- package/esm/src/mcp-server/tools/queryRetrieve.d.ts +1 -1
- package/esm/src/mcp-server/tools/queryRetrieve.js +2 -2
- package/esm/src/mcp-server/tools/queryRetrieve.js.map +1 -1
- package/esm/src/mcp-server/tools/querySearch.js +1 -1
- package/esm/src/models/additionalsnippets.d.ts +2 -1
- package/esm/src/models/additionalsnippets.d.ts.map +1 -1
- package/esm/src/models/additionalsnippets.js +2 -1
- package/esm/src/models/additionalsnippets.js.map +1 -1
- package/esm/src/models/aisearchop.d.ts +8 -4
- package/esm/src/models/aisearchop.d.ts.map +1 -1
- package/esm/src/models/aisearchop.js +16 -6
- package/esm/src/models/aisearchop.js.map +1 -1
- package/esm/src/models/aisearchresponse.d.ts +16 -0
- package/esm/src/models/aisearchresponse.d.ts.map +1 -0
- package/esm/src/models/aisearchresponse.js +14 -0
- package/esm/src/models/aisearchresponse.js.map +1 -0
- package/esm/src/models/aispaginationinfo.d.ts +10 -0
- package/esm/src/models/aispaginationinfo.d.ts.map +1 -0
- package/esm/src/models/aispaginationinfo.js +12 -0
- package/esm/src/models/aispaginationinfo.js.map +1 -0
- package/esm/src/models/aitopicbreadcrumb.d.ts +10 -0
- package/esm/src/models/aitopicbreadcrumb.d.ts.map +1 -0
- package/esm/src/models/aitopicbreadcrumb.js +9 -0
- package/esm/src/models/aitopicbreadcrumb.js.map +1 -0
- package/esm/src/models/aitopicsummary.d.ts +10 -0
- package/esm/src/models/aitopicsummary.d.ts.map +1 -0
- package/esm/src/models/aitopicsummary.js +9 -0
- package/esm/src/models/aitopicsummary.js.map +1 -0
- package/esm/src/models/answersrequest.d.ts +22 -11
- package/esm/src/models/answersrequest.d.ts.map +1 -1
- package/esm/src/models/answersrequest.js +22 -10
- package/esm/src/models/answersrequest.js.map +1 -1
- package/esm/src/models/answersresponse.d.ts +3 -2
- package/esm/src/models/answersresponse.d.ts.map +1 -1
- package/esm/src/models/answersresponse.js +2 -1
- package/esm/src/models/answersresponse.js.map +1 -1
- package/esm/src/models/article.d.ts +1 -1
- package/esm/src/models/article.d.ts.map +1 -1
- package/esm/src/models/articleaisearchresult.d.ts +58 -0
- package/esm/src/models/articleaisearchresult.d.ts.map +1 -0
- package/esm/src/models/articleaisearchresult.js +63 -0
- package/esm/src/models/articleaisearchresult.js.map +1 -0
- package/esm/src/models/articletype.d.ts +1 -1
- package/esm/src/models/articletype.d.ts.map +1 -1
- package/esm/src/models/articletype.js +1 -0
- package/esm/src/models/articletype.js.map +1 -1
- package/esm/src/models/createsuggestion.d.ts +1 -1
- package/esm/src/models/createsuggestion.d.ts.map +1 -1
- package/esm/src/models/createsuggestion.js +13 -1
- package/esm/src/models/createsuggestion.js.map +1 -1
- package/esm/src/models/getbestanswerop.d.ts +24 -0
- package/esm/src/models/getbestanswerop.d.ts.map +1 -0
- package/esm/src/models/getbestanswerop.js +30 -0
- package/esm/src/models/getbestanswerop.js.map +1 -0
- package/esm/src/models/languagecodeparameter.d.ts +1 -1
- package/esm/src/models/languagecodeparameter.d.ts.map +1 -1
- package/esm/src/models/languagecodeparameter.js +11 -0
- package/esm/src/models/languagecodeparameter.js.map +1 -1
- package/esm/src/models/languagequeryparameter.d.ts +1 -1
- package/esm/src/models/languagequeryparameter.d.ts.map +1 -1
- package/esm/src/models/languagequeryparameter.js +11 -0
- package/esm/src/models/languagequeryparameter.js.map +1 -1
- package/esm/src/models/mandatorylanguagequeryparameter.d.ts +1 -1
- package/esm/src/models/mandatorylanguagequeryparameter.d.ts.map +1 -1
- package/esm/src/models/mandatorylanguagequeryparameter.js +12 -0
- package/esm/src/models/mandatorylanguagequeryparameter.js.map +1 -1
- package/esm/src/models/referenceresponse.d.ts +2 -2
- package/esm/src/models/referenceresponse.d.ts.map +1 -1
- package/esm/src/models/referenceresponse.js +2 -2
- package/esm/src/models/referenceresponse.js.map +1 -1
- package/esm/src/models/requiredlanguagecode.d.ts +7 -0
- package/esm/src/models/requiredlanguagecode.d.ts.map +1 -0
- package/esm/src/models/requiredlanguagecode.js +41 -0
- package/esm/src/models/requiredlanguagecode.js.map +1 -0
- package/esm/src/models/retrievechunksop.d.ts +24 -0
- package/esm/src/models/retrievechunksop.d.ts.map +1 -0
- package/esm/src/models/retrievechunksop.js +30 -0
- package/esm/src/models/retrievechunksop.js.map +1 -0
- package/esm/src/models/retrieverequest.d.ts +1 -0
- package/esm/src/models/retrieverequest.d.ts.map +1 -1
- package/esm/src/models/retrieverequest.js +1 -0
- package/esm/src/models/retrieverequest.js.map +1 -1
- package/esm/src/models/retrieveresponse.d.ts +2 -1
- package/esm/src/models/retrieveresponse.d.ts.map +1 -1
- package/esm/src/models/retrieveresponse.js +2 -1
- package/esm/src/models/retrieveresponse.js.map +1 -1
- package/esm/src/models/schemastags.d.ts +7 -0
- package/esm/src/models/schemastags.d.ts.map +1 -0
- package/esm/src/models/schemastags.js +9 -0
- package/esm/src/models/schemastags.js.map +1 -0
- package/esm/src/models/searchresult.d.ts +6 -4
- package/esm/src/models/searchresult.d.ts.map +1 -1
- package/esm/src/models/searchresult.js +7 -5
- package/esm/src/models/searchresult.js.map +1 -1
- package/esm/src/models/tags.d.ts +2 -2
- package/esm/src/models/tags.d.ts.map +1 -1
- package/esm/src/models/tags.js +2 -2
- package/esm/src/models/tags.js.map +1 -1
- package/esm/src/models/topicsummary.d.ts +2 -0
- package/esm/src/models/topicsummary.d.ts.map +1 -1
- package/esm/src/models/topicsummary.js +2 -0
- package/esm/src/models/topicsummary.js.map +1 -1
- package/esm/src/models/wserrorcommon.d.ts +1 -1
- package/esm/src/models/wserrorcommon.d.ts.map +1 -1
- package/esm/src/models/wserrorcommon.js +1 -1
- package/esm/src/models/wserrorcommon.js.map +1 -1
- package/manifest.json +12 -12
- package/package.json +1 -1
- package/src/funcs/queryAnswers.ts +20 -18
- package/src/funcs/queryRetrieve.ts +15 -21
- package/src/funcs/querySearch.ts +16 -9
- package/src/hooks/auth-pages/browser-error.html +282 -0
- package/src/hooks/auth-pages/config-page.html +490 -0
- package/src/hooks/img/accesstoken-tooltip.png +0 -0
- package/src/hooks/img/apidomain-tooltip.png +0 -0
- package/src/hooks/img/authurl-tooltip.png +0 -0
- package/src/hooks/img/clientid-tooltip.png +0 -0
- package/src/hooks/img/clientsecret-tooltip.png +0 -0
- package/src/hooks/img/env-tooltip.png +0 -0
- package/src/hooks/img/redirect-tooltip.png +0 -0
- package/src/hooks/img/scopeprefix-tooltip.png +0 -0
- package/src/hooks/server-routing-hook.ts +2 -2
- package/src/lib/config.ts +2 -2
- package/src/mcp-server/mcp-server.ts +1 -1
- package/src/mcp-server/server.ts +4 -4
- package/src/mcp-server/tools/queryAnswers.ts +7 -3
- package/src/mcp-server/tools/queryRetrieve.ts +2 -2
- package/src/mcp-server/tools/querySearch.ts +1 -1
- package/src/models/additionalsnippets.ts +4 -2
- package/src/models/aisearchop.ts +33 -9
- package/src/models/aisearchresponse.ts +42 -0
- package/src/models/aispaginationinfo.ts +24 -0
- package/src/models/aitopicbreadcrumb.ts +21 -0
- package/src/models/aitopicsummary.ts +24 -0
- package/src/models/answersrequest.ts +42 -23
- package/src/models/answersresponse.ts +5 -3
- package/src/models/article.ts +1 -1
- package/src/models/{articlesearchresult.ts → articleaisearchresult.ts} +39 -37
- package/src/models/articletype.ts +1 -0
- package/src/models/createsuggestion.ts +13 -1
- package/src/models/{postportalidanswersop.ts → getbestanswerop.ts} +19 -12
- package/src/models/languagecodeparameter.ts +11 -0
- package/src/models/languagequeryparameter.ts +11 -0
- package/src/models/mandatorylanguagequeryparameter.ts +12 -0
- package/src/models/referenceresponse.ts +5 -5
- package/src/models/requiredlanguagecode.ts +48 -0
- package/src/models/{postportalidretrieveop.ts → retrievechunksop.ts} +19 -15
- package/src/models/retrieverequest.ts +2 -0
- package/src/models/retrieveresponse.ts +4 -2
- package/src/models/schemastags.ts +19 -0
- package/src/models/searchresult.ts +13 -9
- package/src/models/tag.ts +12 -0
- package/src/models/tags.ts +3 -6
- package/src/models/topicsummary.ts +3 -0
- package/src/models/wserrorcommon.ts +2 -2
- package/src/models/searchresponse.ts +0 -34
|
@@ -0,0 +1,490 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>eGain MCP - Sign In</title>
|
|
7
|
+
<style>
|
|
8
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
9
|
+
body {
|
|
10
|
+
font-family: "Open Sans", "Segoe UI", "SegoeUI", "Helvetica Neue", Helvetica, Arial, sans-serif !important;
|
|
11
|
+
background: #fef1fd;
|
|
12
|
+
min-height: 100vh;
|
|
13
|
+
display: flex;
|
|
14
|
+
justify-content: center;
|
|
15
|
+
align-items: center;
|
|
16
|
+
padding: 20px;
|
|
17
|
+
}
|
|
18
|
+
.container {
|
|
19
|
+
background: white;
|
|
20
|
+
border-radius: 16px;
|
|
21
|
+
box-shadow: 0px 0px 30px 0px rgba(0, 0, 0, 0.12);
|
|
22
|
+
max-width: 500px;
|
|
23
|
+
width: 100%;
|
|
24
|
+
padding: 32px;
|
|
25
|
+
}
|
|
26
|
+
h1 { color: #333; margin-bottom: 8px; font-size: 24px; }
|
|
27
|
+
.subtitle { color: #666; margin-bottom: 20px; font-size: 13px; }
|
|
28
|
+
.quick-signin {
|
|
29
|
+
display: none;
|
|
30
|
+
text-align: center;
|
|
31
|
+
position: relative;
|
|
32
|
+
}
|
|
33
|
+
.quick-signin .icon { font-size: 64px; }
|
|
34
|
+
.quick-signin h1 { text-align: center; }
|
|
35
|
+
.saved-config {
|
|
36
|
+
background: #f8f9fa;
|
|
37
|
+
border-radius: 8px;
|
|
38
|
+
padding: 20px;
|
|
39
|
+
margin: 30px 0;
|
|
40
|
+
text-align: left;
|
|
41
|
+
}
|
|
42
|
+
.saved-config-title {
|
|
43
|
+
font-size: 12px;
|
|
44
|
+
font-weight: 600;
|
|
45
|
+
color: #666;
|
|
46
|
+
text-transform: uppercase;
|
|
47
|
+
margin-bottom: 15px;
|
|
48
|
+
text-align: center;
|
|
49
|
+
}
|
|
50
|
+
.config-item {
|
|
51
|
+
display: flex;
|
|
52
|
+
justify-content: space-between;
|
|
53
|
+
padding: 8px 0;
|
|
54
|
+
border-bottom: 1px solid #e1e4e8;
|
|
55
|
+
font-size: 13px;
|
|
56
|
+
}
|
|
57
|
+
.config-item:last-child { border-bottom: none; }
|
|
58
|
+
.config-label { color: #666; font-weight: 500; }
|
|
59
|
+
.config-value {
|
|
60
|
+
color: #333;
|
|
61
|
+
font-family: 'Courier New', monospace;
|
|
62
|
+
max-width: 300px;
|
|
63
|
+
overflow: hidden;
|
|
64
|
+
text-overflow: ellipsis;
|
|
65
|
+
white-space: nowrap;
|
|
66
|
+
}
|
|
67
|
+
.config-value.masked { color: #999; }
|
|
68
|
+
.form-view { display: none; }
|
|
69
|
+
.form-group { margin-bottom: 16px; }
|
|
70
|
+
label {
|
|
71
|
+
display: flex;
|
|
72
|
+
align-items: center;
|
|
73
|
+
gap: 6px;
|
|
74
|
+
margin-bottom: 6px;
|
|
75
|
+
color: #333;
|
|
76
|
+
font-weight: 500;
|
|
77
|
+
font-size: 14px;
|
|
78
|
+
}
|
|
79
|
+
input {
|
|
80
|
+
width: 100%;
|
|
81
|
+
padding: 10px 12px;
|
|
82
|
+
border: 2px solid #e1e4e8;
|
|
83
|
+
border-radius: 8px;
|
|
84
|
+
font-size: 13px;
|
|
85
|
+
font-family: "Helvetica Neue LT Pro", "Open Sans", 'Courier New', monospace !important;
|
|
86
|
+
transition: border-color 0.2s;
|
|
87
|
+
}
|
|
88
|
+
input:focus {
|
|
89
|
+
outline: none;
|
|
90
|
+
border-color: #b91d8f;
|
|
91
|
+
}
|
|
92
|
+
.optional {
|
|
93
|
+
color: #999;
|
|
94
|
+
font-weight: normal;
|
|
95
|
+
font-size: 12px;
|
|
96
|
+
}
|
|
97
|
+
.tooltip {
|
|
98
|
+
position: relative;
|
|
99
|
+
display: inline-flex;
|
|
100
|
+
align-items: center;
|
|
101
|
+
justify-content: center;
|
|
102
|
+
width: 16px;
|
|
103
|
+
height: 16px;
|
|
104
|
+
background: #b91d8f;
|
|
105
|
+
color: white;
|
|
106
|
+
border-radius: 50%;
|
|
107
|
+
font-size: 11px;
|
|
108
|
+
font-weight: bold;
|
|
109
|
+
cursor: pointer;
|
|
110
|
+
flex-shrink: 0;
|
|
111
|
+
user-select: none;
|
|
112
|
+
}
|
|
113
|
+
.tooltip-content {
|
|
114
|
+
display: none !important;
|
|
115
|
+
position: fixed;
|
|
116
|
+
max-width: 380px;
|
|
117
|
+
width: max-content;
|
|
118
|
+
background: white;
|
|
119
|
+
border-radius: 8px;
|
|
120
|
+
box-shadow: 0 4px 20px rgba(0,0,0,0.3);
|
|
121
|
+
z-index: 10000;
|
|
122
|
+
overflow: hidden;
|
|
123
|
+
border: 2px solid #b91d8f;
|
|
124
|
+
pointer-events: auto;
|
|
125
|
+
}
|
|
126
|
+
.tooltip-content.active {
|
|
127
|
+
display: block !important;
|
|
128
|
+
}
|
|
129
|
+
.tooltip-arrow {
|
|
130
|
+
position: absolute;
|
|
131
|
+
width: 0;
|
|
132
|
+
height: 0;
|
|
133
|
+
border: 8px solid transparent;
|
|
134
|
+
z-index: 1;
|
|
135
|
+
}
|
|
136
|
+
.tooltip-arrow.left {
|
|
137
|
+
left: -16px;
|
|
138
|
+
top: 50%;
|
|
139
|
+
transform: translateY(-50%);
|
|
140
|
+
border-right-color: #b91d8f;
|
|
141
|
+
}
|
|
142
|
+
.tooltip-arrow.right {
|
|
143
|
+
right: -16px;
|
|
144
|
+
top: 50%;
|
|
145
|
+
transform: translateY(-50%);
|
|
146
|
+
border-left-color: #b91d8f;
|
|
147
|
+
}
|
|
148
|
+
.tooltip-arrow.top {
|
|
149
|
+
top: -16px;
|
|
150
|
+
left: 50%;
|
|
151
|
+
transform: translateX(-50%);
|
|
152
|
+
border-bottom-color: #b91d8f;
|
|
153
|
+
}
|
|
154
|
+
.tooltip-arrow.bottom {
|
|
155
|
+
bottom: -16px;
|
|
156
|
+
left: 50%;
|
|
157
|
+
transform: translateX(-50%);
|
|
158
|
+
border-top-color: #b91d8f;
|
|
159
|
+
}
|
|
160
|
+
.tooltip-header {
|
|
161
|
+
background: #b91d8f;
|
|
162
|
+
color: white;
|
|
163
|
+
padding: 8px 12px;
|
|
164
|
+
font-weight: 600;
|
|
165
|
+
font-size: 13px;
|
|
166
|
+
}
|
|
167
|
+
.tooltip-body {
|
|
168
|
+
padding: 10px 12px;
|
|
169
|
+
}
|
|
170
|
+
.tooltip-image {
|
|
171
|
+
width: 100%;
|
|
172
|
+
max-height: 200px;
|
|
173
|
+
object-fit: contain;
|
|
174
|
+
border-radius: 4px;
|
|
175
|
+
margin-bottom: 6px;
|
|
176
|
+
border: 1px solid #e1e4e8;
|
|
177
|
+
background: #f8f9fa;
|
|
178
|
+
}
|
|
179
|
+
.tooltip-text {
|
|
180
|
+
color: #555;
|
|
181
|
+
font-size: 12px;
|
|
182
|
+
line-height: 1.4;
|
|
183
|
+
font-style: italic;
|
|
184
|
+
}
|
|
185
|
+
.button-group {
|
|
186
|
+
display: flex;
|
|
187
|
+
gap: 10px;
|
|
188
|
+
margin-top: 20px;
|
|
189
|
+
}
|
|
190
|
+
button {
|
|
191
|
+
flex: 1;
|
|
192
|
+
padding: 12px;
|
|
193
|
+
border: 2px solid transparent;
|
|
194
|
+
border-radius: 8px;
|
|
195
|
+
font-size: 15px;
|
|
196
|
+
font-weight: 600;
|
|
197
|
+
cursor: pointer;
|
|
198
|
+
transition: all 0.2s;
|
|
199
|
+
}
|
|
200
|
+
.btn-primary {
|
|
201
|
+
background: linear-gradient(135deg, #b91d8f 0%, #7a1460 100%);
|
|
202
|
+
color: white;
|
|
203
|
+
}
|
|
204
|
+
.btn-primary:hover {
|
|
205
|
+
transform: translateY(-2px);
|
|
206
|
+
box-shadow: 0 6px 20px rgba(185, 29, 143, 0.4);
|
|
207
|
+
}
|
|
208
|
+
.btn-secondary {
|
|
209
|
+
background: #f6f8fa;
|
|
210
|
+
color: #666;
|
|
211
|
+
}
|
|
212
|
+
.btn-secondary:hover {
|
|
213
|
+
background: #e1e4e8;
|
|
214
|
+
}
|
|
215
|
+
.btn-danger {
|
|
216
|
+
background: white;
|
|
217
|
+
color: #b91d8f;
|
|
218
|
+
border: 2px solid #b91d8f;
|
|
219
|
+
}
|
|
220
|
+
.btn-danger:hover {
|
|
221
|
+
background: #fef1fd;
|
|
222
|
+
transform: translateY(-1px);
|
|
223
|
+
}
|
|
224
|
+
.btn-link {
|
|
225
|
+
background: transparent;
|
|
226
|
+
color: #b91d8f;
|
|
227
|
+
padding: 8px;
|
|
228
|
+
font-size: 14px;
|
|
229
|
+
}
|
|
230
|
+
.btn-link:hover {
|
|
231
|
+
background: #f6f8fa;
|
|
232
|
+
}
|
|
233
|
+
.status {
|
|
234
|
+
margin-top: 20px;
|
|
235
|
+
padding: 12px;
|
|
236
|
+
border-radius: 8px;
|
|
237
|
+
font-size: 14px;
|
|
238
|
+
display: none;
|
|
239
|
+
}
|
|
240
|
+
.status.success {
|
|
241
|
+
background: #d4edda;
|
|
242
|
+
color: #155724;
|
|
243
|
+
border: 1px solid #c3e6cb;
|
|
244
|
+
}
|
|
245
|
+
.status.error {
|
|
246
|
+
background: #f8d7da;
|
|
247
|
+
color: #721c24;
|
|
248
|
+
border: 1px solid #f5c6cb;
|
|
249
|
+
}
|
|
250
|
+
.status.info {
|
|
251
|
+
background: #d1ecf1;
|
|
252
|
+
color: #0c5460;
|
|
253
|
+
border: 1px solid #bee5eb;
|
|
254
|
+
}
|
|
255
|
+
/* Loading overlay and spinner */
|
|
256
|
+
.loading-overlay {
|
|
257
|
+
display: none;
|
|
258
|
+
position: absolute;
|
|
259
|
+
top: -32px;
|
|
260
|
+
left: -32px;
|
|
261
|
+
right: -32px;
|
|
262
|
+
bottom: -32px;
|
|
263
|
+
background: rgba(255, 255, 255, 0.85);
|
|
264
|
+
backdrop-filter: blur(2px);
|
|
265
|
+
border-radius: 16px;
|
|
266
|
+
z-index: 1000;
|
|
267
|
+
justify-content: center;
|
|
268
|
+
align-items: center;
|
|
269
|
+
flex-direction: column;
|
|
270
|
+
gap: 16px;
|
|
271
|
+
}
|
|
272
|
+
.loading-overlay.active {
|
|
273
|
+
display: flex;
|
|
274
|
+
}
|
|
275
|
+
.spinner {
|
|
276
|
+
width: 48px;
|
|
277
|
+
height: 48px;
|
|
278
|
+
border: 4px solid #e1e4e8;
|
|
279
|
+
border-top-color: #b91d8f;
|
|
280
|
+
border-radius: 50%;
|
|
281
|
+
animation: spin 0.8s linear infinite;
|
|
282
|
+
}
|
|
283
|
+
@keyframes spin {
|
|
284
|
+
to { transform: rotate(360deg); }
|
|
285
|
+
}
|
|
286
|
+
.loading-message {
|
|
287
|
+
color: #666;
|
|
288
|
+
font-size: 14px;
|
|
289
|
+
font-weight: 500;
|
|
290
|
+
text-align: center;
|
|
291
|
+
max-width: 300px;
|
|
292
|
+
}
|
|
293
|
+
.form-view {
|
|
294
|
+
position: relative;
|
|
295
|
+
}
|
|
296
|
+
.modal-overlay {
|
|
297
|
+
display: none;
|
|
298
|
+
position: fixed;
|
|
299
|
+
top: 0;
|
|
300
|
+
left: 0;
|
|
301
|
+
right: 0;
|
|
302
|
+
bottom: 0;
|
|
303
|
+
background: rgba(0, 0, 0, 0.5);
|
|
304
|
+
z-index: 10001;
|
|
305
|
+
justify-content: center;
|
|
306
|
+
align-items: center;
|
|
307
|
+
}
|
|
308
|
+
.modal-overlay.active {
|
|
309
|
+
display: flex;
|
|
310
|
+
}
|
|
311
|
+
.modal-content {
|
|
312
|
+
background: white;
|
|
313
|
+
border-radius: 12px;
|
|
314
|
+
padding: 30px;
|
|
315
|
+
max-width: 400px;
|
|
316
|
+
width: 90%;
|
|
317
|
+
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3);
|
|
318
|
+
}
|
|
319
|
+
.modal-title {
|
|
320
|
+
font-size: 20px;
|
|
321
|
+
font-weight: 600;
|
|
322
|
+
color: #333;
|
|
323
|
+
margin-bottom: 12px;
|
|
324
|
+
}
|
|
325
|
+
.modal-message {
|
|
326
|
+
font-size: 14px;
|
|
327
|
+
color: #666;
|
|
328
|
+
margin-bottom: 24px;
|
|
329
|
+
line-height: 1.5;
|
|
330
|
+
}
|
|
331
|
+
.modal-buttons {
|
|
332
|
+
display: flex;
|
|
333
|
+
gap: 10px;
|
|
334
|
+
justify-content: flex-end;
|
|
335
|
+
}
|
|
336
|
+
.modal-buttons button {
|
|
337
|
+
padding: 10px 20px;
|
|
338
|
+
font-size: 14px;
|
|
339
|
+
flex: none;
|
|
340
|
+
}
|
|
341
|
+
</style>
|
|
342
|
+
</head>
|
|
343
|
+
<body>
|
|
344
|
+
<div class="container">
|
|
345
|
+
<div id="quickSigninView" class="quick-signin">
|
|
346
|
+
<div id="loadingOverlayQuickSignin" class="loading-overlay">
|
|
347
|
+
<div class="spinner"></div>
|
|
348
|
+
<div id="loadingMessageQuickSignin" class="loading-message">Redirecting to login...</div>
|
|
349
|
+
</div>
|
|
350
|
+
<div class="icon">🔐</div>
|
|
351
|
+
<h1>Welcome Back!</h1>
|
|
352
|
+
<p class="subtitle">Ready to sign in with your saved configuration</p>
|
|
353
|
+
<div class="saved-config">
|
|
354
|
+
<div class="saved-config-title">Saved Configuration</div>
|
|
355
|
+
<div id="savedConfigList"></div>
|
|
356
|
+
</div>
|
|
357
|
+
<div class="button-group">
|
|
358
|
+
<button type="button" class="btn-danger" onclick="clearConfigAndShowForm()">Clear All</button>
|
|
359
|
+
<button type="button" class="btn-primary" onclick="signInWithSavedConfig()">Sign In</button>
|
|
360
|
+
</div>
|
|
361
|
+
<button type="button" class="btn-link" onclick="showForm()" style="width: 100%; margin-top: 10px;">Edit Configuration</button>
|
|
362
|
+
</div>
|
|
363
|
+
<div id="formView" class="form-view">
|
|
364
|
+
<div id="loadingOverlay" class="loading-overlay">
|
|
365
|
+
<div class="spinner"></div>
|
|
366
|
+
<div id="loadingMessage" class="loading-message">Saving configuration...</div>
|
|
367
|
+
</div>
|
|
368
|
+
<h1>🔐 eGain MCP Configuration</h1>
|
|
369
|
+
<p class="subtitle">Enter details from your eGain <strong>Admin Console</strong></p>
|
|
370
|
+
<form id="configForm">
|
|
371
|
+
<div class="form-group">
|
|
372
|
+
<label for="egainUrl">
|
|
373
|
+
<span>eGain Environment URL</span>
|
|
374
|
+
<span class="tooltip" onmouseenter="showTooltip(event, 'egainUrl')" onmouseleave="hideTooltip(event, 'egainUrl')">?</span>
|
|
375
|
+
</label>
|
|
376
|
+
<input type="text" id="egainUrl" name="egainUrl" placeholder="https://your-environment.egain.cloud" required>
|
|
377
|
+
</div>
|
|
378
|
+
<div class="form-group">
|
|
379
|
+
<label for="authUrl">
|
|
380
|
+
<span>Authorization URL</span>
|
|
381
|
+
<span class="tooltip" onmouseenter="showTooltip(event, 'authUrl')" onmouseleave="hideTooltip(event, 'authUrl')">?</span>
|
|
382
|
+
</label>
|
|
383
|
+
<input type="text" id="authUrl" name="authUrl" placeholder="https://login.egain.cloud/.../oauth2/authorize" required>
|
|
384
|
+
</div>
|
|
385
|
+
<div class="form-group">
|
|
386
|
+
<label for="accessTokenUrl">
|
|
387
|
+
<span>Access Token URL</span>
|
|
388
|
+
<span class="tooltip" onmouseenter="showTooltip(event, 'accessTokenUrl')" onmouseleave="hideTooltip(event, 'accessTokenUrl')">?</span>
|
|
389
|
+
</label>
|
|
390
|
+
<input type="text" id="accessTokenUrl" name="accessTokenUrl" placeholder="https://login.egain.cloud/.../oauth2/token" required>
|
|
391
|
+
</div>
|
|
392
|
+
<div class="form-group">
|
|
393
|
+
<label for="clientId">
|
|
394
|
+
<span>Client ID</span>
|
|
395
|
+
<span class="tooltip" onmouseenter="showTooltip(event, 'clientId')" onmouseleave="hideTooltip(event, 'clientId')">?</span>
|
|
396
|
+
</label>
|
|
397
|
+
<input type="text" id="clientId" name="clientId" placeholder="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" required>
|
|
398
|
+
</div>
|
|
399
|
+
<div class="form-group">
|
|
400
|
+
<label for="redirectUrl">
|
|
401
|
+
<span>Redirect URL</span>
|
|
402
|
+
<span class="tooltip" onmouseenter="showTooltip(event, 'redirectUrl')" onmouseleave="hideTooltip(event, 'redirectUrl')">?</span>
|
|
403
|
+
</label>
|
|
404
|
+
<input type="text" id="redirectUrl" name="redirectUrl" placeholder="https://your-redirect-url.com/" required>
|
|
405
|
+
</div>
|
|
406
|
+
<div class="form-group">
|
|
407
|
+
<label for="scopePrefix">
|
|
408
|
+
<span>Scope Prefix</span>
|
|
409
|
+
<span class="tooltip" onmouseenter="showTooltip(event, 'scopePrefix')" onmouseleave="hideTooltip(event, 'scopePrefix')">?</span>
|
|
410
|
+
<span class="optional">(Fill if in Metadata)</span>
|
|
411
|
+
</label>
|
|
412
|
+
<input type="text" id="scopePrefix" name="scopePrefix" placeholder="https://your.scope-prefix.cloud/auth/">
|
|
413
|
+
</div>
|
|
414
|
+
<div style="font-size: 11px; color: #999; margin: 12px 0 0 0; line-height: 1.4;">
|
|
415
|
+
🔒 Your configuration will be securely saved to your <code style="background: #f0f0f0; padding: 2px 4px; border-radius: 3px; font-size: 10px;">~/.egain-mcp/config.json</code>.
|
|
416
|
+
</div>
|
|
417
|
+
<div class="button-group">
|
|
418
|
+
<button type="button" class="btn-secondary" onclick="cancelForm()">Cancel</button>
|
|
419
|
+
<button type="submit" class="btn-primary">Save & Authenticate</button>
|
|
420
|
+
</div>
|
|
421
|
+
</form>
|
|
422
|
+
</div>
|
|
423
|
+
<div id="status" class="status"></div>
|
|
424
|
+
</div>
|
|
425
|
+
|
|
426
|
+
<!-- Confirmation Modal -->
|
|
427
|
+
<div id="confirmModal" class="modal-overlay" onclick="if(event.target === this) closeModal(false)">
|
|
428
|
+
<div class="modal-content">
|
|
429
|
+
<div class="modal-title" id="modalTitle">Confirm Action</div>
|
|
430
|
+
<div class="modal-message" id="modalMessage">Are you sure?</div>
|
|
431
|
+
<div class="modal-buttons">
|
|
432
|
+
<button type="button" class="btn-secondary" onclick="closeModal(false)">Cancel</button>
|
|
433
|
+
<button type="button" class="btn-danger" id="modalConfirmBtn" onclick="closeModal(true)">Confirm</button>
|
|
434
|
+
</div>
|
|
435
|
+
</div>
|
|
436
|
+
</div>
|
|
437
|
+
|
|
438
|
+
<!-- Tooltip Popups (outside container for proper fixed positioning) -->
|
|
439
|
+
<div id="tooltip-egainUrl" class="tooltip-content">
|
|
440
|
+
<div class="tooltip-header">eGain Environment URL</div>
|
|
441
|
+
<div class="tooltip-body">
|
|
442
|
+
<img src="/img/env-tooltip.png" class="tooltip-image" alt="eGain Environment URL" onerror="this.style.display='none'">
|
|
443
|
+
<div class="tooltip-text">Enter the domain URL displayed in your browser when accessing the eGain application.</div>
|
|
444
|
+
</div>
|
|
445
|
+
</div>
|
|
446
|
+
|
|
447
|
+
<div id="tooltip-authUrl" class="tooltip-content">
|
|
448
|
+
<div class="tooltip-header">Authorization URL</div>
|
|
449
|
+
<div class="tooltip-body">
|
|
450
|
+
<img src="/img/authurl-tooltip.png" class="tooltip-image" alt="Authorization URL" onerror="this.style.display='none'">
|
|
451
|
+
<div class="tooltip-text">In the Partition space, go to Integration → Client Application → Metadata, and copy the Authorization URL.</div>
|
|
452
|
+
</div>
|
|
453
|
+
</div>
|
|
454
|
+
|
|
455
|
+
<div id="tooltip-accessTokenUrl" class="tooltip-content">
|
|
456
|
+
<div class="tooltip-header">Access Token URL</div>
|
|
457
|
+
<div class="tooltip-body">
|
|
458
|
+
<img src="/img/accesstoken-tooltip.png" class="tooltip-image" alt="Access Token URL" onerror="this.style.display='none'">
|
|
459
|
+
<div class="tooltip-text">In the Partition space, go to Integration → Client Application → Metadata, and copy the Access Token URL.</div>
|
|
460
|
+
</div>
|
|
461
|
+
</div>
|
|
462
|
+
|
|
463
|
+
<div id="tooltip-clientId" class="tooltip-content">
|
|
464
|
+
<div class="tooltip-header">Client ID</div>
|
|
465
|
+
<div class="tooltip-body">
|
|
466
|
+
<img src="/img/clientid-tooltip.png" class="tooltip-image" alt="Client ID" onerror="this.style.display='none'">
|
|
467
|
+
<div class="tooltip-text">In the Partition space, go to Integration → Client Application, select your client app, and copy the Client ID.</div>
|
|
468
|
+
</div>
|
|
469
|
+
</div>
|
|
470
|
+
|
|
471
|
+
<div id="tooltip-redirectUrl" class="tooltip-content">
|
|
472
|
+
<div class="tooltip-header">Redirect URL</div>
|
|
473
|
+
<div class="tooltip-body">
|
|
474
|
+
<img src="/img/redirect-tooltip.png" class="tooltip-image" alt="Redirect URL" onerror="this.style.display='none'">
|
|
475
|
+
<div class="tooltip-text">In the Partition space, go to Integration → Client Application, select your client app, and copy the Redirect URL.</div>
|
|
476
|
+
</div>
|
|
477
|
+
</div>
|
|
478
|
+
|
|
479
|
+
<div id="tooltip-scopePrefix" class="tooltip-content">
|
|
480
|
+
<div class="tooltip-header">Scope Prefix (Leave empty unless shown in Metadata)</div>
|
|
481
|
+
<div class="tooltip-body">
|
|
482
|
+
<img src="/img/scopeprefix-tooltip.png" class="tooltip-image" alt="Scope Prefix" onerror="this.style.display='none'">
|
|
483
|
+
<div class="tooltip-text">In the Partition space, go to Integration → Client Application → Metadata, and copy the API Permission Prefix.</div>
|
|
484
|
+
</div>
|
|
485
|
+
</div>
|
|
486
|
+
|
|
487
|
+
<script src="/config-page.js"></script>
|
|
488
|
+
</body>
|
|
489
|
+
</html>
|
|
490
|
+
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -16,8 +16,8 @@ import { RequestInput } from "../lib/http.js";
|
|
|
16
16
|
export class ServerRoutingHook implements BeforeCreateRequestHook {
|
|
17
17
|
// Operations that need AI Services API
|
|
18
18
|
private readonly aiServicesOperations = new Set([
|
|
19
|
-
"
|
|
20
|
-
"
|
|
19
|
+
"getBestAnswer",
|
|
20
|
+
"retrieveChunks",
|
|
21
21
|
]);
|
|
22
22
|
|
|
23
23
|
beforeCreateRequest(
|
package/src/lib/config.ts
CHANGED
|
@@ -82,8 +82,8 @@ export function serverURLFromOptions(options: SDKOptions): URL | null {
|
|
|
82
82
|
export const SDK_METADATA = {
|
|
83
83
|
language: "typescript",
|
|
84
84
|
openapiDocVersion: "1.0.0",
|
|
85
|
-
sdkVersion: "1.0.
|
|
85
|
+
sdkVersion: "1.0.22",
|
|
86
86
|
genVersion: "2.723.8",
|
|
87
87
|
userAgent:
|
|
88
|
-
"speakeasy-sdk/mcp-typescript 1.0.
|
|
88
|
+
"speakeasy-sdk/mcp-typescript 1.0.22 2.723.8 1.0.0 @egain/egain-mcp-server",
|
|
89
89
|
} as const;
|
package/src/mcp-server/server.ts
CHANGED
|
@@ -34,7 +34,7 @@ export function createMCPServer(deps: {
|
|
|
34
34
|
}) {
|
|
35
35
|
const server = new McpServer({
|
|
36
36
|
name: "EgainMcp",
|
|
37
|
-
version: "1.0.
|
|
37
|
+
version: "1.0.22",
|
|
38
38
|
});
|
|
39
39
|
|
|
40
40
|
const getClient = deps.getSDK || (() =>
|
|
@@ -78,14 +78,14 @@ export function createMCPServer(deps: {
|
|
|
78
78
|
const register = { tool, resource, resourceTemplate, prompt };
|
|
79
79
|
void register; // suppress unused warnings
|
|
80
80
|
|
|
81
|
+
tool(tool$queryRetrieve);
|
|
82
|
+
tool(tool$queryAnswers);
|
|
81
83
|
tool(tool$getArticle);
|
|
82
84
|
tool(tool$getAnnouncements);
|
|
83
85
|
tool(tool$getPopularArticles);
|
|
84
86
|
tool(tool$getPortals);
|
|
85
|
-
tool(tool$makeSuggestion);
|
|
86
|
-
tool(tool$queryAnswers);
|
|
87
87
|
tool(tool$querySearch);
|
|
88
|
-
tool(tool$
|
|
88
|
+
tool(tool$makeSuggestion);
|
|
89
89
|
|
|
90
90
|
return server;
|
|
91
91
|
}
|
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import { queryAnswers } from "../../funcs/queryAnswers.js";
|
|
6
|
-
import {
|
|
6
|
+
import { GetBestAnswerRequest$zodSchema } from "../../models/getbestanswerop.js";
|
|
7
7
|
import { formatResult, ToolDefinition } from "../tools.js";
|
|
8
8
|
|
|
9
9
|
const args = {
|
|
10
|
-
request:
|
|
10
|
+
request: GetBestAnswerRequest$zodSchema,
|
|
11
11
|
};
|
|
12
12
|
|
|
13
13
|
export const tool$queryAnswers: ToolDefinition<typeof args> = {
|
|
14
14
|
name: "query-answers",
|
|
15
|
-
description: `
|
|
15
|
+
description: `Generate an Answer
|
|
16
16
|
|
|
17
17
|
Get Answers
|
|
18
18
|
|
|
@@ -24,6 +24,10 @@ Get Answers
|
|
|
24
24
|
The Answers API enables users to get the best answer for a user query. This API can return certified answers or generative answers along with search results, providing users with comprehensive responses to their questions.
|
|
25
25
|
|
|
26
26
|
The API leverages AI capabilities to provide intelligent answers based on the knowledge base content, making it easier for users to find the information they need quickly and accurately.
|
|
27
|
+
|
|
28
|
+
## Request Body Notes
|
|
29
|
+
- **channel field**: Optional. **Recommended to omit** unless specifically needed. The API works reliably without it. If you receive a 400 Bad Request error when including channel, retry the request without the channel field.
|
|
30
|
+
- **Required fields**: eventId and sessionId are required in the request body.
|
|
27
31
|
`,
|
|
28
32
|
annotations: {
|
|
29
33
|
"destructiveHint": false,
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import { queryRetrieve } from "../../funcs/queryRetrieve.js";
|
|
6
|
-
import {
|
|
6
|
+
import { RetrieveChunksRequest$zodSchema } from "../../models/retrievechunksop.js";
|
|
7
7
|
import { formatResult, ToolDefinition } from "../tools.js";
|
|
8
8
|
|
|
9
9
|
const args = {
|
|
10
|
-
request:
|
|
10
|
+
request: RetrieveChunksRequest$zodSchema,
|
|
11
11
|
};
|
|
12
12
|
|
|
13
13
|
export const tool$queryRetrieve: ToolDefinition<typeof args> = {
|
|
@@ -12,7 +12,7 @@ const args = {
|
|
|
12
12
|
|
|
13
13
|
export const tool$querySearch: ToolDefinition<typeof args> = {
|
|
14
14
|
name: "query-search",
|
|
15
|
-
description: `
|
|
15
|
+
description: `Hybrid Search
|
|
16
16
|
|
|
17
17
|
The Search API is a hybrid search service that combines semantic understanding with keyword precision to deliver fast, contextual, and relevant results from your enterprise knowledge base. It enables secure, role-aware access to articles, FAQs, and documentation across customer, agent, and employee interfaces. Each query returns a ranked list of results with snippets, metadata, and relevance scores. <br>**This endpoint is only available for Self Service environments.**
|
|
18
18
|
`,
|
|
@@ -25,7 +25,8 @@ export type AdditionalSnippets = {
|
|
|
25
25
|
docName?: string | undefined;
|
|
26
26
|
snippet: string;
|
|
27
27
|
keywordSnippet?: string | undefined;
|
|
28
|
-
relevanceScore
|
|
28
|
+
relevanceScore?: number | undefined;
|
|
29
|
+
normalizedScore?: number | undefined;
|
|
29
30
|
};
|
|
30
31
|
|
|
31
32
|
export const AdditionalSnippets$zodSchema: z.ZodType<
|
|
@@ -38,6 +39,7 @@ export const AdditionalSnippets$zodSchema: z.ZodType<
|
|
|
38
39
|
id: z.string(),
|
|
39
40
|
keywordSnippet: z.string().optional(),
|
|
40
41
|
name: z.string(),
|
|
41
|
-
|
|
42
|
+
normalizedScore: z.number().optional(),
|
|
43
|
+
relevanceScore: z.number().optional(),
|
|
42
44
|
snippet: z.string(),
|
|
43
45
|
});
|