@codeqr/ts-mcp 0.8.0 → 0.19.3
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.
- package/LICENSE +1 -1
- package/README.md +16 -218
- package/auth.d.mts +6 -0
- package/auth.d.mts.map +1 -0
- package/auth.d.ts +6 -0
- package/auth.d.ts.map +1 -0
- package/auth.js +37 -0
- package/auth.js.map +1 -0
- package/{headers.mjs → auth.mjs} +16 -2
- package/auth.mjs.map +1 -0
- package/code-tool-paths.cjs +4 -2
- package/code-tool-paths.cjs.map +1 -1
- package/code-tool-paths.d.cts +1 -1
- package/code-tool-paths.d.cts.map +1 -1
- package/code-tool-types.d.mts +7 -9
- package/code-tool-types.d.mts.map +1 -1
- package/code-tool-types.d.ts +7 -9
- package/code-tool-types.d.ts.map +1 -1
- package/code-tool-worker.d.mts.map +1 -1
- package/code-tool-worker.d.ts.map +1 -1
- package/code-tool-worker.js +95 -32
- package/code-tool-worker.js.map +1 -1
- package/code-tool-worker.mjs +95 -32
- package/code-tool-worker.mjs.map +1 -1
- package/code-tool.d.mts +12 -3
- package/code-tool.d.mts.map +1 -1
- package/code-tool.d.ts +12 -3
- package/code-tool.d.ts.map +1 -1
- package/code-tool.js +275 -109
- package/code-tool.js.map +1 -1
- package/code-tool.mjs +275 -109
- package/code-tool.mjs.map +1 -1
- package/docs-search-tool.d.mts +22 -9
- package/docs-search-tool.d.mts.map +1 -1
- package/docs-search-tool.d.ts +22 -9
- package/docs-search-tool.d.ts.map +1 -1
- package/docs-search-tool.js +31 -5
- package/docs-search-tool.js.map +1 -1
- package/docs-search-tool.mjs +31 -5
- package/docs-search-tool.mjs.map +1 -1
- package/http.d.mts +6 -3
- package/http.d.mts.map +1 -1
- package/http.d.ts +6 -3
- package/http.d.ts.map +1 -1
- package/http.js +108 -49
- package/http.js.map +1 -1
- package/http.mjs +108 -49
- package/http.mjs.map +1 -1
- package/index.js +19 -50
- package/index.js.map +1 -1
- package/index.mjs +19 -50
- package/index.mjs.map +1 -1
- package/instructions.d.mts +2 -0
- package/instructions.d.mts.map +1 -0
- package/instructions.d.ts +2 -0
- package/instructions.d.ts.map +1 -0
- package/instructions.js +42 -0
- package/instructions.js.map +1 -0
- package/instructions.mjs +39 -0
- package/instructions.mjs.map +1 -0
- package/logger.d.mts +7 -0
- package/logger.d.mts.map +1 -0
- package/logger.d.ts +7 -0
- package/logger.d.ts.map +1 -0
- package/logger.js +29 -0
- package/logger.js.map +1 -0
- package/logger.mjs +22 -0
- package/logger.mjs.map +1 -0
- package/methods.d.mts +10 -0
- package/methods.d.mts.map +1 -0
- package/methods.d.ts +10 -0
- package/methods.d.ts.map +1 -0
- package/methods.js +215 -0
- package/methods.js.map +1 -0
- package/methods.mjs +211 -0
- package/methods.mjs.map +1 -0
- package/options.d.mts +9 -9
- package/options.d.mts.map +1 -1
- package/options.d.ts +9 -9
- package/options.d.ts.map +1 -1
- package/options.js +54 -359
- package/options.js.map +1 -1
- package/options.mjs +54 -359
- package/options.mjs.map +1 -1
- package/package.json +67 -60
- package/server.d.mts +11 -16
- package/server.d.mts.map +1 -1
- package/server.d.ts +11 -16
- package/server.d.ts.map +1 -1
- package/server.js +86 -101
- package/server.js.map +1 -1
- package/server.mjs +85 -96
- package/server.mjs.map +1 -1
- package/src/{headers.ts → auth.ts} +18 -1
- package/src/code-tool-paths.cts +3 -1
- package/src/code-tool-types.ts +8 -9
- package/src/code-tool-worker.ts +110 -47
- package/src/code-tool.ts +362 -134
- package/src/docs-search-tool.ts +54 -6
- package/src/http.ts +128 -54
- package/src/index.ts +22 -63
- package/src/instructions.ts +60 -0
- package/src/logger.ts +28 -0
- package/src/methods.ts +236 -0
- package/src/options.ts +72 -384
- package/src/server.ts +99 -116
- package/src/stdio.ts +6 -5
- package/src/{tools/types.ts → types.ts} +14 -5
- package/src/util.ts +25 -0
- package/stdio.d.mts +1 -1
- package/stdio.d.mts.map +1 -1
- package/stdio.d.ts +1 -1
- package/stdio.d.ts.map +1 -1
- package/stdio.js +5 -4
- package/stdio.js.map +1 -1
- package/stdio.mjs +5 -4
- package/stdio.mjs.map +1 -1
- package/{tools/types.d.mts → types.d.mts} +10 -2
- package/types.d.mts.map +1 -0
- package/{tools/types.d.ts → types.d.ts} +10 -2
- package/types.d.ts.map +1 -0
- package/types.js.map +1 -0
- package/types.mjs.map +1 -0
- package/util.d.mts +4 -0
- package/util.d.mts.map +1 -0
- package/util.d.ts +4 -0
- package/util.d.ts.map +1 -0
- package/util.js +30 -0
- package/util.js.map +1 -0
- package/util.mjs +24 -0
- package/util.mjs.map +1 -0
- package/compat.d.mts +0 -58
- package/compat.d.mts.map +0 -1
- package/compat.d.ts +0 -58
- package/compat.d.ts.map +0 -1
- package/compat.js +0 -387
- package/compat.js.map +0 -1
- package/compat.mjs +0 -378
- package/compat.mjs.map +0 -1
- package/dynamic-tools.d.mts +0 -12
- package/dynamic-tools.d.mts.map +0 -1
- package/dynamic-tools.d.ts +0 -12
- package/dynamic-tools.d.ts.map +0 -1
- package/dynamic-tools.js +0 -135
- package/dynamic-tools.js.map +0 -1
- package/dynamic-tools.mjs +0 -132
- package/dynamic-tools.mjs.map +0 -1
- package/filtering.d.mts +0 -3
- package/filtering.d.mts.map +0 -1
- package/filtering.d.ts +0 -3
- package/filtering.d.ts.map +0 -1
- package/filtering.js +0 -24
- package/filtering.js.map +0 -1
- package/filtering.mjs +0 -16
- package/filtering.mjs.map +0 -1
- package/headers.d.mts +0 -4
- package/headers.d.mts.map +0 -1
- package/headers.d.ts +0 -4
- package/headers.d.ts.map +0 -1
- package/headers.js +0 -22
- package/headers.js.map +0 -1
- package/headers.mjs.map +0 -1
- package/src/compat.ts +0 -483
- package/src/dynamic-tools.ts +0 -153
- package/src/filtering.ts +0 -18
- package/src/tools/analytics/retrieve-analytics.ts +0 -441
- package/src/tools/domains/create-domains.ts +0 -75
- package/src/tools/domains/delete-domains.ts +0 -55
- package/src/tools/domains/list-domains.ts +0 -68
- package/src/tools/domains/update-domains.ts +0 -79
- package/src/tools/events/list-events.ts +0 -421
- package/src/tools/index.ts +0 -133
- package/src/tools/links/bulk/create-links-bulk.ts +0 -966
- package/src/tools/links/bulk/delete-links-bulk.ts +0 -59
- package/src/tools/links/count-links.ts +0 -957
- package/src/tools/links/create-links.ts +0 -957
- package/src/tools/links/delete-links.ts +0 -56
- package/src/tools/links/list-links.ts +0 -980
- package/src/tools/links/retrieve-info-links.ts +0 -75
- package/src/tools/links/update-links.ts +0 -964
- package/src/tools/links/upsert-links.ts +0 -958
- package/src/tools/projects/list-projects.ts +0 -51
- package/src/tools/projects/retrieve-projects.ts +0 -56
- package/src/tools/qrcodes/bulk/create-qrcodes-bulk.ts +0 -1077
- package/src/tools/qrcodes/bulk/delete-qrcodes-bulk.ts +0 -59
- package/src/tools/qrcodes/count-qrcodes.ts +0 -220
- package/src/tools/qrcodes/create-qrcodes.ts +0 -1067
- package/src/tools/qrcodes/delete-qrcodes.ts +0 -56
- package/src/tools/qrcodes/list-qrcodes.ts +0 -221
- package/src/tools/qrcodes/retrieve-qrcodes.ts +0 -67
- package/src/tools/qrcodes/update-qrcodes.ts +0 -1074
- package/src/tools/qrcodes/upsert-qrcodes.ts +0 -1068
- package/src/tools/tags/create-tags.ts +0 -59
- package/src/tools/tags/delete-tags.ts +0 -55
- package/src/tools/tags/list-tags.ts +0 -87
- package/src/tools/tags/update-tags.ts +0 -63
- package/src/tools/track/track-lead-track.ts +0 -93
- package/src/tools/track/track-sale-track.ts +0 -108
- package/src/tools.ts +0 -1
- package/tools/analytics/retrieve-analytics.d.mts +0 -45
- package/tools/analytics/retrieve-analytics.d.mts.map +0 -1
- package/tools/analytics/retrieve-analytics.d.ts +0 -45
- package/tools/analytics/retrieve-analytics.d.ts.map +0 -1
- package/tools/analytics/retrieve-analytics.js +0 -438
- package/tools/analytics/retrieve-analytics.js.map +0 -1
- package/tools/analytics/retrieve-analytics.mjs +0 -431
- package/tools/analytics/retrieve-analytics.mjs.map +0 -1
- package/tools/domains/create-domains.d.mts +0 -45
- package/tools/domains/create-domains.d.mts.map +0 -1
- package/tools/domains/create-domains.d.ts +0 -45
- package/tools/domains/create-domains.d.ts.map +0 -1
- package/tools/domains/create-domains.js +0 -74
- package/tools/domains/create-domains.js.map +0 -1
- package/tools/domains/create-domains.mjs +0 -67
- package/tools/domains/create-domains.mjs.map +0 -1
- package/tools/domains/delete-domains.d.mts +0 -45
- package/tools/domains/delete-domains.d.mts.map +0 -1
- package/tools/domains/delete-domains.d.ts +0 -45
- package/tools/domains/delete-domains.d.ts.map +0 -1
- package/tools/domains/delete-domains.js +0 -55
- package/tools/domains/delete-domains.js.map +0 -1
- package/tools/domains/delete-domains.mjs +0 -48
- package/tools/domains/delete-domains.mjs.map +0 -1
- package/tools/domains/list-domains.d.mts +0 -45
- package/tools/domains/list-domains.d.mts.map +0 -1
- package/tools/domains/list-domains.d.ts +0 -45
- package/tools/domains/list-domains.d.ts.map +0 -1
- package/tools/domains/list-domains.js +0 -67
- package/tools/domains/list-domains.js.map +0 -1
- package/tools/domains/list-domains.mjs +0 -60
- package/tools/domains/list-domains.mjs.map +0 -1
- package/tools/domains/update-domains.d.mts +0 -45
- package/tools/domains/update-domains.d.mts.map +0 -1
- package/tools/domains/update-domains.d.ts +0 -45
- package/tools/domains/update-domains.d.ts.map +0 -1
- package/tools/domains/update-domains.js +0 -78
- package/tools/domains/update-domains.js.map +0 -1
- package/tools/domains/update-domains.mjs +0 -71
- package/tools/domains/update-domains.mjs.map +0 -1
- package/tools/events/list-events.d.mts +0 -45
- package/tools/events/list-events.d.mts.map +0 -1
- package/tools/events/list-events.d.ts +0 -45
- package/tools/events/list-events.d.ts.map +0 -1
- package/tools/events/list-events.js +0 -418
- package/tools/events/list-events.js.map +0 -1
- package/tools/events/list-events.mjs +0 -411
- package/tools/events/list-events.mjs.map +0 -1
- package/tools/index.d.mts +0 -10
- package/tools/index.d.mts.map +0 -1
- package/tools/index.d.ts +0 -10
- package/tools/index.d.ts.map +0 -1
- package/tools/index.js +0 -117
- package/tools/index.js.map +0 -1
- package/tools/index.mjs +0 -110
- package/tools/index.mjs.map +0 -1
- package/tools/links/bulk/create-links-bulk.d.mts +0 -45
- package/tools/links/bulk/create-links-bulk.d.mts.map +0 -1
- package/tools/links/bulk/create-links-bulk.d.ts +0 -45
- package/tools/links/bulk/create-links-bulk.d.ts.map +0 -1
- package/tools/links/bulk/create-links-bulk.js +0 -956
- package/tools/links/bulk/create-links-bulk.js.map +0 -1
- package/tools/links/bulk/create-links-bulk.mjs +0 -949
- package/tools/links/bulk/create-links-bulk.mjs.map +0 -1
- package/tools/links/bulk/delete-links-bulk.d.mts +0 -45
- package/tools/links/bulk/delete-links-bulk.d.mts.map +0 -1
- package/tools/links/bulk/delete-links-bulk.d.ts +0 -45
- package/tools/links/bulk/delete-links-bulk.d.ts.map +0 -1
- package/tools/links/bulk/delete-links-bulk.js +0 -58
- package/tools/links/bulk/delete-links-bulk.js.map +0 -1
- package/tools/links/bulk/delete-links-bulk.mjs +0 -51
- package/tools/links/bulk/delete-links-bulk.mjs.map +0 -1
- package/tools/links/count-links.d.mts +0 -45
- package/tools/links/count-links.d.mts.map +0 -1
- package/tools/links/count-links.d.ts +0 -45
- package/tools/links/count-links.d.ts.map +0 -1
- package/tools/links/count-links.js +0 -951
- package/tools/links/count-links.js.map +0 -1
- package/tools/links/count-links.mjs +0 -944
- package/tools/links/count-links.mjs.map +0 -1
- package/tools/links/create-links.d.mts +0 -45
- package/tools/links/create-links.d.mts.map +0 -1
- package/tools/links/create-links.d.ts +0 -45
- package/tools/links/create-links.d.ts.map +0 -1
- package/tools/links/create-links.js +0 -947
- package/tools/links/create-links.js.map +0 -1
- package/tools/links/create-links.mjs +0 -940
- package/tools/links/create-links.mjs.map +0 -1
- package/tools/links/delete-links.d.mts +0 -45
- package/tools/links/delete-links.d.mts.map +0 -1
- package/tools/links/delete-links.d.ts +0 -45
- package/tools/links/delete-links.d.ts.map +0 -1
- package/tools/links/delete-links.js +0 -55
- package/tools/links/delete-links.js.map +0 -1
- package/tools/links/delete-links.mjs +0 -48
- package/tools/links/delete-links.mjs.map +0 -1
- package/tools/links/list-links.d.mts +0 -45
- package/tools/links/list-links.d.mts.map +0 -1
- package/tools/links/list-links.d.ts +0 -45
- package/tools/links/list-links.d.ts.map +0 -1
- package/tools/links/list-links.js +0 -973
- package/tools/links/list-links.js.map +0 -1
- package/tools/links/list-links.mjs +0 -966
- package/tools/links/list-links.mjs.map +0 -1
- package/tools/links/retrieve-info-links.d.mts +0 -45
- package/tools/links/retrieve-info-links.d.mts.map +0 -1
- package/tools/links/retrieve-info-links.d.ts +0 -45
- package/tools/links/retrieve-info-links.d.ts.map +0 -1
- package/tools/links/retrieve-info-links.js +0 -71
- package/tools/links/retrieve-info-links.js.map +0 -1
- package/tools/links/retrieve-info-links.mjs +0 -64
- package/tools/links/retrieve-info-links.mjs.map +0 -1
- package/tools/links/update-links.d.mts +0 -45
- package/tools/links/update-links.d.mts.map +0 -1
- package/tools/links/update-links.d.ts +0 -45
- package/tools/links/update-links.d.ts.map +0 -1
- package/tools/links/update-links.js +0 -953
- package/tools/links/update-links.js.map +0 -1
- package/tools/links/update-links.mjs +0 -946
- package/tools/links/update-links.mjs.map +0 -1
- package/tools/links/upsert-links.d.mts +0 -45
- package/tools/links/upsert-links.d.mts.map +0 -1
- package/tools/links/upsert-links.d.ts +0 -45
- package/tools/links/upsert-links.d.ts.map +0 -1
- package/tools/links/upsert-links.js +0 -947
- package/tools/links/upsert-links.js.map +0 -1
- package/tools/links/upsert-links.mjs +0 -940
- package/tools/links/upsert-links.mjs.map +0 -1
- package/tools/projects/list-projects.d.mts +0 -45
- package/tools/projects/list-projects.d.mts.map +0 -1
- package/tools/projects/list-projects.d.ts +0 -45
- package/tools/projects/list-projects.d.ts.map +0 -1
- package/tools/projects/list-projects.js +0 -51
- package/tools/projects/list-projects.js.map +0 -1
- package/tools/projects/list-projects.mjs +0 -44
- package/tools/projects/list-projects.mjs.map +0 -1
- package/tools/projects/retrieve-projects.d.mts +0 -45
- package/tools/projects/retrieve-projects.d.mts.map +0 -1
- package/tools/projects/retrieve-projects.d.ts +0 -45
- package/tools/projects/retrieve-projects.d.ts.map +0 -1
- package/tools/projects/retrieve-projects.js +0 -55
- package/tools/projects/retrieve-projects.js.map +0 -1
- package/tools/projects/retrieve-projects.mjs +0 -48
- package/tools/projects/retrieve-projects.mjs.map +0 -1
- package/tools/qrcodes/bulk/create-qrcodes-bulk.d.mts +0 -45
- package/tools/qrcodes/bulk/create-qrcodes-bulk.d.mts.map +0 -1
- package/tools/qrcodes/bulk/create-qrcodes-bulk.d.ts +0 -45
- package/tools/qrcodes/bulk/create-qrcodes-bulk.d.ts.map +0 -1
- package/tools/qrcodes/bulk/create-qrcodes-bulk.js +0 -1068
- package/tools/qrcodes/bulk/create-qrcodes-bulk.js.map +0 -1
- package/tools/qrcodes/bulk/create-qrcodes-bulk.mjs +0 -1061
- package/tools/qrcodes/bulk/create-qrcodes-bulk.mjs.map +0 -1
- package/tools/qrcodes/bulk/delete-qrcodes-bulk.d.mts +0 -45
- package/tools/qrcodes/bulk/delete-qrcodes-bulk.d.mts.map +0 -1
- package/tools/qrcodes/bulk/delete-qrcodes-bulk.d.ts +0 -45
- package/tools/qrcodes/bulk/delete-qrcodes-bulk.d.ts.map +0 -1
- package/tools/qrcodes/bulk/delete-qrcodes-bulk.js +0 -58
- package/tools/qrcodes/bulk/delete-qrcodes-bulk.js.map +0 -1
- package/tools/qrcodes/bulk/delete-qrcodes-bulk.mjs +0 -51
- package/tools/qrcodes/bulk/delete-qrcodes-bulk.mjs.map +0 -1
- package/tools/qrcodes/count-qrcodes.d.mts +0 -45
- package/tools/qrcodes/count-qrcodes.d.mts.map +0 -1
- package/tools/qrcodes/count-qrcodes.d.ts +0 -45
- package/tools/qrcodes/count-qrcodes.d.ts.map +0 -1
- package/tools/qrcodes/count-qrcodes.js +0 -215
- package/tools/qrcodes/count-qrcodes.js.map +0 -1
- package/tools/qrcodes/count-qrcodes.mjs +0 -208
- package/tools/qrcodes/count-qrcodes.mjs.map +0 -1
- package/tools/qrcodes/create-qrcodes.d.mts +0 -45
- package/tools/qrcodes/create-qrcodes.d.mts.map +0 -1
- package/tools/qrcodes/create-qrcodes.d.ts +0 -45
- package/tools/qrcodes/create-qrcodes.d.ts.map +0 -1
- package/tools/qrcodes/create-qrcodes.js +0 -1059
- package/tools/qrcodes/create-qrcodes.js.map +0 -1
- package/tools/qrcodes/create-qrcodes.mjs +0 -1052
- package/tools/qrcodes/create-qrcodes.mjs.map +0 -1
- package/tools/qrcodes/delete-qrcodes.d.mts +0 -45
- package/tools/qrcodes/delete-qrcodes.d.mts.map +0 -1
- package/tools/qrcodes/delete-qrcodes.d.ts +0 -45
- package/tools/qrcodes/delete-qrcodes.d.ts.map +0 -1
- package/tools/qrcodes/delete-qrcodes.js +0 -55
- package/tools/qrcodes/delete-qrcodes.js.map +0 -1
- package/tools/qrcodes/delete-qrcodes.mjs +0 -48
- package/tools/qrcodes/delete-qrcodes.mjs.map +0 -1
- package/tools/qrcodes/list-qrcodes.d.mts +0 -45
- package/tools/qrcodes/list-qrcodes.d.mts.map +0 -1
- package/tools/qrcodes/list-qrcodes.d.ts +0 -45
- package/tools/qrcodes/list-qrcodes.d.ts.map +0 -1
- package/tools/qrcodes/list-qrcodes.js +0 -217
- package/tools/qrcodes/list-qrcodes.js.map +0 -1
- package/tools/qrcodes/list-qrcodes.mjs +0 -210
- package/tools/qrcodes/list-qrcodes.mjs.map +0 -1
- package/tools/qrcodes/retrieve-qrcodes.d.mts +0 -45
- package/tools/qrcodes/retrieve-qrcodes.d.mts.map +0 -1
- package/tools/qrcodes/retrieve-qrcodes.d.ts +0 -45
- package/tools/qrcodes/retrieve-qrcodes.d.ts.map +0 -1
- package/tools/qrcodes/retrieve-qrcodes.js +0 -65
- package/tools/qrcodes/retrieve-qrcodes.js.map +0 -1
- package/tools/qrcodes/retrieve-qrcodes.mjs +0 -58
- package/tools/qrcodes/retrieve-qrcodes.mjs.map +0 -1
- package/tools/qrcodes/update-qrcodes.d.mts +0 -45
- package/tools/qrcodes/update-qrcodes.d.mts.map +0 -1
- package/tools/qrcodes/update-qrcodes.d.ts +0 -45
- package/tools/qrcodes/update-qrcodes.d.ts.map +0 -1
- package/tools/qrcodes/update-qrcodes.js +0 -1065
- package/tools/qrcodes/update-qrcodes.js.map +0 -1
- package/tools/qrcodes/update-qrcodes.mjs +0 -1058
- package/tools/qrcodes/update-qrcodes.mjs.map +0 -1
- package/tools/qrcodes/upsert-qrcodes.d.mts +0 -45
- package/tools/qrcodes/upsert-qrcodes.d.mts.map +0 -1
- package/tools/qrcodes/upsert-qrcodes.d.ts +0 -45
- package/tools/qrcodes/upsert-qrcodes.d.ts.map +0 -1
- package/tools/qrcodes/upsert-qrcodes.js +0 -1059
- package/tools/qrcodes/upsert-qrcodes.js.map +0 -1
- package/tools/qrcodes/upsert-qrcodes.mjs +0 -1052
- package/tools/qrcodes/upsert-qrcodes.mjs.map +0 -1
- package/tools/tags/create-tags.d.mts +0 -45
- package/tools/tags/create-tags.d.mts.map +0 -1
- package/tools/tags/create-tags.d.ts +0 -45
- package/tools/tags/create-tags.d.ts.map +0 -1
- package/tools/tags/create-tags.js +0 -58
- package/tools/tags/create-tags.js.map +0 -1
- package/tools/tags/create-tags.mjs +0 -51
- package/tools/tags/create-tags.mjs.map +0 -1
- package/tools/tags/delete-tags.d.mts +0 -45
- package/tools/tags/delete-tags.d.mts.map +0 -1
- package/tools/tags/delete-tags.d.ts +0 -45
- package/tools/tags/delete-tags.d.ts.map +0 -1
- package/tools/tags/delete-tags.js +0 -55
- package/tools/tags/delete-tags.js.map +0 -1
- package/tools/tags/delete-tags.mjs +0 -48
- package/tools/tags/delete-tags.mjs.map +0 -1
- package/tools/tags/list-tags.d.mts +0 -45
- package/tools/tags/list-tags.d.mts.map +0 -1
- package/tools/tags/list-tags.d.ts +0 -45
- package/tools/tags/list-tags.d.ts.map +0 -1
- package/tools/tags/list-tags.js +0 -87
- package/tools/tags/list-tags.js.map +0 -1
- package/tools/tags/list-tags.mjs +0 -80
- package/tools/tags/list-tags.mjs.map +0 -1
- package/tools/tags/update-tags.d.mts +0 -45
- package/tools/tags/update-tags.d.mts.map +0 -1
- package/tools/tags/update-tags.d.ts +0 -45
- package/tools/tags/update-tags.d.ts.map +0 -1
- package/tools/tags/update-tags.js +0 -63
- package/tools/tags/update-tags.js.map +0 -1
- package/tools/tags/update-tags.mjs +0 -56
- package/tools/tags/update-tags.mjs.map +0 -1
- package/tools/track/track-lead-track.d.mts +0 -45
- package/tools/track/track-lead-track.d.mts.map +0 -1
- package/tools/track/track-lead-track.d.ts +0 -45
- package/tools/track/track-lead-track.d.ts.map +0 -1
- package/tools/track/track-lead-track.js +0 -87
- package/tools/track/track-lead-track.js.map +0 -1
- package/tools/track/track-lead-track.mjs +0 -80
- package/tools/track/track-lead-track.mjs.map +0 -1
- package/tools/track/track-sale-track.d.mts +0 -45
- package/tools/track/track-sale-track.d.mts.map +0 -1
- package/tools/track/track-sale-track.d.ts +0 -45
- package/tools/track/track-sale-track.d.ts.map +0 -1
- package/tools/track/track-sale-track.js +0 -99
- package/tools/track/track-sale-track.js.map +0 -1
- package/tools/track/track-sale-track.mjs +0 -92
- package/tools/track/track-sale-track.mjs.map +0 -1
- package/tools/types.d.mts.map +0 -1
- package/tools/types.d.ts.map +0 -1
- package/tools/types.js.map +0 -1
- package/tools/types.mjs.map +0 -1
- package/tools.d.mts +0 -2
- package/tools.d.mts.map +0 -1
- package/tools.d.ts +0 -2
- package/tools.d.ts.map +0 -1
- package/tools.js +0 -18
- package/tools.js.map +0 -1
- package/tools.mjs +0 -2
- package/tools.mjs.map +0 -1
- /package/{tools/types.js → types.js} +0 -0
- /package/{tools/types.mjs → types.mjs} +0 -0
package/docs-search-tool.js
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.handler = exports.tool = exports.metadata = void 0;
|
|
5
|
-
const types_1 = require("./
|
|
5
|
+
const types_1 = require("./types.js");
|
|
6
|
+
const logger_1 = require("./logger.js");
|
|
6
7
|
exports.metadata = {
|
|
7
8
|
resource: 'all',
|
|
8
9
|
operation: 'read',
|
|
@@ -11,7 +12,7 @@ exports.metadata = {
|
|
|
11
12
|
};
|
|
12
13
|
exports.tool = {
|
|
13
14
|
name: 'search_docs',
|
|
14
|
-
description: 'Search
|
|
15
|
+
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.',
|
|
15
16
|
inputSchema: {
|
|
16
17
|
type: 'object',
|
|
17
18
|
properties: {
|
|
@@ -37,11 +38,36 @@ exports.tool = {
|
|
|
37
38
|
},
|
|
38
39
|
};
|
|
39
40
|
const docsSearchURL = process.env['DOCS_SEARCH_URL'] || 'https://api.stainless.com/api/projects/codeqr/docs/search';
|
|
40
|
-
const handler = async (
|
|
41
|
+
const handler = async ({ reqContext, args, }) => {
|
|
41
42
|
const body = args;
|
|
42
43
|
const query = new URLSearchParams(body).toString();
|
|
43
|
-
const
|
|
44
|
-
|
|
44
|
+
const startTime = Date.now();
|
|
45
|
+
const result = await fetch(`${docsSearchURL}?${query}`, {
|
|
46
|
+
headers: {
|
|
47
|
+
...(reqContext.stainlessApiKey && { Authorization: reqContext.stainlessApiKey }),
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
const logger = (0, logger_1.getLogger)();
|
|
51
|
+
if (!result.ok) {
|
|
52
|
+
const errorText = await result.text();
|
|
53
|
+
logger.warn({
|
|
54
|
+
durationMs: Date.now() - startTime,
|
|
55
|
+
query: body.query,
|
|
56
|
+
status: result.status,
|
|
57
|
+
statusText: result.statusText,
|
|
58
|
+
errorText,
|
|
59
|
+
}, 'Got error response from docs search tool');
|
|
60
|
+
if (result.status === 404 && !reqContext.stainlessApiKey) {
|
|
61
|
+
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.');
|
|
62
|
+
}
|
|
63
|
+
throw new Error(`${result.status}: ${result.statusText} when using doc search tool. Details: ${errorText}`);
|
|
64
|
+
}
|
|
65
|
+
const resultBody = await result.json();
|
|
66
|
+
logger.info({
|
|
67
|
+
durationMs: Date.now() - startTime,
|
|
68
|
+
query: body.query,
|
|
69
|
+
}, 'Got docs search result');
|
|
70
|
+
return (0, types_1.asTextContentResult)(resultBody);
|
|
45
71
|
};
|
|
46
72
|
exports.handler = handler;
|
|
47
73
|
exports.default = { metadata: exports.metadata, tool: exports.tool, handler: exports.handler };
|
package/docs-search-tool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs-search-tool.js","sourceRoot":"","sources":["src/docs-search-tool.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;
|
|
1
|
+
{"version":3,"file":"docs-search-tool.js","sourceRoot":"","sources":["src/docs-search-tool.ts"],"names":[],"mappings":"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"}
|
package/docs-search-tool.mjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
-
import { asTextContentResult } from "./
|
|
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
|
|
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: {
|
|
@@ -34,11 +35,36 @@ export const tool = {
|
|
|
34
35
|
},
|
|
35
36
|
};
|
|
36
37
|
const docsSearchURL = process.env['DOCS_SEARCH_URL'] || 'https://api.stainless.com/api/projects/codeqr/docs/search';
|
|
37
|
-
export const handler = async (
|
|
38
|
+
export const handler = async ({ reqContext, args, }) => {
|
|
38
39
|
const body = args;
|
|
39
40
|
const query = new URLSearchParams(body).toString();
|
|
40
|
-
const
|
|
41
|
-
|
|
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);
|
|
42
68
|
};
|
|
43
69
|
export default { metadata, tool, handler };
|
|
44
70
|
//# sourceMappingURL=docs-search-tool.mjs.map
|
package/docs-search-tool.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs-search-tool.mjs","sourceRoot":"","sources":["src/docs-search-tool.ts"],"names":[],"mappings":"AAAA,sFAAsF;
|
|
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,9 +1,12 @@
|
|
|
1
|
+
import { ClientOptions } from '@codeqr/ts';
|
|
1
2
|
import express from 'express';
|
|
2
3
|
import { McpOptions } from "./options.mjs";
|
|
3
|
-
import { ClientOptions } from "./server.mjs";
|
|
4
4
|
export declare const streamableHTTPApp: ({ clientOptions, mcpOptions, }: {
|
|
5
5
|
clientOptions?: ClientOptions;
|
|
6
|
-
mcpOptions
|
|
6
|
+
mcpOptions: McpOptions;
|
|
7
7
|
}) => express.Express;
|
|
8
|
-
export declare const launchStreamableHTTPServer: (
|
|
8
|
+
export declare const launchStreamableHTTPServer: ({ mcpOptions, port, }: {
|
|
9
|
+
mcpOptions: McpOptions;
|
|
10
|
+
port: number | string | undefined;
|
|
11
|
+
}) => Promise<void>;
|
|
9
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":"
|
|
1
|
+
{"version":3,"file":"http.d.mts","sourceRoot":"","sources":["src/http.ts"],"names":[],"mappings":"OAIO,EAAE,aAAa,EAAE,MAAM,YAAY;OACnC,OAAO,MAAM,SAAS;OAKtB,EAAE,UAAU,EAAE;AAoHrB,eAAO,MAAM,iBAAiB,GAAI,gCAG/B;IACD,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,EAAE,UAAU,CAAC;CACxB,KAAG,OAAO,CAAC,OA8CX,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,9 +1,12 @@
|
|
|
1
|
+
import { ClientOptions } from '@codeqr/ts';
|
|
1
2
|
import express from 'express';
|
|
2
3
|
import { McpOptions } from "./options.js";
|
|
3
|
-
import { ClientOptions } from "./server.js";
|
|
4
4
|
export declare const streamableHTTPApp: ({ clientOptions, mcpOptions, }: {
|
|
5
5
|
clientOptions?: ClientOptions;
|
|
6
|
-
mcpOptions
|
|
6
|
+
mcpOptions: McpOptions;
|
|
7
7
|
}) => express.Express;
|
|
8
|
-
export declare const launchStreamableHTTPServer: (
|
|
8
|
+
export declare const launchStreamableHTTPServer: ({ mcpOptions, port, }: {
|
|
9
|
+
mcpOptions: McpOptions;
|
|
10
|
+
port: number | string | undefined;
|
|
11
|
+
}) => Promise<void>;
|
|
9
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":"
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["src/http.ts"],"names":[],"mappings":"OAIO,EAAE,aAAa,EAAE,MAAM,YAAY;OACnC,OAAO,MAAM,SAAS;OAKtB,EAAE,UAAU,EAAE;AAoHrB,eAAO,MAAM,iBAAiB,GAAI,gCAG/B;IACD,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,EAAE,UAAU,CAAC;CACxB,KAAG,OAAO,CAAC,OA8CX,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
|
@@ -7,58 +7,71 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
7
7
|
exports.launchStreamableHTTPServer = exports.streamableHTTPApp = void 0;
|
|
8
8
|
const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamableHttp.js");
|
|
9
9
|
const express_1 = __importDefault(require("express"));
|
|
10
|
-
const
|
|
11
|
-
const
|
|
10
|
+
const pino_1 = __importDefault(require("pino"));
|
|
11
|
+
const pino_http_1 = __importDefault(require("pino-http"));
|
|
12
|
+
const auth_1 = require("./auth.js");
|
|
13
|
+
const logger_1 = require("./logger.js");
|
|
12
14
|
const server_1 = require("./server.js");
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const server = (0, server_1.newMcpServer)();
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
const newServer = async ({ clientOptions, mcpOptions, req, res, }) => {
|
|
16
|
+
const stainlessApiKey = (0, auth_1.getStainlessApiKey)(req, mcpOptions);
|
|
17
|
+
const server = await (0, server_1.newMcpServer)(stainlessApiKey);
|
|
18
|
+
const authOptions = (0, auth_1.parseClientAuthHeaders)(req, false);
|
|
19
|
+
let upstreamClientEnvs;
|
|
20
|
+
const clientEnvsHeader = req.headers['x-stainless-mcp-client-envs'];
|
|
21
|
+
if (typeof clientEnvsHeader === 'string') {
|
|
22
|
+
try {
|
|
23
|
+
const parsed = JSON.parse(clientEnvsHeader);
|
|
24
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
25
|
+
upstreamClientEnvs = parsed;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// Ignore malformed header
|
|
30
|
+
}
|
|
19
31
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
error: {
|
|
45
|
-
code: -32000,
|
|
46
|
-
message: `Unauthorized: ${error instanceof Error ? error.message : error}`,
|
|
47
|
-
},
|
|
48
|
-
});
|
|
49
|
-
return null;
|
|
32
|
+
// Parse x-stainless-mcp-client-permissions header to override permission options
|
|
33
|
+
//
|
|
34
|
+
// Note: Permissions are best-effort and intended to prevent clients from doing unexpected things;
|
|
35
|
+
// they're not a hard security boundary, so we allow arbitrary, client-driven overrides.
|
|
36
|
+
//
|
|
37
|
+
// See the Stainless MCP documentation for more details.
|
|
38
|
+
let effectiveMcpOptions = mcpOptions;
|
|
39
|
+
const clientPermissionsHeader = req.headers['x-stainless-mcp-client-permissions'];
|
|
40
|
+
if (typeof clientPermissionsHeader === 'string') {
|
|
41
|
+
try {
|
|
42
|
+
const parsed = JSON.parse(clientPermissionsHeader);
|
|
43
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
44
|
+
effectiveMcpOptions = {
|
|
45
|
+
...mcpOptions,
|
|
46
|
+
...(typeof parsed.allow_http_gets === 'boolean' && { codeAllowHttpGets: parsed.allow_http_gets }),
|
|
47
|
+
...(Array.isArray(parsed.allowed_methods) && { codeAllowedMethods: parsed.allowed_methods }),
|
|
48
|
+
...(Array.isArray(parsed.blocked_methods) && { codeBlockedMethods: parsed.blocked_methods }),
|
|
49
|
+
};
|
|
50
|
+
(0, logger_1.getLogger)().info({ clientPermissions: parsed }, 'Overriding code execution permissions from x-stainless-mcp-client-permissions header');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
(0, logger_1.getLogger)().warn({ error }, 'Failed to parse x-stainless-mcp-client-permissions header');
|
|
55
|
+
}
|
|
50
56
|
}
|
|
57
|
+
await (0, server_1.initMcpServer)({
|
|
58
|
+
server: server,
|
|
59
|
+
mcpOptions: effectiveMcpOptions,
|
|
60
|
+
clientOptions: {
|
|
61
|
+
...clientOptions,
|
|
62
|
+
...authOptions,
|
|
63
|
+
},
|
|
64
|
+
stainlessApiKey: stainlessApiKey,
|
|
65
|
+
upstreamClientEnvs,
|
|
66
|
+
});
|
|
51
67
|
return server;
|
|
52
68
|
};
|
|
53
69
|
const post = (options) => async (req, res) => {
|
|
54
|
-
const server = newServer({ ...options, req, res });
|
|
70
|
+
const server = await newServer({ ...options, req, res });
|
|
55
71
|
// If we return null, we already set the authorization error.
|
|
56
72
|
if (server === null)
|
|
57
73
|
return;
|
|
58
|
-
const transport = new streamableHttp_js_1.StreamableHTTPServerTransport(
|
|
59
|
-
// Stateless server
|
|
60
|
-
sessionIdGenerator: undefined,
|
|
61
|
-
});
|
|
74
|
+
const transport = new streamableHttp_js_1.StreamableHTTPServerTransport();
|
|
62
75
|
await server.connect(transport);
|
|
63
76
|
await transport.handleRequest(req, res, req.body);
|
|
64
77
|
};
|
|
@@ -80,28 +93,74 @@ const del = async (req, res) => {
|
|
|
80
93
|
},
|
|
81
94
|
});
|
|
82
95
|
};
|
|
83
|
-
const
|
|
96
|
+
const redactHeaders = (headers) => {
|
|
97
|
+
const hiddenHeaders = /auth|cookie|key|token|x-stainless-mcp-client-envs/i;
|
|
98
|
+
const filtered = { ...headers };
|
|
99
|
+
Object.keys(filtered).forEach((key) => {
|
|
100
|
+
if (hiddenHeaders.test(key)) {
|
|
101
|
+
filtered[key] = '[REDACTED]';
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
return filtered;
|
|
105
|
+
};
|
|
106
|
+
const streamableHTTPApp = ({ clientOptions = {}, mcpOptions, }) => {
|
|
84
107
|
const app = (0, express_1.default)();
|
|
85
108
|
app.set('query parser', 'extended');
|
|
86
109
|
app.use(express_1.default.json());
|
|
110
|
+
app.use((0, pino_http_1.default)({
|
|
111
|
+
logger: (0, logger_1.getLogger)(),
|
|
112
|
+
customLogLevel: (req, res) => {
|
|
113
|
+
if (res.statusCode >= 500) {
|
|
114
|
+
return 'error';
|
|
115
|
+
}
|
|
116
|
+
else if (res.statusCode >= 400) {
|
|
117
|
+
return 'warn';
|
|
118
|
+
}
|
|
119
|
+
return 'info';
|
|
120
|
+
},
|
|
121
|
+
customSuccessMessage: function (req, res) {
|
|
122
|
+
return `Request ${req.method} to ${req.url} completed with status ${res.statusCode}`;
|
|
123
|
+
},
|
|
124
|
+
customErrorMessage: function (req, res, err) {
|
|
125
|
+
return `Request ${req.method} to ${req.url} errored with status ${res.statusCode}`;
|
|
126
|
+
},
|
|
127
|
+
serializers: {
|
|
128
|
+
req: pino_1.default.stdSerializers.wrapRequestSerializer((req) => {
|
|
129
|
+
return {
|
|
130
|
+
...req,
|
|
131
|
+
headers: redactHeaders(req.raw.headers),
|
|
132
|
+
};
|
|
133
|
+
}),
|
|
134
|
+
res: pino_1.default.stdSerializers.wrapResponseSerializer((res) => {
|
|
135
|
+
return {
|
|
136
|
+
...res,
|
|
137
|
+
headers: redactHeaders(res.headers),
|
|
138
|
+
};
|
|
139
|
+
}),
|
|
140
|
+
},
|
|
141
|
+
}));
|
|
142
|
+
app.get('/health', async (req, res) => {
|
|
143
|
+
res.status(200).send('OK');
|
|
144
|
+
});
|
|
87
145
|
app.get('/', get);
|
|
88
146
|
app.post('/', post({ clientOptions, mcpOptions }));
|
|
89
147
|
app.delete('/', del);
|
|
90
148
|
return app;
|
|
91
149
|
};
|
|
92
150
|
exports.streamableHTTPApp = streamableHTTPApp;
|
|
93
|
-
const launchStreamableHTTPServer = async (
|
|
94
|
-
const app = (0, exports.streamableHTTPApp)({ mcpOptions
|
|
151
|
+
const launchStreamableHTTPServer = async ({ mcpOptions, port, }) => {
|
|
152
|
+
const app = (0, exports.streamableHTTPApp)({ mcpOptions });
|
|
95
153
|
const server = app.listen(port);
|
|
96
154
|
const address = server.address();
|
|
155
|
+
const logger = (0, logger_1.getLogger)();
|
|
97
156
|
if (typeof address === 'string') {
|
|
98
|
-
|
|
157
|
+
logger.info(`MCP Server running on streamable HTTP at ${address}`);
|
|
99
158
|
}
|
|
100
159
|
else if (address !== null) {
|
|
101
|
-
|
|
160
|
+
logger.info(`MCP Server running on streamable HTTP on port ${address.port}`);
|
|
102
161
|
}
|
|
103
162
|
else {
|
|
104
|
-
|
|
163
|
+
logger.info(`MCP Server running on streamable HTTP on port ${port}`);
|
|
105
164
|
}
|
|
106
165
|
};
|
|
107
166
|
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,sDAA8B;AAC9B,
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["src/http.ts"],"names":[],"mappings":"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"}
|
package/http.mjs
CHANGED
|
@@ -1,58 +1,71 @@
|
|
|
1
1
|
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
2
|
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
3
3
|
import express from 'express';
|
|
4
|
-
import
|
|
5
|
-
import
|
|
4
|
+
import pino from 'pino';
|
|
5
|
+
import pinoHttp from 'pino-http';
|
|
6
|
+
import { getStainlessApiKey, parseClientAuthHeaders } from "./auth.mjs";
|
|
7
|
+
import { getLogger } from "./logger.mjs";
|
|
6
8
|
import { initMcpServer, newMcpServer } from "./server.mjs";
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
const server = newMcpServer();
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
const newServer = async ({ clientOptions, mcpOptions, req, res, }) => {
|
|
10
|
+
const stainlessApiKey = getStainlessApiKey(req, mcpOptions);
|
|
11
|
+
const server = await newMcpServer(stainlessApiKey);
|
|
12
|
+
const authOptions = parseClientAuthHeaders(req, false);
|
|
13
|
+
let upstreamClientEnvs;
|
|
14
|
+
const clientEnvsHeader = req.headers['x-stainless-mcp-client-envs'];
|
|
15
|
+
if (typeof clientEnvsHeader === 'string') {
|
|
16
|
+
try {
|
|
17
|
+
const parsed = JSON.parse(clientEnvsHeader);
|
|
18
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
19
|
+
upstreamClientEnvs = parsed;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
// Ignore malformed header
|
|
24
|
+
}
|
|
13
25
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
error: {
|
|
39
|
-
code: -32000,
|
|
40
|
-
message: `Unauthorized: ${error instanceof Error ? error.message : error}`,
|
|
41
|
-
},
|
|
42
|
-
});
|
|
43
|
-
return null;
|
|
26
|
+
// Parse x-stainless-mcp-client-permissions header to override permission options
|
|
27
|
+
//
|
|
28
|
+
// Note: Permissions are best-effort and intended to prevent clients from doing unexpected things;
|
|
29
|
+
// they're not a hard security boundary, so we allow arbitrary, client-driven overrides.
|
|
30
|
+
//
|
|
31
|
+
// See the Stainless MCP documentation for more details.
|
|
32
|
+
let effectiveMcpOptions = mcpOptions;
|
|
33
|
+
const clientPermissionsHeader = req.headers['x-stainless-mcp-client-permissions'];
|
|
34
|
+
if (typeof clientPermissionsHeader === 'string') {
|
|
35
|
+
try {
|
|
36
|
+
const parsed = JSON.parse(clientPermissionsHeader);
|
|
37
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
38
|
+
effectiveMcpOptions = {
|
|
39
|
+
...mcpOptions,
|
|
40
|
+
...(typeof parsed.allow_http_gets === 'boolean' && { codeAllowHttpGets: parsed.allow_http_gets }),
|
|
41
|
+
...(Array.isArray(parsed.allowed_methods) && { codeAllowedMethods: parsed.allowed_methods }),
|
|
42
|
+
...(Array.isArray(parsed.blocked_methods) && { codeBlockedMethods: parsed.blocked_methods }),
|
|
43
|
+
};
|
|
44
|
+
getLogger().info({ clientPermissions: parsed }, 'Overriding code execution permissions from x-stainless-mcp-client-permissions header');
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
getLogger().warn({ error }, 'Failed to parse x-stainless-mcp-client-permissions header');
|
|
49
|
+
}
|
|
44
50
|
}
|
|
51
|
+
await initMcpServer({
|
|
52
|
+
server: server,
|
|
53
|
+
mcpOptions: effectiveMcpOptions,
|
|
54
|
+
clientOptions: {
|
|
55
|
+
...clientOptions,
|
|
56
|
+
...authOptions,
|
|
57
|
+
},
|
|
58
|
+
stainlessApiKey: stainlessApiKey,
|
|
59
|
+
upstreamClientEnvs,
|
|
60
|
+
});
|
|
45
61
|
return server;
|
|
46
62
|
};
|
|
47
63
|
const post = (options) => async (req, res) => {
|
|
48
|
-
const server = newServer({ ...options, req, res });
|
|
64
|
+
const server = await newServer({ ...options, req, res });
|
|
49
65
|
// If we return null, we already set the authorization error.
|
|
50
66
|
if (server === null)
|
|
51
67
|
return;
|
|
52
|
-
const transport = new StreamableHTTPServerTransport(
|
|
53
|
-
// Stateless server
|
|
54
|
-
sessionIdGenerator: undefined,
|
|
55
|
-
});
|
|
68
|
+
const transport = new StreamableHTTPServerTransport();
|
|
56
69
|
await server.connect(transport);
|
|
57
70
|
await transport.handleRequest(req, res, req.body);
|
|
58
71
|
};
|
|
@@ -74,27 +87,73 @@ const del = async (req, res) => {
|
|
|
74
87
|
},
|
|
75
88
|
});
|
|
76
89
|
};
|
|
77
|
-
|
|
90
|
+
const redactHeaders = (headers) => {
|
|
91
|
+
const hiddenHeaders = /auth|cookie|key|token|x-stainless-mcp-client-envs/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
|
+
export const streamableHTTPApp = ({ clientOptions = {}, mcpOptions, }) => {
|
|
78
101
|
const app = express();
|
|
79
102
|
app.set('query parser', 'extended');
|
|
80
103
|
app.use(express.json());
|
|
104
|
+
app.use(pinoHttp({
|
|
105
|
+
logger: 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.stdSerializers.wrapRequestSerializer((req) => {
|
|
123
|
+
return {
|
|
124
|
+
...req,
|
|
125
|
+
headers: redactHeaders(req.raw.headers),
|
|
126
|
+
};
|
|
127
|
+
}),
|
|
128
|
+
res: pino.stdSerializers.wrapResponseSerializer((res) => {
|
|
129
|
+
return {
|
|
130
|
+
...res,
|
|
131
|
+
headers: redactHeaders(res.headers),
|
|
132
|
+
};
|
|
133
|
+
}),
|
|
134
|
+
},
|
|
135
|
+
}));
|
|
136
|
+
app.get('/health', async (req, res) => {
|
|
137
|
+
res.status(200).send('OK');
|
|
138
|
+
});
|
|
81
139
|
app.get('/', get);
|
|
82
140
|
app.post('/', post({ clientOptions, mcpOptions }));
|
|
83
141
|
app.delete('/', del);
|
|
84
142
|
return app;
|
|
85
143
|
};
|
|
86
|
-
export const launchStreamableHTTPServer = async (
|
|
87
|
-
const app = streamableHTTPApp({ mcpOptions
|
|
144
|
+
export const launchStreamableHTTPServer = async ({ mcpOptions, port, }) => {
|
|
145
|
+
const app = streamableHTTPApp({ mcpOptions });
|
|
88
146
|
const server = app.listen(port);
|
|
89
147
|
const address = server.address();
|
|
148
|
+
const logger = getLogger();
|
|
90
149
|
if (typeof address === 'string') {
|
|
91
|
-
|
|
150
|
+
logger.info(`MCP Server running on streamable HTTP at ${address}`);
|
|
92
151
|
}
|
|
93
152
|
else if (address !== null) {
|
|
94
|
-
|
|
153
|
+
logger.info(`MCP Server running on streamable HTTP on port ${address.port}`);
|
|
95
154
|
}
|
|
96
155
|
else {
|
|
97
|
-
|
|
156
|
+
logger.info(`MCP Server running on streamable HTTP on port ${port}`);
|
|
98
157
|
}
|
|
99
158
|
};
|
|
100
159
|
//# sourceMappingURL=http.mjs.map
|
package/http.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.mjs","sourceRoot":"","sources":["src/http.ts"],"names":[],"mappings":"AAAA,sFAAsF;OAG/E,EAAE,6BAA6B,EAAE,MAAM,oDAAoD;OAE3F,OAAO,MAAM,SAAS;OACtB,
|
|
1
|
+
{"version":3,"file":"http.mjs","sourceRoot":"","sources":["src/http.ts"],"names":[],"mappings":"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"}
|