@unclick/mcp-server 0.1.0 → 0.2.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 (444) hide show
  1. package/dist/abn-tool.d.ts +3 -0
  2. package/dist/abn-tool.d.ts.map +1 -0
  3. package/dist/abn-tool.js +89 -0
  4. package/dist/abn-tool.js.map +1 -0
  5. package/dist/abuseipdb-tool.d.ts +4 -0
  6. package/dist/abuseipdb-tool.d.ts.map +1 -0
  7. package/dist/abuseipdb-tool.js +129 -0
  8. package/dist/abuseipdb-tool.js.map +1 -0
  9. package/dist/alphavantage-tool.d.ts +7 -0
  10. package/dist/alphavantage-tool.d.ts.map +1 -0
  11. package/dist/alphavantage-tool.js +208 -0
  12. package/dist/alphavantage-tool.js.map +1 -0
  13. package/dist/amber-tool.d.ts +4 -0
  14. package/dist/amber-tool.d.ts.map +1 -0
  15. package/dist/amber-tool.js +114 -0
  16. package/dist/amber-tool.js.map +1 -0
  17. package/dist/australiapost-tool.d.ts +4 -0
  18. package/dist/australiapost-tool.d.ts.map +1 -0
  19. package/dist/australiapost-tool.js +130 -0
  20. package/dist/australiapost-tool.js.map +1 -0
  21. package/dist/bandsintown-tool.d.ts +4 -0
  22. package/dist/bandsintown-tool.d.ts.map +1 -0
  23. package/dist/bandsintown-tool.js +76 -0
  24. package/dist/bandsintown-tool.js.map +1 -0
  25. package/dist/bungie-tool.d.ts +5 -0
  26. package/dist/bungie-tool.d.ts.map +1 -0
  27. package/dist/bungie-tool.js +138 -0
  28. package/dist/bungie-tool.js.map +1 -0
  29. package/dist/calculator-tool.d.ts +6 -0
  30. package/dist/calculator-tool.d.ts.map +1 -0
  31. package/dist/calculator-tool.js +196 -0
  32. package/dist/calculator-tool.js.map +1 -0
  33. package/dist/carboninterface-tool.d.ts +5 -0
  34. package/dist/carboninterface-tool.d.ts.map +1 -0
  35. package/dist/carboninterface-tool.js +143 -0
  36. package/dist/carboninterface-tool.js.map +1 -0
  37. package/dist/chessdotcom-tool.d.ts +6 -0
  38. package/dist/chessdotcom-tool.d.ts.map +1 -0
  39. package/dist/chessdotcom-tool.js +183 -0
  40. package/dist/chessdotcom-tool.js.map +1 -0
  41. package/dist/client.js +1 -1
  42. package/dist/clockify-tool.d.ts +2 -0
  43. package/dist/clockify-tool.d.ts.map +1 -0
  44. package/dist/clockify-tool.js +155 -0
  45. package/dist/clockify-tool.js.map +1 -0
  46. package/dist/coingecko-tool.d.ts +7 -0
  47. package/dist/coingecko-tool.d.ts.map +1 -0
  48. package/dist/coingecko-tool.js +176 -0
  49. package/dist/coingecko-tool.js.map +1 -0
  50. package/dist/coinmarketcap-tool.d.ts +6 -0
  51. package/dist/coinmarketcap-tool.d.ts.map +1 -0
  52. package/dist/coinmarketcap-tool.js +168 -0
  53. package/dist/coinmarketcap-tool.js.map +1 -0
  54. package/dist/color-tool.d.ts +6 -0
  55. package/dist/color-tool.d.ts.map +1 -0
  56. package/dist/color-tool.js +391 -0
  57. package/dist/color-tool.js.map +1 -0
  58. package/dist/connectors/bluesky.d.ts +3 -0
  59. package/dist/connectors/bluesky.d.ts.map +1 -0
  60. package/dist/connectors/bluesky.js +26 -0
  61. package/dist/connectors/bluesky.js.map +1 -0
  62. package/dist/connectors/discogs.d.ts +3 -0
  63. package/dist/connectors/discogs.d.ts.map +1 -0
  64. package/dist/connectors/discogs.js +18 -0
  65. package/dist/connectors/discogs.js.map +1 -0
  66. package/dist/connectors/discord.d.ts +3 -0
  67. package/dist/connectors/discord.d.ts.map +1 -0
  68. package/dist/connectors/discord.js +18 -0
  69. package/dist/connectors/discord.js.map +1 -0
  70. package/dist/connectors/guardian.d.ts +3 -0
  71. package/dist/connectors/guardian.d.ts.map +1 -0
  72. package/dist/connectors/guardian.js +18 -0
  73. package/dist/connectors/guardian.js.map +1 -0
  74. package/dist/connectors/index.d.ts +39 -0
  75. package/dist/connectors/index.d.ts.map +1 -0
  76. package/dist/connectors/index.js +23 -0
  77. package/dist/connectors/index.js.map +1 -0
  78. package/dist/connectors/lastfm.d.ts +3 -0
  79. package/dist/connectors/lastfm.d.ts.map +1 -0
  80. package/dist/connectors/lastfm.js +18 -0
  81. package/dist/connectors/lastfm.js.map +1 -0
  82. package/dist/connectors/mastodon.d.ts +3 -0
  83. package/dist/connectors/mastodon.d.ts.map +1 -0
  84. package/dist/connectors/mastodon.js +26 -0
  85. package/dist/connectors/mastodon.js.map +1 -0
  86. package/dist/connectors/newsapi.d.ts +3 -0
  87. package/dist/connectors/newsapi.d.ts.map +1 -0
  88. package/dist/connectors/newsapi.js +18 -0
  89. package/dist/connectors/newsapi.js.map +1 -0
  90. package/dist/connectors/ptv.d.ts +3 -0
  91. package/dist/connectors/ptv.d.ts.map +1 -0
  92. package/dist/connectors/ptv.js +26 -0
  93. package/dist/connectors/ptv.js.map +1 -0
  94. package/dist/connectors/reddit.d.ts +3 -0
  95. package/dist/connectors/reddit.d.ts.map +1 -0
  96. package/dist/connectors/reddit.js +28 -0
  97. package/dist/connectors/reddit.js.map +1 -0
  98. package/dist/connectors/seatgeek.d.ts +3 -0
  99. package/dist/connectors/seatgeek.d.ts.map +1 -0
  100. package/dist/connectors/seatgeek.js +18 -0
  101. package/dist/connectors/seatgeek.js.map +1 -0
  102. package/dist/connectors/shopify.d.ts +3 -0
  103. package/dist/connectors/shopify.d.ts.map +1 -0
  104. package/dist/connectors/shopify.js +38 -0
  105. package/dist/connectors/shopify.js.map +1 -0
  106. package/dist/connectors/slack.d.ts +3 -0
  107. package/dist/connectors/slack.d.ts.map +1 -0
  108. package/dist/connectors/slack.js +18 -0
  109. package/dist/connectors/slack.js.map +1 -0
  110. package/dist/connectors/telegram.d.ts +3 -0
  111. package/dist/connectors/telegram.d.ts.map +1 -0
  112. package/dist/connectors/telegram.js +18 -0
  113. package/dist/connectors/telegram.js.map +1 -0
  114. package/dist/connectors/ticketmaster.d.ts +3 -0
  115. package/dist/connectors/ticketmaster.d.ts.map +1 -0
  116. package/dist/connectors/ticketmaster.js +18 -0
  117. package/dist/connectors/ticketmaster.js.map +1 -0
  118. package/dist/connectors/twitch.d.ts +3 -0
  119. package/dist/connectors/twitch.d.ts.map +1 -0
  120. package/dist/connectors/twitch.js +26 -0
  121. package/dist/connectors/twitch.js.map +1 -0
  122. package/dist/connectors/xero.d.ts +3 -0
  123. package/dist/connectors/xero.d.ts.map +1 -0
  124. package/dist/connectors/xero.js +36 -0
  125. package/dist/connectors/xero.js.map +1 -0
  126. package/dist/connectors/yelp.d.ts +3 -0
  127. package/dist/connectors/yelp.d.ts.map +1 -0
  128. package/dist/connectors/yelp.js +18 -0
  129. package/dist/connectors/yelp.js.map +1 -0
  130. package/dist/datetime-tool.d.ts +8 -0
  131. package/dist/datetime-tool.d.ts.map +1 -0
  132. package/dist/datetime-tool.js +263 -0
  133. package/dist/datetime-tool.js.map +1 -0
  134. package/dist/deezer-tool.d.ts +7 -0
  135. package/dist/deezer-tool.d.ts.map +1 -0
  136. package/dist/deezer-tool.js +142 -0
  137. package/dist/deezer-tool.js.map +1 -0
  138. package/dist/discogs-tool.d.ts +7 -0
  139. package/dist/discogs-tool.d.ts.map +1 -0
  140. package/dist/discogs-tool.js +138 -0
  141. package/dist/discogs-tool.js.map +1 -0
  142. package/dist/domain-tool.d.ts +4 -0
  143. package/dist/domain-tool.d.ts.map +1 -0
  144. package/dist/domain-tool.js +155 -0
  145. package/dist/domain-tool.js.map +1 -0
  146. package/dist/ebird-tool.d.ts +5 -0
  147. package/dist/ebird-tool.d.ts.map +1 -0
  148. package/dist/ebird-tool.js +128 -0
  149. package/dist/ebird-tool.js.map +1 -0
  150. package/dist/email-tool.d.ts +8 -0
  151. package/dist/email-tool.d.ts.map +1 -0
  152. package/dist/email-tool.js +376 -0
  153. package/dist/email-tool.js.map +1 -0
  154. package/dist/espn-tool.d.ts +8 -0
  155. package/dist/espn-tool.d.ts.map +1 -0
  156. package/dist/espn-tool.js +147 -0
  157. package/dist/espn-tool.js.map +1 -0
  158. package/dist/eventbrite-tool.d.ts +7 -0
  159. package/dist/eventbrite-tool.d.ts.map +1 -0
  160. package/dist/eventbrite-tool.js +134 -0
  161. package/dist/eventbrite-tool.js.map +1 -0
  162. package/dist/feedly-tool.d.ts +2 -0
  163. package/dist/feedly-tool.d.ts.map +1 -0
  164. package/dist/feedly-tool.js +152 -0
  165. package/dist/feedly-tool.js.map +1 -0
  166. package/dist/foursquare-tool.d.ts +6 -0
  167. package/dist/foursquare-tool.d.ts.map +1 -0
  168. package/dist/foursquare-tool.js +102 -0
  169. package/dist/foursquare-tool.js.map +1 -0
  170. package/dist/fpl-tool.d.ts +8 -0
  171. package/dist/fpl-tool.d.ts.map +1 -0
  172. package/dist/fpl-tool.js +195 -0
  173. package/dist/fpl-tool.js.map +1 -0
  174. package/dist/genius-tool.d.ts +5 -0
  175. package/dist/genius-tool.d.ts.map +1 -0
  176. package/dist/genius-tool.js +62 -0
  177. package/dist/genius-tool.js.map +1 -0
  178. package/dist/guardian-tool.d.ts +6 -0
  179. package/dist/guardian-tool.d.ts.map +1 -0
  180. package/dist/guardian-tool.js +124 -0
  181. package/dist/guardian-tool.js.map +1 -0
  182. package/dist/hackernews-tool.d.ts +8 -0
  183. package/dist/hackernews-tool.d.ts.map +1 -0
  184. package/dist/hackernews-tool.js +96 -0
  185. package/dist/hackernews-tool.js.map +1 -0
  186. package/dist/haveibeenpwned-tool.d.ts +4 -0
  187. package/dist/haveibeenpwned-tool.d.ts.map +1 -0
  188. package/dist/haveibeenpwned-tool.js +162 -0
  189. package/dist/haveibeenpwned-tool.js.map +1 -0
  190. package/dist/hunter-tool.d.ts +4 -0
  191. package/dist/hunter-tool.d.ts.map +1 -0
  192. package/dist/hunter-tool.js +148 -0
  193. package/dist/hunter-tool.js.map +1 -0
  194. package/dist/instapaper-tool.d.ts +2 -0
  195. package/dist/instapaper-tool.d.ts.map +1 -0
  196. package/dist/instapaper-tool.js +257 -0
  197. package/dist/instapaper-tool.js.map +1 -0
  198. package/dist/ipapi-tool.d.ts +3 -0
  199. package/dist/ipapi-tool.d.ts.map +1 -0
  200. package/dist/ipapi-tool.js +78 -0
  201. package/dist/ipapi-tool.js.map +1 -0
  202. package/dist/ipaustralia-tool.d.ts +4 -0
  203. package/dist/ipaustralia-tool.d.ts.map +1 -0
  204. package/dist/ipaustralia-tool.js +138 -0
  205. package/dist/ipaustralia-tool.js.map +1 -0
  206. package/dist/lastfm-tool.d.ts +8 -0
  207. package/dist/lastfm-tool.d.ts.map +1 -0
  208. package/dist/lastfm-tool.js +169 -0
  209. package/dist/lastfm-tool.js.map +1 -0
  210. package/dist/lego-tool.d.ts +8 -0
  211. package/dist/lego-tool.d.ts.map +1 -0
  212. package/dist/lego-tool.js +235 -0
  213. package/dist/lego-tool.js.map +1 -0
  214. package/dist/lichess-tool.d.ts +6 -0
  215. package/dist/lichess-tool.d.ts.map +1 -0
  216. package/dist/lichess-tool.js +211 -0
  217. package/dist/lichess-tool.js.map +1 -0
  218. package/dist/meal-tool.d.ts +8 -0
  219. package/dist/meal-tool.d.ts.map +1 -0
  220. package/dist/meal-tool.js +143 -0
  221. package/dist/meal-tool.js.map +1 -0
  222. package/dist/monica-tool.d.ts +2 -0
  223. package/dist/monica-tool.d.ts.map +1 -0
  224. package/dist/monica-tool.js +160 -0
  225. package/dist/monica-tool.js.map +1 -0
  226. package/dist/musicbrainz-tool.d.ts +6 -0
  227. package/dist/musicbrainz-tool.d.ts.map +1 -0
  228. package/dist/musicbrainz-tool.js +65 -0
  229. package/dist/musicbrainz-tool.js.map +1 -0
  230. package/dist/nasa-tool.d.ts +6 -0
  231. package/dist/nasa-tool.d.ts.map +1 -0
  232. package/dist/nasa-tool.js +158 -0
  233. package/dist/nasa-tool.js.map +1 -0
  234. package/dist/newsapi-tool.d.ts +4 -0
  235. package/dist/newsapi-tool.d.ts.map +1 -0
  236. package/dist/newsapi-tool.js +108 -0
  237. package/dist/newsapi-tool.js.map +1 -0
  238. package/dist/notion-tool.d.ts +2 -0
  239. package/dist/notion-tool.d.ts.map +1 -0
  240. package/dist/notion-tool.js +167 -0
  241. package/dist/notion-tool.js.map +1 -0
  242. package/dist/numbers-tool.d.ts +3 -0
  243. package/dist/numbers-tool.d.ts.map +1 -0
  244. package/dist/numbers-tool.js +47 -0
  245. package/dist/numbers-tool.js.map +1 -0
  246. package/dist/nvd-tool.d.ts +4 -0
  247. package/dist/nvd-tool.d.ts.map +1 -0
  248. package/dist/nvd-tool.js +150 -0
  249. package/dist/nvd-tool.js.map +1 -0
  250. package/dist/omdb-tool.d.ts +4 -0
  251. package/dist/omdb-tool.d.ts.map +1 -0
  252. package/dist/omdb-tool.js +62 -0
  253. package/dist/omdb-tool.js.map +1 -0
  254. package/dist/openaq-tool.d.ts +5 -0
  255. package/dist/openaq-tool.d.ts.map +1 -0
  256. package/dist/openaq-tool.js +141 -0
  257. package/dist/openaq-tool.js.map +1 -0
  258. package/dist/openexchangerates-tool.d.ts +5 -0
  259. package/dist/openexchangerates-tool.d.ts.map +1 -0
  260. package/dist/openexchangerates-tool.js +101 -0
  261. package/dist/openexchangerates-tool.js.map +1 -0
  262. package/dist/openf1-tool.d.ts +9 -0
  263. package/dist/openf1-tool.d.ts.map +1 -0
  264. package/dist/openf1-tool.js +194 -0
  265. package/dist/openf1-tool.js.map +1 -0
  266. package/dist/openfoodfacts-tool.d.ts +5 -0
  267. package/dist/openfoodfacts-tool.d.ts.map +1 -0
  268. package/dist/openfoodfacts-tool.js +106 -0
  269. package/dist/openfoodfacts-tool.js.map +1 -0
  270. package/dist/openlibrary-tool.d.ts +7 -0
  271. package/dist/openlibrary-tool.d.ts.map +1 -0
  272. package/dist/openlibrary-tool.js +67 -0
  273. package/dist/openlibrary-tool.js.map +1 -0
  274. package/dist/openmeteo-tool.d.ts +4 -0
  275. package/dist/openmeteo-tool.d.ts.map +1 -0
  276. package/dist/openmeteo-tool.js +160 -0
  277. package/dist/openmeteo-tool.js.map +1 -0
  278. package/dist/pandascore-tool.d.ts +6 -0
  279. package/dist/pandascore-tool.d.ts.map +1 -0
  280. package/dist/pandascore-tool.js +239 -0
  281. package/dist/pandascore-tool.js.map +1 -0
  282. package/dist/podcastindex-tool.d.ts +7 -0
  283. package/dist/podcastindex-tool.d.ts.map +1 -0
  284. package/dist/podcastindex-tool.js +98 -0
  285. package/dist/podcastindex-tool.js.map +1 -0
  286. package/dist/ptv-tool.d.ts +6 -0
  287. package/dist/ptv-tool.d.ts.map +1 -0
  288. package/dist/ptv-tool.js +95 -0
  289. package/dist/ptv-tool.js.map +1 -0
  290. package/dist/radiobrowser-tool.d.ts +7 -0
  291. package/dist/radiobrowser-tool.d.ts.map +1 -0
  292. package/dist/radiobrowser-tool.js +125 -0
  293. package/dist/radiobrowser-tool.js.map +1 -0
  294. package/dist/raindrop-tool.d.ts +2 -0
  295. package/dist/raindrop-tool.d.ts.map +1 -0
  296. package/dist/raindrop-tool.js +137 -0
  297. package/dist/raindrop-tool.js.map +1 -0
  298. package/dist/random-tool.d.ts +9 -0
  299. package/dist/random-tool.d.ts.map +1 -0
  300. package/dist/random-tool.js +198 -0
  301. package/dist/random-tool.js.map +1 -0
  302. package/dist/rawg-tool.d.ts +7 -0
  303. package/dist/rawg-tool.d.ts.map +1 -0
  304. package/dist/rawg-tool.js +172 -0
  305. package/dist/rawg-tool.js.map +1 -0
  306. package/dist/readwise-tool.d.ts +2 -0
  307. package/dist/readwise-tool.d.ts.map +1 -0
  308. package/dist/readwise-tool.js +133 -0
  309. package/dist/readwise-tool.js.map +1 -0
  310. package/dist/resend-tool.d.ts +4 -0
  311. package/dist/resend-tool.d.ts.map +1 -0
  312. package/dist/resend-tool.js +133 -0
  313. package/dist/resend-tool.js.map +1 -0
  314. package/dist/restcountries-tool.d.ts +7 -0
  315. package/dist/restcountries-tool.d.ts.map +1 -0
  316. package/dist/restcountries-tool.js +141 -0
  317. package/dist/restcountries-tool.js.map +1 -0
  318. package/dist/riot-tool.d.ts +6 -0
  319. package/dist/riot-tool.d.ts.map +1 -0
  320. package/dist/riot-tool.js +166 -0
  321. package/dist/riot-tool.js.map +1 -0
  322. package/dist/seatgeek-tool.d.ts +7 -0
  323. package/dist/seatgeek-tool.d.ts.map +1 -0
  324. package/dist/seatgeek-tool.js +144 -0
  325. package/dist/seatgeek-tool.js.map +1 -0
  326. package/dist/sendle-tool.d.ts +4 -0
  327. package/dist/sendle-tool.d.ts.map +1 -0
  328. package/dist/sendle-tool.js +146 -0
  329. package/dist/sendle-tool.js.map +1 -0
  330. package/dist/server.d.ts.map +1 -1
  331. package/dist/server.js +114 -1825
  332. package/dist/server.js.map +1 -1
  333. package/dist/setlistfm-tool.d.ts +5 -0
  334. package/dist/setlistfm-tool.d.ts.map +1 -0
  335. package/dist/setlistfm-tool.js +89 -0
  336. package/dist/setlistfm-tool.js.map +1 -0
  337. package/dist/shodan-tool.d.ts +4 -0
  338. package/dist/shodan-tool.d.ts.map +1 -0
  339. package/dist/shodan-tool.js +139 -0
  340. package/dist/shodan-tool.js.map +1 -0
  341. package/dist/sleeper-tool.d.ts +7 -0
  342. package/dist/sleeper-tool.d.ts.map +1 -0
  343. package/dist/sleeper-tool.js +147 -0
  344. package/dist/sleeper-tool.js.map +1 -0
  345. package/dist/splitwise-tool.d.ts +2 -0
  346. package/dist/splitwise-tool.d.ts.map +1 -0
  347. package/dist/splitwise-tool.js +133 -0
  348. package/dist/splitwise-tool.js.map +1 -0
  349. package/dist/supercell-tool.d.ts +8 -0
  350. package/dist/supercell-tool.d.ts.map +1 -0
  351. package/dist/supercell-tool.js +258 -0
  352. package/dist/supercell-tool.js.map +1 -0
  353. package/dist/tab-tool.d.ts +4 -0
  354. package/dist/tab-tool.d.ts.map +1 -0
  355. package/dist/tab-tool.js +128 -0
  356. package/dist/tab-tool.js.map +1 -0
  357. package/dist/text-tool.d.ts +8 -0
  358. package/dist/text-tool.d.ts.map +1 -0
  359. package/dist/text-tool.js +190 -0
  360. package/dist/text-tool.js.map +1 -0
  361. package/dist/thelott-tool.d.ts +3 -0
  362. package/dist/thelott-tool.d.ts.map +1 -0
  363. package/dist/thelott-tool.js +93 -0
  364. package/dist/thelott-tool.js.map +1 -0
  365. package/dist/ticketmaster-tool.d.ts +6 -0
  366. package/dist/ticketmaster-tool.d.ts.map +1 -0
  367. package/dist/ticketmaster-tool.js +140 -0
  368. package/dist/ticketmaster-tool.js.map +1 -0
  369. package/dist/tmdb-tool.d.ts +9 -0
  370. package/dist/tmdb-tool.d.ts.map +1 -0
  371. package/dist/tmdb-tool.js +204 -0
  372. package/dist/tmdb-tool.js.map +1 -0
  373. package/dist/toggl-tool.d.ts +5 -0
  374. package/dist/toggl-tool.d.ts.map +1 -0
  375. package/dist/toggl-tool.js +203 -0
  376. package/dist/toggl-tool.js.map +1 -0
  377. package/dist/toilets-tool.d.ts +3 -0
  378. package/dist/toilets-tool.d.ts.map +1 -0
  379. package/dist/toilets-tool.js +260 -0
  380. package/dist/toilets-tool.js.map +1 -0
  381. package/dist/tomorrowio-tool.d.ts +4 -0
  382. package/dist/tomorrowio-tool.d.ts.map +1 -0
  383. package/dist/tomorrowio-tool.js +114 -0
  384. package/dist/tomorrowio-tool.js.map +1 -0
  385. package/dist/tool-wiring.d.ts +7370 -0
  386. package/dist/tool-wiring.d.ts.map +1 -0
  387. package/dist/tool-wiring.js +6068 -0
  388. package/dist/tool-wiring.js.map +1 -0
  389. package/dist/trivia-tool.d.ts +3 -0
  390. package/dist/trivia-tool.d.ts.map +1 -0
  391. package/dist/trivia-tool.js +91 -0
  392. package/dist/trivia-tool.js.map +1 -0
  393. package/dist/trove-tool.d.ts +4 -0
  394. package/dist/trove-tool.d.ts.map +1 -0
  395. package/dist/trove-tool.js +121 -0
  396. package/dist/trove-tool.js.map +1 -0
  397. package/dist/twitch-tool.d.ts +8 -0
  398. package/dist/twitch-tool.d.ts.map +1 -0
  399. package/dist/twitch-tool.js +188 -0
  400. package/dist/twitch-tool.js.map +1 -0
  401. package/dist/unit-converter-tool.d.ts +8 -0
  402. package/dist/unit-converter-tool.d.ts.map +1 -0
  403. package/dist/unit-converter-tool.js +176 -0
  404. package/dist/unit-converter-tool.js.map +1 -0
  405. package/dist/untappd-tool.d.ts +6 -0
  406. package/dist/untappd-tool.d.ts.map +1 -0
  407. package/dist/untappd-tool.js +193 -0
  408. package/dist/untappd-tool.js.map +1 -0
  409. package/dist/urlscan-tool.d.ts +4 -0
  410. package/dist/urlscan-tool.d.ts.map +1 -0
  411. package/dist/urlscan-tool.js +154 -0
  412. package/dist/urlscan-tool.js.map +1 -0
  413. package/dist/usgs-tool.d.ts +5 -0
  414. package/dist/usgs-tool.d.ts.map +1 -0
  415. package/dist/usgs-tool.js +140 -0
  416. package/dist/usgs-tool.js.map +1 -0
  417. package/dist/vault-bridge.d.ts +16 -0
  418. package/dist/vault-bridge.d.ts.map +1 -0
  419. package/dist/vault-bridge.js +139 -0
  420. package/dist/vault-bridge.js.map +1 -0
  421. package/dist/vercel-tool.d.ts +6 -0
  422. package/dist/vercel-tool.d.ts.map +1 -0
  423. package/dist/vercel-tool.js +202 -0
  424. package/dist/vercel-tool.js.map +1 -0
  425. package/dist/virustotal-tool.d.ts +5 -0
  426. package/dist/virustotal-tool.d.ts.map +1 -0
  427. package/dist/virustotal-tool.js +154 -0
  428. package/dist/virustotal-tool.js.map +1 -0
  429. package/dist/willyweather-tool.d.ts +4 -0
  430. package/dist/willyweather-tool.d.ts.map +1 -0
  431. package/dist/willyweather-tool.js +128 -0
  432. package/dist/willyweather-tool.js.map +1 -0
  433. package/dist/wise-tool.d.ts +5 -0
  434. package/dist/wise-tool.d.ts.map +1 -0
  435. package/dist/wise-tool.js +129 -0
  436. package/dist/wise-tool.js.map +1 -0
  437. package/dist/xero-tool.d.ts.map +1 -1
  438. package/dist/xero-tool.js +40 -35
  439. package/dist/xero-tool.js.map +1 -1
  440. package/dist/yelp-tool.d.ts +6 -0
  441. package/dist/yelp-tool.d.ts.map +1 -0
  442. package/dist/yelp-tool.js +150 -0
  443. package/dist/yelp-tool.js.map +1 -0
  444. package/package.json +6 -1
