Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
93 changes: 58 additions & 35 deletions server/dist/codeql-development-mcp-server.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions server/dist/codeql-development-mcp-server.js.map

Large diffs are not rendered by default.

18 changes: 10 additions & 8 deletions server/src/lib/cli-tool-registry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { executeCodeQLCommand, executeQLTCommand, CLIExecutionResult } from './c
import { logger } from '../utils/logger';
import { evaluateQueryResults, QueryEvaluationResult, extractQueryMetadata } from './query-results-evaluator';
import { getOrCreateLogDirectory } from './log-directory-manager';
import { packageRootDir, resolveToolQueryPackPath, workspaceRootDir } from '../utils/package-paths';
import { getUserWorkspaceDir, packageRootDir, resolveToolQueryPackPath } from '../utils/package-paths';
import { writeFileSync, rmSync, existsSync, mkdirSync } from 'fs';
import { basename, dirname, isAbsolute, join, resolve } from 'path';
import { createProjectTempDir } from '../utils/temp-dir';
Expand Down Expand Up @@ -215,19 +215,21 @@ export function registerCLITool(server: McpServer, definition: CLIToolDefinition
case 'codeql_test_run':
case 'codeql_resolve_tests':
// Handle tests parameter as positional arguments for test tools.
// Resolve relative paths against workspaceRootDir since the MCP
// server's cwd may not be the repo root.
// Resolve relative paths against the user's effective workspace
// directory. In monorepo layouts this is the repo root; in npm-
// installed layouts it falls back to process.cwd().
if (tests && Array.isArray(tests)) {
const userDir = getUserWorkspaceDir();
positionalArgs = [...positionalArgs, ...(tests as string[]).map(
t => isAbsolute(t) ? t : resolve(workspaceRootDir, t)
t => isAbsolute(t) ? t : resolve(userDir, t)
)];
Comment thread
data-douser marked this conversation as resolved.
}
break;

case 'codeql_query_run': {
// Resolve database path to absolute path if it's relative
if (options.database && typeof options.database === 'string' && !isAbsolute(options.database)) {
options.database = resolve(workspaceRootDir, options.database);
options.database = resolve(getUserWorkspaceDir(), options.database);
logger.info(`Resolved database path to: ${options.database}`);
}

Expand Down Expand Up @@ -389,9 +391,9 @@ export function registerCLITool(server: McpServer, definition: CLIToolDefinition
let cwd: string | undefined;
if ((name === 'codeql_pack_install' || name === 'codeql_pack_ls') && (dir || packDir)) {
const rawCwd = (dir || packDir) as string;
// Resolve relative paths against the workspace root, not process.cwd(),
// since the MCP server's cwd may differ (especially in VS Code).
cwd = isAbsolute(rawCwd) ? rawCwd : resolve(workspaceRootDir, rawCwd);
// Resolve relative paths against the user's effective workspace
// directory rather than a potentially read-only package root.
cwd = isAbsolute(rawCwd) ? rawCwd : resolve(getUserWorkspaceDir(), rawCwd);
}

// Add --additional-packs for commands that need to access local test packs.
Expand Down
3 changes: 2 additions & 1 deletion server/src/lib/language-server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { setTimeout, clearTimeout } from 'timers';
import { pathToFileURL } from 'url';
import { delimiter, join } from 'path';
import { logger } from '../utils/logger';
import { getPackageVersion } from '../utils/package-paths';
import { getProjectTmpDir } from '../utils/temp-dir';
import { getResolvedCodeQLDir } from './cli-executor';

Expand Down Expand Up @@ -243,7 +244,7 @@ export class CodeQLLanguageServer extends EventEmitter {
processId: process.pid,
clientInfo: {
name: 'codeql-development-mcp-server',
version: '2.23.9'
version: getPackageVersion()
},
capabilities: {
textDocument: {
Expand Down
4 changes: 2 additions & 2 deletions server/src/lib/session-data-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { JSONFileSync } from 'lowdb/node';
import { mkdirSync, writeFileSync } from 'fs';
import { join } from 'path';
import { randomUUID } from 'crypto';
import { getPackageRootDir } from '../utils/package-paths';
import { getProjectTmpBase } from '../utils/temp-dir';
import {
QueryDevelopmentSession,
QueryState,
Expand Down Expand Up @@ -403,6 +403,6 @@ function parseBoolEnv(envVar: string | undefined, defaultValue: boolean): boolea

// Export singleton instance with environment variable support
export const sessionDataManager = new SessionDataManager({
storageLocation: process.env.MONITORING_STORAGE_LOCATION || join(getPackageRootDir(), '.ql-mcp-tracking'),
storageLocation: process.env.MONITORING_STORAGE_LOCATION || join(getProjectTmpBase(), '.ql-mcp-tracking'),
enableMonitoringTools: parseBoolEnv(process.env.ENABLE_MONITORING_TOOLS, false),
});
Loading