Octocode MCP

Octocode MCP

от bgauryy
Octocode ищет код по локальным и GitHub-репозиториям, анализирует структуру через AST и LSP, сравнивает версии. Быстрый Rust-движок экономит токены.

Octocode: agentic research platform

Octocode Logo

MCP Community Server Ask DeepWiki Glama score

Website YouTube

Evidence-first code research for AI agents and developers.

Octocode researches your local code and external code alike (GitHub repositories, PRs, npm) with one toolset: ripgrep + AST search, trees, precise reads, and LSP. Use it as a CLI or MCP server, backed by a Rust engine for fast, token-efficient results across single files or mega-repos.


Table of contents


Quick start

Prerequisites: Node.js 20.12+

1. Run the Octocode CLI with npx

npx octocode --help

2. Authenticate with GitHub - optional, but unlocks private repositories and higher API rate limits:

npx octocode auth login
npx octocode status       # verify the active token source

3. Choose your interface. Same tools and Rust engine on both. (Clone is on by default in the CLI, opt-in for MCP.)

🖥️ CLI - research straight from your terminal:

Часто задаваемые вопросы

Инструменты были проиндексированы:
ghGetFileContentтолько чтениеидемпотентныйвнешний мир

GitHub | Читает файл или конкретную область из репозитория GitHub. | Читает один файл, совпадающий фрагмент, диапазон строк или каталог на основе клона. Используйте matchRanges[].start/end в качестве LSP-якорей строк. Рабочий процесс ориентации: неизвестный или большой файл → сначала minify:"symbols" (структура символов + номера строк, низкая стоимость токенов) → затем читайте точные области с помощью startLine/endLine или matchString. Используйте minify:"none" только для цитат, регулярных выражений или diff-ов, где важен пробел. isPartial:true означает продолжать с charOffset из pagination.nextCharOffset. type:"directory" требует ENABLE_CLONE в конфигурации MCP-сервера; в противном случае используйте ghViewRepoStructure для просмотра дерева. 404: проверьте путь (точный регистр, без ведущего слеша) и ветку, или выведите дерево с помощью ghViewRepoStructure. Для type:"directory": результат включает localPath и параметры next.localSearch / next.viewStructure - передайте localPath в localSearchCode или localViewStructure для дальнейшего анализа.

Параметры
  • queriesobject[]обязательный

    Параллельные запросы.

  • responseCharLengthinteger

    Окно символов полного ответа.

  • responseCharOffsetinteger

    Полное смещение символов в ответе; повторный вызов с возвращённым значением при условии hasMore.

ghSearchCodeтолько чтениеидемпотентныйвнешний мир

Github | Поиск по содержимому кода или путям файлов в репозиториях GitHub. | Используйте match:"path" для дешёвого поиска файлов; используйте match:"file" только когда нужны фрагменты. Поиск выполняется только по ветке по умолчанию и с ограничениями; сужайте запрос через owner/repo/path/extension/filename. matchIndices — это смещения фрагментов, а не номера строк. Пустой результат: репозиторий может быть не проиндексирован или содержит только ветку по умолчанию — не утверждайте, что файл отсутствует. Проверьте существование пути через structure, затем используйте ограниченное локальное подтверждение: search "term" path --repo owner/repo --materialize required, clone owner/repo[/path] или cache fetch owner/repo [path] --depth file|tree|clone.

Параметры
  • queriesobject[]обязательный

    Параллельные запросы.

  • responseCharLengthinteger

    Окно символов полного ответа.

  • responseCharOffsetinteger

    Полное смещение символов в ответе; повторный вызов с возвращённым значением при условии hasMore.

ghSearchCommitsтолько чтениеидемпотентныйвнешний мир

