@bulkpublishing/mcp-server 1.0.3 → 1.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/dist/ai/engine.d.ts +14 -0
- package/dist/ai/engine.d.ts.map +1 -1
- package/dist/ai/engine.js +98 -10
- package/dist/ai/engine.js.map +1 -1
- package/dist/index.js +54 -2
- package/dist/index.js.map +1 -1
- package/dist/tools/generation.d.ts +2 -2
- package/dist/tools/generation.d.ts.map +1 -1
- package/dist/tools/generation.js +190 -14
- package/dist/tools/generation.js.map +1 -1
- package/dist/tools/knowledgebase.d.ts +16 -0
- package/dist/tools/knowledgebase.d.ts.map +1 -0
- package/dist/tools/knowledgebase.js +220 -0
- package/dist/tools/knowledgebase.js.map +1 -0
- package/dist/tools/linking.d.ts +38 -0
- package/dist/tools/linking.d.ts.map +1 -0
- package/dist/tools/linking.js +427 -0
- package/dist/tools/linking.js.map +1 -0
- package/dist/tools/wordpress.d.ts.map +1 -1
- package/dist/tools/wordpress.js +10 -6
- package/dist/tools/wordpress.js.map +1 -1
- package/package.json +1 -1
package/dist/tools/generation.js
CHANGED
|
@@ -2,17 +2,18 @@
|
|
|
2
2
|
* BPAI MCP Server — Content Generation Tools
|
|
3
3
|
*
|
|
4
4
|
* MCP tool handlers for:
|
|
5
|
-
* - generate_article: Single article generation
|
|
6
|
-
* - generate_batch: Bulk generation from keyword list
|
|
5
|
+
* - generate_article: Single article generation (with inline linking overrides)
|
|
6
|
+
* - generate_batch: Bulk generation from keyword list (with cross-linking)
|
|
7
7
|
* - list_models: List all available AI models
|
|
8
8
|
*
|
|
9
9
|
* API keys are loaded from the authenticated user's BPAI account.
|
|
10
10
|
* No inline key parameters needed.
|
|
11
11
|
*/
|
|
12
12
|
import { z } from 'zod';
|
|
13
|
-
import { generateContent, listModels } from '../ai/engine.js';
|
|
13
|
+
import { generateContent, generateContentWithRetry, listModels } from '../ai/engine.js';
|
|
14
14
|
import { buildGenerationPrompt, HUMANIZE_PROMPT } from '../ai/prompts.js';
|
|
15
15
|
import { getUserContext, getApiKey, getKnowledgeBaseContext, getProjectSettings } from '../auth/context.js';
|
|
16
|
+
import { fetchAllSitemapUrls, detectPermalinkPattern } from './linking.js';
|
|
16
17
|
export function registerGenerationTools(server) {
|
|
17
18
|
// ============================================
|
|
18
19
|
// generate_article
|
|
@@ -29,6 +30,8 @@ export function registerGenerationTools(server) {
|
|
|
29
30
|
include_knowledge_base: z.boolean().optional().default(true).describe('Include project knowledge base context'),
|
|
30
31
|
internal_linking: z.boolean().optional().default(true).describe('Apply internal linking from project settings'),
|
|
31
32
|
max_internal_links: z.number().optional().default(5).describe('Max internal links to include (1-10)'),
|
|
33
|
+
sitemap_url: z.string().optional().describe('Inline override: fetch this sitemap URL for link candidates instead of using project settings. Useful when project settings are not pre-configured.'),
|
|
34
|
+
link_candidates: z.array(z.string()).optional().describe('Inline override: provide a direct list of URLs for internal linking. Takes priority over sitemap_url and project settings.'),
|
|
32
35
|
project_id: z.string().optional().describe('Project ID (defaults to active project)'),
|
|
33
36
|
}, async (args) => {
|
|
34
37
|
const ctx = getUserContext();
|
|
@@ -59,10 +62,28 @@ export function registerGenerationTools(server) {
|
|
|
59
62
|
// Load project-level context
|
|
60
63
|
const project = getProjectSettings(args.project_id);
|
|
61
64
|
const kbContext = args.include_knowledge_base ? getKnowledgeBaseContext(args.project_id) : undefined;
|
|
62
|
-
// Resolve internal linking URLs
|
|
65
|
+
// Resolve internal linking URLs with priority chain:
|
|
66
|
+
// 1. link_candidates (inline array) > 2. sitemap_url (inline fetch) > 3. project settings
|
|
63
67
|
let internalLinkUrls;
|
|
64
|
-
if (args.internal_linking
|
|
65
|
-
|
|
68
|
+
if (args.internal_linking) {
|
|
69
|
+
if (args.link_candidates && args.link_candidates.length > 0) {
|
|
70
|
+
// Priority 1: Direct URL list provided inline
|
|
71
|
+
internalLinkUrls = args.link_candidates;
|
|
72
|
+
}
|
|
73
|
+
else if (args.sitemap_url) {
|
|
74
|
+
// Priority 2: Fetch sitemap on-the-fly
|
|
75
|
+
try {
|
|
76
|
+
const rawUrls = await fetchAllSitemapUrls(args.sitemap_url);
|
|
77
|
+
internalLinkUrls = [...new Set(rawUrls)];
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
console.error(`[Generation] Sitemap fetch failed: ${err.message}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else if (project?.settings?.internal_linking?.enabled) {
|
|
84
|
+
// Priority 3: Use pre-saved project settings
|
|
85
|
+
internalLinkUrls = project.settings.internal_linking.sitemapUrls;
|
|
86
|
+
}
|
|
66
87
|
}
|
|
67
88
|
// Build prompts
|
|
68
89
|
const { systemPrompt, userPrompt } = buildGenerationPrompt({
|
|
@@ -145,9 +166,9 @@ export function registerGenerationTools(server) {
|
|
|
145
166
|
};
|
|
146
167
|
});
|
|
147
168
|
// ============================================
|
|
148
|
-
// generate_batch
|
|
169
|
+
// generate_batch (with cross-linking support)
|
|
149
170
|
// ============================================
|
|
150
|
-
server.tool('generate_batch', 'Generate multiple articles from a list of keywords. Processes sequentially with progress reporting.
|
|
171
|
+
server.tool('generate_batch', 'Generate multiple articles from a list of keywords. Processes sequentially with progress reporting. Supports internal linking (from project settings, inline sitemap, or inline URLs) and cross-linking (interlinking articles within this batch using predicted URLs).', {
|
|
151
172
|
keywords: z.array(z.string()).describe('Array of keywords to generate articles for'),
|
|
152
173
|
provider: z.enum(['openai', 'claude', 'deepseek', 'grok', 'gemini', 'perplexity', 'kimi']).default('openai'),
|
|
153
174
|
model: z.string().optional().describe('Model ID to use for all articles'),
|
|
@@ -158,6 +179,13 @@ export function registerGenerationTools(server) {
|
|
|
158
179
|
include_knowledge_base: z.boolean().optional().default(true),
|
|
159
180
|
internal_linking: z.boolean().optional().default(true),
|
|
160
181
|
max_internal_links: z.number().optional().default(5),
|
|
182
|
+
sitemap_url: z.string().optional().describe('Inline override: fetch this sitemap URL for internal link candidates'),
|
|
183
|
+
link_candidates: z.array(z.string()).optional().describe('Inline override: direct list of URLs for internal linking'),
|
|
184
|
+
cross_linking: z.boolean().optional().default(true).describe('Enable cross-linking between articles in this batch (builds predicted URLs from keywords)'),
|
|
185
|
+
cross_linking_base_url: z.string().optional().describe('Base URL for cross-link slug assembly (e.g., https://example.com/blog). Falls back to project cross_linking.baseUrl, then auto-detects from sitemap URL analysis.'),
|
|
186
|
+
max_cross_links: z.number().optional().default(3).describe('Max cross-links (sibling article links) per article (1-10)'),
|
|
187
|
+
keyword_slugs: z.record(z.string(), z.string()).optional().describe('Explicit keyword→slug mapping for cross-linking (e.g., {"best coffee makers": "best-coffee-makers-2026"}). Overrides auto-slugify for specific keywords.'),
|
|
188
|
+
delay_between_articles: z.number().optional().default(5).describe('Seconds to wait between article generations to prevent rate limit crashes (1-60, default: 5)'),
|
|
161
189
|
project_id: z.string().optional().describe('Project ID (defaults to active project)'),
|
|
162
190
|
}, async (args) => {
|
|
163
191
|
const ctx = getUserContext();
|
|
@@ -183,24 +211,132 @@ export function registerGenerationTools(server) {
|
|
|
183
211
|
}],
|
|
184
212
|
};
|
|
185
213
|
}
|
|
214
|
+
// ── Resolve internal linking URLs (same priority chain as generate_article) ──
|
|
215
|
+
const project = getProjectSettings(args.project_id);
|
|
216
|
+
let internalLinkUrls;
|
|
217
|
+
if (args.internal_linking) {
|
|
218
|
+
if (args.link_candidates && args.link_candidates.length > 0) {
|
|
219
|
+
internalLinkUrls = args.link_candidates;
|
|
220
|
+
}
|
|
221
|
+
else if (args.sitemap_url) {
|
|
222
|
+
try {
|
|
223
|
+
const rawUrls = await fetchAllSitemapUrls(args.sitemap_url);
|
|
224
|
+
internalLinkUrls = [...new Set(rawUrls)];
|
|
225
|
+
}
|
|
226
|
+
catch (err) {
|
|
227
|
+
console.error(`[Batch] Sitemap fetch failed: ${err.message}`);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
else if (project?.settings?.internal_linking?.enabled) {
|
|
231
|
+
internalLinkUrls = project.settings.internal_linking.sitemapUrls;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// ── Build cross-linking predicted URLs ──
|
|
235
|
+
let crossLinkBaseUrl = '';
|
|
236
|
+
const crossLinkingEnabled = args.cross_linking && args.keywords.length > 1;
|
|
237
|
+
let detectedPattern;
|
|
238
|
+
if (crossLinkingEnabled) {
|
|
239
|
+
// Priority: inline param > project settings > auto-detect from sitemap URL analysis
|
|
240
|
+
crossLinkBaseUrl = args.cross_linking_base_url
|
|
241
|
+
|| project?.settings?.cross_linking?.baseUrl
|
|
242
|
+
|| '';
|
|
243
|
+
// Smart auto-detection from sitemap URL pool
|
|
244
|
+
if (!crossLinkBaseUrl && internalLinkUrls && internalLinkUrls.length > 0) {
|
|
245
|
+
detectedPattern = detectPermalinkPattern(internalLinkUrls);
|
|
246
|
+
try {
|
|
247
|
+
const origin = new URL(internalLinkUrls[0]).origin;
|
|
248
|
+
const basePath = detectedPattern.basePath === '/' ? '' : detectedPattern.basePath;
|
|
249
|
+
crossLinkBaseUrl = `${origin}${basePath}`;
|
|
250
|
+
}
|
|
251
|
+
catch { /* ignore */ }
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
// Build predicted sibling URLs for cross-linking
|
|
255
|
+
const siblingUrls = [];
|
|
256
|
+
if (crossLinkingEnabled && crossLinkBaseUrl) {
|
|
257
|
+
for (const kw of args.keywords) {
|
|
258
|
+
// Use explicit slug mapping if provided, otherwise auto-slugify
|
|
259
|
+
const slug = args.keyword_slugs?.[kw] || slugify(kw);
|
|
260
|
+
const predictedUrl = `${crossLinkBaseUrl.replace(/\/$/, '')}/${slug}`;
|
|
261
|
+
siblingUrls.push({ keyword: kw, predictedUrl });
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
const maxCrossLinks = Math.min(Math.max(args.max_cross_links || 3, 1), 10);
|
|
265
|
+
const delayBetweenMs = Math.min(Math.max((args.delay_between_articles || 5), 1), 60) * 1000;
|
|
186
266
|
const results = [];
|
|
187
267
|
let completed = 0;
|
|
188
268
|
let failed = 0;
|
|
269
|
+
let consecutiveFailures = 0;
|
|
270
|
+
const MAX_CONSECUTIVE_FAILURES = 5; // Circuit breaker: stop if 5 in a row fail
|
|
271
|
+
// Safety: cap batch size to prevent multi-hour sessions that exhaust memory
|
|
272
|
+
const MAX_BATCH_SIZE = 100;
|
|
273
|
+
if (args.keywords.length > MAX_BATCH_SIZE) {
|
|
274
|
+
return {
|
|
275
|
+
content: [{
|
|
276
|
+
type: 'text', text: JSON.stringify({
|
|
277
|
+
error: `Batch too large: ${args.keywords.length} keywords exceeds the maximum of ${MAX_BATCH_SIZE}. Split into smaller batches to prevent memory exhaustion and rate limiting. Each batch gets a fresh process lifecycle.`,
|
|
278
|
+
suggestion: `Split your ${args.keywords.length} keywords into ${Math.ceil(args.keywords.length / MAX_BATCH_SIZE)} batches of ~${MAX_BATCH_SIZE} each.`,
|
|
279
|
+
}, null, 2)
|
|
280
|
+
}],
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
console.error(`[Batch] Starting ${args.keywords.length} articles | Provider: ${provider} | Delay: ${delayBetweenMs / 1000}s | Cross-linking: ${crossLinkingEnabled}`);
|
|
284
|
+
const batchStartTime = Date.now();
|
|
189
285
|
for (let i = 0; i < args.keywords.length; i++) {
|
|
190
286
|
const keyword = args.keywords[i];
|
|
287
|
+
// Circuit breaker: stop if too many consecutive failures
|
|
288
|
+
if (consecutiveFailures >= MAX_CONSECUTIVE_FAILURES) {
|
|
289
|
+
console.error(`[Batch] 🛑 Circuit breaker tripped: ${MAX_CONSECUTIVE_FAILURES} consecutive failures. Stopping batch.`);
|
|
290
|
+
// Mark remaining keywords as skipped
|
|
291
|
+
for (let j = i; j < args.keywords.length; j++) {
|
|
292
|
+
results.push({
|
|
293
|
+
keyword: args.keywords[j],
|
|
294
|
+
status: 'skipped',
|
|
295
|
+
error: `Skipped due to circuit breaker: ${MAX_CONSECUTIVE_FAILURES} consecutive failures detected. The upstream provider may be rate limiting or down.`,
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
break;
|
|
299
|
+
}
|
|
191
300
|
try {
|
|
192
|
-
|
|
301
|
+
// Progress logging
|
|
302
|
+
const elapsed = Date.now() - batchStartTime;
|
|
303
|
+
const avgPerArticle = completed > 0 ? elapsed / completed : 0;
|
|
304
|
+
const remaining = args.keywords.length - i;
|
|
305
|
+
const etaMin = avgPerArticle > 0 ? ((remaining * avgPerArticle) / 60000).toFixed(1) : '?';
|
|
306
|
+
console.error(`[Batch] 📝 Article ${i + 1}/${args.keywords.length}: "${keyword.substring(0, 50)}" | Done: ${completed} | Failed: ${failed} | ETA: ${etaMin}min`);
|
|
307
|
+
// Memory check every 10 articles
|
|
308
|
+
if (i > 0 && i % 10 === 0) {
|
|
309
|
+
const mem = process.memoryUsage();
|
|
310
|
+
const heapMB = (mem.heapUsed / 1024 / 1024).toFixed(1);
|
|
311
|
+
console.error(`[Batch] 📊 Memory checkpoint: ${heapMB}MB heap used after ${i} articles`);
|
|
312
|
+
// Force garbage collection hint if available
|
|
313
|
+
if (global.gc) {
|
|
314
|
+
global.gc();
|
|
315
|
+
console.error(`[Batch] 🧹 Manual GC triggered`);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
193
318
|
const kbContext = args.include_knowledge_base ? getKnowledgeBaseContext(args.project_id) : undefined;
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
319
|
+
// Merge internal link URLs with shuffled cross-link siblings
|
|
320
|
+
let mergedLinkUrls = internalLinkUrls ? [...internalLinkUrls] : [];
|
|
321
|
+
if (crossLinkingEnabled && siblingUrls.length > 0) {
|
|
322
|
+
// Get siblings (excluding self)
|
|
323
|
+
const siblings = siblingUrls
|
|
324
|
+
.filter(s => s.keyword !== keyword)
|
|
325
|
+
.map(s => s.predictedUrl);
|
|
326
|
+
// Shuffle siblings for variety
|
|
327
|
+
for (let si = siblings.length - 1; si > 0; si--) {
|
|
328
|
+
const sj = Math.floor(Math.random() * (si + 1));
|
|
329
|
+
[siblings[si], siblings[sj]] = [siblings[sj], siblings[si]];
|
|
330
|
+
}
|
|
331
|
+
// Prepend cross-links to the URL pool (they get priority)
|
|
332
|
+
mergedLinkUrls = [...siblings.slice(0, maxCrossLinks), ...mergedLinkUrls];
|
|
197
333
|
}
|
|
198
334
|
const { systemPrompt, userPrompt } = buildGenerationPrompt({
|
|
199
335
|
keyword,
|
|
200
336
|
wordCount: args.word_count,
|
|
201
337
|
tone: args.tone,
|
|
202
338
|
knowledgeBaseContext: kbContext,
|
|
203
|
-
internalLinkUrls,
|
|
339
|
+
internalLinkUrls: mergedLinkUrls.length > 0 ? mergedLinkUrls : undefined,
|
|
204
340
|
maxInternalLinks: args.max_internal_links,
|
|
205
341
|
openerSeedIndex: i,
|
|
206
342
|
});
|
|
@@ -209,18 +345,26 @@ export function registerGenerationTools(server) {
|
|
|
209
345
|
temperature: args.temperature ?? 0.7,
|
|
210
346
|
maxTokens: Math.min((args.word_count || 2500) * 3, 65536),
|
|
211
347
|
};
|
|
212
|
-
|
|
348
|
+
// Use retry wrapper for resilience against transient failures
|
|
349
|
+
const result = await generateContentWithRetry({
|
|
213
350
|
provider,
|
|
214
351
|
systemPrompt,
|
|
215
352
|
userPrompt,
|
|
216
353
|
settings,
|
|
217
354
|
}, keys);
|
|
355
|
+
// Increment the global generation counter (for health monitoring)
|
|
356
|
+
try {
|
|
357
|
+
globalThis.__bpaiGenerationCount?.increment();
|
|
358
|
+
}
|
|
359
|
+
catch { /* ignore */ }
|
|
218
360
|
if (result.error) {
|
|
219
361
|
failed++;
|
|
362
|
+
consecutiveFailures++;
|
|
220
363
|
results.push({ keyword, status: 'failed', error: result.error });
|
|
221
364
|
}
|
|
222
365
|
else {
|
|
223
366
|
completed++;
|
|
367
|
+
consecutiveFailures = 0; // Reset on success
|
|
224
368
|
let text = result.text;
|
|
225
369
|
// Extract title
|
|
226
370
|
let title = keyword;
|
|
@@ -238,9 +382,17 @@ export function registerGenerationTools(server) {
|
|
|
238
382
|
}
|
|
239
383
|
catch (err) {
|
|
240
384
|
failed++;
|
|
385
|
+
consecutiveFailures++;
|
|
241
386
|
results.push({ keyword, status: 'failed', error: err.message });
|
|
242
387
|
}
|
|
388
|
+
// Inter-article delay to prevent rate limit cascading
|
|
389
|
+
if (i < args.keywords.length - 1) {
|
|
390
|
+
console.error(`[Batch] ⏳ Cooling down ${delayBetweenMs / 1000}s before next article...`);
|
|
391
|
+
await new Promise(r => setTimeout(r, delayBetweenMs));
|
|
392
|
+
}
|
|
243
393
|
}
|
|
394
|
+
const totalElapsed = ((Date.now() - batchStartTime) / 60000).toFixed(1);
|
|
395
|
+
console.error(`[Batch] ✅ Batch complete: ${completed} succeeded, ${failed} failed in ${totalElapsed} minutes`);
|
|
244
396
|
return {
|
|
245
397
|
content: [{
|
|
246
398
|
type: 'text', text: JSON.stringify({
|
|
@@ -248,8 +400,19 @@ export function registerGenerationTools(server) {
|
|
|
248
400
|
total: args.keywords.length,
|
|
249
401
|
completed,
|
|
250
402
|
failed,
|
|
403
|
+
skipped: results.filter(r => r.status === 'skipped').length,
|
|
404
|
+
elapsed_minutes: parseFloat(totalElapsed),
|
|
251
405
|
provider,
|
|
252
406
|
model: args.model || getDefaultModel(provider),
|
|
407
|
+
delay_between_articles_seconds: delayBetweenMs / 1000,
|
|
408
|
+
internal_linking_urls: internalLinkUrls?.length || 0,
|
|
409
|
+
cross_linking: crossLinkingEnabled ? {
|
|
410
|
+
enabled: true,
|
|
411
|
+
base_url: crossLinkBaseUrl,
|
|
412
|
+
sibling_count: siblingUrls.length,
|
|
413
|
+
max_per_article: maxCrossLinks,
|
|
414
|
+
detected_pattern: detectedPattern || undefined,
|
|
415
|
+
} : { enabled: false },
|
|
253
416
|
results,
|
|
254
417
|
}, null, 2)
|
|
255
418
|
}],
|
|
@@ -288,4 +451,17 @@ function getDefaultModel(provider) {
|
|
|
288
451
|
};
|
|
289
452
|
return defaults[provider] || 'gpt-5.2';
|
|
290
453
|
}
|
|
454
|
+
/**
|
|
455
|
+
* Convert a keyword/title into a URL-safe slug.
|
|
456
|
+
* Matches the typical WordPress/blog slug behavior.
|
|
457
|
+
*/
|
|
458
|
+
function slugify(text) {
|
|
459
|
+
return text
|
|
460
|
+
.toLowerCase()
|
|
461
|
+
.trim()
|
|
462
|
+
.replace(/[^\w\s-]/g, '') // Remove non-word chars (except spaces and hyphens)
|
|
463
|
+
.replace(/\s+/g, '-') // Spaces to hyphens
|
|
464
|
+
.replace(/-+/g, '-') // Collapse multiple hyphens
|
|
465
|
+
.replace(/^-+|-+$/g, ''); // Trim leading/trailing hyphens
|
|
466
|
+
}
|
|
291
467
|
//# sourceMappingURL=generation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generation.js","sourceRoot":"","sources":["../../src/tools/generation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"generation.js","sourceRoot":"","sources":["../../src/tools/generation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BPAI MCP Server — Knowledge Base Management Tools
|
|
3
|
+
*
|
|
4
|
+
* MCP tool handlers for:
|
|
5
|
+
* - list_knowledge_base: List KB items for a project
|
|
6
|
+
* - add_knowledge_base: Add a new KB item
|
|
7
|
+
* - update_knowledge_base: Update an existing item
|
|
8
|
+
* - delete_knowledge_base: Remove an item
|
|
9
|
+
*
|
|
10
|
+
* All operations call the /api/mcp-kb edge function with the user's
|
|
11
|
+
* MCP token for authentication. Changes sync into the local context
|
|
12
|
+
* so subsequent generations use the updated KB immediately.
|
|
13
|
+
*/
|
|
14
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
15
|
+
export declare function registerKnowledgeBaseTools(server: McpServer): void;
|
|
16
|
+
//# sourceMappingURL=knowledgebase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledgebase.d.ts","sourceRoot":"","sources":["../../src/tools/knowledgebase.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA8BzE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,QAiN3D"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BPAI MCP Server — Knowledge Base Management Tools
|
|
3
|
+
*
|
|
4
|
+
* MCP tool handlers for:
|
|
5
|
+
* - list_knowledge_base: List KB items for a project
|
|
6
|
+
* - add_knowledge_base: Add a new KB item
|
|
7
|
+
* - update_knowledge_base: Update an existing item
|
|
8
|
+
* - delete_knowledge_base: Remove an item
|
|
9
|
+
*
|
|
10
|
+
* All operations call the /api/mcp-kb edge function with the user's
|
|
11
|
+
* MCP token for authentication. Changes sync into the local context
|
|
12
|
+
* so subsequent generations use the updated KB immediately.
|
|
13
|
+
*/
|
|
14
|
+
import { z } from 'zod';
|
|
15
|
+
import { getUserContext } from '../auth/context.js';
|
|
16
|
+
const KB_ENDPOINT = process.env.BPAI_KB_URL || 'https://bulkpublishing.ai/api/mcp-kb';
|
|
17
|
+
/**
|
|
18
|
+
* Make an authenticated request to the KB edge function.
|
|
19
|
+
*/
|
|
20
|
+
async function kbRequest(action, body = {}) {
|
|
21
|
+
const apiKey = process.env.BPAI_API_KEY;
|
|
22
|
+
if (!apiKey)
|
|
23
|
+
throw new Error('BPAI_API_KEY not set');
|
|
24
|
+
const response = await fetch(KB_ENDPOINT, {
|
|
25
|
+
method: 'POST',
|
|
26
|
+
headers: {
|
|
27
|
+
'Content-Type': 'application/json',
|
|
28
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
29
|
+
},
|
|
30
|
+
body: JSON.stringify({ action, ...body }),
|
|
31
|
+
});
|
|
32
|
+
const data = await response.json();
|
|
33
|
+
if (!response.ok) {
|
|
34
|
+
throw new Error(data.error || `KB API error (${response.status})`);
|
|
35
|
+
}
|
|
36
|
+
return data;
|
|
37
|
+
}
|
|
38
|
+
export function registerKnowledgeBaseTools(server) {
|
|
39
|
+
// ============================================
|
|
40
|
+
// list_knowledge_base
|
|
41
|
+
// ============================================
|
|
42
|
+
server.tool('list_knowledge_base', 'List all knowledge base items. Shows titles, content previews, and whether each item is global or project-specific. Knowledge base items are injected into every AI generation prompt to ensure brand consistency.', {
|
|
43
|
+
project_id: z.string().optional().describe('Filter by project ID (defaults to active project). Pass "all" to see every item.'),
|
|
44
|
+
full_content: z.boolean().optional().default(false).describe('Show full content instead of previews'),
|
|
45
|
+
}, async (args) => {
|
|
46
|
+
const ctx = getUserContext();
|
|
47
|
+
if (!ctx.authenticated) {
|
|
48
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: 'Not authenticated.' }, null, 2) }] };
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
const projectId = args.project_id === 'all' ? undefined : (args.project_id || ctx.activeProjectId);
|
|
52
|
+
const data = await kbRequest('list', projectId ? { project_id: projectId } : {});
|
|
53
|
+
// Format items for display
|
|
54
|
+
const items = data.items.map((item) => ({
|
|
55
|
+
id: item.id,
|
|
56
|
+
title: item.title,
|
|
57
|
+
content: args.full_content ? item.content : (item.content.substring(0, 200) + (item.content.length > 200 ? '...' : '')),
|
|
58
|
+
scope: item.is_global ? '🌐 Global' : `📁 Project`,
|
|
59
|
+
project_id: item.project_id,
|
|
60
|
+
}));
|
|
61
|
+
return {
|
|
62
|
+
content: [{
|
|
63
|
+
type: 'text', text: JSON.stringify({
|
|
64
|
+
status: 'success',
|
|
65
|
+
total: data.total,
|
|
66
|
+
items,
|
|
67
|
+
}, null, 2)
|
|
68
|
+
}],
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
return {
|
|
73
|
+
content: [{ type: 'text', text: JSON.stringify({ error: error.message }, null, 2) }],
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
// ============================================
|
|
78
|
+
// add_knowledge_base
|
|
79
|
+
// ============================================
|
|
80
|
+
server.tool('add_knowledge_base', 'Add a new knowledge base item. This content will be injected into every AI generation prompt for the specified project (or all projects if global). Use this for brand voice guidelines, product facts, pricing info, style rules, or any persistent context the AI should reference.', {
|
|
81
|
+
title: z.string().describe('Item title (should be descriptive, e.g. "Brand Voice Guidelines" or "Product Pricing 2026")'),
|
|
82
|
+
content: z.string().describe('The knowledge content. Can be any length. Include facts, rules, guidelines, or reference material.'),
|
|
83
|
+
is_global: z.boolean().optional().default(false).describe('If true, this item applies to ALL projects. If false, it only applies to the specified project.'),
|
|
84
|
+
project_id: z.string().optional().describe('Which project this item belongs to (defaults to active project). Ignored if is_global is true.'),
|
|
85
|
+
}, async (args) => {
|
|
86
|
+
const ctx = getUserContext();
|
|
87
|
+
if (!ctx.authenticated) {
|
|
88
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: 'Not authenticated.' }, null, 2) }] };
|
|
89
|
+
}
|
|
90
|
+
const projectId = args.is_global ? null : (args.project_id || ctx.activeProjectId);
|
|
91
|
+
if (!args.is_global && !projectId) {
|
|
92
|
+
return {
|
|
93
|
+
content: [{
|
|
94
|
+
type: 'text', text: JSON.stringify({
|
|
95
|
+
error: 'No project specified. Either set is_global to true, provide a project_id, or switch to a project first.',
|
|
96
|
+
}, null, 2)
|
|
97
|
+
}],
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
const data = await kbRequest('add', {
|
|
102
|
+
title: args.title,
|
|
103
|
+
content: args.content,
|
|
104
|
+
is_global: args.is_global,
|
|
105
|
+
project_id: projectId,
|
|
106
|
+
});
|
|
107
|
+
// Sync into local context so generations use it immediately
|
|
108
|
+
ctx.knowledgeBase.push({
|
|
109
|
+
id: data.item.id,
|
|
110
|
+
title: data.item.title,
|
|
111
|
+
content: data.item.content,
|
|
112
|
+
project_id: data.item.project_id,
|
|
113
|
+
type: 'context',
|
|
114
|
+
});
|
|
115
|
+
return {
|
|
116
|
+
content: [{
|
|
117
|
+
type: 'text', text: JSON.stringify({
|
|
118
|
+
status: 'success',
|
|
119
|
+
message: `Knowledge base item "${args.title}" added successfully.`,
|
|
120
|
+
item: {
|
|
121
|
+
id: data.item.id,
|
|
122
|
+
title: data.item.title,
|
|
123
|
+
scope: data.item.is_global ? '🌐 Global (all projects)' : '📁 Project-specific',
|
|
124
|
+
},
|
|
125
|
+
tip: 'This item will now be included in all content generations for this project.',
|
|
126
|
+
}, null, 2)
|
|
127
|
+
}],
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
return {
|
|
132
|
+
content: [{ type: 'text', text: JSON.stringify({ error: error.message }, null, 2) }],
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
// ============================================
|
|
137
|
+
// update_knowledge_base
|
|
138
|
+
// ============================================
|
|
139
|
+
server.tool('update_knowledge_base', 'Update an existing knowledge base item. You can change the title, content, scope (global vs project-specific), or move it to a different project.', {
|
|
140
|
+
id: z.string().describe('The KB item ID to update (get this from list_knowledge_base)'),
|
|
141
|
+
title: z.string().optional().describe('New title'),
|
|
142
|
+
content: z.string().optional().describe('New content'),
|
|
143
|
+
is_global: z.boolean().optional().describe('Change scope: true = global, false = project-specific'),
|
|
144
|
+
project_id: z.string().optional().describe('Move to a different project'),
|
|
145
|
+
}, async (args) => {
|
|
146
|
+
const ctx = getUserContext();
|
|
147
|
+
if (!ctx.authenticated) {
|
|
148
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: 'Not authenticated.' }, null, 2) }] };
|
|
149
|
+
}
|
|
150
|
+
try {
|
|
151
|
+
const updatePayload = { id: args.id };
|
|
152
|
+
if (args.title !== undefined)
|
|
153
|
+
updatePayload.title = args.title;
|
|
154
|
+
if (args.content !== undefined)
|
|
155
|
+
updatePayload.content = args.content;
|
|
156
|
+
if (args.is_global !== undefined)
|
|
157
|
+
updatePayload.is_global = args.is_global;
|
|
158
|
+
if (args.project_id !== undefined)
|
|
159
|
+
updatePayload.project_id = args.project_id;
|
|
160
|
+
const data = await kbRequest('update', updatePayload);
|
|
161
|
+
// Sync into local context
|
|
162
|
+
const idx = ctx.knowledgeBase.findIndex(kb => kb.id === args.id);
|
|
163
|
+
if (idx !== -1) {
|
|
164
|
+
if (args.title)
|
|
165
|
+
ctx.knowledgeBase[idx].title = args.title;
|
|
166
|
+
if (args.content)
|
|
167
|
+
ctx.knowledgeBase[idx].content = args.content;
|
|
168
|
+
if (args.project_id !== undefined)
|
|
169
|
+
ctx.knowledgeBase[idx].project_id = args.project_id;
|
|
170
|
+
}
|
|
171
|
+
return {
|
|
172
|
+
content: [{
|
|
173
|
+
type: 'text', text: JSON.stringify({
|
|
174
|
+
status: 'success',
|
|
175
|
+
message: `Knowledge base item updated.`,
|
|
176
|
+
item: data.item,
|
|
177
|
+
}, null, 2)
|
|
178
|
+
}],
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
return {
|
|
183
|
+
content: [{ type: 'text', text: JSON.stringify({ error: error.message }, null, 2) }],
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
// ============================================
|
|
188
|
+
// delete_knowledge_base
|
|
189
|
+
// ============================================
|
|
190
|
+
server.tool('delete_knowledge_base', 'Delete a knowledge base item. This is permanent and cannot be undone.', {
|
|
191
|
+
id: z.string().describe('The KB item ID to delete (get this from list_knowledge_base)'),
|
|
192
|
+
}, async (args) => {
|
|
193
|
+
const ctx = getUserContext();
|
|
194
|
+
if (!ctx.authenticated) {
|
|
195
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: 'Not authenticated.' }, null, 2) }] };
|
|
196
|
+
}
|
|
197
|
+
try {
|
|
198
|
+
const data = await kbRequest('delete', { id: args.id });
|
|
199
|
+
// Remove from local context
|
|
200
|
+
const idx = ctx.knowledgeBase.findIndex(kb => kb.id === args.id);
|
|
201
|
+
if (idx !== -1) {
|
|
202
|
+
ctx.knowledgeBase.splice(idx, 1);
|
|
203
|
+
}
|
|
204
|
+
return {
|
|
205
|
+
content: [{
|
|
206
|
+
type: 'text', text: JSON.stringify({
|
|
207
|
+
status: 'success',
|
|
208
|
+
message: `Deleted "${data.deleted.title}" from the knowledge base.`,
|
|
209
|
+
}, null, 2)
|
|
210
|
+
}],
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
return {
|
|
215
|
+
content: [{ type: 'text', text: JSON.stringify({ error: error.message }, null, 2) }],
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=knowledgebase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledgebase.js","sourceRoot":"","sources":["../../src/tools/knowledgebase.ts"],"names":[],"mappings":"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"}
|