@cjavdev/believe-mcp 0.19.0 → 0.20.1
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/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.d.mts.map +1 -1
- package/code-tool.d.ts.map +1 -1
- package/code-tool.js +29 -23
- package/code-tool.js.map +1 -1
- package/code-tool.mjs +20 -11
- package/code-tool.mjs.map +1 -1
- package/docs-search-tool.d.mts +2 -0
- package/docs-search-tool.d.mts.map +1 -1
- package/docs-search-tool.d.ts +2 -0
- package/docs-search-tool.d.ts.map +1 -1
- package/docs-search-tool.js +32 -2
- package/docs-search-tool.js.map +1 -1
- package/docs-search-tool.mjs +31 -2
- package/docs-search-tool.mjs.map +1 -1
- package/http.d.mts.map +1 -1
- package/http.d.ts.map +1 -1
- package/http.js +58 -3
- package/http.js.map +1 -1
- package/http.mjs +58 -3
- package/http.mjs.map +1 -1
- package/instructions.d.mts +4 -1
- package/instructions.d.mts.map +1 -1
- package/instructions.d.ts +4 -1
- package/instructions.d.ts.map +1 -1
- package/instructions.js +28 -13
- package/instructions.js.map +1 -1
- package/instructions.mjs +25 -13
- package/instructions.mjs.map +1 -1
- package/local-docs-search.d.mts +28 -0
- package/local-docs-search.d.mts.map +1 -0
- package/local-docs-search.d.ts +28 -0
- package/local-docs-search.d.ts.map +1 -0
- package/local-docs-search.js +3932 -0
- package/local-docs-search.js.map +1 -0
- package/local-docs-search.mjs +3892 -0
- package/local-docs-search.mjs.map +1 -0
- package/options.d.mts +3 -0
- package/options.d.mts.map +1 -1
- package/options.d.ts +3 -0
- package/options.d.ts.map +1 -1
- package/options.js +19 -0
- package/options.js.map +1 -1
- package/options.mjs +19 -0
- package/options.mjs.map +1 -1
- package/package.json +13 -2
- package/server.d.mts +10 -1
- package/server.d.mts.map +1 -1
- package/server.d.ts +10 -1
- package/server.d.ts.map +1 -1
- package/server.js +13 -3
- package/server.js.map +1 -1
- package/server.mjs +13 -3
- package/server.mjs.map +1 -1
- package/src/code-tool-paths.cts +3 -1
- package/src/code-tool.ts +27 -16
- package/src/docs-search-tool.ts +46 -8
- package/src/http.ts +62 -3
- package/src/instructions.ts +32 -14
- package/src/local-docs-search.ts +4636 -0
- package/src/options.ts +24 -0
- package/src/server.ts +23 -3
- package/src/stdio.ts +4 -1
- package/src/types.ts +3 -0
- package/stdio.d.mts.map +1 -1
- package/stdio.d.ts.map +1 -1
- package/stdio.js +4 -1
- package/stdio.js.map +1 -1
- package/stdio.mjs +4 -1
- package/stdio.mjs.map +1 -1
- package/types.d.mts +6 -0
- package/types.d.mts.map +1 -1
- package/types.d.ts +6 -0
- package/types.d.ts.map +1 -1
- package/types.js.map +1 -1
- package/types.mjs.map +1 -1
package/code-tool-paths.cjs
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.
|
|
5
|
-
|
|
4
|
+
exports.getWorkerPath = getWorkerPath;
|
|
5
|
+
function getWorkerPath() {
|
|
6
|
+
return require.resolve('./code-tool-worker.mjs');
|
|
7
|
+
}
|
|
6
8
|
//# sourceMappingURL=code-tool-paths.cjs.map
|
package/code-tool-paths.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-tool-paths.cjs","sourceRoot":"","sources":["src/code-tool-paths.cts"],"names":[],"mappings":";AAAA,sFAAsF
|
|
1
|
+
{"version":3,"file":"code-tool-paths.cjs","sourceRoot":"","sources":["src/code-tool-paths.cts"],"names":[],"mappings":";AAAA,sFAAsF;;AAEtF,sCAEC;AAFD,SAAgB,aAAa;IAC3B,OAAO,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;AACnD,CAAC"}
|
package/code-tool-paths.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare
|
|
1
|
+
export declare function getWorkerPath(): string;
|
|
2
2
|
//# sourceMappingURL=code-tool-paths.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-tool-paths.d.cts","sourceRoot":"","sources":["src/code-tool-paths.cts"],"names":[],"mappings":"AAEA,
|
|
1
|
+
{"version":3,"file":"code-tool-paths.d.cts","sourceRoot":"","sources":["src/code-tool-paths.cts"],"names":[],"mappings":"AAEA,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
package/code-tool.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-tool.d.mts","sourceRoot":"","sources":["src/code-tool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"code-tool.d.mts","sourceRoot":"","sources":["src/code-tool.ts"],"names":[],"mappings":"OAEO,EAGL,OAAO,EAKR;OAKM,EAAE,SAAS,EAAE;OACb,EAAE,oBAAoB,EAAE;AA0B/B;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,EACvB,cAAc,EACd,iBAAiB,GAClB,EAAE;IACD,cAAc,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC;IACxC,iBAAiB,EAAE,oBAAoB,CAAC;CACzC,GAAG,OAAO,CAuEV"}
|
package/code-tool.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-tool.d.ts","sourceRoot":"","sources":["src/code-tool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"code-tool.d.ts","sourceRoot":"","sources":["src/code-tool.ts"],"names":[],"mappings":"OAEO,EAGL,OAAO,EAKR;OAKM,EAAE,SAAS,EAAE;OACb,EAAE,oBAAoB,EAAE;AA0B/B;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,EACvB,cAAc,EACd,iBAAiB,GAClB,EAAE;IACD,cAAc,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC;IACxC,iBAAiB,EAAE,oBAAoB,CAAC;CACzC,GAAG,OAAO,CAuEV"}
|
package/code-tool.js
CHANGED
|
@@ -33,16 +33,8 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
return result;
|
|
34
34
|
};
|
|
35
35
|
})();
|
|
36
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
|
-
};
|
|
39
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
37
|
exports.codeTool = codeTool;
|
|
41
|
-
const node_fs_1 = __importDefault(require("node:fs"));
|
|
42
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
43
|
-
const node_url_1 = __importDefault(require("node:url"));
|
|
44
|
-
const deno_http_worker_1 = require("@valtown/deno-http-worker");
|
|
45
|
-
const code_tool_paths_cjs_1 = require("./code-tool-paths.cjs");
|
|
46
38
|
const types_1 = require("./types.js");
|
|
47
39
|
const util_1 = require("./util.js");
|
|
48
40
|
const logger_1 = require("./logger.js");
|
|
@@ -142,16 +134,19 @@ const remoteStainlessHandler = async ({ reqContext, args, }) => {
|
|
|
142
134
|
const intent = args.intent;
|
|
143
135
|
const client = reqContext.client;
|
|
144
136
|
const codeModeEndpoint = (0, util_1.readEnv)('CODE_MODE_ENDPOINT_URL') ?? 'https://api.stainless.com/api/ai/code-tool';
|
|
137
|
+
const localClientEnvs = {
|
|
138
|
+
BELIEVE_API_KEY: (0, util_1.requireValue)((0, util_1.readEnv)('BELIEVE_API_KEY') ?? client.apiKey, 'set BELIEVE_API_KEY environment variable or provide apiKey client option'),
|
|
139
|
+
BELIEVE_BASE_URL: (0, util_1.readEnv)('BELIEVE_BASE_URL') ?? client.baseURL ?? undefined,
|
|
140
|
+
};
|
|
141
|
+
// Merge any upstream client envs from the request header, with upstream values taking precedence.
|
|
142
|
+
const mergedClientEnvs = { ...localClientEnvs, ...reqContext.upstreamClientEnvs };
|
|
145
143
|
// Setting a Stainless API key authenticates requests to the code tool endpoint.
|
|
146
144
|
const res = await fetch(codeModeEndpoint, {
|
|
147
145
|
method: 'POST',
|
|
148
146
|
headers: {
|
|
149
147
|
...(reqContext.stainlessApiKey && { Authorization: reqContext.stainlessApiKey }),
|
|
150
148
|
'Content-Type': 'application/json',
|
|
151
|
-
'x-stainless-mcp-client-envs': JSON.stringify(
|
|
152
|
-
BELIEVE_API_KEY: (0, util_1.requireValue)((0, util_1.readEnv)('BELIEVE_API_KEY') ?? client.apiKey, 'set BELIEVE_API_KEY environment variable or provide apiKey client option'),
|
|
153
|
-
BELIEVE_BASE_URL: (0, util_1.readEnv)('BELIEVE_BASE_URL') ?? client.baseURL ?? undefined,
|
|
154
|
-
}),
|
|
149
|
+
'x-stainless-mcp-client-envs': JSON.stringify(mergedClientEnvs),
|
|
155
150
|
},
|
|
156
151
|
body: JSON.stringify({
|
|
157
152
|
project_name: 'believe',
|
|
@@ -179,12 +174,18 @@ const remoteStainlessHandler = async ({ reqContext, args, }) => {
|
|
|
179
174
|
return (0, types_1.asTextContentResult)(output);
|
|
180
175
|
};
|
|
181
176
|
const localDenoHandler = async ({ reqContext, args, }) => {
|
|
177
|
+
const fs = await Promise.resolve().then(() => __importStar(require('node:fs')));
|
|
178
|
+
const path = await Promise.resolve().then(() => __importStar(require('node:path')));
|
|
179
|
+
const url = await Promise.resolve().then(() => __importStar(require('node:url')));
|
|
180
|
+
const { newDenoHTTPWorker } = await Promise.resolve().then(() => __importStar(require('@valtown/deno-http-worker')));
|
|
181
|
+
const { getWorkerPath } = await Promise.resolve().then(() => __importStar(require('./code-tool-paths.cjs')));
|
|
182
|
+
const workerPath = getWorkerPath();
|
|
182
183
|
const client = reqContext.client;
|
|
183
184
|
const baseURLHostname = new URL(client.baseURL).hostname;
|
|
184
185
|
const { code } = args;
|
|
185
186
|
let denoPath;
|
|
186
|
-
const packageRoot =
|
|
187
|
-
const packageNodeModulesPath =
|
|
187
|
+
const packageRoot = path.resolve(path.dirname(workerPath), '..');
|
|
188
|
+
const packageNodeModulesPath = path.resolve(packageRoot, 'node_modules');
|
|
188
189
|
// Check if deno is in PATH
|
|
189
190
|
const { execSync } = await Promise.resolve().then(() => __importStar(require('node:child_process')));
|
|
190
191
|
try {
|
|
@@ -194,8 +195,8 @@ const localDenoHandler = async ({ reqContext, args, }) => {
|
|
|
194
195
|
catch {
|
|
195
196
|
try {
|
|
196
197
|
// Use deno binary in node_modules if it's found
|
|
197
|
-
const denoNodeModulesPath =
|
|
198
|
-
await
|
|
198
|
+
const denoNodeModulesPath = path.resolve(packageNodeModulesPath, 'deno', 'bin.cjs');
|
|
199
|
+
await fs.promises.access(denoNodeModulesPath, fs.constants.X_OK);
|
|
199
200
|
denoPath = denoNodeModulesPath;
|
|
200
201
|
}
|
|
201
202
|
catch {
|
|
@@ -205,14 +206,14 @@ const localDenoHandler = async ({ reqContext, args, }) => {
|
|
|
205
206
|
}
|
|
206
207
|
const allowReadPaths = [
|
|
207
208
|
'code-tool-worker.mjs',
|
|
208
|
-
`${
|
|
209
|
+
`${workerPath.replace(/([\/\\]node_modules)[\/\\].+$/, '$1')}/`,
|
|
209
210
|
packageRoot,
|
|
210
211
|
];
|
|
211
212
|
// Follow symlinks in node_modules to allow read access to workspace-linked packages
|
|
212
213
|
try {
|
|
213
214
|
const sdkPkgName = '@cjavdev/believe';
|
|
214
|
-
const sdkDir =
|
|
215
|
-
const realSdkDir =
|
|
215
|
+
const sdkDir = path.resolve(packageNodeModulesPath, sdkPkgName);
|
|
216
|
+
const realSdkDir = fs.realpathSync(sdkDir);
|
|
216
217
|
if (realSdkDir !== sdkDir) {
|
|
217
218
|
allowReadPaths.push(realSdkDir);
|
|
218
219
|
}
|
|
@@ -221,7 +222,7 @@ const localDenoHandler = async ({ reqContext, args, }) => {
|
|
|
221
222
|
// Ignore if symlink resolution fails
|
|
222
223
|
}
|
|
223
224
|
const allowRead = allowReadPaths.join(',');
|
|
224
|
-
const worker = await
|
|
225
|
+
const worker = await newDenoHTTPWorker(url.pathToFileURL(workerPath), {
|
|
225
226
|
denoExecutable: denoPath,
|
|
226
227
|
runFlags: [
|
|
227
228
|
`--node-modules-dir=manual`,
|
|
@@ -233,7 +234,10 @@ const localDenoHandler = async ({ reqContext, args, }) => {
|
|
|
233
234
|
],
|
|
234
235
|
printOutput: true,
|
|
235
236
|
spawnOptions: {
|
|
236
|
-
cwd:
|
|
237
|
+
cwd: path.dirname(workerPath),
|
|
238
|
+
// Merge any upstream client envs into the Deno subprocess environment,
|
|
239
|
+
// with the upstream env vars taking precedence.
|
|
240
|
+
env: { ...process.env, ...reqContext.upstreamClientEnvs },
|
|
237
241
|
},
|
|
238
242
|
});
|
|
239
243
|
try {
|
|
@@ -241,9 +245,11 @@ const localDenoHandler = async ({ reqContext, args, }) => {
|
|
|
241
245
|
worker.addEventListener('exit', (exitCode) => {
|
|
242
246
|
reject(new Error(`Worker exited with code ${exitCode}`));
|
|
243
247
|
});
|
|
248
|
+
// Strip null/undefined values so that the worker SDK client can fall back to
|
|
249
|
+
// reading from environment variables (including any upstreamClientEnvs).
|
|
244
250
|
const opts = {
|
|
245
|
-
baseURL: client.baseURL,
|
|
246
|
-
apiKey: client.apiKey,
|
|
251
|
+
...(client.baseURL != null ? { baseURL: client.baseURL } : undefined),
|
|
252
|
+
...(client.apiKey != null ? { apiKey: client.apiKey } : undefined),
|
|
247
253
|
defaultHeaders: {
|
|
248
254
|
'X-Stainless-MCP': 'true',
|
|
249
255
|
},
|
package/code-tool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-tool.js","sourceRoot":"","sources":["src/code-tool.ts"],"names":[],"mappings":";AAAA,sFAAsF
|
|
1
|
+
{"version":3,"file":"code-tool.js","sourceRoot":"","sources":["src/code-tool.ts"],"names":[],"mappings":"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"}
|
package/code-tool.mjs
CHANGED
|
@@ -1,9 +1,4 @@
|
|
|
1
1
|
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
-
import fs from 'node:fs';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
import url from 'node:url';
|
|
5
|
-
import { newDenoHTTPWorker } from '@valtown/deno-http-worker';
|
|
6
|
-
import { workerPath } from './code-tool-paths.cjs';
|
|
7
2
|
import { asErrorResult, asTextContentResult, } from "./types.mjs";
|
|
8
3
|
import { readEnv, requireValue } from "./util.mjs";
|
|
9
4
|
import { getLogger } from "./logger.mjs";
|
|
@@ -103,16 +98,19 @@ const remoteStainlessHandler = async ({ reqContext, args, }) => {
|
|
|
103
98
|
const intent = args.intent;
|
|
104
99
|
const client = reqContext.client;
|
|
105
100
|
const codeModeEndpoint = readEnv('CODE_MODE_ENDPOINT_URL') ?? 'https://api.stainless.com/api/ai/code-tool';
|
|
101
|
+
const localClientEnvs = {
|
|
102
|
+
BELIEVE_API_KEY: requireValue(readEnv('BELIEVE_API_KEY') ?? client.apiKey, 'set BELIEVE_API_KEY environment variable or provide apiKey client option'),
|
|
103
|
+
BELIEVE_BASE_URL: readEnv('BELIEVE_BASE_URL') ?? client.baseURL ?? undefined,
|
|
104
|
+
};
|
|
105
|
+
// Merge any upstream client envs from the request header, with upstream values taking precedence.
|
|
106
|
+
const mergedClientEnvs = { ...localClientEnvs, ...reqContext.upstreamClientEnvs };
|
|
106
107
|
// Setting a Stainless API key authenticates requests to the code tool endpoint.
|
|
107
108
|
const res = await fetch(codeModeEndpoint, {
|
|
108
109
|
method: 'POST',
|
|
109
110
|
headers: {
|
|
110
111
|
...(reqContext.stainlessApiKey && { Authorization: reqContext.stainlessApiKey }),
|
|
111
112
|
'Content-Type': 'application/json',
|
|
112
|
-
'x-stainless-mcp-client-envs': JSON.stringify(
|
|
113
|
-
BELIEVE_API_KEY: requireValue(readEnv('BELIEVE_API_KEY') ?? client.apiKey, 'set BELIEVE_API_KEY environment variable or provide apiKey client option'),
|
|
114
|
-
BELIEVE_BASE_URL: readEnv('BELIEVE_BASE_URL') ?? client.baseURL ?? undefined,
|
|
115
|
-
}),
|
|
113
|
+
'x-stainless-mcp-client-envs': JSON.stringify(mergedClientEnvs),
|
|
116
114
|
},
|
|
117
115
|
body: JSON.stringify({
|
|
118
116
|
project_name: 'believe',
|
|
@@ -140,6 +138,12 @@ const remoteStainlessHandler = async ({ reqContext, args, }) => {
|
|
|
140
138
|
return asTextContentResult(output);
|
|
141
139
|
};
|
|
142
140
|
const localDenoHandler = async ({ reqContext, args, }) => {
|
|
141
|
+
const fs = await import('node:fs');
|
|
142
|
+
const path = await import('node:path');
|
|
143
|
+
const url = await import('node:url');
|
|
144
|
+
const { newDenoHTTPWorker } = await import('@valtown/deno-http-worker');
|
|
145
|
+
const { getWorkerPath } = await import('./code-tool-paths.cjs');
|
|
146
|
+
const workerPath = getWorkerPath();
|
|
143
147
|
const client = reqContext.client;
|
|
144
148
|
const baseURLHostname = new URL(client.baseURL).hostname;
|
|
145
149
|
const { code } = args;
|
|
@@ -195,6 +199,9 @@ const localDenoHandler = async ({ reqContext, args, }) => {
|
|
|
195
199
|
printOutput: true,
|
|
196
200
|
spawnOptions: {
|
|
197
201
|
cwd: path.dirname(workerPath),
|
|
202
|
+
// Merge any upstream client envs into the Deno subprocess environment,
|
|
203
|
+
// with the upstream env vars taking precedence.
|
|
204
|
+
env: { ...process.env, ...reqContext.upstreamClientEnvs },
|
|
198
205
|
},
|
|
199
206
|
});
|
|
200
207
|
try {
|
|
@@ -202,9 +209,11 @@ const localDenoHandler = async ({ reqContext, args, }) => {
|
|
|
202
209
|
worker.addEventListener('exit', (exitCode) => {
|
|
203
210
|
reject(new Error(`Worker exited with code ${exitCode}`));
|
|
204
211
|
});
|
|
212
|
+
// Strip null/undefined values so that the worker SDK client can fall back to
|
|
213
|
+
// reading from environment variables (including any upstreamClientEnvs).
|
|
205
214
|
const opts = {
|
|
206
|
-
baseURL: client.baseURL,
|
|
207
|
-
apiKey: client.apiKey,
|
|
215
|
+
...(client.baseURL != null ? { baseURL: client.baseURL } : undefined),
|
|
216
|
+
...(client.apiKey != null ? { apiKey: client.apiKey } : undefined),
|
|
208
217
|
defaultHeaders: {
|
|
209
218
|
'X-Stainless-MCP': 'true',
|
|
210
219
|
},
|
package/code-tool.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-tool.mjs","sourceRoot":"","sources":["src/code-tool.ts"],"names":[],"mappings":"AAAA,sFAAsF;OAE/E,
|
|
1
|
+
{"version":3,"file":"code-tool.mjs","sourceRoot":"","sources":["src/code-tool.ts"],"names":[],"mappings":"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"}
|
package/docs-search-tool.d.mts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
2
|
import { Metadata, McpRequestContext } from "./types.mjs";
|
|
3
|
+
import type { LocalDocsSearch } from "./local-docs-search.mjs";
|
|
3
4
|
export declare const metadata: Metadata;
|
|
4
5
|
export declare const tool: Tool;
|
|
6
|
+
export declare function setLocalSearch(search: LocalDocsSearch): void;
|
|
5
7
|
export declare const handler: ({ reqContext, args, }: {
|
|
6
8
|
reqContext: McpRequestContext;
|
|
7
9
|
args: Record<string, unknown> | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs-search-tool.d.mts","sourceRoot":"","sources":["src/docs-search-tool.ts"],"names":[],"mappings":"OAEO,EAAE,IAAI,EAAE,MAAM,oCAAoC;OAClD,EAAE,QAAQ,EAAE,iBAAiB,EAAuB;
|
|
1
|
+
{"version":3,"file":"docs-search-tool.d.mts","sourceRoot":"","sources":["src/docs-search-tool.ts"],"names":[],"mappings":"OAEO,EAAE,IAAI,EAAE,MAAM,oCAAoC;OAClD,EAAE,QAAQ,EAAE,iBAAiB,EAAuB;OAEpD,KAAK,EAAE,eAAe,EAAE;AAE/B,eAAO,MAAM,QAAQ,EAAE,QAKtB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,IA2BlB,CAAC;AAOF,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAE5D;AAuED,eAAO,MAAM,OAAO,GAAU,uBAG3B;IACD,UAAU,EAAE,iBAAiB,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;CAC3C,8CAQA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAXC;QACD,UAAU,EAAE,iBAAiB,CAAC;QAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;KAC3C;;AAUD,wBAA2C"}
|
package/docs-search-tool.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
2
|
import { Metadata, McpRequestContext } from "./types.js";
|
|
3
|
+
import type { LocalDocsSearch } from "./local-docs-search.js";
|
|
3
4
|
export declare const metadata: Metadata;
|
|
4
5
|
export declare const tool: Tool;
|
|
6
|
+
export declare function setLocalSearch(search: LocalDocsSearch): void;
|
|
5
7
|
export declare const handler: ({ reqContext, args, }: {
|
|
6
8
|
reqContext: McpRequestContext;
|
|
7
9
|
args: Record<string, unknown> | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs-search-tool.d.ts","sourceRoot":"","sources":["src/docs-search-tool.ts"],"names":[],"mappings":"OAEO,EAAE,IAAI,EAAE,MAAM,oCAAoC;OAClD,EAAE,QAAQ,EAAE,iBAAiB,EAAuB;
|
|
1
|
+
{"version":3,"file":"docs-search-tool.d.ts","sourceRoot":"","sources":["src/docs-search-tool.ts"],"names":[],"mappings":"OAEO,EAAE,IAAI,EAAE,MAAM,oCAAoC;OAClD,EAAE,QAAQ,EAAE,iBAAiB,EAAuB;OAEpD,KAAK,EAAE,eAAe,EAAE;AAE/B,eAAO,MAAM,QAAQ,EAAE,QAKtB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,IA2BlB,CAAC;AAOF,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAE5D;AAuED,eAAO,MAAM,OAAO,GAAU,uBAG3B;IACD,UAAU,EAAE,iBAAiB,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;CAC3C,8CAQA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAXC;QACD,UAAU,EAAE,iBAAiB,CAAC;QAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;KAC3C;;AAUD,wBAA2C"}
|
package/docs-search-tool.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
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
|
+
exports.setLocalSearch = setLocalSearch;
|
|
5
6
|
const types_1 = require("./types.js");
|
|
6
7
|
const logger_1 = require("./logger.js");
|
|
7
8
|
exports.metadata = {
|
|
@@ -38,13 +39,35 @@ exports.tool = {
|
|
|
38
39
|
},
|
|
39
40
|
};
|
|
40
41
|
const docsSearchURL = process.env['DOCS_SEARCH_URL'] || 'https://api.stainless.com/api/projects/believe/docs/search';
|
|
41
|
-
|
|
42
|
+
let _localSearch;
|
|
43
|
+
function setLocalSearch(search) {
|
|
44
|
+
_localSearch = search;
|
|
45
|
+
}
|
|
46
|
+
async function searchLocal(args) {
|
|
47
|
+
if (!_localSearch) {
|
|
48
|
+
throw new Error('Local search not initialized');
|
|
49
|
+
}
|
|
50
|
+
const query = args['query'] ?? '';
|
|
51
|
+
const language = args['language'] ?? 'typescript';
|
|
52
|
+
const detail = args['detail'] ?? 'default';
|
|
53
|
+
return _localSearch.search({
|
|
54
|
+
query,
|
|
55
|
+
language,
|
|
56
|
+
detail,
|
|
57
|
+
maxResults: 5,
|
|
58
|
+
}).results;
|
|
59
|
+
}
|
|
60
|
+
async function searchRemote(args, reqContext) {
|
|
42
61
|
const body = args;
|
|
43
62
|
const query = new URLSearchParams(body).toString();
|
|
44
63
|
const startTime = Date.now();
|
|
45
64
|
const result = await fetch(`${docsSearchURL}?${query}`, {
|
|
46
65
|
headers: {
|
|
47
66
|
...(reqContext.stainlessApiKey && { Authorization: reqContext.stainlessApiKey }),
|
|
67
|
+
...(reqContext.mcpSessionId && { 'x-stainless-mcp-session-id': reqContext.mcpSessionId }),
|
|
68
|
+
...(reqContext.mcpClientInfo && {
|
|
69
|
+
'x-stainless-mcp-client-info': JSON.stringify(reqContext.mcpClientInfo),
|
|
70
|
+
}),
|
|
48
71
|
},
|
|
49
72
|
});
|
|
50
73
|
const logger = (0, logger_1.getLogger)();
|
|
@@ -67,7 +90,14 @@ const handler = async ({ reqContext, args, }) => {
|
|
|
67
90
|
durationMs: Date.now() - startTime,
|
|
68
91
|
query: body.query,
|
|
69
92
|
}, 'Got docs search result');
|
|
70
|
-
return
|
|
93
|
+
return resultBody;
|
|
94
|
+
}
|
|
95
|
+
const handler = async ({ reqContext, args, }) => {
|
|
96
|
+
const body = args ?? {};
|
|
97
|
+
if (_localSearch) {
|
|
98
|
+
return (0, types_1.asTextContentResult)(await searchLocal(body));
|
|
99
|
+
}
|
|
100
|
+
return (0, types_1.asTextContentResult)(await searchRemote(body, reqContext));
|
|
71
101
|
};
|
|
72
102
|
exports.handler = handler;
|
|
73
103
|
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
|
@@ -35,13 +35,35 @@ export const tool = {
|
|
|
35
35
|
},
|
|
36
36
|
};
|
|
37
37
|
const docsSearchURL = process.env['DOCS_SEARCH_URL'] || 'https://api.stainless.com/api/projects/believe/docs/search';
|
|
38
|
-
|
|
38
|
+
let _localSearch;
|
|
39
|
+
export function setLocalSearch(search) {
|
|
40
|
+
_localSearch = search;
|
|
41
|
+
}
|
|
42
|
+
async function searchLocal(args) {
|
|
43
|
+
if (!_localSearch) {
|
|
44
|
+
throw new Error('Local search not initialized');
|
|
45
|
+
}
|
|
46
|
+
const query = args['query'] ?? '';
|
|
47
|
+
const language = args['language'] ?? 'typescript';
|
|
48
|
+
const detail = args['detail'] ?? 'default';
|
|
49
|
+
return _localSearch.search({
|
|
50
|
+
query,
|
|
51
|
+
language,
|
|
52
|
+
detail,
|
|
53
|
+
maxResults: 5,
|
|
54
|
+
}).results;
|
|
55
|
+
}
|
|
56
|
+
async function searchRemote(args, reqContext) {
|
|
39
57
|
const body = args;
|
|
40
58
|
const query = new URLSearchParams(body).toString();
|
|
41
59
|
const startTime = Date.now();
|
|
42
60
|
const result = await fetch(`${docsSearchURL}?${query}`, {
|
|
43
61
|
headers: {
|
|
44
62
|
...(reqContext.stainlessApiKey && { Authorization: reqContext.stainlessApiKey }),
|
|
63
|
+
...(reqContext.mcpSessionId && { 'x-stainless-mcp-session-id': reqContext.mcpSessionId }),
|
|
64
|
+
...(reqContext.mcpClientInfo && {
|
|
65
|
+
'x-stainless-mcp-client-info': JSON.stringify(reqContext.mcpClientInfo),
|
|
66
|
+
}),
|
|
45
67
|
},
|
|
46
68
|
});
|
|
47
69
|
const logger = getLogger();
|
|
@@ -64,7 +86,14 @@ export const handler = async ({ reqContext, args, }) => {
|
|
|
64
86
|
durationMs: Date.now() - startTime,
|
|
65
87
|
query: body.query,
|
|
66
88
|
}, 'Got docs search result');
|
|
67
|
-
return
|
|
89
|
+
return resultBody;
|
|
90
|
+
}
|
|
91
|
+
export const handler = async ({ reqContext, args, }) => {
|
|
92
|
+
const body = args ?? {};
|
|
93
|
+
if (_localSearch) {
|
|
94
|
+
return asTextContentResult(await searchLocal(body));
|
|
95
|
+
}
|
|
96
|
+
return asTextContentResult(await searchRemote(body, reqContext));
|
|
68
97
|
};
|
|
69
98
|
export default { metadata, tool, handler };
|
|
70
99
|
//# 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;OAG/E,EAA+B,mBAAmB,EAAE;OACpD,EAAE,SAAS,EAAE;
|
|
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.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.mts","sourceRoot":"","sources":["src/http.ts"],"names":[],"mappings":"OAIO,EAAE,aAAa,EAAE,MAAM,kBAAkB;OACzC,OAAO,MAAM,SAAS;OAKtB,EAAE,UAAU,EAAE;
|
|
1
|
+
{"version":3,"file":"http.d.mts","sourceRoot":"","sources":["src/http.ts"],"names":[],"mappings":"OAIO,EAAE,aAAa,EAAE,MAAM,kBAAkB;OACzC,OAAO,MAAM,SAAS;OAKtB,EAAE,UAAU,EAAE;AA0HrB,eAAO,MAAM,iBAAiB,GAAI,gCAG/B;IACD,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,EAAE,UAAU,CAAC;CACxB,KAAG,OAAO,CAAC,OAyDX,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.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["src/http.ts"],"names":[],"mappings":"OAIO,EAAE,aAAa,EAAE,MAAM,kBAAkB;OACzC,OAAO,MAAM,SAAS;OAKtB,EAAE,UAAU,EAAE;
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["src/http.ts"],"names":[],"mappings":"OAIO,EAAE,aAAa,EAAE,MAAM,kBAAkB;OACzC,OAAO,MAAM,SAAS;OAKtB,EAAE,UAAU,EAAE;AA0HrB,eAAO,MAAM,iBAAiB,GAAI,gCAG/B;IACD,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,EAAE,UAAU,CAAC;CACxB,KAAG,OAAO,CAAC,OAyDX,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
|
@@ -14,16 +14,60 @@ const logger_1 = require("./logger.js");
|
|
|
14
14
|
const server_1 = require("./server.js");
|
|
15
15
|
const newServer = async ({ clientOptions, mcpOptions, req, res, }) => {
|
|
16
16
|
const stainlessApiKey = (0, auth_1.getStainlessApiKey)(req, mcpOptions);
|
|
17
|
-
const
|
|
17
|
+
const customInstructionsPath = mcpOptions.customInstructionsPath;
|
|
18
|
+
const server = await (0, server_1.newMcpServer)({ stainlessApiKey, customInstructionsPath });
|
|
18
19
|
const authOptions = (0, auth_1.parseClientAuthHeaders)(req, false);
|
|
20
|
+
let upstreamClientEnvs;
|
|
21
|
+
const clientEnvsHeader = req.headers['x-stainless-mcp-client-envs'];
|
|
22
|
+
if (typeof clientEnvsHeader === 'string') {
|
|
23
|
+
try {
|
|
24
|
+
const parsed = JSON.parse(clientEnvsHeader);
|
|
25
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
26
|
+
upstreamClientEnvs = parsed;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// Ignore malformed header
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Parse x-stainless-mcp-client-permissions header to override permission options
|
|
34
|
+
//
|
|
35
|
+
// Note: Permissions are best-effort and intended to prevent clients from doing unexpected things;
|
|
36
|
+
// they're not a hard security boundary, so we allow arbitrary, client-driven overrides.
|
|
37
|
+
//
|
|
38
|
+
// See the Stainless MCP documentation for more details.
|
|
39
|
+
let effectiveMcpOptions = mcpOptions;
|
|
40
|
+
const clientPermissionsHeader = req.headers['x-stainless-mcp-client-permissions'];
|
|
41
|
+
if (typeof clientPermissionsHeader === 'string') {
|
|
42
|
+
try {
|
|
43
|
+
const parsed = JSON.parse(clientPermissionsHeader);
|
|
44
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
45
|
+
effectiveMcpOptions = {
|
|
46
|
+
...mcpOptions,
|
|
47
|
+
...(typeof parsed.allow_http_gets === 'boolean' && { codeAllowHttpGets: parsed.allow_http_gets }),
|
|
48
|
+
...(Array.isArray(parsed.allowed_methods) && { codeAllowedMethods: parsed.allowed_methods }),
|
|
49
|
+
...(Array.isArray(parsed.blocked_methods) && { codeBlockedMethods: parsed.blocked_methods }),
|
|
50
|
+
};
|
|
51
|
+
(0, logger_1.getLogger)().info({ clientPermissions: parsed }, 'Overriding code execution permissions from x-stainless-mcp-client-permissions header');
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
(0, logger_1.getLogger)().warn({ error }, 'Failed to parse x-stainless-mcp-client-permissions header');
|
|
56
|
+
}
|
|
57
|
+
}
|
|
19
58
|
await (0, server_1.initMcpServer)({
|
|
20
59
|
server: server,
|
|
21
|
-
mcpOptions:
|
|
60
|
+
mcpOptions: effectiveMcpOptions,
|
|
22
61
|
clientOptions: {
|
|
23
62
|
...clientOptions,
|
|
24
63
|
...authOptions,
|
|
25
64
|
},
|
|
26
65
|
stainlessApiKey: stainlessApiKey,
|
|
66
|
+
upstreamClientEnvs,
|
|
67
|
+
mcpSessionId: req.mcpSessionId,
|
|
68
|
+
mcpClientInfo: typeof req.body?.params?.clientInfo?.name === 'string' ?
|
|
69
|
+
{ name: req.body.params.clientInfo.name, version: String(req.body.params.clientInfo.version ?? '') }
|
|
70
|
+
: undefined,
|
|
27
71
|
});
|
|
28
72
|
return server;
|
|
29
73
|
};
|
|
@@ -55,7 +99,7 @@ const del = async (req, res) => {
|
|
|
55
99
|
});
|
|
56
100
|
};
|
|
57
101
|
const redactHeaders = (headers) => {
|
|
58
|
-
const hiddenHeaders = /auth|cookie|key|token/i;
|
|
102
|
+
const hiddenHeaders = /auth|cookie|key|token|x-stainless-mcp-client-envs/i;
|
|
59
103
|
const filtered = { ...headers };
|
|
60
104
|
Object.keys(filtered).forEach((key) => {
|
|
61
105
|
if (hiddenHeaders.test(key)) {
|
|
@@ -68,6 +112,17 @@ const streamableHTTPApp = ({ clientOptions = {}, mcpOptions, }) => {
|
|
|
68
112
|
const app = (0, express_1.default)();
|
|
69
113
|
app.set('query parser', 'extended');
|
|
70
114
|
app.use(express_1.default.json());
|
|
115
|
+
app.use((req, res, next) => {
|
|
116
|
+
const existing = req.headers['mcp-session-id'];
|
|
117
|
+
const sessionId = (Array.isArray(existing) ? existing[0] : existing) || crypto.randomUUID();
|
|
118
|
+
req.mcpSessionId = sessionId;
|
|
119
|
+
const origWriteHead = res.writeHead.bind(res);
|
|
120
|
+
res.writeHead = function (statusCode, ...rest) {
|
|
121
|
+
res.setHeader('mcp-session-id', sessionId);
|
|
122
|
+
return origWriteHead(statusCode, ...rest);
|
|
123
|
+
};
|
|
124
|
+
next();
|
|
125
|
+
});
|
|
71
126
|
app.use((0, pino_http_1.default)({
|
|
72
127
|
logger: (0, logger_1.getLogger)(),
|
|
73
128
|
customLogLevel: (req, res) => {
|