github-assistant-mcp
GitHub Assistant MCP
Небольшой автономный сервер Model Context Protocol (MCP), который предоставляет пять инструментов, ориентированных на чтение, для ИИ-ассистента программирования (например, OpenCode). Он позволяет ассистенту просматривать локальное рабочее пространство и получать публичный профиль GitHub через чистый изолированный stdio-транспорт.
«Простой GitHub MCP-сервер для OpenCode.»
Содержание
Related MCP server: chatgpt-codex-local-mcp
Обзор
Сервер — это локальный MCP-сервер, запускаемый OpenCode как дочерний процесс. Он общается по протоколу MCP через stdio (stdin/stdout) и регистрирует пять инструментов. Ассистент вызывает эти инструменты; сервер выполняет работу (чтение файловой системы, git diff или вызов GitHub API) и возвращает структурированные текстовые результаты.
Всё, что касается файловой системы, ограничено одним каталогом WORKSPACE_ROOT, поэтому ассистент никогда не сможет прочитать или выйти за пределы папки проекта.
Как это работает (архитектура)
┌─────────────────────────┐ stdio (MCP/JSON-RPC) ┌──────────────────────────────┐
│ │ ───────────────────────────────▶ │ github-assistant (this) │
│ OpenCode / AI │ tool call: get_github_profile │ │
│ Assistant │ │ ┌────────────────────────┐ │
│ │ ◀─────────────────────────────── │ │ McpServer │ │
│ - sees 5 tools │ result (JSON text) │ │ (server.ts) │ │
│ - calls them │ │ └───────────┬────────────┘ │
│ - sandbox enforced │ │ │ registerTools │
└─────────────────────────┘ └──────────────┼──────────────┘
▼
┌────────────────────────────────┐
│ tools.ts (5 tool handlers) │
└───┬──────┬──────┬──────┬─────┬──┘
┌───────────────┘ │ │ │ │
▼ ▼ ▼ ▼ ▼
┌────────────┐ ┌────────────┐ ┌─────────┐ ┌────────────┐
│ github.ts │ │ workspace.ts│ │ git.ts │ │ paths.ts │
│ GitHub API │ │ list/read/ │ │ git diff│ │ resolve │
│ (fetch) │ │ search │ │ │ │ sandbox │
└─────┬──────┘ └─────┬──────┘ └────┬────┘ └─────┬──────┘
│ │ │ │
▼ ▼ ▼ ▼
api.github.com WORKSPACE_ROOT/* git CLI config.ts
(files only) (cwd=root) WORKSPACE_ROOTПоток данных для одного вызова инструмента:
Assistant ──JSON-RPC request──▶ McpServer
│
▼
tool handler (tools.ts)
│ validates args with zod
▼
business logic (github / workspace / git / paths)
│ resolveWorkspacePath() enforces sandbox
▼
result helper (result.ts) → { content: [{ type:"text", text }] }
│
▼
Assistant ◀──JSON-RPC response── McpServerТранспорт и жизненный цикл
Тип:
local— OpenCode запускает сервер как дочерний процесс.Транспорт:
stdioчерезserveStdio()из@modelcontextprotocol/server/stdio.Последовательность запуска:
Выполняется
node dist/server.js(объявлено вopencode.json) сcwd = ".".createServer()создаётMcpServerс именемgithub-assistant(v1.0.0).registerTools(server)подключает пять инструментов.serveStdio(createServer)начинает читать JSON-RPC-сообщения из stdin и записывать результаты в stdout.
Завершение: OpenCode завершает процесс, когда сеанс заканчивается.
Поскольку процесс наследует рабочий каталог OpenCode, WORKSPACE_ROOT разрешается в каталог проекта (path.resolve(process.cwd())).
Справочник инструментов
Все инструменты регистрируются в src/tools.ts и возвращают текстовые результаты MCP (JSON или обычный текст).
1. get_github_profile
Получает публичный профиль GitHub жёстко заданного пользователя (imshashwatsingh).
Входные данные: нет
Бэкенд:
fetch()кhttps://api.github.com/users/imshashwatsinghс заголовкомAccept: application/vnd.github+jsonи заголовкомUser-Agent.Возвращает: имя пользователя, имя, компанию, местоположение, био, публичные репозитории/гисты, подписчиков, подписки, URL профиля, временные метки создания/обновления.
Файл:
src/github.ts
2. list_files
Перечисляет файлы в каталоге рабочего пространства до заданной глубины.
Входные данные:
path(по умолчанию"."),maxDepth(0–10, по умолчанию 3)Бэкенд: рекурсивный
collectFiles()вsrc/workspace.ts— пропускает символические ссылки (без циклов) и игнорирует настроенные каталоги (node_modules,.git,dist,.next,coverage,.cache). ОграниченоMAX_RESULTS(500).Возвращает: корень рабочего пространства, количество файлов и относительные пути к файлам.
Файл:
src/workspace.ts
3. read_file
Читает текстовый файл UTF-8 с опциональным диапазоном строк.
Входные данные:
path(обязательно),startLine(опционально),endLine(опционально)Бэкенд:
readWorkspaceFile()— обеспечивает песочницу, отклоняет не-файлы, отказывается от файлов большеMAX_FILE_SIZE(1 МБ) и от бинарных расширений. Возвращает строки с номерами.Возвращает: содержимое файла с префиксами
line: text.Файл:
src/workspace.ts
4. search_context
Поиск по ключевым словам в рабочем пространстве с окружающим контекстом.
Входные данные:
query(обязательно),path(по умолчанию"."),maxResults(1–100, по умолчанию 50),contextLines(0–10, по умолчанию 2)Бэкенд:
searchContext()собирает файлы, фильтрует только текстовые файлы с ограничением размера, затем сканирует каждую строку (без учёта регистра) и захватываетcontextLinesвыше/ниже каждого совпадения.Возвращает: запрос, путь поиска, количество совпадений и совпадения с файлом/строкой/контекстом.
Файл:
src/workspace.ts
5. summarize_diff
Проверяет текущий Git diff и возвращает структурированную сводку.
Входные данные:
staged(по умолчаниюfalse),base(опциональная git-ссылка),path(опциональный файл/каталог),maxDiffChars(1000–200000, по умолчанию 50000)Бэкенд:
summarizeDiff()выполняетgit diff --no-ext-diff --unified=3(с--cached/ базовой ссылкой / фильтрами пути) изWORKSPACE_ROOT. Статистика извлекается из самого unified diff (без второго вызоваgit). Diff усекается, если превышаетmaxDiffChars.Возвращает: изменённые файлы, вставки, удаления, статистику по файлам и исходный diff — или
{ empty: true }, когда изменений нет.Файл:
src/git.ts
Модель безопасности
Сервер намеренно только для чтения и изолирован:
Проблема | Защита |
Обход пути ( |
|
Чтение бинарных файлов |
|
Слишком большие файлы |
|
Циклы символических ссылок |
|
Разрастание каталога | Перечисление/поиск ограничены |
Запись / удаление / выполнение | Нет. У сервера нет инструментов записи, удаления или произвольного выполнения команд в оболочке. Единственный порождаемый процесс — |
Сеть | Только один исходящий вызов: публичный GitHub API только для чтения для фиксированного пользователя. |
Граница песочницы находится целиком в
paths.ts. Любой новый инструмент, который касается файловой системы, обязан пропускать пути черезresolveWorkspacePath().
Разбор проекта
Точка входа —
src/server.tscreateServer()создаёт экземплярMcpServerи вызываетregisterTools().serveStdio()связывает его с stdin/stdout.Регистрация инструментов —
src/tools.tsПять вызововserver.registerTool(...). Каждый объявляет описание, проверяемую через zodinputSchemaи асинхронный обработчик. Обработчики делегируют работу модулям ниже и оборачивают вывод с помощью помощников изresult.ts.Конфигурация —
src/config.tsЦентральные константы:WORKSPACE_ROOT(разрешается изprocess.cwd()), лимиты размера/результатов, имя пользователя/URL GitHub и наборы игнорируемых/бинарных файлов.Безопасность путей —
src/paths.tsresolveWorkspacePath()— это шлюз песочницы.toWorkspaceRelative()превращает абсолютные пути обратно в относительные строки рабочего пространства для отображения.isProbablyTextFile()классифицирует файлы по расширению.Ввод-вывод рабочего пространства —
src/workspace.tscollectFiles()(рекурсивное перечисление),readWorkspaceFile()(безопасное чтение) иsearchContext()(сканирование по ключевым словам). Все проходят черезresolveWorkspacePath().GitHub —
src/github.tsfetchGitHubProfile()вызывает публичный API и преобразует сыройGitHubUserв более удобную формуGitHubProfile.Git —
src/git.tssummarizeDiff()формирует и выполняет командуgit diff;parseDiffStats()извлекает количество вставок/удалений по файлам прямо из текста diff.Результаты —
src/result.tsНебольшие помощники (textResult,errorResult,errorWithContext) стандартизируют конвертcontentMCP и флаги ошибок.
Конфигурация
opencode.json (корень проекта) объявляет сервер:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"github-assistant": {
"type": "local",
"command": ["node", "dist/server.js"],
"cwd": ".",
"enabled": true
}
}
}Внутри сервера поведение настраивается через константы в src/config.ts:
Константа | По умолчанию | Значение |
|
| Корень песочницы (каталог проекта) |
|
| Максимальный читаемый размер файла |
|
| Максимум файлов из списка/поиска |
|
| Целевой профиль |
|
| Пропускаются при обходе |
|
| Считаются не-текстовыми |
Сборка и запуск
# install dependencies
npm install
# compile TypeScript -> dist/
npm run build
# start the server (used by opencode.json)
npm start
# run directly from source (no build step)
npm run dev
# the workspace must be a git repo for summarize_diff to work
git initOpenCode автоматически подхватывает сервер из opencode.json после сборки (dist/server.js).
Структура файлов
github_assistant_mcp/
├── opencode.json # MCP server declaration for OpenCode
├── package.json # scripts + dependencies
├── tsconfig.json # TypeScript config
├── src/
│ ├── server.ts # Entry point: create + serve McpServer
│ ├── tools.ts # Registers the 5 tools + handlers
│ ├── config.ts # Constants, limits, GitHub target
│ ├── paths.ts # Sandbox path resolution + helpers
│ ├── workspace.ts # list / read / search filesystem
│ ├── github.ts # GitHub profile fetch
│ ├── git.ts # git diff summary + stat parsing
│ └── result.ts # MCP result/error helpers
└── dist/ # Compiled output (npm run build)Ограничения
get_github_profileнацелен на одного жёстко заданного пользователя; он не параметризован.summarize_diffсообщает только об изменениях в рабочем дереве — неотслеживаемые файлы не показываются командойgit diff.Инструменты файловой системы ограничены
WORKSPACE_ROOT; доступа к другим проектам нет.Все инструменты только для чтения по замыслу — никаких правок, удалений или выполнения команд в оболочке.
Нет аутентификации: вызов GitHub использует неаутентифицированный публичный API (ограничение 60 запросов/час на IP).
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA read-only MCP server for AI coding agents to inspect repositories, audit code quality, route engineering skills, and plan safe issue/PR workflows.1MIT
- FlicenseAqualityCmaintenanceA secure MCP server that exposes local repository context to ChatGPT/Codex with read-only access, path validation, and no generic shell.17
- AlicenseNot gradedqualityAmaintenanceA read-only MCP server that provides AI agents with live, structured workspace awareness, including project listing, git status, and budgeted context packing, minimizing token usage.62MIT
- FlicenseBqualityCmaintenanceA read-only MCP server that exposes a local code workspace to AI clients via stdio, providing file browsing and text search capabilities with path safety rules.1
Related MCP Connectors
An MCP server that gives your AI access to the source code and docs of all public github repos
Agent-native MCP server over the public saagarpatel.dev corpus. Read-only, stateless.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/imshashwatsingh/github-assitant-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server