@tool-bridge/server 0.1.1 → 0.3.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 (107) hide show
  1. package/dist/airtable-V6446SVY.js +792 -0
  2. package/dist/alt_text_generator_ai-HV7JZPDT.js +72 -0
  3. package/dist/amap-TTTVB6WS.js +755 -0
  4. package/dist/anthropic-JH3RA363.js +224 -0
  5. package/dist/apify-ETNN7ITU.js +262 -0
  6. package/dist/brave_search-3DDR2MMB.js +322 -0
  7. package/dist/chunk-CSJEZHQO.js +252 -0
  8. package/dist/chunk-JLTYA2B3.js +20121 -0
  9. package/dist/chunk-K7FVSFUX.js +333 -0
  10. package/dist/{chunk-MQEYFCJB.js → chunk-KGYJEEBI.js} +2770 -21574
  11. package/dist/circleci-MX3TX3HC.js +409 -0
  12. package/dist/clerk-MRPORVF4.js +1036 -0
  13. package/dist/cloudflare_dns-OWP7DD7L.js +605 -0
  14. package/dist/cohere-GPECP66S.js +197 -0
  15. package/dist/confluence-BN7LZ6BC.js +436 -0
  16. package/dist/convertapi-SBEOFOFQ.js +161 -0
  17. package/dist/currencyapi-P2YY7Y7P.js +306 -0
  18. package/dist/deepseek-MWB3NYIN.js +205 -0
  19. package/dist/docker_hub-3JSCIGQ3.js +946 -0
  20. package/dist/dropbox-RFIBDAXO.js +1308 -0
  21. package/dist/dub-YVP57ELQ.js +706 -0
  22. package/dist/e2b-NFSUHTZR.js +305 -0
  23. package/dist/exa-KTDY6IV3.js +360 -0
  24. package/dist/fal_ai-OCUENLNQ.js +405 -0
  25. package/dist/feishu-5CWBQ7E5.js +225 -0
  26. package/dist/feishu_custom_bot-ZJR22OK6.js +240 -0
  27. package/dist/figma-YULGANSA.js +798 -0
  28. package/dist/firehydrant-2V6YSYAP.js +573 -0
  29. package/dist/fixer-LTCDB3CJ.js +171 -0
  30. package/dist/fly-IXPKMAML.js +478 -0
  31. package/dist/front-KRFB4M5X.js +379 -0
  32. package/dist/geocodio-VVURKYHQ.js +236 -0
  33. package/dist/ghost-6J2RIOUB.js +341 -0
  34. package/dist/github-5Z6KQRYH.js +5410 -0
  35. package/dist/gmail-KU4NZ7VA.js +1894 -0
  36. package/dist/googlecalendar-X44DFFXG.js +2539 -0
  37. package/dist/googledocs-WSGLPKSF.js +1322 -0
  38. package/dist/grafana-4PKSSDXY.js +817 -0
  39. package/dist/graphhopper-DF65ZNGK.js +336 -0
  40. package/dist/index.d.ts +181 -2
  41. package/dist/index.js +2 -1
  42. package/dist/ip2proxy-UCAQ5P2J.js +118 -0
  43. package/dist/ipgeolocation_io-UX6FCA2S.js +333 -0
  44. package/dist/ipqualityscore-MKTRXIZJ.js +287 -0
  45. package/dist/jina_ai-MRHPCSV5.js +119 -0
  46. package/dist/jira-EG7ZPOIW.js +627 -0
  47. package/dist/langsmith-FNO3RCOZ.js +597 -0
  48. package/dist/lemlist-SN6BJHSG.js +298 -0
  49. package/dist/linear-H3VU4PSD.js +2163 -0
  50. package/dist/logsnag-OY2JJT2H.js +167 -0
  51. package/dist/main.js +246 -2
  52. package/dist/mattermost-C5SQ7PGD.js +320 -0
  53. package/dist/mem0-LMLE5BFC.js +567 -0
  54. package/dist/memos-UWFAMBZC.js +781 -0
  55. package/dist/metabase-SRYDSDJ6.js +365 -0
  56. package/dist/mistral_ai-YNIJ7VDM.js +1195 -0
  57. package/dist/mother_duck-CPGOFEXE.js +322 -0
  58. package/dist/ngrok-CDJFBSOM.js +375 -0
  59. package/dist/notes-DIVFH3P3.js +109 -0
  60. package/dist/notion-HGDKS4HK.js +945 -0
  61. package/dist/open_exchange_rates-COHHYJDD.js +216 -0
  62. package/dist/openai-4TRT66GW.js +795 -0
  63. package/dist/opengraph_io-YKVW4PXI.js +377 -0
  64. package/dist/openrouter-6CV7B7V5.js +444 -0
  65. package/dist/outline-YWDUK5F7.js +604 -0
  66. package/dist/paddle-MEU7HWDZ.js +464 -0
  67. package/dist/perplexity-MRQUDBIC.js +238 -0
  68. package/dist/pinecone-JI7X2TAF.js +599 -0
  69. package/dist/pipedrive-6JQPAW23.js +453 -0
  70. package/dist/polar-7BF56CMC.js +400 -0
  71. package/dist/posthog-YPU5ADEN.js +3462 -0
  72. package/dist/postmark-BEU5OFKU.js +441 -0
  73. package/dist/prerender-UT5GOOZH.js +180 -0
  74. package/dist/pubmed-3SGOE24Q.js +1052 -0
  75. package/dist/railway-CEK4GLRQ.js +452 -0
  76. package/dist/readwise-DXQUQU67.js +482 -0
  77. package/dist/render-7TGAU5AW.js +473 -0
  78. package/dist/replicate-VICFSQ5A.js +347 -0
  79. package/dist/resend-3E76WK3O.js +100 -0
  80. package/dist/rootly-36GY46BY.js +345 -0
  81. package/dist/scrapfly-VDVUYAHX.js +289 -0
  82. package/dist/scrapingbee-3KTPMAVY.js +247 -0
  83. package/dist/screenshot_fyi-LKG62C3J.js +116 -0
  84. package/dist/semantic_scholar-4WREECYO.js +626 -0
  85. package/dist/sentry-HUQTGXOV.js +1139 -0
  86. package/dist/shodan-SGRKU4KS.js +303 -0
  87. package/dist/shopify-YCZ4L5HT.js +620 -0
  88. package/dist/stripe-OEBKMELB.js +583 -0
  89. package/dist/supabase-I3DBY7L4.js +937 -0
  90. package/dist/tavily-B2YHCNRD.js +349 -0
  91. package/dist/telegram-2VYJELZX.js +1773 -0
  92. package/dist/telnyx-HHXD3CXL.js +237 -0
  93. package/dist/todoist-PHFDEEIS.js +672 -0
  94. package/dist/trello-WUSAK6YN.js +1091 -0
  95. package/dist/turso-FW56U2B3.js +432 -0
  96. package/dist/twilio-M5JI7XHA.js +321 -0
  97. package/dist/umami-HAYODRC4.js +411 -0
  98. package/dist/unsplash-EDPTNEHJ.js +364 -0
  99. package/dist/upstash_redis-GC2CLIWD.js +299 -0
  100. package/dist/uptimerobot-XMSNYLIT.js +481 -0
  101. package/dist/v2ex-KU4ECD65.js +672 -0
  102. package/dist/vercel-THPCEFHW.js +1096 -0
  103. package/dist/wolfram_alpha_api-WHHTH4GU.js +212 -0
  104. package/dist/wordpress-O6TQEQNF.js +822 -0
  105. package/dist/workos-A3VHHWI3.js +681 -0
  106. package/dist/zhihu-BJAI64YJ.js +273 -0
  107. package/package.json +5 -4
