@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(limit);
180
+ params.push(fetchLimit);
70
181
  const services = db.prepare(query).all(...params);
71
182
  if (services.length === 0)
72
183
  return [];
73
- return services.map((s) => ({
74
- service_id: s.id,
75
- name: s.name,
76
- namespace: s.namespace,
77
- description: s.description,
78
- category: s.category,
79
- mcp_endpoint: s.mcp_endpoint,
80
- trust_score: s.trust_score,
81
- usage_count: s.total_calls ?? 0,
82
- success_rate: s.success_rate ?? null,
83
- relevance_score: Math.round((1 / (1 + Math.abs(s.fts_rank)) + s.trust_score * 0.3) * 100) / 100,
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(limit);
234
+ params.push(fetchLimit);
113
235
  const services = db.prepare(query).all(...params);
114
- return services.map((s) => ({
115
- service_id: s.id,
116
- name: s.name,
117
- namespace: s.namespace,
118
- description: s.description,
119
- category: s.category,
120
- mcp_endpoint: s.mcp_endpoint,
121
- trust_score: s.trust_score,
122
- usage_count: s.total_calls ?? 0,
123
- success_rate: s.success_rate ?? null,
124
- relevance_score: s.trust_score,
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":"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"}
1
+ {"version":3,"file":"search-services.js","sourceRoot":"","sources":["../../src/tools/search-services.ts"],"names":[],"mappings":"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"}
@@ -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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kansei-link/mcp-server",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "MCP intelligence layer for discovering and orchestrating Japanese SaaS MCP tools",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",