Official server.json
{
"name": "io.github.IcyHot09/opengrok-mcp-server",
"title": "OpenGrok MCP Server",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"version": "9.6.0",
"packages": [
{
"version": "9.6.0",
"transport": {
"type": "stdio"
},
"identifier": "opengrok-mcp-server",
"runtimeHint": "npx",
"registryType": "npm",
"environmentVariables": [
{
"name": "OPENGROK_BASE_URL",
"format": "string",
"isRequired": true,
"description": "OpenGrok server base URL (e.g. https://opengrok.example.com/source/)",
"placeholder": "https://opengrok.example.com/source/"
},
{
"name": "OPENGROK_USERNAME",
"format": "string",
"description": "OpenGrok authentication username. Leave unset for anonymous access."
},
{
"name": "OPENGROK_PASSWORD",
"format": "string",
"isSecret": true,
"description": "OpenGrok authentication password. Prefer storing via OS keychain using 'npx opengrok-mcp-server setup'."
},
{
"name": "OPENGROK_VERIFY_SSL",
"format": "boolean",
"default": "true",
"description": "Verify TLS certificates. Set to false for self-signed or internal CA certs."
},
{
"name": "OPENGROK_CODE_MODE",
"format": "boolean",
"default": "true",
"description": "Enable Code Mode: 2-tool sandbox interface with env.opengrok.* JavaScript API. Reduces AI token usage by ~90%."
},
{
"name": "OPENGROK_ENABLE_MEMORY_TOOLS",
"format": "boolean",
"default": "false",
"description": "Register the 3 memory tools in Code Mode (memory status, read, update). Off = api + execute only."
},
{
"name": "OPENGROK_DEFAULT_PROJECT",
"format": "string",
"description": "Default project to scope all searches. Can be overridden per call."
},
{
"name": "OPENGROK_CONTEXT_BUDGET",
"format": "string",
"choices": [
"minimal",
"standard",
"generous"
],
"default": "standard",
"description": "Response size tier controlling token usage."
},
{
"name": "OPENGROK_API_VERSION",
"format": "string",
"choices": [
"v1",
"v2"
],
"default": "v1",
"description": "OpenGrok REST API version. Use v2 for call graph features (requires OpenGrok 1.12+)."
},
{
"name": "HTTP_PROXY",
"format": "string",
"description": "HTTP/HTTPS proxy URL for all OpenGrok API requests (e.g. http://proxy.company.com:8080). Also set as HTTPS_PROXY."
},
{
"name": "OPENGROK_RESPONSE_FORMAT_OVERRIDE",
"format": "string",
"choices": [
"markdown",
"json",
"tsv",
"toon",
"yaml",
"text"
],
"description": "Force a specific response format for all tools. Leave unset for per-tool auto-selection (recommended)."
},
{
"name": "OPENGROK_MEMORY_BANK_DIR",
"format": "string",
"description": "Directory where the AI stores investigation notes (active-task.md, investigation-log.md). Defaults to ~/.config/opengrok-mcp/memory-bank/ or workspace-relative when set by the VS Code extension."
},
{
"name": "OPENGROK_LOCAL_COMPILE_DB_PATHS",
"format": "string",
"description": "Comma-separated paths to compile_commands.json for C/C++ compiler flag and include-path extraction. Leave unset for automatic workspace discovery."
},
{
"name": "OPENGROK_ENABLE_ELICITATION",
"format": "boolean",
"default": "true",
"description": "Interactive AI Prompts — the AI pauses to ask questions during investigations (project selection, file disambiguation). Requires Claude Code v2.1.76+ or a client that supports MCP Elicitation."
},
{
"name": "OPENGROK_ENABLE_SAMPLING",
"format": "boolean",
"default": "false",
"description": "AI Sampling — allow the server to request LLM completions for error explanations and summaries. Off by default to avoid consuming premium requests (e.g. GitHub Copilot)."
},
{
"name": "OPENGROK_SAMPLING_MODEL",
"format": "string",
"description": "Model preference for MCP Sampling (used for error explanation and query reformulation)."
},
{
"name": "OPENGROK_ENABLE_FILES_API",
"format": "boolean",
"default": "false",
"description": "Files API Cache — avoids re-uploading unchanged investigation notes. Requires Files API support in the MCP client."
},
{
"name": "OPENGROK_ENABLE_OBSERVATION_MASKER",
"format": "boolean",
"default": "false",
"description": "Observation Masker — prepend compact history summaries to opengrok_execute results after N turns. Disabled by default; has no benefit for clients that retain full context (Claude Code, Cursor)."
},
{
"name": "OPENGROK_OBSERVATION_MASKER_TURNS",
"format": "string",
"default": "10",
"description": "Number of most-recent opengrok_execute results to keep as full text before masking older ones. Default: 10."
},
{
"name": "OPENGROK_SAMPLING_MAX_TOKENS",
"format": "string",
"default": "256",
"description": "Maximum tokens for AI sampling responses (error explanation, query reformulation). Range: 64–4096."
},
{
"name": "OPENGROK_AUDIT_LOG_FILE",
"format": "string",
"description": "Path to write structured audit events (CSV/JSON). Appends tool invocations, elicitation events, and errors. Leave unset to disable."
},
{
"name": "OPENGROK_RATELIMIT_RPM",
"format": "string",
"default": "60",
"description": "Maximum requests per minute to the OpenGrok server. Default: 60."
},
{
"name": "OPENGROK_PER_TOOL_RATELIMIT",
"format": "string",
"description": "Per-tool rate limits in requests per minute, as comma-separated tool:rpm pairs (e.g. opengrok_execute:15,opengrok_search_code:30). Overrides OPENGROK_RATELIMIT_RPM for specific tools."
},
{
"name": "OPENGROK_TIMEOUT",
"format": "string",
"default": "30",
"description": "HTTP request timeout in seconds for OpenGrok API calls. Increase for slow servers. Default: 30."
},
{
"name": "OPENGROK_DEFAULT_MAX_RESULTS",
"format": "string",
"default": "25",
"description": "Default maximum number of results returned per search query. Default: 25."
},
{
"name": "OPENGROK_PASSWORD_FILE",
"format": "string",
"description": "Path to a file containing the OpenGrok password (file-mounted secret for containers). Takes precedence over the OS keychain when OPENGROK_PASSWORD is unset."
},
{
"name": "OPENGROK_MAX_RESPONSE_BYTES",
"format": "string",
"description": "Hard cap on response payload size in bytes. Overrides the context-budget default. Non-positive values are ignored."
},
{
"name": "OPENGROK_SEARCH_AND_READ_CAP",
"format": "string",
"description": "Cap for the search_and_read compound tool in bytes. Overrides the context-budget default (2–8 KB depending on tier). Non-positive values are ignored."
},
{
"name": "OPENGROK_STRICT_SSRF",
"format": "boolean",
"default": "false",
"description": "When true, reject OPENGROK_BASE_URL values pointing at private/loopback IPs at startup. Default: false (warn only; per-request guards still apply)."
},
{
"name": "OPENGROK_JWT_ISSUER",
"format": "string",
"description": "Expected JWT issuer (iss claim) for HTTP transport OAuth. When set, JWTs from other issuers are rejected."
},
{
"name": "OPENGROK_GRAMMAR_DIR",
"format": "string",
"description": "Directory containing tree-sitter WASM grammars. Overrides the bundled grammar lookup."
}
]
}
],
"repository": {
"url": "https://github.com/IcyHot09/opengrok-mcp-server",
"source": "github"
},
"websiteUrl": "https://github.com/IcyHot09/opengrok-mcp-server",
"description": "MCP server bridging OpenGrok search engine with AI for instant context across massive codebases."
}