@@ -0,0 +1,134 @@
1
+ // ─── Eventbrite API Tool ──────────────────────────────────────────────────────
2
+ // Base URL: https://www.eventbriteapi.com/v3/
3
+ // Auth: Bearer token in Authorization header. Set EVENTBRITE_TOKEN env var.
4
+ // Docs: https://www.eventbrite.com/platform/api
5
+ // No external dependencies - native fetch only.
6
+ const EVENTBRITE_BASE = "https://www.eventbriteapi.com/v3";
7
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
8
+ function getToken(args) {
9
+ return (String(args.token ?? "").trim() ||
10
+ (process.env.EVENTBRITE_TOKEN ?? "").trim() ||
11
+ null);
12
+ }
13
+ async function ebFetch(path, token, query, method, body) {
14
+ const url = new URL(`${EVENTBRITE_BASE}${path}`);
15
+ if (query) {
16
+ for (const [k, v] of Object.entries(query)) {
17
+ if (v !== undefined && v !== "")
18
+ url.searchParams.set(k, String(v));
19
+ }
20
+ }
21
+ const init = {
22
+ method: method ?? "GET",
23
+ headers: {
24
+ Authorization: `Bearer ${token}`,
25
+ Accept: "application/json",
26
+ ...(body !== undefined ? { "Content-Type": "application/json" } : {}),
27
+ },
28
+ ...(body !== undefined ? { body: JSON.stringify(body) } : {}),
29
+ };
30
+ let response;
31
+ try {
32
+ response = await fetch(url.toString(), init);
33
+ }
34
+ catch (err) {
35
+ return { error: `Network error: ${err instanceof Error ? err.message : String(err)}` };
36
+ }
37
+ let data;
38
+ try {
39
+ data = await response.json();
40
+ }
41
+ catch {
42
+ return { error: `Non-JSON response (HTTP ${response.status})`, status: response.status };
43
+ }
44
+ if (!response.ok) {
45
+ const e = data;
46
+ return {
47
+ error: e.error_description ?? e.error ?? `HTTP ${response.status}`,
48
+ status: response.status,
49
+ };
50
+ }
51
+ return data;
52
+ }
53
+ // ─── eventbrite_search_events ─────────────────────────────────────────────────
54
+ export async function eventbriteSearchEvents(args) {
55
+ const token = getToken(args);
56
+ if (!token)
57
+ return { error: "EVENTBRITE_TOKEN env var (or token arg) is required." };
58
+ return ebFetch("/events/search/", token, {
59
+ q: args.q ? String(args.q) : undefined,
60
+ "location.address": args.location_address ? String(args.location_address) : undefined,
61
+ "start_date.range_start": args.start_date_range_start ? String(args.start_date_range_start) : undefined,
62
+ categories: args.category_id ? String(args.category_id) : undefined,
63
+ sort_by: args.sort_by ? String(args.sort_by) : undefined,
64
+ });
65
+ }
66
+ // ─── eventbrite_get_event ─────────────────────────────────────────────────────
67
+ export async function eventbriteGetEvent(args) {
68
+ const token = getToken(args);
69
+ if (!token)
70
+ return { error: "EVENTBRITE_TOKEN env var (or token arg) is required." };
71
+ const id = String(args.id ?? "").trim();
72
+ if (!id)
73
+ return { error: "id is required." };
74
+ return ebFetch(`/events/${id}/`, token);
75
+ }
76
+ // ─── eventbrite_get_event_attendees ───────────────────────────────────────────
77
+ export async function eventbriteGetEventAttendees(args) {
78
+ const token = getToken(args);
79
+ if (!token)
80
+ return { error: "EVENTBRITE_TOKEN env var (or token arg) is required." };
81
+ const id = String(args.id ?? "").trim();
82
+ if (!id)
83
+ return { error: "id is required." };
84
+ return ebFetch(`/events/${id}/attendees/`, token);
85
+ }
86
+ // ─── eventbrite_create_event ──────────────────────────────────────────────────
87
+ export async function eventbriteCreateEvent(args) {
88
+ const token = getToken(args);
89
+ if (!token)
90
+ return { error: "EVENTBRITE_TOKEN env var (or token arg) is required." };
91
+ const organization_id = String(args.organization_id ?? "").trim();
92
+ if (!organization_id)
93
+ return { error: "organization_id is required." };
94
+ const name = args.name ? String(args.name) : undefined;
95
+ const start = args.start;
96
+ const end = args.end;
97
+ const currency = args.currency ? String(args.currency) : undefined;
98
+ if (!name)
99
+ return { error: "name is required." };
100
+ if (!start)
101
+ return { error: "start is required (object with utc and timezone)." };
102
+ if (!end)
103
+ return { error: "end is required (object with utc and timezone)." };
104
+ if (!currency)
105
+ return { error: "currency is required (e.g. 'USD')." };
106
+ const eventBody = {
107
+ event: {
108
+ name: { html: name },
109
+ start,
110
+ end,
111
+ currency,
112
+ ...(args.venue_id ? { venue_id: String(args.venue_id) } : {}),
113
+ },
114
+ };
115
+ return ebFetch(`/organizations/${organization_id}/events/`, token, undefined, "POST", eventBody);
116
+ }
117
+ // ─── eventbrite_list_categories ───────────────────────────────────────────────
118
+ export async function eventbriteListCategories(args) {
119
+ const token = getToken(args);
120
+ if (!token)
121
+ return { error: "EVENTBRITE_TOKEN env var (or token arg) is required." };
122
+ return ebFetch("/categories/", token);
123
+ }
124
+ // ─── eventbrite_get_venue ─────────────────────────────────────────────────────
125
+ export async function eventbriteGetVenue(args) {
126
+ const token = getToken(args);
127
+ if (!token)
128
+ return { error: "EVENTBRITE_TOKEN env var (or token arg) is required." };
129
+ const id = String(args.id ?? "").trim();
130
+ if (!id)
131
+ return { error: "id is required." };
132
+ return ebFetch(`/venues/${id}/`, token);
133
+ }
134
+ //# sourceMappingURL=eventbrite-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventbrite-tool.js","sourceRoot":"","sources":["../src/eventbrite-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function feedlyAction(action: string, args: Record<string, unknown>): Promise<unknown>;
2
+ //# sourceMappingURL=feedly-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedly-tool.d.ts","sourceRoot":"","sources":["../src/feedly-tool.ts"],"names":[],"mappings":"AA0IA,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,IAAI,EAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,OAAO,CAAC,CAsBlB"}
@@ -0,0 +1,152 @@
1
+ // ── Feedly API tool ────────────────────────────────────────────────────────────
2
+ // Wraps the Feedly Cloud API (https://cloud.feedly.com/v3/) via fetch.
3
+ // Auth: OAuth Bearer token (FEEDLY_ACCESS_TOKEN).
4
+ // Get a developer token at feedly.com/v3/auth/dev.
5
+ //
6
+ // Credentials are auto-resolved via vault-bridge:
7
+ // 1. Inline args (access_token passed directly)
8
+ // 2. Env var UNCLICK_FEEDLY_ACCESS_TOKEN
9
+ // 3. Local vault key "feedly/access_token"
10
+ // 4. Supabase via UNCLICK_API_KEY + unclick.world/api/credentials
11
+ //
12
+ // No external dependencies.
13
+ import { resolveCredentials } from "./vault-bridge.js";
14
+ const FEEDLY_BASE = "https://cloud.feedly.com/v3";
15
+ // ── Shared fetch helper ────────────────────────────────────────────────────────
16
+ async function feedlyFetch(token, method, path, query, body) {
17
+ const url = new URL(`${FEEDLY_BASE}${path}`);
18
+ if (query) {
19
+ for (const [k, v] of Object.entries(query)) {
20
+ if (v !== undefined && v !== "")
21
+ url.searchParams.set(k, String(v));
22
+ }
23
+ }
24
+ const headers = {
25
+ Authorization: `Bearer ${token}`,
26
+ Accept: "application/json",
27
+ };
28
+ if (body !== undefined)
29
+ headers["Content-Type"] = "application/json";
30
+ let response;
31
+ try {
32
+ response = await fetch(url.toString(), {
33
+ method,
34
+ headers,
35
+ body: body !== undefined ? JSON.stringify(body) : undefined,
36
+ });
37
+ }
38
+ catch (err) {
39
+ return { error: `Network error reaching Feedly API: ${err instanceof Error ? err.message : String(err)}` };
40
+ }
41
+ if (response.status === 401)
42
+ return { error: "Feedly access token is invalid or expired. Get a new one at feedly.com/v3/auth/dev.", status: 401 };
43
+ if (response.status === 404)
44
+ return { error: "Resource not found. Check the stream or feed ID.", status: 404 };
45
+ if (response.status === 429)
46
+ return { error: "Feedly rate limit exceeded. Please wait and retry.", status: 429 };
47
+ const text = await response.text();
48
+ if (!text)
49
+ return { ok: true };
50
+ let data;
51
+ try {
52
+ data = JSON.parse(text);
53
+ }
54
+ catch {
55
+ data = { raw: text };
56
+ }
57
+ if (!response.ok) {
58
+ const detail = data?.errorMessage ?? text;
59
+ return { error: `Feedly API error ${response.status}: ${detail}`, status: response.status };
60
+ }
61
+ return data;
62
+ }
63
+ // ── Profile helper ─────────────────────────────────────────────────────────────
64
+ // Some Feedly endpoints require the user ID. We fetch it lazily.
65
+ async function getUserId(token) {
66
+ const profile = await feedlyFetch(token, "GET", "/profile");
67
+ if ("error" in profile)
68
+ return profile;
69
+ const id = String(profile.id ?? "").trim();
70
+ if (!id)
71
+ return { error: "Could not determine Feedly user ID from profile." };
72
+ return id;
73
+ }
74
+ // ── Action implementations ─────────────────────────────────────────────────────
75
+ async function getFeeds(token, _args) {
76
+ return feedlyFetch(token, "GET", "/subscriptions");
77
+ }
78
+ async function getStreams(token, args) {
79
+ // Allow caller to pass stream_id directly; otherwise default to global.all for the user.
80
+ let streamId = String(args.stream_id ?? "").trim();
81
+ if (!streamId) {
82
+ const userId = await getUserId(token);
83
+ if (typeof userId !== "string")
84
+ return userId;
85
+ streamId = `user/${userId}/category/global.all`;
86
+ }
87
+ return feedlyFetch(token, "GET", "/streams/contents", {
88
+ streamId,
89
+ count: args.count ? Number(args.count) : 20,
90
+ ranked: args.ranked ? String(args.ranked) : undefined,
91
+ unreadOnly: args.unread_only !== undefined ? Boolean(args.unread_only) : undefined,
92
+ newerThan: args.newer_than ? Number(args.newer_than) : undefined,
93
+ continuation: args.continuation ? String(args.continuation) : undefined,
94
+ });
95
+ }
96
+ async function searchFeeds(token, args) {
97
+ const query = String(args.query ?? "").trim();
98
+ if (!query)
99
+ return { error: "query is required." };
100
+ return feedlyFetch(token, "GET", "/search/feeds", {
101
+ query,
102
+ count: args.count ? Number(args.count) : 20,
103
+ locale: args.locale ? String(args.locale) : undefined,
104
+ });
105
+ }
106
+ async function getCategories(token, _args) {
107
+ return feedlyFetch(token, "GET", "/categories");
108
+ }
109
+ async function markAsRead(token, args) {
110
+ if (!args.entry_ids && !args.feed_ids && !args.category_ids) {
111
+ return { error: "At least one of entry_ids, feed_ids, or category_ids is required." };
112
+ }
113
+ const marker = {
114
+ action: "markAsRead",
115
+ type: args.type ?? (args.entry_ids ? "entries" : args.feed_ids ? "feeds" : "categories"),
116
+ };
117
+ if (args.entry_ids)
118
+ marker.entryIds = args.entry_ids;
119
+ if (args.feed_ids)
120
+ marker.feedIds = args.feed_ids;
121
+ if (args.category_ids)
122
+ marker.categoryIds = args.category_ids;
123
+ if (args.last_read_entry_id)
124
+ marker.lastReadEntryId = String(args.last_read_entry_id);
125
+ return feedlyFetch(token, "POST", "/markers", undefined, { markers: [marker] });
126
+ }
127
+ // ── Public dispatcher ──────────────────────────────────────────────────────────
128
+ export async function feedlyAction(action, args) {
129
+ const resolved = await resolveCredentials("feedly", args);
130
+ if ("error" in resolved)
131
+ return resolved;
132
+ const token = String(resolved.access_token ?? "").trim();
133
+ if (!token)
134
+ return { error: "Feedly access_token could not be resolved." };
135
+ try {
136
+ switch (action) {
137
+ case "get_feedly_feeds": return getFeeds(token, args);
138
+ case "get_feedly_streams": return getStreams(token, args);
139
+ case "search_feedly": return searchFeeds(token, args);
140
+ case "get_feedly_categories": return getCategories(token, args);
141
+ case "mark_as_read": return markAsRead(token, args);
142
+ default:
143
+ return {
144
+ error: `Unknown Feedly action: "${action}". Valid actions: get_feedly_feeds, get_feedly_streams, search_feedly, get_feedly_categories, mark_as_read.`,
145
+ };
146
+ }
147
+ }
148
+ catch (err) {
149
+ return { error: err instanceof Error ? err.message : String(err) };
150
+ }
151
+ }
152
+ //# sourceMappingURL=feedly-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedly-tool.js","sourceRoot":"","sources":["../src/feedly-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function foursquareSearchPlaces(args: Record<string, unknown>): Promise<unknown>;
2
+ export declare function foursquareGetPlace(args: Record<string, unknown>): Promise<unknown>;
3
+ export declare function foursquareGetPhotos(args: Record<string, unknown>): Promise<unknown>;
4
+ export declare function foursquareGetTips(args: Record<string, unknown>): Promise<unknown>;
5
+ export declare function foursquareAutocomplete(args: Record<string, unknown>): Promise<unknown>;
6
+ //# sourceMappingURL=foursquare-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"foursquare-tool.d.ts","sourceRoot":"","sources":["../src/foursquare-tool.ts"],"names":[],"mappings":"AA4DA,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAW5F;AAID,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAQxF;AAID,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAQzF;AAID,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAQvF;AAID,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAW5F"}
@@ -0,0 +1,102 @@
1
+ // ─── Foursquare Places API Tool ───────────────────────────────────────────────
2
+ // Base URL: https://api.foursquare.com/v3/
3
+ // Auth: API key in Authorization header. Set FOURSQUARE_API_KEY env var.
4
+ // Docs: https://docs.foursquare.com/developer/reference/place-search
5
+ // No external dependencies - native fetch only.
6
+ const FOURSQUARE_BASE = "https://api.foursquare.com/v3";
7
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
8
+ function getApiKey(args) {
9
+ return (String(args.api_key ?? "").trim() ||
10
+ (process.env.FOURSQUARE_API_KEY ?? "").trim() ||
11
+ null);
12
+ }
13
+ async function fsFetch(path, apiKey, query) {
14
+ const url = new URL(`${FOURSQUARE_BASE}${path}`);
15
+ if (query) {
16
+ for (const [k, v] of Object.entries(query)) {
17
+ if (v !== undefined && v !== "")
18
+ url.searchParams.set(k, String(v));
19
+ }
20
+ }
21
+ let response;
22
+ try {
23
+ response = await fetch(url.toString(), {
24
+ headers: {
25
+ Authorization: apiKey,
26
+ Accept: "application/json",
27
+ },
28
+ });
29
+ }
30
+ catch (err) {
31
+ return { error: `Network error: ${err instanceof Error ? err.message : String(err)}` };
32
+ }
33
+ let data;
34
+ try {
35
+ data = await response.json();
36
+ }
37
+ catch {
38
+ return { error: `Non-JSON response (HTTP ${response.status})`, status: response.status };
39
+ }
40
+ if (!response.ok) {
41
+ const e = data;
42
+ return { error: (e.message ?? `HTTP ${response.status}`), status: response.status };
43
+ }
44
+ return data;
45
+ }
46
+ // ─── foursquare_search_places ─────────────────────────────────────────────────
47
+ export async function foursquareSearchPlaces(args) {
48
+ const apiKey = getApiKey(args);
49
+ if (!apiKey)
50
+ return { error: "FOURSQUARE_API_KEY env var (or api_key arg) is required." };
51
+ return fsFetch("/places/search", apiKey, {
52
+ query: args.query ? String(args.query) : undefined,
53
+ ll: args.ll ? String(args.ll) : undefined,
54
+ near: args.near ? String(args.near) : undefined,
55
+ categories: args.categories ? String(args.categories) : undefined,
56
+ limit: args.limit ? Number(args.limit) : undefined,
57
+ });
58
+ }
59
+ // ─── foursquare_get_place ─────────────────────────────────────────────────────
60
+ export async function foursquareGetPlace(args) {
61
+ const apiKey = getApiKey(args);
62
+ if (!apiKey)
63
+ return { error: "FOURSQUARE_API_KEY env var (or api_key arg) is required." };
64
+ const fsq_id = String(args.fsq_id ?? "").trim();
65
+ if (!fsq_id)
66
+ return { error: "fsq_id is required." };
67
+ return fsFetch(`/places/${fsq_id}`, apiKey);
68
+ }
69
+ // ─── foursquare_get_photos ────────────────────────────────────────────────────
70
+ export async function foursquareGetPhotos(args) {
71
+ const apiKey = getApiKey(args);
72
+ if (!apiKey)
73
+ return { error: "FOURSQUARE_API_KEY env var (or api_key arg) is required." };
74
+ const fsq_id = String(args.fsq_id ?? "").trim();
75
+ if (!fsq_id)
76
+ return { error: "fsq_id is required." };
77
+ return fsFetch(`/places/${fsq_id}/photos`, apiKey);
78
+ }
79
+ // ─── foursquare_get_tips ──────────────────────────────────────────────────────
80
+ export async function foursquareGetTips(args) {
81
+ const apiKey = getApiKey(args);
82
+ if (!apiKey)
83
+ return { error: "FOURSQUARE_API_KEY env var (or api_key arg) is required." };
84
+ const fsq_id = String(args.fsq_id ?? "").trim();
85
+ if (!fsq_id)
86
+ return { error: "fsq_id is required." };
87
+ return fsFetch(`/places/${fsq_id}/tips`, apiKey);
88
+ }
89
+ // ─── foursquare_autocomplete ──────────────────────────────────────────────────
90
+ export async function foursquareAutocomplete(args) {
91
+ const apiKey = getApiKey(args);
92
+ if (!apiKey)
93
+ return { error: "FOURSQUARE_API_KEY env var (or api_key arg) is required." };
94
+ const query = String(args.query ?? "").trim();
95
+ if (!query)
96
+ return { error: "query is required." };
97
+ return fsFetch("/autocomplete", apiKey, {
98
+ query,
99
+ ll: args.ll ? String(args.ll) : undefined,
100
+ });
101
+ }
102
+ //# sourceMappingURL=foursquare-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"foursquare-tool.js","sourceRoot":"","sources":["../src/foursquare-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare function fplBootstrap(_args: Record<string, unknown>): Promise<unknown>;
2
+ export declare function fplPlayer(args: Record<string, unknown>): Promise<unknown>;
3
+ export declare function fplGameweek(args: Record<string, unknown>): Promise<unknown>;
4
+ export declare function fplFixtures(args: Record<string, unknown>): Promise<unknown>;
5
+ export declare function fplMyTeam(args: Record<string, unknown>): Promise<unknown>;
6
+ export declare function fplManager(args: Record<string, unknown>): Promise<unknown>;
7
+ export declare function fplLeaguesClassic(args: Record<string, unknown>): Promise<unknown>;
8
+ //# sourceMappingURL=fpl-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fpl-tool.d.ts","sourceRoot":"","sources":["../src/fpl-tool.ts"],"names":[],"mappings":"AAuBA,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,OAAO,CAAC,CA+ClB;AAED,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC,CAiClB;AAED,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC,CA0BlB;AAED,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC,CAqBlB;AAED,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC,CAwBlB;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC,CAmBlB;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC,CA6BlB"}
@@ -0,0 +1,195 @@
1
+ // Fantasy Premier League (FPL) API integration for the UnClick MCP server.
2
+ // Uses the FPL public API via fetch - no external dependencies, no API key required.
3
+ // Documentation: https://fantasy.premierleague.com/api/
4
+ const FPL_BASE = "https://fantasy.premierleague.com/api";
5
+ // ─── API helper ──────────────────────────────────────────────────────────────
6
+ async function fplFetch(path) {
7
+ const res = await fetch(`${FPL_BASE}${path}`, {
8
+ headers: {
9
+ "User-Agent": "UnClick MCP Server",
10
+ Accept: "application/json",
11
+ },
12
+ });
13
+ if (!res.ok) {
14
+ throw new Error(`FPL API HTTP ${res.status} for ${path}`);
15
+ }
16
+ return res.json();
17
+ }
18
+ // ─── Operations ──────────────────────────────────────────────────────────────
19
+ export async function fplBootstrap(_args) {
20
+ const data = (await fplFetch("/bootstrap-static/"));
21
+ const players = data.elements ?? [];
22
+ const teams = data.teams ?? [];
23
+ const events = data.events ?? [];
24
+ const currentGw = events.find((e) => e.is_current === true);
25
+ const nextGw = events.find((e) => e.is_next === true);
26
+ return {
27
+ total_players: players.length,
28
+ total_teams: teams.length,
29
+ current_gameweek: currentGw
30
+ ? { id: currentGw.id, name: currentGw.name, deadline_time: currentGw.deadline_time }
31
+ : null,
32
+ next_gameweek: nextGw
33
+ ? { id: nextGw.id, name: nextGw.name, deadline_time: nextGw.deadline_time }
34
+ : null,
35
+ teams: teams.map((t) => ({
36
+ id: t.id,
37
+ name: t.name,
38
+ short_name: t.short_name,
39
+ strength: t.strength,
40
+ })),
41
+ top_players: players
42
+ .sort((a, b) => Number(b.total_points ?? 0) - Number(a.total_points ?? 0))
43
+ .slice(0, 20)
44
+ .map((p) => ({
45
+ id: p.id,
46
+ web_name: p.web_name,
47
+ first_name: p.first_name,
48
+ second_name: p.second_name,
49
+ team_id: p.team,
50
+ position: p.element_type,
51
+ total_points: p.total_points,
52
+ now_cost: p.now_cost,
53
+ selected_by_percent: p.selected_by_percent,
54
+ form: p.form,
55
+ status: p.status,
56
+ })),
57
+ };
58
+ }
59
+ export async function fplPlayer(args) {
60
+ const id = String(args.id ?? "").trim();
61
+ if (!id)
62
+ throw new Error("id is required (player element ID from fpl_bootstrap).");
63
+ const data = (await fplFetch(`/element-summary/${id}/`));
64
+ const history = data.history ?? [];
65
+ const fixtures = data.fixtures ?? [];
66
+ return {
67
+ player_id: id,
68
+ season_stats: history.slice(-5).map((h) => ({
69
+ round: h.round,
70
+ opponent_team: h.opponent_team,
71
+ total_points: h.total_points,
72
+ minutes: h.minutes,
73
+ goals_scored: h.goals_scored,
74
+ assists: h.assists,
75
+ clean_sheets: h.clean_sheets,
76
+ bonus: h.bonus,
77
+ bps: h.bps,
78
+ })),
79
+ upcoming_fixtures: fixtures.slice(0, 5).map((f) => ({
80
+ event: f.event,
81
+ difficulty: f.difficulty,
82
+ kickoff_time: f.kickoff_time,
83
+ is_home: f.is_home,
84
+ team_h: f.team_h,
85
+ team_a: f.team_a,
86
+ })),
87
+ };
88
+ }
89
+ export async function fplGameweek(args) {
90
+ const gw = String(args.gw ?? "").trim();
91
+ if (!gw)
92
+ throw new Error("gw is required (gameweek number).");
93
+ const data = (await fplFetch(`/event/${gw}/live/`));
94
+ const elements = data.elements ?? [];
95
+ return {
96
+ gameweek: Number(gw),
97
+ count: elements.length,
98
+ player_scores: elements.slice(0, 50).map((e) => {
99
+ const stats = e.stats ?? {};
100
+ return {
101
+ player_id: e.id,
102
+ total_points: stats.total_points,
103
+ minutes: stats.minutes,
104
+ goals_scored: stats.goals_scored,
105
+ assists: stats.assists,
106
+ bonus: stats.bonus,
107
+ clean_sheets: stats.clean_sheets,
108
+ };
109
+ }),
110
+ };
111
+ }
112
+ export async function fplFixtures(args) {
113
+ const path = args.gw ? `/fixtures/?event=${args.gw}` : "/fixtures/";
114
+ const data = (await fplFetch(path));
115
+ return {
116
+ count: data.length,
117
+ fixtures: data.slice(0, 50).map((f) => ({
118
+ id: f.id,
119
+ event: f.event,
120
+ kickoff_time: f.kickoff_time,
121
+ team_h: f.team_h,
122
+ team_a: f.team_a,
123
+ team_h_score: f.team_h_score ?? null,
124
+ team_a_score: f.team_a_score ?? null,
125
+ started: f.started,
126
+ finished: f.finished,
127
+ })),
128
+ };
129
+ }
130
+ export async function fplMyTeam(args) {
131
+ const teamId = String(args.team_id ?? "").trim();
132
+ const gw = String(args.gw ?? "").trim();
133
+ if (!teamId)
134
+ throw new Error("team_id is required.");
135
+ if (!gw)
136
+ throw new Error("gw is required (gameweek number).");
137
+ const data = (await fplFetch(`/entry/${teamId}/event/${gw}/picks/`));
138
+ const picks = data.picks ?? [];
139
+ return {
140
+ team_id: teamId,
141
+ gameweek: Number(gw),
142
+ active_chip: data.active_chip ?? null,
143
+ picks: picks.map((p) => ({
144
+ element: p.element,
145
+ position: p.position,
146
+ multiplier: p.multiplier,
147
+ is_captain: p.is_captain,
148
+ is_vice_captain: p.is_vice_captain,
149
+ })),
150
+ };
151
+ }
152
+ export async function fplManager(args) {
153
+ const teamId = String(args.team_id ?? "").trim();
154
+ if (!teamId)
155
+ throw new Error("team_id is required.");
156
+ const data = (await fplFetch(`/entry/${teamId}/`));
157
+ return {
158
+ team_id: teamId,
159
+ manager_name: `${data.player_first_name ?? ""} ${data.player_last_name ?? ""}`.trim(),
160
+ team_name: data.name,
161
+ overall_rank: data.summary_overall_rank ?? null,
162
+ overall_points: data.summary_overall_points ?? null,
163
+ last_deadline_bank: data.last_deadline_bank ?? null,
164
+ last_deadline_value: data.last_deadline_value ?? null,
165
+ started_event: data.started_event ?? null,
166
+ favourite_team: data.favourite_team ?? null,
167
+ };
168
+ }
169
+ export async function fplLeaguesClassic(args) {
170
+ const leagueId = String(args.league_id ?? "").trim();
171
+ if (!leagueId)
172
+ throw new Error("league_id is required.");
173
+ const page = Math.max(1, Number(args.page ?? 1));
174
+ const data = (await fplFetch(`/leagues-classic/${leagueId}/standings/?page_standings=${page}`));
175
+ const league = data.league ?? {};
176
+ const standings = data.standings ?? {};
177
+ const results = standings.results ?? [];
178
+ return {
179
+ league_id: leagueId,
180
+ league_name: league.name ?? null,
181
+ page,
182
+ has_next: standings.has_next ?? false,
183
+ count: results.length,
184
+ standings: results.map((r) => ({
185
+ rank: r.rank,
186
+ last_rank: r.last_rank,
187
+ team_name: r.entry_name,
188
+ manager_name: r.player_name,
189
+ entry_id: r.entry,
190
+ total: r.total,
191
+ event_total: r.event_total,
192
+ })),
193
+ };
194
+ }
195
+ //# sourceMappingURL=fpl-tool.js.map