Github | Проходит по истории коммитов GitHub-репозитория для пути или диапазона. | Археология коммитов: когда и почему изменился файл/область, а не текущий код (ghSearchCode/ghGetFileContent) и не PR (ghSearchPullRequests). Фильтра по ключевым словам в сообщении нет: проход сужается только по path/since/until/author/committer. Ищете конкретное изменение (например, переименование) без известного SHA/пути/даты? Сначала попробуйте ghSearchPullRequests/ghSearchCode, чтобы найти зацепку; в противном случае листайте сырую историю вручную. Точные изменения одного коммита: задайте base:"SHA^", head:"SHA", includeDiff:true, и его файлы и патчи придут одним вызовом; не нужно листать историю или подгружать файлы. owner+repo определяют репозиторий; path ограничивает файл/каталог (замыкающий / означает поддерево); since/until задают границы окна; branch выбирает ссылку (ref); includeDiff тяжёлый: ограничьтесь одним SHA или узким окном; itemsPerPage/page листают историю. Для идентификации кода используйте clone и локальный/LSP.

Параметры
  • queriesobject[]обязательный

    Параллельные запросы.

  • responseCharLengthinteger

    Окно символов полного ответа.

  • responseCharOffsetinteger

    Полное смещение символов в ответе; повторный вызов с возвращённым значением при условии hasMore.

ghSearchIssuesтолько чтениеидемпотентныйвнешний мир

GitHub | Ищет issues на GitHub или читает текст и комментарии одного issue. | Триаж issues и археология: баг-репорты, треды фич, но не PR (ghSearchPullRequests) и не код (ghSearchCode). Режим списка: keywordsToSearch + фильтры + сортировка/пагинация. Режим деталей: owner + repo + issueNumber + селекторы содержимого; окно текста/комментариев продолжается через charOffset/commentBodyOffset, страница комментариев через commentPage. totalCount появляется, только когда одна страница покрывает весь набор (endpoint также возвращает PR, но они отфильтровываются, поэтому цифры на странице не равны общему количеству); пустая страница с hasMore:true означает, что там были только PR, переходите по nextPage.

Параметры
  • queriesobject[]обязательный

    Параллельные запросы.

  • responseCharLengthinteger

    Окно символов полного ответа.

  • responseCharOffsetinteger

    Полное смещение символов в ответе; повторный вызов с возвращённым значением при условии hasMore.

ghSearchPullRequestsтолько чтениеидемпотентныйвнешний мир

Github | Ищет pull request'ы на GitHub или читает файлы, диффы и ревью одного PR. | Используется для PR-археологии - как и почему изменение попало в код, обсуждение ревью, диффы - а не для текущего кода (ghSearchCode/ghGetFileContent), коммитов (ghSearchCommits) или issues (ghSearchIssues). Комментарии, ответы в ревью и запрошенные изменения - это лишь утверждения. Сверяйте реально внесённые изменения с content.patches (mode:"selected") или файлом на merge SHA, а не с перепиской. Связи параметров: режим списка использует keywordsToSearch+filters+sort/page; режим деталей требует owner+repo+prNumber и селекторы контента. content.patches.mode:"selected" требует files или ranges. Окна body/patch/comment продолжаются через возвращаемые charOffset/commentBodyOffset; списки file/comment/commit используют свои поля page. Чтобы определить код, клонируйте репозиторий и используйте локальные инструменты/LSP.

Параметры
  • queriesobject[]обязательный

    Параллельные запросы.

  • responseCharLengthinteger

    Окно символов полного ответа.

  • responseCharOffsetinteger

    Полное смещение символов в ответе; повторный вызов с возвращённым значением при условии hasMore.

ghSearchReposтолько чтениеидемпотентныйвнешний мир

Github | Находит репозитории GitHub по имени, теме, языку или популярности. | Находит репозитории-кандидаты перед поиском кода; пропускает, если owner/repo известны (сразу переходит к ghSearchCode/ghViewRepoStructure). Начинает с concise:true, затем изучает с помощью ghViewRepoStructure/ghSearchCode. Ключевые слова объединяются по AND; темы также обязательны, но редко используются; owner сужает/перечисляет; match выбирает текстовые поля поиска; sort/range ранжируют кандидатов. Пустой результат → сбросьте фильтры/темы или расширьте язык/owner.

Параметры
  • queriesobject[]обязательный

    Параллельные запросы.

  • responseCharLengthinteger

    Окно символов полного ответа.

  • responseCharOffsetinteger

    Полное смещение символов в ответе; повторный вызов с возвращённым значением при условии hasMore.

