@modootoday/datalab-extension-mcp 1.8.6 → 1.8.7

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/README.en.md CHANGED
@@ -55,10 +55,10 @@ Avoid sharing a screenshot or the copied setup. If it may have leaked, press **[
55
55
  One command finds **every** AI app on your computer and connects them automatically. Nothing to do per app.
56
56
 
57
57
  1. **Open a terminal** — on Windows type `cmd` in the search box → "Command Prompt"; on Mac press `⌘+Space` and type `Terminal`; on Linux open your terminal app (often `Ctrl+Alt+T`).
58
- 2. **Paste this command and press Enter.** (`@1.8.6` is the pinned version, so the connector never changes behind your back.)
58
+ 2. **Paste this command and press Enter.** (`@1.8.7` is the pinned version, so the connector never changes behind your back.)
59
59
 
60
60
  ```
61
- npx -y @modootoday/datalab-extension-mcp@1.8.6 install
61
+ npx -y @modootoday/datalab-extension-mcp@1.8.7 install
62
62
  ```
63
63
 
64
64
  Lines of English scrolling by is normal. This only downloads and runs the connector — it touches nothing else.
@@ -223,7 +223,7 @@ Exactly what it says. Open Chrome, keep the DataLab Tools side panel open, and i
223
223
 
224
224
  That's expected — **it's deliberate.**
225
225
 
226
- There are 187 tools. Sending all of them as a list runs into the cap each AI app
226
+ There are 188 tools. Sending all of them as a list runs into the cap each AI app
227
227
  sets: some quietly drop whatever doesn't fit, some refuse the connection outright.
228
228
  So the common ones go in the list, and **the rest are handed over as an answer when
229
229
  the AI asks for them.**
@@ -252,7 +252,7 @@ Start it again after a full quit and it picks the tools up. If they still aren't
252
252
  - **When the connection disappears** — run the very command you used at the start once more; it safely re-registers. (Some AI apps clean up their settings file and drop the connection.)
253
253
 
254
254
  ```
255
- npx -y @modootoday/datalab-extension-mcp@1.8.6 install
255
+ npx -y @modootoday/datalab-extension-mcp@1.8.7 install
256
256
  ```
257
257
 
258
258
  - **`'npx' is not recognized...`** — Node.js isn't installed. The "No Node.js?" one-liner in Step 2 is the simplest fix.
@@ -282,7 +282,7 @@ Start it again after a full quit and it picks the tools up. If they still aren't
282
282
  1. Run this in a terminal (it removes the entries registered in your AI apps).
283
283
 
284
284
  ```
285
- npx -y @modootoday/datalab-extension-mcp@1.8.6 uninstall
285
+ npx -y @modootoday/datalab-extension-mcp@1.8.7 uninstall
286
286
  ```
287
287
 
288
288
  2. Turn **MCP 연결** off in the extension settings. The panel is the bridge, so with it off a leftover config line can look nothing up.
package/README.md CHANGED
@@ -49,10 +49,10 @@ Claude 같은 AI 앱을 데이터랩툴즈에 연결해 주는 작은 무료 프
49
49
  명령 한 줄이면 컴퓨터에 있는 AI 앱을 **모두 자동으로** 찾아 연결해 줘요. 앱마다 따로 할 일은 없어요.
50
50
 
51
51
  1. **터미널을 열어요** — Windows는 검색창에 `cmd` → "명령 프롬프트", Mac은 `⌘+스페이스`로 `터미널`, Linux는 터미널 앱(보통 `Ctrl+Alt+T`)이에요.
52
- 2. **아래 명령을 붙여넣고 Enter를 눌러요.** (`@1.8.6`은 커넥터가 나도 모르게 바뀌지 않도록 고정한 버전이에요.)
52
+ 2. **아래 명령을 붙여넣고 Enter를 눌러요.** (`@1.8.7`은 커넥터가 나도 모르게 바뀌지 않도록 고정한 버전이에요.)
53
53
 
54
54
  ```
55
- npx -y @modootoday/datalab-extension-mcp@1.8.6 install
55
+ npx -y @modootoday/datalab-extension-mcp@1.8.7 install
56
56
  ```
57
57
 
58
58
  영어 글자가 여러 줄 올라오는 건 정상이에요. 이 명령은 커넥터를 내려받아 실행할 뿐, 다른 건 건드리지 않아요.
@@ -193,7 +193,7 @@ AI 앱이 켜질 때 받은 옛 코드로 커넥터가 돌고 있어서 그래
193
193
 
194
194
  정상이에요. **일부러 그렇게 보냅니다.**
195
195
 
196
- 전체 도구는 187개인데, 그걸 전부 목록으로 보내면 AI 앱마다 정해 둔 상한에 걸려요.
196
+ 전체 도구는 188개인데, 그걸 전부 목록으로 보내면 AI 앱마다 정해 둔 상한에 걸려요.
197
197
  어떤 앱은 넘치는 만큼 조용히 잘라내고, 어떤 앱은 아예 연결을 거부해요. 그래서 자주 쓰는
198
198
  것만 목록에 올리고, 나머지는 **AI가 물어보면 답으로 건네줍니다.**
199
199
 
@@ -220,7 +220,7 @@ AI가 "그런 기능은 없다" 고 답하면, **"도구 목록을 확인해 보
220
220
  - **연결이 사라졌을 때** — 처음 실행했던 그 명령을 한 번 더 실행하면 안전하게 다시 등록돼요. (일부 AI 앱이 설정 파일을 정리하며 연결을 지우기도 해요.)
221
221
 
222
222
  ```
223
- npx -y @modootoday/datalab-extension-mcp@1.8.6 install
223
+ npx -y @modootoday/datalab-extension-mcp@1.8.7 install
224
224
  ```
225
225
 
226
226
  - **`'npx'을(는) 내부 또는 외부 명령...`** — Node.js가 없는 거예요. 위 2단계의 "Node.js가 없다면" 한 줄 설치가 가장 간단해요.
@@ -250,7 +250,7 @@ AI가 "그런 기능은 없다" 고 답하면, **"도구 목록을 확인해 보
250
250
  1. 터미널에서 아래 명령을 실행해요(AI 앱에 등록된 설정을 지워 줘요).
251
251
 
252
252
  ```
253
- npx -y @modootoday/datalab-extension-mcp@1.8.6 uninstall
253
+ npx -y @modootoday/datalab-extension-mcp@1.8.7 uninstall
254
254
  ```
255
255
 
256
256
  2. 확장 설정에서 **MCP 연결을 꺼요.** 패널이 브릿지라, 꺼 두면 어딘가 설정 줄이 남아 있어도 AI 앱이 아무것도 조회할 수 없어요.
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  DEFAULT_HOST,
3
3
  DEFAULT_PORT
4
- } from "./chunk-TPYHNPF4.js";
4
+ } from "./chunk-YTMY2DAN.js";
5
5
  import {
6
6
  TOKEN_PROMPT_GUIDE,
7
7
  TOKEN_PROMPT_QUESTION,
@@ -4,7 +4,7 @@ import {
4
4
  mediaToolDescriptors,
5
5
  spawnDaemon,
6
6
  tryConnect
7
- } from "./chunk-TPYHNPF4.js";
7
+ } from "./chunk-YTMY2DAN.js";
8
8
  import {
9
9
  __export
10
10
  } from "./chunk-MLKGABMK.js";
