Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions src/tools/accessibility.ts
Original file line number Diff line number Diff line change
Expand Up @@ -442,6 +442,13 @@ export default function addAccessibilityTools(
"Any accessibility, a11y, WCAG, or web accessibility question",
),
},
{
title: "Accessibility Expert",
readOnlyHint: true,
openWorldHint: false,
destructiveHint: false,
idempotentHint: true,
},
async (args) => {
return await executeAccessibilityRAG(args, server, config);
},
Expand All @@ -462,6 +469,13 @@ export default function addAccessibilityTools(
.optional()
.describe("Enable advanced accessibility rules in the scan settings"),
},
{
title: "Start Accessibility Scan",
readOnlyHint: false,
openWorldHint: false,
destructiveHint: false,
idempotentHint: false,
},
async (args, context) => {
return await executeAccessibilityScan(args, context, server, config);
},
Expand Down Expand Up @@ -499,6 +513,13 @@ export default function addAccessibilityTools(
.optional()
.describe("CSS selector for submit button (required for form auth)"),
},
{
title: "Create Accessibility Auth Config",
readOnlyHint: false,
openWorldHint: false,
destructiveHint: false,
idempotentHint: false,
},
async (args) => {
try {
const creds = await elicitCredentialsIfSupported(
Expand Down Expand Up @@ -558,6 +579,13 @@ export default function addAccessibilityTools(
{
configId: z.number().describe("ID of the auth configuration to retrieve"),
},
{
title: "Get Accessibility Auth Config",
readOnlyHint: true,
openWorldHint: false,
destructiveHint: false,
idempotentHint: true,
},
async (args) => {
return await executeGetAuthConfig(args, server, config);
},
Expand All @@ -578,6 +606,13 @@ export default function addAccessibilityTools(
.optional()
.describe("Character offset for pagination (default: 0)"),
},
{
title: "Fetch Accessibility Issues",
readOnlyHint: true,
openWorldHint: false,
destructiveHint: false,
idempotentHint: true,
},
async (args) => {
return await executeFetchAccessibilityIssues(args, server, config);
},
Expand Down
21 changes: 21 additions & 0 deletions src/tools/appautomate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,13 @@ export default function addAppAutomationTools(
"The path to the .apk or .ipa file. Required for app installation.",
),
},
{
title: "Take App Screenshot",
readOnlyHint: false,
openWorldHint: false,
destructiveHint: false,
idempotentHint: false,
},
async (args) => {
try {
trackMCP(
Expand Down Expand Up @@ -371,6 +378,13 @@ export default function addAppAutomationTools(
"runAppTestsOnBrowserStack",
RUN_APP_AUTOMATE_DESCRIPTION,
RUN_APP_AUTOMATE_SCHEMA,
{
title: "Run App Tests on BrowserStack",
readOnlyHint: false,
openWorldHint: false,
destructiveHint: false,
idempotentHint: false,
},
async (args) => {
try {
trackMCP(
Expand Down Expand Up @@ -412,6 +426,13 @@ export default function addAppAutomationTools(
"setupBrowserStackAppAutomateTests",
SETUP_APP_AUTOMATE_DESCRIPTION,
SETUP_APP_AUTOMATE_SCHEMA,
{
title: "Set Up App Automate Tests",
readOnlyHint: true,
openWorldHint: false,
destructiveHint: false,
idempotentHint: true,
},
async (args) => {
try {
return await setupAppAutomateHandler(args, config);
Expand Down
7 changes: 7 additions & 0 deletions src/tools/applive.ts
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,13 @@ export default function addAppLiveTools(
"The path to the .ipa or .apk file to install on the device. Always ask the user for the app path, do not assume it.",
),
},
{
title: "Run App Live Session",
readOnlyHint: false,
openWorldHint: false,
destructiveHint: false,
idempotentHint: false,
},
async (args) => {
try {
trackMCP(
Expand Down
7 changes: 7 additions & 0 deletions src/tools/automate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,13 @@ export default function addAutomationTools(
.enum([SessionType.Automate, SessionType.AppAutomate])
.describe("Type of BrowserStack session"),
},
{
title: "Fetch Automation Screenshots",
readOnlyHint: true,
openWorldHint: false,
destructiveHint: false,
idempotentHint: true,
},
async (args) => {
try {
trackMCP(
Expand Down
7 changes: 7 additions & 0 deletions src/tools/bstack-sdk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,13 @@ export function registerRunBrowserStackTestsTool(
"setupBrowserStackAutomateTests",
RUN_ON_BROWSERSTACK_DESCRIPTION,
RunTestsOnBrowserStackParamsShape,
{
title: "Set Up Automate Tests",
readOnlyHint: true,
openWorldHint: false,
destructiveHint: false,
idempotentHint: true,
},
async (args) => {
try {
trackMCP(
Expand Down
7 changes: 7 additions & 0 deletions src/tools/build-insights.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,13 @@ export default function addBuildInsightsTools(
{
buildId: z.string().describe("The build UUID of the BrowserStack build"),
},
{
title: "Fetch Build Insights",
readOnlyHint: true,
openWorldHint: false,
destructiveHint: false,
idempotentHint: true,
},
async (args) => {
try {
trackMCP(
Expand Down
7 changes: 7 additions & 0 deletions src/tools/get-failure-logs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,13 @@ export default function registerGetFailureLogs(
)
.describe("The types of logs to fetch."),
},
{
title: "Get Failure Logs",
readOnlyHint: true,
openWorldHint: false,
destructiveHint: false,
idempotentHint: true,
},
async (args) => {
try {
trackMCP(
Expand Down
7 changes: 7 additions & 0 deletions src/tools/live.ts
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,13 @@ export default function addBrowserLiveTools(
"runBrowserLiveSession",
"Launch a BrowserStack Live session (desktop or mobile).",
LiveArgsShape,
{
title: "Run Browser Live Session",
readOnlyHint: false,
openWorldHint: true,
destructiveHint: false,
idempotentHint: false,
},
async (args) => {
try {
trackMCP(
Expand Down
7 changes: 7 additions & 0 deletions src/tools/observability.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,13 @@ export default function addObservabilityTools(
"Name of the project to get failures for. This is the 'projectName' key in the browserstack.yml file. If not sure, ask the user for the project name.",
),
},
{
title: "Get Failures in Last Run",
readOnlyHint: true,
openWorldHint: false,
destructiveHint: false,
idempotentHint: true,
},
async (args) => {
try {
trackMCP(
Expand Down
49 changes: 49 additions & 0 deletions src/tools/percy-sdk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,13 @@ export function registerPercyTools(
"percyVisualTestIntegrationAgent",
SIMULATE_PERCY_CHANGE_DESCRIPTION,
SetUpPercyParamsShape,
{
title: "Percy Visual Test Integration Agent",
readOnlyHint: true,
openWorldHint: false,
destructiveHint: false,
idempotentHint: true,
},
async (args) => {
try {
trackMCP(
Expand All @@ -82,6 +89,13 @@ export function registerPercyTools(
"expandPercyVisualTesting",
SETUP_PERCY_DESCRIPTION,
SetUpPercyParamsShape,
{
title: "Expand Percy Visual Testing",
readOnlyHint: true,
openWorldHint: false,
destructiveHint: false,
idempotentHint: true,
},
async (args) => {
try {
trackMCP(
Expand All @@ -100,6 +114,13 @@ export function registerPercyTools(
"addPercySnapshotCommands",
PERCY_SNAPSHOT_COMMANDS_DESCRIPTION,
UpdateTestFileWithInstructionsParams,
{
title: "Add Percy Snapshot Commands",
readOnlyHint: true,
openWorldHint: false,
destructiveHint: false,
idempotentHint: true,
},
async (args) => {
try {
trackMCP(
Expand All @@ -123,6 +144,13 @@ export function registerPercyTools(
"listTestFiles",
LIST_TEST_FILES_DESCRIPTION,
{},
{
title: "List Test Files",
readOnlyHint: true,
openWorldHint: false,
destructiveHint: false,
idempotentHint: true,
},
async () => {
try {
trackMCP("listTestFiles", server.server.getClientVersion()!, config);
Expand All @@ -137,6 +165,13 @@ export function registerPercyTools(
"runPercyScan",
"Run a Percy visual test scan. Example prompts : Run this Percy build/scan. Never run percy scan/build without this tool",
RunPercyScanParamsShape,
{
title: "Run Percy Scan",
readOnlyHint: true,
openWorldHint: false,
destructiveHint: false,
idempotentHint: true,
},
async (args) => {
try {
trackMCP("runPercyScan", server.server.getClientVersion()!, config);
Expand All @@ -151,6 +186,13 @@ export function registerPercyTools(
"fetchPercyChanges",
"Retrieves and summarizes all visual changes detected by Percy AI between the latest and previous builds, helping quickly review what has changed in your project.",
FetchPercyChangesParamsShape,
{
title: "Fetch Percy Changes",
readOnlyHint: true,
openWorldHint: false,
destructiveHint: false,
idempotentHint: true,
},
async (args) => {
try {
trackMCP(
Expand All @@ -169,6 +211,13 @@ export function registerPercyTools(
"managePercyBuildApproval",
"Approve or reject a Percy build",
ManagePercyBuildApprovalParamsShape,
{
title: "Manage Percy Build Approval",
readOnlyHint: false,
openWorldHint: false,
destructiveHint: true,
idempotentHint: true,
},
async (args) => {
try {
trackMCP(
Expand Down
28 changes: 28 additions & 0 deletions src/tools/rca-agent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,13 @@ export default function addRCATools(
"fetchRCA",
"Fetch AI Root Cause Analysis for the current user's failed BrowserStack Automate/App-Automate tests. Suggests fixes only; never auto-apply, require explicit user approval.",
FETCH_RCA_PARAMS,
{
title: "Fetch Root Cause Analysis",
readOnlyHint: true,
openWorldHint: false,
destructiveHint: false,
idempotentHint: true,
},
async (args) => {
try {
trackMCP(
Expand All @@ -208,6 +215,13 @@ export default function addRCATools(
"getBuildId",
"Get the BrowserStack build ID for a given project and build name, scoped to the current user's builds.",
GET_BUILD_ID_PARAMS,
{
title: "Get Build ID",
readOnlyHint: true,
openWorldHint: false,
destructiveHint: false,
idempotentHint: true,
},
async (args) => {
try {
trackMCP(
Expand All @@ -227,6 +241,13 @@ export default function addRCATools(
"listBuildId",
"Get the latest build ID for a project and build name, across all users (no user filter).",
GET_BUILD_ID_PARAMS,
{
title: "List Build IDs",
readOnlyHint: true,
openWorldHint: false,
destructiveHint: false,
idempotentHint: true,
},
async (args) => {
try {
trackMCP(
Expand All @@ -246,6 +267,13 @@ export default function addRCATools(
"listTestIds",
"List test IDs from a BrowserStack Automate build, optionally filtered by status",
LIST_TEST_IDS_PARAMS,
{
title: "List Test IDs",
readOnlyHint: true,
openWorldHint: false,
destructiveHint: false,
idempotentHint: true,
},
async (args) => {
try {
trackMCP(
Expand Down
14 changes: 14 additions & 0 deletions src/tools/selfheal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -596,6 +596,13 @@ export default function addSelfHealTools(
.describe("Build UUID. Fetches the build's self-healing report.")
.optional(),
},
{
title: "Fetch Self-Healed Selectors",
readOnlyHint: true,
openWorldHint: false,
destructiveHint: false,
idempotentHint: true,
},
async (args) => {
try {
trackMCP(
Expand Down Expand Up @@ -670,6 +677,13 @@ export default function addSelfHealTools(
"Sessions to plan edits for. See tool description for accepted shapes.",
),
},
{
title: "Prepare Self-Healing Plan",
readOnlyHint: true,
openWorldHint: false,
destructiveHint: false,
idempotentHint: true,
},
async (args) => {
try {
trackMCP(
Expand Down
Loading
Loading