ghViewRepoStructureтолько чтениеидемпотентныйвнешний мир

Github | Обзор дерева каталогов репозитория на GitHub. | Просматривайте дерево на GitHub перед чтением файлов. Используйте ghSearchCode(match:"path"), если уже знаете фрагмент имени файла. Сгенерированные директории и vendor автоматически исключаются. Вывод — structure[]; листайте, пока pagination.hasMore. Пустой результат/404: проверьте owner/repo/branch и путь, или просматривайте с корня.

Параметры
  • queriesobject[]обязательный

    Параллельные запросы.

  • responseCharLengthinteger

    Окно символов полного ответа.

  • responseCharOffsetinteger

    Полное смещение символов в ответе; повторный вызов с возвращённым значением при условии hasMore.

localFindDeadCodeтолько чтениеидемпотентный

Local | Находит предположительно неиспользуемые экспорты и кластеры мёртвого кода с помощью анализа достижимости по всему репозиторию. | Кандидаты на мёртвые экспорты по всему репозиторию, а не проверки отдельных символов (используйте references/callers из lspGetSemantics). Один проход строит граф файлов/символов (нативный AST, без отдельных запросов на каждый символ) и вычисляет достижимость от точек входа, так что масштабируется с размером репозитория, а не с числом кандидатов. Ловит мёртвые кластеры со взаимными ссылками (файлы, которые вызывают только друг друга и недостижимы ни из одной точки входа), которые проверка одного символа упускает. Удержание работает на уровне символов: вызов в том же файле удерживает вызываемый символ, только если жив вызывающий; именованные ре-экспорты прослеживаются через barrel-файлы export* до точки входа. Каждый кандидат содержит viaHeuristic: "reexport-chain" (цепочка закончилась без потребителя: самый ненадёжный признак, проверяйте в первую очередь) или "lexical-count" (нет импорта, нет необъяснимого использования в том же файле). Это кандидаты, а не доказательство. Запустите next.verifyReferences (предзаполненный запрос references к lspGetSemantics) для каждого кандидата; ноль references = точно мёртв. Переходите по якорям файл/строка в localGetFileContent или lspGetSemantics.

Параметры
  • queriesobject[]обязательный

    Параллельные запросы.

  • responseCharLengthinteger

    Окно символов полного ответа.

  • responseCharOffsetinteger

    Полное смещение символов в ответе; повторный вызов с возвращённым значением при условии hasMore.

localFindFilesтолько чтениеидемпотентный

Local | Ищет локальные файлы и папки по имени, размеру, времени или правам доступа. | Находит пути по имени, метаданным, времени, размеру, правам или типу; возвращает пути/метаданные, а не содержимое файлов. Используй localSearchCode, если условие — содержимое файлов. Временные окна задаются в d/h/w/m. По умолчанию ничего не исключено: передай excludeDir (например ["node_modules","dist","coverage"]), чтобы отсечь папки сборки/вендоров. Пустой результат: ослабь фильтры по имени/типу/размеру/времени или расширь путь поиска.

Параметры
  • queriesobject[]обязательный

    Параллельные запросы.

  • responseCharLengthinteger

    Окно символов полного ответа.

  • responseCharOffsetinteger

    Полное смещение символов в ответе; повторный вызов с возвращённым значением при условии hasMore.

localGetFileContentтолько чтениеидемпотентный

Local | Прочитать локальный файл или конкретную область. | Прочитать один локальный файл, совпавшие срезы или диапазон строк. Используйте matchRanges[].start/end как якоря строк LSP. Рабочий процесс ориентации: неизвестный или большой файл → сначала minify:"symbols" (схема символов + номера строк, низкая стоимость токенов) → затем читать точные регионы с помощью startLine/endLine или matchString. Используйте minify:"none" только для цитат, регулярных выражений или diff, где важны пробелы. isPartial:true означает продолжать с charOffset из pagination.nextCharOffset; предупреждения указывают на редактирование, разбиение на страницы или запасной вариант symbols. Не найдено: проверьте путь или выведите список директории с помощью localViewStructure.

