mnehmos.trace.mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (339) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1662 -0
  3. package/dist/adapters/bootstrap.d.ts +29 -0
  4. package/dist/adapters/bootstrap.d.ts.map +1 -0
  5. package/dist/adapters/bootstrap.js +46 -0
  6. package/dist/adapters/bootstrap.js.map +1 -0
  7. package/dist/adapters/errors.d.ts +94 -0
  8. package/dist/adapters/errors.d.ts.map +1 -0
  9. package/dist/adapters/errors.js +107 -0
  10. package/dist/adapters/errors.js.map +1 -0
  11. package/dist/adapters/graphql/index.d.ts +9 -0
  12. package/dist/adapters/graphql/index.d.ts.map +1 -0
  13. package/dist/adapters/graphql/index.js +9 -0
  14. package/dist/adapters/graphql/index.js.map +1 -0
  15. package/dist/adapters/graphql/sdl-parser.d.ts +74 -0
  16. package/dist/adapters/graphql/sdl-parser.d.ts.map +1 -0
  17. package/dist/adapters/graphql/sdl-parser.js +559 -0
  18. package/dist/adapters/graphql/sdl-parser.js.map +1 -0
  19. package/dist/adapters/grpc/adapter.d.ts +76 -0
  20. package/dist/adapters/grpc/adapter.d.ts.map +1 -0
  21. package/dist/adapters/grpc/adapter.js +362 -0
  22. package/dist/adapters/grpc/adapter.js.map +1 -0
  23. package/dist/adapters/grpc/index.d.ts +10 -0
  24. package/dist/adapters/grpc/index.d.ts.map +1 -0
  25. package/dist/adapters/grpc/index.js +12 -0
  26. package/dist/adapters/grpc/index.js.map +1 -0
  27. package/dist/adapters/grpc/proto-parser.d.ts +76 -0
  28. package/dist/adapters/grpc/proto-parser.d.ts.map +1 -0
  29. package/dist/adapters/grpc/proto-parser.js +523 -0
  30. package/dist/adapters/grpc/proto-parser.js.map +1 -0
  31. package/dist/adapters/grpc/type-converter.d.ts +43 -0
  32. package/dist/adapters/grpc/type-converter.d.ts.map +1 -0
  33. package/dist/adapters/grpc/type-converter.js +270 -0
  34. package/dist/adapters/grpc/type-converter.js.map +1 -0
  35. package/dist/adapters/grpc/types.d.ts +85 -0
  36. package/dist/adapters/grpc/types.d.ts.map +1 -0
  37. package/dist/adapters/grpc/types.js +7 -0
  38. package/dist/adapters/grpc/types.js.map +1 -0
  39. package/dist/adapters/index.d.ts +39 -0
  40. package/dist/adapters/index.d.ts.map +1 -0
  41. package/dist/adapters/index.js +50 -0
  42. package/dist/adapters/index.js.map +1 -0
  43. package/dist/adapters/mcp.d.ts +23 -0
  44. package/dist/adapters/mcp.d.ts.map +1 -0
  45. package/dist/adapters/mcp.js +293 -0
  46. package/dist/adapters/mcp.js.map +1 -0
  47. package/dist/adapters/openapi/adapter.d.ts +213 -0
  48. package/dist/adapters/openapi/adapter.d.ts.map +1 -0
  49. package/dist/adapters/openapi/adapter.js +557 -0
  50. package/dist/adapters/openapi/adapter.js.map +1 -0
  51. package/dist/adapters/openapi/convert.d.ts +120 -0
  52. package/dist/adapters/openapi/convert.d.ts.map +1 -0
  53. package/dist/adapters/openapi/convert.js +363 -0
  54. package/dist/adapters/openapi/convert.js.map +1 -0
  55. package/dist/adapters/openapi/index.d.ts +39 -0
  56. package/dist/adapters/openapi/index.d.ts.map +1 -0
  57. package/dist/adapters/openapi/index.js +48 -0
  58. package/dist/adapters/openapi/index.js.map +1 -0
  59. package/dist/adapters/openapi/parser.d.ts +95 -0
  60. package/dist/adapters/openapi/parser.d.ts.map +1 -0
  61. package/dist/adapters/openapi/parser.js +171 -0
  62. package/dist/adapters/openapi/parser.js.map +1 -0
  63. package/dist/adapters/registry.d.ts +116 -0
  64. package/dist/adapters/registry.d.ts.map +1 -0
  65. package/dist/adapters/registry.js +246 -0
  66. package/dist/adapters/registry.js.map +1 -0
  67. package/dist/adapters/trpc/adapter.d.ts +159 -0
  68. package/dist/adapters/trpc/adapter.d.ts.map +1 -0
  69. package/dist/adapters/trpc/adapter.js +223 -0
  70. package/dist/adapters/trpc/adapter.js.map +1 -0
  71. package/dist/adapters/trpc/extractor.d.ts +218 -0
  72. package/dist/adapters/trpc/extractor.d.ts.map +1 -0
  73. package/dist/adapters/trpc/extractor.js +708 -0
  74. package/dist/adapters/trpc/extractor.js.map +1 -0
  75. package/dist/adapters/trpc/index.d.ts +31 -0
  76. package/dist/adapters/trpc/index.d.ts.map +1 -0
  77. package/dist/adapters/trpc/index.js +40 -0
  78. package/dist/adapters/trpc/index.js.map +1 -0
  79. package/dist/adapters/trpc/parser.d.ts +119 -0
  80. package/dist/adapters/trpc/parser.d.ts.map +1 -0
  81. package/dist/adapters/trpc/parser.js +128 -0
  82. package/dist/adapters/trpc/parser.js.map +1 -0
  83. package/dist/compare/index.d.ts +33 -0
  84. package/dist/compare/index.d.ts.map +1 -0
  85. package/dist/compare/index.js +261 -0
  86. package/dist/compare/index.js.map +1 -0
  87. package/dist/core/types.d.ts +188 -0
  88. package/dist/core/types.d.ts.map +1 -0
  89. package/dist/core/types.js +9 -0
  90. package/dist/core/types.js.map +1 -0
  91. package/dist/extract/index.d.ts +26 -0
  92. package/dist/extract/index.d.ts.map +1 -0
  93. package/dist/extract/index.js +44 -0
  94. package/dist/extract/index.js.map +1 -0
  95. package/dist/index.d.ts +9 -0
  96. package/dist/index.d.ts.map +1 -0
  97. package/dist/index.js +674 -0
  98. package/dist/index.js.map +1 -0
  99. package/dist/languages/base.d.ts +57 -0
  100. package/dist/languages/base.d.ts.map +1 -0
  101. package/dist/languages/base.js +6 -0
  102. package/dist/languages/base.js.map +1 -0
  103. package/dist/languages/bootstrap.d.ts +10 -0
  104. package/dist/languages/bootstrap.d.ts.map +1 -0
  105. package/dist/languages/bootstrap.js +25 -0
  106. package/dist/languages/bootstrap.js.map +1 -0
  107. package/dist/languages/go/handlers/chi.d.ts +24 -0
  108. package/dist/languages/go/handlers/chi.d.ts.map +1 -0
  109. package/dist/languages/go/handlers/chi.js +205 -0
  110. package/dist/languages/go/handlers/chi.js.map +1 -0
  111. package/dist/languages/go/handlers/gin.d.ts +24 -0
  112. package/dist/languages/go/handlers/gin.d.ts.map +1 -0
  113. package/dist/languages/go/handlers/gin.js +156 -0
  114. package/dist/languages/go/handlers/gin.js.map +1 -0
  115. package/dist/languages/go/handlers/stdlib.d.ts +19 -0
  116. package/dist/languages/go/handlers/stdlib.d.ts.map +1 -0
  117. package/dist/languages/go/handlers/stdlib.js +112 -0
  118. package/dist/languages/go/handlers/stdlib.js.map +1 -0
  119. package/dist/languages/go/index.d.ts +18 -0
  120. package/dist/languages/go/index.d.ts.map +1 -0
  121. package/dist/languages/go/index.js +20 -0
  122. package/dist/languages/go/index.js.map +1 -0
  123. package/dist/languages/go/parser.d.ts +33 -0
  124. package/dist/languages/go/parser.d.ts.map +1 -0
  125. package/dist/languages/go/parser.js +95 -0
  126. package/dist/languages/go/parser.js.map +1 -0
  127. package/dist/languages/go/struct-extractor.d.ts +59 -0
  128. package/dist/languages/go/struct-extractor.d.ts.map +1 -0
  129. package/dist/languages/go/struct-extractor.js +483 -0
  130. package/dist/languages/go/struct-extractor.js.map +1 -0
  131. package/dist/languages/go/tag-parser.d.ts +62 -0
  132. package/dist/languages/go/tag-parser.d.ts.map +1 -0
  133. package/dist/languages/go/tag-parser.js +108 -0
  134. package/dist/languages/go/tag-parser.js.map +1 -0
  135. package/dist/languages/go/type-converter.d.ts +32 -0
  136. package/dist/languages/go/type-converter.d.ts.map +1 -0
  137. package/dist/languages/go/type-converter.js +226 -0
  138. package/dist/languages/go/type-converter.js.map +1 -0
  139. package/dist/languages/go/types.d.ts +153 -0
  140. package/dist/languages/go/types.d.ts.map +1 -0
  141. package/dist/languages/go/types.js +6 -0
  142. package/dist/languages/go/types.js.map +1 -0
  143. package/dist/languages/import-resolver.d.ts +645 -0
  144. package/dist/languages/import-resolver.d.ts.map +1 -0
  145. package/dist/languages/import-resolver.js +1278 -0
  146. package/dist/languages/import-resolver.js.map +1 -0
  147. package/dist/languages/index.d.ts +34 -0
  148. package/dist/languages/index.d.ts.map +1 -0
  149. package/dist/languages/index.js +93 -0
  150. package/dist/languages/index.js.map +1 -0
  151. package/dist/languages/json-schema.d.ts +40 -0
  152. package/dist/languages/json-schema.d.ts.map +1 -0
  153. package/dist/languages/json-schema.js +188 -0
  154. package/dist/languages/json-schema.js.map +1 -0
  155. package/dist/languages/python-ast/index.d.ts +8 -0
  156. package/dist/languages/python-ast/index.d.ts.map +1 -0
  157. package/dist/languages/python-ast/index.js +7 -0
  158. package/dist/languages/python-ast/index.js.map +1 -0
  159. package/dist/languages/python-ast/parser.d.ts +174 -0
  160. package/dist/languages/python-ast/parser.d.ts.map +1 -0
  161. package/dist/languages/python-ast/parser.js +1205 -0
  162. package/dist/languages/python-ast/parser.js.map +1 -0
  163. package/dist/languages/python-ast/type-resolver.d.ts +75 -0
  164. package/dist/languages/python-ast/type-resolver.d.ts.map +1 -0
  165. package/dist/languages/python-ast/type-resolver.js +421 -0
  166. package/dist/languages/python-ast/type-resolver.js.map +1 -0
  167. package/dist/languages/python-ast/types.d.ts +216 -0
  168. package/dist/languages/python-ast/types.d.ts.map +1 -0
  169. package/dist/languages/python-ast/types.js +6 -0
  170. package/dist/languages/python-ast/types.js.map +1 -0
  171. package/dist/languages/python.d.ts +55 -0
  172. package/dist/languages/python.d.ts.map +1 -0
  173. package/dist/languages/python.js +311 -0
  174. package/dist/languages/python.js.map +1 -0
  175. package/dist/languages/typescript.d.ts +272 -0
  176. package/dist/languages/typescript.d.ts.map +1 -0
  177. package/dist/languages/typescript.js +1381 -0
  178. package/dist/languages/typescript.js.map +1 -0
  179. package/dist/patterns/base.d.ts +146 -0
  180. package/dist/patterns/base.d.ts.map +1 -0
  181. package/dist/patterns/base.js +89 -0
  182. package/dist/patterns/base.js.map +1 -0
  183. package/dist/patterns/errors.d.ts +172 -0
  184. package/dist/patterns/errors.d.ts.map +1 -0
  185. package/dist/patterns/errors.js +185 -0
  186. package/dist/patterns/errors.js.map +1 -0
  187. package/dist/patterns/extractors.d.ts +170 -0
  188. package/dist/patterns/extractors.d.ts.map +1 -0
  189. package/dist/patterns/extractors.js +305 -0
  190. package/dist/patterns/extractors.js.map +1 -0
  191. package/dist/patterns/graphql/apollo-client.d.ts +80 -0
  192. package/dist/patterns/graphql/apollo-client.d.ts.map +1 -0
  193. package/dist/patterns/graphql/apollo-client.js +800 -0
  194. package/dist/patterns/graphql/apollo-client.js.map +1 -0
  195. package/dist/patterns/graphql/apollo-server.d.ts +55 -0
  196. package/dist/patterns/graphql/apollo-server.d.ts.map +1 -0
  197. package/dist/patterns/graphql/apollo-server.js +523 -0
  198. package/dist/patterns/graphql/apollo-server.js.map +1 -0
  199. package/dist/patterns/graphql/index.d.ts +11 -0
  200. package/dist/patterns/graphql/index.d.ts.map +1 -0
  201. package/dist/patterns/graphql/index.js +12 -0
  202. package/dist/patterns/graphql/index.js.map +1 -0
  203. package/dist/patterns/graphql/types.d.ts +213 -0
  204. package/dist/patterns/graphql/types.d.ts.map +1 -0
  205. package/dist/patterns/graphql/types.js +16 -0
  206. package/dist/patterns/graphql/types.js.map +1 -0
  207. package/dist/patterns/http-clients/axios.d.ts +148 -0
  208. package/dist/patterns/http-clients/axios.d.ts.map +1 -0
  209. package/dist/patterns/http-clients/axios.js +652 -0
  210. package/dist/patterns/http-clients/axios.js.map +1 -0
  211. package/dist/patterns/http-clients/fetch.d.ts +88 -0
  212. package/dist/patterns/http-clients/fetch.d.ts.map +1 -0
  213. package/dist/patterns/http-clients/fetch.js +364 -0
  214. package/dist/patterns/http-clients/fetch.js.map +1 -0
  215. package/dist/patterns/http-clients/index.d.ts +36 -0
  216. package/dist/patterns/http-clients/index.d.ts.map +1 -0
  217. package/dist/patterns/http-clients/index.js +50 -0
  218. package/dist/patterns/http-clients/index.js.map +1 -0
  219. package/dist/patterns/http-clients/property-access.d.ts +46 -0
  220. package/dist/patterns/http-clients/property-access.d.ts.map +1 -0
  221. package/dist/patterns/http-clients/property-access.js +818 -0
  222. package/dist/patterns/http-clients/property-access.js.map +1 -0
  223. package/dist/patterns/http-clients/type-inference.d.ts +48 -0
  224. package/dist/patterns/http-clients/type-inference.d.ts.map +1 -0
  225. package/dist/patterns/http-clients/type-inference.js +293 -0
  226. package/dist/patterns/http-clients/type-inference.js.map +1 -0
  227. package/dist/patterns/http-clients/types.d.ts +168 -0
  228. package/dist/patterns/http-clients/types.d.ts.map +1 -0
  229. package/dist/patterns/http-clients/types.js +10 -0
  230. package/dist/patterns/http-clients/types.js.map +1 -0
  231. package/dist/patterns/http-clients/url-extractor.d.ts +53 -0
  232. package/dist/patterns/http-clients/url-extractor.d.ts.map +1 -0
  233. package/dist/patterns/http-clients/url-extractor.js +338 -0
  234. package/dist/patterns/http-clients/url-extractor.js.map +1 -0
  235. package/dist/patterns/index.d.ts +44 -0
  236. package/dist/patterns/index.d.ts.map +1 -0
  237. package/dist/patterns/index.js +49 -0
  238. package/dist/patterns/index.js.map +1 -0
  239. package/dist/patterns/python/aiohttp.d.ts +21 -0
  240. package/dist/patterns/python/aiohttp.d.ts.map +1 -0
  241. package/dist/patterns/python/aiohttp.js +188 -0
  242. package/dist/patterns/python/aiohttp.js.map +1 -0
  243. package/dist/patterns/python/httpx.d.ts +20 -0
  244. package/dist/patterns/python/httpx.d.ts.map +1 -0
  245. package/dist/patterns/python/httpx.js +183 -0
  246. package/dist/patterns/python/httpx.js.map +1 -0
  247. package/dist/patterns/python/index.d.ts +32 -0
  248. package/dist/patterns/python/index.d.ts.map +1 -0
  249. package/dist/patterns/python/index.js +63 -0
  250. package/dist/patterns/python/index.js.map +1 -0
  251. package/dist/patterns/python/property-access.d.ts +27 -0
  252. package/dist/patterns/python/property-access.d.ts.map +1 -0
  253. package/dist/patterns/python/property-access.js +132 -0
  254. package/dist/patterns/python/property-access.js.map +1 -0
  255. package/dist/patterns/python/requests.d.ts +19 -0
  256. package/dist/patterns/python/requests.d.ts.map +1 -0
  257. package/dist/patterns/python/requests.js +239 -0
  258. package/dist/patterns/python/requests.js.map +1 -0
  259. package/dist/patterns/python/types.d.ts +95 -0
  260. package/dist/patterns/python/types.d.ts.map +1 -0
  261. package/dist/patterns/python/types.js +43 -0
  262. package/dist/patterns/python/types.js.map +1 -0
  263. package/dist/patterns/registry.d.ts +181 -0
  264. package/dist/patterns/registry.d.ts.map +1 -0
  265. package/dist/patterns/registry.js +304 -0
  266. package/dist/patterns/registry.js.map +1 -0
  267. package/dist/patterns/rest/express.d.ts +78 -0
  268. package/dist/patterns/rest/express.d.ts.map +1 -0
  269. package/dist/patterns/rest/express.js +289 -0
  270. package/dist/patterns/rest/express.js.map +1 -0
  271. package/dist/patterns/rest/fastify.d.ts +93 -0
  272. package/dist/patterns/rest/fastify.d.ts.map +1 -0
  273. package/dist/patterns/rest/fastify.js +420 -0
  274. package/dist/patterns/rest/fastify.js.map +1 -0
  275. package/dist/patterns/rest/index.d.ts +31 -0
  276. package/dist/patterns/rest/index.d.ts.map +1 -0
  277. package/dist/patterns/rest/index.js +45 -0
  278. package/dist/patterns/rest/index.js.map +1 -0
  279. package/dist/patterns/rest/middleware.d.ts +25 -0
  280. package/dist/patterns/rest/middleware.d.ts.map +1 -0
  281. package/dist/patterns/rest/middleware.js +219 -0
  282. package/dist/patterns/rest/middleware.js.map +1 -0
  283. package/dist/patterns/rest/path-parser.d.ts +50 -0
  284. package/dist/patterns/rest/path-parser.d.ts.map +1 -0
  285. package/dist/patterns/rest/path-parser.js +137 -0
  286. package/dist/patterns/rest/path-parser.js.map +1 -0
  287. package/dist/patterns/rest/response-inference.d.ts +44 -0
  288. package/dist/patterns/rest/response-inference.d.ts.map +1 -0
  289. package/dist/patterns/rest/response-inference.js +218 -0
  290. package/dist/patterns/rest/response-inference.js.map +1 -0
  291. package/dist/patterns/rest/types.d.ts +102 -0
  292. package/dist/patterns/rest/types.d.ts.map +1 -0
  293. package/dist/patterns/rest/types.js +10 -0
  294. package/dist/patterns/rest/types.js.map +1 -0
  295. package/dist/patterns/types.d.ts +105 -0
  296. package/dist/patterns/types.d.ts.map +1 -0
  297. package/dist/patterns/types.js +11 -0
  298. package/dist/patterns/types.js.map +1 -0
  299. package/dist/report/index.d.ts +11 -0
  300. package/dist/report/index.d.ts.map +1 -0
  301. package/dist/report/index.js +55 -0
  302. package/dist/report/index.js.map +1 -0
  303. package/dist/tools/contract-comments.d.ts +48 -0
  304. package/dist/tools/contract-comments.d.ts.map +1 -0
  305. package/dist/tools/contract-comments.js +130 -0
  306. package/dist/tools/contract-comments.js.map +1 -0
  307. package/dist/tools/index.d.ts +6 -0
  308. package/dist/tools/index.d.ts.map +1 -0
  309. package/dist/tools/index.js +6 -0
  310. package/dist/tools/index.js.map +1 -0
  311. package/dist/tools/scaffold.d.ts +38 -0
  312. package/dist/tools/scaffold.d.ts.map +1 -0
  313. package/dist/tools/scaffold.js +373 -0
  314. package/dist/tools/scaffold.js.map +1 -0
  315. package/dist/trace/index.d.ts +28 -0
  316. package/dist/trace/index.d.ts.map +1 -0
  317. package/dist/trace/index.js +45 -0
  318. package/dist/trace/index.js.map +1 -0
  319. package/dist/types.d.ts +135 -0
  320. package/dist/types.d.ts.map +1 -0
  321. package/dist/types.js +22 -0
  322. package/dist/types.js.map +1 -0
  323. package/dist/watch/cache.d.ts +41 -0
  324. package/dist/watch/cache.d.ts.map +1 -0
  325. package/dist/watch/cache.js +230 -0
  326. package/dist/watch/cache.js.map +1 -0
  327. package/dist/watch/index.d.ts +9 -0
  328. package/dist/watch/index.d.ts.map +1 -0
  329. package/dist/watch/index.js +7 -0
  330. package/dist/watch/index.js.map +1 -0
  331. package/dist/watch/project.d.ts +128 -0
  332. package/dist/watch/project.d.ts.map +1 -0
  333. package/dist/watch/project.js +152 -0
  334. package/dist/watch/project.js.map +1 -0
  335. package/dist/watch/watcher.d.ts +76 -0
  336. package/dist/watch/watcher.d.ts.map +1 -0
  337. package/dist/watch/watcher.js +235 -0
  338. package/dist/watch/watcher.js.map +1 -0
  339. package/package.json +70 -0
