@beeper/desktop-mcp 4.2.3 → 4.7.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 (384) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +18 -199
  3. package/auth.d.mts +6 -0
  4. package/auth.d.mts.map +1 -0
  5. package/auth.d.ts +6 -0
  6. package/auth.d.ts.map +1 -0
  7. package/auth.js +37 -0
  8. package/auth.js.map +1 -0
  9. package/auth.mjs +32 -0
  10. package/auth.mjs.map +1 -0
  11. package/code-tool-types.d.mts +7 -7
  12. package/code-tool-types.d.mts.map +1 -1
  13. package/code-tool-types.d.ts +7 -7
  14. package/code-tool-types.d.ts.map +1 -1
  15. package/code-tool-worker.d.mts.map +1 -1
  16. package/code-tool-worker.d.ts.map +1 -1
  17. package/code-tool-worker.js +103 -19
  18. package/code-tool-worker.js.map +1 -1
  19. package/code-tool-worker.mjs +103 -19
  20. package/code-tool-worker.mjs.map +1 -1
  21. package/code-tool.d.mts +12 -3
  22. package/code-tool.d.mts.map +1 -1
  23. package/code-tool.d.ts +12 -3
  24. package/code-tool.d.ts.map +1 -1
  25. package/code-tool.js +276 -95
  26. package/code-tool.js.map +1 -1
  27. package/code-tool.mjs +273 -95
  28. package/code-tool.mjs.map +1 -1
  29. package/docs-search-tool.d.mts +22 -9
  30. package/docs-search-tool.d.mts.map +1 -1
  31. package/docs-search-tool.d.ts +22 -9
  32. package/docs-search-tool.d.ts.map +1 -1
  33. package/docs-search-tool.js +37 -6
  34. package/docs-search-tool.js.map +1 -1
  35. package/docs-search-tool.mjs +37 -6
  36. package/docs-search-tool.mjs.map +1 -1
  37. package/http.d.mts +6 -9
  38. package/http.d.mts.map +1 -1
  39. package/http.d.ts +6 -9
  40. package/http.d.ts.map +1 -1
  41. package/http.js +81 -47
  42. package/http.js.map +1 -1
  43. package/http.mjs +80 -43
  44. package/http.mjs.map +1 -1
  45. package/index.js +19 -50
  46. package/index.js.map +1 -1
  47. package/index.mjs +19 -50
  48. package/index.mjs.map +1 -1
  49. package/instructions.d.mts +2 -0
  50. package/instructions.d.mts.map +1 -0
  51. package/instructions.d.ts +2 -0
  52. package/instructions.d.ts.map +1 -0
  53. package/instructions.js +48 -0
  54. package/instructions.js.map +1 -0
  55. package/instructions.mjs +45 -0
  56. package/instructions.mjs.map +1 -0
  57. package/logger.d.mts +7 -0
  58. package/logger.d.mts.map +1 -0
  59. package/logger.d.ts +7 -0
  60. package/logger.d.ts.map +1 -0
  61. package/logger.js +29 -0
  62. package/logger.js.map +1 -0
  63. package/logger.mjs +22 -0
  64. package/logger.mjs.map +1 -0
  65. package/methods.d.mts +10 -0
  66. package/methods.d.mts.map +1 -0
  67. package/methods.d.ts +10 -0
  68. package/methods.d.ts.map +1 -0
  69. package/methods.js +203 -0
  70. package/methods.js.map +1 -0
  71. package/methods.mjs +199 -0
  72. package/methods.mjs.map +1 -0
  73. package/options.d.mts +9 -9
  74. package/options.d.mts.map +1 -1
  75. package/options.d.ts +9 -9
  76. package/options.d.ts.map +1 -1
  77. package/options.js +54 -359
  78. package/options.js.map +1 -1
  79. package/options.mjs +54 -359
  80. package/options.mjs.map +1 -1
  81. package/package.json +68 -72
  82. package/server.d.mts +10 -16
  83. package/server.d.mts.map +1 -1
  84. package/server.d.ts +10 -16
  85. package/server.d.ts.map +1 -1
  86. package/server.js +82 -101
  87. package/server.js.map +1 -1
  88. package/server.mjs +81 -96
  89. package/server.mjs.map +1 -1
  90. package/src/auth.ts +42 -0
  91. package/src/code-tool-types.ts +8 -5
  92. package/src/code-tool-worker.ts +118 -34
  93. package/src/code-tool.ts +359 -118
  94. package/src/docs-search-tool.ts +59 -7
  95. package/src/http.ts +99 -50
  96. package/src/index.ts +22 -63
  97. package/src/instructions.ts +67 -0
  98. package/src/logger.ts +28 -0
  99. package/src/methods.ts +224 -0
  100. package/src/options.ts +72 -384
  101. package/src/server.ts +94 -117
  102. package/src/stdio.ts +6 -5
  103. package/src/{tools/types.ts → types.ts} +25 -5
  104. package/src/util.ts +25 -0
  105. package/stdio.d.mts +1 -1
  106. package/stdio.d.mts.map +1 -1
  107. package/stdio.d.ts +1 -1
  108. package/stdio.d.ts.map +1 -1
  109. package/stdio.js +5 -4
  110. package/stdio.js.map +1 -1
  111. package/stdio.mjs +5 -4
  112. package/stdio.mjs.map +1 -1
  113. package/{tools/types.d.mts → types.d.mts} +10 -2
  114. package/types.d.mts.map +1 -0
  115. package/{tools/types.d.ts → types.d.ts} +10 -2
  116. package/types.d.ts.map +1 -0
  117. package/{tools/types.js → types.js} +12 -0
  118. package/types.js.map +1 -0
  119. package/{tools/types.mjs → types.mjs} +11 -0
  120. package/types.mjs.map +1 -0
  121. package/util.d.mts +4 -0
  122. package/util.d.mts.map +1 -0
  123. package/util.d.ts +4 -0
  124. package/util.d.ts.map +1 -0
  125. package/util.js +30 -0
  126. package/util.js.map +1 -0
  127. package/util.mjs +24 -0
  128. package/util.mjs.map +1 -0
  129. package/compat.d.mts +0 -58
  130. package/compat.d.mts.map +0 -1
  131. package/compat.d.ts +0 -58
  132. package/compat.d.ts.map +0 -1
  133. package/compat.js +0 -387
  134. package/compat.js.map +0 -1
  135. package/compat.mjs +0 -378
  136. package/compat.mjs.map +0 -1
  137. package/dynamic-tools.d.mts +0 -12
  138. package/dynamic-tools.d.mts.map +0 -1
  139. package/dynamic-tools.d.ts +0 -12
  140. package/dynamic-tools.d.ts.map +0 -1
  141. package/dynamic-tools.js +0 -135
  142. package/dynamic-tools.js.map +0 -1
  143. package/dynamic-tools.mjs +0 -132
  144. package/dynamic-tools.mjs.map +0 -1
  145. package/filtering.d.mts +0 -2
  146. package/filtering.d.mts.map +0 -1
  147. package/filtering.d.ts +0 -2
  148. package/filtering.d.ts.map +0 -1
  149. package/filtering.js +0 -20
  150. package/filtering.js.map +0 -1
  151. package/filtering.mjs +0 -13
  152. package/filtering.mjs.map +0 -1
  153. package/handlers/get-accounts.d.mts +0 -3
  154. package/handlers/get-accounts.d.mts.map +0 -1
  155. package/handlers/get-accounts.d.ts +0 -3
  156. package/handlers/get-accounts.d.ts.map +0 -1
  157. package/handlers/get-accounts.js +0 -32
  158. package/handlers/get-accounts.js.map +0 -1
  159. package/handlers/get-accounts.mjs +0 -28
  160. package/handlers/get-accounts.mjs.map +0 -1
  161. package/handlers/get-chat.d.mts +0 -3
  162. package/handlers/get-chat.d.mts.map +0 -1
  163. package/handlers/get-chat.d.ts +0 -3
  164. package/handlers/get-chat.d.ts.map +0 -1
  165. package/handlers/get-chat.js +0 -20
  166. package/handlers/get-chat.js.map +0 -1
  167. package/handlers/get-chat.mjs +0 -16
  168. package/handlers/get-chat.mjs.map +0 -1
  169. package/handlers/index.d.mts +0 -3
  170. package/handlers/index.d.mts.map +0 -1
  171. package/handlers/index.d.ts +0 -3
  172. package/handlers/index.d.ts.map +0 -1
  173. package/handlers/index.js +0 -30
  174. package/handlers/index.js.map +0 -1
  175. package/handlers/index.mjs +0 -27
  176. package/handlers/index.mjs.map +0 -1
  177. package/handlers/list-chats.d.mts +0 -3
  178. package/handlers/list-chats.d.mts.map +0 -1
  179. package/handlers/list-chats.d.ts +0 -3
  180. package/handlers/list-chats.d.ts.map +0 -1
  181. package/handlers/list-chats.js +0 -46
  182. package/handlers/list-chats.js.map +0 -1
  183. package/handlers/list-chats.mjs +0 -42
  184. package/handlers/list-chats.mjs.map +0 -1
  185. package/handlers/list-messages.d.mts +0 -3
  186. package/handlers/list-messages.d.mts.map +0 -1
  187. package/handlers/list-messages.d.ts +0 -3
  188. package/handlers/list-messages.d.ts.map +0 -1
  189. package/handlers/list-messages.js +0 -34
  190. package/handlers/list-messages.js.map +0 -1
  191. package/handlers/list-messages.mjs +0 -30
  192. package/handlers/list-messages.mjs.map +0 -1
  193. package/handlers/open-app.d.mts +0 -3
  194. package/handlers/open-app.d.mts.map +0 -1
  195. package/handlers/open-app.d.ts +0 -3
  196. package/handlers/open-app.d.ts.map +0 -1
  197. package/handlers/open-app.js +0 -26
  198. package/handlers/open-app.js.map +0 -1
  199. package/handlers/open-app.mjs +0 -22
  200. package/handlers/open-app.mjs.map +0 -1
  201. package/handlers/search-chats.d.mts +0 -3
  202. package/handlers/search-chats.d.mts.map +0 -1
  203. package/handlers/search-chats.d.ts +0 -3
  204. package/handlers/search-chats.d.ts.map +0 -1
  205. package/handlers/search-chats.js +0 -38
  206. package/handlers/search-chats.js.map +0 -1
  207. package/handlers/search-chats.mjs +0 -34
  208. package/handlers/search-chats.mjs.map +0 -1
  209. package/handlers/search-messages.d.mts +0 -3
  210. package/handlers/search-messages.d.mts.map +0 -1
  211. package/handlers/search-messages.d.ts +0 -3
  212. package/handlers/search-messages.d.ts.map +0 -1
  213. package/handlers/search-messages.js +0 -11
  214. package/handlers/search-messages.js.map +0 -1
  215. package/handlers/search-messages.mjs +0 -7
  216. package/handlers/search-messages.mjs.map +0 -1
  217. package/handlers/search.d.mts +0 -3
  218. package/handlers/search.d.mts.map +0 -1
  219. package/handlers/search.d.ts +0 -3
  220. package/handlers/search.d.ts.map +0 -1
  221. package/handlers/search.js +0 -29
  222. package/handlers/search.js.map +0 -1
  223. package/handlers/search.mjs +0 -25
  224. package/handlers/search.mjs.map +0 -1
  225. package/handlers/send-message.d.mts +0 -3
  226. package/handlers/send-message.d.mts.map +0 -1
  227. package/handlers/send-message.d.ts +0 -3
  228. package/handlers/send-message.d.ts.map +0 -1
  229. package/handlers/send-message.js +0 -20
  230. package/handlers/send-message.js.map +0 -1
  231. package/handlers/send-message.mjs +0 -16
  232. package/handlers/send-message.mjs.map +0 -1
  233. package/handlers/utils.d.mts +0 -29
  234. package/handlers/utils.d.mts.map +0 -1
  235. package/handlers/utils.d.ts +0 -29
  236. package/handlers/utils.d.ts.map +0 -1
  237. package/handlers/utils.js +0 -296
  238. package/handlers/utils.js.map +0 -1
  239. package/handlers/utils.mjs +0 -282
  240. package/handlers/utils.mjs.map +0 -1
  241. package/headers.d.mts +0 -4
  242. package/headers.d.mts.map +0 -1
  243. package/headers.d.ts +0 -4
  244. package/headers.d.ts.map +0 -1
  245. package/headers.js +0 -22
  246. package/headers.js.map +0 -1
  247. package/headers.mjs +0 -18
  248. package/headers.mjs.map +0 -1
  249. package/src/compat.ts +0 -483
  250. package/src/dynamic-tools.ts +0 -159
  251. package/src/filtering.ts +0 -14
  252. package/src/handlers/get-accounts.ts +0 -28
  253. package/src/handlers/get-chat.ts +0 -18
  254. package/src/handlers/index.ts +0 -29
  255. package/src/handlers/list-chats.ts +0 -47
  256. package/src/handlers/list-messages.ts +0 -33
  257. package/src/handlers/open-app.ts +0 -20
  258. package/src/handlers/search-chats.ts +0 -39
  259. package/src/handlers/search-messages.ts +0 -8
  260. package/src/handlers/search.ts +0 -24
  261. package/src/handlers/send-message.ts +0 -17
  262. package/src/handlers/utils.ts +0 -381
  263. package/src/headers.ts +0 -23
  264. package/src/tools/accounts/get-accounts.ts +0 -34
  265. package/src/tools/chats/archive-chat.ts +0 -43
  266. package/src/tools/chats/get-chat.ts +0 -45
  267. package/src/tools/chats/reminders/clear-chat-reminder.ts +0 -41
  268. package/src/tools/chats/reminders/set-chat-reminder.ts +0 -54
  269. package/src/tools/chats/search-chats.ts +0 -104
  270. package/src/tools/index.ts +0 -92
  271. package/src/tools/messages/list-messages.ts +0 -51
  272. package/src/tools/messages/search-messages.ts +0 -123
  273. package/src/tools/messages/send-message.ts +0 -47
  274. package/src/tools/top-level/focus-app.ts +0 -52
  275. package/src/tools/top-level/search.ts +0 -41
  276. package/src/tools.ts +0 -1
  277. package/tools/accounts/get-accounts.d.mts +0 -45
  278. package/tools/accounts/get-accounts.d.mts.map +0 -1
  279. package/tools/accounts/get-accounts.d.ts +0 -45
  280. package/tools/accounts/get-accounts.d.ts.map +0 -1
  281. package/tools/accounts/get-accounts.js +0 -31
  282. package/tools/accounts/get-accounts.js.map +0 -1
  283. package/tools/accounts/get-accounts.mjs +0 -27
  284. package/tools/accounts/get-accounts.mjs.map +0 -1
  285. package/tools/chats/archive-chat.d.mts +0 -45
  286. package/tools/chats/archive-chat.d.mts.map +0 -1
  287. package/tools/chats/archive-chat.d.ts +0 -45
  288. package/tools/chats/archive-chat.d.ts.map +0 -1
  289. package/tools/chats/archive-chat.js +0 -40
  290. package/tools/chats/archive-chat.js.map +0 -1
  291. package/tools/chats/archive-chat.mjs +0 -36
  292. package/tools/chats/archive-chat.mjs.map +0 -1
  293. package/tools/chats/get-chat.d.mts +0 -45
  294. package/tools/chats/get-chat.d.mts.map +0 -1
  295. package/tools/chats/get-chat.d.ts +0 -45
  296. package/tools/chats/get-chat.d.ts.map +0 -1
  297. package/tools/chats/get-chat.js +0 -41
  298. package/tools/chats/get-chat.js.map +0 -1
  299. package/tools/chats/get-chat.mjs +0 -37
  300. package/tools/chats/get-chat.mjs.map +0 -1
  301. package/tools/chats/reminders/clear-chat-reminder.d.mts +0 -45
  302. package/tools/chats/reminders/clear-chat-reminder.d.mts.map +0 -1
  303. package/tools/chats/reminders/clear-chat-reminder.d.ts +0 -45
  304. package/tools/chats/reminders/clear-chat-reminder.d.ts.map +0 -1
  305. package/tools/chats/reminders/clear-chat-reminder.js +0 -38
  306. package/tools/chats/reminders/clear-chat-reminder.js.map +0 -1
  307. package/tools/chats/reminders/clear-chat-reminder.mjs +0 -34
  308. package/tools/chats/reminders/clear-chat-reminder.mjs.map +0 -1
  309. package/tools/chats/reminders/set-chat-reminder.d.mts +0 -45
  310. package/tools/chats/reminders/set-chat-reminder.d.mts.map +0 -1
  311. package/tools/chats/reminders/set-chat-reminder.d.ts +0 -45
  312. package/tools/chats/reminders/set-chat-reminder.d.ts.map +0 -1
  313. package/tools/chats/reminders/set-chat-reminder.js +0 -51
  314. package/tools/chats/reminders/set-chat-reminder.js.map +0 -1
  315. package/tools/chats/reminders/set-chat-reminder.mjs +0 -47
  316. package/tools/chats/reminders/set-chat-reminder.mjs.map +0 -1
  317. package/tools/chats/search-chats.d.mts +0 -45
  318. package/tools/chats/search-chats.d.mts.map +0 -1
  319. package/tools/chats/search-chats.d.ts +0 -45
  320. package/tools/chats/search-chats.d.ts.map +0 -1
  321. package/tools/chats/search-chats.js +0 -92
  322. package/tools/chats/search-chats.js.map +0 -1
  323. package/tools/chats/search-chats.mjs +0 -88
  324. package/tools/chats/search-chats.mjs.map +0 -1
  325. package/tools/index.d.mts +0 -10
  326. package/tools/index.d.mts.map +0 -1
  327. package/tools/index.d.ts +0 -10
  328. package/tools/index.d.ts.map +0 -1
  329. package/tools/index.js +0 -76
  330. package/tools/index.js.map +0 -1
  331. package/tools/index.mjs +0 -69
  332. package/tools/index.mjs.map +0 -1
  333. package/tools/messages/list-messages.d.mts +0 -45
  334. package/tools/messages/list-messages.d.mts.map +0 -1
  335. package/tools/messages/list-messages.d.ts +0 -45
  336. package/tools/messages/list-messages.d.ts.map +0 -1
  337. package/tools/messages/list-messages.js +0 -47
  338. package/tools/messages/list-messages.js.map +0 -1
  339. package/tools/messages/list-messages.mjs +0 -43
  340. package/tools/messages/list-messages.mjs.map +0 -1
  341. package/tools/messages/search-messages.d.mts +0 -45
  342. package/tools/messages/search-messages.d.mts.map +0 -1
  343. package/tools/messages/search-messages.d.ts +0 -45
  344. package/tools/messages/search-messages.d.ts.map +0 -1
  345. package/tools/messages/search-messages.js +0 -110
  346. package/tools/messages/search-messages.js.map +0 -1
  347. package/tools/messages/search-messages.mjs +0 -106
  348. package/tools/messages/search-messages.mjs.map +0 -1
  349. package/tools/messages/send-message.d.mts +0 -45
  350. package/tools/messages/send-message.d.mts.map +0 -1
  351. package/tools/messages/send-message.d.ts +0 -45
  352. package/tools/messages/send-message.d.ts.map +0 -1
  353. package/tools/messages/send-message.js +0 -43
  354. package/tools/messages/send-message.js.map +0 -1
  355. package/tools/messages/send-message.mjs +0 -39
  356. package/tools/messages/send-message.mjs.map +0 -1
  357. package/tools/top-level/focus-app.d.mts +0 -45
  358. package/tools/top-level/focus-app.d.mts.map +0 -1
  359. package/tools/top-level/focus-app.d.ts +0 -45
  360. package/tools/top-level/focus-app.d.ts.map +0 -1
  361. package/tools/top-level/focus-app.js +0 -47
  362. package/tools/top-level/focus-app.js.map +0 -1
  363. package/tools/top-level/focus-app.mjs +0 -43
  364. package/tools/top-level/focus-app.mjs.map +0 -1
  365. package/tools/top-level/search.d.mts +0 -45
  366. package/tools/top-level/search.d.mts.map +0 -1
  367. package/tools/top-level/search.d.ts +0 -45
  368. package/tools/top-level/search.d.ts.map +0 -1
  369. package/tools/top-level/search.js +0 -37
  370. package/tools/top-level/search.js.map +0 -1
  371. package/tools/top-level/search.mjs +0 -33
  372. package/tools/top-level/search.mjs.map +0 -1
  373. package/tools/types.d.mts.map +0 -1
  374. package/tools/types.d.ts.map +0 -1
  375. package/tools/types.js.map +0 -1
  376. package/tools/types.mjs.map +0 -1
  377. package/tools.d.mts +0 -2
  378. package/tools.d.mts.map +0 -1
  379. package/tools.d.ts +0 -2
  380. package/tools.d.ts.map +0 -1
  381. package/tools.js +0 -18
  382. package/tools.js.map +0 -1
  383. package/tools.mjs +0 -2
  384. package/tools.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"docs-search-tool.js","sourceRoot":"","sources":["src/docs-search-tool.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;AAEtF,4CAA8D;AAIjD,QAAA,QAAQ,GAAa;IAChC,QAAQ,EAAE,KAAK;IACf,SAAS,EAAE,MAAM;IACjB,IAAI,EAAE,EAAE;IACR,UAAU,EAAE,KAAK;CAClB,CAAC;AAEW,QAAA,IAAI,GAAS;IACxB,IAAI,EAAE,aAAa;IACnB,WAAW,EACT,wJAAwJ;IAC1J,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0BAA0B;aACxC;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yCAAyC;gBACtD,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC;aACpF;SACF;QACD,QAAQ,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;KAChC;IACD,WAAW,EAAE;QACX,YAAY,EAAE,IAAI;KACnB;CACF,CAAC;AAEF,MAAM,aAAa,GACjB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,uEAAuE,CAAC;AAErG,MAAM,OAAO,GAAG,KAAK,EAAE,CAAU,EAAE,IAAyC,EAAE,EAAE;IACrF,MAAM,IAAI,GAAG,IAAW,CAAC;IACzB,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;IACnD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,aAAa,IAAI,KAAK,EAAE,CAAC,CAAC;IACxD,OAAO,IAAA,2BAAmB,EAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC,CAAC;AALW,QAAA,OAAO,WAKlB;AAEF,kBAAe,EAAE,QAAQ,EAAR,gBAAQ,EAAE,IAAI,EAAJ,YAAI,EAAE,OAAO,EAAP,eAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"docs-search-tool.js","sourceRoot":"","sources":["src/docs-search-tool.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
- import { asTextContentResult } from "./tools/types.mjs";
2
+ import { asTextContentResult } from "./types.mjs";
3
+ import { getLogger } from "./logger.mjs";
3
4
  export const metadata = {
4
5
  resource: 'all',
5
6
  operation: 'read',
@@ -8,7 +9,7 @@ export const metadata = {
8
9
  };
9
10
  export const tool = {
10
11
  name: 'search_docs',
11
- description: 'Search for documentation for how to use the client to interact with the API.\nThe tool will return an array of Markdown-formatted documentation pages.',
12
+ description: 'Search SDK documentation to find methods, parameters, and usage examples for interacting with the API. Use this before writing code when you need to discover the right approach.',
12
13
  inputSchema: {
13
14
  type: 'object',
14
15
  properties: {
@@ -19,7 +20,12 @@ export const tool = {
19
20
  language: {
20
21
  type: 'string',
21
22
  description: 'The language for the SDK to search for.',
22
- enum: ['http', 'python', 'go', 'typescript', 'terraform', 'ruby', 'java', 'kotlin'],
23
+ enum: ['http', 'python', 'go', 'typescript', 'javascript', 'terraform', 'ruby', 'java', 'kotlin'],
24
+ },
25
+ detail: {
26
+ type: 'string',
27
+ description: 'The amount of detail to return.',
28
+ enum: ['default', 'verbose'],
23
29
  },
24
30
  },
25
31
  required: ['query', 'language'],
@@ -29,11 +35,36 @@ export const tool = {
29
35
  },
30
36
  };
31
37
  const docsSearchURL = process.env['DOCS_SEARCH_URL'] || 'https://api.stainless.com/api/projects/beeper-desktop-api/docs/search';
32
- export const handler = async (_, args) => {
38
+ export const handler = async ({ reqContext, args, }) => {
33
39
  const body = args;
34
40
  const query = new URLSearchParams(body).toString();
35
- const result = await fetch(`${docsSearchURL}?${query}`);
36
- return asTextContentResult(await result.json());
41
+ const startTime = Date.now();
42
+ const result = await fetch(`${docsSearchURL}?${query}`, {
43
+ headers: {
44
+ ...(reqContext.stainlessApiKey && { Authorization: reqContext.stainlessApiKey }),
45
+ },
46
+ });
47
+ const logger = getLogger();
48
+ if (!result.ok) {
49
+ const errorText = await result.text();
50
+ logger.warn({
51
+ durationMs: Date.now() - startTime,
52
+ query: body.query,
53
+ status: result.status,
54
+ statusText: result.statusText,
55
+ errorText,
56
+ }, 'Got error response from docs search tool');
57
+ if (result.status === 404 && !reqContext.stainlessApiKey) {
58
+ throw new Error('Could not find docs for this project. You may need to provide a Stainless API key via the STAINLESS_API_KEY environment variable, the --stainless-api-key flag, or the x-stainless-api-key HTTP header.');
59
+ }
60
+ throw new Error(`${result.status}: ${result.statusText} when using doc search tool. Details: ${errorText}`);
61
+ }
62
+ const resultBody = await result.json();
63
+ logger.info({
64
+ durationMs: Date.now() - startTime,
65
+ query: body.query,
66
+ }, 'Got docs search result');
67
+ return asTextContentResult(resultBody);
37
68
  };
38
69
  export default { metadata, tool, handler };
39
70
  //# sourceMappingURL=docs-search-tool.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"docs-search-tool.mjs","sourceRoot":"","sources":["src/docs-search-tool.ts"],"names":[],"mappings":"AAAA,sFAAsF;OAE/E,EAAY,mBAAmB,EAAE;AAIxC,MAAM,CAAC,MAAM,QAAQ,GAAa;IAChC,QAAQ,EAAE,KAAK;IACf,SAAS,EAAE,MAAM;IACjB,IAAI,EAAE,EAAE;IACR,UAAU,EAAE,KAAK;CAClB,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAS;IACxB,IAAI,EAAE,aAAa;IACnB,WAAW,EACT,wJAAwJ;IAC1J,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0BAA0B;aACxC;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yCAAyC;gBACtD,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC;aACpF;SACF;QACD,QAAQ,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;KAChC;IACD,WAAW,EAAE;QACX,YAAY,EAAE,IAAI;KACnB;CACF,CAAC;AAEF,MAAM,aAAa,GACjB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,uEAAuE,CAAC;AAE5G,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAAE,CAAU,EAAE,IAAyC,EAAE,EAAE;IACrF,MAAM,IAAI,GAAG,IAAW,CAAC;IACzB,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;IACnD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,aAAa,IAAI,KAAK,EAAE,CAAC,CAAC;IACxD,OAAO,mBAAmB,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC,CAAC;AAEF,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"docs-search-tool.mjs","sourceRoot":"","sources":["src/docs-search-tool.ts"],"names":[],"mappings":"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"}
package/http.d.mts CHANGED
@@ -1,15 +1,12 @@
1
+ import { ClientOptions } from '@beeper/desktop-api';
1
2
  import express from 'express';
2
3
  import { McpOptions } from "./options.mjs";
3
- import { ClientOptions } from "./server.mjs";
4
- export declare const post: (options: {
5
- clientOptions: ClientOptions;
6
- mcpOptions: McpOptions;
7
- }) => (req: express.Request, res: express.Response) => Promise<void>;
8
- export declare const get: (req: express.Request, res: express.Response) => Promise<void>;
9
- export declare const del: (req: express.Request, res: express.Response) => Promise<void>;
10
4
  export declare const streamableHTTPApp: ({ clientOptions, mcpOptions, }: {
11
5
  clientOptions?: ClientOptions;
12
- mcpOptions?: McpOptions;
6
+ mcpOptions: McpOptions;
13
7
  }) => express.Express;
14
- export declare const launchStreamableHTTPServer: (options: McpOptions, port: number | string | undefined) => Promise<void>;
8
+ export declare const launchStreamableHTTPServer: ({ mcpOptions, port, }: {
9
+ mcpOptions: McpOptions;
10
+ port: number | string | undefined;
11
+ }) => Promise<void>;
15
12
  //# sourceMappingURL=http.d.mts.map
package/http.d.mts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.mts","sourceRoot":"","sources":["src/http.ts"],"names":[],"mappings":"OAMO,OAAO,MAAM,SAAS;OAEtB,EAAE,UAAU,EAAqB;OACjC,EAAE,aAAa,EAA+B;AAgErD,eAAO,MAAM,IAAI,GACd,SAAS;IAAE,aAAa,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,MAC3D,KAAK,OAAO,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,QAAQ,kBAUjD,CAAC;AAEJ,eAAO,MAAM,GAAG,GAAU,KAAK,OAAO,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,QAAQ,kBAQpE,CAAC;AAEF,eAAO,MAAM,GAAG,GAAU,KAAK,OAAO,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,QAAQ,kBAQpE,CAAC;AAYF,eAAO,MAAM,iBAAiB,GAAI,gCAG/B;IACD,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,KAAG,OAAO,CAAC,OAWX,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAU,SAAS,UAAU,EAAE,MAAM,MAAM,GAAG,MAAM,GAAG,SAAS,kBAYtG,CAAC"}
1
+ {"version":3,"file":"http.d.mts","sourceRoot":"","sources":["src/http.ts"],"names":[],"mappings":"OAIO,EAAE,aAAa,EAAE,MAAM,qBAAqB;OAE5C,OAAO,MAAM,SAAS;OAKtB,EAAE,UAAU,EAAE;AA8GrB,eAAO,MAAM,iBAAiB,GAAI,gCAG/B;IACD,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,EAAE,UAAU,CAAC;CACxB,KAAG,OAAO,CAAC,OAgDX,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAU,uBAG9C;IACD,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC,kBAcA,CAAC"}
package/http.d.ts CHANGED
@@ -1,15 +1,12 @@
1
+ import { ClientOptions } from '@beeper/desktop-api';
1
2
  import express from 'express';
2
3
  import { McpOptions } from "./options.js";
3
- import { ClientOptions } from "./server.js";
4
- export declare const post: (options: {
5
- clientOptions: ClientOptions;
6
- mcpOptions: McpOptions;
7
- }) => (req: express.Request, res: express.Response) => Promise<void>;
8
- export declare const get: (req: express.Request, res: express.Response) => Promise<void>;
9
- export declare const del: (req: express.Request, res: express.Response) => Promise<void>;
10
4
  export declare const streamableHTTPApp: ({ clientOptions, mcpOptions, }: {
11
5
  clientOptions?: ClientOptions;
12
- mcpOptions?: McpOptions;
6
+ mcpOptions: McpOptions;
13
7
  }) => express.Express;
14
- export declare const launchStreamableHTTPServer: (options: McpOptions, port: number | string | undefined) => Promise<void>;
8
+ export declare const launchStreamableHTTPServer: ({ mcpOptions, port, }: {
9
+ mcpOptions: McpOptions;
10
+ port: number | string | undefined;
11
+ }) => Promise<void>;
15
12
  //# sourceMappingURL=http.d.ts.map
package/http.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["src/http.ts"],"names":[],"mappings":"OAMO,OAAO,MAAM,SAAS;OAEtB,EAAE,UAAU,EAAqB;OACjC,EAAE,aAAa,EAA+B;AAgErD,eAAO,MAAM,IAAI,GACd,SAAS;IAAE,aAAa,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,MAC3D,KAAK,OAAO,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,QAAQ,kBAUjD,CAAC;AAEJ,eAAO,MAAM,GAAG,GAAU,KAAK,OAAO,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,QAAQ,kBAQpE,CAAC;AAEF,eAAO,MAAM,GAAG,GAAU,KAAK,OAAO,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,QAAQ,kBAQpE,CAAC;AAYF,eAAO,MAAM,iBAAiB,GAAI,gCAG/B;IACD,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,KAAG,OAAO,CAAC,OAWX,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAU,SAAS,UAAU,EAAE,MAAM,MAAM,GAAG,MAAM,GAAG,SAAS,kBAYtG,CAAC"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["src/http.ts"],"names":[],"mappings":"OAIO,EAAE,aAAa,EAAE,MAAM,qBAAqB;OAE5C,OAAO,MAAM,SAAS;OAKtB,EAAE,UAAU,EAAE;AA8GrB,eAAO,MAAM,iBAAiB,GAAI,gCAG/B;IACD,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,EAAE,UAAU,CAAC;CACxB,KAAG,OAAO,CAAC,OAgDX,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAU,uBAG9C;IACD,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC,kBAcA,CAAC"}
package/http.js CHANGED
@@ -4,72 +4,62 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  return (mod && mod.__esModule) ? mod : { "default": mod };
5
5
  };
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.launchStreamableHTTPServer = exports.streamableHTTPApp = exports.del = exports.get = exports.post = void 0;
7
+ exports.launchStreamableHTTPServer = exports.streamableHTTPApp = void 0;
8
8
  const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamableHttp.js");
9
9
  const cors_1 = __importDefault(require("cors"));
10
10
  const express_1 = __importDefault(require("express"));
11
- const v3_1 = require("zod-validation-error/v3");
12
- const options_1 = require("./options.js");
11
+ const pino_1 = __importDefault(require("pino"));
12
+ const pino_http_1 = __importDefault(require("pino-http"));
13
+ const auth_1 = require("./auth.js");
14
+ const logger_1 = require("./logger.js");
13
15
  const server_1 = require("./server.js");
14
- const headers_1 = require("./headers.js");
15
16
  const oauthResourceIdentifier = (req) => {
16
17
  const protocol = req.headers['x-forwarded-proto'] ?? req.protocol;
17
18
  return `${protocol}://${req.get('host')}/`;
18
19
  };
19
- const newServer = ({ clientOptions, mcpOptions: defaultMcpOptions, req, res, }) => {
20
- const server = (0, server_1.newMcpServer)();
21
- let mcpOptions;
20
+ const newServer = async ({ clientOptions, mcpOptions, req, res, }) => {
21
+ const stainlessApiKey = (0, auth_1.getStainlessApiKey)(req, mcpOptions);
22
+ const server = await (0, server_1.newMcpServer)(stainlessApiKey);
23
+ // parseClientAuthHeaders throws if the Authorization header uses an unsupported
24
+ // scheme, or (when the second arg is true) if the header is missing entirely.
25
+ // On error, we return 401 with WWW-Authenticate pointing to the OAuth metadata
26
+ // endpoint so clients know how to authenticate (RFC 9728).
27
+ let authOptions;
22
28
  try {
23
- mcpOptions = (0, options_1.parseQueryOptions)(defaultMcpOptions, req.query);
29
+ authOptions = (0, auth_1.parseClientAuthHeaders)(req, false);
24
30
  }
25
31
  catch (error) {
26
- res.status(400).json({
27
- jsonrpc: '2.0',
28
- error: {
29
- code: -32000,
30
- message: `Invalid request: ${(0, v3_1.fromError)(error)}`,
31
- },
32
- });
33
- return null;
34
- }
35
- try {
36
- const authOptions = (0, headers_1.parseAuthHeaders)(req);
37
- (0, server_1.initMcpServer)({
38
- server: server,
39
- clientOptions: {
40
- ...clientOptions,
41
- ...authOptions,
42
- },
43
- mcpOptions,
44
- });
45
- }
46
- catch {
47
32
  const resourceIdentifier = oauthResourceIdentifier(req);
48
33
  res.set('WWW-Authenticate', `Bearer resource_metadata="${resourceIdentifier}.well-known/oauth-protected-resource"`);
49
34
  res.status(401).json({
50
35
  jsonrpc: '2.0',
51
36
  error: {
52
37
  code: -32000,
53
- message: 'Unauthorized',
38
+ message: `Unauthorized: ${error instanceof Error ? error.message : error}`,
54
39
  },
55
40
  });
56
41
  return null;
57
42
  }
43
+ await (0, server_1.initMcpServer)({
44
+ server: server,
45
+ mcpOptions: mcpOptions,
46
+ clientOptions: {
47
+ ...clientOptions,
48
+ ...authOptions,
49
+ },
50
+ stainlessApiKey: stainlessApiKey,
51
+ });
58
52
  return server;
59
53
  };
60
54
  const post = (options) => async (req, res) => {
61
- const server = newServer({ ...options, req, res });
55
+ const server = await newServer({ ...options, req, res });
62
56
  // If we return null, we already set the authorization error.
63
57
  if (server === null)
64
58
  return;
65
- const transport = new streamableHttp_js_1.StreamableHTTPServerTransport({
66
- // Stateless server
67
- sessionIdGenerator: undefined,
68
- });
59
+ const transport = new streamableHttp_js_1.StreamableHTTPServerTransport();
69
60
  await server.connect(transport);
70
61
  await transport.handleRequest(req, res, req.body);
71
62
  };
72
- exports.post = post;
73
63
  const get = async (req, res) => {
74
64
  res.status(405).json({
75
65
  jsonrpc: '2.0',
@@ -79,7 +69,6 @@ const get = async (req, res) => {
79
69
  },
80
70
  });
81
71
  };
82
- exports.get = get;
83
72
  const del = async (req, res) => {
84
73
  res.status(405).json({
85
74
  jsonrpc: '2.0',
@@ -89,7 +78,6 @@ const del = async (req, res) => {
89
78
  },
90
79
  });
91
80
  };
92
- exports.del = del;
93
81
  const oauthMetadata = (req, res) => {
94
82
  const resourceIdentifier = oauthResourceIdentifier(req);
95
83
  res.json({
@@ -99,29 +87,75 @@ const oauthMetadata = (req, res) => {
99
87
  scopes_supported: 'read write',
100
88
  });
101
89
  };
102
- const streamableHTTPApp = ({ clientOptions = {}, mcpOptions = {}, }) => {
90
+ const redactHeaders = (headers) => {
91
+ const hiddenHeaders = /auth|cookie|key|token/i;
92
+ const filtered = { ...headers };
93
+ Object.keys(filtered).forEach((key) => {
94
+ if (hiddenHeaders.test(key)) {
95
+ filtered[key] = '[REDACTED]';
96
+ }
97
+ });
98
+ return filtered;
99
+ };
100
+ const streamableHTTPApp = ({ clientOptions = {}, mcpOptions, }) => {
103
101
  const app = (0, express_1.default)();
104
102
  app.set('query parser', 'extended');
105
103
  app.use(express_1.default.json());
104
+ app.use((0, pino_http_1.default)({
105
+ logger: (0, logger_1.getLogger)(),
106
+ customLogLevel: (req, res) => {
107
+ if (res.statusCode >= 500) {
108
+ return 'error';
109
+ }
110
+ else if (res.statusCode >= 400) {
111
+ return 'warn';
112
+ }
113
+ return 'info';
114
+ },
115
+ customSuccessMessage: function (req, res) {
116
+ return `Request ${req.method} to ${req.url} completed with status ${res.statusCode}`;
117
+ },
118
+ customErrorMessage: function (req, res, err) {
119
+ return `Request ${req.method} to ${req.url} errored with status ${res.statusCode}`;
120
+ },
121
+ serializers: {
122
+ req: pino_1.default.stdSerializers.wrapRequestSerializer((req) => {
123
+ return {
124
+ ...req,
125
+ headers: redactHeaders(req.raw.headers),
126
+ };
127
+ }),
128
+ res: pino_1.default.stdSerializers.wrapResponseSerializer((res) => {
129
+ return {
130
+ ...res,
131
+ headers: redactHeaders(res.headers),
132
+ };
133
+ }),
134
+ },
135
+ }));
106
136
  app.get('/.well-known/oauth-protected-resource', (0, cors_1.default)(), oauthMetadata);
107
- app.get('/', exports.get);
108
- app.post('/', (0, exports.post)({ clientOptions, mcpOptions }));
109
- app.delete('/', exports.del);
137
+ app.get('/health', async (req, res) => {
138
+ res.status(200).send('OK');
139
+ });
140
+ app.get('/', get);
141
+ app.post('/', post({ clientOptions, mcpOptions }));
142
+ app.delete('/', del);
110
143
  return app;
111
144
  };
112
145
  exports.streamableHTTPApp = streamableHTTPApp;
113
- const launchStreamableHTTPServer = async (options, port) => {
114
- const app = (0, exports.streamableHTTPApp)({ mcpOptions: options });
146
+ const launchStreamableHTTPServer = async ({ mcpOptions, port, }) => {
147
+ const app = (0, exports.streamableHTTPApp)({ mcpOptions });
115
148
  const server = app.listen(port);
116
149
  const address = server.address();
150
+ const logger = (0, logger_1.getLogger)();
117
151
  if (typeof address === 'string') {
118
- console.error(`MCP Server running on streamable HTTP at ${address}`);
152
+ logger.info(`MCP Server running on streamable HTTP at ${address}`);
119
153
  }
120
154
  else if (address !== null) {
121
- console.error(`MCP Server running on streamable HTTP on port ${address.port}`);
155
+ logger.info(`MCP Server running on streamable HTTP on port ${address.port}`);
122
156
  }
123
157
  else {
124
- console.error(`MCP Server running on streamable HTTP on port ${port}`);
158
+ logger.info(`MCP Server running on streamable HTTP on port ${port}`);
125
159
  }
126
160
  };
127
161
  exports.launchStreamableHTTPServer = launchStreamableHTTPServer;
package/http.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["src/http.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;;;;AAGtF,0FAAmG;AAEnG,gDAAwB;AACxB,sDAA8B;AAC9B,gDAAoD;AACpD,0CAA0D;AAC1D,wCAAsE;AACtE,0CAA6C;AAE7C,MAAM,uBAAuB,GAAG,CAAC,GAAoB,EAAU,EAAE;IAC/D,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC;IAClE,OAAO,GAAG,QAAQ,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;AAC7C,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,EACjB,aAAa,EACb,UAAU,EAAE,iBAAiB,EAC7B,GAAG,EACH,GAAG,GAMJ,EAAoB,EAAE;IACrB,MAAM,MAAM,GAAG,IAAA,qBAAY,GAAE,CAAC;IAE9B,IAAI,UAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,UAAU,GAAG,IAAA,2BAAiB,EAAC,iBAAiB,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE;gBACL,IAAI,EAAE,CAAC,KAAK;gBACZ,OAAO,EAAE,oBAAoB,IAAA,cAAS,EAAC,KAAK,CAAC,EAAE;aAChD;SACF,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAA,0BAAgB,EAAC,GAAG,CAAC,CAAC;QAC1C,IAAA,sBAAa,EAAC;YACZ,MAAM,EAAE,MAAM;YACd,aAAa,EAAE;gBACb,GAAG,aAAa;gBAChB,GAAG,WAAW;aACf;YACD,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;QACxD,GAAG,CAAC,GAAG,CACL,kBAAkB,EAClB,6BAA6B,kBAAkB,uCAAuC,CACvF,CAAC;QACF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE;gBACL,IAAI,EAAE,CAAC,KAAK;gBACZ,OAAO,EAAE,cAAc;aACxB;SACF,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEK,MAAM,IAAI,GACf,CAAC,OAAiE,EAAE,EAAE,CACtE,KAAK,EAAE,GAAoB,EAAE,GAAqB,EAAE,EAAE;IACpD,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IACnD,6DAA6D;IAC7D,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO;IAC5B,MAAM,SAAS,GAAG,IAAI,iDAA6B,CAAC;QAClD,mBAAmB;QACnB,kBAAkB,EAAE,SAAS;KAC9B,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;AACpD,CAAC,CAAC;AAZS,QAAA,IAAI,QAYb;AAEG,MAAM,GAAG,GAAG,KAAK,EAAE,GAAoB,EAAE,GAAqB,EAAE,EAAE;IACvE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QACnB,OAAO,EAAE,KAAK;QACd,KAAK,EAAE;YACL,IAAI,EAAE,CAAC,KAAK;YACZ,OAAO,EAAE,sBAAsB;SAChC;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AARW,QAAA,GAAG,OAQd;AAEK,MAAM,GAAG,GAAG,KAAK,EAAE,GAAoB,EAAE,GAAqB,EAAE,EAAE;IACvE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QACnB,OAAO,EAAE,KAAK;QACd,KAAK,EAAE;YACL,IAAI,EAAE,CAAC,KAAK;YACZ,OAAO,EAAE,sBAAsB;SAChC;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AARW,QAAA,GAAG,OAQd;AAEF,MAAM,aAAa,GAAG,CAAC,GAAoB,EAAE,GAAqB,EAAE,EAAE;IACpE,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;IACxD,GAAG,CAAC,IAAI,CAAC;QACP,QAAQ,EAAE,kBAAkB;QAC5B,qBAAqB,EAAE,CAAC,wCAAwC,CAAC;QACjE,wBAAwB,EAAE,CAAC,QAAQ,CAAC;QACpC,gBAAgB,EAAE,YAAY;KAC/B,CAAC,CAAC;AACL,CAAC,CAAC;AAEK,MAAM,iBAAiB,GAAG,CAAC,EAChC,aAAa,GAAG,EAAE,EAClB,UAAU,GAAG,EAAE,GAIhB,EAAmB,EAAE;IACpB,MAAM,GAAG,GAAG,IAAA,iBAAO,GAAE,CAAC;IACtB,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IACpC,GAAG,CAAC,GAAG,CAAC,iBAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAExB,GAAG,CAAC,GAAG,CAAC,uCAAuC,EAAE,IAAA,cAAI,GAAE,EAAE,aAAa,CAAC,CAAC;IACxE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,WAAG,CAAC,CAAC;IAClB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAA,YAAI,EAAC,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IACnD,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,WAAG,CAAC,CAAC;IAErB,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAjBW,QAAA,iBAAiB,qBAiB5B;AAEK,MAAM,0BAA0B,GAAG,KAAK,EAAE,OAAmB,EAAE,IAAiC,EAAE,EAAE;IACzG,MAAM,GAAG,GAAG,IAAA,yBAAiB,EAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IAEjC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,4CAA4C,OAAO,EAAE,CAAC,CAAC;IACvE,CAAC;SAAM,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,iDAAiD,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACjF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,iDAAiD,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC;AACH,CAAC,CAAC;AAZW,QAAA,0BAA0B,8BAYrC"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["src/http.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;;;;AAGtF,0FAAmG;AAEnG,gDAAwB;AACxB,sDAA8B;AAC9B,gDAAwB;AACxB,0DAAiC;AACjC,oCAAoE;AACpE,wCAAqC;AAErC,wCAAuD;AAEvD,MAAM,uBAAuB,GAAG,CAAC,GAAoB,EAAU,EAAE;IAC/D,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC;IAClE,OAAO,GAAG,QAAQ,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;AAC7C,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,KAAK,EAAE,EACvB,aAAa,EACb,UAAU,EACV,GAAG,EACH,GAAG,GAMJ,EAA6B,EAAE;IAC9B,MAAM,eAAe,GAAG,IAAA,yBAAkB,EAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAY,EAAC,eAAe,CAAC,CAAC;IAEnD,gFAAgF;IAChF,8EAA8E;IAC9E,+EAA+E;IAC/E,2DAA2D;IAC3D,IAAI,WAAmC,CAAC;IACxC,IAAI,CAAC;QACH,WAAW,GAAG,IAAA,6BAAsB,EAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;QACxD,GAAG,CAAC,GAAG,CACL,kBAAkB,EAClB,6BAA6B,kBAAkB,uCAAuC,CACvF,CAAC;QACF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE;gBACL,IAAI,EAAE,CAAC,KAAK;gBACZ,OAAO,EAAE,iBAAiB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE;aAC3E;SACF,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAA,sBAAa,EAAC;QAClB,MAAM,EAAE,MAAM;QACd,UAAU,EAAE,UAAU;QACtB,aAAa,EAAE;YACb,GAAG,aAAa;YAChB,GAAG,WAAW;SACf;QACD,eAAe,EAAE,eAAe;KACjC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,IAAI,GACR,CAAC,OAAiE,EAAE,EAAE,CACtE,KAAK,EAAE,GAAoB,EAAE,GAAqB,EAAE,EAAE;IACpD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IACzD,6DAA6D;IAC7D,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO;IAC5B,MAAM,SAAS,GAAG,IAAI,iDAA6B,EAAE,CAAC;IACtD,MAAM,MAAM,CAAC,OAAO,CAAC,SAAgB,CAAC,CAAC;IACvC,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;AACpD,CAAC,CAAC;AAEJ,MAAM,GAAG,GAAG,KAAK,EAAE,GAAoB,EAAE,GAAqB,EAAE,EAAE;IAChE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QACnB,OAAO,EAAE,KAAK;QACd,KAAK,EAAE;YACL,IAAI,EAAE,CAAC,KAAK;YACZ,OAAO,EAAE,sBAAsB;SAChC;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,GAAG,GAAG,KAAK,EAAE,GAAoB,EAAE,GAAqB,EAAE,EAAE;IAChE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QACnB,OAAO,EAAE,KAAK;QACd,KAAK,EAAE;YACL,IAAI,EAAE,CAAC,KAAK;YACZ,OAAO,EAAE,sBAAsB;SAChC;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,GAAoB,EAAE,GAAqB,EAAE,EAAE;IACpE,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;IACxD,GAAG,CAAC,IAAI,CAAC;QACP,QAAQ,EAAE,kBAAkB;QAC5B,qBAAqB,EAAE,CAAC,wCAAwC,CAAC;QACjE,wBAAwB,EAAE,CAAC,QAAQ,CAAC;QACpC,gBAAgB,EAAE,YAAY;KAC/B,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,OAA4B,EAAE,EAAE;IACrD,MAAM,aAAa,GAAG,wBAAwB,CAAC;IAC/C,MAAM,QAAQ,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;IAChC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACpC,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,QAAQ,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;QAC/B,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEK,MAAM,iBAAiB,GAAG,CAAC,EAChC,aAAa,GAAG,EAAE,EAClB,UAAU,GAIX,EAAmB,EAAE;IACpB,MAAM,GAAG,GAAG,IAAA,iBAAO,GAAE,CAAC;IACtB,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IACpC,GAAG,CAAC,GAAG,CAAC,iBAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACxB,GAAG,CAAC,GAAG,CACL,IAAA,mBAAQ,EAAC;QACP,MAAM,EAAE,IAAA,kBAAS,GAAE;QACnB,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC3B,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC;gBAC1B,OAAO,OAAO,CAAC;YACjB,CAAC;iBAAM,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC;gBACjC,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,oBAAoB,EAAE,UAAU,GAAG,EAAE,GAAG;YACtC,OAAO,WAAW,GAAG,CAAC,MAAM,OAAO,GAAG,CAAC,GAAG,0BAA0B,GAAG,CAAC,UAAU,EAAE,CAAC;QACvF,CAAC;QACD,kBAAkB,EAAE,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG;YACzC,OAAO,WAAW,GAAG,CAAC,MAAM,OAAO,GAAG,CAAC,GAAG,wBAAwB,GAAG,CAAC,UAAU,EAAE,CAAC;QACrF,CAAC;QACD,WAAW,EAAE;YACX,GAAG,EAAE,cAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC,GAAG,EAAE,EAAE;gBACrD,OAAO;oBACL,GAAG,GAAG;oBACN,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;iBACxC,CAAC;YACJ,CAAC,CAAC;YACF,GAAG,EAAE,cAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC,GAAG,EAAE,EAAE;gBACtD,OAAO;oBACL,GAAG,GAAG;oBACN,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;iBACpC,CAAC;YACJ,CAAC,CAAC;SACH;KACF,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,GAAG,CAAC,uCAAuC,EAAE,IAAA,cAAI,GAAE,EAAE,aAAa,CAAC,CAAC;IAExE,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,GAAoB,EAAE,GAAqB,EAAE,EAAE;QACvE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAClB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IACnD,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAErB,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAtDW,QAAA,iBAAiB,qBAsD5B;AAEK,MAAM,0BAA0B,GAAG,KAAK,EAAE,EAC/C,UAAU,EACV,IAAI,GAIL,EAAE,EAAE;IACH,MAAM,GAAG,GAAG,IAAA,yBAAiB,EAAC,EAAE,UAAU,EAAE,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IAEjC,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;IAE3B,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,4CAA4C,OAAO,EAAE,CAAC,CAAC;IACrE,CAAC;SAAM,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,iDAAiD,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/E,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,iDAAiD,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;AACH,CAAC,CAAC;AApBW,QAAA,0BAA0B,8BAoBrC"}
package/http.mjs CHANGED
@@ -2,68 +2,59 @@
2
2
  import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
3
3
  import cors from 'cors';
4
4
  import express from 'express';
5
- import { fromError } from 'zod-validation-error/v3';
6
- import { parseQueryOptions } from "./options.mjs";
5
+ import pino from 'pino';
6
+ import pinoHttp from 'pino-http';
7
+ import { getStainlessApiKey, parseClientAuthHeaders } from "./auth.mjs";
8
+ import { getLogger } from "./logger.mjs";
7
9
  import { initMcpServer, newMcpServer } from "./server.mjs";
8
- import { parseAuthHeaders } from "./headers.mjs";
9
10
  const oauthResourceIdentifier = (req) => {
10
11
  const protocol = req.headers['x-forwarded-proto'] ?? req.protocol;
11
12
  return `${protocol}://${req.get('host')}/`;
12
13
  };
13
- const newServer = ({ clientOptions, mcpOptions: defaultMcpOptions, req, res, }) => {
14
- const server = newMcpServer();
15
- let mcpOptions;
14
+ const newServer = async ({ clientOptions, mcpOptions, req, res, }) => {
15
+ const stainlessApiKey = getStainlessApiKey(req, mcpOptions);
16
+ const server = await newMcpServer(stainlessApiKey);
17
+ // parseClientAuthHeaders throws if the Authorization header uses an unsupported
18
+ // scheme, or (when the second arg is true) if the header is missing entirely.
19
+ // On error, we return 401 with WWW-Authenticate pointing to the OAuth metadata
20
+ // endpoint so clients know how to authenticate (RFC 9728).
21
+ let authOptions;
16
22
  try {
17
- mcpOptions = parseQueryOptions(defaultMcpOptions, req.query);
23
+ authOptions = parseClientAuthHeaders(req, false);
18
24
  }
19
25
  catch (error) {
20
- res.status(400).json({
21
- jsonrpc: '2.0',
22
- error: {
23
- code: -32000,
24
- message: `Invalid request: ${fromError(error)}`,
25
- },
26
- });
27
- return null;
28
- }
29
- try {
30
- const authOptions = parseAuthHeaders(req);
31
- initMcpServer({
32
- server: server,
33
- clientOptions: {
34
- ...clientOptions,
35
- ...authOptions,
36
- },
37
- mcpOptions,
38
- });
39
- }
40
- catch {
41
26
  const resourceIdentifier = oauthResourceIdentifier(req);
42
27
  res.set('WWW-Authenticate', `Bearer resource_metadata="${resourceIdentifier}.well-known/oauth-protected-resource"`);
43
28
  res.status(401).json({
44
29
  jsonrpc: '2.0',
45
30
  error: {
46
31
  code: -32000,
47
- message: 'Unauthorized',
32
+ message: `Unauthorized: ${error instanceof Error ? error.message : error}`,
48
33
  },
49
34
  });
50
35
  return null;
51
36
  }
37
+ await initMcpServer({
38
+ server: server,
39
+ mcpOptions: mcpOptions,
40
+ clientOptions: {
41
+ ...clientOptions,
42
+ ...authOptions,
43
+ },
44
+ stainlessApiKey: stainlessApiKey,
45
+ });
52
46
  return server;
53
47
  };
54
- export const post = (options) => async (req, res) => {
55
- const server = newServer({ ...options, req, res });
48
+ const post = (options) => async (req, res) => {
49
+ const server = await newServer({ ...options, req, res });
56
50
  // If we return null, we already set the authorization error.
57
51
  if (server === null)
58
52
  return;
59
- const transport = new StreamableHTTPServerTransport({
60
- // Stateless server
61
- sessionIdGenerator: undefined,
62
- });
53
+ const transport = new StreamableHTTPServerTransport();
63
54
  await server.connect(transport);
64
55
  await transport.handleRequest(req, res, req.body);
65
56
  };
66
- export const get = async (req, res) => {
57
+ const get = async (req, res) => {
67
58
  res.status(405).json({
68
59
  jsonrpc: '2.0',
69
60
  error: {
@@ -72,7 +63,7 @@ export const get = async (req, res) => {
72
63
  },
73
64
  });
74
65
  };
75
- export const del = async (req, res) => {
66
+ const del = async (req, res) => {
76
67
  res.status(405).json({
77
68
  jsonrpc: '2.0',
78
69
  error: {
@@ -90,28 +81,74 @@ const oauthMetadata = (req, res) => {
90
81
  scopes_supported: 'read write',
91
82
  });
92
83
  };
93
- export const streamableHTTPApp = ({ clientOptions = {}, mcpOptions = {}, }) => {
84
+ const redactHeaders = (headers) => {
85
+ const hiddenHeaders = /auth|cookie|key|token/i;
86
+ const filtered = { ...headers };
87
+ Object.keys(filtered).forEach((key) => {
88
+ if (hiddenHeaders.test(key)) {
89
+ filtered[key] = '[REDACTED]';
90
+ }
91
+ });
92
+ return filtered;
93
+ };
94
+ export const streamableHTTPApp = ({ clientOptions = {}, mcpOptions, }) => {
94
95
  const app = express();
95
96
  app.set('query parser', 'extended');
96
97
  app.use(express.json());
98
+ app.use(pinoHttp({
99
+ logger: getLogger(),
100
+ customLogLevel: (req, res) => {
101
+ if (res.statusCode >= 500) {
102
+ return 'error';
103
+ }
104
+ else if (res.statusCode >= 400) {
105
+ return 'warn';
106
+ }
107
+ return 'info';
108
+ },
109
+ customSuccessMessage: function (req, res) {
110
+ return `Request ${req.method} to ${req.url} completed with status ${res.statusCode}`;
111
+ },
112
+ customErrorMessage: function (req, res, err) {
113
+ return `Request ${req.method} to ${req.url} errored with status ${res.statusCode}`;
114
+ },
115
+ serializers: {
116
+ req: pino.stdSerializers.wrapRequestSerializer((req) => {
117
+ return {
118
+ ...req,
119
+ headers: redactHeaders(req.raw.headers),
120
+ };
121
+ }),
122
+ res: pino.stdSerializers.wrapResponseSerializer((res) => {
123
+ return {
124
+ ...res,
125
+ headers: redactHeaders(res.headers),
126
+ };
127
+ }),
128
+ },
129
+ }));
97
130
  app.get('/.well-known/oauth-protected-resource', cors(), oauthMetadata);
131
+ app.get('/health', async (req, res) => {
132
+ res.status(200).send('OK');
133
+ });
98
134
  app.get('/', get);
99
135
  app.post('/', post({ clientOptions, mcpOptions }));
100
136
  app.delete('/', del);
101
137
  return app;
102
138
  };
103
- export const launchStreamableHTTPServer = async (options, port) => {
104
- const app = streamableHTTPApp({ mcpOptions: options });
139
+ export const launchStreamableHTTPServer = async ({ mcpOptions, port, }) => {
140
+ const app = streamableHTTPApp({ mcpOptions });
105
141
  const server = app.listen(port);
106
142
  const address = server.address();
143
+ const logger = getLogger();
107
144
  if (typeof address === 'string') {
108
- console.error(`MCP Server running on streamable HTTP at ${address}`);
145
+ logger.info(`MCP Server running on streamable HTTP at ${address}`);
109
146
  }
110
147
  else if (address !== null) {
111
- console.error(`MCP Server running on streamable HTTP on port ${address.port}`);
148
+ logger.info(`MCP Server running on streamable HTTP on port ${address.port}`);
112
149
  }
113
150
  else {
114
- console.error(`MCP Server running on streamable HTTP on port ${port}`);
151
+ logger.info(`MCP Server running on streamable HTTP on port ${port}`);
115
152
  }
116
153
  };
117
154
  //# sourceMappingURL=http.mjs.map
package/http.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.mjs","sourceRoot":"","sources":["src/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.mjs","sourceRoot":"","sources":["src/http.ts"],"names":[],"mappings":"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"}