opc-agent 2.1.0 → 3.0.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.
Files changed (144) hide show
  1. package/README.md +603 -545
  2. package/dist/channels/voice.d.ts +59 -0
  3. package/dist/channels/voice.js +351 -1
  4. package/dist/cli.js +172 -1
  5. package/dist/core/agent.d.ts +4 -0
  6. package/dist/core/agent.js +35 -0
  7. package/dist/core/collaboration.d.ts +89 -0
  8. package/dist/core/collaboration.js +201 -0
  9. package/dist/deploy/index.d.ts +40 -0
  10. package/dist/deploy/index.js +261 -0
  11. package/dist/index.d.ts +7 -1
  12. package/dist/index.js +47 -3
  13. package/dist/mcp/servers/calculator-mcp.d.ts +3 -0
  14. package/dist/mcp/servers/calculator-mcp.js +65 -0
  15. package/dist/mcp/servers/crypto-mcp.d.ts +3 -0
  16. package/dist/mcp/servers/crypto-mcp.js +108 -0
  17. package/dist/mcp/servers/database-mcp.d.ts +3 -0
  18. package/dist/mcp/servers/database-mcp.js +73 -0
  19. package/dist/mcp/servers/datetime-mcp.d.ts +3 -0
  20. package/dist/mcp/servers/datetime-mcp.js +71 -0
  21. package/dist/mcp/servers/filesystem.d.ts +3 -0
  22. package/dist/mcp/servers/filesystem.js +101 -0
  23. package/dist/mcp/servers/github-mcp.d.ts +3 -0
  24. package/dist/mcp/servers/github-mcp.js +60 -0
  25. package/dist/mcp/servers/index.d.ts +21 -0
  26. package/dist/mcp/servers/index.js +50 -0
  27. package/dist/mcp/servers/json-mcp.d.ts +3 -0
  28. package/dist/mcp/servers/json-mcp.js +126 -0
  29. package/dist/mcp/servers/memory-mcp.d.ts +3 -0
  30. package/dist/mcp/servers/memory-mcp.js +60 -0
  31. package/dist/mcp/servers/regex-mcp.d.ts +3 -0
  32. package/dist/mcp/servers/regex-mcp.js +56 -0
  33. package/dist/mcp/servers/web-mcp.d.ts +3 -0
  34. package/dist/mcp/servers/web-mcp.js +51 -0
  35. package/dist/schema/oad.d.ts +292 -12
  36. package/dist/schema/oad.js +12 -1
  37. package/dist/security/guardrails.d.ts +50 -0
  38. package/dist/security/guardrails.js +197 -0
  39. package/dist/studio/server.d.ts +31 -1
  40. package/dist/studio/server.js +154 -3
  41. package/dist/studio-ui/index.html +1278 -662
  42. package/dist/tools/integrations/calendar.d.ts +3 -0
  43. package/dist/tools/integrations/calendar.js +73 -0
  44. package/dist/tools/integrations/code-exec.d.ts +3 -0
  45. package/dist/tools/integrations/code-exec.js +42 -0
  46. package/dist/tools/integrations/csv-analyzer.d.ts +3 -0
  47. package/dist/tools/integrations/csv-analyzer.js +142 -0
  48. package/dist/tools/integrations/database.d.ts +3 -0
  49. package/dist/tools/integrations/database.js +44 -0
  50. package/dist/tools/integrations/email-send.d.ts +3 -0
  51. package/dist/tools/integrations/email-send.js +104 -0
  52. package/dist/tools/integrations/git-tool.d.ts +3 -0
  53. package/dist/tools/integrations/git-tool.js +49 -0
  54. package/dist/tools/integrations/github-tool.d.ts +3 -0
  55. package/dist/tools/integrations/github-tool.js +77 -0
  56. package/dist/tools/integrations/image-gen.d.ts +3 -0
  57. package/dist/tools/integrations/image-gen.js +58 -0
  58. package/dist/tools/integrations/index.d.ts +30 -0
  59. package/dist/tools/integrations/index.js +107 -0
  60. package/dist/tools/integrations/jira.d.ts +3 -0
  61. package/dist/tools/integrations/jira.js +85 -0
  62. package/dist/tools/integrations/notion.d.ts +3 -0
  63. package/dist/tools/integrations/notion.js +71 -0
  64. package/dist/tools/integrations/npm-tool.d.ts +3 -0
  65. package/dist/tools/integrations/npm-tool.js +49 -0
  66. package/dist/tools/integrations/pdf-reader.d.ts +3 -0
  67. package/dist/tools/integrations/pdf-reader.js +91 -0
  68. package/dist/tools/integrations/slack.d.ts +3 -0
  69. package/dist/tools/integrations/slack.js +67 -0
  70. package/dist/tools/integrations/summarizer.d.ts +3 -0
  71. package/dist/tools/integrations/summarizer.js +49 -0
  72. package/dist/tools/integrations/translator.d.ts +3 -0
  73. package/dist/tools/integrations/translator.js +48 -0
  74. package/dist/tools/integrations/trello.d.ts +3 -0
  75. package/dist/tools/integrations/trello.js +60 -0
  76. package/dist/tools/integrations/vector-search.d.ts +3 -0
  77. package/dist/tools/integrations/vector-search.js +44 -0
  78. package/dist/tools/integrations/web-scraper.d.ts +3 -0
  79. package/dist/tools/integrations/web-scraper.js +48 -0
  80. package/dist/tools/integrations/web-search.d.ts +3 -0
  81. package/dist/tools/integrations/web-search.js +60 -0
  82. package/dist/tools/integrations/webhook.d.ts +3 -0
  83. package/dist/tools/integrations/webhook.js +39 -0
  84. package/dist/ui/components.d.ts +10 -0
  85. package/dist/ui/components.js +123 -0
  86. package/package.json +1 -1
  87. package/src/channels/voice.ts +365 -0
  88. package/src/cli.ts +176 -2
  89. package/src/core/agent.ts +38 -0
  90. package/src/core/collaboration.ts +275 -0
  91. package/src/deploy/index.ts +255 -0
  92. package/src/index.ts +21 -1
  93. package/src/mcp/servers/calculator-mcp.ts +65 -0
  94. package/src/mcp/servers/crypto-mcp.ts +73 -0
  95. package/src/mcp/servers/database-mcp.ts +72 -0
  96. package/src/mcp/servers/datetime-mcp.ts +69 -0
  97. package/src/mcp/servers/filesystem.ts +66 -0
  98. package/src/mcp/servers/github-mcp.ts +58 -0
  99. package/src/mcp/servers/index.ts +63 -0
  100. package/src/mcp/servers/json-mcp.ts +102 -0
  101. package/src/mcp/servers/memory-mcp.ts +56 -0
  102. package/src/mcp/servers/regex-mcp.ts +53 -0
  103. package/src/mcp/servers/web-mcp.ts +49 -0
  104. package/src/schema/oad.ts +13 -0
  105. package/src/security/guardrails.ts +248 -0
  106. package/src/studio/server.ts +166 -4
  107. package/src/studio-ui/index.html +1278 -662
  108. package/src/tools/integrations/calendar.ts +73 -0
  109. package/src/tools/integrations/code-exec.ts +39 -0
  110. package/src/tools/integrations/csv-analyzer.ts +92 -0
  111. package/src/tools/integrations/database.ts +44 -0
  112. package/src/tools/integrations/email-send.ts +76 -0
  113. package/src/tools/integrations/git-tool.ts +42 -0
  114. package/src/tools/integrations/github-tool.ts +76 -0
  115. package/src/tools/integrations/image-gen.ts +56 -0
  116. package/src/tools/integrations/index.ts +92 -0
  117. package/src/tools/integrations/jira.ts +83 -0
  118. package/src/tools/integrations/notion.ts +71 -0
  119. package/src/tools/integrations/npm-tool.ts +48 -0
  120. package/src/tools/integrations/pdf-reader.ts +58 -0
  121. package/src/tools/integrations/slack.ts +65 -0
  122. package/src/tools/integrations/summarizer.ts +49 -0
  123. package/src/tools/integrations/translator.ts +48 -0
  124. package/src/tools/integrations/trello.ts +60 -0
  125. package/src/tools/integrations/vector-search.ts +42 -0
  126. package/src/tools/integrations/web-scraper.ts +47 -0
  127. package/src/tools/integrations/web-search.ts +58 -0
  128. package/src/tools/integrations/webhook.ts +38 -0
  129. package/src/ui/components.ts +127 -0
  130. package/tests/brain-seed-extended.test.ts +490 -0
  131. package/tests/collaboration.test.ts +319 -0
  132. package/tests/deploy-and-dag.test.ts +196 -0
  133. package/tests/guardrails.test.ts +177 -0
  134. package/tests/integrations.test.ts +249 -0
  135. package/tests/mcp-servers.test.ts +260 -0
  136. package/tests/voice-enhanced.test.ts +169 -0
  137. package/dist/dtv/data.d.ts +0 -18
  138. package/dist/dtv/data.js +0 -25
  139. package/dist/dtv/trust.d.ts +0 -19
  140. package/dist/dtv/trust.js +0 -40
  141. package/dist/dtv/value.d.ts +0 -23
  142. package/dist/dtv/value.js +0 -38
  143. package/dist/marketplace/index.d.ts +0 -34
  144. package/dist/marketplace/index.js +0 -202
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createCryptoServer = exports.createRegexServer = exports.createJsonServer = exports.createDateTimeServer = exports.createCalculatorServer = exports.createMemoryServer = exports.createWebServer = exports.createDatabaseServer = exports.createGitHubServer = exports.createFilesystemServer = void 0;
4
+ exports.getMCPServer = getMCPServer;
5
+ exports.listMCPServers = listMCPServers;
6
+ const filesystem_1 = require("./filesystem");
7
+ Object.defineProperty(exports, "createFilesystemServer", { enumerable: true, get: function () { return filesystem_1.createFilesystemServer; } });
8
+ const github_mcp_1 = require("./github-mcp");
9
+ Object.defineProperty(exports, "createGitHubServer", { enumerable: true, get: function () { return github_mcp_1.createGitHubServer; } });
10
+ const database_mcp_1 = require("./database-mcp");
11
+ Object.defineProperty(exports, "createDatabaseServer", { enumerable: true, get: function () { return database_mcp_1.createDatabaseServer; } });
12
+ const web_mcp_1 = require("./web-mcp");
13
+ Object.defineProperty(exports, "createWebServer", { enumerable: true, get: function () { return web_mcp_1.createWebServer; } });
14
+ const memory_mcp_1 = require("./memory-mcp");
15
+ Object.defineProperty(exports, "createMemoryServer", { enumerable: true, get: function () { return memory_mcp_1.createMemoryServer; } });
16
+ const calculator_mcp_1 = require("./calculator-mcp");
17
+ Object.defineProperty(exports, "createCalculatorServer", { enumerable: true, get: function () { return calculator_mcp_1.createCalculatorServer; } });
18
+ const datetime_mcp_1 = require("./datetime-mcp");
19
+ Object.defineProperty(exports, "createDateTimeServer", { enumerable: true, get: function () { return datetime_mcp_1.createDateTimeServer; } });
20
+ const json_mcp_1 = require("./json-mcp");
21
+ Object.defineProperty(exports, "createJsonServer", { enumerable: true, get: function () { return json_mcp_1.createJsonServer; } });
22
+ const regex_mcp_1 = require("./regex-mcp");
23
+ Object.defineProperty(exports, "createRegexServer", { enumerable: true, get: function () { return regex_mcp_1.createRegexServer; } });
24
+ const crypto_mcp_1 = require("./crypto-mcp");
25
+ Object.defineProperty(exports, "createCryptoServer", { enumerable: true, get: function () { return crypto_mcp_1.createCryptoServer; } });
26
+ const SERVERS = [
27
+ { name: 'filesystem', description: 'Read/write/list files in a sandboxed directory', factory: () => (0, filesystem_1.createFilesystemServer)() },
28
+ { name: 'github', description: 'GitHub API — repos, issues, files via fetch', factory: () => (0, github_mcp_1.createGitHubServer)() },
29
+ { name: 'database', description: 'In-memory SQL-like database with tables and queries', factory: () => (0, database_mcp_1.createDatabaseServer)() },
30
+ { name: 'web', description: 'Web fetch, text extraction, and search', factory: () => (0, web_mcp_1.createWebServer)() },
31
+ { name: 'memory', description: 'Key-value memory store with tags and search', factory: () => (0, memory_mcp_1.createMemoryServer)() },
32
+ { name: 'calculator', description: 'Math evaluation, unit conversion, percentages', factory: () => (0, calculator_mcp_1.createCalculatorServer)() },
33
+ { name: 'datetime', description: 'Time zones, date math, parsing, and formatting', factory: () => (0, datetime_mcp_1.createDateTimeServer)() },
34
+ { name: 'json', description: 'JSON path query, transform, validate, and diff', factory: () => (0, json_mcp_1.createJsonServer)() },
35
+ { name: 'regex', description: 'Regex test, match, replace, and split', factory: () => (0, regex_mcp_1.createRegexServer)() },
36
+ { name: 'crypto', description: 'Hash, HMAC, encrypt/decrypt, random generation', factory: () => (0, crypto_mcp_1.createCryptoServer)() },
37
+ ];
38
+ function getMCPServer(name) {
39
+ const entry = SERVERS.find(s => s.name === name);
40
+ if (!entry)
41
+ throw new Error(`MCP server '${name}' not found. Available: ${SERVERS.map(s => s.name).join(', ')}`);
42
+ return entry.factory();
43
+ }
44
+ function listMCPServers() {
45
+ return SERVERS.map(s => {
46
+ const config = s.factory();
47
+ return { name: s.name, description: s.description, version: config.version, toolCount: config.tools?.length || 0 };
48
+ });
49
+ }
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,3 @@
1
+ import type { MCPServerConfig } from '../../protocols/mcp/types';
2
+ export declare function createJsonServer(): MCPServerConfig;
3
+ //# sourceMappingURL=json-mcp.d.ts.map
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createJsonServer = createJsonServer;
4
+ function jsonPathQuery(obj, path) {
5
+ const parts = path.replace(/^\$\.?/, '').split('.');
6
+ let current = [obj];
7
+ for (const part of parts) {
8
+ if (!part)
9
+ continue;
10
+ const next = [];
11
+ for (const item of current) {
12
+ if (part === '*') {
13
+ if (Array.isArray(item))
14
+ next.push(...item);
15
+ else if (typeof item === 'object' && item)
16
+ next.push(...Object.values(item));
17
+ }
18
+ else if (part.match(/^\[(\d+)\]$/)) {
19
+ const idx = parseInt(part.slice(1, -1));
20
+ if (Array.isArray(item) && item[idx] !== undefined)
21
+ next.push(item[idx]);
22
+ }
23
+ else {
24
+ if (item && typeof item === 'object' && part in item)
25
+ next.push(item[part]);
26
+ }
27
+ }
28
+ current = next;
29
+ }
30
+ return current;
31
+ }
32
+ function createJsonServer() {
33
+ return {
34
+ name: 'json',
35
+ version: '1.0.0',
36
+ tools: [
37
+ {
38
+ name: 'json_query',
39
+ description: 'Query JSON data using dot-notation path (e.g. "users.0.name", "items.*")',
40
+ inputSchema: { type: 'object', properties: { data: { description: 'JSON string or object' }, path: { type: 'string', description: 'Dot-notation path' } }, required: ['data', 'path'] },
41
+ handler: async (args) => {
42
+ const obj = typeof args.data === 'string' ? JSON.parse(args.data) : args.data;
43
+ return { results: jsonPathQuery(obj, args.path) };
44
+ },
45
+ },
46
+ {
47
+ name: 'json_transform',
48
+ description: 'Transform JSON: pick fields, rename keys, flatten',
49
+ inputSchema: { type: 'object', properties: { data: {}, operation: { type: 'string', enum: ['pick', 'omit', 'flatten', 'keys', 'values'] }, fields: { type: 'array', items: { type: 'string' } } }, required: ['data', 'operation'] },
50
+ handler: async (args) => {
51
+ const obj = typeof args.data === 'string' ? JSON.parse(args.data) : args.data;
52
+ switch (args.operation) {
53
+ case 'pick': {
54
+ const result = {};
55
+ for (const f of args.fields || [])
56
+ if (f in obj)
57
+ result[f] = obj[f];
58
+ return { result };
59
+ }
60
+ case 'omit': {
61
+ const result = { ...obj };
62
+ for (const f of args.fields || [])
63
+ delete result[f];
64
+ return { result };
65
+ }
66
+ case 'flatten': {
67
+ const result = {};
68
+ const recurse = (o, prefix) => {
69
+ for (const [k, v] of Object.entries(o)) {
70
+ const key = prefix ? `${prefix}.${k}` : k;
71
+ if (v && typeof v === 'object' && !Array.isArray(v))
72
+ recurse(v, key);
73
+ else
74
+ result[key] = v;
75
+ }
76
+ };
77
+ recurse(obj, '');
78
+ return { result };
79
+ }
80
+ case 'keys': return { result: Object.keys(obj) };
81
+ case 'values': return { result: Object.values(obj) };
82
+ default: throw new Error(`Unknown operation: ${args.operation}`);
83
+ }
84
+ },
85
+ },
86
+ {
87
+ name: 'json_validate',
88
+ description: 'Check if a string is valid JSON',
89
+ inputSchema: { type: 'object', properties: { data: { type: 'string' } }, required: ['data'] },
90
+ handler: async (args) => {
91
+ try {
92
+ JSON.parse(args.data);
93
+ return { valid: true };
94
+ }
95
+ catch (e) {
96
+ return { valid: false, error: e.message };
97
+ }
98
+ },
99
+ },
100
+ {
101
+ name: 'json_diff',
102
+ description: 'Compare two JSON objects and return differences',
103
+ inputSchema: { type: 'object', properties: { a: {}, b: {} }, required: ['a', 'b'] },
104
+ handler: async (args) => {
105
+ const a = typeof args.a === 'string' ? JSON.parse(args.a) : args.a;
106
+ const b = typeof args.b === 'string' ? JSON.parse(args.b) : args.b;
107
+ const diffs = [];
108
+ const compare = (x, y, path) => {
109
+ if (x === y)
110
+ return;
111
+ if (typeof x !== typeof y || typeof x !== 'object' || !x || !y) {
112
+ diffs.push({ path, a: x, b: y });
113
+ return;
114
+ }
115
+ const keys = new Set([...Object.keys(x), ...Object.keys(y)]);
116
+ for (const k of keys)
117
+ compare(x[k], y[k], path ? `${path}.${k}` : k);
118
+ };
119
+ compare(a, b, '');
120
+ return { equal: diffs.length === 0, differences: diffs };
121
+ },
122
+ },
123
+ ],
124
+ };
125
+ }
126
+ //# sourceMappingURL=json-mcp.js.map
@@ -0,0 +1,3 @@
1
+ import type { MCPServerConfig } from '../../protocols/mcp/types';
2
+ export declare function createMemoryServer(): MCPServerConfig;
3
+ //# sourceMappingURL=memory-mcp.d.ts.map
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMemoryServer = createMemoryServer;
4
+ function createMemoryServer() {
5
+ const store = new Map();
6
+ return {
7
+ name: 'memory',
8
+ version: '1.0.0',
9
+ tools: [
10
+ {
11
+ name: 'memory_store',
12
+ description: 'Store a key-value pair in memory with optional tags',
13
+ inputSchema: { type: 'object', properties: { key: { type: 'string' }, value: { type: 'any' }, tags: { type: 'array', items: { type: 'string' } } }, required: ['key', 'value'] },
14
+ handler: async (args) => {
15
+ const now = new Date().toISOString();
16
+ const existing = store.get(args.key);
17
+ store.set(args.key, { value: args.value, tags: args.tags || [], created: existing?.created || now, updated: now });
18
+ return { stored: args.key };
19
+ },
20
+ },
21
+ {
22
+ name: 'memory_recall',
23
+ description: 'Recall a value by key',
24
+ inputSchema: { type: 'object', properties: { key: { type: 'string' } }, required: ['key'] },
25
+ handler: async (args) => {
26
+ const entry = store.get(args.key);
27
+ if (!entry)
28
+ return { found: false };
29
+ return { found: true, ...entry };
30
+ },
31
+ },
32
+ {
33
+ name: 'memory_search',
34
+ description: 'Search memory entries by tag or substring in key',
35
+ inputSchema: { type: 'object', properties: { query: { type: 'string' }, tag: { type: 'string' } }, required: [] },
36
+ handler: async (args) => {
37
+ let results = Array.from(store.entries()).map(([k, v]) => ({ key: k, ...v }));
38
+ if (args.tag)
39
+ results = results.filter(r => r.tags.includes(args.tag));
40
+ if (args.query)
41
+ results = results.filter(r => r.key.includes(args.query) || JSON.stringify(r.value).includes(args.query));
42
+ return { results, count: results.length };
43
+ },
44
+ },
45
+ {
46
+ name: 'memory_delete',
47
+ description: 'Delete a memory entry',
48
+ inputSchema: { type: 'object', properties: { key: { type: 'string' } }, required: ['key'] },
49
+ handler: async (args) => ({ deleted: store.delete(args.key) }),
50
+ },
51
+ {
52
+ name: 'memory_list',
53
+ description: 'List all memory keys',
54
+ inputSchema: { type: 'object', properties: {} },
55
+ handler: async () => ({ keys: Array.from(store.keys()), count: store.size }),
56
+ },
57
+ ],
58
+ };
59
+ }
60
+ //# sourceMappingURL=memory-mcp.js.map
@@ -0,0 +1,3 @@
1
+ import type { MCPServerConfig } from '../../protocols/mcp/types';
2
+ export declare function createRegexServer(): MCPServerConfig;
3
+ //# sourceMappingURL=regex-mcp.d.ts.map
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createRegexServer = createRegexServer;
4
+ function createRegexServer() {
5
+ return {
6
+ name: 'regex',
7
+ version: '1.0.0',
8
+ tools: [
9
+ {
10
+ name: 'regex_test',
11
+ description: 'Test if a string matches a regex pattern',
12
+ inputSchema: { type: 'object', properties: { pattern: { type: 'string' }, flags: { type: 'string', default: '' }, text: { type: 'string' } }, required: ['pattern', 'text'] },
13
+ handler: async (args) => {
14
+ const re = new RegExp(args.pattern, args.flags || '');
15
+ return { matches: re.test(args.text), pattern: args.pattern };
16
+ },
17
+ },
18
+ {
19
+ name: 'regex_match',
20
+ description: 'Find all matches of a regex in text',
21
+ inputSchema: { type: 'object', properties: { pattern: { type: 'string' }, flags: { type: 'string', default: 'g' }, text: { type: 'string' } }, required: ['pattern', 'text'] },
22
+ handler: async (args) => {
23
+ const re = new RegExp(args.pattern, args.flags || 'g');
24
+ const matches = [];
25
+ let m;
26
+ while ((m = re.exec(args.text)) !== null) {
27
+ matches.push({ match: m[0], index: m.index, groups: m.groups });
28
+ if (!re.global)
29
+ break;
30
+ }
31
+ return { matches, count: matches.length };
32
+ },
33
+ },
34
+ {
35
+ name: 'regex_replace',
36
+ description: 'Replace matches in text using regex',
37
+ inputSchema: { type: 'object', properties: { pattern: { type: 'string' }, flags: { type: 'string', default: 'g' }, text: { type: 'string' }, replacement: { type: 'string' } }, required: ['pattern', 'text', 'replacement'] },
38
+ handler: async (args) => {
39
+ const re = new RegExp(args.pattern, args.flags || 'g');
40
+ return { result: args.text.replace(re, args.replacement) };
41
+ },
42
+ },
43
+ {
44
+ name: 'regex_split',
45
+ description: 'Split text by regex pattern',
46
+ inputSchema: { type: 'object', properties: { pattern: { type: 'string' }, text: { type: 'string' }, limit: { type: 'number' } }, required: ['pattern', 'text'] },
47
+ handler: async (args) => {
48
+ const re = new RegExp(args.pattern);
49
+ const parts = args.text.split(re, args.limit);
50
+ return { parts, count: parts.length };
51
+ },
52
+ },
53
+ ],
54
+ };
55
+ }
56
+ //# sourceMappingURL=regex-mcp.js.map
@@ -0,0 +1,3 @@
1
+ import type { MCPServerConfig } from '../../protocols/mcp/types';
2
+ export declare function createWebServer(): MCPServerConfig;
3
+ //# sourceMappingURL=web-mcp.d.ts.map
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createWebServer = createWebServer;
4
+ function createWebServer() {
5
+ return {
6
+ name: 'web',
7
+ version: '1.0.0',
8
+ tools: [
9
+ {
10
+ name: 'web_fetch',
11
+ description: 'Fetch a URL and return its content',
12
+ inputSchema: { type: 'object', properties: { url: { type: 'string' }, method: { type: 'string', default: 'GET' }, headers: { type: 'object' }, body: { type: 'string' } }, required: ['url'] },
13
+ handler: async (args) => {
14
+ const res = await fetch(args.url, { method: args.method || 'GET', headers: args.headers, body: args.body });
15
+ const contentType = res.headers.get('content-type') || '';
16
+ const text = await res.text();
17
+ return { status: res.status, contentType, body: text.slice(0, 50000), truncated: text.length > 50000 };
18
+ },
19
+ },
20
+ {
21
+ name: 'web_extract_text',
22
+ description: 'Fetch a URL and extract readable text (strips HTML tags)',
23
+ inputSchema: { type: 'object', properties: { url: { type: 'string' } }, required: ['url'] },
24
+ handler: async (args) => {
25
+ const res = await fetch(args.url);
26
+ const html = await res.text();
27
+ const text = html.replace(/<script[\s\S]*?<\/script>/gi, '').replace(/<style[\s\S]*?<\/style>/gi, '').replace(/<[^>]+>/g, ' ').replace(/\s+/g, ' ').trim();
28
+ return { text: text.slice(0, 30000), truncated: text.length > 30000 };
29
+ },
30
+ },
31
+ {
32
+ name: 'web_search',
33
+ description: 'Search the web (simulated — returns search URL for manual use)',
34
+ inputSchema: { type: 'object', properties: { query: { type: 'string' }, engine: { type: 'string', enum: ['google', 'bing', 'duckduckgo'], default: 'duckduckgo' } }, required: ['query'] },
35
+ handler: async (args) => {
36
+ const engines = {
37
+ google: `https://www.google.com/search?q=${encodeURIComponent(args.query)}`,
38
+ bing: `https://www.bing.com/search?q=${encodeURIComponent(args.query)}`,
39
+ duckduckgo: `https://html.duckduckgo.com/html/?q=${encodeURIComponent(args.query)}`,
40
+ };
41
+ const url = engines[args.engine || 'duckduckgo'];
42
+ const res = await fetch(url, { headers: { 'User-Agent': 'Mozilla/5.0 opc-mcp/1.0' } });
43
+ const html = await res.text();
44
+ const text = html.replace(/<script[\s\S]*?<\/script>/gi, '').replace(/<style[\s\S]*?<\/style>/gi, '').replace(/<[^>]+>/g, ' ').replace(/\s+/g, ' ').trim();
45
+ return { query: args.query, engine: args.engine || 'duckduckgo', results: text.slice(0, 20000) };
46
+ },
47
+ },
48
+ ],
49
+ };
50
+ }
51
+ //# sourceMappingURL=web-mcp.js.map