@opencx/mcp 1.11.83 → 1.11.85
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/restrictions.spec.d.ts +2 -0
- package/dist/restrictions.spec.d.ts.map +1 -0
- package/dist/restrictions.spec.js +150 -0
- package/dist/restrictions.spec.js.map +1 -0
- package/dist/schema.d.ts +880 -129
- package/dist/schema.d.ts.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +4 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/crawl.d.ts.map +1 -1
- package/dist/tools/crawl.js +29 -0
- package/dist/tools/crawl.js.map +1 -1
- package/dist/tools/knowledgebase.d.ts +4 -0
- package/dist/tools/knowledgebase.d.ts.map +1 -0
- package/dist/tools/knowledgebase.js +86 -0
- package/dist/tools/knowledgebase.js.map +1 -0
- package/dist/tools/resource-usage.d.ts +4 -0
- package/dist/tools/resource-usage.d.ts.map +1 -0
- package/dist/tools/resource-usage.js +80 -0
- package/dist/tools/resource-usage.js.map +1 -0
- package/dist/tools/training.d.ts.map +1 -1
- package/dist/tools/training.js +21 -0
- package/dist/tools/training.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restrictions.spec.d.ts","sourceRoot":"","sources":["../src/restrictions.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
3
|
+
import { InMemoryTransport } from '@modelcontextprotocol/sdk/inMemory.js';
|
|
4
|
+
import { createServer } from './server.js';
|
|
5
|
+
function mockResponse(body, status = 200, statusText = 'OK') {
|
|
6
|
+
const text = typeof body === 'string' ? body : JSON.stringify(body);
|
|
7
|
+
if (status === 204)
|
|
8
|
+
return new Response(null, { status, statusText });
|
|
9
|
+
return new Response(text, { status, statusText });
|
|
10
|
+
}
|
|
11
|
+
function getRequestUrl(call) {
|
|
12
|
+
const arg = call[0];
|
|
13
|
+
if (arg instanceof Request)
|
|
14
|
+
return arg.url;
|
|
15
|
+
return String(arg);
|
|
16
|
+
}
|
|
17
|
+
function getRequestMethod(call) {
|
|
18
|
+
const arg = call[0];
|
|
19
|
+
if (arg instanceof Request)
|
|
20
|
+
return arg.method;
|
|
21
|
+
const opts = call[1];
|
|
22
|
+
return opts.method ?? 'GET';
|
|
23
|
+
}
|
|
24
|
+
async function getRequestBody(call) {
|
|
25
|
+
const arg = call[0];
|
|
26
|
+
if (arg instanceof Request) {
|
|
27
|
+
const text = await arg.clone().text();
|
|
28
|
+
return text ? JSON.parse(text) : undefined;
|
|
29
|
+
}
|
|
30
|
+
const opts = call[1];
|
|
31
|
+
return opts.body ? JSON.parse(opts.body) : undefined;
|
|
32
|
+
}
|
|
33
|
+
describe('data-source restriction tools', () => {
|
|
34
|
+
let client;
|
|
35
|
+
let cleanup;
|
|
36
|
+
let fetchSpy;
|
|
37
|
+
beforeEach(async () => {
|
|
38
|
+
fetchSpy = vi.fn();
|
|
39
|
+
vi.stubGlobal('fetch', fetchSpy);
|
|
40
|
+
const server = createServer('test-api-key', 'https://api.test.com');
|
|
41
|
+
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
|
|
42
|
+
await server.connect(serverTransport);
|
|
43
|
+
client = new Client({ name: 'test-client', version: '1.0.0' });
|
|
44
|
+
await client.connect(clientTransport);
|
|
45
|
+
cleanup = async () => {
|
|
46
|
+
await client.close();
|
|
47
|
+
await server.close();
|
|
48
|
+
};
|
|
49
|
+
});
|
|
50
|
+
afterEach(async () => {
|
|
51
|
+
await cleanup();
|
|
52
|
+
vi.restoreAllMocks();
|
|
53
|
+
});
|
|
54
|
+
it('registers the new restriction tools', async () => {
|
|
55
|
+
const { tools } = await client.listTools();
|
|
56
|
+
const names = tools.map((t) => t.name);
|
|
57
|
+
expect(names).toContain('update_datasource');
|
|
58
|
+
expect(names).toContain('list_knowledgebase_items');
|
|
59
|
+
expect(names).toContain('update_knowledgebase_item');
|
|
60
|
+
expect(names).toContain('set_instruction_restrictions');
|
|
61
|
+
});
|
|
62
|
+
it('update_datasource PATCHes channel restrictions', async () => {
|
|
63
|
+
fetchSpy.mockResolvedValueOnce(mockResponse({ id: 'ds-1', restricted_to_channels: ['web'] }));
|
|
64
|
+
const result = await client.callTool({
|
|
65
|
+
name: 'update_datasource',
|
|
66
|
+
arguments: { id: 'ds-1', restricted_to_channels: ['web', 'email'] },
|
|
67
|
+
});
|
|
68
|
+
const call = fetchSpy.mock.calls[0];
|
|
69
|
+
expect(getRequestUrl(call)).toBe('https://api.test.com/crawl/ds-1');
|
|
70
|
+
expect(getRequestMethod(call)).toBe('PATCH');
|
|
71
|
+
expect(await getRequestBody(call)).toEqual({ restricted_to_channels: ['web', 'email'] });
|
|
72
|
+
expect(result.isError).toBeFalsy();
|
|
73
|
+
});
|
|
74
|
+
it('update_datasource rejects an invalid channel before calling the API', async () => {
|
|
75
|
+
const result = await client.callTool({
|
|
76
|
+
name: 'update_datasource',
|
|
77
|
+
arguments: { id: 'ds-1', restricted_to_channels: ['not_a_channel'] },
|
|
78
|
+
});
|
|
79
|
+
expect(result.isError).toBe(true);
|
|
80
|
+
expect(fetchSpy).not.toHaveBeenCalled();
|
|
81
|
+
});
|
|
82
|
+
it('list_knowledgebase_items GETs with filters', async () => {
|
|
83
|
+
fetchSpy.mockResolvedValueOnce(mockResponse({ items: [], pagination: {} }));
|
|
84
|
+
await client.callTool({
|
|
85
|
+
name: 'list_knowledgebase_items',
|
|
86
|
+
arguments: { data_source: 'website', search: 'returns', limit: '50' },
|
|
87
|
+
});
|
|
88
|
+
const call = fetchSpy.mock.calls[0];
|
|
89
|
+
const url = getRequestUrl(call);
|
|
90
|
+
expect(url).toContain('https://api.test.com/knowledgebase-items');
|
|
91
|
+
expect(url).toContain('data_source=website');
|
|
92
|
+
expect(url).toContain('search=returns');
|
|
93
|
+
expect(url).toContain('limit=50');
|
|
94
|
+
expect(getRequestMethod(call)).toBe('GET');
|
|
95
|
+
});
|
|
96
|
+
it('update_knowledgebase_item PUTs segment restrictions', async () => {
|
|
97
|
+
fetchSpy.mockResolvedValueOnce(mockResponse({ id: 'kb-1', restricted_to_segments: ['seg-1'] }));
|
|
98
|
+
const result = await client.callTool({
|
|
99
|
+
name: 'update_knowledgebase_item',
|
|
100
|
+
arguments: { id: 'kb-1', restricted_to_segments: ['seg-1'] },
|
|
101
|
+
});
|
|
102
|
+
const call = fetchSpy.mock.calls[0];
|
|
103
|
+
expect(getRequestUrl(call)).toBe('https://api.test.com/knowledgebase-items/kb-1');
|
|
104
|
+
expect(getRequestMethod(call)).toBe('PUT');
|
|
105
|
+
expect(await getRequestBody(call)).toEqual({ restricted_to_segments: ['seg-1'] });
|
|
106
|
+
expect(result.isError).toBeFalsy();
|
|
107
|
+
});
|
|
108
|
+
it('update_knowledgebase_item PUTs channel + schedule restrictions', async () => {
|
|
109
|
+
fetchSpy.mockResolvedValueOnce(mockResponse({ id: 'kb-1' }));
|
|
110
|
+
const result = await client.callTool({
|
|
111
|
+
name: 'update_knowledgebase_item',
|
|
112
|
+
arguments: {
|
|
113
|
+
id: 'kb-1',
|
|
114
|
+
restricted_to_channels: ['web', 'whatsapp'],
|
|
115
|
+
start_time: '2026-06-01T00:00:00.000Z',
|
|
116
|
+
end_time: null,
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
const call = fetchSpy.mock.calls[0];
|
|
120
|
+
expect(getRequestUrl(call)).toBe('https://api.test.com/knowledgebase-items/kb-1');
|
|
121
|
+
expect(getRequestMethod(call)).toBe('PUT');
|
|
122
|
+
expect(await getRequestBody(call)).toEqual({
|
|
123
|
+
restricted_to_channels: ['web', 'whatsapp'],
|
|
124
|
+
start_time: '2026-06-01T00:00:00.000Z',
|
|
125
|
+
end_time: null,
|
|
126
|
+
});
|
|
127
|
+
expect(result.isError).toBeFalsy();
|
|
128
|
+
});
|
|
129
|
+
it('update_knowledgebase_item rejects an invalid channel before calling the API', async () => {
|
|
130
|
+
const result = await client.callTool({
|
|
131
|
+
name: 'update_knowledgebase_item',
|
|
132
|
+
arguments: { id: 'kb-1', restricted_to_channels: ['nope'] },
|
|
133
|
+
});
|
|
134
|
+
expect(result.isError).toBe(true);
|
|
135
|
+
expect(fetchSpy).not.toHaveBeenCalled();
|
|
136
|
+
});
|
|
137
|
+
it('set_instruction_restrictions PUTs to the restrictions endpoint', async () => {
|
|
138
|
+
fetchSpy.mockResolvedValueOnce(mockResponse({ id: 'i-1', restricted_to_segments: ['seg-1'], restricted_to_channels: [] }));
|
|
139
|
+
const result = await client.callTool({
|
|
140
|
+
name: 'set_instruction_restrictions',
|
|
141
|
+
arguments: { id: 'i-1', restricted_to_segments: ['seg-1'] },
|
|
142
|
+
});
|
|
143
|
+
const call = fetchSpy.mock.calls[0];
|
|
144
|
+
expect(getRequestUrl(call)).toBe('https://api.test.com/training/i-1/restrictions');
|
|
145
|
+
expect(getRequestMethod(call)).toBe('PUT');
|
|
146
|
+
expect(await getRequestBody(call)).toEqual({ restricted_to_segments: ['seg-1'] });
|
|
147
|
+
expect(result.isError).toBeFalsy();
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
//# sourceMappingURL=restrictions.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restrictions.spec.js","sourceRoot":"","sources":["../src/restrictions.spec.ts"],"names":[],"mappings":"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"}
|