github-assistant-mcp
GitHub Assistant MCP
Model Context Protocol(MCP)サーバーを実装した、小規模で自己完結型のサーバーです。AIコーディングアシスタント(例:OpenCode)に5つの読み取り専用ツールを公開します。このサーバーにより、アシスタントはローカルワークスペースを検査し、クリーンでサンドボックス化されたstdioトランスポート経由で公開GitHubプロフィールを取得できます。
「OpenCodeのためのシンプルなGitHub MCPサーバー」
目次
Related MCP server: chatgpt-codex-local-mcp
概要
このサーバーは、OpenCodeが子プロセスとして起動するローカルMCPサーバーです。stdio(stdin/stdout)経由でMCPプロトコルを話し、5つのツールを登録します。アシスタントがツールを呼び出すと、サーバーが処理(ファイルシステムの読み取り、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がサーバーを子プロセスとして起動します。トランスポート:
@modelcontextprotocol/server/stdioのserveStdio()によるstdio。起動シーケンス:
node dist/server.jsが実行されます(opencode.jsonで宣言、cwd = ".")。createServer()がgithub-assistant(v1.0.0)という名前のMcpServerを構築します。registerTools(server)が5つのツールを配線します。serveStdio(createServer)がstdinからJSON-RPCメッセージを読み取り、結果をstdoutに書き込み始めます。
シャットダウン: セッション終了時にOpenCodeがプロセスを終了します。
プロセスはOpenCodeの作業ディレクトリを継承するため、WORKSPACE_ROOT はプロジェクトディレクトリ(path.resolve(process.cwd()))に解決されます。
ツールリファレンス
すべてのツールは src/tools.ts に登録され、MCPテキスト結果(JSONまたはプレーンテキスト)を返します。
1. get_github_profile
ハードコードされたユーザー(imshashwatsingh)の公開GitHubプロフィールを取得します。
入力: なし
バックエンド:
Accept: application/vnd.github+jsonとUser-Agentヘッダーを付けたhttps://api.github.com/users/imshashwatsinghへのfetch()。戻り値: ユーザー名、名前、会社、所在地、自己紹介、公開リポジトリ/公開gist数、フォロワー数、フォロー中数、プロフィールURL、作成/更新タイムスタンプ。
ファイル:
src/github.ts
2. list_files
ワークスペースディレクトリ配下のファイルを深さ指定付きで一覧表示します。
入力:
path(デフォルト".")、maxDepth(0〜10、デフォルト3)バックエンド:
src/workspace.tsの再帰的collectFiles()— シンボリックリンクをスキップし(ループ防止)、設定済みディレクトリ(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 MB)を超えるファイルとバイナリ拡張子のファイルを拒否します。行番号付きで返します。戻り値:
行番号: テキストのプレフィックス付きファイル内容。ファイル:
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()がWORKSPACE_ROOTからgit diff --no-ext-diff --unified=3(--cached/ base参照 / pathフィルター付き)を実行します。統計はunified diff自体から解析されます(2回目のgit呼び出しは不要)。diffがmaxDiffCharsを超える場合は切り詰められます。戻り値: 変更ファイル数、挿入数、削除数、ファイルごとの統計、生のdiff — 変更がない場合は
{ empty: true }。ファイル:
src/git.ts
セキュリティモデル
このサーバーは意図的に読み取り専用かつサンドボックス化されています:
懸念事項 | 保護 |
パストラバーサル( |
|
バイナリファイルの読み取り |
|
過大なファイル |
|
シンボリックリンクループ |
|
ディレクトリの爆発 | 一覧表示/検索は |
書き込み / 削除 / 実行 | なし。 サーバーには書き込み、削除、任意のシェル実行ツールはありません。生成される唯一のプロセスは、固定された引数形状の |
ネットワーク | 発信呼び出しは1つのみ: 固定ユーザーに対する読み取り専用のGitHub公開API。 |
サンドボックス境界は完全に
paths.tsに存在します。ファイルシステムに触れる新しいツールは必ずresolveWorkspacePath()経由でパスをルーティングする必要があります。
プロジェクトウォークスルー
エントリポイント —
src/server.tscreateServer()がMcpServerをインスタンス化し、registerTools()を呼び出します。serveStdio()がそれをstdin/stdoutに橋渡しします。ツール登録 —
src/tools.ts5つのserver.registerTool(...)呼び出し。それぞれが説明、zod検証済みのinputSchema、非同期ハンドラーを宣言します。ハンドラーは以下のモジュールに委譲し、result.tsのヘルパーで出力をラップします。設定 —
src/config.ts中央定数:WORKSPACE_ROOT(process.cwd()から解決)、サイズ/結果の上限、GitHubユーザー名/URL、無視セットとバイナリセット。パス安全性 —
src/paths.tsresolveWorkspacePath()がサンドボックスゲートです。toWorkspaceRelative()は絶対パスを表示用のワークスペース相対文字列に戻します。isProbablyTextFile()は拡張子でファイルを分類します。ワークスペースI/O —
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)がMCPのcontentエンベロープとエラーフラグを標準化します。
設定
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 initビルド後(dist/server.js)、OpenCodeは opencode.json からサーバーを自動的に認識します。
ファイル構成
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を使用します(IPあたり毎時60リクエストにレート制限)。
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