cbrowser 17.5.2 → 17.6.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 (97) hide show
  1. package/dist/index.d.ts +2 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +5 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/mcp-server-remote.d.ts +8 -0
  6. package/dist/mcp-server-remote.d.ts.map +1 -1
  7. package/dist/mcp-server-remote.js +94 -2214
  8. package/dist/mcp-server-remote.js.map +1 -1
  9. package/dist/mcp-tools/ask-user-tools.d.ts +12 -0
  10. package/dist/mcp-tools/ask-user-tools.d.ts.map +1 -0
  11. package/dist/mcp-tools/ask-user-tools.js +60 -0
  12. package/dist/mcp-tools/ask-user-tools.js.map +1 -0
  13. package/dist/mcp-tools/base/analysis-tools.d.ts +12 -0
  14. package/dist/mcp-tools/base/analysis-tools.d.ts.map +1 -0
  15. package/dist/mcp-tools/base/analysis-tools.js +70 -0
  16. package/dist/mcp-tools/base/analysis-tools.js.map +1 -0
  17. package/dist/mcp-tools/base/assertion-tools.d.ts +12 -0
  18. package/dist/mcp-tools/base/assertion-tools.d.ts.map +1 -0
  19. package/dist/mcp-tools/base/assertion-tools.js +32 -0
  20. package/dist/mcp-tools/base/assertion-tools.js.map +1 -0
  21. package/dist/mcp-tools/base/audit-tools.d.ts +12 -0
  22. package/dist/mcp-tools/base/audit-tools.d.ts.map +1 -0
  23. package/dist/mcp-tools/base/audit-tools.js +114 -0
  24. package/dist/mcp-tools/base/audit-tools.js.map +1 -0
  25. package/dist/mcp-tools/base/browser-management-tools.d.ts +12 -0
  26. package/dist/mcp-tools/base/browser-management-tools.d.ts.map +1 -0
  27. package/dist/mcp-tools/base/browser-management-tools.js +69 -0
  28. package/dist/mcp-tools/base/browser-management-tools.js.map +1 -0
  29. package/dist/mcp-tools/base/bug-analysis-tools.d.ts +12 -0
  30. package/dist/mcp-tools/base/bug-analysis-tools.d.ts.map +1 -0
  31. package/dist/mcp-tools/base/bug-analysis-tools.js +97 -0
  32. package/dist/mcp-tools/base/bug-analysis-tools.js.map +1 -0
  33. package/dist/mcp-tools/base/cognitive-tools.d.ts +12 -0
  34. package/dist/mcp-tools/base/cognitive-tools.d.ts.map +1 -0
  35. package/dist/mcp-tools/base/cognitive-tools.js +453 -0
  36. package/dist/mcp-tools/base/cognitive-tools.js.map +1 -0
  37. package/dist/mcp-tools/base/extraction-tools.d.ts +12 -0
  38. package/dist/mcp-tools/base/extraction-tools.d.ts.map +1 -0
  39. package/dist/mcp-tools/base/extraction-tools.js +41 -0
  40. package/dist/mcp-tools/base/extraction-tools.js.map +1 -0
  41. package/dist/mcp-tools/base/healing-tools.d.ts +12 -0
  42. package/dist/mcp-tools/base/healing-tools.d.ts.map +1 -0
  43. package/dist/mcp-tools/base/healing-tools.js +24 -0
  44. package/dist/mcp-tools/base/healing-tools.js.map +1 -0
  45. package/dist/mcp-tools/base/index.d.ts +49 -0
  46. package/dist/mcp-tools/base/index.d.ts.map +1 -0
  47. package/dist/mcp-tools/base/index.js +99 -0
  48. package/dist/mcp-tools/base/index.js.map +1 -0
  49. package/dist/mcp-tools/base/interaction-tools.d.ts +12 -0
  50. package/dist/mcp-tools/base/interaction-tools.d.ts.map +1 -0
  51. package/dist/mcp-tools/base/interaction-tools.js +168 -0
  52. package/dist/mcp-tools/base/interaction-tools.js.map +1 -0
  53. package/dist/mcp-tools/base/navigation-tools.d.ts +12 -0
  54. package/dist/mcp-tools/base/navigation-tools.d.ts.map +1 -0
  55. package/dist/mcp-tools/base/navigation-tools.js +33 -0
  56. package/dist/mcp-tools/base/navigation-tools.js.map +1 -0
  57. package/dist/mcp-tools/base/performance-tools.d.ts +12 -0
  58. package/dist/mcp-tools/base/performance-tools.d.ts.map +1 -0
  59. package/dist/mcp-tools/base/performance-tools.js +103 -0
  60. package/dist/mcp-tools/base/performance-tools.js.map +1 -0
  61. package/dist/mcp-tools/base/persona-comparison-tools.d.ts +12 -0
  62. package/dist/mcp-tools/base/persona-comparison-tools.d.ts.map +1 -0
  63. package/dist/mcp-tools/base/persona-comparison-tools.js +242 -0
  64. package/dist/mcp-tools/base/persona-comparison-tools.js.map +1 -0
  65. package/dist/mcp-tools/base/session-tools.d.ts +12 -0
  66. package/dist/mcp-tools/base/session-tools.d.ts.map +1 -0
  67. package/dist/mcp-tools/base/session-tools.js +67 -0
  68. package/dist/mcp-tools/base/session-tools.js.map +1 -0
  69. package/dist/mcp-tools/base/testing-tools.d.ts +12 -0
  70. package/dist/mcp-tools/base/testing-tools.d.ts.map +1 -0
  71. package/dist/mcp-tools/base/testing-tools.js +199 -0
  72. package/dist/mcp-tools/base/testing-tools.js.map +1 -0
  73. package/dist/mcp-tools/base/values-tools.d.ts +13 -0
  74. package/dist/mcp-tools/base/values-tools.d.ts.map +1 -0
  75. package/dist/mcp-tools/base/values-tools.js +290 -0
  76. package/dist/mcp-tools/base/values-tools.js.map +1 -0
  77. package/dist/mcp-tools/base/visual-testing-tools.d.ts +12 -0
  78. package/dist/mcp-tools/base/visual-testing-tools.d.ts.map +1 -0
  79. package/dist/mcp-tools/base/visual-testing-tools.js +159 -0
  80. package/dist/mcp-tools/base/visual-testing-tools.js.map +1 -0
  81. package/dist/mcp-tools/enterprise-stubs.d.ts +23 -0
  82. package/dist/mcp-tools/enterprise-stubs.d.ts.map +1 -0
  83. package/dist/mcp-tools/enterprise-stubs.js +238 -0
  84. package/dist/mcp-tools/enterprise-stubs.js.map +1 -0
  85. package/dist/mcp-tools/index.d.ts +36 -0
  86. package/dist/mcp-tools/index.d.ts.map +1 -0
  87. package/dist/mcp-tools/index.js +52 -0
  88. package/dist/mcp-tools/index.js.map +1 -0
  89. package/dist/mcp-tools/persona-creation-tools.d.ts +21 -0
  90. package/dist/mcp-tools/persona-creation-tools.d.ts.map +1 -0
  91. package/dist/mcp-tools/persona-creation-tools.js +528 -0
  92. package/dist/mcp-tools/persona-creation-tools.js.map +1 -0
  93. package/dist/mcp-tools/types.d.ts +24 -0
  94. package/dist/mcp-tools/types.d.ts.map +1 -0
  95. package/dist/mcp-tools/types.js +8 -0
  96. package/dist/mcp-tools/types.js.map +1 -0
  97. package/package.json +6 -1