@@ -0,0 +1,365 @@
1
+ import {
2
+ assertPublicHttpUrl,
3
+ createProviderPlugin,
4
+ guardedFetch,
5
+ requireApiKey,
6
+ upstreamError
7
+ } from "./chunk-CSJEZHQO.js";
8
+ import "./chunk-K7FVSFUX.js";
9
+ import {
10
+ TBError,
11
+ external_exports
12
+ } from "./chunk-JLTYA2B3.js";
13
+ import "./chunk-MLKGABMK.js";
14
+
15
+ // ../plugins/src/metabase/api.ts
16
+ var SERVICE = "metabase";
17
+ var API_PATH_PREFIX = "/api";
18
+ var CURRENT_USER_PATH = "/user/current";
19
+ function text(value) {
20
+ if (typeof value !== "string") return void 0;
21
+ const trimmed = value.trim();
22
+ return trimmed === "" ? void 0 : trimmed;
23
+ }
24
+ function record(value) {
25
+ return typeof value === "object" && value !== null && !Array.isArray(value) ? value : void 0;
26
+ }
27
+ function configError(message) {
28
+ return new TBError("invalid_argument", `${SERVICE} \u7684 ${message}`);
29
+ }
30
+ function resolveApiBase(ctx) {
31
+ const configured = ctx.config?.instanceUrl;
32
+ if (configured !== void 0 && typeof configured !== "string") {
33
+ throw configError("instanceUrl \u5FC5\u987B\u662F\u5B57\u7B26\u4E32");
34
+ }
35
+ const raw = text(configured);
36
+ if (raw === void 0) {
37
+ throw configError("instanceUrl \u5FC5\u586B:\u7ED9\u6302\u8F7D\u8282\u70B9\u914D config.instanceUrl \u6307\u5411\u4F60\u7684 Metabase \u5B9E\u4F8B");
38
+ }
39
+ const url = assertPublicHttpUrl(raw.includes("://") ? raw : `https://${raw}`);
40
+ if (url.protocol !== "https:") throw configError("instanceUrl \u5FC5\u987B\u7528 https");
41
+ if (url.username !== "" || url.password !== "") {
42
+ throw configError("instanceUrl \u4E0D\u80FD\u5E26\u7528\u6237\u540D\u5BC6\u7801");
43
+ }
44
+ url.search = "";
45
+ url.hash = "";
46
+ let pathname = url.pathname === "/" ? "" : url.pathname.replace(/\/+$/, "");
47
+ if (pathname.endsWith(API_PATH_PREFIX)) pathname = pathname.slice(0, -API_PATH_PREFIX.length);
48
+ url.pathname = pathname;
49
+ const instanceUrl = url.toString().replace(/\/+$/, "");
50
+ return `${instanceUrl}${API_PATH_PREFIX}`;
51
+ }
52
+ function pathSegment(value, field) {
53
+ const segment = value === void 0 ? "" : String(value);
54
+ if (segment === "" || segment.includes("/") || segment.includes("?") || segment.includes("#")) {
55
+ throw new TBError("invalid_argument", `${field} \u5FC5\u987B\u662F\u4E00\u4E2A Metabase \u8DEF\u5F84\u6BB5`);
56
+ }
57
+ return encodeURIComponent(segment);
58
+ }
59
+ function errorMessage(payload, status) {
60
+ const body = record(payload);
61
+ const errors = body?.errors;
62
+ const serialized = typeof errors === "object" && errors !== null ? JSON.stringify(errors) : void 0;
63
+ return text(body?.message) ?? text(body?.error) ?? text(body?.cause) ?? serialized ?? `Metabase \u8FD4\u56DE HTTP ${status}`;
64
+ }
65
+ async function request(ctx, path, query) {
66
+ const apiKey = requireApiKey(ctx, SERVICE);
67
+ const url = new URL(`${resolveApiBase(ctx)}${path}`);
68
+ for (const [key, value] of Object.entries(query ?? {})) {
69
+ if (value === void 0) continue;
70
+ if (Array.isArray(value)) {
71
+ for (const item of value) url.searchParams.append(key, item);
72
+ continue;
73
+ }
74
+ url.searchParams.set(key, String(value));
75
+ }
76
+ let response;
77
+ try {
78
+ response = await guardedFetch(url.toString(), {
79
+ method: "GET",
80
+ headers: { "accept": "application/json", "x-api-key": apiKey }
81
+ });
82
+ } catch (error) {
83
+ if (error instanceof TBError) throw error;
84
+ throw upstreamError(502, `Metabase \u8BF7\u6C42\u5931\u8D25:${error instanceof Error ? error.message : "\u672A\u77E5\u9519\u8BEF"}`);
85
+ }
86
+ const raw = await response.text().catch(() => "");
87
+ let payload = null;
88
+ if (raw !== "") {
89
+ try {
90
+ payload = JSON.parse(raw);
91
+ } catch {
92
+ if (response.ok) throw upstreamError(502, "Metabase \u8FD4\u56DE\u4E86\u975E JSON \u54CD\u5E94");
93
+ payload = { message: raw };
94
+ }
95
+ }
96
+ if (!response.ok) throw upstreamError(response.status, errorMessage(payload, response.status));
97
+ return payload;
98
+ }
99
+ function requireObject(payload, label) {
100
+ const object = record(payload);
101
+ if (object === void 0) {
102
+ throw new TBError("unavailable", `${label} \u54CD\u5E94\u4E0D\u662F\u5BF9\u8C61`, { retryable: true });
103
+ }
104
+ return object;
105
+ }
106
+ function listItems(payload) {
107
+ const body = record(payload);
108
+ const data = body?.data;
109
+ const candidate = Array.isArray(payload) ? payload : Array.isArray(data) ? data : [];
110
+ return candidate.map((item) => record(item) ?? { value: item });
111
+ }
112
+ function rawObject(payload) {
113
+ return record(payload) ?? { data: payload };
114
+ }
115
+ async function getCurrentUser(_input, ctx) {
116
+ const payload = await request(ctx, CURRENT_USER_PATH);
117
+ return { user: requireObject(payload, "Metabase \u7528\u6237"), raw: rawObject(payload) };
118
+ }
119
+ async function listDatabases(input, ctx) {
120
+ const payload = await request(ctx, "/database", {
121
+ "include": text(input.include),
122
+ "include_analytics": input.includeAnalytics,
123
+ "saved": input.saved,
124
+ "include_editable_data_model": input.includeEditableDataModel,
125
+ "exclude_uneditable_details": input.excludeUneditableDetails,
126
+ "include_only_uploadable": input.includeOnlyUploadable,
127
+ "router_database_id": input.routerDatabaseId,
128
+ // 这两个是 kebab-case,不是 snake_case —— Metabase 的 query 参数命名不统一。
129
+ "can-query": input.canQuery,
130
+ "can-write-metadata": input.canWriteMetadata
131
+ });
132
+ return { databases: listItems(payload), raw: rawObject(payload) };
133
+ }
134
+ async function getDatabase(input, ctx) {
135
+ const payload = await request(ctx, `/database/${pathSegment(input.id, "id")}`, {
136
+ include: text(input.include),
137
+ include_editable_data_model: input.includeEditableDataModel,
138
+ exclude_uneditable_details: input.excludeUneditableDetails
139
+ });
140
+ return { database: requireObject(payload, "Metabase \u6570\u636E\u5E93"), raw: rawObject(payload) };
141
+ }
142
+ async function listCollections(input, ctx) {
143
+ const payload = await request(ctx, "/collection", {
144
+ "archived": input.archived,
145
+ "exclude-other-user-collections": input.excludeOtherUserCollections,
146
+ "namespace": text(input.namespace),
147
+ "personal-only": input.personalOnly
148
+ });
149
+ return { collections: listItems(payload), raw: rawObject(payload) };
150
+ }
151
+ async function getCollection(input, ctx) {
152
+ const payload = await request(ctx, `/collection/${pathSegment(input.id, "id")}`);
153
+ return { collection: requireObject(payload, "Metabase \u96C6\u5408"), raw: rawObject(payload) };
154
+ }
155
+ async function listCards(input, ctx) {
156
+ const payload = await request(ctx, "/card", { f: text(input.filter), model_id: input.modelId });
157
+ return { cards: listItems(payload), raw: rawObject(payload) };
158
+ }
159
+ async function getCard(input, ctx) {
160
+ const payload = await request(ctx, `/card/${pathSegment(input.id, "id")}`, { "legacy-mbql": input.legacyMbql });
161
+ return { card: requireObject(payload, "Metabase \u5361\u7247"), raw: rawObject(payload) };
162
+ }
163
+ async function listDashboards(input, ctx) {
164
+ const payload = await request(ctx, "/dashboard", { f: text(input.filter) });
165
+ return { dashboards: listItems(payload), raw: rawObject(payload) };
166
+ }
167
+ async function getDashboard(input, ctx) {
168
+ const payload = await request(ctx, `/dashboard/${pathSegment(input.id, "id")}`);
169
+ return { dashboard: requireObject(payload, "Metabase \u4EEA\u8868\u76D8"), raw: rawObject(payload) };
170
+ }
171
+ async function search(input, ctx) {
172
+ const payload = await request(ctx, "/search", {
173
+ // 线上参数名是 `q`;`collection` / `table_db_id` 也与入参名不同。
174
+ q: text(input.query),
175
+ context: text(input.context),
176
+ archived: input.archived,
177
+ collection: input.collectionId,
178
+ table_db_id: input.tableDatabaseId,
179
+ models: input.models,
180
+ include_dashboard_questions: input.includeDashboardQuestions,
181
+ include_metadata: input.includeMetadata
182
+ });
183
+ return { results: listItems(payload), raw: rawObject(payload) };
184
+ }
185
+
186
+ // ../plugins/src/metabase/schema.ts
187
+ var getCurrentUserInput = external_exports.strictObject({}).describe("No input parameters are required.");
188
+ var getCurrentUserOutput = external_exports.strictObject({
189
+ user: external_exports.looseObject({}).describe("A Metabase entity object.").optional(),
190
+ raw: external_exports.looseObject({}).describe("The raw Metabase API response object.").optional()
191
+ }).describe("Output payload for the current Metabase user.");
192
+ var listDatabasesInput = external_exports.strictObject({
193
+ include: external_exports.enum(["tables", "schemas"]).describe("Related database data to include.").optional(),
194
+ includeAnalytics: external_exports.boolean().describe("Whether to include analytics database metadata.").optional(),
195
+ saved: external_exports.boolean().describe("Whether to return saved query databases.").optional(),
196
+ includeEditableDataModel: external_exports.boolean().describe("Whether to include editable data model metadata.").optional(),
197
+ excludeUneditableDetails: external_exports.boolean().describe("Whether to exclude details the API key cannot edit.").optional(),
198
+ includeOnlyUploadable: external_exports.boolean().describe("Whether to return only uploadable databases.").optional(),
199
+ routerDatabaseId: external_exports.int().min(1).describe("Router database ID to filter by.").optional(),
200
+ canQuery: external_exports.boolean().describe("Whether to return databases the API key can query.").optional(),
201
+ canWriteMetadata: external_exports.boolean().describe("Whether to return databases the API key can edit metadata for.").optional()
202
+ }).describe("Query parameters for listing Metabase databases.");
203
+ var listDatabasesOutput = external_exports.strictObject({
204
+ databases: external_exports.array(external_exports.looseObject({}).describe("A Metabase entity object.")).describe("Metabase databases returned by the API.").optional(),
205
+ raw: external_exports.looseObject({}).describe("The raw Metabase API response object.").optional()
206
+ }).describe("Output payload for Metabase databases.");
207
+ var getDatabaseInput = external_exports.strictObject({
208
+ id: external_exports.union([external_exports.int().min(1).describe("A positive numeric Metabase ID."), external_exports.string().min(1).describe("A Metabase entity ID string.")]).describe("A Metabase numeric ID or entity ID string."),
209
+ include: external_exports.enum(["tables", "tables.fields"]).describe("Related database data to include.").optional(),
210
+ includeEditableDataModel: external_exports.boolean().describe("Whether to include editable data model metadata.").optional(),
211
+ excludeUneditableDetails: external_exports.boolean().describe("Whether to exclude details the API key cannot edit.").optional()
212
+ }).describe("Input parameters for retrieving one Metabase database.");
213
+ var getDatabaseOutput = external_exports.strictObject({
214
+ database: external_exports.looseObject({}).describe("A Metabase entity object.").optional(),
215
+ raw: external_exports.looseObject({}).describe("The raw Metabase API response object.").optional()
216
+ }).describe("Output payload for one Metabase database.");
217
+ var listCollectionsInput = external_exports.strictObject({
218
+ archived: external_exports.boolean().describe("Whether to include archived collections.").optional(),
219
+ excludeOtherUserCollections: external_exports.boolean().describe("Whether to exclude other users' personal collections.").optional(),
220
+ namespace: external_exports.string().min(1).describe("Collection namespace to filter by.").optional(),
221
+ personalOnly: external_exports.boolean().describe("Whether to return only personal collections.").optional()
222
+ }).describe("Query parameters for listing Metabase collections.");
223
+ var listCollectionsOutput = external_exports.strictObject({
224
+ collections: external_exports.array(external_exports.looseObject({}).describe("A Metabase entity object.")).describe("Metabase collections returned by the API.").optional(),
225
+ raw: external_exports.looseObject({}).describe("The raw Metabase API response object.").optional()
226
+ }).describe("Output payload for Metabase collections.");
227
+ var getCollectionInput = external_exports.strictObject({
228
+ id: external_exports.union([external_exports.int().min(1).describe("A positive numeric Metabase ID."), external_exports.string().min(1).describe("A Metabase entity ID string.")]).describe("A Metabase numeric ID or entity ID string.").optional()
229
+ }).describe("Input parameters for retrieving one Metabase collection.");
230
+ var getCollectionOutput = external_exports.strictObject({
231
+ collection: external_exports.looseObject({}).describe("A Metabase entity object.").optional(),
232
+ raw: external_exports.looseObject({}).describe("The raw Metabase API response object.").optional()
233
+ }).describe("Output payload for one Metabase collection.");
234
+ var listCardsInput = external_exports.strictObject({
235
+ filter: external_exports.enum(["archived", "table", "using_model", "bookmarked", "using_segment", "all", "mine", "database"]).describe("Card list filter.").optional(),
236
+ modelId: external_exports.int().min(1).describe("Model ID to filter cards by.").optional()
237
+ }).describe("Query parameters for listing Metabase cards.");
238
+ var listCardsOutput = external_exports.strictObject({
239
+ cards: external_exports.array(external_exports.looseObject({}).describe("A Metabase entity object.")).describe("Metabase cards returned by the API.").optional(),
240
+ raw: external_exports.looseObject({}).describe("The raw Metabase API response object.").optional()
241
+ }).describe("Output payload for Metabase cards.");
242
+ var getCardInput = external_exports.strictObject({
243
+ id: external_exports.union([external_exports.int().min(1).describe("A positive numeric Metabase ID."), external_exports.string().min(1).describe("A Metabase entity ID string.")]).describe("A Metabase numeric ID or entity ID string."),
244
+ legacyMbql: external_exports.boolean().describe("Whether to request the legacy MBQL response shape.").optional()
245
+ }).describe("Input parameters for retrieving one Metabase card.");
246
+ var getCardOutput = external_exports.strictObject({
247
+ card: external_exports.looseObject({}).describe("A Metabase entity object.").optional(),
248
+ raw: external_exports.looseObject({}).describe("The raw Metabase API response object.").optional()
249
+ }).describe("Output payload for one Metabase card.");
250
+ var listDashboardsInput = external_exports.strictObject({
251
+ filter: external_exports.enum(["all", "mine", "archived"]).describe("Dashboard list filter.").optional()
252
+ }).describe("Query parameters for listing Metabase dashboards.");
253
+ var listDashboardsOutput = external_exports.strictObject({
254
+ dashboards: external_exports.array(external_exports.looseObject({}).describe("A Metabase entity object.")).describe("Metabase dashboards returned by the API.").optional(),
255
+ raw: external_exports.looseObject({}).describe("The raw Metabase API response object.").optional()
256
+ }).describe("Output payload for Metabase dashboards.");
257
+ var getDashboardInput = external_exports.strictObject({
258
+ id: external_exports.union([external_exports.int().min(1).describe("A positive numeric Metabase ID."), external_exports.string().min(1).describe("A Metabase entity ID string.")]).describe("A Metabase numeric ID or entity ID string.").optional()
259
+ }).describe("Input parameters for retrieving one Metabase dashboard.");
260
+ var getDashboardOutput = external_exports.strictObject({
261
+ dashboard: external_exports.looseObject({}).describe("A Metabase entity object.").optional(),
262
+ raw: external_exports.looseObject({}).describe("The raw Metabase API response object.").optional()
263
+ }).describe("Output payload for one Metabase dashboard.");
264
+ var searchInput = external_exports.strictObject({
265
+ query: external_exports.string().min(1).describe("Search text.").optional(),
266
+ context: external_exports.enum(["search-bar", "search-app", "command-palette", "entity-picker", "data-picker", "type-filter", "basic-actions", "browse", "embedding-setup", "document", "library", "dependencies", "model-migration", "api", "metabot"]).describe("Metabase search context.").optional(),
267
+ archived: external_exports.boolean().describe("Whether to search archived content.").optional(),
268
+ collectionId: external_exports.int().min(1).describe("Collection ID to search within.").optional(),
269
+ tableDatabaseId: external_exports.int().min(1).describe("Database ID to filter table search results by.").optional(),
270
+ models: external_exports.array(external_exports.enum(["dashboard", "table", "dataset", "segment", "collection", "measure", "transform", "document", "database", "action", "indexed-entity", "metric", "card"]).describe("Metabase model type to include in search results.")).describe("Metabase model types to include.").optional(),
271
+ includeDashboardQuestions: external_exports.boolean().describe("Whether to include dashboard questions.").optional(),
272
+ includeMetadata: external_exports.boolean().describe("Whether to include result metadata.").optional()
273
+ }).describe("Query parameters for searching Metabase content.");
274
+ var searchOutput = external_exports.strictObject({
275
+ results: external_exports.array(external_exports.looseObject({}).describe("A Metabase entity object.")).describe("Metabase search results returned by the API.").optional(),
276
+ raw: external_exports.looseObject({}).describe("The raw Metabase API response object.").optional()
277
+ }).describe("Output payload for Metabase search results.");
278
+ var metabaseActions = {
279
+ get_current_user: {
280
+ description: "Get the Metabase user associated with the API key.",
281
+ effect: "read",
282
+ inputSchema: getCurrentUserInput,
283
+ outputSchema: external_exports.toJSONSchema(getCurrentUserOutput, { io: "output", unrepresentable: "any" })
284
+ },
285
+ list_databases: {
286
+ description: "List Metabase databases visible to the API key.",
287
+ effect: "read",
288
+ inputSchema: listDatabasesInput,
289
+ outputSchema: external_exports.toJSONSchema(listDatabasesOutput, { io: "output", unrepresentable: "any" })
290
+ },
291
+ get_database: {
292
+ description: "Retrieve one Metabase database by ID.",
293
+ effect: "read",
294
+ inputSchema: getDatabaseInput,
295
+ outputSchema: external_exports.toJSONSchema(getDatabaseOutput, { io: "output", unrepresentable: "any" })
296
+ },
297
+ list_collections: {
298
+ description: "List Metabase collections visible to the API key.",
299
+ effect: "read",
300
+ inputSchema: listCollectionsInput,
301
+ outputSchema: external_exports.toJSONSchema(listCollectionsOutput, { io: "output", unrepresentable: "any" })
302
+ },
303
+ get_collection: {
304
+ description: "Retrieve one Metabase collection by ID.",
305
+ effect: "read",
306
+ inputSchema: getCollectionInput,
307
+ outputSchema: external_exports.toJSONSchema(getCollectionOutput, { io: "output", unrepresentable: "any" })
308
+ },
309
+ list_cards: {
310
+ description: "List Metabase cards, also known as questions.",
311
+ effect: "read",
312
+ inputSchema: listCardsInput,
313
+ outputSchema: external_exports.toJSONSchema(listCardsOutput, { io: "output", unrepresentable: "any" })
314
+ },
315
+ get_card: {
316
+ description: "Retrieve one Metabase card by ID.",
317
+ effect: "read",
318
+ inputSchema: getCardInput,
319
+ outputSchema: external_exports.toJSONSchema(getCardOutput, { io: "output", unrepresentable: "any" })
320
+ },
321
+ list_dashboards: {
322
+ description: "List Metabase dashboards visible to the API key.",
323
+ effect: "read",
324
+ inputSchema: listDashboardsInput,
325
+ outputSchema: external_exports.toJSONSchema(listDashboardsOutput, { io: "output", unrepresentable: "any" })
326
+ },
327
+ get_dashboard: {
328
+ description: "Retrieve one Metabase dashboard by ID.",
329
+ effect: "read",
330
+ inputSchema: getDashboardInput,
331
+ outputSchema: external_exports.toJSONSchema(getDashboardOutput, { io: "output", unrepresentable: "any" })
332
+ },
333
+ search: {
334
+ description: "Search Metabase content visible to the API key.",
335
+ effect: "write",
336
+ inputSchema: searchInput,
337
+ outputSchema: external_exports.toJSONSchema(searchOutput, { io: "output", unrepresentable: "any" })
338
+ }
339
+ };
340
+
341
+ // ../plugins/src/metabase/index.ts
342
+ function createMetabasePlugin() {
343
+ return createProviderPlugin({
344
+ description: "Metabase",
345
+ actions: metabaseActions,
346
+ credentialProbe: "get_current_user",
347
+ handlers: {
348
+ get_current_user: getCurrentUser,
349
+ list_databases: listDatabases,
350
+ get_database: getDatabase,
351
+ list_collections: listCollections,
352
+ get_collection: getCollection,
353
+ list_cards: listCards,
354
+ get_card: getCard,
355
+ list_dashboards: listDashboards,
356
+ get_dashboard: getDashboard,
357
+ search
358
+ }
359
+ });
360
+ }
361
+ var metabase_default = createMetabasePlugin();
362
+ export {
363
+ createMetabasePlugin,
364
+ metabase_default as default
365
+ };