@@ -14601,6 +14601,15 @@ var HelloNackReasonSchema = external_exports.enum([
14601
14601
  /** Origin header absent or not our extension. */
14602
14602
  "forbidden_origin"
14603
14603
  ]);
14604
+ var BrowserRoutingSchema = external_exports.object({
14605
+ targetBrowserId: external_exports.string(),
14606
+ explicit: external_exports.boolean(),
14607
+ fallbackFromPinned: external_exports.boolean(),
14608
+ connectedBrowserCount: external_exports.number().int().nonnegative()
14609
+ });
14610
+ var BrowserRouteEchoSchema = external_exports.object({
14611
+ browserId: external_exports.string()
14612
+ });
14604
14613
  var HelloNackSchema = external_exports.object({
14605
14614
  t: external_exports.literal("hello_nack"),
14606
14615
  reason: HelloNackReasonSchema,
@@ -14613,7 +14622,8 @@ var BridgeRequestSchema = external_exports.discriminatedUnion("method", [
14613
14622
  external_exports.object({
14614
14623
  t: external_exports.literal("req"),
14615
14624
  id: external_exports.string(),
14616
- method: external_exports.literal("tools/list")
14625
+ method: external_exports.literal("tools/list"),
14626
+ routing: BrowserRoutingSchema.optional()
14617
14627
  }),
14618
14628
  external_exports.object({
14619
14629
  t: external_exports.literal("req"),
@@ -14621,7 +14631,8 @@ var BridgeRequestSchema = external_exports.discriminatedUnion("method", [
14621
14631
  method: external_exports.literal("tools/call"),
14622
14632
  /** Must be on the read-only allowlist — enforced extension-side. */
14623
14633
  name: external_exports.string(),
14624
- args: external_exports.record(external_exports.string(), external_exports.unknown())
14634
+ args: external_exports.record(external_exports.string(), external_exports.unknown()),
14635
+ routing: BrowserRoutingSchema.optional()
14625
14636
  })
14626
14637
  ]);
14627
14638
  var elapsedMs = external_exports.number().nonnegative().optional();
@@ -14631,7 +14642,8 @@ var BridgeResultSchema = external_exports.union([
14631
14642
  id: external_exports.string(),
14632
14643
  ok: external_exports.literal(true),
14633
14644
  result: external_exports.unknown(),
14634
- ms: elapsedMs
14645
+ ms: elapsedMs,
14646
+ route: BrowserRouteEchoSchema.optional()
14635
14647
  }),
14636
14648
  external_exports.object({
14637
14649
  t: external_exports.literal("res"),
@@ -14641,7 +14653,8 @@ var BridgeResultSchema = external_exports.union([
14641
14653
  message: external_exports.string(),
14642
14654
  // Carried on failure too: the timing of a call that FAILED is exactly
14643
14655
  // what tells a timeout apart from a refusal.
14644
- ms: elapsedMs
14656
+ ms: elapsedMs,
14657
+ route: BrowserRouteEchoSchema.optional()
14645
14658
  })
14646
14659
  ]);
14647
14660
  var BridgeHeartbeatSchema = external_exports.object({
@@ -14658,7 +14671,8 @@ var BridgeUpstreamSchema = external_exports.union([
14658
14671
  external_exports.object({
14659
14672
  t: external_exports.literal("tools"),
14660
14673
  id: external_exports.string(),
14661
- tools: external_exports.array(BridgeToolDescriptorSchema)
14674
+ tools: external_exports.array(BridgeToolDescriptorSchema),
14675
+ route: BrowserRouteEchoSchema.optional()
14662
14676
  })
14663
14677
  ]);
14664
14678
  var FrameEnvelopeSchema = external_exports.object({ t: external_exports.string() });
@@ -14666,6 +14680,7 @@ var REQUEST_DEADLINE_MS = 9e4;
14666
14680
  var EXEC_RESERVE_MS = 3e4;
14667
14681
  var CONFIRM_TIMEOUT_MS = REQUEST_DEADLINE_MS - EXEC_RESERVE_MS;
14668
14682
  var READ_ONLY_TOOLS = [
14683
+ "datalab_browsers",
14669
14684
  // --- Search-ad estimates. Uses the user's own advertiser API credentials. ---
14670
14685
  "ad_average_position_bid",
14671
14686
  "ad_competition_density",
@@ -15007,6 +15022,10 @@ var REASON_POLICY = Object.freeze({
15007
15022
  */
15008
15023
  disconnected: Object.freeze({ retryable: true }),
15009
15024
  superseded: Object.freeze({ retryable: true }),
15025
+ browser_detached: Object.freeze({
15026
+ retryable: true,
15027
+ retryAfterMs: 1e3
15028
+ }),
15010
15029
  // --- The request itself must change ---
15011
15030
  unknown_tool: Object.freeze({ retryable: false }),
15012
15031
  invalid_args: Object.freeze({ retryable: false }),
@@ -15023,6 +15042,7 @@ var REASON_POLICY = Object.freeze({
15023
15042
  // --- The connection itself must be repaired ---
15024
15043
  not_connected: Object.freeze({ retryable: false }),
15025
15044
  unauthorized: Object.freeze({ retryable: false }),
15045
+ browser_unknown: Object.freeze({ retryable: false }),
15026
15046
  // --- Staging: the request must change, except where nobody knows yet ---
15027
15047
  stale_fence: Object.freeze({ retryable: false }),
15028
15048
  already_sealed: Object.freeze({ retryable: false }),
@@ -15128,6 +15148,7 @@ var BY_PREFIX = [
15128
15148
  ];
15129
15149
  var GALLERY = ["gallery_image_add"];
15130
15150
  var EXPLICIT = [
15151
+ { slug: "connection", tools: ["datalab_browsers"] },
15131
15152
  { slug: "gallery", tools: GALLERY },
15132
15153
  { slug: "blog-brief", tools: BLOG_BRIEF },
15133
15154
  { slug: "blog-insights", tools: BLOG_INSIGHTS },
@@ -15138,6 +15159,11 @@ var EXPLICIT = [
15138
15159
  { slug: "benchmark", tools: ["benchmark_gap"] }
15139
15160
  ];
15140
15161
  var META = [
15162
+ {
15163
+ slug: "connection",
15164
+ label: "\uC5F0\uACB0 \uBE0C\uB77C\uC6B0\uC800",
15165
+ summary: "\uC5EC\uB7EC \uBE0C\uB77C\uC6B0\uC800\xB7\uD504\uB85C\uD544 \uC911 \uB3C4\uAD6C\uB97C \uC2E4\uD589\uD560 \uACF3\uC744 \uACE0\uB978\uB2E4"
15166
+ },
15141
15167
  {
15142
15168
  slug: "blog-brief",
15143
15169
  label: "\uC624\uB298\uC758 \uBE14\uB85C\uADF8 \uBE0C\uB9AC\uD551",
@@ -15274,6 +15300,12 @@ var CALL_TOOL = "datalab_call";
15274
15300
  var CONFIRM_STATUS_TOOL = "datalab_confirm_status";
15275
15301
  var SESSION_STATE_TOOL = "datalab_session_state";
15276
15302
  var BROWSERS_TOOL = "datalab_browsers";
15303
+ function browserProperty() {
15304
+ return {
15305
+ type: "string",
15306
+ description: `${BROWSERS_TOOL} \uAC00 \uB3CC\uB824\uC900 \uC2E4\uD589 \uB300\uC0C1 \uBE0C\uB77C\uC6B0\uC800 id`
15307
+ };
15308
+ }
15277
15309
  var DESCRIBE_PAGE_SIZE = 10;
15278
15310
  function discoveryDescriptors(entries) {
15279
15311
  const sets = buildToolsets(entries.map((e) => e.name));
@@ -15298,7 +15330,8 @@ function discoveryDescriptors(entries) {
15298
15330
  withSchemas: {
15299
15331
  type: "boolean",
15300
15332
  description: `\uC778\uC790 \uC2A4\uD0A4\uB9C8\uAE4C\uC9C0 \uD568\uAED8 \uBC1B\uB294\uB2E4 \u2014 \uADF8\uB7EC\uBA74 ${DESCRIBE_TOOL} \uC5C6\uC774 \uBC14\uB85C \uC2E4\uD589\uD560 \uC218 \uC788\uB2E4. toolset \uC774\uB098 query \uC640 \uAC19\uC774 \uC904 \uB54C\uB9CC \uC4F4\uB2E4`
15301
- }
15333
+ },
15334
+ browser: browserProperty()
15302
15335
  },
15303
15336
  additionalProperties: false
15304
15337
  }
@@ -15315,7 +15348,8 @@ function discoveryDescriptors(entries) {
15315
15348
  items: { type: "string" },
15316
15349
  maxItems: DESCRIBE_PAGE_SIZE,
15317
15350
  description: `\uC2A4\uD0A4\uB9C8\uB97C \uBCFC \uB3C4\uAD6C \uC774\uB984 (\uD55C \uBC88\uC5D0 ${DESCRIBE_PAGE_SIZE}\uAC1C\uAE4C\uC9C0)`
15318
- }
15351
+ },
15352
+ browser: browserProperty()
15319
15353
  },
15320
15354
  required: ["tools"],
15321
15355
  additionalProperties: false
@@ -15333,7 +15367,8 @@ function discoveryDescriptors(entries) {
15333
15367
  args: {
15334
15368
  type: "object",
15335
15369
  description: `\uADF8 \uB3C4\uAD6C\uC758 \uC778\uC790. ${DESCRIBE_TOOL} \uC758 \uC2A4\uD0A4\uB9C8\uB97C \uB530\uB978\uB2E4`
15336
- }
15370
+ },
15371
+ browser: browserProperty()
15337
15372
  },
15338
15373
  required: ["tool"],
15339
15374
  additionalProperties: false
@@ -15349,7 +15384,8 @@ function discoveryDescriptors(entries) {
15349
15384
  ticket: {
15350
15385
  type: "string",
15351
15386
  description: `${CALL_TOOL} \uC774 \uB3CC\uB824\uC900 ticket \uAC12 \uADF8\uB300\uB85C`
15352
- }
15387
+ },
15388
+ browser: browserProperty()
15353
15389
  },
15354
15390
  required: ["ticket"],
15355
15391
  additionalProperties: false
@@ -15363,7 +15399,7 @@ function sessionStateDescriptor() {
15363
15399
  description: "\uC9C0\uAE08 \uC774 \uBE0C\uB77C\uC6B0\uC800\uC5D0\uC11C \uD655\uC778 \uCC3D \uC5C6\uC774 \uC5BC\uB9C8\uB098 \uB354 \uC791\uC5C5\uD560 \uC218 \uC788\uB294\uC9C0, \uADF8\uB9AC\uACE0 \uC791\uC5C5\uD560 \uB300\uC0C1\uC774 \uC2E4\uC81C\uB85C \uC5F4\uB824 \uC788\uB294\uC9C0 \uC54C\uB824\uC900\uB2E4. \uC5EC\uB7EC \uBC88\uC758 \uD3B8\uC9D1\uC774\uB098 \uBC30\uCE58\uB97C \uC2DC\uC791\uD558\uAE30 \uC804\uC5D0 \uBA3C\uC800 \uBD80\uB978\uB2E4 \u2014 \uB0A8\uC740 \uC2DC\uAC04\uC774 \uC9E7\uC73C\uBA74 \uB3C4\uC911\uC5D0 \uD655\uC778 \uCC3D\uC774 \uB728\uAE30 \uC2DC\uC791\uD558\uACE0, \uC0AC\uC6A9\uC790\uAC00 \uC790\uB9AC\uC5D0 \uC5C6\uC73C\uBA74 \uAC70\uAE30\uC11C \uBA48\uCD98\uB2E4. surfaces \uB294 \uAE00\uC4F0\uAE30 \uCC3D\xB7\uC0AC\uC9C4 \uD3B8\uC9D1\uAE30\xB7\uC601\uC0C1 \uD3B8\uC9D1\uAE30\uAC00 \uAC01\uAC01 \uC900\uBE44\uB410\uB294\uC9C0 \uB9D0\uD574\uC900\uB2E4. ready \uAC00 \uC544\uB2CC \uD45C\uBA74\uC744 \uC4F0\uB294 \uACC4\uD68D\uC740 \uB9E4 \uD638\uCD9C\uC774 \uC2E4\uD328\uD558\uB2C8, \uACC4\uD68D\uC744 \uC138\uC6B0\uAE30 \uC804\uC5D0 \uD655\uC778\uD558\uACE0 \uD544\uC694\uD558\uBA74 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uC5F4\uC5B4 \uB2EC\uB77C\uACE0 \uC548\uB0B4\uD55C\uB2E4.",
15364
15400
  inputSchema: {
15365
15401
  type: "object",
15366
- properties: {},
15402
+ properties: { browser: browserProperty() },
15367
15403
  additionalProperties: false
15368
15404
  },
15369
15405
  annotations: LOOKUP_ANNOTATIONS
@@ -15372,7 +15408,7 @@ function sessionStateDescriptor() {
15372
15408
  function browsersDescriptor() {
15373
15409
  return {
15374
15410
  name: BROWSERS_TOOL,
15375
- description: "\uC774 \uCEF4\uD4E8\uD130\uC5D0 \uC9C0\uAE08 \uC5F0\uACB0\uB3FC \uC788\uB294 \uBE0C\uB77C\uC6B0\uC800\uB97C \uC54C\uB824\uC900\uB2E4. \uD06C\uB86C\xB7\uC6E8\uC77C\xB7\uC5E3\uC9C0 \uC5B4\uB290 \uAC83\uC774\uB4E0, \uD504\uB85C\uD544\uC744 \uC5EC\uB7EC \uAC1C \uC5F0\uACB0\uD574 \uB454 \uC0AC\uC6A9\uC790\uC5D0\uAC8C\uB294 \uB3C4\uAD6C\uAC00 \uC5B4\uB514\uC11C \uC2E4\uD589\uB418\uB294\uC9C0\uAC00 \uACB0\uACFC\uB97C \uBC14\uAFBC\uB2E4 \u2014 \uC5F4\uB824 \uC788\uB294 \uAE00\uB3C4 \uB85C\uADF8\uC778\uD55C \uACC4\uC815\uB3C4 \uD504\uB85C\uD544\uB9C8\uB2E4 \uB2E4\uB974\uB2E4. \uBAA9\uB85D\uC758 id \uB97C \uB2E4\uB978 \uB3C4\uAD6C \uD638\uCD9C\uC758 browser \uC778\uC790\uC5D0 \uB123\uC73C\uBA74 \uADF8 \uBE0C\uB77C\uC6B0\uC800\uC5D0\uC11C \uC2E4\uD589\uB41C\uB2E4. \uC0DD\uB7B5\uD558\uBA74 \uAC00\uC7A5 \uBA3C\uC800 \uC5F0\uACB0\uB41C \uAC83\uC5D0\uC11C \uC2E4\uD589\uB418\uB2C8, \uB458 \uC774\uC0C1\uC774\uBA74 \uC5B4\uB514\uC11C \uD560\uC9C0 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uD655\uC778\uD558\uACE0 \uC9C0\uC815\uD55C\uB2E4. \uC774 \uB3C4\uAD6C\uB294 \uC870\uD68C\uB9CC \uD558\uBA70 \uC0C8 \uBE0C\uB77C\uC6B0\uC800\uB97C \uB4F1\uB85D\uD558\uC9C0\uB294 \uBABB\uD55C\uB2E4 \u2014 \uB4F1\uB85D \uCF54\uB4DC\uB294 \uC0AC\uC6A9\uC790\uAC00 \uD328\uB110\uC5D0\uC11C \uC9C1\uC811 \uB9CC\uB4E0\uB2E4.",
15411
+ description: "\uC774 \uCEF4\uD4E8\uD130\uC5D0 \uC9C0\uAE08 \uC5F0\uACB0\uB3FC \uC788\uB294 \uBE0C\uB77C\uC6B0\uC800\uB97C \uC54C\uB824\uC900\uB2E4. \uD06C\uB86C\xB7\uC6E8\uC77C\xB7\uC5E3\uC9C0 \uC5B4\uB290 \uAC83\uC774\uB4E0, \uD504\uB85C\uD544\uC744 \uC5EC\uB7EC \uAC1C \uC5F0\uACB0\uD574 \uB454 \uC0AC\uC6A9\uC790\uC5D0\uAC8C\uB294 \uB3C4\uAD6C\uAC00 \uC5B4\uB514\uC11C \uC2E4\uD589\uB418\uB294\uC9C0\uAC00 \uACB0\uACFC\uB97C \uBC14\uAFBC\uB2E4 \u2014 \uC5F4\uB824 \uC788\uB294 \uAE00\uB3C4 \uB85C\uADF8\uC778\uD55C \uACC4\uC815\uB3C4 \uD504\uB85C\uD544\uB9C8\uB2E4 \uB2E4\uB974\uB2E4. \uBAA9\uB85D\uC758 id \uB97C \uB2E4\uB978 \uB3C4\uAD6C \uD638\uCD9C\uC758 browser \uC778\uC790\uC5D0 \uB123\uC73C\uBA74 \uADF8 \uBE0C\uB77C\uC6B0\uC800\uC5D0\uC11C \uC2E4\uD589\uB41C\uB2E4. \uC0DD\uB7B5\uD558\uBA74 \uACE0\uC815\uB41C \uAE30\uBCF8 \uBE0C\uB77C\uC6B0\uC800\uB97C \uC0AC\uC6A9\uD558\uBA70, \uADF8 \uC5F0\uACB0\uC774 \uB04A\uAE34 \uB3D9\uC548 \uBCC0\uACBD \uC791\uC5C5\uC740 \uB2E4\uB978 \uBE0C\uB77C\uC6B0\uC800\uB85C \uC790\uB3D9 \uC2B9\uACC4\uD558\uC9C0 \uC54A\uB294\uB2E4. \uB458 \uC774\uC0C1\uC774\uBA74 \uC5B4\uB514\uC11C \uD560\uC9C0 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uD655\uC778\uD558\uACE0 \uC9C0\uC815\uD55C\uB2E4. \uC774 \uB3C4\uAD6C\uB294 \uC870\uD68C\uB9CC \uD558\uBA70 \uC0C8 \uBE0C\uB77C\uC6B0\uC800\uB97C \uB4F1\uB85D\uD558\uC9C0\uB294 \uBABB\uD55C\uB2E4 \u2014 \uB4F1\uB85D \uCF54\uB4DC\uB294 \uC0AC\uC6A9\uC790\uAC00 \uD328\uB110\uC5D0\uC11C \uC9C1\uC811 \uB9CC\uB4E0\uB2E4.",
15376
15412
  inputSchema: {
15377
15413
  type: "object",
15378
15414
  properties: {},
@@ -15385,11 +15421,9 @@ function allowlistNames() {
15385
15421
  return [.../* @__PURE__ */ new Set([...READ_ONLY_TOOLS, ...Object.keys(TOOL_TIERS)])];
15386
15422
  }
15387
15423
  function staticDiscoveryCatalog() {
15388
- const entries = allowlistNames().map((name) => ({
15389
- name,
15390
- description: "",
15391
- inputSchema: {}
15392
- }));
15424
+ const entries = allowlistNames().map(
15425
+ (name) => name === BROWSERS_TOOL ? browsersDescriptor() : { name, description: "", inputSchema: {} }
15426
+ );
15393
15427
  return [
15394
15428
  ...discoveryDescriptors(entries),
15395
15429
  sessionStateDescriptor(),