Параметры
  • queriesobject[]обязательный

    Параллельные запросы.

  • responseCharLengthinteger

    Окно символов полного ответа.

  • responseCharOffsetinteger

    Полное смещение символов в ответе; повторный вызов с возвращённым значением при условии hasMore.

localSearchCodeтолько чтениеидемпотентный

Local — ищет локальные файлы по тексту, регулярным выражениям или AST-шаблонам, чтобы найти файл и строку. Используйте discovery для путей, paginated для фрагментов, detailed для контекста, structural для поиска по AST. Текстовый/регулярный поиск требует ключевых слов; структурный — шаблон или правило. Сужайте шумные запросы перед пролистыванием; searchEngine предупреждает, когда fallback снижает возможности. Послепоисковый рабочий процесс: найдя якорь файл+строка, прочитайте файл с помощью localGetFileContent(minify:"symbols") для краткого обзора символов, экономящего токены, затем используйте startLine/endLine для точных областей. Используйте minify:"none" только если пробелы или комментарии являются доказательствами. Совет по структурным шаблонам: шаблон должен соответствовать полному узлу AST. Функция обычно требует тело ({ $$$BODY }), тип возврата и любой необходимый синтаксис — просто имя или сигнатура без тела дают ноль совпадений без ошибки синтаксического анализа. Используйте YAML-правило (inside/has/not/any) для частичных или относительных совпадений вместо простого шаблона. Пустой результат: расширьте ключевые слова, удалите фильтры include/exclude/langType или проверьте путь.

Параметры
  • queriesobject[]обязательный

    Параллельные запросы.

  • responseCharLengthinteger

    Окно символов полного ответа.

  • responseCharOffsetinteger

    Полное смещение символов в ответе; повторный вызов с возвращённым значением при условии hasMore.

localViewStructureтолько чтениеидемпотентный

Local | Просмотр дерева локального каталога — самый дешёвый шаг первичной ориентации; контент не загружается. | Просмотр формы каталога. Используйте localFindFiles для фильтров по имени/метаданным и localSearchCode(mode:"discovery") для файлов, содержащих текст. details:true или showFileLastModified:true переключает вывод на структурированный entries[]. Перелистывайте, когда pagination.hasMore. Если результат пуст: сбросьте фильтры pattern/extensions/filesOnly или проверьте путь.

Параметры
  • queriesobject[]обязательный

    Параллельные запросы.

  • responseCharLengthinteger

    Окно символов полного ответа.

  • responseCharOffsetinteger

    Полное смещение символов в ответе; повторный вызов с возвращённым значением при условии hasMore.

lspGetSemanticsтолько чтениеидемпотентный

Локально | Выполняет семантические запросы LSP - определения, ссылки, иерархия вызовов, символы, иерархия типов, диагностика. | documentSymbols/diagnostic требуют только uri; workspaceSymbol требует только symbolName; всем остальным типам нужны uri + symbolName + lineHint из реального поискового якоря - никогда не угадывайте lineHint. Ориентационный workflow: сначала вызывайте documentSymbols - это семантический аналог minify:"symbols", возвращает полную структуру символов с номерами строк с низкой стоимостью токенов. Используйте эти номера строк как lineHint для запросов определений, ссылок, вызывающих и наведения. callers/callees/callHierarchy для влияния вызываемых объектов; references для невызываемых; supertypes/subtypes для цепочек наследования. Предпочитайте format:"compact" и groupByFile для широких запросов, чтобы снизить стоимость токенов; ranges[].line - это якоря для последующих действий. serverUnavailable/unsupported = отсутствие возможности, а не отсутствие использования. Нет сервера: выполните "octocode lsp-server list", чтобы проверить, что доступно; "octocode lsp-server install [language]" - чтобы добавить сервер. Пусто/неполно: заново установите якорь с помощью свежего вызова documentSymbols или вернитесь к localSearchCode.

