{"server":{"$schema":"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json","name":"io.github.IcyHot09/opengrok-mcp-server","description":"MCP server bridging OpenGrok search engine with AI for instant context across massive codebases.","title":"OpenGrok MCP Server","repository":{"url":"https://github.com/IcyHot09/opengrok-mcp-server","source":"github"},"version":"9.6.0","websiteUrl":"https://github.com/IcyHot09/opengrok-mcp-server","packages":[{"registryType":"npm","identifier":"opengrok-mcp-server","version":"9.6.0","runtimeHint":"npx","transport":{"type":"stdio"},"environmentVariables":[{"description":"OpenGrok server base URL (e.g. https://opengrok.example.com/source/)","isRequired":true,"format":"string","placeholder":"https://opengrok.example.com/source/","name":"OPENGROK_BASE_URL"},{"description":"OpenGrok authentication username. Leave unset for anonymous access.","format":"string","name":"OPENGROK_USERNAME"},{"description":"OpenGrok authentication password. Prefer storing via OS keychain using 'npx opengrok-mcp-server setup'.","format":"string","isSecret":true,"name":"OPENGROK_PASSWORD"},{"description":"Verify TLS certificates. Set to false for self-signed or internal CA certs.","format":"boolean","default":"true","name":"OPENGROK_VERIFY_SSL"},{"description":"Enable Code Mode: 2-tool sandbox interface with env.opengrok.* JavaScript API. Reduces AI token usage by ~90%.","format":"boolean","default":"true","name":"OPENGROK_CODE_MODE"},{"description":"Register the 3 memory tools in Code Mode (memory status, read, update). Off = api + execute only.","format":"boolean","default":"false","name":"OPENGROK_ENABLE_MEMORY_TOOLS"},{"description":"Default project to scope all searches. Can be overridden per call.","format":"string","name":"OPENGROK_DEFAULT_PROJECT"},{"description":"Response size tier controlling token usage.","format":"string","default":"standard","choices":["minimal","standard","generous"],"name":"OPENGROK_CONTEXT_BUDGET"},{"description":"OpenGrok REST API version. Use v2 for call graph features (requires OpenGrok 1.12+).","format":"string","default":"v1","choices":["v1","v2"],"name":"OPENGROK_API_VERSION"},{"description":"HTTP/HTTPS proxy URL for all OpenGrok API requests (e.g. http://proxy.company.com:8080). Also set as HTTPS_PROXY.","format":"string","name":"HTTP_PROXY"},{"description":"Force a specific response format for all tools. Leave unset for per-tool auto-selection (recommended).","format":"string","choices":["markdown","json","tsv","toon","yaml","text"],"name":"OPENGROK_RESPONSE_FORMAT_OVERRIDE"},{"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.","format":"string","name":"OPENGROK_MEMORY_BANK_DIR"},{"description":"Comma-separated paths to compile_commands.json for C/C++ compiler flag and include-path extraction. Leave unset for automatic workspace discovery.","format":"string","name":"OPENGROK_LOCAL_COMPILE_DB_PATHS"},{"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.","format":"boolean","default":"true","name":"OPENGROK_ENABLE_ELICITATION"},{"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).","format":"boolean","default":"false","name":"OPENGROK_ENABLE_SAMPLING"},{"description":"Model preference for MCP Sampling (used for error explanation and query reformulation).","format":"string","name":"OPENGROK_SAMPLING_MODEL"},{"description":"Files API Cache — avoids re-uploading unchanged investigation notes. Requires Files API support in the MCP client.","format":"boolean","default":"false","name":"OPENGROK_ENABLE_FILES_API"},{"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).","format":"boolean","default":"false","name":"OPENGROK_ENABLE_OBSERVATION_MASKER"},{"description":"Number of most-recent opengrok_execute results to keep as full text before masking older ones. Default: 10.","format":"string","default":"10","name":"OPENGROK_OBSERVATION_MASKER_TURNS"},{"description":"Maximum tokens for AI sampling responses (error explanation, query reformulation). Range: 64–4096.","format":"string","default":"256","name":"OPENGROK_SAMPLING_MAX_TOKENS"},{"description":"Path to write structured audit events (CSV/JSON). Appends tool invocations, elicitation events, and errors. Leave unset to disable.","format":"string","name":"OPENGROK_AUDIT_LOG_FILE"},{"description":"Maximum requests per minute to the OpenGrok server. Default: 60.","format":"string","default":"60","name":"OPENGROK_RATELIMIT_RPM"},{"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.","format":"string","name":"OPENGROK_PER_TOOL_RATELIMIT"},{"description":"HTTP request timeout in seconds for OpenGrok API calls. Increase for slow servers. Default: 30.","format":"string","default":"30","name":"OPENGROK_TIMEOUT"},{"description":"Default maximum number of results returned per search query. Default: 25.","format":"string","default":"25","name":"OPENGROK_DEFAULT_MAX_RESULTS"},{"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.","format":"string","name":"OPENGROK_PASSWORD_FILE"},{"description":"Hard cap on response payload size in bytes. Overrides the context-budget default. Non-positive values are ignored.","format":"string","name":"OPENGROK_MAX_RESPONSE_BYTES"},{"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.","format":"string","name":"OPENGROK_SEARCH_AND_READ_CAP"},{"description":"When true, reject OPENGROK_BASE_URL values pointing at private/loopback IPs at startup. Default: false (warn only; per-request guards still apply).","format":"boolean","default":"false","name":"OPENGROK_STRICT_SSRF"},{"description":"Expected JWT issuer (iss claim) for HTTP transport OAuth. When set, JWTs from other issuers are rejected.","format":"string","name":"OPENGROK_JWT_ISSUER"},{"description":"Directory containing tree-sitter WASM grammars. Overrides the bundled grammar lookup.","format":"string","name":"OPENGROK_GRAMMAR_DIR"}]}]},"_meta":{"io.modelcontextprotocol.registry/official":{"status":"active","statusChangedAt":"2026-09-16T07:02:40.419221Z","publishedAt":"2026-09-16T07:02:40.419221Z","updatedAt":"2026-09-16T07:02:40.419221Z","isLatest":true}}}
