Octocode MCP

Octocode MCP

от bgauryy
Octocode — MCP сервер для доказательного исследования кода. Он объединяет 13 инструментов: поиск по GitHub, локальный поиск, AST, LSP, чтение файлов и репозиториев. Помогает AI-агентам и разработчи...

Octocode - Agentic Research Platform

Octocode Logo

MCP Community Server Ask DeepWiki

Website YouTube

Evidence-first code research for AI agents and developers.

Octocode gives an agent the full context it needs to change, review, or explain code: real evidence from your local workspace and from external sources (GitHub repositories, pull requests, and npm packages). One toolset covers all of it: ripgrep and AST structural search, repository tree browsing, precise content fetching, LSP semantic navigation, and binary inspection.

Run it as a CLI or an MCP server. A Rust engine keeps every call fast and token-efficient, minifying and skeletonizing code so an agent reads the shape of a file instead of every byte, from a single file to a mega-repo. It is also the best tool for cross-repository research and exploration across millions of repositories.


Table of Contents

  • Quick Start
  • Why Octocode
  • What You Can Do
  • Tools
  • MCP
  • CLI
  • Configuration
  • Authentication Methods
  • Security
  • Language Support
  • Skills
  • Architecture
  • Documentation
  • Troubleshooting

Quick Start

1. Run the Octocode CLI with npx

Инструменты были проиндексированы:
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[]обязательный

    Parallel queries.

  • responseCharLengthinteger

    Full-response char window.

  • responseCharOffsetinteger

    Full-response char offset; re-call with returned value when 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[]обязательный

    Parallel queries.

  • responseCharLengthinteger

    Full-response char window.

  • responseCharOffsetinteger

    Full-response char offset; re-call with returned value when 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[]обязательный

    Parallel queries.

  • responseCharLengthinteger

    Full-response char window.

  • responseCharOffsetinteger

    Full-response char offset; re-call with returned value when 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[]обязательный

    Parallel queries.

  • responseCharLengthinteger

    Full-response char window.

  • responseCharOffsetinteger

    Full-response char offset; re-call with returned value when 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[]обязательный

    Parallel queries.

  • responseCharLengthinteger

    Full-response char window.

  • responseCharOffsetinteger

    Full-response char offset; re-call with returned value when hasMore.

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

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

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

    Parallel queries.

  • responseCharLengthinteger

    Full-response char window.

  • responseCharOffsetinteger

    Full-response char offset; re-call with returned value when hasMore.

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

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

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

    Parallel queries.

  • responseCharLengthinteger

    Full-response char window.

  • responseCharOffsetinteger

    Full-response char offset; re-call with returned value when hasMore.

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

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

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

    Parallel queries.

  • responseCharLengthinteger

    Full-response char window.

  • responseCharOffsetinteger

    Full-response char offset; re-call with returned value when hasMore.

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

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

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

    Parallel queries.

  • responseCharLengthinteger

    Full-response char window.

  • responseCharOffsetinteger

    Full-response char offset; re-call with returned value when hasMore.

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

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

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

    Parallel queries.

  • responseCharLengthinteger

    Full-response char window.

  • responseCharOffsetinteger

    Full-response char offset; re-call with returned value when 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[]обязательный

    Parallel queries.

  • responseCharLengthinteger

    Full-response char window.

  • responseCharOffsetinteger

    Full-response char offset; re-call with returned value when hasMore.

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

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

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

    Parallel queries.

  • responseCharLengthinteger

    Full-response char window.

  • responseCharOffsetinteger

    Full-response char offset; re-call with returned value when 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[]обязательный

    Parallel queries.

  • responseCharLengthinteger

    Full-response char window.

  • responseCharOffsetinteger

    Full-response char offset; re-call with returned value when hasMore.

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

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

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

    Parallel queries.

  • responseCharLengthinteger

    Full-response char window.

  • responseCharOffsetinteger

    Full-response char offset; re-call with returned value when hasMore.

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

srijanshukla18/xray

srijanshukla18/xray

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

Python52
tadas-github/a2asearch-mcp

tadas-github/a2asearch-mcp

MCP-сервер для поиска по единому каталогу AI-агентов, MCP-серверов, CLI-инструментов и навыков. Позволяет находить нужные инструменты прямо из Claude, Cursor и других MCP-клиентов. Полезен разработ...

JavaScript21
adhikasp/mcp-git-ingest

adhikasp/mcp-git-ingest

MCP-сервер для чтения структуры GitHub-репозитория и ключевых файлов. Упрощает анализ кода: извлекает иерархию папок, важные файлы, помогает быстро разобраться в проекте. Полезен разработчикам и AI...

Python314
artmann/package-registry-mcp

artmann/package-registry-mcp

MCP сервер для поиска пакетов в реестрах NPM, crates.io, NuGet, PyPI, Go и уязвимостей GitHub. Помогает разработчикам и AI-агентам (Claude, Cursor) получать свежие данные о зависимостях.

TypeScript39
idosal/git-mcp

idosal/git-mcp

GitMCP — бесплатный открытый MCP-сервер, подключающий AI-ассистентов к актуальной документации и коду любого GitHub-проекта. Устраняет галлюцинации, работает без установки, через SSE-подключение. П...

TypeScript8380
vezlo/src-to-kb

vezlo/src-to-kb

Преобразует любой репозиторий исходного кода в поисковую базу знаний с автоматической разбивкой, эмбеддингами и интеллектуальным поиском. Поддерживает MCP для интеграции с Claude Code и Cursor, пол...

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

Лука Никитин