@@ -0,0 +1,293 @@
1
+ /**
2
+ * MCP Schema Adapter
3
+ * Converts MCP tool definitions to NormalizedSchema
4
+ */
5
+ import { Project, Node } from 'ts-morph';
6
+ /**
7
+ * MCP adapter for extracting schemas from MCP server.tool() calls
8
+ */
9
+ export class MCPAdapter {
10
+ kind = 'mcp';
11
+ supports(ref) {
12
+ return ref.source === 'mcp';
13
+ }
14
+ async extract(ref) {
15
+ const { id, options } = ref;
16
+ // Parse ID format: "file:path/to/file.ts" or "dir:path/to/dir" or "tool:toolName@path"
17
+ // Use indexOf to handle Windows paths with colons (e.g., C:\path\to\file.ts)
18
+ const colonIndex = id.indexOf(':');
19
+ if (colonIndex === -1) {
20
+ throw new Error(`Invalid ID format (missing type prefix): ${id}`);
21
+ }
22
+ const type = id.slice(0, colonIndex);
23
+ const pathPart = id.slice(colonIndex + 1);
24
+ if (type === 'file') {
25
+ return this.extractFromFile(pathPart, ref);
26
+ }
27
+ else if (type === 'dir') {
28
+ // Extract first tool from directory (or could return all)
29
+ const schemas = await this.extractFromDirectory(pathPart, options);
30
+ if (schemas.length === 0) {
31
+ throw new Error(`No MCP tools found in directory: ${pathPart}`);
32
+ }
33
+ return schemas[0];
34
+ }
35
+ else if (type === 'tool') {
36
+ // Format: "tool:toolName@path"
37
+ const atIndex = pathPart.indexOf('@');
38
+ if (atIndex === -1) {
39
+ throw new Error(`Invalid tool ID format (missing @): ${id}`);
40
+ }
41
+ const toolName = pathPart.slice(0, atIndex);
42
+ const filePath = pathPart.slice(atIndex + 1);
43
+ return this.extractToolByName(toolName, filePath, ref);
44
+ }
45
+ else {
46
+ throw new Error(`Unsupported MCP schema reference format: ${id}`);
47
+ }
48
+ }
49
+ async list(basePath) {
50
+ const project = new Project({
51
+ tsConfigFilePath: undefined,
52
+ skipAddingFilesFromTsConfig: true,
53
+ });
54
+ project.addSourceFilesAtPaths([`${basePath}/**/*.ts`]);
55
+ const refs = [];
56
+ for (const sourceFile of project.getSourceFiles()) {
57
+ const filePath = sourceFile.getFilePath();
58
+ // Skip node_modules and dist
59
+ if (filePath.includes('node_modules') || filePath.includes('dist')) {
60
+ continue;
61
+ }
62
+ const toolCalls = this.findToolCalls(sourceFile);
63
+ for (const toolCall of toolCalls) {
64
+ const toolName = this.extractToolName(toolCall);
65
+ if (toolName) {
66
+ refs.push({
67
+ source: 'mcp',
68
+ id: `tool:${toolName}@${filePath}`,
69
+ });
70
+ }
71
+ }
72
+ }
73
+ return refs;
74
+ }
75
+ // ============================================================================
76
+ // Private extraction methods
77
+ // ============================================================================
78
+ async extractFromFile(filePath, ref) {
79
+ const project = new Project({
80
+ skipAddingFilesFromTsConfig: true,
81
+ });
82
+ const sourceFile = project.addSourceFileAtPath(filePath);
83
+ const toolCalls = this.findToolCalls(sourceFile);
84
+ if (toolCalls.length === 0) {
85
+ throw new Error(`No MCP tools found in file: ${filePath}`);
86
+ }
87
+ // Extract first tool (or specific tool if specified in options)
88
+ const toolCall = toolCalls[0];
89
+ return this.parseToolCallToNormalized(toolCall, filePath, ref);
90
+ }
91
+ async extractFromDirectory(dirPath, options) {
92
+ const project = new Project({
93
+ tsConfigFilePath: undefined,
94
+ skipAddingFilesFromTsConfig: true,
95
+ });
96
+ const patterns = options?.include || ['**/*.ts'];
97
+ const excludePatterns = options?.exclude || [
98
+ '**/node_modules/**',
99
+ '**/dist/**',
100
+ ];
101
+ project.addSourceFilesAtPaths(patterns.map((p) => `${dirPath}/${p}`));
102
+ const schemas = [];
103
+ for (const sourceFile of project.getSourceFiles()) {
104
+ const filePath = sourceFile.getFilePath();
105
+ // Skip excluded patterns
106
+ if (excludePatterns.some((pattern) => filePath.includes(pattern.replace('**/', '')))) {
107
+ continue;
108
+ }
109
+ const toolCalls = this.findToolCalls(sourceFile);
110
+ for (const toolCall of toolCalls) {
111
+ const ref = { source: 'mcp', id: `file:${filePath}` };
112
+ const schema = this.parseToolCallToNormalized(toolCall, filePath, ref);
113
+ schemas.push(schema);
114
+ }
115
+ }
116
+ return schemas;
117
+ }
118
+ async extractToolByName(toolName, filePath, ref) {
119
+ const project = new Project({
120
+ skipAddingFilesFromTsConfig: true,
121
+ });
122
+ const sourceFile = project.addSourceFileAtPath(filePath);
123
+ const toolCalls = this.findToolCalls(sourceFile);
124
+ for (const toolCall of toolCalls) {
125
+ const name = this.extractToolName(toolCall);
126
+ if (name === toolName) {
127
+ return this.parseToolCallToNormalized(toolCall, filePath, ref);
128
+ }
129
+ }
130
+ throw new Error(`Tool "${toolName}" not found in ${filePath}`);
131
+ }
132
+ // ============================================================================
133
+ // Parsing utilities
134
+ // ============================================================================
135
+ findToolCalls(sourceFile) {
136
+ const toolCalls = [];
137
+ sourceFile.forEachDescendant((node) => {
138
+ if (Node.isCallExpression(node)) {
139
+ const expression = node.getExpression();
140
+ // Check for pattern: server.tool() or *.tool()
141
+ if (Node.isPropertyAccessExpression(expression)) {
142
+ const methodName = expression.getName();
143
+ if (methodName === 'tool') {
144
+ toolCalls.push(node);
145
+ }
146
+ }
147
+ }
148
+ });
149
+ return toolCalls;
150
+ }
151
+ extractToolName(callExpr) {
152
+ const args = callExpr.getArguments();
153
+ if (args.length === 0)
154
+ return null;
155
+ const nameArg = args[0];
156
+ if (Node.isStringLiteral(nameArg)) {
157
+ return nameArg.getLiteralValue();
158
+ }
159
+ return null;
160
+ }
161
+ parseToolCallToNormalized(callExpr, filePath, ref) {
162
+ const args = callExpr.getArguments();
163
+ if (args.length < 3) {
164
+ throw new Error(`Invalid tool call at ${filePath}:${callExpr.getStartLineNumber()}`);
165
+ }
166
+ // Extract tool name
167
+ const nameArg = args[0];
168
+ let toolName = 'unknown';
169
+ if (Node.isStringLiteral(nameArg)) {
170
+ toolName = nameArg.getLiteralValue();
171
+ }
172
+ // Extract description (second argument if string, otherwise schema is second)
173
+ let description;
174
+ let schemaArg;
175
+ const secondArg = args[1];
176
+ if (Node.isStringLiteral(secondArg)) {
177
+ description = secondArg.getLiteralValue();
178
+ schemaArg = args[2];
179
+ }
180
+ else {
181
+ schemaArg = secondArg;
182
+ }
183
+ // Parse the Zod schema object to NormalizedSchema
184
+ const normalized = this.parseZodSchemaToNormalized(schemaArg);
185
+ const location = {
186
+ file: filePath,
187
+ line: callExpr.getStartLineNumber(),
188
+ column: callExpr.getStartLinePos(),
189
+ };
190
+ return {
191
+ ...normalized,
192
+ name: toolName,
193
+ source: ref,
194
+ location,
195
+ };
196
+ }
197
+ parseZodSchemaToNormalized(node) {
198
+ const properties = {};
199
+ const required = [];
200
+ if (!Node.isObjectLiteralExpression(node)) {
201
+ return { properties, required, source: { source: 'mcp', id: '' } };
202
+ }
203
+ for (const prop of node.getProperties()) {
204
+ if (!Node.isPropertyAssignment(prop))
205
+ continue;
206
+ const propName = prop.getName();
207
+ const initializer = prop.getInitializer();
208
+ if (!initializer)
209
+ continue;
210
+ // Parse the Zod type chain
211
+ const type = this.parseZodType(initializer);
212
+ const initText = initializer.getText();
213
+ const isOptional = initText.includes('.optional()');
214
+ const isNullable = initText.includes('.nullable()');
215
+ const isDeprecated = initText.includes('.deprecated()');
216
+ properties[propName] = {
217
+ type,
218
+ optional: isOptional,
219
+ nullable: isNullable,
220
+ readonly: false,
221
+ deprecated: isDeprecated,
222
+ };
223
+ if (!isOptional) {
224
+ required.push(propName);
225
+ }
226
+ }
227
+ return {
228
+ properties,
229
+ required,
230
+ source: { source: 'mcp', id: '' },
231
+ };
232
+ }
233
+ parseZodType(node) {
234
+ const text = node.getText();
235
+ // z.string()
236
+ if (text.includes('z.string()')) {
237
+ return { kind: 'primitive', value: 'string' };
238
+ }
239
+ // z.number()
240
+ if (text.includes('z.number()')) {
241
+ return { kind: 'primitive', value: 'number' };
242
+ }
243
+ // z.boolean()
244
+ if (text.includes('z.boolean()')) {
245
+ return { kind: 'primitive', value: 'boolean' };
246
+ }
247
+ // z.literal(...)
248
+ if (text.includes('z.literal(')) {
249
+ const literalMatch = text.match(/z\.literal\((.*?)\)/);
250
+ if (literalMatch) {
251
+ const value = literalMatch[1].replace(/['"]/g, '');
252
+ return { kind: 'literal', value };
253
+ }
254
+ }
255
+ // z.enum([...])
256
+ if (text.includes('z.enum(')) {
257
+ const enumMatch = text.match(/z\.enum\(\[(.*?)\]\)/);
258
+ if (enumMatch) {
259
+ const values = enumMatch[1]
260
+ .split(',')
261
+ .map((v) => v.trim().replace(/['"]/g, ''));
262
+ // Convert enum to union of literals
263
+ return {
264
+ kind: 'union',
265
+ variants: values.map((v) => ({ kind: 'literal', value: v })),
266
+ };
267
+ }
268
+ }
269
+ // z.array(...)
270
+ if (text.includes('z.array(')) {
271
+ // For now, return array of unknown
272
+ // TODO: Parse element type
273
+ return { kind: 'array', element: { kind: 'unknown' } };
274
+ }
275
+ // z.object(...)
276
+ if (text.includes('z.object(')) {
277
+ // For now, return object with empty schema
278
+ // TODO: Parse nested object
279
+ return {
280
+ kind: 'object',
281
+ schema: { properties: {}, required: [], source: { source: 'mcp', id: '' } },
282
+ };
283
+ }
284
+ // z.union([...])
285
+ if (text.includes('z.union(')) {
286
+ // For now, return generic union
287
+ return { kind: 'union', variants: [{ kind: 'unknown' }] };
288
+ }
289
+ // Default
290
+ return { kind: 'unknown' };
291
+ }
292
+ }
293
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/adapters/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,213 @@
1
+ /**
2
+ * 📋 OpenAPI Schema Adapter
3
+ * Extracts and converts OpenAPI/Swagger specifications to NormalizedSchema
4
+ *
5
+ * This adapter implements the SchemaAdapter interface for OpenAPI 3.x
6
+ * specifications. It supports extraction of:
7
+ * - Full endpoints (request + all responses)
8
+ * - Request body schemas
9
+ * - Response schemas by status code
10
+ * - Component schemas
11
+ * - File-level extraction (first endpoint)
12
+ *
13
+ * @module adapters/openapi/adapter
14
+ */
15
+ import type { SchemaAdapter, SchemaRef, NormalizedSchema } from '../../core/types.js';
16
+ /**
17
+ * Schema adapter for OpenAPI 3.x specifications.
18
+ *
19
+ * Implements the SchemaAdapter interface to extract schemas from
20
+ * OpenAPI/Swagger specifications. Uses `@apidevtools/swagger-parser`
21
+ * for parsing and validation.
22
+ *
23
+ * @implements {SchemaAdapter}
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * import { OpenAPIAdapter } from './adapter.js';
28
+ * import { registerAdapter } from '../registry.js';
29
+ *
30
+ * // Register the adapter
31
+ * registerAdapter(new OpenAPIAdapter());
32
+ *
33
+ * // Extract an endpoint schema
34
+ * const adapter = new OpenAPIAdapter();
35
+ * const schema = await adapter.extract({
36
+ * source: 'openapi',
37
+ * id: 'endpoint:GET:/users/{id}@./api.yaml'
38
+ * });
39
+ * ```
40
+ */
41
+ export declare class OpenAPIAdapter implements SchemaAdapter {
42
+ /** Adapter kind identifier */
43
+ readonly kind: "openapi";
44
+ /**
45
+ * Check if this adapter supports the given schema reference.
46
+ *
47
+ * @param ref - The schema reference to check
48
+ * @returns True if the ref source is 'openapi'
49
+ */
50
+ supports(ref: SchemaRef): boolean;
51
+ /**
52
+ * Extract a schema from an OpenAPI specification.
53
+ *
54
+ * Parses the ref ID to determine what to extract:
55
+ * - `file:` - Extract first endpoint from spec
56
+ * - `endpoint:` - Full endpoint schema (request + responses)
57
+ * - `request:` - Request body schema only
58
+ * - `response:` - Specific response by status code
59
+ * - `schema:` - Named component schema
60
+ *
61
+ * @param ref - The schema reference specifying what to extract
62
+ * @returns Promise resolving to the normalized schema
63
+ * @throws {Error} If the ref ID is invalid or extraction fails
64
+ *
65
+ * @example
66
+ * ```typescript
67
+ * // Extract a full endpoint
68
+ * const schema = await adapter.extract({
69
+ * source: 'openapi',
70
+ * id: 'endpoint:GET:/users/{id}@./api.yaml'
71
+ * });
72
+ *
73
+ * // Extract a component schema
74
+ * const schema = await adapter.extract({
75
+ * source: 'openapi',
76
+ * id: 'schema:User@./api.yaml'
77
+ * });
78
+ * ```
79
+ */
80
+ extract(ref: SchemaRef): Promise<NormalizedSchema>;
81
+ /**
82
+ * List all endpoints in an OpenAPI specification.
83
+ *
84
+ * Scans the paths object and returns a SchemaRef for each
85
+ * method/path combination found. Handles errors gracefully
86
+ * by returning an empty array per ADR guidelines.
87
+ *
88
+ * @param basePath - Path to the OpenAPI specification file
89
+ * @returns Promise resolving to array of endpoint SchemaRefs
90
+ *
91
+ * @example
92
+ * ```typescript
93
+ * const refs = await adapter.list('./api.yaml');
94
+ * // [
95
+ * // { source: 'openapi', id: 'endpoint:GET:/users@./api.yaml' },
96
+ * // { source: 'openapi', id: 'endpoint:POST:/users@./api.yaml' },
97
+ * // ...
98
+ * // ]
99
+ * ```
100
+ */
101
+ list(basePath: string): Promise<SchemaRef[]>;
102
+ /**
103
+ * Load and validate an OpenAPI specification.
104
+ *
105
+ * Uses swagger-parser to validate the spec and resolve references.
106
+ *
107
+ * @param specPath - Path to the specification file
108
+ * @returns Promise resolving to the parsed OpenAPI document
109
+ * @throws {Error} If the spec cannot be loaded or is invalid
110
+ */
111
+ private loadSpec;
112
+ /**
113
+ * Extract the first endpoint from a spec.
114
+ *
115
+ * Used for `file:` refs that don't specify a specific endpoint.
116
+ *
117
+ * @param api - The parsed OpenAPI document
118
+ * @param specPath - Path to the spec file
119
+ * @param ref - The original schema reference
120
+ * @returns The normalized schema for the first endpoint
121
+ * @throws {Error} If no endpoints are found
122
+ */
123
+ private extractFirstEndpoint;
124
+ /**
125
+ * Extract a full endpoint schema (request + responses).
126
+ *
127
+ * Creates a normalized schema with two top-level properties:
128
+ * - `request`: Path params, query params, headers, and body
129
+ * - `responses`: All response schemas keyed by status code
130
+ *
131
+ * @param api - The parsed OpenAPI document
132
+ * @param method - HTTP method (GET, POST, etc.)
133
+ * @param path - API path (/users/{id})
134
+ * @param ref - The original schema reference
135
+ * @param specPath - Path to the spec file
136
+ * @returns The normalized endpoint schema
137
+ * @throws {Error} If path or method not found
138
+ */
139
+ private extractEndpoint;
140
+ /**
141
+ * Build the request schema for an endpoint.
142
+ *
143
+ * Combines path-level and operation-level parameters into
144
+ * a structured schema with path, query, headers, and body sections.
145
+ *
146
+ * @param api - The parsed OpenAPI document
147
+ * @param operation - The operation object
148
+ * @param pathItem - The path item object
149
+ * @param ref - The original schema reference
150
+ * @returns The request schema
151
+ */
152
+ private buildRequestSchema;
153
+ /**
154
+ * Build the responses schema for an endpoint.
155
+ *
156
+ * Creates a schema with status codes as property keys,
157
+ * each containing the response body schema.
158
+ *
159
+ * @param operation - The operation object
160
+ * @param ref - The original schema reference
161
+ * @returns The responses schema
162
+ */
163
+ private buildResponsesSchema;
164
+ /**
165
+ * Extract just the request body schema for an endpoint.
166
+ *
167
+ * @param api - The parsed OpenAPI document
168
+ * @param method - HTTP method
169
+ * @param path - API path
170
+ * @param ref - The original schema reference
171
+ * @returns The request body schema
172
+ * @throws {Error} If no request body is defined
173
+ */
174
+ private extractRequest;
175
+ /**
176
+ * Extract a response schema by status code.
177
+ *
178
+ * @param api - The parsed OpenAPI document
179
+ * @param method - HTTP method
180
+ * @param path - API path
181
+ * @param statusCode - Response status code (e.g., '200')
182
+ * @param ref - The original schema reference
183
+ * @returns The response body schema
184
+ * @throws {Error} If response not found
185
+ */
186
+ private extractResponse;
187
+ /**
188
+ * Extract a component schema by name.
189
+ *
190
+ * @param api - The parsed OpenAPI document
191
+ * @param schemaName - Name of the component schema
192
+ * @param ref - The original schema reference
193
+ * @param specPath - Path to the spec file
194
+ * @returns The component schema
195
+ * @throws {Error} If schema not found
196
+ */
197
+ private extractComponentSchema;
198
+ /**
199
+ * Dereference a schema by resolving $ref if present.
200
+ *
201
+ * Recursively resolves references in the schema tree, including:
202
+ * - Top-level $ref
203
+ * - allOf, oneOf, anyOf members
204
+ * - Array items
205
+ * - Object properties
206
+ *
207
+ * @param api - The parsed OpenAPI document
208
+ * @param schema - The schema to dereference
209
+ * @returns The dereferenced schema object
210
+ */
211
+ private dereferenceSchema;
212
+ }
213
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/openapi/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,gBAAgB,EAGjB,MAAM,qBAAqB,CAAC;AAW7B;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,cAAe,YAAW,aAAa;IAClD,8BAA8B;IAC9B,QAAQ,CAAC,IAAI,EAAG,SAAS,CAAU;IAEnC;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO;IAIjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACG,OAAO,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA6BxD;;;;;;;;;;;;;;;;;;;OAmBG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IA+BlD;;;;;;;;OAQG;YACW,QAAQ;IAatB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,oBAAoB;IAoB5B;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,eAAe;IAuDvB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,kBAAkB;IAmF1B;;;;;;;;;OASG;IACH,OAAO,CAAC,oBAAoB;IA4C5B;;;;;;;;;OASG;IACH,OAAO,CAAC,cAAc;IAgCtB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,eAAe;IAsCvB;;;;;;;;;OASG;IACH,OAAO,CAAC,sBAAsB;IA+B9B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,iBAAiB;CAsE1B"}