@unclick/mcp-server 0.1.1 → 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 +5 -1
@@ -0,0 +1,211 @@
1
+ // Lichess API integration for the UnClick MCP server.
2
+ // Uses the Lichess public API via fetch - no external dependencies, no API key required.
3
+ // Documentation: https://lichess.org/api
4
+ const LICHESS_BASE = "https://lichess.org/api";
5
+ // ─── API helper ──────────────────────────────────────────────────────────────
6
+ async function lichessFetch(path, params = {}) {
7
+ const url = new URL(`${LICHESS_BASE}${path}`);
8
+ for (const [k, v] of Object.entries(params)) {
9
+ if (v !== undefined && v !== "")
10
+ url.searchParams.set(k, v);
11
+ }
12
+ const res = await fetch(url.toString(), {
13
+ headers: {
14
+ Accept: "application/json",
15
+ "User-Agent": "UnClick MCP Server",
16
+ },
17
+ });
18
+ if (!res.ok) {
19
+ if (res.status === 404) {
20
+ throw new Error("Not found (HTTP 404). Check the username or resource exists.");
21
+ }
22
+ const text = await res.text().catch(() => "");
23
+ throw new Error(`Lichess API HTTP ${res.status}: ${text.slice(0, 200)}`);
24
+ }
25
+ return res.json();
26
+ }
27
+ // ─── Operations ──────────────────────────────────────────────────────────────
28
+ export async function lichessUser(args) {
29
+ const username = String(args.username ?? "").trim().toLowerCase();
30
+ if (!username)
31
+ throw new Error("username is required.");
32
+ const data = (await lichessFetch(`/user/${username}`));
33
+ const perfs = data.perfs ?? {};
34
+ const ratings = {};
35
+ for (const [key, val] of Object.entries(perfs)) {
36
+ ratings[key] = val.rating ?? null;
37
+ }
38
+ return {
39
+ id: data.id,
40
+ username: data.username,
41
+ title: data.title ?? null,
42
+ patron: data.patron ?? false,
43
+ created_at: data.createdAt
44
+ ? new Date(Number(data.createdAt)).toISOString()
45
+ : null,
46
+ seen_at: data.seenAt
47
+ ? new Date(Number(data.seenAt)).toISOString()
48
+ : null,
49
+ play_time_hours: data.playTime
50
+ ? Math.round(Number(data.playTime.total) / 3600)
51
+ : null,
52
+ game_count: data.count
53
+ ? data.count.all
54
+ : null,
55
+ ratings,
56
+ online: data.online ?? false,
57
+ };
58
+ }
59
+ export async function lichessUserGames(args) {
60
+ const username = String(args.username ?? "").trim().toLowerCase();
61
+ if (!username)
62
+ throw new Error("username is required.");
63
+ const max = Math.min(50, Math.max(1, Number(args.max ?? 10)));
64
+ // Lichess returns NDJSON by default; request JSON
65
+ const url = new URL(`${LICHESS_BASE}/games/user/${username}`);
66
+ url.searchParams.set("max", String(max));
67
+ url.searchParams.set("pgnInJson", "false");
68
+ url.searchParams.set("clocks", "false");
69
+ url.searchParams.set("evals", "false");
70
+ url.searchParams.set("opening", "true");
71
+ const res = await fetch(url.toString(), {
72
+ headers: {
73
+ Accept: "application/x-ndjson",
74
+ "User-Agent": "UnClick MCP Server",
75
+ },
76
+ });
77
+ if (!res.ok) {
78
+ throw new Error(`Lichess API HTTP ${res.status}`);
79
+ }
80
+ const text = await res.text();
81
+ const games = text
82
+ .split("\n")
83
+ .filter((line) => line.trim())
84
+ .map((line) => {
85
+ try {
86
+ return JSON.parse(line);
87
+ }
88
+ catch {
89
+ return null;
90
+ }
91
+ })
92
+ .filter((g) => g !== null);
93
+ return {
94
+ username,
95
+ count: games.length,
96
+ games: games.map((g) => {
97
+ const players = g.players ?? {};
98
+ const white = players.white ?? {};
99
+ const black = players.black ?? {};
100
+ return {
101
+ id: g.id,
102
+ rated: g.rated,
103
+ speed: g.speed,
104
+ status: g.status,
105
+ winner: g.winner ?? null,
106
+ created_at: g.createdAt
107
+ ? new Date(Number(g.createdAt)).toISOString()
108
+ : null,
109
+ white: {
110
+ user: white.user?.name ?? null,
111
+ rating: white.rating ?? null,
112
+ result: g.winner === "white" ? "win" : g.winner === "black" ? "loss" : "draw",
113
+ },
114
+ black: {
115
+ user: black.user?.name ?? null,
116
+ rating: black.rating ?? null,
117
+ result: g.winner === "black" ? "win" : g.winner === "white" ? "loss" : "draw",
118
+ },
119
+ opening: g.opening
120
+ ? g.opening.name
121
+ : null,
122
+ };
123
+ }),
124
+ };
125
+ }
126
+ export async function lichessPuzzleDaily(_args) {
127
+ const data = (await lichessFetch("/puzzle/daily"));
128
+ const puzzle = data.puzzle ?? {};
129
+ const game = data.game ?? {};
130
+ return {
131
+ id: puzzle.id,
132
+ rating: puzzle.rating ?? null,
133
+ plays: puzzle.plays ?? null,
134
+ themes: puzzle.themes ?? [],
135
+ solution: puzzle.solution ?? [],
136
+ fen: game.pgn?.split(" ").pop() ?? null,
137
+ pgn: game.pgn ?? null,
138
+ url: puzzle.id ? `https://lichess.org/training/${puzzle.id}` : null,
139
+ };
140
+ }
141
+ export async function lichessTopPlayers(args) {
142
+ const perfType = String(args.perfType ?? "bullet");
143
+ const validTypes = [
144
+ "ultraBullet",
145
+ "bullet",
146
+ "blitz",
147
+ "rapid",
148
+ "classical",
149
+ "chess960",
150
+ "crazyhouse",
151
+ "antichess",
152
+ "atomic",
153
+ "horde",
154
+ "kingOfTheHill",
155
+ "racingKings",
156
+ "threeCheck",
157
+ ];
158
+ if (!validTypes.includes(perfType)) {
159
+ throw new Error(`perfType must be one of: ${validTypes.join(", ")}`);
160
+ }
161
+ const data = (await lichessFetch(`/player/top/10/${perfType}`));
162
+ const users = data.users ?? [];
163
+ return {
164
+ perf_type: perfType,
165
+ count: users.length,
166
+ players: users.map((u) => {
167
+ const perfs = u.perfs ?? {};
168
+ const perf = perfs[perfType] ?? {};
169
+ return {
170
+ id: u.id,
171
+ username: u.username,
172
+ title: u.title ?? null,
173
+ patron: u.patron ?? false,
174
+ rating: perf.rating ?? null,
175
+ progress: perf.progress ?? null,
176
+ };
177
+ }),
178
+ };
179
+ }
180
+ export async function lichessTournament(args) {
181
+ const id = String(args.id ?? "").trim();
182
+ if (!id)
183
+ throw new Error("id is required (Lichess tournament ID).");
184
+ const data = (await lichessFetch(`/tournament/${id}`));
185
+ const podium = data.podium ?? [];
186
+ return {
187
+ id: data.id,
188
+ full_name: data.fullName ?? data.id,
189
+ status: data.status ?? null,
190
+ starts_at: data.startsAt
191
+ ? new Date(Number(data.startsAt)).toISOString()
192
+ : null,
193
+ finished_at: data.finishesAt
194
+ ? new Date(Number(data.finishesAt)).toISOString()
195
+ : null,
196
+ nb_players: data.nbPlayers ?? null,
197
+ winner: podium[0]
198
+ ? {
199
+ username: podium[0].player?.name ?? null,
200
+ score: podium[0].score ?? null,
201
+ }
202
+ : null,
203
+ podium: podium.slice(0, 3).map((p) => ({
204
+ username: p.player?.name ?? null,
205
+ score: p.score ?? null,
206
+ nb: p.nb ?? null,
207
+ })),
208
+ url: `https://lichess.org/tournament/${id}`,
209
+ };
210
+ }
211
+ //# sourceMappingURL=lichess-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lichess-tool.js","sourceRoot":"","sources":["../src/lichess-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare function searchMeals(args: Record<string, unknown>): Promise<unknown>;
2
+ export declare function getRandomMeal(_args: Record<string, unknown>): Promise<unknown>;
3
+ export declare function getMealById(args: Record<string, unknown>): Promise<unknown>;
4
+ export declare function listMealCategories(_args: Record<string, unknown>): Promise<unknown>;
5
+ export declare function filterMealsByCategory(args: Record<string, unknown>): Promise<unknown>;
6
+ export declare function filterMealsByArea(args: Record<string, unknown>): Promise<unknown>;
7
+ export declare function filterMealsByIngredient(args: Record<string, unknown>): Promise<unknown>;
8
+ //# sourceMappingURL=meal-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meal-tool.d.ts","sourceRoot":"","sources":["../src/meal-tool.ts"],"names":[],"mappings":"AAwEA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAejF;AAID,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAOpF;AAID,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAQjF;AAID,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAYzF;AAID,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAoB3F;AAID,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAoBvF;AAID,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAoB7F"}
@@ -0,0 +1,143 @@
1
+ // TheMealDB recipe finder.
2
+ // No API key required -- free public API.
3
+ // Base URL: https://www.themealdb.com/api/json/v1/1/
4
+ const MEALDB_BASE = "https://www.themealdb.com/api/json/v1/1";
5
+ async function mealFetch(path) {
6
+ const res = await fetch(`${MEALDB_BASE}${path}`, {
7
+ headers: { "User-Agent": "UnClickMCP/1.0 (https://unclick.io)" },
8
+ });
9
+ if (!res.ok)
10
+ throw new Error(`TheMealDB HTTP ${res.status}`);
11
+ return res.json();
12
+ }
13
+ function extractIngredients(meal) {
14
+ const list = [];
15
+ for (let i = 1; i <= 20; i++) {
16
+ const ingredient = String(meal[`strIngredient${i}`] ?? "").trim();
17
+ const measure = String(meal[`strMeasure${i}`] ?? "").trim();
18
+ if (ingredient)
19
+ list.push({ ingredient, measure });
20
+ }
21
+ return list;
22
+ }
23
+ function normalizeMeal(meal) {
24
+ return {
25
+ id: meal.idMeal,
26
+ name: meal.strMeal,
27
+ category: meal.strCategory ?? null,
28
+ area: meal.strArea ?? null,
29
+ instructions: meal.strInstructions ?? null,
30
+ thumbnail: meal.strMealThumb ?? null,
31
+ tags: meal.strTags ? meal.strTags.split(",").map((t) => t.trim()).filter(Boolean) : [],
32
+ youtube: meal.strYoutube ?? null,
33
+ ingredients: extractIngredients(meal),
34
+ };
35
+ }
36
+ // ─── search_meals ─────────────────────────────────────────────────────────────
37
+ export async function searchMeals(args) {
38
+ const query = String(args.query ?? "").trim();
39
+ if (!query)
40
+ return { error: "query is required." };
41
+ const data = await mealFetch(`/search.php?s=${encodeURIComponent(query)}`);
42
+ if (!data.meals) {
43
+ return { query, count: 0, meals: [], message: `No meals found matching "${query}".` };
44
+ }
45
+ return {
46
+ query,
47
+ count: data.meals.length,
48
+ meals: data.meals.map(normalizeMeal),
49
+ };
50
+ }
51
+ // ─── get_random_meal ──────────────────────────────────────────────────────────
52
+ export async function getRandomMeal(_args) {
53
+ const data = await mealFetch("/random.php");
54
+ if (!data.meals?.[0])
55
+ return { error: "No meal returned." };
56
+ return {
57
+ meal: normalizeMeal(data.meals[0]),
58
+ };
59
+ }
60
+ // ─── get_meal_by_id ───────────────────────────────────────────────────────────
61
+ export async function getMealById(args) {
62
+ const id = String(args.id ?? "").trim();
63
+ if (!id)
64
+ return { error: "id is required (TheMealDB meal ID)." };
65
+ const data = await mealFetch(`/lookup.php?i=${encodeURIComponent(id)}`);
66
+ if (!data.meals?.[0])
67
+ return { error: `No meal found with id "${id}".` };
68
+ return { meal: normalizeMeal(data.meals[0]) };
69
+ }
70
+ // ─── list_meal_categories ─────────────────────────────────────────────────────
71
+ export async function listMealCategories(_args) {
72
+ const data = await mealFetch("/categories.php");
73
+ return {
74
+ count: data.categories.length,
75
+ categories: data.categories.map((c) => ({
76
+ id: c.idCategory,
77
+ name: c.strCategory,
78
+ description: c.strCategoryDescription,
79
+ thumbnail: c.strCategoryThumb,
80
+ })),
81
+ };
82
+ }
83
+ // ─── filter_meals_by_category ─────────────────────────────────────────────────
84
+ export async function filterMealsByCategory(args) {
85
+ const category = String(args.category ?? "").trim();
86
+ if (!category)
87
+ return { error: "category is required (e.g. Seafood, Dessert, Chicken)." };
88
+ const data = await mealFetch(`/filter.php?c=${encodeURIComponent(category)}`);
89
+ if (!data.meals) {
90
+ return { category, count: 0, meals: [], message: `No meals found for category "${category}".` };
91
+ }
92
+ return {
93
+ category,
94
+ count: data.meals.length,
95
+ meals: data.meals.map((m) => ({
96
+ id: m.idMeal,
97
+ name: m.strMeal,
98
+ thumbnail: m.strMealThumb ?? null,
99
+ })),
100
+ tip: "Use get_meal_by_id with any id above to get full recipe details.",
101
+ };
102
+ }
103
+ // ─── filter_meals_by_area ─────────────────────────────────────────────────────
104
+ export async function filterMealsByArea(args) {
105
+ const area = String(args.area ?? "").trim();
106
+ if (!area)
107
+ return { error: "area is required (e.g. Australian, British, Chinese, Italian, Mexican)." };
108
+ const data = await mealFetch(`/filter.php?a=${encodeURIComponent(area)}`);
109
+ if (!data.meals) {
110
+ return { area, count: 0, meals: [], message: `No meals found for area "${area}".` };
111
+ }
112
+ return {
113
+ area,
114
+ count: data.meals.length,
115
+ meals: data.meals.map((m) => ({
116
+ id: m.idMeal,
117
+ name: m.strMeal,
118
+ thumbnail: m.strMealThumb ?? null,
119
+ })),
120
+ tip: "Use get_meal_by_id with any id above to get full recipe details.",
121
+ };
122
+ }
123
+ // ─── filter_meals_by_ingredient ───────────────────────────────────────────────
124
+ export async function filterMealsByIngredient(args) {
125
+ const ingredient = String(args.ingredient ?? "").trim();
126
+ if (!ingredient)
127
+ return { error: "ingredient is required (e.g. chicken, garlic, tomato)." };
128
+ const data = await mealFetch(`/filter.php?i=${encodeURIComponent(ingredient)}`);
129
+ if (!data.meals) {
130
+ return { ingredient, count: 0, meals: [], message: `No meals found with ingredient "${ingredient}".` };
131
+ }
132
+ return {
133
+ ingredient,
134
+ count: data.meals.length,
135
+ meals: data.meals.map((m) => ({
136
+ id: m.idMeal,
137
+ name: m.strMeal,
138
+ thumbnail: m.strMealThumb ?? null,
139
+ })),
140
+ tip: "Use get_meal_by_id with any id above to get full recipe details.",
141
+ };
142
+ }
143
+ //# sourceMappingURL=meal-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meal-tool.js","sourceRoot":"","sources":["../src/meal-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function monicaAction(action: string, args: Record<string, unknown>): Promise<unknown>;
2
+ //# sourceMappingURL=monica-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monica-tool.d.ts","sourceRoot":"","sources":["../src/monica-tool.ts"],"names":[],"mappings":"AAyIA,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,IAAI,EAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,OAAO,CAAC,CAwBlB"}
@@ -0,0 +1,160 @@
1
+ // ── Monica CRM API tool ────────────────────────────────────────────────────────
2
+ // Wraps the Monica personal CRM REST API via fetch.
3
+ // Default base: https://app.monicahq.com/api (override via MONICA_BASE_URL env var).
4
+ // Auth: Bearer token (MONICA_API_KEY).
5
+ //
6
+ // Credentials are auto-resolved via vault-bridge:
7
+ // 1. Inline args (api_key passed directly)
8
+ // 2. Env var UNCLICK_MONICA_API_KEY
9
+ // 3. Local vault key "monica/api_key"
10
+ // 4. Supabase via UNCLICK_API_KEY + unclick.world/api/credentials
11
+ //
12
+ // No external dependencies.
13
+ import { resolveCredentials } from "./vault-bridge.js";
14
+ function monicaBase() {
15
+ return (process.env.MONICA_BASE_URL ?? "https://app.monicahq.com/api").replace(/\/$/, "");
16
+ }
17
+ // ── Shared fetch helper ────────────────────────────────────────────────────────
18
+ async function monicaFetch(token, method, path, query, body) {
19
+ const url = new URL(`${monicaBase()}${path}`);
20
+ if (query) {
21
+ for (const [k, v] of Object.entries(query)) {
22
+ if (v !== undefined && v !== "")
23
+ url.searchParams.set(k, String(v));
24
+ }
25
+ }
26
+ const headers = {
27
+ Authorization: `Bearer ${token}`,
28
+ Accept: "application/json",
29
+ };
30
+ if (body !== undefined)
31
+ headers["Content-Type"] = "application/json";
32
+ let response;
33
+ try {
34
+ response = await fetch(url.toString(), {
35
+ method,
36
+ headers,
37
+ body: body !== undefined ? JSON.stringify(body) : undefined,
38
+ });
39
+ }
40
+ catch (err) {
41
+ return { error: `Network error reaching Monica API: ${err instanceof Error ? err.message : String(err)}` };
42
+ }
43
+ if (response.status === 401)
44
+ return { error: "Monica API key is invalid. Check your MONICA_API_KEY.", status: 401 };
45
+ if (response.status === 404)
46
+ return { error: "Resource not found. Check the contact or note ID.", status: 404 };
47
+ if (response.status === 429)
48
+ return { error: "Monica rate limit exceeded. Please wait and retry.", status: 429 };
49
+ const text = await response.text();
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?.message ?? text;
59
+ return { error: `Monica API error ${response.status}: ${detail}`, status: response.status };
60
+ }
61
+ return data;
62
+ }
63
+ // ── Action implementations ─────────────────────────────────────────────────────
64
+ async function getContacts(token, args) {
65
+ return monicaFetch(token, "GET", "/contacts", {
66
+ page: args.page ? Number(args.page) : 1,
67
+ limit: args.limit ? Number(args.limit) : 30,
68
+ });
69
+ }
70
+ async function searchContacts(token, args) {
71
+ const query = String(args.query ?? "").trim();
72
+ if (!query)
73
+ return { error: "query is required." };
74
+ return monicaFetch(token, "GET", "/contacts", { query, page: 1 });
75
+ }
76
+ async function getContact(token, args) {
77
+ const id = String(args.contact_id ?? "").trim();
78
+ if (!id)
79
+ return { error: "contact_id is required." };
80
+ return monicaFetch(token, "GET", `/contacts/${encodeURIComponent(id)}`);
81
+ }
82
+ async function createContact(token, args) {
83
+ const first_name = String(args.first_name ?? "").trim();
84
+ if (!first_name)
85
+ return { error: "first_name is required." };
86
+ const body = { first_name };
87
+ if (args.last_name)
88
+ body.last_name = String(args.last_name);
89
+ if (args.nickname)
90
+ body.nickname = String(args.nickname);
91
+ if (args.gender_id)
92
+ body.gender_id = Number(args.gender_id);
93
+ if (args.birthdate_day)
94
+ body.birthdate_day = Number(args.birthdate_day);
95
+ if (args.birthdate_month)
96
+ body.birthdate_month = Number(args.birthdate_month);
97
+ if (args.birthdate_year)
98
+ body.birthdate_year = Number(args.birthdate_year);
99
+ if (args.is_partial !== undefined)
100
+ body.is_partial = Boolean(args.is_partial);
101
+ return monicaFetch(token, "POST", "/contacts", undefined, body);
102
+ }
103
+ async function getReminders(token, args) {
104
+ const id = String(args.contact_id ?? "").trim();
105
+ if (!id)
106
+ return { error: "contact_id is required." };
107
+ return monicaFetch(token, "GET", `/contacts/${encodeURIComponent(id)}/reminders`);
108
+ }
109
+ async function getActivities(token, args) {
110
+ const id = String(args.contact_id ?? "").trim();
111
+ if (!id)
112
+ return { error: "contact_id is required." };
113
+ return monicaFetch(token, "GET", `/contacts/${encodeURIComponent(id)}/activities`, {
114
+ page: args.page ? Number(args.page) : 1,
115
+ limit: args.limit ? Number(args.limit) : 20,
116
+ });
117
+ }
118
+ async function addNote(token, args) {
119
+ const contact_id = String(args.contact_id ?? "").trim();
120
+ const body_text = String(args.body ?? "").trim();
121
+ if (!contact_id)
122
+ return { error: "contact_id is required." };
123
+ if (!body_text)
124
+ return { error: "body is required." };
125
+ const payload = {
126
+ contact_id: Number(contact_id),
127
+ body: body_text,
128
+ };
129
+ if (args.is_favorited !== undefined)
130
+ payload.is_favorited = Boolean(args.is_favorited);
131
+ return monicaFetch(token, "POST", "/notes", undefined, payload);
132
+ }
133
+ // ── Public dispatcher ──────────────────────────────────────────────────────────
134
+ export async function monicaAction(action, args) {
135
+ const resolved = await resolveCredentials("monica", args);
136
+ if ("error" in resolved)
137
+ return resolved;
138
+ const token = String(resolved.api_key ?? "").trim();
139
+ if (!token)
140
+ return { error: "Monica api_key could not be resolved." };
141
+ try {
142
+ switch (action) {
143
+ case "get_contacts": return getContacts(token, args);
144
+ case "search_contacts": return searchContacts(token, args);
145
+ case "get_contact": return getContact(token, args);
146
+ case "create_contact": return createContact(token, args);
147
+ case "get_contact_reminders": return getReminders(token, args);
148
+ case "get_activities": return getActivities(token, args);
149
+ case "add_note": return addNote(token, args);
150
+ default:
151
+ return {
152
+ error: `Unknown Monica action: "${action}". Valid actions: get_contacts, search_contacts, get_contact, create_contact, get_contact_reminders, get_activities, add_note.`,
153
+ };
154
+ }
155
+ }
156
+ catch (err) {
157
+ return { error: err instanceof Error ? err.message : String(err) };
158
+ }
159
+ }
160
+ //# sourceMappingURL=monica-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monica-tool.js","sourceRoot":"","sources":["../src/monica-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function mbSearchArtists(args: Record<string, unknown>): Promise<unknown>;
2
+ export declare function mbSearchReleases(args: Record<string, unknown>): Promise<unknown>;
3
+ export declare function mbSearchRecordings(args: Record<string, unknown>): Promise<unknown>;
4
+ export declare function mbGetArtist(args: Record<string, unknown>): Promise<unknown>;
5
+ export declare function mbGetRelease(args: Record<string, unknown>): Promise<unknown>;
6
+ //# sourceMappingURL=musicbrainz-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"musicbrainz-tool.d.ts","sourceRoot":"","sources":["../src/musicbrainz-tool.ts"],"names":[],"mappings":"AAmCA,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAKrF;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAWtF;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAWxF;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAIjF;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAIlF"}
@@ -0,0 +1,65 @@
1
+ // MusicBrainz API integration for the UnClick MCP server.
2
+ // Uses the MusicBrainz REST API via fetch - no external dependencies.
3
+ // No auth required. Identifies with a User-Agent header as required by MusicBrainz policy.
4
+ const MB_BASE = "https://musicbrainz.org/ws/2";
5
+ const MB_USER_AGENT = "UnClick/1.0 (creativelead@malamutemayhem.com)";
6
+ // ─── API helper ───────────────────────────────────────────────────────────────
7
+ async function mbCall(path, params = {}) {
8
+ const url = new URL(`${MB_BASE}${path}`);
9
+ url.searchParams.set("fmt", "json");
10
+ for (const [k, v] of Object.entries(params)) {
11
+ if (v !== undefined && v !== "" && k !== "fmt") {
12
+ url.searchParams.set(k, String(v));
13
+ }
14
+ }
15
+ const response = await fetch(url.toString(), {
16
+ headers: { "User-Agent": MB_USER_AGENT },
17
+ });
18
+ if (!response.ok) {
19
+ throw new Error(`HTTP ${response.status} from MusicBrainz API`);
20
+ }
21
+ return response.json();
22
+ }
23
+ // ─── Tools ────────────────────────────────────────────────────────────────────
24
+ export async function mbSearchArtists(args) {
25
+ const query = String(args.query ?? "").trim();
26
+ if (!query)
27
+ throw new Error("query is required.");
28
+ const limit = args.limit !== undefined ? Number(args.limit) : undefined;
29
+ return mbCall("/artist", { query, limit });
30
+ }
31
+ export async function mbSearchReleases(args) {
32
+ const query = String(args.query ?? "").trim();
33
+ if (!query)
34
+ throw new Error("query is required.");
35
+ const limit = args.limit !== undefined ? Number(args.limit) : undefined;
36
+ let fullQuery = query;
37
+ if (args.artist) {
38
+ fullQuery = `${query} artist:${args.artist}`;
39
+ }
40
+ return mbCall("/release", { query: fullQuery, limit });
41
+ }
42
+ export async function mbSearchRecordings(args) {
43
+ const query = String(args.query ?? "").trim();
44
+ if (!query)
45
+ throw new Error("query is required.");
46
+ const limit = args.limit !== undefined ? Number(args.limit) : undefined;
47
+ let fullQuery = query;
48
+ if (args.artist) {
49
+ fullQuery = `${query} artist:${args.artist}`;
50
+ }
51
+ return mbCall("/recording", { query: fullQuery, limit });
52
+ }
53
+ export async function mbGetArtist(args) {
54
+ const mbid = String(args.mbid ?? "").trim();
55
+ if (!mbid)
56
+ throw new Error("mbid is required.");
57
+ return mbCall(`/artist/${mbid}`, { inc: "releases" });
58
+ }
59
+ export async function mbGetRelease(args) {
60
+ const mbid = String(args.mbid ?? "").trim();
61
+ if (!mbid)
62
+ throw new Error("mbid is required.");
63
+ return mbCall(`/release/${mbid}`, { inc: "recordings" });
64
+ }
65
+ //# sourceMappingURL=musicbrainz-tool.js.map