@prom.codes/context-mcp 0.3.0 → 0.4.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/dist/bin.js +128 -34
- package/package.json +1 -1
package/dist/bin.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
// dist/bin.js
|
|
4
|
+
import { McpServer as McpServer2 } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
4
5
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
5
6
|
|
|
6
7
|
// ../indexer/dist/languages.js
|
|
@@ -3486,17 +3487,52 @@ var SENSITIVE_PATH_ERROR = "path matches the sensitive-file deny-list";
|
|
|
3486
3487
|
// ../shared/dist/index.js
|
|
3487
3488
|
var PROMETHEUS_VERSION = "0.1.0";
|
|
3488
3489
|
|
|
3489
|
-
// ../indexer/dist/
|
|
3490
|
-
var
|
|
3491
|
-
/
|
|
3492
|
-
|
|
3493
|
-
|
|
3494
|
-
|
|
3495
|
-
|
|
3496
|
-
|
|
3497
|
-
|
|
3498
|
-
|
|
3490
|
+
// ../indexer/dist/ignore.js
|
|
3491
|
+
var IGNORED_DIR_NAMES = [
|
|
3492
|
+
// VCS + JS/TS
|
|
3493
|
+
".git",
|
|
3494
|
+
"node_modules",
|
|
3495
|
+
"dist",
|
|
3496
|
+
"build",
|
|
3497
|
+
"out",
|
|
3498
|
+
".turbo",
|
|
3499
|
+
".next",
|
|
3500
|
+
"coverage",
|
|
3501
|
+
"bower_components",
|
|
3502
|
+
".yarn",
|
|
3503
|
+
".pnpm-store",
|
|
3504
|
+
".svelte-kit",
|
|
3505
|
+
".nuxt",
|
|
3506
|
+
".output",
|
|
3507
|
+
".expo",
|
|
3508
|
+
".vercel",
|
|
3509
|
+
".nyc_output",
|
|
3510
|
+
// Python
|
|
3511
|
+
".venv",
|
|
3512
|
+
"venv",
|
|
3513
|
+
"__pycache__",
|
|
3514
|
+
".tox",
|
|
3515
|
+
".mypy_cache",
|
|
3516
|
+
".pytest_cache",
|
|
3517
|
+
".ruff_cache",
|
|
3518
|
+
".ipynb_checkpoints",
|
|
3519
|
+
// Rust / Java / JVM / native deps
|
|
3520
|
+
"target",
|
|
3521
|
+
"vendor",
|
|
3522
|
+
".gradle",
|
|
3523
|
+
"Pods",
|
|
3524
|
+
// Generic caches / IDE / temp
|
|
3525
|
+
".cache",
|
|
3526
|
+
".parcel-cache",
|
|
3527
|
+
".idea",
|
|
3528
|
+
"tmp",
|
|
3529
|
+
".tmp"
|
|
3499
3530
|
];
|
|
3531
|
+
var RELATIVE_IGNORED_PATTERNS = IGNORED_DIR_NAMES.map((name) => new RegExp(`(^|/)${name.replace(/\./g, "\\.")}(/|$)`));
|
|
3532
|
+
var WATCHER_IGNORED_PATTERNS = IGNORED_DIR_NAMES.map((name) => new RegExp(`(^|[/\\\\])${name.replace(/\./g, "\\.")}([/\\\\]|$)`));
|
|
3533
|
+
|
|
3534
|
+
// ../indexer/dist/watcher.js
|
|
3535
|
+
var DEFAULT_IGNORED = WATCHER_IGNORED_PATTERNS;
|
|
3500
3536
|
function toRelative(absoluteRoot, abs) {
|
|
3501
3537
|
const root = absoluteRoot.endsWith(sep) ? absoluteRoot : absoluteRoot + sep;
|
|
3502
3538
|
const rel = abs.startsWith(root) ? abs.slice(root.length) : abs;
|
|
@@ -3766,16 +3802,7 @@ function toRelative2(absoluteRoot, abs) {
|
|
|
3766
3802
|
const rel = abs.startsWith(root) ? abs.slice(root.length) : abs;
|
|
3767
3803
|
return rel.split(sep2).join("/");
|
|
3768
3804
|
}
|
|
3769
|
-
var DEFAULT_IGNORED_PATTERNS =
|
|
3770
|
-
/(^|\/)\.git(\/|$)/,
|
|
3771
|
-
/(^|\/)node_modules(\/|$)/,
|
|
3772
|
-
/(^|\/)dist(\/|$)/,
|
|
3773
|
-
/(^|\/)build(\/|$)/,
|
|
3774
|
-
/(^|\/)out(\/|$)/,
|
|
3775
|
-
/(^|\/)\.turbo(\/|$)/,
|
|
3776
|
-
/(^|\/)\.next(\/|$)/,
|
|
3777
|
-
/(^|\/)coverage(\/|$)/
|
|
3778
|
-
];
|
|
3805
|
+
var DEFAULT_IGNORED_PATTERNS = RELATIVE_IGNORED_PATTERNS;
|
|
3779
3806
|
var WorkspaceIndexer = class {
|
|
3780
3807
|
#root;
|
|
3781
3808
|
#storage;
|
|
@@ -8301,7 +8328,10 @@ function discoverStorageBackend(env, regionMode, options = {}) {
|
|
|
8301
8328
|
}
|
|
8302
8329
|
async function composeFromEnv(opts) {
|
|
8303
8330
|
const env = opts.env;
|
|
8304
|
-
const
|
|
8331
|
+
const override = (opts.workspaceRootOverride ?? "").trim();
|
|
8332
|
+
const envRoot = (env.PROMETHEUS_WORKSPACE_ROOT ?? "").trim();
|
|
8333
|
+
const claudeRoot = (env.CLAUDE_PROJECT_DIR ?? "").trim();
|
|
8334
|
+
const workspaceRoot = override !== "" ? override : envRoot !== "" ? envRoot : claudeRoot !== "" ? claudeRoot : process.cwd();
|
|
8305
8335
|
const workspaceId = (env.PROMETHEUS_WORKSPACE_ID ?? "") !== "" ? env.PROMETHEUS_WORKSPACE_ID : workspaceRoot;
|
|
8306
8336
|
const workspaceName = (env.PROMETHEUS_WORKSPACE_NAME ?? "") !== "" ? env.PROMETHEUS_WORKSPACE_NAME : basename5(workspaceRoot) || workspaceRoot;
|
|
8307
8337
|
const { id: providerId, provider: embedder, regionMode } = discoverEmbeddingProvider(env, opts.fetch);
|
|
@@ -8341,6 +8371,36 @@ async function composeFromEnv(opts) {
|
|
|
8341
8371
|
};
|
|
8342
8372
|
}
|
|
8343
8373
|
|
|
8374
|
+
// dist/roots.js
|
|
8375
|
+
import { fileURLToPath as fileURLToPath2 } from "node:url";
|
|
8376
|
+
async function rootFromClient(server, timeoutMs = 2500) {
|
|
8377
|
+
let supportsRoots = false;
|
|
8378
|
+
try {
|
|
8379
|
+
supportsRoots = server.getClientCapabilities()?.roots != null;
|
|
8380
|
+
} catch {
|
|
8381
|
+
return null;
|
|
8382
|
+
}
|
|
8383
|
+
if (!supportsRoots)
|
|
8384
|
+
return null;
|
|
8385
|
+
let res;
|
|
8386
|
+
try {
|
|
8387
|
+
res = await server.listRoots(void 0, { timeout: timeoutMs });
|
|
8388
|
+
} catch {
|
|
8389
|
+
return null;
|
|
8390
|
+
}
|
|
8391
|
+
const roots = res?.roots ?? [];
|
|
8392
|
+
for (const r of roots) {
|
|
8393
|
+
const uri = typeof r?.uri === "string" ? r.uri : "";
|
|
8394
|
+
if (uri.startsWith("file://")) {
|
|
8395
|
+
try {
|
|
8396
|
+
return fileURLToPath2(uri);
|
|
8397
|
+
} catch {
|
|
8398
|
+
}
|
|
8399
|
+
}
|
|
8400
|
+
}
|
|
8401
|
+
return null;
|
|
8402
|
+
}
|
|
8403
|
+
|
|
8344
8404
|
// dist/server.js
|
|
8345
8405
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
8346
8406
|
|
|
@@ -8886,13 +8946,6 @@ var SERVER_IDENTITY = {
|
|
|
8886
8946
|
version: PROMETHEUS_VERSION,
|
|
8887
8947
|
title: "prom.codes Context"
|
|
8888
8948
|
};
|
|
8889
|
-
function createServer(deps, options = {}) {
|
|
8890
|
-
const identity = { ...SERVER_IDENTITY, ...options.identity ?? {} };
|
|
8891
|
-
const capabilities = options.capabilities ?? { tools: {} };
|
|
8892
|
-
const server = new McpServer(identity, { capabilities });
|
|
8893
|
-
registerTools(server, deps);
|
|
8894
|
-
return server;
|
|
8895
|
-
}
|
|
8896
8949
|
|
|
8897
8950
|
// dist/bin.js
|
|
8898
8951
|
function errMessage(err) {
|
|
@@ -8930,12 +8983,14 @@ function startManagedIndexing(composed) {
|
|
|
8930
8983
|
return indexer;
|
|
8931
8984
|
}
|
|
8932
8985
|
async function main() {
|
|
8933
|
-
const
|
|
8934
|
-
|
|
8935
|
-
|
|
8936
|
-
const
|
|
8986
|
+
const env = process.env;
|
|
8987
|
+
const explicitRoot = (env.PROMETHEUS_WORKSPACE_ROOT ?? "").trim();
|
|
8988
|
+
const claudeRoot = (env.CLAUDE_PROJECT_DIR ?? "").trim();
|
|
8989
|
+
const eagerVia = explicitRoot !== "" ? "PROMETHEUS_WORKSPACE_ROOT" : claudeRoot !== "" ? "CLAUDE_PROJECT_DIR" : null;
|
|
8937
8990
|
const transport = new StdioServerTransport();
|
|
8938
|
-
const
|
|
8991
|
+
const server = new McpServer2(SERVER_IDENTITY, { capabilities: { tools: {} } });
|
|
8992
|
+
let composed = null;
|
|
8993
|
+
let managedIndexer = null;
|
|
8939
8994
|
const shutdown = async (signal) => {
|
|
8940
8995
|
process.stderr.write(`prometheus-context-mcp: received ${signal}, shutting down
|
|
8941
8996
|
`);
|
|
@@ -8948,13 +9003,52 @@ async function main() {
|
|
|
8948
9003
|
} catch {
|
|
8949
9004
|
}
|
|
8950
9005
|
}
|
|
8951
|
-
|
|
9006
|
+
if (composed !== null)
|
|
9007
|
+
await composed.close();
|
|
8952
9008
|
process.exit(0);
|
|
8953
9009
|
}
|
|
8954
9010
|
};
|
|
8955
9011
|
process.once("SIGINT", shutdown);
|
|
8956
9012
|
process.once("SIGTERM", shutdown);
|
|
9013
|
+
const boot = async (override, via) => {
|
|
9014
|
+
composed = await composeFromEnv({
|
|
9015
|
+
env,
|
|
9016
|
+
...override !== void 0 && override !== "" ? { workspaceRootOverride: override } : {}
|
|
9017
|
+
});
|
|
9018
|
+
process.stderr.write(`prometheus-context-mcp: storage=${composed.storageBackend} provider=${composed.providerId} region-mode=${composed.regionMode} managed=${composed.managed} workspace=${composed.workspaceRoot} (via ${via})${composed.dbPath !== null ? ` db=${composed.dbPath}` : ""}
|
|
9019
|
+
`);
|
|
9020
|
+
registerTools(server, composed);
|
|
9021
|
+
if (composed.managed)
|
|
9022
|
+
managedIndexer = startManagedIndexing(composed);
|
|
9023
|
+
};
|
|
9024
|
+
if (eagerVia !== null) {
|
|
9025
|
+
await boot(void 0, eagerVia);
|
|
9026
|
+
await server.connect(transport);
|
|
9027
|
+
return;
|
|
9028
|
+
}
|
|
9029
|
+
let booted = false;
|
|
9030
|
+
const resolveAndBoot = async () => {
|
|
9031
|
+
if (booted)
|
|
9032
|
+
return;
|
|
9033
|
+
booted = true;
|
|
9034
|
+
try {
|
|
9035
|
+
const fromRoots = await rootFromClient(server.server);
|
|
9036
|
+
if (fromRoots !== null)
|
|
9037
|
+
await boot(fromRoots, "MCP roots");
|
|
9038
|
+
else
|
|
9039
|
+
await boot(process.cwd(), "cwd fallback (client advertised no roots)");
|
|
9040
|
+
} catch (err) {
|
|
9041
|
+
process.stderr.write(`prometheus-context-mcp: fatal during boot: ${errMessage(err)}
|
|
9042
|
+
`);
|
|
9043
|
+
process.exit(1);
|
|
9044
|
+
}
|
|
9045
|
+
};
|
|
9046
|
+
server.server.oninitialized = () => {
|
|
9047
|
+
void resolveAndBoot();
|
|
9048
|
+
};
|
|
8957
9049
|
await server.connect(transport);
|
|
9050
|
+
const t = setTimeout(() => void resolveAndBoot(), 5e3);
|
|
9051
|
+
t.unref?.();
|
|
8958
9052
|
}
|
|
8959
9053
|
main().catch((err) => {
|
|
8960
9054
|
const message = err instanceof Error ? err.message : String(err);
|