{"id":28647,"recorded_at":"2026-10-26T14:35:59.910469Z","observed_at":"2026-10-26T14:35:59.910419Z","subject_kind":"source_record","subject":"mcp_registry:io.github.IcyHot09/opengrok-mcp-server","kind":"listing","method":"baseline/1","body":{"endpoints":[["web","https://github.com/IcyHot09/opengrok-mcp-server"]],"name":"OpenGrok MCP Server","owner_address":null,"raw":{"_meta":{"io.modelcontextprotocol.registry/official":{"isLatest":true,"publishedAt":"2026-09-16T07:02:40.419221Z","status":"active","statusChangedAt":"2026-09-16T07:02:40.419221Z","updatedAt":"2026-09-16T07:02:40.419221Z"}},"server":{"$schema":"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json","description":"MCP server bridging OpenGrok search engine with AI for instant context across massive codebases.","name":"io.github.IcyHot09/opengrok-mcp-server","packages":[{"environmentVariables":[{"description":"OpenGrok server base URL (e.g. https://opengrok.example.com/source/)","format":"string","isRequired":true,"name":"OPENGROK_BASE_URL","placeholder":"https://opengrok.example.com/source/"},{"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"},{"default":"true","description":"Verify TLS certificates. Set to false for self-signed or internal CA certs.","format":"boolean","name":"OPENGROK_VERIFY_SSL"},{"default":"true","description":"Enable Code Mode: 2-tool sandbox interface with env.opengrok.* JavaScript API. Reduces AI token usage by ~90%.","format":"boolean","name":"OPENGROK_CODE_MODE"},{"default":"false","description":"Register the 3 memory tools in Code Mode (memory status, read, update). Off = api + execute only.","format":"boolean","name":"OPENGROK_ENABLE_MEMORY_TOOLS"},{"description":"Default project to scope all searches. Can be overridden per call.","format":"string","name":"OPENGROK_DEFAULT_PROJECT"},{"choices":["minimal","standard","generous"],"default":"standard","description":"Response size tier controlling token usage.","format":"string","name":"OPENGROK_CONTEXT_BUDGET"},{"choices":["v1","v2"],"default":"v1","description":"OpenGrok REST API version. Use v2 for call graph features (requires OpenGrok 1.12+).","format":"string","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"},{"choices":["markdown","json","tsv","toon","yaml","text"],"description":"Force a specific response format for all tools. Leave unset for per-tool auto-selection (recommended).","format":"string","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"},{"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.","format":"boolean","name":"OPENGROK_ENABLE_ELICITATION"},{"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).","format":"boolean","name":"OPENGROK_ENABLE_SAMPLING"},{"description":"Model preference for MCP Sampling (used for error explanation and query reformulation).","format":"string","name":"OPENGROK_SAMPLING_MODEL"},{"default":"false","description":"Files API Cache — avoids re-uploading unchanged investigation notes. Requires Files API support in the MCP client.","format":"boolean","name":"OPENGROK_ENABLE_FILES_API"},{"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).","format":"boolean","name":"OPENGROK_ENABLE_OBSERVATION_MASKER"},{"default":"10","description":"Number of most-recent opengrok_execute results to keep as full text before masking older ones. Default: 10.","format":"string","name":"OPENGROK_OBSERVATION_MASKER_TURNS"},{"default":"256","description":"Maximum tokens for AI sampling responses (error explanation, query reformulation). Range: 64–4096.","format":"string","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"},{"default":"60","description":"Maximum requests per minute to the OpenGrok server. Default: 60.","format":"string","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"},{"default":"30","description":"HTTP request timeout in seconds for OpenGrok API calls. Increase for slow servers. Default: 30.","format":"string","name":"OPENGROK_TIMEOUT"},{"default":"25","description":"Default maximum number of results returned per search query. Default: 25.","format":"string","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"},{"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).","format":"boolean","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"}],"identifier":"opengrok-mcp-server","registryType":"npm","runtimeHint":"npx","transport":{"type":"stdio"},"version":"9.6.0"}],"repository":{"source":"github","url":"https://github.com/IcyHot09/opengrok-mcp-server"},"title":"OpenGrok MCP Server","version":"9.6.0","websiteUrl":"https://github.com/IcyHot09/opengrok-mcp-server"}},"source":"mcp_registry","summary":"MCP server bridging OpenGrok search engine with AI for instant context across massive codebases."},"body_sha256":"aae2a7adfebc25b6d7c544e4bbec8eea797879e7685ef6def8d9291af5382953","prev_id":null,"leaf":"0xed8f81e7d4b158a70dd6a62d88c0f66ce3e0c6bc7a6b0cb9119252a181f0c3b6","leaf_text":"{\"body\":\"aae2a7adfebc25b6d7c544e4bbec8eea797879e7685ef6def8d9291af5382953\",\"id\":28647,\"kind\":\"listing\",\"method\":\"baseline/1\",\"observed_us\":1793025359910419,\"prev\":null,\"subject\":\"mcp_registry:io.github.IcyHot09/opengrok-mcp-server\",\"subject_kind\":\"source_record\"}","day":null,"proof":[]}