Параметры
  • queriesobject[]обязательный

    Параллельные запросы.

  • responseCharLengthinteger

    Окно символов полного ответа.

  • responseCharOffsetinteger

    Полное смещение символов в ответе; повторный вызов с возвращённым значением при условии hasMore.

npmSearchтолько чтениеидемпотентныйвнешний мир

NPM | Ищет пакеты npm и находит их исходные репозитории. Сопоставляет пакет с его исходным репозиторием; пропускает, если owner/repo известен. Точное имя → один полный результат; ключевые слова → постраничные кандидаты. Переходит по репозиторию в инструменты GitHub.

Параметры
  • queriesobject[]обязательный

    Параллельные запросы.

  • responseCharLengthinteger

    Окно символов полного ответа.

  • responseCharOffsetinteger

    Полное смещение символов в ответе; повторный вызов с возвращённым значением при условии hasMore.

18.0.1основная
17.0.2
17.0.1
1.0.2
1.0.1
1.0.0
0.1.0

Выберите клиент, чтобы установить Octocode MCP:

Любой клиент

Конфиг добавления MCP сервера стандартный, обычно он не меняется вообще, поэтому подходит практически к любому ИИ клиенту, поддерживающему MCP.

{
  "mcpServers": {
    "bgauryy-octocode-mcp-imvxpy714s": {
      "args": [
        "@octocodeai/mcp@latest"
      ],
      "type": "stdio",
      "command": "npx"
    }
  }
}
CursorCursor

Перейдите по ссылке и сервер автоматически будет добавлен в Cursor. Либо откройте/создайте файл ~/.cursor/mcp.json(%USERPROFILE%\.cursor\mcp.json на Windows) и добавьте конфиг сервера:

{
  "mcpServers": {
    "bgauryy-octocode-mcp-imvxpy714s": {
      "args": [
        "@octocodeai/mcp@latest"
      ],
      "type": "stdio",
      "command": "npx"
    }
  }
}
VS Code

Создайте .vscode/mcp.json в проекте (ключ верхнего уровня — servers):

{
  "servers": {
    "bgauryy-octocode-mcp-imvxpy714s": {
      "type": "stdio",
      "args": [
        "@octocodeai/mcp@latest"
      ],
      "command": "npx"
    }
  }
}

Либо добавьте сервер через терминал:

code --add-mcp "{\"name\":\"bgauryy-octocode-mcp-imvxpy714s\",\"type\":\"stdio\",\"args\":[\"@octocodeai/mcp@latest\"],\"command\":\"npx\"}"
ClaudeClaude Desktop

Откройте Settings → Developer → Edit Config — это откроет файл claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Впишите сервер и полностью перезапустите Claude Desktop:

{
  "mcpServers": {
    "bgauryy-octocode-mcp-imvxpy714s": {
      "args": [
        "@octocodeai/mcp@latest"
      ],
      "type": "stdio",
      "command": "npx"
    }
  }
}
Claude CodeClaude Code

Добавьте сервер одной командой в терминале:

claude mcp add bgauryy-octocode-mcp-imvxpy714s -- npx @octocodeai/mcp@latest

Либо через JSON-конфиг:

claude mcp add-json bgauryy-octocode-mcp-imvxpy714s "{\"args\":[\"@octocodeai/mcp@latest\"],\"type\":\"stdio\",\"command\":\"npx\"}"
CodexCodex

Добавьте сервер командой в терминале:

codex mcp add bgauryy-octocode-mcp-imvxpy714s -- npx @octocodeai/mcp@latest

Либо вручную в ~/.codex/config.toml(%USERPROFILE%\.codex\config.toml на Windows):

[mcp_servers.bgauryy-octocode-mcp-imvxpy714s]
command = "npx"
args = ["@octocodeai/mcp@latest"]
PerplexityPerplexity

MCP доступен подписчикам Perplexity Pro / Max / Enterprise. Локальные серверы — только в приложении для macOS.

  1. Откройте Настройки аккаунта → Connectors.
  2. Установите вспомогательное приложение PerplexityXPC (один раз).
  3. Нажмите Add Connector → вкладка Simple.
  4. В поле Server Name укажите Octocode MCP, а в поле команды запуска — строку ниже:
