@zackbart/connecta 0.34.1 → 0.36.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 (441) hide show
  1. package/CHANGELOG.md +418 -0
  2. package/README.md +65 -105
  3. package/SECURITY.md +3 -2
  4. package/bin/connecta.mjs +41 -16
  5. package/bin/version.mjs +1 -1
  6. package/dist/access-tokens.d.ts +2 -1
  7. package/dist/access-tokens.js +66 -30
  8. package/dist/activity.d.ts +1 -1
  9. package/dist/activity.js +2 -0
  10. package/dist/agent-config.d.ts +23 -0
  11. package/dist/agent-config.js +59 -0
  12. package/dist/agent-description.js +16 -0
  13. package/dist/agent-identity.js +4 -4
  14. package/dist/agent-observation.js +39 -0
  15. package/dist/auth/clerk-sdk/client.d.ts +2 -0
  16. package/dist/auth/clerk-sdk/generated.js +554 -563
  17. package/dist/auth/clerk-transport.js +70 -3
  18. package/dist/auth/clerk.d.ts +13 -0
  19. package/dist/auth/clerk.js +653 -246
  20. package/dist/auth/cloudflare-access.js +46 -42
  21. package/dist/auth/downstream-client-metadata.js +2 -2
  22. package/dist/auth/downstream-oauth.js +2044 -1161
  23. package/dist/auth/downstream-revocation.js +88 -88
  24. package/dist/auth/native-call.js +20 -0
  25. package/dist/auth/native.js +184 -0
  26. package/dist/auth/oauth-start-reset.js +11 -5
  27. package/dist/auth/oauth-token-response.js +121 -102
  28. package/dist/auth/oauth-v2-migration.js +97 -78
  29. package/dist/auth/renewable-grant.js +10 -0
  30. package/dist/auth/static-oauth.js +751 -281
  31. package/dist/auth/vercel-agent.js +266 -0
  32. package/dist/auth-admission.js +204 -0
  33. package/dist/auth-elicitation.js +350 -241
  34. package/dist/authorization-handoff.js +164 -90
  35. package/dist/call-admission-context.js +3 -10
  36. package/dist/call-admission.js +2 -0
  37. package/dist/call-classification.js +9 -0
  38. package/dist/call-recovery.js +32 -13
  39. package/dist/canonical-json.js +8 -0
  40. package/dist/catalog-cache.js +369 -213
  41. package/dist/catalog-service.js +659 -530
  42. package/dist/catalog.js +5 -1
  43. package/dist/concurrency.js +0 -25
  44. package/dist/config-defaults.d.ts +1 -0
  45. package/dist/config-defaults.js +1 -0
  46. package/dist/config-schema.d.ts +3 -1
  47. package/dist/config-schema.js +13 -3
  48. package/dist/config.d.ts +40 -6
  49. package/dist/config.js +40 -26
  50. package/dist/connector-caller.d.ts +4 -0
  51. package/dist/connector-caller.js +17 -4
  52. package/dist/connectors/api-connector.d.ts +29 -7
  53. package/dist/connectors/api-connector.js +145 -57
  54. package/dist/connectors/guarded-fetch.d.ts +51 -17
  55. package/dist/connectors/guarded-fetch.js +215 -121
  56. package/dist/connectors/negotiation-cache.js +20 -10
  57. package/dist/connectors/remote-mcp.d.ts +10 -30
  58. package/dist/connectors/remote-mcp.js +955 -563
  59. package/dist/d1.js +10 -243
  60. package/dist/derived-context.js +5 -0
  61. package/dist/describe-config.d.ts +3 -1
  62. package/dist/describe-config.js +2 -0
  63. package/dist/downstream-input.js +347 -260
  64. package/dist/errors.d.ts +87 -6
  65. package/dist/errors.js +114 -4
  66. package/dist/execute.js +87 -50
  67. package/dist/executor-admission.js +3 -0
  68. package/dist/executors/quickjs.js +163 -112
  69. package/dist/guarded-transport.js +50 -0
  70. package/dist/guest-runtime.js +1 -1
  71. package/dist/http/client.js +439 -0
  72. package/dist/http/errors.js +558 -0
  73. package/dist/http/fields.js +49 -0
  74. package/dist/http/hatch-paging.js +318 -0
  75. package/dist/http/hatch.js +1279 -0
  76. package/dist/http/json-schema.js +267 -0
  77. package/dist/http/node-transport.js +241 -0
  78. package/dist/http/oauth.js +162 -0
  79. package/dist/http/paging.js +227 -0
  80. package/dist/http/provider.js +221 -0
  81. package/dist/http/safety.js +82 -0
  82. package/dist/http/services.js +79 -0
  83. package/dist/http/tools.js +379 -0
  84. package/dist/http/vendor-index.js +138 -0
  85. package/dist/http/vendor.js +448 -0
  86. package/dist/http/write-request.js +66 -0
  87. package/dist/http-policy.d.ts +11 -0
  88. package/dist/http-policy.js +45 -0
  89. package/dist/inbound-credential.js +1 -1
  90. package/dist/index.d.ts +2 -2
  91. package/dist/index.js +4 -0
  92. package/dist/invocation-auth.js +30 -19
  93. package/dist/invocation.js +218 -85
  94. package/dist/mcp-result.js +0 -4
  95. package/dist/membership.d.ts +4 -0
  96. package/dist/meta-output.js +1 -1
  97. package/dist/meta-tools.js +531 -406
  98. package/dist/native-recovery.js +52 -0
  99. package/dist/native-tools.js +382 -0
  100. package/dist/node.d.ts +4 -3
  101. package/dist/node.js +45 -8
  102. package/dist/oauth-handoff.js +177 -104
  103. package/dist/oauth-partition.js +6 -20
  104. package/dist/oauth-sealing.js +6 -7
  105. package/dist/operation-vocabulary.js +101 -0
  106. package/dist/operator-record.d.ts +2 -2
  107. package/dist/operator-record.js +17 -4
  108. package/dist/operator-ui/contract.d.ts +8 -3
  109. package/dist/operator-ui/generated.js +4 -4
  110. package/dist/operator-ui/model.d.ts +2 -3
  111. package/dist/program-writes.js +47 -26
  112. package/dist/provider-call-facts.d.ts +115 -0
  113. package/dist/provider-call-facts.js +182 -0
  114. package/dist/provider-call.d.ts +112 -0
  115. package/dist/provider-call.js +271 -0
  116. package/dist/provider.d.ts +65 -31
  117. package/dist/provider.js +116 -39
  118. package/dist/providers/_shared/google/hatch.js +91 -0
  119. package/dist/providers/_shared/google/kit.js +427 -0
  120. package/dist/providers/_shared/google/result-size.js +15 -2
  121. package/dist/providers/_shared/google/service-account.d.ts +2 -1
  122. package/dist/providers/_shared/google/service-account.js +8 -4
  123. package/dist/providers/_shared/google/workspace.d.ts +6 -210
  124. package/dist/providers/_shared/google/workspace.js +6 -425
  125. package/dist/providers/_shared/rest/compact-index.js +86 -0
  126. package/dist/providers/_shared/rest/kit.js +146 -0
  127. package/dist/providers/_shared/rest/operation-index.js +230 -14
  128. package/dist/providers/_shared/rest/response-media.js +11 -0
  129. package/dist/providers/_shared/rest/value-safety.js +353 -195
  130. package/dist/providers/_shared/sensitive-fields.js +27 -0
  131. package/dist/providers/breeze/api.js +584 -0
  132. package/dist/providers/breeze/index.d.ts +1 -3
  133. package/dist/providers/breeze/index.js +67 -1420
  134. package/dist/providers/breeze/openapi.generated.js +60 -0
  135. package/dist/providers/breeze/skill.generated.js +2 -6
  136. package/dist/providers/breeze/tools.js +696 -0
  137. package/dist/providers/ccb/api.js +496 -0
  138. package/dist/providers/ccb/index.d.ts +15 -37
  139. package/dist/providers/ccb/index.js +77 -1702
  140. package/dist/providers/ccb/lib/constants.d.ts +34 -0
  141. package/dist/providers/ccb/lib/constants.js +74 -0
  142. package/dist/providers/ccb/lib/guide.js +9 -0
  143. package/dist/providers/ccb/lib/verdicts.js +387 -0
  144. package/dist/providers/ccb/openapi.generated.js +397 -0
  145. package/dist/providers/ccb/safety.js +295 -0
  146. package/dist/providers/ccb/skill.generated.js +2 -6
  147. package/dist/providers/ccb/tools.js +853 -0
  148. package/dist/providers/cloudflare/api.js +1066 -0
  149. package/dist/providers/cloudflare/index.d.ts +5 -22
  150. package/dist/providers/cloudflare/index.js +79 -197
  151. package/dist/providers/cloudflare/lib/config.d.ts +16 -0
  152. package/dist/providers/cloudflare/lib/config.js +2 -0
  153. package/dist/providers/cloudflare/lib/discovery.js +29 -0
  154. package/dist/providers/cloudflare/{graphql.js → lib/graphql.js} +1 -1
  155. package/dist/providers/cloudflare/lib/hatch.js +103 -0
  156. package/dist/providers/cloudflare/lib/path-bounds.js +28 -0
  157. package/dist/providers/cloudflare/lib/response-media.js +75 -0
  158. package/dist/providers/cloudflare/openapi.generated.js +4 -3
  159. package/dist/providers/cloudflare/{value-safety.js → safety.js} +487 -0
  160. package/dist/providers/cloudflare/skill.generated.js +2 -10
  161. package/dist/providers/cloudflare/tools.js +360 -0
  162. package/dist/providers/docs/api.js +51 -0
  163. package/dist/providers/docs/index.d.ts +1 -12
  164. package/dist/providers/docs/index.js +53 -1165
  165. package/dist/providers/docs/lib/constants.d.ts +18 -0
  166. package/dist/providers/docs/lib/constants.js +18 -0
  167. package/dist/providers/docs/lib/discovery.js +26 -0
  168. package/dist/providers/docs/lib/requests.js +48 -0
  169. package/dist/providers/docs/lib/schemas.js +168 -0
  170. package/dist/providers/docs/openapi.generated.js +16 -0
  171. package/dist/providers/docs/safety.js +54 -0
  172. package/dist/providers/docs/skill.generated.js +2 -6
  173. package/dist/providers/docs/tools.js +801 -0
  174. package/dist/providers/drive/api.js +177 -0
  175. package/dist/providers/drive/index.d.ts +1 -12
  176. package/dist/providers/drive/index.js +38 -1448
  177. package/dist/providers/drive/lib/constants.d.ts +6 -0
  178. package/dist/providers/drive/lib/constants.js +6 -0
  179. package/dist/providers/drive/lib/contracts.js +532 -0
  180. package/dist/providers/drive/lib/hatch.js +197 -0
  181. package/dist/providers/drive/openapi.generated.js +77 -0
  182. package/dist/providers/drive/safety.js +90 -0
  183. package/dist/providers/drive/skill.generated.js +2 -6
  184. package/dist/providers/drive/tools.js +1290 -0
  185. package/dist/providers/forms/api.js +71 -0
  186. package/dist/providers/forms/index.d.ts +1 -12
  187. package/dist/providers/forms/index.js +49 -1145
  188. package/dist/providers/forms/lib/constants.d.ts +14 -0
  189. package/dist/providers/forms/lib/constants.js +19 -0
  190. package/dist/providers/forms/lib/hatch.js +72 -0
  191. package/dist/providers/forms/openapi.generated.js +23 -0
  192. package/dist/providers/forms/safety.js +34 -0
  193. package/dist/providers/forms/skill.generated.js +2 -8
  194. package/dist/providers/forms/tools.js +1023 -0
  195. package/dist/providers/github/api.js +150 -0
  196. package/dist/providers/github/index.d.ts +4 -5
  197. package/dist/providers/github/index.js +30 -87
  198. package/dist/providers/github/{auth.d.ts → lib/auth.d.ts} +5 -3
  199. package/dist/providers/github/{auth.js → lib/auth.js} +40 -43
  200. package/dist/providers/github/lib/discovery.js +132 -0
  201. package/dist/providers/github/lib/operations.js +58 -0
  202. package/dist/providers/github/{scope.d.ts → lib/scope.d.ts} +2 -0
  203. package/dist/providers/github/{scope.js → lib/scope.js} +25 -1
  204. package/dist/providers/github/openapi.generated.js +1216 -0
  205. package/dist/providers/github/safety.js +216 -0
  206. package/dist/providers/github/skill.generated.js +2 -5
  207. package/dist/providers/github/tools.js +506 -0
  208. package/dist/providers/gmail/api.js +114 -0
  209. package/dist/providers/gmail/index.d.ts +1 -12
  210. package/dist/providers/gmail/index.js +73 -1621
  211. package/dist/providers/gmail/lib/constants.d.ts +13 -0
  212. package/dist/providers/gmail/lib/constants.js +16 -0
  213. package/dist/providers/gmail/lib/index.js +173 -0
  214. package/dist/providers/gmail/lib/schemas.js +176 -0
  215. package/dist/providers/gmail/lib/threading.js +120 -0
  216. package/dist/providers/gmail/openapi.generated.js +92 -0
  217. package/dist/providers/gmail/safety.js +21 -0
  218. package/dist/providers/gmail/skill.generated.js +2 -6
  219. package/dist/providers/gmail/tools.js +1435 -0
  220. package/dist/providers/overflow/api.js +1008 -0
  221. package/dist/providers/overflow/index.d.ts +1 -17
  222. package/dist/providers/overflow/index.js +60 -1488
  223. package/dist/providers/overflow/skill.generated.js +2 -5
  224. package/dist/providers/overflow/tools.js +873 -0
  225. package/dist/providers/planning-center/api.js +467 -0
  226. package/dist/providers/planning-center/index.d.ts +4 -35
  227. package/dist/providers/planning-center/index.js +69 -2445
  228. package/dist/providers/planning-center/lib/constants.d.ts +58 -0
  229. package/dist/providers/planning-center/lib/constants.js +83 -0
  230. package/dist/providers/planning-center/lib/discovery.js +40 -0
  231. package/dist/providers/planning-center/lib/guide.js +39 -0
  232. package/dist/providers/planning-center/lib/json-api.js +83 -0
  233. package/dist/providers/planning-center/lib/verdicts.js +1758 -0
  234. package/dist/providers/planning-center/openapi.generated.js +1764 -0
  235. package/dist/providers/planning-center/safety.js +188 -0
  236. package/dist/providers/planning-center/skill.generated.js +2 -27
  237. package/dist/providers/planning-center/tools.js +1010 -0
  238. package/dist/providers/quickbooks/api.js +299 -0
  239. package/dist/providers/quickbooks/index.d.ts +13 -0
  240. package/dist/providers/quickbooks/index.js +93 -0
  241. package/dist/providers/quickbooks/lib/query.js +118 -0
  242. package/dist/providers/quickbooks/lib/writes.js +168 -0
  243. package/dist/providers/quickbooks/safety.js +222 -0
  244. package/dist/providers/quickbooks/skill.generated.js +5 -0
  245. package/dist/providers/quickbooks/tools.js +117 -0
  246. package/dist/providers/sheets/api.js +133 -0
  247. package/dist/providers/sheets/index.d.ts +4 -16
  248. package/dist/providers/sheets/index.js +61 -1172
  249. package/dist/providers/sheets/lib/constants.d.ts +14 -0
  250. package/dist/providers/sheets/lib/constants.js +14 -0
  251. package/dist/providers/sheets/lib/hatch.js +163 -0
  252. package/dist/providers/sheets/lib/requests.js +105 -0
  253. package/dist/providers/sheets/lib/schemas.js +138 -0
  254. package/dist/providers/sheets/openapi.generated.js +30 -0
  255. package/dist/providers/sheets/safety.js +27 -0
  256. package/dist/providers/sheets/skill.generated.js +2 -7
  257. package/dist/providers/sheets/tools.js +733 -0
  258. package/dist/providers/slides/api.js +147 -0
  259. package/dist/providers/slides/index.d.ts +2 -10
  260. package/dist/providers/slides/index.js +48 -2555
  261. package/dist/providers/slides/lib/constants.d.ts +11 -0
  262. package/dist/providers/slides/lib/constants.js +11 -0
  263. package/dist/providers/slides/lib/requests.js +60 -0
  264. package/dist/providers/slides/lib/schemas.js +565 -0
  265. package/dist/providers/slides/openapi.generated.js +18 -0
  266. package/dist/providers/slides/skill.generated.js +2 -6
  267. package/dist/providers/slides/tools.js +1968 -0
  268. package/dist/providers/stripe/api.js +401 -0
  269. package/dist/providers/stripe/index.d.ts +5 -27
  270. package/dist/providers/stripe/index.js +74 -210
  271. package/dist/providers/stripe/lib/config.d.ts +4 -0
  272. package/dist/providers/stripe/lib/config.js +2 -0
  273. package/dist/providers/stripe/openapi.generated.js +4 -3
  274. package/dist/providers/stripe/{value-safety.js → safety.js} +5 -5
  275. package/dist/providers/stripe/skill.generated.js +2 -11
  276. package/dist/providers/stripe/tools.js +77 -0
  277. package/dist/providers/tithely/api.js +531 -0
  278. package/dist/providers/tithely/index.d.ts +17 -0
  279. package/dist/providers/tithely/index.js +86 -965
  280. package/dist/providers/tithely/skill.generated.js +2 -5
  281. package/dist/providers/tithely/tools.js +426 -0
  282. package/dist/providers/vercel/api.js +551 -0
  283. package/dist/providers/vercel/index.d.ts +9 -25
  284. package/dist/providers/vercel/index.js +65 -260
  285. package/dist/providers/vercel/lib/config.d.ts +2 -0
  286. package/dist/providers/vercel/lib/config.js +2 -0
  287. package/dist/providers/vercel/lib/index.js +117 -0
  288. package/dist/providers/vercel/lib/logs.js +100 -0
  289. package/dist/providers/vercel/lib/pin.js +270 -0
  290. package/dist/providers/vercel/openapi.generated.js +10 -5
  291. package/dist/providers/vercel/{value-safety.js → safety.js} +247 -38
  292. package/dist/providers/vercel/skill.generated.js +2 -7
  293. package/dist/providers/vercel/tools.js +642 -0
  294. package/dist/redaction-identity.js +47 -0
  295. package/dist/redaction-marker.js +125 -0
  296. package/dist/registry.d.ts +21 -15
  297. package/dist/registry.js +409 -376
  298. package/dist/routes/access-tokens.js +1 -1
  299. package/dist/routes/actor-labels.js +1 -1
  300. package/dist/routes/connect.js +1 -1
  301. package/dist/routes/dispatch.js +103 -0
  302. package/dist/routes/mcp.js +170 -79
  303. package/dist/routes/oauth.js +6 -1
  304. package/dist/routes/operator.js +2 -2
  305. package/dist/routes/shared.d.ts +5 -4
  306. package/dist/routes/shared.js +244 -177
  307. package/dist/routes/skills.js +10 -8
  308. package/dist/routes/ui-config.js +27 -3
  309. package/dist/routes/ui-data.js +21 -20
  310. package/dist/routes/ui.js +1 -1
  311. package/dist/runtime/call-admission.js +0 -26
  312. package/dist/runtime/call-entry.js +30 -0
  313. package/dist/runtime/call.js +552 -0
  314. package/dist/runtime/connector-scope.js +7 -0
  315. package/dist/runtime/credential-probe.js +34 -0
  316. package/dist/runtime/executor.js +40 -0
  317. package/dist/runtime/native-storage.js +63 -0
  318. package/dist/runtime/registry.js +27 -0
  319. package/dist/runtime/request-scope.js +72 -0
  320. package/dist/runtime/run.js +15 -7
  321. package/dist/runtime/shared-read.js +34 -5
  322. package/dist/runtime/storage.js +34 -21
  323. package/dist/sent-secrets.d.ts +194 -37
  324. package/dist/sent-secrets.js +1743 -340
  325. package/dist/server.js +5 -56
  326. package/dist/skills.js +322 -223
  327. package/dist/sqlite.js +15 -14
  328. package/dist/storage/d1-copy.js +255 -0
  329. package/dist/storage/d1-driver.js +15 -0
  330. package/dist/storage/keys.js +28 -0
  331. package/dist/storage/sql-driver.js +88 -0
  332. package/dist/storage/sql-native.js +544 -0
  333. package/dist/storage/sql-schema.d.ts +6 -0
  334. package/dist/storage/sql-schema.js +15 -0
  335. package/dist/storage/sql.d.ts +14 -20
  336. package/dist/storage/sql.js +29 -535
  337. package/dist/timeout.js +0 -26
  338. package/dist/tool-safety.js +20 -10
  339. package/dist/types.d.ts +9 -109
  340. package/dist/ui.d.ts +1 -1
  341. package/dist/ui.js +0 -1
  342. package/dist/upward.js +3 -0
  343. package/dist/usage-guide.js +3 -1
  344. package/dist/validate.d.ts +4 -2
  345. package/dist/validate.js +86 -9
  346. package/dist/version.d.ts +1 -1
  347. package/dist/version.js +1 -1
  348. package/dist/worker.js +312 -292
  349. package/dist/workspace-subject.js +5 -1
  350. package/dist/write-outcome.js +454 -34
  351. package/documentation/README.md +28 -7
  352. package/documentation/architecture.md +2409 -255
  353. package/documentation/auth.md +867 -114
  354. package/documentation/code-mode.md +49 -16
  355. package/documentation/deploying.md +164 -20
  356. package/documentation/hosted-mcp-migration.md +460 -0
  357. package/documentation/integrating.md +129 -144
  358. package/documentation/meta-tools.md +409 -32
  359. package/documentation/operating.md +27 -3
  360. package/documentation/operator-tests.md +3 -0
  361. package/documentation/operator-ui.md +84 -48
  362. package/documentation/provider-auth-migration.md +16 -63
  363. package/documentation/provider-migration-0.29.md +10 -5
  364. package/documentation/provider-migration-0.35.md +975 -0
  365. package/documentation/providers.md +1347 -0
  366. package/examples/worker/AGENTS.md +23 -9
  367. package/examples/worker/README.md +254 -135
  368. package/examples/worker/alchemy.run.ts +116 -0
  369. package/examples/worker/gitignore +10 -0
  370. package/examples/worker/src/connecta.config.ts +23 -21
  371. package/examples/worker/wrangler.jsonc +14 -5
  372. package/guides/connecting-agents.md +157 -0
  373. package/guides/how-it-works.md +156 -0
  374. package/guides/safety-and-trust.md +153 -0
  375. package/package.json +30 -50
  376. package/templates/node/.env.example +3 -0
  377. package/templates/node/README.md +22 -2
  378. package/templates/node/docker-compose.yml +1 -0
  379. package/templates/node/package.json +3 -2
  380. package/templates/node/src/connecta.config.ts +8 -0
  381. package/dist/catalog-drift.d.ts +0 -138
  382. package/dist/catalog-drift.js +0 -578
  383. package/dist/operator-ui/agents.d.ts +0 -74
  384. package/dist/operator-ui/agents.js +0 -104
  385. package/dist/operator-ui/config-summary.js +0 -565
  386. package/dist/operator-ui/connection-map.js +0 -376
  387. package/dist/operator-ui/endpoints.js +0 -221
  388. package/dist/operator-ui/fix-prompts.d.ts +0 -18
  389. package/dist/operator-ui/fix-prompts.js +0 -87
  390. package/dist/operator-ui/health.js +0 -52
  391. package/dist/operator-ui/member-page.js +0 -97
  392. package/dist/operator-ui/overview.js +0 -123
  393. package/dist/operator-ui/setup-commands.js +0 -51
  394. package/dist/operator-ui/view.d.ts +0 -401
  395. package/dist/operator-ui/view.js +0 -705
  396. package/dist/providers/_shared/request-token.js +0 -83
  397. package/dist/providers/_shared/rest/dispatch.js +0 -41
  398. package/dist/providers/_shared/rest/operation-index.d.ts +0 -133
  399. package/dist/providers/_shared/rest/tools.d.ts +0 -141
  400. package/dist/providers/_shared/rest/tools.js +0 -569
  401. package/dist/providers/_shared/rest/value-safety.d.ts +0 -201
  402. package/dist/providers/basecamp/index.d.ts +0 -45
  403. package/dist/providers/basecamp/index.js +0 -997
  404. package/dist/providers/basecamp/skill.generated.js +0 -9
  405. package/dist/providers/cloudflare/rest.d.ts +0 -37
  406. package/dist/providers/cloudflare/rest.js +0 -1097
  407. package/dist/providers/github/hosted.js +0 -218
  408. package/dist/providers/github/rest.js +0 -321
  409. package/dist/providers/infisical/index.d.ts +0 -7
  410. package/dist/providers/infisical/index.js +0 -713
  411. package/dist/providers/infisical/skill.generated.js +0 -8
  412. package/dist/providers/intercom/index.d.ts +0 -24
  413. package/dist/providers/intercom/index.js +0 -121
  414. package/dist/providers/intercom/skill.generated.js +0 -8
  415. package/dist/providers/linear/index.d.ts +0 -55
  416. package/dist/providers/linear/index.js +0 -537
  417. package/dist/providers/linear/skill.generated.js +0 -8
  418. package/dist/providers/mixpanel/index.d.ts +0 -59
  419. package/dist/providers/mixpanel/index.js +0 -472
  420. package/dist/providers/mixpanel/operations.js +0 -20
  421. package/dist/providers/mixpanel/rest.js +0 -603
  422. package/dist/providers/mixpanel/skill.generated.js +0 -10
  423. package/dist/providers/mixpanel/value-safety.js +0 -16
  424. package/dist/providers/notion/index.d.ts +0 -67
  425. package/dist/providers/notion/index.js +0 -368
  426. package/dist/providers/notion/openapi.generated.js +0 -75
  427. package/dist/providers/notion/rest.d.ts +0 -24
  428. package/dist/providers/notion/rest.js +0 -1226
  429. package/dist/providers/notion/skill.generated.js +0 -11
  430. package/dist/providers/notion/value-safety.js +0 -56
  431. package/dist/providers/revenuecat/index.d.ts +0 -51
  432. package/dist/providers/revenuecat/index.js +0 -697
  433. package/dist/providers/revenuecat/skill.generated.js +0 -11
  434. package/dist/providers/stripe/rest.d.ts +0 -14
  435. package/dist/providers/stripe/rest.js +0 -402
  436. package/dist/providers/vercel/rest.d.ts +0 -20
  437. package/dist/providers/vercel/rest.js +0 -1020
  438. package/dist/providers/wispr-flow/index.d.ts +0 -14
  439. package/dist/providers/wispr-flow/index.js +0 -117
  440. package/dist/providers/wispr-flow/skill.generated.js +0 -8
  441. /package/dist/providers/github/{key.js → lib/key.js} +0 -0
