@browserstack/mcp-server 2.3.0-beta.7 → 2.3.0-beta.9

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.
@@ -59,7 +59,7 @@ export default function addAppLiveTools(server, config) {
59
59
  // screenshot in it, and every eval where an agent was asked to operate an app and chose
60
60
  // this tool ended with "my tools can start it but can't tap anything in it". The
61
61
  // description says so, and names the surface that can — only when that surface is on.
62
- const description = "Open a manual App Live session for the user to operate by hand. It cannot be driven by the agent." +
62
+ const description = "Open a manual App Live session for the user to operate by hand. It cannot be driven by the agent, and it uploads the app to App Live's own store, which agent-driven device sessions cannot use." +
63
63
  (capabilityRegistryEnabled()
64
64
  ? " To tap, type or read the app yourself, use a mobiledevicecontrol session via invokeCapability."
65
65
  : "");
@@ -248,11 +248,13 @@ export function addCapabilityRegistryTools(server, deps, config) {
248
248
  ? { verdict: "blank" }
249
249
  : { verdict: "settled", product: ambiguity.settled })
250
250
  : undefined;
251
+ /** The product's title for the question put to a person; the key stays the handle. */
252
+ const label = (name) => registry.index.products[name]?.title ?? name;
251
253
  const routing = ambiguity.products.length > 1
252
254
  ? {
253
255
  verdict: "products_clash",
254
256
  note: `These products clash over ${ambiguity.terms.map((t) => `'${t}'`).join(", ")} — ` +
255
- `the same word means something different in ${ambiguity.products.join(" and ")}. ` +
257
+ `the same word means something different in ${ambiguity.products.map(label).join(" and ")}. ` +
256
258
  "ASK THE USER which they mean before searching or invoking anything; do not " +
257
259
  "search each product in turn and merge the results. Searching before you " +
258
260
  "ask will be refused: send the user's answer in `user_words` with this " +
@@ -260,9 +262,10 @@ export function addCapabilityRegistryTools(server, deps, config) {
260
262
  routing_token: listingToken,
261
263
  shared_terms: ambiguity.terms,
262
264
  products: ambiguity.products,
263
- question: `Which product do you mean — ${ambiguity.products.join(" or ")}?`,
265
+ question: `Which product do you mean — ${ambiguity.products.map(label).join(" or ")}?`,
264
266
  senses: ambiguity.products.map((name) => ({
265
267
  product: name,
268
+ title: label(name),
266
269
  means: ambiguity.terms
267
270
  .map((term) => {
268
271
  const entities = registry.index.products[name]?.entities ?? {};
@@ -293,6 +296,7 @@ export function addCapabilityRegistryTools(server, deps, config) {
293
296
  routing_token: listingToken,
294
297
  question: `Which product do you mean — ${registry
295
298
  .productNames()
299
+ .map(label)
296
300
  .join(" or ")}?`,
297
301
  }
298
302
  : query
@@ -318,6 +322,9 @@ export function addCapabilityRegistryTools(server, deps, config) {
318
322
  ...(routing ? { routing } : {}),
319
323
  products: registry.productNames().map((name) => ({
320
324
  name,
325
+ ...(registry.index.products[name].title
326
+ ? { title: registry.index.products[name].title }
327
+ : {}),
321
328
  summary: registry.index.products[name].summary,
322
329
  // THE ENTITIES AND WHAT EACH ONE IS. Routing is this tool's whole job, and a
323
330
  // product summary alone does not do it: "add a tag to xyz test" reads as
@@ -415,6 +415,14 @@ export interface AuthScheme {
415
415
  scopes?: string[];
416
416
  }
417
417
  export interface ProductIndex {
418
+ /**
419
+ * The product's name as a person would say it — "Mobile Device Control", not the key.
420
+ *
421
+ * The key stays the handle every call takes; this is what the routing question and
422
+ * the product listing show, because "which do you mean — mobiledevicecontrol or tm?"
423
+ * is a question asked in our vocabulary rather than the user's.
424
+ */
425
+ title?: string;
418
426
  summary: string;
419
427
  /**
420
428
  * Words that route to this product but are not the name of anything in it.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@browserstack/mcp-server",
3
- "version": "2.3.0-beta.7",
3
+ "version": "2.3.0-beta.9",
4
4
  "description": "BrowserStack's Official MCP Server",
5
5
  "mcpName": "io.github.browserstack/mcp-server",
6
6
  "main": "dist/index.js",