@kansei-link/mcp-server 0.1.0 → 0.1.1
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.
|
@@ -33,16 +33,125 @@ export function register(server, db) {
|
|
|
33
33
|
};
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
// Intent-to-category mapping layer
|
|
38
|
+
// Maps keyword signals found in a user intent to the most likely service
|
|
39
|
+
// categories. When a service's category matches the detected intent category,
|
|
40
|
+
// it receives a relevance boost so that, e.g., "send invoice" ranks freee
|
|
41
|
+
// (accounting) above Chatwork (communication) even though "send" matches both.
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
const INTENT_CATEGORY_MAP = {
|
|
44
|
+
// Accounting / finance
|
|
45
|
+
invoice: ["accounting"],
|
|
46
|
+
invoicing: ["accounting"],
|
|
47
|
+
billing: ["accounting"],
|
|
48
|
+
receipt: ["accounting"],
|
|
49
|
+
expense: ["accounting"],
|
|
50
|
+
expenses: ["accounting"],
|
|
51
|
+
tax: ["accounting"],
|
|
52
|
+
taxes: ["accounting"],
|
|
53
|
+
bookkeeping: ["accounting"],
|
|
54
|
+
accounting: ["accounting"],
|
|
55
|
+
payment: ["accounting"],
|
|
56
|
+
payments: ["accounting"],
|
|
57
|
+
payroll: ["accounting", "hr"],
|
|
58
|
+
salary: ["accounting", "hr"],
|
|
59
|
+
ledger: ["accounting"],
|
|
60
|
+
journal: ["accounting"],
|
|
61
|
+
revenue: ["accounting"],
|
|
62
|
+
profit: ["accounting"],
|
|
63
|
+
refund: ["accounting"],
|
|
64
|
+
reimbursement: ["accounting"],
|
|
65
|
+
// HR
|
|
66
|
+
employee: ["hr"],
|
|
67
|
+
employees: ["hr"],
|
|
68
|
+
attendance: ["hr"],
|
|
69
|
+
leave: ["hr"],
|
|
70
|
+
hiring: ["hr"],
|
|
71
|
+
recruit: ["hr"],
|
|
72
|
+
recruitment: ["hr"],
|
|
73
|
+
onboarding: ["hr"],
|
|
74
|
+
talent: ["hr"],
|
|
75
|
+
hr: ["hr"],
|
|
76
|
+
workforce: ["hr"],
|
|
77
|
+
shift: ["hr"],
|
|
78
|
+
timecard: ["hr"],
|
|
79
|
+
// Communication / messaging
|
|
80
|
+
message: ["communication"],
|
|
81
|
+
messages: ["communication"],
|
|
82
|
+
chat: ["communication"],
|
|
83
|
+
messaging: ["communication"],
|
|
84
|
+
notify: ["communication"],
|
|
85
|
+
notification: ["communication"],
|
|
86
|
+
call: ["communication"],
|
|
87
|
+
meeting: ["communication"],
|
|
88
|
+
video: ["communication"],
|
|
89
|
+
// CRM
|
|
90
|
+
lead: ["crm"],
|
|
91
|
+
leads: ["crm"],
|
|
92
|
+
customer: ["crm"],
|
|
93
|
+
customers: ["crm"],
|
|
94
|
+
deal: ["crm"],
|
|
95
|
+
deals: ["crm"],
|
|
96
|
+
pipeline: ["crm"],
|
|
97
|
+
contact: ["crm"],
|
|
98
|
+
contacts: ["crm"],
|
|
99
|
+
prospect: ["crm"],
|
|
100
|
+
sales: ["crm"],
|
|
101
|
+
crm: ["crm"],
|
|
102
|
+
// Project management
|
|
103
|
+
task: ["project_management"],
|
|
104
|
+
tasks: ["project_management"],
|
|
105
|
+
project: ["project_management"],
|
|
106
|
+
projects: ["project_management"],
|
|
107
|
+
sprint: ["project_management"],
|
|
108
|
+
board: ["project_management"],
|
|
109
|
+
kanban: ["project_management"],
|
|
110
|
+
ticket: ["project_management"],
|
|
111
|
+
backlog: ["project_management"],
|
|
112
|
+
milestone: ["project_management"],
|
|
113
|
+
// E-commerce
|
|
114
|
+
product: ["ecommerce"],
|
|
115
|
+
products: ["ecommerce"],
|
|
116
|
+
order: ["ecommerce"],
|
|
117
|
+
orders: ["ecommerce"],
|
|
118
|
+
shipping: ["ecommerce"],
|
|
119
|
+
inventory: ["ecommerce"],
|
|
120
|
+
cart: ["ecommerce"],
|
|
121
|
+
store: ["ecommerce"],
|
|
122
|
+
shop: ["ecommerce"],
|
|
123
|
+
catalog: ["ecommerce"],
|
|
124
|
+
};
|
|
125
|
+
/** Category boost added to relevance_score when service category matches intent */
|
|
126
|
+
const CATEGORY_BOOST = 0.3;
|
|
127
|
+
/**
|
|
128
|
+
* Detect likely categories from an intent string by scanning for keyword
|
|
129
|
+
* signals. Returns a Set of category names (may be empty).
|
|
130
|
+
*/
|
|
131
|
+
function detectIntentCategories(intent) {
|
|
132
|
+
const categories = new Set();
|
|
133
|
+
const lower = intent.toLowerCase();
|
|
134
|
+
const tokens = lower.split(/\s+/);
|
|
135
|
+
for (const token of tokens) {
|
|
136
|
+
const mapped = INTENT_CATEGORY_MAP[token];
|
|
137
|
+
if (mapped) {
|
|
138
|
+
for (const cat of mapped)
|
|
139
|
+
categories.add(cat);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return categories;
|
|
143
|
+
}
|
|
36
144
|
export function searchServices(db, intent, category, limit = 5) {
|
|
145
|
+
const intentCategories = detectIntentCategories(intent);
|
|
37
146
|
// Try FTS5 search first
|
|
38
|
-
let results = ftsSearch(db, intent, category, limit);
|
|
147
|
+
let results = ftsSearch(db, intent, category, limit, intentCategories);
|
|
39
148
|
// Fallback to LIKE search if FTS returns nothing
|
|
40
149
|
if (results.length === 0) {
|
|
41
|
-
results = likeSearch(db, intent, category, limit);
|
|
150
|
+
results = likeSearch(db, intent, category, limit, intentCategories);
|
|
42
151
|
}
|
|
43
152
|
return results;
|
|
44
153
|
}
|
|
45
|
-
function ftsSearch(db, intent, category, limit) {
|
|
154
|
+
function ftsSearch(db, intent, category, limit, intentCategories) {
|
|
46
155
|
// Tokenize intent for FTS query (simple word splitting)
|
|
47
156
|
const tokens = intent
|
|
48
157
|
.split(/\s+/)
|
|
@@ -52,6 +161,8 @@ function ftsSearch(db, intent, category, limit) {
|
|
|
52
161
|
if (!tokens)
|
|
53
162
|
return [];
|
|
54
163
|
try {
|
|
164
|
+
// Fetch more than `limit` so we can re-rank with category boost before trimming
|
|
165
|
+
const fetchLimit = Math.max(limit * 3, 15);
|
|
55
166
|
// Join FTS results back to services table via rowid
|
|
56
167
|
let query = `
|
|
57
168
|
SELECT s.*, ss.total_calls, ss.success_rate, fts.rank as fts_rank
|
|
@@ -66,32 +177,43 @@ function ftsSearch(db, intent, category, limit) {
|
|
|
66
177
|
params.push(category);
|
|
67
178
|
}
|
|
68
179
|
query += ` ORDER BY fts.rank LIMIT ?`;
|
|
69
|
-
params.push(
|
|
180
|
+
params.push(fetchLimit);
|
|
70
181
|
const services = db.prepare(query).all(...params);
|
|
71
182
|
if (services.length === 0)
|
|
72
183
|
return [];
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
184
|
+
// Compute relevance with category boost, then sort descending
|
|
185
|
+
const scored = services.map((s) => {
|
|
186
|
+
const baseScore = 1 / (1 + Math.abs(s.fts_rank)) + s.trust_score * 0.3;
|
|
187
|
+
const categoryBoost = intentCategories.size > 0 && s.category && intentCategories.has(s.category)
|
|
188
|
+
? CATEGORY_BOOST
|
|
189
|
+
: 0;
|
|
190
|
+
return {
|
|
191
|
+
service_id: s.id,
|
|
192
|
+
name: s.name,
|
|
193
|
+
namespace: s.namespace,
|
|
194
|
+
description: s.description,
|
|
195
|
+
category: s.category,
|
|
196
|
+
mcp_endpoint: s.mcp_endpoint,
|
|
197
|
+
trust_score: s.trust_score,
|
|
198
|
+
usage_count: s.total_calls ?? 0,
|
|
199
|
+
success_rate: s.success_rate ?? null,
|
|
200
|
+
relevance_score: Math.round((baseScore + categoryBoost) * 100) / 100,
|
|
201
|
+
};
|
|
202
|
+
});
|
|
203
|
+
scored.sort((a, b) => b.relevance_score - a.relevance_score);
|
|
204
|
+
return scored.slice(0, limit);
|
|
85
205
|
}
|
|
86
206
|
catch {
|
|
87
207
|
// FTS query may fail on certain inputs, fall through to LIKE
|
|
88
208
|
return [];
|
|
89
209
|
}
|
|
90
210
|
}
|
|
91
|
-
function likeSearch(db, intent, category, limit) {
|
|
211
|
+
function likeSearch(db, intent, category, limit, intentCategories) {
|
|
92
212
|
const words = intent.split(/\s+/).filter((t) => t.length > 1);
|
|
93
213
|
if (words.length === 0)
|
|
94
214
|
return [];
|
|
215
|
+
// Fetch more rows so we can re-rank after category boost
|
|
216
|
+
const fetchLimit = Math.max(limit * 3, 15);
|
|
95
217
|
const conditions = words.map(() => `(s.name LIKE ? OR s.description LIKE ? OR s.tags LIKE ?)`);
|
|
96
218
|
const params = [];
|
|
97
219
|
for (const word of words) {
|
|
@@ -109,19 +231,26 @@ function likeSearch(db, intent, category, limit) {
|
|
|
109
231
|
params.push(category);
|
|
110
232
|
}
|
|
111
233
|
query += ` ORDER BY s.trust_score DESC LIMIT ?`;
|
|
112
|
-
params.push(
|
|
234
|
+
params.push(fetchLimit);
|
|
113
235
|
const services = db.prepare(query).all(...params);
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
236
|
+
const scored = services.map((s) => {
|
|
237
|
+
const categoryBoost = intentCategories.size > 0 && s.category && intentCategories.has(s.category)
|
|
238
|
+
? CATEGORY_BOOST
|
|
239
|
+
: 0;
|
|
240
|
+
return {
|
|
241
|
+
service_id: s.id,
|
|
242
|
+
name: s.name,
|
|
243
|
+
namespace: s.namespace,
|
|
244
|
+
description: s.description,
|
|
245
|
+
category: s.category,
|
|
246
|
+
mcp_endpoint: s.mcp_endpoint,
|
|
247
|
+
trust_score: s.trust_score,
|
|
248
|
+
usage_count: s.total_calls ?? 0,
|
|
249
|
+
success_rate: s.success_rate ?? null,
|
|
250
|
+
relevance_score: Math.round((s.trust_score + categoryBoost) * 100) / 100,
|
|
251
|
+
};
|
|
252
|
+
});
|
|
253
|
+
scored.sort((a, b) => b.relevance_score - a.relevance_score);
|
|
254
|
+
return scored.slice(0, limit);
|
|
126
255
|
}
|
|
127
256
|
//# sourceMappingURL=search-services.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-services.js","sourceRoot":"","sources":["../../src/tools/search-services.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAqBxB,MAAM,UAAU,QAAQ,CAAC,MAAiB,EAAE,EAAqB;IAC/D,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,uHAAuH;QACzH,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,CAAC,4FAA4F,CAAC;YACzG,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,uFAAuF,CAAC;YACpG,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,OAAO,CAAC,CAAC,CAAC;iBACV,QAAQ,CAAC,oCAAoC,CAAC;SAClD,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;QACpC,MAAM,OAAO,GAAG,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;QACjE,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;iBACvC;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,EAAqB,EACrB,MAAc,EACd,QAAiB,EACjB,QAAgB,CAAC;IAEjB,wBAAwB;IACxB,IAAI,OAAO,GAAG,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"search-services.js","sourceRoot":"","sources":["../../src/tools/search-services.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/pii-masker.js
CHANGED
|
@@ -1,4 +1,20 @@
|
|
|
1
|
+
const COMMON_SURNAMES = "佐藤|田中|鈴木|高橋|渡辺|伊藤|山本|中村|小林|加藤|吉田|山田|松本|井上|木村|林|清水|山口|阿部|池田|橋本|山下|石川|中島|前田|藤田|小川|岡田|村上|長谷川|近藤|石井|斎藤|坂本|遠藤|藤井|青木|福田|三浦|西村|太田|原|松田|中野|千葉|岩崎|河野|小野|田村|竹内";
|
|
1
2
|
const patterns = [
|
|
3
|
+
// Japanese kanji names with honorific suffix (さん, 様, 氏)
|
|
4
|
+
{
|
|
5
|
+
regex: /[\u4E00-\u9FFF]{2,4}(?:さん|さま|様|氏)/g,
|
|
6
|
+
replacement: "[NAME]",
|
|
7
|
+
},
|
|
8
|
+
// Japanese full name with space: 漢字surname + space + 漢字given name
|
|
9
|
+
{
|
|
10
|
+
regex: /[\u4E00-\u9FFF]{2,3}[\s\u3000][\u4E00-\u9FFF]{1,3}/g,
|
|
11
|
+
replacement: "[NAME]",
|
|
12
|
+
},
|
|
13
|
+
// Common Japanese surnames followed by optional given name characters
|
|
14
|
+
{
|
|
15
|
+
regex: new RegExp(`(?:${COMMON_SURNAMES})[\u4E00-\u9FFF]{1,3}`, "g"),
|
|
16
|
+
replacement: "[NAME]",
|
|
17
|
+
},
|
|
2
18
|
// Email addresses (must be before IP to avoid partial matches)
|
|
3
19
|
{
|
|
4
20
|
regex: /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pii-masker.js","sourceRoot":"","sources":["../../src/utils/pii-masker.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAkD;IAC9D,+DAA+D;IAC/D;QACE,KAAK,EAAE,iDAAiD;QACxD,WAAW,EAAE,SAAS;KACvB;IACD,6EAA6E;IAC7E,EAAE,KAAK,EAAE,qCAAqC,EAAE,WAAW,EAAE,MAAM,EAAE;IACrE,oEAAoE;IACpE,EAAE,KAAK,EAAE,2BAA2B,EAAE,WAAW,EAAE,SAAS,EAAE;IAC9D,mFAAmF;IACnF;QACE,KAAK,EAAE,oDAAoD;QAC3D,WAAW,EAAE,SAAS;KACvB;IACD,sEAAsE;IACtE,EAAE,KAAK,EAAE,mDAAmD,EAAE,WAAW,EAAE,QAAQ,EAAE;CACtF,CAAC;AAEF,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,IAAI,CAAC;IAElB,KAAK,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC9C,4CAA4C;QAC5C,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;QACpB,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;YACrD,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;YACpB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;AAC1C,CAAC"}
|
|
1
|
+
{"version":3,"file":"pii-masker.js","sourceRoot":"","sources":["../../src/utils/pii-masker.ts"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAAG,sJAAsJ,CAAC;AAE/K,MAAM,QAAQ,GAAkD;IAC9D,wDAAwD;IACxD;QACE,KAAK,EAAE,oCAAoC;QAC3C,WAAW,EAAE,QAAQ;KACtB;IACD,kEAAkE;IAClE;QACE,KAAK,EAAE,qDAAqD;QAC5D,WAAW,EAAE,QAAQ;KACtB;IACD,sEAAsE;IACtE;QACE,KAAK,EAAE,IAAI,MAAM,CAAC,MAAM,eAAe,uBAAuB,EAAE,GAAG,CAAC;QACpE,WAAW,EAAE,QAAQ;KACtB;IACD,+DAA+D;IAC/D;QACE,KAAK,EAAE,iDAAiD;QACxD,WAAW,EAAE,SAAS;KACvB;IACD,6EAA6E;IAC7E,EAAE,KAAK,EAAE,qCAAqC,EAAE,WAAW,EAAE,MAAM,EAAE;IACrE,oEAAoE;IACpE,EAAE,KAAK,EAAE,2BAA2B,EAAE,WAAW,EAAE,SAAS,EAAE;IAC9D,mFAAmF;IACnF;QACE,KAAK,EAAE,oDAAoD;QAC3D,WAAW,EAAE,SAAS;KACvB;IACD,sEAAsE;IACtE,EAAE,KAAK,EAAE,mDAAmD,EAAE,WAAW,EAAE,QAAQ,EAAE;CACtF,CAAC;AAEF,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,IAAI,CAAC;IAElB,KAAK,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC9C,4CAA4C;QAC5C,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;QACpB,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;YACrD,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;YACpB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;AAC1C,CAAC"}
|