Clean
Outbound network 12
Environment variables (config / keys) 39
Shell / command execution 23
AI review
This is a legitimate GitLab MCP server extension. All environment variable accesses are standard configuration (API URL, tokens, workspace root) and network calls are to GitLab's API. The static findings reflect normal patterns for a GitLab integration tool, not malicious behavior.
Model: deepseek-chat
Static findings
Outbound network · Makes outbound network requests
info
.github/agents/python-reviewer.agent.md:81
- **HIGH:** Do not mix `asyncio` and blocking I/O in the same event loop. Blocking calls (`time.sleep`, `open` in sync mode, `requests.get`) block the entire event loop.
low
oauth.ts:85
const req = http.request(options, res => {
low
test-note.ts:24
const response = await fetch(url.toString(), {
low
test-resolve-issue-note.ts:28
const response = await fetch(url.toString(), {
info
test/dynamic-api-url-test.ts:319
const response = await fetch(metricsUrl);
info
test/mcp-oauth-tests.ts:287
const res = await fetch(mcpUrl, {
info
test/remote-auth-simple-test.ts:38
const response = await fetch(metricsUrl);
info
test/remote-auth-tests.ts:70
const response = await fetch(url, {
info
test/stateless/session-id-integration.test.ts:115
const res = await fetch(url, {
info
test/test-remote-downloads.ts:410
const downloadRes = await fetch(parsed.download_url);
info
test/test-token-optimizations.ts:68
const response = await fetch(url, {
info
test/validate-api.js:63
const response = await fetch(test.url, {
Environment variables (config / keys) · Reads environment variables (config / API keys)
low
config.ts:25
return cliArgs[cliKey] || process.env[envKey] || defaultValue;
low
customSchemas.ts:2
const DEFAULT_NULL = process.env.DEFAULT_NULL === "true";
low
index.ts:58
const secret = process.env.DOWNLOAD_TOKEN_SECRET;
low
mcp-server/src/utils.ts:8
return path.resolve(process.env.WORKSPACE_ROOT || process.cwd());
low
oauth.ts:14
level: process.env.LOG_LEVEL || "info",
low
stateless/secret.ts:62
env: NodeJS.ProcessEnv = process.env
low
test-cli.js:34
return cliArgs[cliKey] || process.env[envKey] || defaultValue;
low
test-note.ts:10
const GITLAB_API_URL = process.env.GITLAB_API_URL || "https://gitlab.com";
low
test-resolve-issue-note.ts:10
const GITLAB_API_URL = process.env.GITLAB_API_URL || "https://gitlab.com";
info
test/clients/stdio-client.ts:33
// Copy process.env, filtering out undefined values
info
test/config-allowed-groups.test.ts:11
* config.ts reads process.env at module load, so each scenario runs in a
info
test/dynamic-routing-tests.ts:18
const originalToken = process.env.GITLAB_TOKEN_TEST;
+ 27 more
Shell / command execution · Executes shell / system commands
info
test/config-allowed-groups.test.ts:16
import { execFileSync } from "node:child_process";
info
test/stateless/config-ttl.test.ts:22
import { execFileSync } from "node:child_process";
info
test/streamable-http-static-token-auth.test.ts:2
import { spawn } from "node:child_process";
info
test/test-ci-lint.ts:3
import { spawn } from "child_process";
info
test/test-ci-variables.ts:3
import { spawn } from "child_process";
info
test/test-dependency-proxy.ts:3
import { spawn } from "child_process";
info
test/test-deployment-tools.ts:3
import { spawn } from "child_process";
info
test/test-download-attachment.ts:3
import { spawn } from 'node:child_process';
info
test/test-get-file-blame.ts:3
import { spawn } from "child_process";
info
test/test-job-artifacts.ts:3
import { spawn } from 'child_process';
info
test/test-list-issues.ts:3
import { spawn } from "child_process";
info
test/test-list-merge-requests.ts:3
import { spawn } from 'child_process';
+ 11 more
Scanning every extension your team installs?
Pro & Team add monitoring, private scans, and a CI gate for unsafe extensions.
MCPVet is a heuristic aid, not a security guarantee. A clean grade does not prove an extension is safe; always review code and instructions you don't trust.