youtube-knowledge-mcp 2.1.0 → 3.0.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 (478) hide show
  1. package/README.md +153 -38
  2. package/dist/brain-schemas.d.ts +10 -10
  3. package/dist/brain-schemas.d.ts.map +1 -1
  4. package/dist/brain-schemas.js +0 -4
  5. package/dist/brain-schemas.js.map +1 -1
  6. package/dist/harvest-schemas.d.ts +75 -0
  7. package/dist/harvest-schemas.d.ts.map +1 -0
  8. package/dist/harvest-schemas.js +106 -0
  9. package/dist/harvest-schemas.js.map +1 -0
  10. package/dist/http/app.d.ts +16 -0
  11. package/dist/http/app.d.ts.map +1 -0
  12. package/dist/http/app.js +176 -0
  13. package/dist/http/app.js.map +1 -0
  14. package/dist/http/auth.d.ts +38 -0
  15. package/dist/http/auth.d.ts.map +1 -0
  16. package/dist/http/auth.js +79 -0
  17. package/dist/http/auth.js.map +1 -0
  18. package/dist/http/config.d.ts +41 -0
  19. package/dist/http/config.d.ts.map +1 -0
  20. package/dist/http/config.js +65 -0
  21. package/dist/http/config.js.map +1 -0
  22. package/dist/http/rate-limiter.d.ts +24 -0
  23. package/dist/http/rate-limiter.d.ts.map +1 -0
  24. package/dist/http/rate-limiter.js +55 -0
  25. package/dist/http/rate-limiter.js.map +1 -0
  26. package/dist/http/sessions.d.ts +34 -0
  27. package/dist/http/sessions.d.ts.map +1 -0
  28. package/dist/http/sessions.js +62 -0
  29. package/dist/http/sessions.js.map +1 -0
  30. package/dist/http.d.ts +6 -48
  31. package/dist/http.d.ts.map +1 -1
  32. package/dist/http.js +35 -252
  33. package/dist/http.js.map +1 -1
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +11 -517
  36. package/dist/index.js.map +1 -1
  37. package/dist/prompts-brain.d.ts +4 -0
  38. package/dist/prompts-brain.d.ts.map +1 -0
  39. package/dist/prompts-brain.js +48 -0
  40. package/dist/prompts-brain.js.map +1 -0
  41. package/dist/prompts-research.d.ts +4 -0
  42. package/dist/prompts-research.d.ts.map +1 -0
  43. package/dist/prompts-research.js +74 -0
  44. package/dist/prompts-research.js.map +1 -0
  45. package/dist/prompts-shared.d.ts +13 -0
  46. package/dist/prompts-shared.d.ts.map +1 -0
  47. package/dist/prompts-shared.js +7 -0
  48. package/dist/prompts-shared.js.map +1 -0
  49. package/dist/prompts.d.ts.map +1 -1
  50. package/dist/prompts.js +5 -100
  51. package/dist/prompts.js.map +1 -1
  52. package/dist/registry/brain-tools.d.ts +4 -0
  53. package/dist/registry/brain-tools.d.ts.map +1 -0
  54. package/dist/registry/brain-tools.js +104 -0
  55. package/dist/registry/brain-tools.js.map +1 -0
  56. package/dist/registry/channel-tools.d.ts +4 -0
  57. package/dist/registry/channel-tools.d.ts.map +1 -0
  58. package/dist/registry/channel-tools.js +53 -0
  59. package/dist/registry/channel-tools.js.map +1 -0
  60. package/dist/registry/harvest-tools.d.ts +10 -0
  61. package/dist/registry/harvest-tools.d.ts.map +1 -0
  62. package/dist/registry/harvest-tools.js +109 -0
  63. package/dist/registry/harvest-tools.js.map +1 -0
  64. package/dist/registry/health-tools.d.ts +4 -0
  65. package/dist/registry/health-tools.d.ts.map +1 -0
  66. package/dist/registry/health-tools.js +39 -0
  67. package/dist/registry/health-tools.js.map +1 -0
  68. package/dist/registry/index.d.ts +8 -0
  69. package/dist/registry/index.d.ts.map +1 -0
  70. package/dist/registry/index.js +29 -0
  71. package/dist/registry/index.js.map +1 -0
  72. package/dist/registry/library-tools.d.ts +4 -0
  73. package/dist/registry/library-tools.d.ts.map +1 -0
  74. package/dist/registry/library-tools.js +116 -0
  75. package/dist/registry/library-tools.js.map +1 -0
  76. package/dist/registry/media-tools.d.ts +4 -0
  77. package/dist/registry/media-tools.d.ts.map +1 -0
  78. package/dist/registry/media-tools.js +100 -0
  79. package/dist/registry/media-tools.js.map +1 -0
  80. package/dist/registry/thumbnail-tools.d.ts +7 -0
  81. package/dist/registry/thumbnail-tools.d.ts.map +1 -0
  82. package/dist/registry/thumbnail-tools.js +72 -0
  83. package/dist/registry/thumbnail-tools.js.map +1 -0
  84. package/dist/registry/transcript-tools.d.ts +4 -0
  85. package/dist/registry/transcript-tools.d.ts.map +1 -0
  86. package/dist/registry/transcript-tools.js +68 -0
  87. package/dist/registry/transcript-tools.js.map +1 -0
  88. package/dist/registry/types.d.ts +41 -0
  89. package/dist/registry/types.d.ts.map +1 -0
  90. package/dist/registry/types.js +17 -0
  91. package/dist/registry/types.js.map +1 -0
  92. package/dist/registry/video-tools.d.ts +4 -0
  93. package/dist/registry/video-tools.d.ts.map +1 -0
  94. package/dist/registry/video-tools.js +101 -0
  95. package/dist/registry/video-tools.js.map +1 -0
  96. package/dist/resources.d.ts.map +1 -1
  97. package/dist/resources.js +13 -10
  98. package/dist/resources.js.map +1 -1
  99. package/dist/schemas.d.ts +250 -2
  100. package/dist/schemas.d.ts.map +1 -1
  101. package/dist/schemas.js +61 -0
  102. package/dist/schemas.js.map +1 -1
  103. package/dist/thumbnail-resource.d.ts +8 -0
  104. package/dist/thumbnail-resource.d.ts.map +1 -0
  105. package/dist/thumbnail-resource.js +38 -0
  106. package/dist/thumbnail-resource.js.map +1 -0
  107. package/dist/thumbnail-schemas.d.ts +512 -0
  108. package/dist/thumbnail-schemas.d.ts.map +1 -0
  109. package/dist/thumbnail-schemas.js +95 -0
  110. package/dist/thumbnail-schemas.js.map +1 -0
  111. package/dist/tools/ask-brain.js +1 -1
  112. package/dist/tools/ask-brain.js.map +1 -1
  113. package/dist/tools/batch.js +1 -1
  114. package/dist/tools/batch.js.map +1 -1
  115. package/dist/tools/brain-info.js +1 -1
  116. package/dist/tools/brain-info.js.map +1 -1
  117. package/dist/tools/build-brain.js +1 -1
  118. package/dist/tools/build-brain.js.map +1 -1
  119. package/dist/tools/check-health.d.ts +61 -0
  120. package/dist/tools/check-health.d.ts.map +1 -1
  121. package/dist/tools/check-health.js +94 -6
  122. package/dist/tools/check-health.js.map +1 -1
  123. package/dist/tools/clips.d.ts +9 -41
  124. package/dist/tools/clips.d.ts.map +1 -1
  125. package/dist/tools/clips.js +52 -128
  126. package/dist/tools/clips.js.map +1 -1
  127. package/dist/tools/fetch-channel-thumbnails.d.ts +179 -0
  128. package/dist/tools/fetch-channel-thumbnails.d.ts.map +1 -0
  129. package/dist/tools/fetch-channel-thumbnails.js +123 -0
  130. package/dist/tools/fetch-channel-thumbnails.js.map +1 -0
  131. package/dist/tools/fetch-videos.d.ts +18 -4
  132. package/dist/tools/fetch-videos.d.ts.map +1 -1
  133. package/dist/tools/fetch-videos.js +64 -20
  134. package/dist/tools/fetch-videos.js.map +1 -1
  135. package/dist/tools/frames-subtitles.d.ts +44 -0
  136. package/dist/tools/frames-subtitles.d.ts.map +1 -0
  137. package/dist/tools/frames-subtitles.js +104 -0
  138. package/dist/tools/frames-subtitles.js.map +1 -0
  139. package/dist/tools/get-channel-info.d.ts +2 -0
  140. package/dist/tools/get-channel-info.d.ts.map +1 -1
  141. package/dist/tools/get-channel-info.js +8 -1
  142. package/dist/tools/get-channel-info.js.map +1 -1
  143. package/dist/tools/get-comments.d.ts +238 -6
  144. package/dist/tools/get-comments.d.ts.map +1 -1
  145. package/dist/tools/get-comments.js +85 -21
  146. package/dist/tools/get-comments.js.map +1 -1
  147. package/dist/tools/get-coverage.d.ts +122 -0
  148. package/dist/tools/get-coverage.d.ts.map +1 -0
  149. package/dist/tools/get-coverage.js +105 -0
  150. package/dist/tools/get-coverage.js.map +1 -0
  151. package/dist/tools/get-playlist-info.d.ts.map +1 -1
  152. package/dist/tools/get-playlist-info.js +1 -0
  153. package/dist/tools/get-playlist-info.js.map +1 -1
  154. package/dist/tools/get-thumbnail.d.ts +38 -0
  155. package/dist/tools/get-thumbnail.d.ts.map +1 -0
  156. package/dist/tools/get-thumbnail.js +152 -0
  157. package/dist/tools/get-thumbnail.js.map +1 -0
  158. package/dist/tools/get-transcript.d.ts.map +1 -1
  159. package/dist/tools/get-transcript.js +2 -14
  160. package/dist/tools/get-transcript.js.map +1 -1
  161. package/dist/tools/harvest-channel.d.ts +92 -0
  162. package/dist/tools/harvest-channel.d.ts.map +1 -0
  163. package/dist/tools/harvest-channel.js +62 -0
  164. package/dist/tools/harvest-channel.js.map +1 -0
  165. package/dist/tools/harvest-comments.d.ts +81 -0
  166. package/dist/tools/harvest-comments.d.ts.map +1 -0
  167. package/dist/tools/harvest-comments.js +115 -0
  168. package/dist/tools/harvest-comments.js.map +1 -0
  169. package/dist/tools/library.d.ts.map +1 -1
  170. package/dist/tools/library.js +14 -4
  171. package/dist/tools/library.js.map +1 -1
  172. package/dist/tools/list-channel-thumbnails.d.ts +235 -0
  173. package/dist/tools/list-channel-thumbnails.d.ts.map +1 -0
  174. package/dist/tools/list-channel-thumbnails.js +79 -0
  175. package/dist/tools/list-channel-thumbnails.js.map +1 -0
  176. package/dist/tools/list-library.js +1 -1
  177. package/dist/tools/list-library.js.map +1 -1
  178. package/dist/tools/prune-harvest.d.ts +59 -0
  179. package/dist/tools/prune-harvest.d.ts.map +1 -0
  180. package/dist/tools/prune-harvest.js +108 -0
  181. package/dist/tools/prune-harvest.js.map +1 -0
  182. package/dist/tools/query-comments.d.ts +125 -0
  183. package/dist/tools/query-comments.d.ts.map +1 -0
  184. package/dist/tools/query-comments.js +106 -0
  185. package/dist/tools/query-comments.js.map +1 -0
  186. package/dist/tools/query-videos.d.ts +118 -0
  187. package/dist/tools/query-videos.d.ts.map +1 -0
  188. package/dist/tools/query-videos.js +97 -0
  189. package/dist/tools/query-videos.js.map +1 -0
  190. package/dist/tools/repair-store.d.ts +34 -0
  191. package/dist/tools/repair-store.d.ts.map +1 -0
  192. package/dist/tools/repair-store.js +58 -0
  193. package/dist/tools/repair-store.js.map +1 -0
  194. package/dist/tools/save-to-library.d.ts.map +1 -1
  195. package/dist/tools/save-to-library.js +5 -1
  196. package/dist/tools/save-to-library.js.map +1 -1
  197. package/dist/tools/search-channels.d.ts +6 -0
  198. package/dist/tools/search-channels.d.ts.map +1 -1
  199. package/dist/tools/search-channels.js +5 -1
  200. package/dist/tools/search-channels.js.map +1 -1
  201. package/dist/tools/search-transcript.d.ts.map +1 -1
  202. package/dist/tools/search-transcript.js +6 -13
  203. package/dist/tools/search-transcript.js.map +1 -1
  204. package/dist/tools/search-videos.d.ts +3 -0
  205. package/dist/tools/search-videos.d.ts.map +1 -1
  206. package/dist/tools/search-videos.js +1 -1
  207. package/dist/tools/search-videos.js.map +1 -1
  208. package/dist/utils/batches.d.ts +15 -0
  209. package/dist/utils/batches.d.ts.map +1 -0
  210. package/dist/utils/batches.js +31 -0
  211. package/dist/utils/batches.js.map +1 -0
  212. package/dist/utils/brain-build.d.ts.map +1 -1
  213. package/dist/utils/brain-build.js +1 -12
  214. package/dist/utils/brain-build.js.map +1 -1
  215. package/dist/utils/brain-index.d.ts.map +1 -1
  216. package/dist/utils/brain-index.js +3 -2
  217. package/dist/utils/brain-index.js.map +1 -1
  218. package/dist/utils/brain-lock.d.ts +2 -18
  219. package/dist/utils/brain-lock.d.ts.map +1 -1
  220. package/dist/utils/brain-lock.js +4 -80
  221. package/dist/utils/brain-lock.js.map +1 -1
  222. package/dist/utils/brain-lookup.d.ts +8 -0
  223. package/dist/utils/brain-lookup.d.ts.map +1 -1
  224. package/dist/utils/brain-lookup.js +5 -31
  225. package/dist/utils/brain-lookup.js.map +1 -1
  226. package/dist/utils/brain-storage.d.ts.map +1 -1
  227. package/dist/utils/brain-storage.js +5 -5
  228. package/dist/utils/brain-storage.js.map +1 -1
  229. package/dist/utils/caption-probe.d.ts +7 -0
  230. package/dist/utils/caption-probe.d.ts.map +1 -0
  231. package/dist/utils/caption-probe.js +36 -0
  232. package/dist/utils/caption-probe.js.map +1 -0
  233. package/dist/utils/channel-images.d.ts +16 -0
  234. package/dist/utils/channel-images.d.ts.map +1 -0
  235. package/dist/utils/channel-images.js +35 -0
  236. package/dist/utils/channel-images.js.map +1 -0
  237. package/dist/utils/channel-lookup.d.ts +5 -0
  238. package/dist/utils/channel-lookup.d.ts.map +1 -0
  239. package/dist/utils/channel-lookup.js +37 -0
  240. package/dist/utils/channel-lookup.js.map +1 -0
  241. package/dist/utils/chapters.d.ts +11 -0
  242. package/dist/utils/chapters.d.ts.map +1 -0
  243. package/dist/utils/chapters.js +24 -0
  244. package/dist/utils/chapters.js.map +1 -0
  245. package/dist/utils/clips.d.ts.map +1 -1
  246. package/dist/utils/clips.js +18 -26
  247. package/dist/utils/clips.js.map +1 -1
  248. package/dist/utils/comment-store.d.ts +71 -0
  249. package/dist/utils/comment-store.d.ts.map +1 -0
  250. package/dist/utils/comment-store.js +129 -0
  251. package/dist/utils/comment-store.js.map +1 -0
  252. package/dist/utils/comment-threads.d.ts +51 -0
  253. package/dist/utils/comment-threads.d.ts.map +1 -0
  254. package/dist/utils/comment-threads.js +76 -0
  255. package/dist/utils/comment-threads.js.map +1 -0
  256. package/dist/utils/coverage-text.d.ts +3 -0
  257. package/dist/utils/coverage-text.d.ts.map +1 -0
  258. package/dist/utils/coverage-text.js +62 -0
  259. package/dist/utils/coverage-text.js.map +1 -0
  260. package/dist/utils/coverage.d.ts +57 -0
  261. package/dist/utils/coverage.d.ts.map +1 -0
  262. package/dist/utils/coverage.js +142 -0
  263. package/dist/utils/coverage.js.map +1 -0
  264. package/dist/utils/env.d.ts +26 -0
  265. package/dist/utils/env.d.ts.map +1 -0
  266. package/dist/utils/env.js +72 -0
  267. package/dist/utils/env.js.map +1 -0
  268. package/dist/utils/errors.d.ts +1 -1
  269. package/dist/utils/errors.d.ts.map +1 -1
  270. package/dist/utils/errors.js +28 -2
  271. package/dist/utils/errors.js.map +1 -1
  272. package/dist/utils/file-lock.d.ts +34 -0
  273. package/dist/utils/file-lock.d.ts.map +1 -0
  274. package/dist/utils/file-lock.js +91 -0
  275. package/dist/utils/file-lock.js.map +1 -0
  276. package/dist/utils/flat-listing.d.ts +89 -0
  277. package/dist/utils/flat-listing.d.ts.map +1 -0
  278. package/dist/utils/flat-listing.js +68 -0
  279. package/dist/utils/flat-listing.js.map +1 -0
  280. package/dist/utils/format.d.ts +18 -4
  281. package/dist/utils/format.d.ts.map +1 -1
  282. package/dist/utils/format.js +2 -6
  283. package/dist/utils/format.js.map +1 -1
  284. package/dist/utils/guard.d.ts +21 -0
  285. package/dist/utils/guard.d.ts.map +1 -0
  286. package/dist/utils/guard.js +105 -0
  287. package/dist/utils/guard.js.map +1 -0
  288. package/dist/utils/harvest-catalog.d.ts +44 -0
  289. package/dist/utils/harvest-catalog.d.ts.map +1 -0
  290. package/dist/utils/harvest-catalog.js +164 -0
  291. package/dist/utils/harvest-catalog.js.map +1 -0
  292. package/dist/utils/harvest-lock.d.ts +3 -0
  293. package/dist/utils/harvest-lock.d.ts.map +1 -0
  294. package/dist/utils/harvest-lock.js +26 -0
  295. package/dist/utils/harvest-lock.js.map +1 -0
  296. package/dist/utils/harvest-receipts.d.ts +14 -0
  297. package/dist/utils/harvest-receipts.d.ts.map +1 -0
  298. package/dist/utils/harvest-receipts.js +110 -0
  299. package/dist/utils/harvest-receipts.js.map +1 -0
  300. package/dist/utils/image-dimensions.d.ts +19 -0
  301. package/dist/utils/image-dimensions.d.ts.map +1 -0
  302. package/dist/utils/image-dimensions.js +93 -0
  303. package/dist/utils/image-dimensions.js.map +1 -0
  304. package/dist/utils/image-fetch.d.ts +31 -0
  305. package/dist/utils/image-fetch.d.ts.map +1 -0
  306. package/dist/utils/image-fetch.js +141 -0
  307. package/dist/utils/image-fetch.js.map +1 -0
  308. package/dist/utils/json-file.d.ts +14 -5
  309. package/dist/utils/json-file.d.ts.map +1 -1
  310. package/dist/utils/json-file.js +24 -9
  311. package/dist/utils/json-file.js.map +1 -1
  312. package/dist/utils/listing-cursor.d.ts +31 -0
  313. package/dist/utils/listing-cursor.d.ts.map +1 -0
  314. package/dist/utils/listing-cursor.js +39 -0
  315. package/dist/utils/listing-cursor.js.map +1 -0
  316. package/dist/utils/paths.d.ts +10 -0
  317. package/dist/utils/paths.d.ts.map +1 -1
  318. package/dist/utils/paths.js +14 -0
  319. package/dist/utils/paths.js.map +1 -1
  320. package/dist/utils/pattern.d.ts +30 -0
  321. package/dist/utils/pattern.d.ts.map +1 -0
  322. package/dist/utils/pattern.js +130 -0
  323. package/dist/utils/pattern.js.map +1 -0
  324. package/dist/utils/pot-preflight.d.ts +53 -0
  325. package/dist/utils/pot-preflight.d.ts.map +1 -0
  326. package/dist/utils/pot-preflight.js +146 -0
  327. package/dist/utils/pot-preflight.js.map +1 -0
  328. package/dist/utils/search-index.d.ts.map +1 -1
  329. package/dist/utils/search-index.js +9 -4
  330. package/dist/utils/search-index.js.map +1 -1
  331. package/dist/utils/sleep.d.ts +9 -0
  332. package/dist/utils/sleep.d.ts.map +1 -0
  333. package/dist/utils/sleep.js +25 -0
  334. package/dist/utils/sleep.js.map +1 -0
  335. package/dist/utils/storage.d.ts.map +1 -1
  336. package/dist/utils/storage.js +14 -8
  337. package/dist/utils/storage.js.map +1 -1
  338. package/dist/utils/store-health.d.ts +37 -0
  339. package/dist/utils/store-health.d.ts.map +1 -0
  340. package/dist/utils/store-health.js +92 -0
  341. package/dist/utils/store-health.js.map +1 -0
  342. package/dist/utils/store-migrations.d.ts +33 -0
  343. package/dist/utils/store-migrations.d.ts.map +1 -0
  344. package/dist/utils/store-migrations.js +41 -0
  345. package/dist/utils/store-migrations.js.map +1 -0
  346. package/dist/utils/store-paths.d.ts +33 -0
  347. package/dist/utils/store-paths.d.ts.map +1 -0
  348. package/dist/utils/store-paths.js +48 -0
  349. package/dist/utils/store-paths.js.map +1 -0
  350. package/dist/utils/store-rows.d.ts +22 -0
  351. package/dist/utils/store-rows.d.ts.map +1 -0
  352. package/dist/utils/store-rows.js +62 -0
  353. package/dist/utils/store-rows.js.map +1 -0
  354. package/dist/utils/store-schema.d.ts +16 -0
  355. package/dist/utils/store-schema.d.ts.map +1 -0
  356. package/dist/utils/store-schema.js +168 -0
  357. package/dist/utils/store-schema.js.map +1 -0
  358. package/dist/utils/store.d.ts +34 -0
  359. package/dist/utils/store.d.ts.map +1 -0
  360. package/dist/utils/store.js +157 -0
  361. package/dist/utils/store.js.map +1 -0
  362. package/dist/utils/subtitles.d.ts +7 -0
  363. package/dist/utils/subtitles.d.ts.map +1 -0
  364. package/dist/utils/subtitles.js +30 -0
  365. package/dist/utils/subtitles.js.map +1 -0
  366. package/dist/utils/thumbnail-entry.d.ts +19 -0
  367. package/dist/utils/thumbnail-entry.d.ts.map +1 -0
  368. package/dist/utils/thumbnail-entry.js +119 -0
  369. package/dist/utils/thumbnail-entry.js.map +1 -0
  370. package/dist/utils/thumbnail-fetch.d.ts +37 -0
  371. package/dist/utils/thumbnail-fetch.d.ts.map +1 -0
  372. package/dist/utils/thumbnail-fetch.js +89 -0
  373. package/dist/utils/thumbnail-fetch.js.map +1 -0
  374. package/dist/utils/thumbnail-ladder.d.ts +44 -0
  375. package/dist/utils/thumbnail-ladder.d.ts.map +1 -0
  376. package/dist/utils/thumbnail-ladder.js +68 -0
  377. package/dist/utils/thumbnail-ladder.js.map +1 -0
  378. package/dist/utils/thumbnail-listing.d.ts +16 -0
  379. package/dist/utils/thumbnail-listing.d.ts.map +1 -0
  380. package/dist/utils/thumbnail-listing.js +26 -0
  381. package/dist/utils/thumbnail-listing.js.map +1 -0
  382. package/dist/utils/thumbnail-paths.d.ts +20 -0
  383. package/dist/utils/thumbnail-paths.d.ts.map +1 -0
  384. package/dist/utils/thumbnail-paths.js +35 -0
  385. package/dist/utils/thumbnail-paths.js.map +1 -0
  386. package/dist/utils/thumbnail-store.d.ts +19 -0
  387. package/dist/utils/thumbnail-store.d.ts.map +1 -0
  388. package/dist/utils/thumbnail-store.js +125 -0
  389. package/dist/utils/thumbnail-store.js.map +1 -0
  390. package/dist/utils/transcript-cache.d.ts +20 -0
  391. package/dist/utils/transcript-cache.d.ts.map +1 -0
  392. package/dist/utils/transcript-cache.js +127 -0
  393. package/dist/utils/transcript-cache.js.map +1 -0
  394. package/dist/utils/transcript-search.d.ts +20 -0
  395. package/dist/utils/transcript-search.d.ts.map +1 -0
  396. package/dist/utils/transcript-search.js +35 -0
  397. package/dist/utils/transcript-search.js.map +1 -0
  398. package/dist/utils/transcript.d.ts +10 -31
  399. package/dist/utils/transcript.d.ts.map +1 -1
  400. package/dist/utils/transcript.js +2 -64
  401. package/dist/utils/transcript.js.map +1 -1
  402. package/dist/utils/validate-youtube.d.ts +35 -0
  403. package/dist/utils/validate-youtube.d.ts.map +1 -0
  404. package/dist/utils/validate-youtube.js +87 -0
  405. package/dist/utils/validate-youtube.js.map +1 -0
  406. package/dist/utils/validate.d.ts +11 -4
  407. package/dist/utils/validate.d.ts.map +1 -1
  408. package/dist/utils/validate.js +43 -36
  409. package/dist/utils/validate.js.map +1 -1
  410. package/dist/utils/version.d.ts +2 -0
  411. package/dist/utils/version.d.ts.map +1 -0
  412. package/dist/utils/version.js +19 -0
  413. package/dist/utils/version.js.map +1 -0
  414. package/dist/utils/video-stats-cache.d.ts +16 -0
  415. package/dist/utils/video-stats-cache.d.ts.map +1 -0
  416. package/dist/utils/video-stats-cache.js +81 -0
  417. package/dist/utils/video-stats-cache.js.map +1 -0
  418. package/dist/utils/video-stats.d.ts +186 -0
  419. package/dist/utils/video-stats.d.ts.map +1 -0
  420. package/dist/utils/video-stats.js +168 -0
  421. package/dist/utils/video-stats.js.map +1 -0
  422. package/dist/utils/video-store.d.ts +69 -0
  423. package/dist/utils/video-store.d.ts.map +1 -0
  424. package/dist/utils/video-store.js +77 -0
  425. package/dist/utils/video-store.js.map +1 -0
  426. package/dist/utils/youtube-channel.d.ts +51 -0
  427. package/dist/utils/youtube-channel.d.ts.map +1 -0
  428. package/dist/utils/youtube-channel.js +91 -0
  429. package/dist/utils/youtube-channel.js.map +1 -0
  430. package/dist/utils/youtube-download.d.ts +27 -0
  431. package/dist/utils/youtube-download.d.ts.map +1 -0
  432. package/dist/utils/youtube-download.js +118 -0
  433. package/dist/utils/youtube-download.js.map +1 -0
  434. package/dist/utils/youtube-schemas.d.ts +492 -0
  435. package/dist/utils/youtube-schemas.d.ts.map +1 -0
  436. package/dist/utils/youtube-schemas.js +148 -0
  437. package/dist/utils/youtube-schemas.js.map +1 -0
  438. package/dist/utils/youtube-search.d.ts +14 -0
  439. package/dist/utils/youtube-search.d.ts.map +1 -0
  440. package/dist/utils/youtube-search.js +39 -0
  441. package/dist/utils/youtube-search.js.map +1 -0
  442. package/dist/utils/youtube-url.d.ts +25 -0
  443. package/dist/utils/youtube-url.d.ts.map +1 -0
  444. package/dist/utils/youtube-url.js +75 -0
  445. package/dist/utils/youtube-url.js.map +1 -0
  446. package/dist/utils/youtube-video.d.ts +68 -0
  447. package/dist/utils/youtube-video.d.ts.map +1 -0
  448. package/dist/utils/youtube-video.js +110 -0
  449. package/dist/utils/youtube-video.js.map +1 -0
  450. package/dist/utils/youtube.d.ts +10 -122
  451. package/dist/utils/youtube.d.ts.map +1 -1
  452. package/dist/utils/youtube.js +11 -486
  453. package/dist/utils/youtube.js.map +1 -1
  454. package/dist/utils/ytdlp-env.d.ts +33 -0
  455. package/dist/utils/ytdlp-env.d.ts.map +1 -0
  456. package/dist/utils/ytdlp-env.js +121 -0
  457. package/dist/utils/ytdlp-env.js.map +1 -0
  458. package/dist/utils/ytdlp-limiter.d.ts +27 -0
  459. package/dist/utils/ytdlp-limiter.d.ts.map +1 -0
  460. package/dist/utils/ytdlp-limiter.js +85 -0
  461. package/dist/utils/ytdlp-limiter.js.map +1 -0
  462. package/dist/utils/ytdlp-pacer.d.ts +64 -0
  463. package/dist/utils/ytdlp-pacer.d.ts.map +1 -0
  464. package/dist/utils/ytdlp-pacer.js +165 -0
  465. package/dist/utils/ytdlp-pacer.js.map +1 -0
  466. package/dist/utils/ytdlp-parse.d.ts +13 -0
  467. package/dist/utils/ytdlp-parse.d.ts.map +1 -0
  468. package/dist/utils/ytdlp-parse.js +48 -0
  469. package/dist/utils/ytdlp-parse.js.map +1 -0
  470. package/dist/utils/ytdlp-stream.d.ts +32 -0
  471. package/dist/utils/ytdlp-stream.d.ts.map +1 -0
  472. package/dist/utils/ytdlp-stream.js +61 -0
  473. package/dist/utils/ytdlp-stream.js.map +1 -0
  474. package/dist/utils/ytdlp.d.ts +23 -18
  475. package/dist/utils/ytdlp.d.ts.map +1 -1
  476. package/dist/utils/ytdlp.js +56 -134
  477. package/dist/utils/ytdlp.js.map +1 -1
  478. package/package.json +3 -2