@@ -0,0 +1,290 @@
1
+ /**
2
+ * CBrowser MCP Tools - Values System Tools
3
+ * Schwartz's 10 Universal Values, Self-Determination Theory, Maslow
4
+ *
5
+ * @copyright 2026 WF Media (Alexandria Eden) alexandria.shai.eden@gmail.com
6
+ * @license BSL-1.1 (Business Source License 1.1)
7
+ */
8
+ import { z } from "zod";
9
+ import { getPersonaValues, PERSONA_VALUE_PROFILES, rankInfluencePatternsForProfile, INFLUENCE_PATTERNS, } from "../../values/index.js";
10
+ /**
11
+ * Register values system tools (6 tools)
12
+ */
13
+ export function registerValuesTools(server) {
14
+ server.tool("persona_values_lookup", "Look up the values profile for a persona (Schwartz's 10 Universal Values, SDT needs, Maslow level). Values describe WHO the persona is at a deeper motivational level, informing influence susceptibility.", {
15
+ persona: z.string().describe("Persona name (e.g., 'first-timer', 'power-user', 'anxious-user')"),
16
+ includeInfluencePatterns: z.boolean().optional().default(true).describe("Include ranked influence patterns this persona is susceptible to"),
17
+ }, async ({ persona, includeInfluencePatterns }) => {
18
+ const values = getPersonaValues(persona);
19
+ if (!values) {
20
+ const availablePersonas = PERSONA_VALUE_PROFILES.map(p => p.personaName);
21
+ return {
22
+ content: [
23
+ {
24
+ type: "text",
25
+ text: JSON.stringify({
26
+ error: `No values profile found for persona: ${persona}`,
27
+ availablePersonas,
28
+ note: "Values are defined for all built-in personas. Custom personas can have values added via the questionnaire.",
29
+ }, null, 2),
30
+ },
31
+ ],
32
+ };
33
+ }
34
+ const profile = PERSONA_VALUE_PROFILES.find(p => p.personaName.toLowerCase() === persona.toLowerCase());
35
+ let influencePatterns;
36
+ if (includeInfluencePatterns) {
37
+ const ranked = rankInfluencePatternsForProfile(values);
38
+ influencePatterns = ranked.slice(0, 7).map(r => ({
39
+ pattern: r.pattern.name,
40
+ susceptibility: r.susceptibility,
41
+ description: r.pattern.description,
42
+ }));
43
+ }
44
+ return {
45
+ content: [
46
+ {
47
+ type: "text",
48
+ text: JSON.stringify({
49
+ persona,
50
+ rationale: profile?.rationale,
51
+ schwartzValues: {
52
+ selfDirection: { value: values.selfDirection, meaning: "Independent thought, creativity, freedom" },
53
+ stimulation: { value: values.stimulation, meaning: "Excitement, novelty, challenge" },
54
+ hedonism: { value: values.hedonism, meaning: "Pleasure, sensuous gratification" },
55
+ achievement: { value: values.achievement, meaning: "Personal success through competence" },
56
+ power: { value: values.power, meaning: "Social status, prestige, control" },
57
+ security: { value: values.security, meaning: "Safety, harmony, stability" },
58
+ conformity: { value: values.conformity, meaning: "Restraint of actions that harm others" },
59
+ tradition: { value: values.tradition, meaning: "Respect for customs, heritage" },
60
+ benevolence: { value: values.benevolence, meaning: "Welfare of close others" },
61
+ universalism: { value: values.universalism, meaning: "Tolerance, social justice, environment" },
62
+ },
63
+ higherOrderValues: {
64
+ openness: { value: values.openness, meaning: "(selfDirection + stimulation) / 2" },
65
+ selfEnhancement: { value: values.selfEnhancement, meaning: "(achievement + power) / 2" },
66
+ conservation: { value: values.conservation, meaning: "(security + conformity + tradition) / 3" },
67
+ selfTranscendence: { value: values.selfTranscendence, meaning: "(benevolence + universalism) / 2" },
68
+ },
69
+ selfDeterminationTheory: {
70
+ autonomyNeed: { value: values.autonomyNeed, meaning: "Need for choice and control" },
71
+ competenceNeed: { value: values.competenceNeed, meaning: "Need to feel capable" },
72
+ relatednessNeed: { value: values.relatednessNeed, meaning: "Need for connection" },
73
+ },
74
+ maslowLevel: {
75
+ level: values.maslowLevel,
76
+ meaning: values.maslowLevel === "physiological" ? "Basic survival needs"
77
+ : values.maslowLevel === "safety" ? "Security and stability"
78
+ : values.maslowLevel === "belonging" ? "Social connection and love"
79
+ : values.maslowLevel === "esteem" ? "Achievement and recognition"
80
+ : "Self-fulfillment and growth",
81
+ },
82
+ influencePatterns,
83
+ researchBasis: {
84
+ schwartz: "Schwartz, S. H. (1992, 2012). Theory of Basic Human Values. DOI: 10.1016/S0065-2601(08)60281-6",
85
+ sdt: "Deci, E. L., & Ryan, R. M. (1985, 2000). Self-Determination Theory. DOI: 10.1037/0003-066X.55.1.68",
86
+ maslow: "Maslow, A. H. (1943). A Theory of Human Motivation. DOI: 10.1037/h0054346",
87
+ },
88
+ }, null, 2),
89
+ },
90
+ ],
91
+ };
92
+ });
93
+ server.tool("list_influence_patterns", "List all research-backed influence/persuasion patterns and which persona values make someone susceptible to each pattern. Based on Cialdini, Kahneman, and behavioral economics research.", {}, async () => {
94
+ const patterns = INFLUENCE_PATTERNS.map(pattern => ({
95
+ name: pattern.name,
96
+ description: pattern.description,
97
+ researchBasis: pattern.researchBasis,
98
+ targetValues: pattern.targetValues,
99
+ mechanism: pattern.mechanism,
100
+ examples: pattern.examples,
101
+ }));
102
+ return {
103
+ content: [
104
+ {
105
+ type: "text",
106
+ text: JSON.stringify({
107
+ count: patterns.length,
108
+ patterns,
109
+ usage: "Use persona_values_lookup to see which patterns a specific persona is susceptible to",
110
+ note: "These patterns describe psychological influence mechanisms. Use ethically for UX optimization, not manipulation.",
111
+ }, null, 2),
112
+ },
113
+ ],
114
+ };
115
+ });
116
+ server.tool("persona_questionnaire_get", "Get the persona questionnaire for building a custom persona. Returns research-backed questions that map to cognitive traits. Use comprehensive=true for all 25 traits, or leave false for 8 core traits. v16.12.0: Now includes optional category question for disability-specific value safeguards.", {
117
+ comprehensive: z.boolean().optional().default(false).describe("Include all 25 traits (true) or just 8 core traits (false)"),
118
+ traits: z.array(z.string()).optional().describe("Specific trait names to include (overrides comprehensive)"),
119
+ includeCategory: z.boolean().optional().default(true).describe("Include category question for disability-aware values (v16.12.0)"),
120
+ }, async ({ comprehensive, traits, includeCategory }) => {
121
+ const { generatePersonaQuestionnaire, formatForAskUserQuestion, CATEGORY_QUESTION } = await import("../../persona-questionnaire.js");
122
+ const questions = generatePersonaQuestionnaire({
123
+ comprehensive,
124
+ traits: traits,
125
+ });
126
+ const formatted = formatForAskUserQuestion(questions);
127
+ return {
128
+ content: [
129
+ {
130
+ type: "text",
131
+ text: JSON.stringify({
132
+ instructions: "Present these questions to the user one at a time or all at once. Each answer maps to a trait value. After collecting answers, use persona_questionnaire_build to create the persona. v16.12.0: Start with the category question to enable disability-aware value safeguards.",
133
+ questionCount: questions.length,
134
+ questions: formatted,
135
+ rawQuestions: questions,
136
+ ...(includeCategory && {
137
+ categoryQuestion: CATEGORY_QUESTION,
138
+ categoryInstructions: "Ask this FIRST to determine persona category. The category affects which values are applied and provides research-based safeguards for disability simulations.",
139
+ }),
140
+ }, null, 2),
141
+ },
142
+ ],
143
+ };
144
+ });
145
+ server.tool("persona_questionnaire_build", "Build a custom persona from questionnaire answers with category-aware value safeguards. Answers should be a map of trait names to values (0-1). Missing traits will use intelligent defaults based on research correlations. v16.12.0: Optionally specify category for disability-specific value handling.", {
146
+ name: z.string().describe("Name for the new persona"),
147
+ description: z.string().describe("Description of the persona"),
148
+ answers: z.record(z.string(), z.number()).describe("Map of trait names to values (0-1), e.g. {patience: 0.25, riskTolerance: 0.75}"),
149
+ category: z.enum(["cognitive", "physical", "sensory", "emotional", "general"]).optional().describe("Persona category for value safeguards (v16.12.0)"),
150
+ valueOverrides: z.record(z.string(), z.number()).optional().describe("Override specific values (0-1) if different from category defaults"),
151
+ save: z.boolean().optional().default(true).describe("Save the persona to disk for future use"),
152
+ }, async ({ name, description, answers, category, valueOverrides, save }) => {
153
+ const { buildTraitsFromAnswers, getTraitLabel, getTraitBehaviors, detectPersonaCategory, buildValuesFromCategory, validateCategoryValues, } = await import("../../persona-questionnaire.js");
154
+ const { createCognitivePersona, saveCustomPersona } = await import("../../personas.js");
155
+ const detectedCategory = category || detectPersonaCategory(name, description);
156
+ const traits = buildTraitsFromAnswers(answers);
157
+ const categoryResult = buildValuesFromCategory(detectedCategory, valueOverrides, traits);
158
+ const warnings = validateCategoryValues(detectedCategory, categoryResult.values);
159
+ const persona = createCognitivePersona(name, description, traits, {});
160
+ let savedPath;
161
+ if (save) {
162
+ savedPath = saveCustomPersona(persona);
163
+ }
164
+ const traitSummary = {};
165
+ for (const [trait, value] of Object.entries(traits)) {
166
+ if (value !== 0.5) {
167
+ traitSummary[trait] = {
168
+ value: value,
169
+ label: getTraitLabel(trait, value),
170
+ behaviors: getTraitBehaviors(trait, value),
171
+ };
172
+ }
173
+ }
174
+ return {
175
+ content: [
176
+ {
177
+ type: "text",
178
+ text: JSON.stringify({
179
+ success: true,
180
+ persona: {
181
+ name: persona.name,
182
+ description: persona.description,
183
+ demographics: persona.demographics,
184
+ },
185
+ cognitiveTraits: traits,
186
+ traitSummary,
187
+ category: {
188
+ detected: detectedCategory,
189
+ strategy: categoryResult.valueStrategy,
190
+ guidance: categoryResult.guidance,
191
+ },
192
+ values: categoryResult.values,
193
+ researchBasis: categoryResult.researchBasis,
194
+ ...(categoryResult.derivations && categoryResult.derivations.length > 0 && {
195
+ valueDerivations: categoryResult.derivations,
196
+ }),
197
+ ...(warnings.length > 0 && { warnings }),
198
+ savedPath,
199
+ usage: `Use persona "${name}" with cognitive-journey or other commands`,
200
+ }, null, 2),
201
+ },
202
+ ],
203
+ };
204
+ });
205
+ server.tool("persona_trait_lookup", "Look up behavioral descriptions for specific trait values. Useful for understanding what a trait value means in practice.", {
206
+ trait: z.string().describe("Trait name (e.g., 'patience', 'riskTolerance')"),
207
+ value: z.number().min(0).max(1).describe("Trait value (0-1)"),
208
+ }, async ({ trait, value }) => {
209
+ const { getTraitReference, getTraitLabel, getTraitBehaviors } = await import("../../persona-questionnaire.js");
210
+ const reference = getTraitReference(trait);
211
+ if (!reference) {
212
+ return {
213
+ content: [
214
+ {
215
+ type: "text",
216
+ text: JSON.stringify({
217
+ error: `Unknown trait: ${trait}`,
218
+ availableTraits: [
219
+ "patience", "riskTolerance", "comprehension", "persistence", "curiosity",
220
+ "workingMemory", "readingTendency", "resilience", "selfEfficacy", "satisficing",
221
+ "trustCalibration", "interruptRecovery", "informationForaging", "changeBlindness",
222
+ "anchoringBias", "timeHorizon", "attributionStyle", "metacognitivePlanning",
223
+ "proceduralFluency", "transferLearning", "authoritySensitivity", "emotionalContagion",
224
+ "fearOfMissingOut", "socialProofSensitivity", "mentalModelRigidity"
225
+ ],
226
+ }, null, 2),
227
+ },
228
+ ],
229
+ };
230
+ }
231
+ return {
232
+ content: [
233
+ {
234
+ type: "text",
235
+ text: JSON.stringify({
236
+ trait: reference.name,
237
+ description: reference.description,
238
+ researchBasis: reference.researchBasis,
239
+ value,
240
+ label: getTraitLabel(trait, value),
241
+ behaviors: getTraitBehaviors(trait, value),
242
+ allLevels: reference.levels,
243
+ }, null, 2),
244
+ },
245
+ ],
246
+ };
247
+ });
248
+ server.tool("persona_category_guidance", "Get guidance for value assignment based on persona category. (v16.12.0) Explains research basis for why cognitive, physical, sensory, and emotional disability categories require different value handling approaches.", {
249
+ category: z.enum(["cognitive", "physical", "sensory", "emotional", "general"]).describe("Persona category to get guidance for"),
250
+ }, async ({ category }) => {
251
+ const { CATEGORY_VALUE_PRESETS, COGNITIVE_SUBTYPES } = await import("../../persona-questionnaire.js");
252
+ const preset = CATEGORY_VALUE_PRESETS.find(p => p.category === category);
253
+ if (!preset) {
254
+ return {
255
+ content: [
256
+ {
257
+ type: "text",
258
+ text: JSON.stringify({
259
+ error: `Unknown category: ${category}`,
260
+ availableCategories: ["cognitive", "physical", "sensory", "emotional", "general"],
261
+ }, null, 2),
262
+ },
263
+ ],
264
+ };
265
+ }
266
+ return {
267
+ content: [
268
+ {
269
+ type: "text",
270
+ text: JSON.stringify({
271
+ category: preset.category,
272
+ description: preset.description,
273
+ valueStrategy: preset.valueStrategy,
274
+ guidance: preset.guidance,
275
+ defaultValues: preset.defaultValues,
276
+ researchBasis: preset.researchBasis,
277
+ ...(category === "cognitive" && {
278
+ subtypes: Object.entries(COGNITIVE_SUBTYPES).map(([key, subtype]) => ({
279
+ name: key,
280
+ values: subtype.values,
281
+ researchBasis: subtype.researchBasis,
282
+ })),
283
+ }),
284
+ }, null, 2),
285
+ },
286
+ ],
287
+ };
288
+ });
289
+ }
290
+ //# sourceMappingURL=values-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"values-tools.js","sourceRoot":"","sources":["../../../src/mcp-tools/base/values-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * CBrowser MCP Tools - Visual Testing Tools
3
+ *
4
+ * @copyright 2026 WF Media (Alexandria Eden) alexandria.shai.eden@gmail.com
5
+ * @license BSL-1.1 (Business Source License 1.1)
6
+ */
7
+ import type { McpServer } from "../types.js";
8
+ /**
9
+ * Register visual testing tools (6 tools: visual_baseline, visual_regression, cross_browser_test, cross_browser_diff, responsive_test, ab_comparison)
10
+ */
11
+ export declare function registerVisualTestingTools(server: McpServer): void;
12
+ //# sourceMappingURL=visual-testing-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visual-testing-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp-tools/base/visual-testing-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAU7C;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqLlE"}
@@ -0,0 +1,159 @@
1
+ /**
2
+ * CBrowser MCP Tools - Visual Testing Tools
3
+ *
4
+ * @copyright 2026 WF Media (Alexandria Eden) alexandria.shai.eden@gmail.com
5
+ * @license BSL-1.1 (Business Source License 1.1)
6
+ */
7
+ import { z } from "zod";
8
+ import { runVisualRegression, runCrossBrowserTest, runResponsiveTest, runABComparison, crossBrowserDiff, captureVisualBaseline, } from "../../visual/index.js";
9
+ /**
10
+ * Register visual testing tools (6 tools: visual_baseline, visual_regression, cross_browser_test, cross_browser_diff, responsive_test, ab_comparison)
11
+ */
12
+ export function registerVisualTestingTools(server) {
13
+ server.tool("visual_baseline", "Capture a visual baseline for a URL", {
14
+ url: z.string().url().describe("URL to capture baseline for"),
15
+ name: z.string().describe("Name for the baseline"),
16
+ }, async ({ url, name }) => {
17
+ const result = await captureVisualBaseline(url, name, {});
18
+ return {
19
+ content: [
20
+ {
21
+ type: "text",
22
+ text: JSON.stringify({
23
+ success: true,
24
+ name: result.name,
25
+ url: result.url,
26
+ timestamp: result.timestamp,
27
+ }, null, 2),
28
+ },
29
+ ],
30
+ };
31
+ });
32
+ server.tool("visual_regression", "Run AI visual regression test against a baseline", {
33
+ url: z.string().url().describe("URL to test"),
34
+ baselineName: z.string().describe("Name of baseline to compare against"),
35
+ }, async ({ url, baselineName }) => {
36
+ const result = await runVisualRegression(url, baselineName);
37
+ return {
38
+ content: [
39
+ {
40
+ type: "text",
41
+ text: JSON.stringify({
42
+ passed: result.passed,
43
+ similarityScore: result.analysis?.similarityScore,
44
+ summary: result.analysis?.summary,
45
+ changes: result.analysis?.changes?.length || 0,
46
+ }, null, 2),
47
+ },
48
+ ],
49
+ };
50
+ });
51
+ server.tool("cross_browser_test", "Test page rendering across multiple browsers", {
52
+ url: z.string().url().describe("URL to test"),
53
+ browsers: z.array(z.enum(["chromium", "firefox", "webkit"])).optional().describe("Browsers to test"),
54
+ }, async ({ url, browsers }) => {
55
+ const result = await runCrossBrowserTest(url, { browsers });
56
+ return {
57
+ content: [
58
+ {
59
+ type: "text",
60
+ text: JSON.stringify({
61
+ url: result.url,
62
+ overallStatus: result.overallStatus,
63
+ summary: result.summary,
64
+ screenshotCount: result.screenshots.length,
65
+ comparisonCount: result.comparisons.length,
66
+ ...(result.missingBrowsers?.length ? { missingBrowsers: result.missingBrowsers } : {}),
67
+ ...(result.availableBrowsers ? { availableBrowsers: result.availableBrowsers } : {}),
68
+ ...(result.suggestion ? { suggestion: result.suggestion } : {}),
69
+ }, null, 2),
70
+ },
71
+ ],
72
+ };
73
+ });
74
+ server.tool("cross_browser_diff", "Quick diff of page metrics across browsers", {
75
+ url: z.string().url().describe("URL to compare"),
76
+ browsers: z.array(z.enum(["chromium", "firefox", "webkit"])).optional().describe("Browsers to compare"),
77
+ }, async ({ url, browsers }) => {
78
+ const result = await crossBrowserDiff(url, browsers);
79
+ return {
80
+ content: [
81
+ {
82
+ type: "text",
83
+ text: JSON.stringify({
84
+ url: result.url,
85
+ browsers: result.browsers,
86
+ differences: result.differences,
87
+ metrics: result.metrics,
88
+ ...(result.missingBrowsers?.length ? { missingBrowsers: result.missingBrowsers } : {}),
89
+ ...(result.availableBrowsers ? { availableBrowsers: result.availableBrowsers } : {}),
90
+ ...(result.suggestion ? { suggestion: result.suggestion } : {}),
91
+ }, null, 2),
92
+ },
93
+ ],
94
+ };
95
+ });
96
+ server.tool("responsive_test", "Test page across different viewport sizes", {
97
+ url: z.string().url().describe("URL to test"),
98
+ viewports: z.array(z.string()).optional().describe("Viewport presets (mobile, tablet, desktop, etc.)"),
99
+ }, async ({ url, viewports }) => {
100
+ const result = await runResponsiveTest(url, { viewports });
101
+ return {
102
+ content: [
103
+ {
104
+ type: "text",
105
+ text: JSON.stringify({
106
+ url: result.url,
107
+ overallStatus: result.overallStatus,
108
+ summary: result.summary,
109
+ viewportsCount: result.screenshots.length,
110
+ }, null, 2),
111
+ },
112
+ ],
113
+ };
114
+ });
115
+ server.tool("ab_comparison", "Compare two URLs visually (staging vs production)", {
116
+ urlA: z.string().url().describe("First URL (e.g., staging)"),
117
+ urlB: z.string().url().describe("Second URL (e.g., production)"),
118
+ labelA: z.string().optional().describe("Label for first URL"),
119
+ labelB: z.string().optional().describe("Label for second URL"),
120
+ }, async ({ urlA, urlB, labelA, labelB }) => {
121
+ const labels = labelA && labelB ? { a: labelA, b: labelB } : undefined;
122
+ const result = await runABComparison(urlA, urlB, { labels });
123
+ return {
124
+ content: [
125
+ {
126
+ type: "text",
127
+ text: JSON.stringify({
128
+ overallStatus: result.overallStatus,
129
+ similarityScore: result.analysis?.similarityScore,
130
+ summary: result.summary,
131
+ differences: result.differences.slice(0, 10).map(d => ({
132
+ type: d.type,
133
+ severity: d.severity,
134
+ description: d.description,
135
+ affectedSide: d.affectedSide,
136
+ })),
137
+ differenceCount: result.differences.length,
138
+ structureSummary: {
139
+ a: {
140
+ headings: result.screenshots.a.structure?.headings?.length || 0,
141
+ links: result.screenshots.a.structure?.links?.length || 0,
142
+ forms: result.screenshots.a.structure?.forms || 0,
143
+ buttons: result.screenshots.a.structure?.buttons?.length || 0,
144
+ },
145
+ b: {
146
+ headings: result.screenshots.b.structure?.headings?.length || 0,
147
+ links: result.screenshots.b.structure?.links?.length || 0,
148
+ forms: result.screenshots.b.structure?.forms || 0,
149
+ buttons: result.screenshots.b.structure?.buttons?.length || 0,
150
+ },
151
+ },
152
+ duration: result.duration,
153
+ }, null, 2),
154
+ },
155
+ ],
156
+ };
157
+ });
158
+ }
159
+ //# sourceMappingURL=visual-testing-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visual-testing-tools.js","sourceRoot":"","sources":["../../../src/mcp-tools/base/visual-testing-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * CBrowser MCP Tools - Enterprise Stubs
3
+ *
4
+ * 22 stub tools that return upgrade messages for Enterprise-only features:
5
+ * - API Key Management (3): set_api_key, clear_api_key, api_key_status
6
+ * - API Key Prompt (1): get_api_key_prompt
7
+ * - Autonomous Journey (1): cognitive_journey_autonomous
8
+ * - Marketing Core (8): marketing_campaign_create, marketing_campaign_run,
9
+ * marketing_campaign_influence_matrix, marketing_campaign_levers, marketing_funnel_analysis,
10
+ * marketing_competitive_compare, marketing_personas_list, marketing_report_result
11
+ * - Marketing Discovery (2): marketing_audience_discover, marketing_audience_discover_status
12
+ * - Stealth (7): stealth_status, stealth_enable, stealth_disable, stealth_check,
13
+ * stealth_diagnose, cloudflare_detect, cloudflare_wait
14
+ *
15
+ * @copyright 2026 WF Media (Alexandria Eden) alexandria.shai.eden@gmail.com
16
+ * @license BSL-1.1 (Business Source License 1.1)
17
+ */
18
+ import type { McpServer } from "./types.js";
19
+ /**
20
+ * Register enterprise stub tools (22 stubs)
21
+ */
22
+ export declare function registerEnterpriseStubs(server: McpServer): void;
23
+ //# sourceMappingURL=enterprise-stubs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enterprise-stubs.d.ts","sourceRoot":"","sources":["../../src/mcp-tools/enterprise-stubs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAuB5C;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqZ/D"}