addrbookFor publishers
← The evidence ledger

Evidence row 28647

Observed , by baseline/1.

Kind
listing
About
source_record mcp_registry:io.github.IcyHot09/opengrok-mcp-server
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
aae2a7adfebc25b6d7c544e4bbec8eea797879e7685ef6def8d9291af5382953
Leaf
0xed8f81e7d4b158a70dd6a62d88c0f66ce3e0c6bc7a6b0cb9119252a181f0c3b6

What was observed

{
  "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."
}

What the leaf hashes

{"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"}

Proof

Its day has not closed yet. A day closes ten minutes after midnight UTC; the proof appears here then.

How to check it · This row as JSON