@@ -1,697 +0,0 @@
1
- import { skill } from "./skill.generated.js";
2
- import { remoteMcp, withCredentialDefaults } from "../../connectors/remote-mcp.js";
3
- import { reviewedCatalog } from "../../catalog-drift.js";
4
- import { optionsOf } from "../../config-schema.js";
5
- import { PROVIDER_COMMON, REMOTE_MCP_AUTH } from "../../connectors/option-shapes.js";
6
- import { defineProvider } from "../../provider.js";
7
- /** RevenueCat publishes one hosted MCP endpoint, streamable HTTP. */
8
- export const REVENUECAT_MCP_ENDPOINT = "https://mcp.revenuecat.ai/mcp";
9
- /**
10
- * Re-reviewed 2026-10-19 against RevenueCat's MCP reference and API v2 docs (#343, #703).
11
- * This is a superset of permission-gated live catalogs, not a tool allowlist.
12
- * Four reviewed schemas are pinned from live discovery; uncaptured schemas stay unpinned.
13
- * Tools are optional in drift comparisons: permissions, project scope, and
14
- * read-only keys can expose a subset of the reviewed inventory.
15
- */
16
- const REVENUECAT_CLASSIFICATION = {
17
- tools: {
18
- "get-account-billing": {
19
- "verdict": "read",
20
- optional: true,
21
- "reason": "Retrieves RevenueCat account billing information without changing vendor state.",
22
- },
23
- "get-app": {
24
- "verdict": "read",
25
- optional: true,
26
- "reason": "Retrieves RevenueCat app information without changing vendor state.",
27
- },
28
- "get-project-ui-config": {
29
- "verdict": "read",
30
- optional: true,
31
- "reason": "Retrieves RevenueCat project ui config information without changing vendor state.",
32
- },
33
- "list-account-billing-invoices": {
34
- "verdict": "read",
35
- optional: true,
36
- "reason": "Retrieves RevenueCat account billing invoices information without changing vendor state.",
37
- },
38
- "list-app-public-api-keys": {
39
- "verdict": "read",
40
- optional: true,
41
- "reason": "Retrieves RevenueCat app public api keys information without changing vendor state.",
42
- },
43
- "list-app-subscription-groups": {
44
- "verdict": "read",
45
- optional: true,
46
- "reason": "Lists App Store Connect subscription groups and products without changing vendor state; official MCP reference and live annotation agree.",
47
- "schemaDigest": "sha256:8474bdced405e279ee56a36da289d26e8526ee8dec870aa731a9cc1fa14474c4",
48
- },
49
- "list-apps": {
50
- "verdict": "read",
51
- optional: true,
52
- "reason": "Retrieves RevenueCat apps information without changing vendor state.",
53
- },
54
- "list-audit-logs": {
55
- "verdict": "read",
56
- optional: true,
57
- "reason": "Retrieves RevenueCat audit logs information without changing vendor state.",
58
- },
59
- "list-collaborators": {
60
- "verdict": "read",
61
- optional: true,
62
- "reason": "Retrieves RevenueCat collaborators information without changing vendor state.",
63
- },
64
- "list-projects": {
65
- "verdict": "read",
66
- optional: true,
67
- "reason": "Retrieves RevenueCat projects information without changing vendor state.",
68
- },
69
- "get-product": {
70
- "verdict": "read",
71
- optional: true,
72
- "reason": "Retrieves RevenueCat product information without changing vendor state.",
73
- },
74
- "get-product-store-state": {
75
- "verdict": "read",
76
- optional: true,
77
- "reason": "Retrieves RevenueCat product store state information without changing vendor state.",
78
- },
79
- "get-product-store-state-operation": {
80
- "verdict": "read",
81
- optional: true,
82
- "reason": "Retrieves RevenueCat product store state operation information without changing vendor state.",
83
- },
84
- "get-product-store-state-plan": {
85
- "verdict": "read",
86
- optional: true,
87
- "reason": "Retrieves RevenueCat product store state plan information without changing vendor state.",
88
- },
89
- "list-product-store-state-plans": {
90
- "verdict": "read",
91
- optional: true,
92
- "reason": "Retrieves RevenueCat product store state plans information without changing vendor state.",
93
- },
94
- "list-products": {
95
- "verdict": "read",
96
- optional: true,
97
- "reason": "Retrieves RevenueCat products information without changing vendor state.",
98
- },
99
- "get-entitlement": {
100
- "verdict": "read",
101
- optional: true,
102
- "reason": "Retrieves RevenueCat entitlement information without changing vendor state.",
103
- },
104
- "get-products-from-entitlement": {
105
- "verdict": "read",
106
- optional: true,
107
- "reason": "Retrieves RevenueCat products from entitlement information without changing vendor state.",
108
- },
109
- "list-entitlements": {
110
- "verdict": "read",
111
- optional: true,
112
- "reason": "Retrieves RevenueCat entitlements information without changing vendor state.",
113
- },
114
- "get-offering": {
115
- "verdict": "read",
116
- optional: true,
117
- "reason": "Retrieves RevenueCat offering information without changing vendor state.",
118
- },
119
- "get-offering-prices": {
120
- "verdict": "read",
121
- optional: true,
122
- "reason": "Retrieves RevenueCat offering prices information without changing vendor state.",
123
- },
124
- "list-offerings": {
125
- "verdict": "read",
126
- optional: true,
127
- "reason": "Retrieves RevenueCat offerings information without changing vendor state.",
128
- },
129
- "list-packages": {
130
- "verdict": "read",
131
- optional: true,
132
- "reason": "Retrieves RevenueCat packages information without changing vendor state.",
133
- },
134
- "get-audience": {
135
- "verdict": "read",
136
- optional: true,
137
- "reason": "Retrieves RevenueCat audience information without changing vendor state.",
138
- },
139
- "get-audience-filter-options": {
140
- "verdict": "read",
141
- optional: true,
142
- "reason": "Retrieves RevenueCat audience filter options information without changing vendor state.",
143
- },
144
- "get-targeting-rule": {
145
- "verdict": "read",
146
- optional: true,
147
- "reason": "Retrieves RevenueCat targeting rule information without changing vendor state.",
148
- },
149
- "list-audiences": {
150
- "verdict": "read",
151
- optional: true,
152
- "reason": "Retrieves RevenueCat audiences information without changing vendor state.",
153
- },
154
- "list-targeting-rules": {
155
- "verdict": "read",
156
- optional: true,
157
- "reason": "Retrieves RevenueCat targeting rules information without changing vendor state.",
158
- },
159
- "preview-audience": {
160
- "verdict": "read",
161
- optional: true,
162
- "reason": "Observational POST: previews matching customers without creating an audience; API v2 requires audiences:audiences:read and the live annotation agrees.",
163
- "schemaDigest": "sha256:75d926cdc6a2b92ece3b2d8b2fdd21831deed71464024d0004da3d2bde769682",
164
- },
165
- "render-paywall-screenshot": {
166
- "verdict": "read",
167
- optional: true,
168
- "reason": "Renders a paywall preview without publishing or editing it; the current official reference explicitly says Read and the live annotation agrees.",
169
- "schemaDigest": "sha256:abb9d0e0e8674371fff7503b7c5f215ddbca9ebed12325c5d8b376eec7252294",
170
- },
171
- "get-paywall": {
172
- "verdict": "read",
173
- optional: true,
174
- "reason": "Retrieves RevenueCat paywall information without changing vendor state.",
175
- },
176
- "list-paywalls": {
177
- "verdict": "read",
178
- optional: true,
179
- "reason": "Retrieves RevenueCat paywalls information without changing vendor state.",
180
- },
181
- "get-customer": {
182
- "verdict": "read",
183
- optional: true,
184
- "reason": "Retrieves RevenueCat customer information without changing vendor state.",
185
- },
186
- "get-customer-center-config": {
187
- "verdict": "read",
188
- optional: true,
189
- "reason": "Retrieves RevenueCat customer center config information without changing vendor state.",
190
- },
191
- "get-refund-request-preferences": {
192
- "verdict": "read",
193
- optional: true,
194
- "reason": "Retrieves RevenueCat refund request preferences information without changing vendor state.",
195
- },
196
- "get-subscription": {
197
- "verdict": "read",
198
- optional: true,
199
- "reason": "Retrieves RevenueCat subscription information without changing vendor state.",
200
- },
201
- "list-customer-events": {
202
- "verdict": "read",
203
- optional: true,
204
- "reason": "Retrieves RevenueCat customer events information without changing vendor state.",
205
- },
206
- "list-customers": {
207
- "verdict": "read",
208
- optional: true,
209
- "reason": "Retrieves RevenueCat customers information without changing vendor state.",
210
- },
211
- "list-purchases": {
212
- "verdict": "read",
213
- optional: true,
214
- "reason": "Retrieves RevenueCat purchases information without changing vendor state.",
215
- },
216
- "list-subscriptions": {
217
- "verdict": "read",
218
- optional: true,
219
- "reason": "Retrieves RevenueCat subscriptions information without changing vendor state.",
220
- },
221
- "list-virtual-currencies-balances": {
222
- "verdict": "read",
223
- optional: true,
224
- "reason": "Retrieves RevenueCat virtual currencies balances information without changing vendor state.",
225
- },
226
- "get-virtual-currency": {
227
- "verdict": "read",
228
- optional: true,
229
- "reason": "Retrieves RevenueCat virtual currency information without changing vendor state.",
230
- },
231
- "list-virtual-currencies": {
232
- "verdict": "read",
233
- optional: true,
234
- "reason": "Retrieves RevenueCat virtual currencies information without changing vendor state.",
235
- },
236
- "get-benchmarks": {
237
- "verdict": "read",
238
- optional: true,
239
- "reason": "Retrieves RevenueCat benchmarks information without changing vendor state.",
240
- },
241
- "get-chart-data": {
242
- "verdict": "read",
243
- optional: true,
244
- "reason": "Retrieves RevenueCat chart data information without changing vendor state.",
245
- },
246
- "get-chart-options-schema": {
247
- "verdict": "read",
248
- optional: true,
249
- "reason": "Retrieves RevenueCat chart options schema information without changing vendor state.",
250
- },
251
- "get-experiment": {
252
- "verdict": "read",
253
- optional: true,
254
- "reason": "Retrieves RevenueCat experiment information without changing vendor state.",
255
- },
256
- "get-experiment-results": {
257
- "verdict": "read",
258
- optional: true,
259
- "reason": "Retrieves RevenueCat experiment results information without changing vendor state.",
260
- },
261
- "get-overview-metrics": {
262
- "verdict": "read",
263
- optional: true,
264
- "reason": "Retrieves RevenueCat overview metrics information without changing vendor state.",
265
- },
266
- "get-revenue-metric": {
267
- "verdict": "read",
268
- optional: true,
269
- "reason": "Retrieves RevenueCat revenue metric information without changing vendor state.",
270
- },
271
- "list-experiments": {
272
- "verdict": "read",
273
- optional: true,
274
- "reason": "Retrieves RevenueCat experiments information without changing vendor state.",
275
- },
276
- "get-webhook-integration": {
277
- "verdict": "read",
278
- optional: true,
279
- "reason": "Retrieves RevenueCat webhook integration information without changing vendor state.",
280
- },
281
- "list-webhook-integrations": {
282
- "verdict": "read",
283
- optional: true,
284
- "reason": "Retrieves RevenueCat webhook integrations information without changing vendor state.",
285
- },
286
- "list-sdk-feature-gates": {
287
- "verdict": "read",
288
- optional: true,
289
- "reason": "Retrieves RevenueCat sdk feature gates information without changing vendor state.",
290
- },
291
- "list-sdk-versions": {
292
- "verdict": "read",
293
- optional: true,
294
- "reason": "Retrieves RevenueCat sdk versions information without changing vendor state.",
295
- },
296
- "get-paywall-ai-task": {
297
- "verdict": "read",
298
- optional: true,
299
- "reason": "Retrieves RevenueCat paywall ai task information without changing vendor state.",
300
- },
301
- "create-app": {
302
- "verdict": "write",
303
- optional: true,
304
- "reason": "create app creates or appends RevenueCat state; it has side effects.",
305
- },
306
- "create-project": {
307
- "verdict": "write",
308
- optional: true,
309
- "reason": "create project creates or appends RevenueCat state; it has side effects.",
310
- },
311
- "update-app": {
312
- "verdict": "destructive",
313
- optional: true,
314
- "reason": "update app changes existing RevenueCat state or removes it.",
315
- },
316
- "update-project-ui-config": {
317
- "verdict": "destructive",
318
- optional: true,
319
- "reason": "update project ui config changes existing RevenueCat state or removes it.",
320
- },
321
- "validate-app-credentials": {
322
- "verdict": "write",
323
- optional: true,
324
- "reason": "Kept write conservatively: the MCP reference says Read and promises credentials are unchanged, but the live readOnlyHint is false and API v2 app docs do not establish whether validation results/status persist. No claim that validation mutates credentials.",
325
- "schemaDigest": "sha256:680c861273535483ea19c032b4430b7f085fb89d6240853c15ed9284e50672c6",
326
- },
327
- "archive-product": {
328
- "verdict": "destructive",
329
- optional: true,
330
- "reason": "archive product changes existing RevenueCat state or removes it.",
331
- },
332
- "create-product": {
333
- "verdict": "write",
334
- optional: true,
335
- "reason": "create product creates or appends RevenueCat state; it has side effects.",
336
- },
337
- "create-product-prices": {
338
- "verdict": "destructive",
339
- optional: true,
340
- "reason": "create product prices changes existing RevenueCat state or removes it.",
341
- },
342
- "equalize-subscription-prices": {
343
- "verdict": "write",
344
- optional: true,
345
- "reason": "equalize subscription prices creates or appends RevenueCat state; it has side effects.",
346
- },
347
- "set-product-store-state": {
348
- "verdict": "destructive",
349
- optional: true,
350
- "reason": "set product store state changes existing RevenueCat state or removes it.",
351
- },
352
- "submit-products-to-store": {
353
- "verdict": "destructive",
354
- optional: true,
355
- "reason": "submit products to store changes existing RevenueCat state or removes it.",
356
- },
357
- "unarchive-product": {
358
- "verdict": "destructive",
359
- optional: true,
360
- "reason": "unarchive product changes existing RevenueCat state or removes it.",
361
- },
362
- "update-product": {
363
- "verdict": "destructive",
364
- optional: true,
365
- "reason": "update product changes existing RevenueCat state or removes it.",
366
- },
367
- "upload-product-store-state-screenshot": {
368
- "verdict": "write",
369
- optional: true,
370
- "reason": "upload product store state screenshot creates or appends RevenueCat state; it has side effects.",
371
- },
372
- "create-product-store-state-plan": {
373
- "verdict": "write",
374
- optional: true,
375
- "reason": "create product store state plan creates or appends RevenueCat state; it has side effects.",
376
- },
377
- "plan-product-store-state-plan": {
378
- "verdict": "destructive",
379
- optional: true,
380
- "reason": "Advances a store-state plan workflow and can create asynchronous task state.",
381
- },
382
- "apply-product-store-state-plan": {
383
- "verdict": "destructive",
384
- optional: true,
385
- "reason": "Applies a plan to store configuration and can change existing products.",
386
- },
387
- "update-product-store-state-plan": {
388
- "verdict": "destructive",
389
- optional: true,
390
- "reason": "update product store state plan changes existing RevenueCat state or removes it.",
391
- },
392
- "discard-product-store-state-plan": {
393
- "verdict": "destructive",
394
- optional: true,
395
- "reason": "discard product store state plan changes existing RevenueCat state or removes it.",
396
- },
397
- "archive-entitlement": {
398
- "verdict": "destructive",
399
- optional: true,
400
- "reason": "archive entitlement changes existing RevenueCat state or removes it.",
401
- },
402
- "attach-products-to-entitlement": {
403
- "verdict": "write",
404
- optional: true,
405
- "reason": "attach products to entitlement creates or appends RevenueCat state; it has side effects.",
406
- },
407
- "create-entitlement": {
408
- "verdict": "write",
409
- optional: true,
410
- "reason": "create entitlement creates or appends RevenueCat state; it has side effects.",
411
- },
412
- "detach-products-from-entitlement": {
413
- "verdict": "destructive",
414
- optional: true,
415
- "reason": "detach products from entitlement changes existing RevenueCat state or removes it.",
416
- },
417
- "unarchive-entitlement": {
418
- "verdict": "destructive",
419
- optional: true,
420
- "reason": "unarchive entitlement changes existing RevenueCat state or removes it.",
421
- },
422
- "update-entitlement": {
423
- "verdict": "destructive",
424
- optional: true,
425
- "reason": "update entitlement changes existing RevenueCat state or removes it.",
426
- },
427
- "archive-offering": {
428
- "verdict": "destructive",
429
- optional: true,
430
- "reason": "archive offering changes existing RevenueCat state or removes it.",
431
- },
432
- "attach-products-to-package": {
433
- "verdict": "write",
434
- optional: true,
435
- "reason": "attach products to package creates or appends RevenueCat state; it has side effects.",
436
- },
437
- "create-offering": {
438
- "verdict": "write",
439
- optional: true,
440
- "reason": "create offering creates or appends RevenueCat state; it has side effects.",
441
- },
442
- "create-packages": {
443
- "verdict": "write",
444
- optional: true,
445
- "reason": "create packages creates or appends RevenueCat state; it has side effects.",
446
- },
447
- "delete-package-from-offering": {
448
- "verdict": "destructive",
449
- optional: true,
450
- "reason": "delete package from offering changes existing RevenueCat state or removes it.",
451
- },
452
- "detach-products-from-package": {
453
- "verdict": "destructive",
454
- optional: true,
455
- "reason": "detach products from package changes existing RevenueCat state or removes it.",
456
- },
457
- "unarchive-offering": {
458
- "verdict": "destructive",
459
- optional: true,
460
- "reason": "unarchive offering changes existing RevenueCat state or removes it.",
461
- },
462
- "update-offering": {
463
- "verdict": "destructive",
464
- optional: true,
465
- "reason": "update offering changes existing RevenueCat state or removes it.",
466
- },
467
- "create-audience": {
468
- "verdict": "write",
469
- optional: true,
470
- "reason": "create audience creates or appends RevenueCat state; it has side effects.",
471
- },
472
- "update-audience": {
473
- "verdict": "destructive",
474
- optional: true,
475
- "reason": "update audience changes existing RevenueCat state or removes it.",
476
- },
477
- "create-targeting-rule": {
478
- "verdict": "write",
479
- optional: true,
480
- "reason": "create targeting rule creates or appends RevenueCat state; it has side effects.",
481
- },
482
- "update-targeting-rule": {
483
- "verdict": "destructive",
484
- optional: true,
485
- "reason": "update targeting rule changes existing RevenueCat state or removes it.",
486
- },
487
- "delete-targeting-rule": {
488
- "verdict": "destructive",
489
- optional: true,
490
- "reason": "delete targeting rule changes existing RevenueCat state or removes it.",
491
- },
492
- "attach-offering-to-paywall": {
493
- "verdict": "destructive",
494
- optional: true,
495
- "reason": "attach offering to paywall changes existing RevenueCat state or removes it.",
496
- },
497
- "detach-offering-from-paywall": {
498
- "verdict": "destructive",
499
- optional: true,
500
- "reason": "detach offering from paywall changes existing RevenueCat state or removes it.",
501
- },
502
- "duplicate-paywall": {
503
- "verdict": "write",
504
- optional: true,
505
- "reason": "duplicate paywall creates or appends RevenueCat state; it has side effects.",
506
- },
507
- "publish-paywall": {
508
- "verdict": "destructive",
509
- optional: true,
510
- "reason": "publish paywall changes existing RevenueCat state or removes it.",
511
- },
512
- "unpublish-paywall": {
513
- "verdict": "destructive",
514
- optional: true,
515
- "reason": "unpublish paywall changes existing RevenueCat state or removes it.",
516
- },
517
- "duplicate-offering": {
518
- "verdict": "write",
519
- optional: true,
520
- "reason": "duplicate offering creates or appends RevenueCat state; it has side effects.",
521
- },
522
- "create-experiment": {
523
- "verdict": "write",
524
- optional: true,
525
- "reason": "create experiment creates or appends RevenueCat state; it has side effects.",
526
- },
527
- "pause-experiment": {
528
- "verdict": "destructive",
529
- optional: true,
530
- "reason": "pause experiment changes existing RevenueCat state or removes it.",
531
- },
532
- "resume-experiment": {
533
- "verdict": "destructive",
534
- optional: true,
535
- "reason": "resume experiment changes existing RevenueCat state or removes it.",
536
- },
537
- "start-experiment": {
538
- "verdict": "destructive",
539
- optional: true,
540
- "reason": "start experiment changes existing RevenueCat state or removes it.",
541
- },
542
- "stop-experiment": {
543
- "verdict": "destructive",
544
- optional: true,
545
- "reason": "stop experiment changes existing RevenueCat state or removes it.",
546
- },
547
- "update-experiment": {
548
- "verdict": "destructive",
549
- optional: true,
550
- "reason": "update experiment changes existing RevenueCat state or removes it.",
551
- },
552
- "assign-customer-offering": {
553
- "verdict": "destructive",
554
- optional: true,
555
- "reason": "assign customer offering changes existing RevenueCat state or removes it.",
556
- },
557
- "grant-customer-entitlement": {
558
- "verdict": "destructive",
559
- optional: true,
560
- "reason": "grant customer entitlement changes existing RevenueCat state or removes it.",
561
- },
562
- "archive-virtual-currency": {
563
- "verdict": "destructive",
564
- optional: true,
565
- "reason": "archive virtual currency changes existing RevenueCat state or removes it.",
566
- },
567
- "create-virtual-currency": {
568
- "verdict": "write",
569
- optional: true,
570
- "reason": "create virtual currency creates or appends RevenueCat state; it has side effects.",
571
- },
572
- "unarchive-virtual-currency": {
573
- "verdict": "destructive",
574
- optional: true,
575
- "reason": "unarchive virtual currency changes existing RevenueCat state or removes it.",
576
- },
577
- "update-virtual-currency": {
578
- "verdict": "destructive",
579
- optional: true,
580
- "reason": "update virtual currency changes existing RevenueCat state or removes it.",
581
- },
582
- "create-webhook-integration": {
583
- "verdict": "destructive",
584
- optional: true,
585
- "reason": "Starts delivering customer events to a caller-supplied URL; omitted filters deliver every customer event in the project. Destructive by consequence even though it creates a new integration.",
586
- },
587
- "delete-webhook-integration": {
588
- "verdict": "destructive",
589
- optional: true,
590
- "reason": "delete webhook integration changes existing RevenueCat state or removes it.",
591
- },
592
- "update-webhook-integration": {
593
- "verdict": "destructive",
594
- optional: true,
595
- "reason": "update webhook integration changes existing RevenueCat state or removes it.",
596
- },
597
- "create-paywall-ai": {
598
- "verdict": "write",
599
- optional: true,
600
- "reason": "create paywall ai creates or appends RevenueCat state; it has side effects.",
601
- },
602
- "edit-paywall-ai": {
603
- "verdict": "destructive",
604
- optional: true,
605
- "reason": "edit paywall ai changes existing RevenueCat state or removes it.",
606
- },
607
- },
608
- };
609
- /** The catalog's summary bound; a longer declared value throws (`src/registry.ts`). */
610
- const SUMMARY_BUDGET = 120;
611
- /**
612
- * Fit a purpose-bearing summary inside the catalog's bound.
613
- *
614
- * Stripe and Mixpanel declare static summaries because their routing fact is
615
- * an enumerable variant. RevenueCat's is not: two `sk_` connectors have the
616
- * same title, the same endpoint, and the same catalog, and differ only by the
617
- * project the operator says each key reaches. So the summary carries that, and
618
- * clipping is this function's job rather than the operator's.
619
- */
620
- function boundedSummary(prefix, purpose) {
621
- const full = `${prefix}${purpose}`;
622
- if (full.length <= SUMMARY_BUDGET)
623
- return full;
624
- return `${full.slice(0, SUMMARY_BUDGET - 1).trimEnd()}…`;
625
- }
626
- function sharedUsageGuide() {
627
- return skill.fragments.guide_0;
628
- }
629
- function oauthUsageGuide(purpose, instructions) {
630
- const projectInstructions = instructions?.trim();
631
- return `${skill.fragments.guide_1}${purpose}${skill.fragments.guide_2}${sharedUsageGuide()}${projectInstructions ? `\n## ${skill.instructionsHeading}\n\n${projectInstructions}\n` : ""}`;
632
- }
633
- function keyUsageGuide(purpose, instructions) {
634
- const projectInstructions = instructions?.trim();
635
- return `# RevenueCat usage
636
-
637
- Single-project connection: ${purpose}${skill.fragments.guide_3}${sharedUsageGuide()}${projectInstructions ? `\n## ${skill.instructionsHeading}\n\n${projectInstructions}\n` : ""}`;
638
- }
639
- /** The closed options revenuecat() accepts; see `assertKnownOptions`. */
640
- const REVENUECAT_OPTIONS = optionsOf()({ ...PROVIDER_COMMON, auth: REMOTE_MCP_AUTH });
641
- /** A maintained RevenueCat hosted-MCP connection. */
642
- export const revenuecat = defineProvider({
643
- name: "revenuecat",
644
- title: "RevenueCat",
645
- kind: "mcp",
646
- readme: "RevenueCat",
647
- bundle: { "baselineGzip": 128548, "maxGzip": 188548 },
648
- skill,
649
- options: REVENUECAT_OPTIONS,
650
- classify: REVENUECAT_CLASSIFICATION,
651
- create: revenuecatConnector,
652
- });
653
- function revenuecatConnector(id, options, provider) {
654
- const purpose = options.purpose.trim();
655
- const auth = withCredentialDefaults(options.auth ?? { type: "oauth" }, {
656
- credential: {
657
- label: "API v2 secret key",
658
- description: "A RevenueCat API v2 secret key. It reaches exactly one project, which is why two projects are two connectors; it is stored encrypted and never displayed.",
659
- placeholder: "sk_…",
660
- },
661
- });
662
- // Both static shapes reach one project. Where the key came from — the
663
- // deployment file or the operator page — changes nothing an agent must know
664
- // about scope, so the title, description, and guide follow the scope alone.
665
- const scoped = auth.type !== "oauth";
666
- const connector = remoteMcp(id, {
667
- url: REVENUECAT_MCP_ENDPOINT,
668
- ...provider.connectorOptions,
669
- // The scope shape rides the title because browse-time discovery renders
670
- // the title and the guide summary and nothing else, and reaching one
671
- // project versus every project the account has is the fact an agent must
672
- // not get wrong between two RevenueCat connections.
673
- title: options.title ?? (scoped ? "RevenueCat (single project)" : "RevenueCat"),
674
- description: scoped
675
- ? `RevenueCat subscriptions and revenue (one project, static key) — ${purpose}`
676
- : `RevenueCat subscriptions and revenue (every project the account can reach) — ${purpose}`,
677
- auth,
678
- requireHttps: true,
679
- classify: provider.classify,
680
- usageGuide: {
681
- content: scoped ? keyUsageGuide(purpose, options.instructions) : oauthUsageGuide(purpose, options.instructions),
682
- // Explicit rather than derived, and purpose-bearing rather than static:
683
- // the derived summary would cut the scoping sentence mid-clause at 120
684
- // characters, and two static summaries would leave two `sk_` connectors
685
- // indistinguishable in the one field search returns (P3).
686
- summary: scoped
687
- ? boundedSummary("One project only: ", purpose)
688
- : boundedSummary("All account projects; list-projects first: ", purpose),
689
- // Not `required`. RevenueCat's own schemas describe each call; the guide
690
- // carries the project-resolution sequence, which is worth reading before
691
- // a run rather than before every call.
692
- },
693
- });
694
- return connector;
695
- }
696
- /** @deprecated Read `revenuecat.definition.classify` instead. Kept for existing imports. */
697
- export const REVENUECAT_VETTED_CATALOG = reviewedCatalog(revenuecat.definition.classify, 'defineProvider("revenuecat")');