@@ -0,0 +1,39 @@
1
+ import { defineTool } from './types.js';
2
+ import { checkHealthSchema, checkHealthOutputSchema, checkHealthHandler, } from '../tools/check-health.js';
3
+ import { repairStoreSchema, repairStoreOutputSchema, repairStoreHandler, } from '../tools/repair-store.js';
4
+ /** Diagnostics. Remote-safe. */
5
+ export const healthTools = [
6
+ defineTool({
7
+ name: 'check_health',
8
+ mode: 'all',
9
+ title: 'Check Server Health',
10
+ description: 'Report whether yt-dlp and ffmpeg are installed, their versions, and whether yt-dlp is stale. Call this first when tools start failing unexpectedly — an outdated yt-dlp is the most common cause.',
11
+ inputSchema: checkHealthSchema,
12
+ outputSchema: checkHealthOutputSchema,
13
+ annotations: {
14
+ readOnlyHint: true,
15
+ destructiveHint: false,
16
+ idempotentHint: true,
17
+ openWorldHint: false,
18
+ },
19
+ handler: checkHealthHandler,
20
+ }),
21
+ defineTool({
22
+ name: 'repair_store',
23
+ // Local-only: it renames a file in the user's data directory, and every
24
+ // tool that writes to disk is stdio-only.
25
+ mode: 'stdio',
26
+ title: 'Repair Harvested Store',
27
+ description: 'Check the harvested store and, if it is damaged, move it aside and start a fresh one. The damaged file is kept, never deleted. Call this when a harvest tool reports STORE_CORRUPT.',
28
+ inputSchema: repairStoreSchema,
29
+ outputSchema: repairStoreOutputSchema,
30
+ annotations: {
31
+ readOnlyHint: false,
32
+ destructiveHint: true,
33
+ idempotentHint: false,
34
+ openWorldHint: false,
35
+ },
36
+ handler: repairStoreHandler,
37
+ }),
38
+ ];
39
+ //# sourceMappingURL=health-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-tools.js","sourceRoot":"","sources":["../../src/registry/health-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAuB,MAAM,YAAY,CAAC;AAC7D,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAElC,gCAAgC;AAChC,MAAM,CAAC,MAAM,WAAW,GAAqB;IAC3C,UAAU,CAAC;QACT,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EACT,mMAAmM;QACrM,WAAW,EAAE,iBAAiB;QAC9B,YAAY,EAAE,uBAAuB;QACrC,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;QACD,OAAO,EAAE,kBAAkB;KAC5B,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,cAAc;QACpB,wEAAwE;QACxE,0CAA0C;QAC1C,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EACT,qLAAqL;QACvL,WAAW,EAAE,iBAAiB;QAC9B,YAAY,EAAE,uBAAuB;QACrC,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,KAAK;SACrB;QACD,OAAO,EAAE,kBAAkB;KAC5B,CAAC;CACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { ToolDefinition } from './types.js';
3
+ export type { ToolDefinition, ToolMode } from './types.js';
4
+ /** Every tool the server can offer, in the order clients see them. */
5
+ export declare const TOOLS: ToolDefinition[];
6
+ /** Registers the tools the transport may carry: everything on stdio, remote-safe ones over HTTP. */
7
+ export declare function registerTools(server: McpServer, mode: 'stdio' | 'http'): void;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3D,sEAAsE;AACtE,eAAO,MAAM,KAAK,EAAE,cAAc,EAUjC,CAAC;AAEF,oGAAoG;AACpG,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAI7E"}
@@ -0,0 +1,29 @@
1
+ import { harvestTools } from './harvest-tools.js';
2
+ import { brainTools } from './brain-tools.js';
3
+ import { channelTools } from './channel-tools.js';
4
+ import { healthTools } from './health-tools.js';
5
+ import { libraryTools } from './library-tools.js';
6
+ import { mediaTools } from './media-tools.js';
7
+ import { thumbnailTools } from './thumbnail-tools.js';
8
+ import { transcriptTools } from './transcript-tools.js';
9
+ import { videoTools } from './video-tools.js';
10
+ /** Every tool the server can offer, in the order clients see them. */
11
+ export const TOOLS = [
12
+ ...videoTools,
13
+ ...channelTools,
14
+ ...transcriptTools,
15
+ ...healthTools,
16
+ ...libraryTools,
17
+ ...mediaTools,
18
+ ...brainTools,
19
+ ...harvestTools,
20
+ ...thumbnailTools,
21
+ ];
22
+ /** Registers the tools the transport may carry: everything on stdio, remote-safe ones over HTTP. */
23
+ export function registerTools(server, mode) {
24
+ for (const tool of TOOLS) {
25
+ if (tool.mode === 'all' || mode === 'stdio')
26
+ tool.register(server, mode);
27
+ }
28
+ }
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAK9C,sEAAsE;AACtE,MAAM,CAAC,MAAM,KAAK,GAAqB;IACrC,GAAG,UAAU;IACb,GAAG,YAAY;IACf,GAAG,eAAe;IAClB,GAAG,WAAW;IACd,GAAG,YAAY;IACf,GAAG,UAAU;IACb,GAAG,UAAU;IACb,GAAG,YAAY;IACf,GAAG,cAAc;CAClB,CAAC;AAEF,oGAAoG;AACpG,MAAM,UAAU,aAAa,CAAC,MAAiB,EAAE,IAAsB;IACrE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,OAAO;YAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type ToolDefinition } from './types.js';
2
+ /** The local knowledge library. Local only: these write under the home directory. */
3
+ export declare const libraryTools: ToolDefinition[];
4
+ //# sourceMappingURL=library-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"library-tools.d.ts","sourceRoot":"","sources":["../../src/registry/library-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AA6B7D,qFAAqF;AACrF,eAAO,MAAM,YAAY,EAAE,cAAc,EAoHxC,CAAC"}
@@ -0,0 +1,116 @@
1
+ import { defineTool } from './types.js';
2
+ import { getLibraryItemSchema, getLibraryItemOutputSchema, getLibraryItemHandler, searchLibrarySchema, searchLibraryOutputSchema, searchLibraryHandler, updateLibraryTagsSchema, updateLibraryTagsOutputSchema, updateLibraryTagsHandler, deleteLibraryItemSchema, deleteLibraryItemOutputSchema, deleteLibraryItemHandler, rebuildLibraryIndexSchema, rebuildLibraryIndexOutputSchema, rebuildLibraryIndexHandler, } from '../tools/library.js';
3
+ import { listLibrarySchema, listLibraryOutputSchema, listLibraryHandler, } from '../tools/list-library.js';
4
+ import { saveToLibrarySchema, saveToLibraryOutputSchema, saveToLibraryHandler, } from '../tools/save-to-library.js';
5
+ /** The local knowledge library. Local only: these write under the home directory. */
6
+ export const libraryTools = [
7
+ defineTool({
8
+ name: 'save_to_library',
9
+ mode: 'stdio',
10
+ title: 'Save to YouTube Knowledge Library',
11
+ description: 'Save a summary or skill note to the local YouTube knowledge library. Overwrites existing content of the same type for the same video. Returns the saved file path.',
12
+ inputSchema: saveToLibrarySchema,
13
+ outputSchema: saveToLibraryOutputSchema,
14
+ annotations: {
15
+ readOnlyHint: false,
16
+ // Overwrites an existing note of the same type in place, which is a
17
+ // destructive update: the previous content is not recoverable.
18
+ destructiveHint: true,
19
+ idempotentHint: true,
20
+ openWorldHint: false,
21
+ },
22
+ handler: saveToLibraryHandler,
23
+ }),
24
+ defineTool({
25
+ name: 'list_library',
26
+ mode: 'stdio',
27
+ title: 'List YouTube Knowledge Library',
28
+ description: 'List all saved items in the local YouTube knowledge library. Returns titles, channels, content types, tags, and save dates. Optionally filter by tag. Sorted by most recently saved.',
29
+ inputSchema: listLibrarySchema,
30
+ outputSchema: listLibraryOutputSchema,
31
+ annotations: {
32
+ readOnlyHint: true,
33
+ destructiveHint: false,
34
+ idempotentHint: true,
35
+ openWorldHint: false,
36
+ },
37
+ handler: listLibraryHandler,
38
+ }),
39
+ defineTool({
40
+ name: 'get_library_item',
41
+ mode: 'stdio',
42
+ title: 'Read a Saved Library Item',
43
+ description: 'Read back a summary or skill note previously saved with save_to_library. Returns the markdown content plus the saved metadata.',
44
+ inputSchema: getLibraryItemSchema,
45
+ outputSchema: getLibraryItemOutputSchema,
46
+ annotations: {
47
+ readOnlyHint: true,
48
+ destructiveHint: false,
49
+ idempotentHint: true,
50
+ openWorldHint: false,
51
+ },
52
+ handler: getLibraryItemHandler,
53
+ }),
54
+ defineTool({
55
+ name: 'search_library',
56
+ mode: 'stdio',
57
+ title: 'Search the Knowledge Library',
58
+ description: 'Full-text search across every saved summary and skill note, ranked by relevance. Returns matching excerpts with the video IDs needed to read the full note.',
59
+ inputSchema: searchLibrarySchema,
60
+ outputSchema: searchLibraryOutputSchema,
61
+ annotations: {
62
+ readOnlyHint: true,
63
+ destructiveHint: false,
64
+ idempotentHint: true,
65
+ openWorldHint: false,
66
+ },
67
+ handler: searchLibraryHandler,
68
+ }),
69
+ defineTool({
70
+ name: 'update_library_tags',
71
+ mode: 'stdio',
72
+ title: 'Update Library Tags',
73
+ description: 'Add, remove or replace the tags on a saved library item. Tags are how list_library filters, so this is the way to reorganize a growing library. The replace parameter discards all existing tags.',
74
+ inputSchema: updateLibraryTagsSchema,
75
+ outputSchema: updateLibraryTagsOutputSchema,
76
+ annotations: {
77
+ readOnlyHint: false,
78
+ // The replace parameter discards every existing tag.
79
+ destructiveHint: true,
80
+ idempotentHint: true,
81
+ openWorldHint: false,
82
+ },
83
+ handler: updateLibraryTagsHandler,
84
+ }),
85
+ defineTool({
86
+ name: 'delete_library_item',
87
+ mode: 'stdio',
88
+ title: 'Delete a Library Item',
89
+ description: 'Permanently delete a saved summary or skill note, or the entire library entry for a video. This removes files from disk and cannot be undone.',
90
+ inputSchema: deleteLibraryItemSchema,
91
+ outputSchema: deleteLibraryItemOutputSchema,
92
+ annotations: {
93
+ readOnlyHint: false,
94
+ destructiveHint: true,
95
+ idempotentHint: true,
96
+ openWorldHint: false,
97
+ },
98
+ handler: deleteLibraryItemHandler,
99
+ }),
100
+ defineTool({
101
+ name: 'rebuild_library_index',
102
+ mode: 'stdio',
103
+ title: 'Rebuild the Library Search Index',
104
+ description: 'Rebuild the full-text search index from the notes on disk. Use this if search_library results look stale or incomplete, for example after editing files by hand.',
105
+ inputSchema: rebuildLibraryIndexSchema,
106
+ outputSchema: rebuildLibraryIndexOutputSchema,
107
+ annotations: {
108
+ readOnlyHint: false,
109
+ destructiveHint: false,
110
+ idempotentHint: true,
111
+ openWorldHint: false,
112
+ },
113
+ handler: rebuildLibraryIndexHandler,
114
+ }),
115
+ ];
116
+ //# sourceMappingURL=library-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"library-tools.js","sourceRoot":"","sources":["../../src/registry/library-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type ToolDefinition } from './types.js';
2
+ /** Clips, stills, subtitles and downloads. Local only: these write files. */
3
+ export declare const mediaTools: ToolDefinition[];
4
+ //# sourceMappingURL=media-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-tools.d.ts","sourceRoot":"","sources":["../../src/registry/media-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AA0B7D,6EAA6E;AAC7E,eAAO,MAAM,UAAU,EAAE,cAAc,EAmGtC,CAAC"}
@@ -0,0 +1,100 @@
1
+ import { defineTool } from './types.js';
2
+ import { extractClipSchema, extractClipOutputSchema, extractClipHandler, extractAudioClipSchema, extractAudioClipOutputSchema, extractAudioClipHandler, extractClipsSchema, extractClipsOutputSchema, extractClipsHandler, } from '../tools/clips.js';
3
+ import { downloadVideoSchema, downloadVideoOutputSchema, downloadVideoHandler, } from '../tools/download-video.js';
4
+ import { extractFrameSchema, extractFrameOutputSchema, extractFrameHandler, exportSubtitlesSchema, exportSubtitlesOutputSchema, exportSubtitlesHandler, } from '../tools/frames-subtitles.js';
5
+ /** Clips, stills, subtitles and downloads. Local only: these write files. */
6
+ export const mediaTools = [
7
+ defineTool({
8
+ name: 'extract_clip',
9
+ mode: 'stdio',
10
+ title: 'Extract a Video Clip',
11
+ description: 'Cut a time range out of a YouTube video without downloading the whole thing. Give start and end, or a chapter name. Pair with search_transcript to find the moment first. Requires ffmpeg.',
12
+ inputSchema: extractClipSchema,
13
+ outputSchema: extractClipOutputSchema,
14
+ annotations: {
15
+ readOnlyHint: false,
16
+ destructiveHint: false,
17
+ idempotentHint: true,
18
+ openWorldHint: true,
19
+ },
20
+ handler: extractClipHandler,
21
+ }),
22
+ defineTool({
23
+ name: 'extract_audio_clip',
24
+ mode: 'stdio',
25
+ title: 'Extract an Audio Clip',
26
+ description: 'Cut a time range out of a video as audio only, in an editor-friendly format (mp3, m4a, wav, flac, opus). Use for podcast pulls and voice-over sourcing. Requires ffmpeg.',
27
+ inputSchema: extractAudioClipSchema,
28
+ outputSchema: extractAudioClipOutputSchema,
29
+ annotations: {
30
+ readOnlyHint: false,
31
+ destructiveHint: false,
32
+ idempotentHint: true,
33
+ openWorldHint: true,
34
+ },
35
+ handler: extractAudioClipHandler,
36
+ }),
37
+ defineTool({
38
+ name: 'extract_clips',
39
+ mode: 'stdio',
40
+ title: 'Extract Several Clips',
41
+ description: 'Cut several time ranges out of one video in a single call. A range that fails is reported individually rather than losing the clips that succeeded. Requires ffmpeg.',
42
+ inputSchema: extractClipsSchema,
43
+ outputSchema: extractClipsOutputSchema,
44
+ annotations: {
45
+ readOnlyHint: false,
46
+ destructiveHint: false,
47
+ idempotentHint: true,
48
+ openWorldHint: true,
49
+ },
50
+ handler: extractClipsHandler,
51
+ }),
52
+ defineTool({
53
+ name: 'extract_frame',
54
+ mode: 'stdio',
55
+ title: 'Capture a Frame',
56
+ description: 'Capture a single still image from a video at a given timestamp, without downloading the file. Use for thumbnails and reference frames. Requires ffmpeg.',
57
+ inputSchema: extractFrameSchema,
58
+ outputSchema: extractFrameOutputSchema,
59
+ annotations: {
60
+ readOnlyHint: false,
61
+ destructiveHint: false,
62
+ idempotentHint: true,
63
+ openWorldHint: true,
64
+ },
65
+ handler: extractFrameHandler,
66
+ }),
67
+ defineTool({
68
+ name: 'export_subtitles',
69
+ mode: 'stdio',
70
+ title: 'Export Subtitles',
71
+ description: 'Write a video transcript to disk as SRT, WebVTT or plain text, ready to import into a video editor such as Premiere, Resolve or CapCut.',
72
+ inputSchema: exportSubtitlesSchema,
73
+ outputSchema: exportSubtitlesOutputSchema,
74
+ annotations: {
75
+ readOnlyHint: false,
76
+ destructiveHint: false,
77
+ idempotentHint: true,
78
+ openWorldHint: true,
79
+ },
80
+ handler: exportSubtitlesHandler,
81
+ }),
82
+ defineTool({
83
+ name: 'download_video',
84
+ mode: 'stdio',
85
+ title: 'Download YouTube Video',
86
+ description: 'Download a YouTube video to local disk. Use the quality parameter for automatic format selection with smart fallbacks, or formatId for a specific format from list_formats. Returns the downloaded file path, title, and format details.',
87
+ inputSchema: downloadVideoSchema,
88
+ outputSchema: downloadVideoOutputSchema,
89
+ annotations: {
90
+ readOnlyHint: false,
91
+ destructiveHint: false,
92
+ // Writes to a deterministic path and overwrites, exactly like the
93
+ // extract_* tools; repeating the call leaves the same state.
94
+ idempotentHint: true,
95
+ openWorldHint: true,
96
+ },
97
+ handler: downloadVideoHandler,
98
+ }),
99
+ ];
100
+ //# sourceMappingURL=media-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-tools.js","sourceRoot":"","sources":["../../src/registry/media-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type ToolDefinition } from './types.js';
2
+ /**
3
+ * Thumbnails. Looking at one is remote-safe; saving a channel's worth is local
4
+ * only, for the same reason as the brains.
5
+ */
6
+ export declare const thumbnailTools: ToolDefinition[];
7
+ //# sourceMappingURL=thumbnail-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thumbnail-tools.d.ts","sourceRoot":"","sources":["../../src/registry/thumbnail-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAoB7D;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,cAAc,EAkE1C,CAAC"}
@@ -0,0 +1,72 @@
1
+ import { defineTool } from './types.js';
2
+ import { fetchChannelThumbnailsSchema, fetchChannelThumbnailsOutputSchema, fetchChannelThumbnailsHandler, } from '../tools/fetch-channel-thumbnails.js';
3
+ import { listChannelThumbnailsSchema, listChannelThumbnailsOutputSchema, listChannelThumbnailsHandler, deleteChannelThumbnailsSchema, deleteChannelThumbnailsOutputSchema, deleteChannelThumbnailsHandler, } from '../tools/list-channel-thumbnails.js';
4
+ import { getThumbnailSchema, getThumbnailOutputSchema, getThumbnailHandler, } from '../tools/get-thumbnail.js';
5
+ /**
6
+ * Thumbnails. Looking at one is remote-safe; saving a channel's worth is local
7
+ * only, for the same reason as the brains.
8
+ */
9
+ export const thumbnailTools = [
10
+ defineTool({
11
+ name: 'get_thumbnail',
12
+ mode: 'all',
13
+ title: 'Look at a Thumbnail',
14
+ description: "Return a video's thumbnail, or a channel's avatar or banner, as an image you can look at, with its real pixel size. Tries the largest image YouTube serves and falls back to smaller ones. Locally, an image saved by fetch_channel_thumbnails is served from disk.",
15
+ inputSchema: getThumbnailSchema,
16
+ outputSchema: getThumbnailOutputSchema,
17
+ annotations: {
18
+ readOnlyHint: true,
19
+ destructiveHint: false,
20
+ idempotentHint: true,
21
+ openWorldHint: true,
22
+ },
23
+ handler: (args) => getThumbnailHandler(args, { store: false }),
24
+ stdioHandler: (args) => getThumbnailHandler(args, { store: true }),
25
+ }),
26
+ defineTool({
27
+ name: 'fetch_channel_thumbnails',
28
+ mode: 'stdio',
29
+ title: "Save a Channel's Thumbnails",
30
+ description: "Save every video thumbnail of a channel, plus its avatar and banner, under ~/.youtube-knowledge/thumbnails. One listing per tab, then the images from YouTube's image hosts directly, largest available first; each saved image is recorded with the size actually decoded from it. Safe to interrupt and call again: images already on disk are kept, missing ones fetched. Choose tabs to include shorts and streams.",
31
+ inputSchema: fetchChannelThumbnailsSchema,
32
+ outputSchema: fetchChannelThumbnailsOutputSchema,
33
+ annotations: {
34
+ readOnlyHint: false,
35
+ destructiveHint: false,
36
+ idempotentHint: true,
37
+ openWorldHint: true,
38
+ },
39
+ handler: fetchChannelThumbnailsHandler,
40
+ }),
41
+ defineTool({
42
+ name: 'list_channel_thumbnails',
43
+ mode: 'stdio',
44
+ title: "List a Channel's Saved Thumbnails",
45
+ description: 'List the thumbnails saved for a channel: each file path, its decoded size and which image variant it is, plus the avatar and banner. Works offline from the saved manifest.',
46
+ inputSchema: listChannelThumbnailsSchema,
47
+ outputSchema: listChannelThumbnailsOutputSchema,
48
+ annotations: {
49
+ readOnlyHint: true,
50
+ destructiveHint: false,
51
+ idempotentHint: true,
52
+ openWorldHint: false,
53
+ },
54
+ handler: listChannelThumbnailsHandler,
55
+ }),
56
+ defineTool({
57
+ name: 'delete_channel_thumbnails',
58
+ mode: 'stdio',
59
+ title: "Delete a Channel's Saved Thumbnails",
60
+ description: 'Permanently delete every thumbnail saved for a channel, with its manifest. Use this to start over, for example to fetch again at a different quality.',
61
+ inputSchema: deleteChannelThumbnailsSchema,
62
+ outputSchema: deleteChannelThumbnailsOutputSchema,
63
+ annotations: {
64
+ readOnlyHint: false,
65
+ destructiveHint: true,
66
+ idempotentHint: true,
67
+ openWorldHint: false,
68
+ },
69
+ handler: deleteChannelThumbnailsHandler,
70
+ }),
71
+ ];
72
+ //# sourceMappingURL=thumbnail-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thumbnail-tools.js","sourceRoot":"","sources":["../../src/registry/thumbnail-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAuB,MAAM,YAAY,CAAC;AAC7D,OAAO,EACL,4BAA4B,EAC5B,kCAAkC,EAClC,6BAA6B,GAC9B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,2BAA2B,EAC3B,iCAAiC,EACjC,4BAA4B,EAC5B,6BAA6B,EAC7B,mCAAmC,EACnC,8BAA8B,GAC/B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAEnC;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,UAAU,CAAC;QACT,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EACT,qQAAqQ;QACvQ,WAAW,EAAE,kBAAkB;QAC/B,YAAY,EAAE,wBAAwB;QACtC,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;QACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC9D,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;KACnE,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,0BAA0B;QAChC,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,6BAA6B;QACpC,WAAW,EACT,yZAAyZ;QAC3Z,WAAW,EAAE,4BAA4B;QACzC,YAAY,EAAE,kCAAkC;QAChD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;QACD,OAAO,EAAE,6BAA6B;KACvC,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,yBAAyB;QAC/B,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,mCAAmC;QAC1C,WAAW,EACT,6KAA6K;QAC/K,WAAW,EAAE,2BAA2B;QACxC,YAAY,EAAE,iCAAiC;QAC/C,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;QACD,OAAO,EAAE,4BAA4B;KACtC,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,2BAA2B;QACjC,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,qCAAqC;QAC5C,WAAW,EACT,uJAAuJ;QACzJ,WAAW,EAAE,6BAA6B;QAC1C,YAAY,EAAE,mCAAmC;QACjD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;QACD,OAAO,EAAE,8BAA8B;KACxC,CAAC;CACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type ToolDefinition } from './types.js';
2
+ /** Reading and searching transcripts, singly and in batches. Remote-safe. */
3
+ export declare const transcriptTools: ToolDefinition[];
4
+ //# sourceMappingURL=transcript-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-tools.d.ts","sourceRoot":"","sources":["../../src/registry/transcript-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAoB7D,6EAA6E;AAC7E,eAAO,MAAM,eAAe,EAAE,cAAc,EAiE3C,CAAC"}
@@ -0,0 +1,68 @@
1
+ import { defineTool } from './types.js';
2
+ import { getTranscriptsSchema, getTranscriptsOutputSchema, getTranscriptsHandler, digestPlaylistSchema, digestPlaylistOutputSchema, digestPlaylistHandler, } from '../tools/batch.js';
3
+ import { getTranscriptSchema, getTranscriptOutputSchema, getTranscriptHandler, } from '../tools/get-transcript.js';
4
+ import { searchTranscriptSchema, searchTranscriptOutputSchema, searchTranscriptHandler, } from '../tools/search-transcript.js';
5
+ /** Reading and searching transcripts, singly and in batches. Remote-safe. */
6
+ export const transcriptTools = [
7
+ defineTool({
8
+ name: 'get_transcript',
9
+ mode: 'all',
10
+ title: 'Get YouTube Video Transcript',
11
+ description: 'Extract the full transcript from a YouTube video. Supports auto-generated and manual captions. Returns plain text with word count and detected language. Results are cached locally.',
12
+ inputSchema: getTranscriptSchema,
13
+ outputSchema: getTranscriptOutputSchema,
14
+ annotations: {
15
+ readOnlyHint: true,
16
+ destructiveHint: false,
17
+ idempotentHint: true,
18
+ openWorldHint: true,
19
+ },
20
+ handler: getTranscriptHandler,
21
+ }),
22
+ defineTool({
23
+ name: 'search_transcript',
24
+ mode: 'all',
25
+ title: 'Search Inside a Transcript',
26
+ description: 'Find a phrase or pattern inside a video transcript and return each match with its timestamp and a link that opens the video at that moment. Use this instead of reading a whole transcript when you need to locate or cite a specific moment.',
27
+ inputSchema: searchTranscriptSchema,
28
+ outputSchema: searchTranscriptOutputSchema,
29
+ annotations: {
30
+ readOnlyHint: true,
31
+ destructiveHint: false,
32
+ idempotentHint: true,
33
+ openWorldHint: true,
34
+ },
35
+ handler: searchTranscriptHandler,
36
+ }),
37
+ defineTool({
38
+ name: 'get_transcripts',
39
+ mode: 'all',
40
+ title: 'Get Transcripts for Several Videos',
41
+ description: 'Fetch transcripts for up to 25 videos in one call, each capped so the batch cannot flood the context. Videos that have no captions are reported individually rather than failing the whole call.',
42
+ inputSchema: getTranscriptsSchema,
43
+ outputSchema: getTranscriptsOutputSchema,
44
+ annotations: {
45
+ readOnlyHint: true,
46
+ destructiveHint: false,
47
+ idempotentHint: true,
48
+ openWorldHint: true,
49
+ },
50
+ handler: getTranscriptsHandler,
51
+ }),
52
+ defineTool({
53
+ name: 'digest_playlist',
54
+ mode: 'all',
55
+ title: 'Digest a Playlist or Channel',
56
+ description: 'Summarize a playlist or channel in one call: per-video metadata, chapter markers, and optionally transcript word counts. Use this to survey a body of content before deciding what to read in full.',
57
+ inputSchema: digestPlaylistSchema,
58
+ outputSchema: digestPlaylistOutputSchema,
59
+ annotations: {
60
+ readOnlyHint: true,
61
+ destructiveHint: false,
62
+ idempotentHint: true,
63
+ openWorldHint: true,
64
+ },
65
+ handler: digestPlaylistHandler,
66
+ }),
67
+ ];
68
+ //# sourceMappingURL=transcript-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-tools.js","sourceRoot":"","sources":["../../src/registry/transcript-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAuB,MAAM,YAAY,CAAC;AAC7D,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,sBAAsB,EACtB,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,+BAA+B,CAAC;AAEvC,6EAA6E;AAC7E,MAAM,CAAC,MAAM,eAAe,GAAqB;IAC/C,UAAU,CAAC;QACT,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,8BAA8B;QACrC,WAAW,EACT,sLAAsL;QACxL,WAAW,EAAE,mBAAmB;QAChC,YAAY,EAAE,yBAAyB;QACvC,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;QACD,OAAO,EAAE,oBAAoB;KAC9B,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,mBAAmB;QACzB,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,4BAA4B;QACnC,WAAW,EACT,+OAA+O;QACjP,WAAW,EAAE,sBAAsB;QACnC,YAAY,EAAE,4BAA4B;QAC1C,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;QACD,OAAO,EAAE,uBAAuB;KACjC,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,oCAAoC;QAC3C,WAAW,EACT,kMAAkM;QACpM,WAAW,EAAE,oBAAoB;QACjC,YAAY,EAAE,0BAA0B;QACxC,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;QACD,OAAO,EAAE,qBAAqB;KAC/B,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,8BAA8B;QACrC,WAAW,EACT,qMAAqM;QACvM,WAAW,EAAE,oBAAoB;QACjC,YAAY,EAAE,0BAA0B;QACxC,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;QACD,OAAO,EAAE,qBAAqB;KAC/B,CAAC;CACH,CAAC"}
@@ -0,0 +1,41 @@
1
+ import type { ZodRawShape } from 'zod';
2
+ import type { McpServer, ToolCallback } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ import type { ToolAnnotations } from '@modelcontextprotocol/sdk/types.js';
4
+ /**
5
+ * A tool as one declarative record.
6
+ *
7
+ * `createServer` used to be twenty-seven near-identical `registerTool` calls
8
+ * spread over seven hundred lines, and the only thing that varied between them
9
+ * was data. Declaring each tool as data keeps the registration in one loop,
10
+ * lets a test enumerate every tool without booting a server, and makes the
11
+ * transport gate — local-only tools never registered over HTTP — a field
12
+ * rather than an `if` block a new tool can land on the wrong side of.
13
+ */
14
+ export type ToolMode = 'all' | 'stdio';
15
+ export interface ToolDefinition {
16
+ name: string;
17
+ mode: ToolMode;
18
+ register: (server: McpServer, transport: 'stdio' | 'http') => void;
19
+ }
20
+ export interface ToolSpec<In extends ZodRawShape, Out extends ZodRawShape> {
21
+ name: string;
22
+ mode: ToolMode;
23
+ title: string;
24
+ description: string;
25
+ inputSchema: In;
26
+ outputSchema: Out;
27
+ /** Every hint is required: a client decides what to ask before running on them. */
28
+ annotations: Required<Pick<ToolAnnotations, 'readOnlyHint' | 'destructiveHint' | 'idempotentHint' | 'openWorldHint'>>;
29
+ handler: ToolCallback<In>;
30
+ /**
31
+ * A handler to use on stdio instead of `handler`, for the rare tool whose
32
+ * remote and local behaviour differ (a local one may read the user's disk).
33
+ */
34
+ stdioHandler?: ToolCallback<In>;
35
+ }
36
+ /**
37
+ * Capture the schema/handler pairing generically, then hand back a record the
38
+ * registry can hold in one array without any of them needing a cast.
39
+ */
40
+ export declare function defineTool<In extends ZodRawShape, Out extends ZodRawShape>(spec: ToolSpec<In, Out>): ToolDefinition;
41
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/registry/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AACvF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAG1E;;;;;;;;;GASG;AAEH,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC;AAEvC,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;CACpE;AAED,MAAM,WAAW,QAAQ,CAAC,EAAE,SAAS,WAAW,EAAE,GAAG,SAAS,WAAW;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,EAAE,CAAC;IAChB,YAAY,EAAE,GAAG,CAAC;IAClB,mFAAmF;IACnF,WAAW,EAAE,QAAQ,CACnB,IAAI,CAAC,eAAe,EAAE,cAAc,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,eAAe,CAAC,CAC/F,CAAC;IACF,OAAO,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;IAC1B;;;OAGG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;CACjC;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,SAAS,WAAW,EAAE,GAAG,SAAS,WAAW,EACxE,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,GACtB,cAAc,CAchB"}
@@ -0,0 +1,17 @@
1
+ import { guarded } from '../utils/guard.js';
2
+ /**
3
+ * Capture the schema/handler pairing generically, then hand back a record the
4
+ * registry can hold in one array without any of them needing a cast.
5
+ */
6
+ export function defineTool(spec) {
7
+ const { name, mode, title, description, inputSchema, outputSchema, annotations } = spec;
8
+ return {
9
+ name,
10
+ mode,
11
+ register: (server, transport) => {
12
+ const handler = transport === 'stdio' ? (spec.stdioHandler ?? spec.handler) : spec.handler;
13
+ server.registerTool(name, { title, description, inputSchema, outputSchema, annotations }, guarded(handler));
14
+ },
15
+ };
16
+ }
17
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/registry/types.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAwC5C;;;GAGG;AACH,MAAM,UAAU,UAAU,CACxB,IAAuB;IAEvB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IACxF,OAAO;QACL,IAAI;QACJ,IAAI;QACJ,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE;YAC9B,MAAM,OAAO,GAAG,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;YAC3F,MAAM,CAAC,YAAY,CACjB,IAAI,EACJ,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,EAC9D,OAAO,CAAC,OAAO,CAAC,CACjB,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type ToolDefinition } from './types.js';
2
+ /** Finding videos and reading what YouTube knows about one. Remote-safe: nothing here touches the filesystem. */
3
+ export declare const videoTools: ToolDefinition[];
4
+ //# sourceMappingURL=video-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video-tools.d.ts","sourceRoot":"","sources":["../../src/registry/video-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAgC7D,iHAAiH;AACjH,eAAO,MAAM,UAAU,EAAE,cAAc,EAiGtC,CAAC"}