npx @octocodeai/mcp@latest

Нажмите Save и дождитесь статуса Running.

WindsurfWindsurf

Откройте Windsurf Settings → Cascade → MCP Servers или отредактируйте файл ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "bgauryy-octocode-mcp-imvxpy714s": {
      "args": [
        "@octocodeai/mcp@latest"
      ],
      "type": "stdio",
      "command": "npx"
    }
  }
}
ClineCline

В панели Cline нажмите иконку MCP Servers → Configure → Configure MCP Servers (или отредактируйте ~/.cline/mcp.json) и добавьте сервер:

{
  "mcpServers": {
    "bgauryy-octocode-mcp-imvxpy714s": {
      "args": [
        "@octocodeai/mcp@latest"
      ],
      "type": "stdio",
      "command": "npx",
      "disabled": false,
      "autoApprove": []
    }
  }
}
Continue

Создайте файл в .continue/mcpServers/ (например bgauryy-octocode-mcp-imvxpy714s.yaml) или добавьте блок в config.yaml. MCP работает только в режиме agent:

mcpServers:
  - name: bgauryy-octocode-mcp-imvxpy714s
    command: npx
    args:
      - "@octocodeai/mcp@latest"
Zed

Выполните agent: add context server или откройте настройки (zed: open settings file) и добавьте сервер в объект context_servers:

{
  "context_servers": {
    "bgauryy-octocode-mcp-imvxpy714s": {
      "args": [
        "@octocodeai/mcp@latest"
      ],
      "type": "stdio",
      "command": "npx"
    }
  }
}

Похожие MCP-сервера

srijanshukla18/xray

srijanshukla18/xray

от srijanshukla18

XRAY даёт AI-ассистентам навигацию по коду: карту проекта, поиск символов и анализ влияния. Использует ast-grep для точного синтаксического поиска, поддерживает Python, JS/TS, Go. Без БД и LSP — лё...

Python⭐ 52
selvage-lab/selvage

selvage-lab/selvage

от selvage-lab

MCP-сервер Selvage автоматизирует ревью кода — анализирует Git diff, находит баги, уязвимости и улучшает качество. Использует умный AST-контекст и разные AI-модели, работает через CLI или MCP-режим в Cursor и Claude Code. Ускоряет проверку без ожидания ревьюеров.

Python⭐ 36
James-Chahwan/repo-graph

James-Chahwan/repo-graph

от james-chahwan

Строит граф кодовой базы для LLM-ассистентов: описывает сущности, связи и потоки. Позволяет быстро находить нужные файлы без чтения всего кода, экономя до 60% токенов — полезно для больших проектов...

Python⭐ 94
hechtcarmel/jetbrains-index-mcp-plugin

hechtcarmel/jetbrains-index-mcp-plugin

от hechtcarmel

MCP сервер для JetBrains IDE, который даёт AI-ассистентам доступ к индексации и рефакторингу. Работает с Java, Python, Go, Rust и другими языками. Включает инструменты для поиска, навигации и рефакторинга - всё через единый протокол.

Kotlin⭐ 363
sonarsource/sonarqube-mcp-server

sonarsource/sonarqube-mcp-server

от sonarsource

Сервер SonarQube MCP подключает анализ качества кода и безопасности к AI-агентам. Разработчики проверяют код прямо из агента, используя SonarQube Cloud или Server, и анализируют фрагменты без переключений.

Java⭐ 665
notasandy/mcp-code-sanitizer

notasandy/mcp-code-sanitizer

от notasandy

MCP сервер для строгого AI-ревью кода: находит баги, уязвимости и оценивает качество от 0 до 100. Подходит разработчикам в Claude, Cursor и VS Code. Бесплатный анализ через Groq, интеграция с GitHub Actions для автоматических PR-ревью.

Python⭐ 3
© Каталог MCP, 2026. Все права защищены.
Проект не аффилирован с Anthropic и любыми упомянутыми продуктами.
Все названия и торговые марки принадлежат их владельцам.
Контакты для связи: hi@mcp-katalog.ru

Лука Никитин