github-assistant-mcp
GitHub Assistant MCP
Ein kleiner, eigenständiger Model Context Protocol (MCP)-Server, der fünf schreibgeschützte Tools für einen KI-Coding-Assistenten (z. B. OpenCode) bereitstellt. Er ermöglicht es dem Assistenten, ein lokales Arbeitsverzeichnis zu durchsuchen und ein öffentliches GitHub-Profil über einen sauberen, sandboxed stdio-Transport abzurufen.
"Ein einfacher GitHub-MCP-Server für OpenCode."
Inhaltsverzeichnis
Related MCP server: chatgpt-codex-local-mcp
Überblick
Der Server ist ein lokaler MCP-Server, der von OpenCode als Kindprozess gestartet wird. Er spricht das MCP-Protokoll über stdio (stdin/stdout) und registriert fünf Tools. Der Assistent ruft diese Tools auf; der Server erledigt die Arbeit (Dateisystemzugriffe, ein git diff oder einen GitHub-API-Aufruf) und gibt strukturierte Textergebnisse zurück.
Alles, was das Dateisystem betrifft, ist auf ein einziges WORKSPACE_ROOT-Verzeichnis beschränkt, sodass der Assistent niemals außerhalb des Projektordners lesen oder entkommen kann.
So funktioniert es (Architektur)
┌─────────────────────────┐ 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_ROOTDatenfluss für einen einzelnen Tool-Aufruf:
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── McpServerTransport & Lebenszyklus
Typ:
local– OpenCode startet den Server als Kindprozess.Transport:
stdioüberserveStdio()aus@modelcontextprotocol/server/stdio.Startsequenz:
node dist/server.jswird ausgeführt (deklariert inopencode.json) mitcwd = ".".createServer()erstellt einenMcpServernamensgithub-assistant(v1.0.0).registerTools(server)verdrahtet die fünf Tools.serveStdio(createServer)beginnt, JSON-RPC-Nachrichten von stdin zu lesen und Ergebnisse nach stdout zu schreiben.
Herunterfahren: OpenCode beendet den Prozess, wenn die Sitzung endet.
Da der Prozess das Arbeitsverzeichnis von OpenCode erbt, wird WORKSPACE_ROOT zum Projektverzeichnis aufgelöst (path.resolve(process.cwd())).
Tool-Referenz
Alle Tools sind in src/tools.ts registriert und geben MCP-Textergebnisse zurück (JSON oder Klartext).
1. get_github_profile
Ruft das öffentliche GitHub-Profil des fest codierten Benutzers (imshashwatsingh) ab.
Eingaben: keine
Backend:
fetch()aufhttps://api.github.com/users/imshashwatsinghmitAccept: application/vnd.github+jsonund einemUser-Agent-Header.Gibt zurück: Benutzername, Name, Firma, Standort, Bio, öffentliche Repos/Gists, Follower, Gefolgt, Profil-URL, Erstellungs-/Aktualisierungszeitstempel.
Datei:
src/github.ts
2. list_files
Listet Dateien in einem Arbeitsverzeichnis bis zu einer Tiefe auf.
Eingaben:
path(Standard"."),maxDepth(0–10, Standard 3)Backend: rekursives
collectFiles()insrc/workspace.ts– überspringt symbolische Links (keine Schleifen) und ignoriert konfigurierte Verzeichnisse (node_modules,.git,dist,.next,coverage,.cache). Begrenzt aufMAX_RESULTS(500).Gibt zurück: Arbeitsverzeichnis-Wurzel, Dateianzahl und relative Dateipfade.
Datei:
src/workspace.ts
3. read_file
Liest eine UTF-8-Textdatei mit optionalem Zeilenbereich.
Eingaben:
path(erforderlich),startLine(optional),endLine(optional)Backend:
readWorkspaceFile()– erzwingt die Sandbox, lehnt Nicht-Dateien ab, verweigert Dateien größer alsMAX_FILE_SIZE(1 MB) und verweigert Binärerweiterungen. Gibt nummerierte Zeilen zurück.Gibt zurück: Dateiinhalt mit
Zeile: Text-Präfixen.Datei:
src/workspace.ts
4. search_context
Stichwortsuche im Arbeitsverzeichnis mit umgebendem Kontext.
Eingaben:
query(erforderlich),path(Standard"."),maxResults(1–100, Standard 50),contextLines(0–10, Standard 2)Backend:
searchContext()sammelt Dateien, filtert reine Text- und größenbegrenzte Dateien und durchsucht dann jede Zeile (ohne Berücksichtigung der Groß-/Kleinschreibung) und erfasstcontextLinesober- und unterhalb jedes Treffers.Gibt zurück: Abfrage, Suchpfad, Anzahl der Treffer und Treffer mit Datei/Zeile/Kontext.
Datei:
src/workspace.ts
5. summarize_diff
Untersucht den aktuellen Git-Diff und gibt eine strukturierte Zusammenfassung zurück.
Eingaben:
staged(Standardfalse),base(optionaler Git-Ref),path(optionaler Datei-/Ordnerpfad),maxDiffChars(1000–200000, Standard 50000)Backend:
summarizeDiff()führtgit diff --no-ext-diff --unified=3(mit--cached/ Basis-Ref / Pfadfiltern) ausWORKSPACE_ROOTaus. Statistiken werden aus dem Unified-Diff selbst geparst (kein zweitergit-Aufruf). Der Diff wird abgeschnitten, wenn ermaxDiffCharsüberschreitet.Gibt zurück: geänderte Dateien, Einfügungen, Löschungen, Statistiken pro Datei und den rohen Diff – oder
{ empty: true }, wenn es keine Änderungen gibt.Datei:
src/git.ts
Sicherheitsmodell
Der Server ist absichtlich schreibgeschützt und sandboxed:
Anliegen | Schutz |
Pfad-Traversal ( |
|
Binärdatei-Lesezugriffe |
|
Übermäßig große Dateien |
|
Symlink-Schleifen |
|
Verzeichnis-Aufblähung | Auflistung/Suche auf |
Schreiben / Löschen / Ausführen | Keine. Der Server hat keine Schreib-, Lösch- oder beliebigen Shell-Ausführungswerkzeuge. Der einzige erzeugte Prozess ist |
Netzwerk | Nur ein ausgehender Aufruf: die schreibgeschützte öffentliche GitHub-API für einen festen Benutzer. |
Die Sandbox-Grenze liegt vollständig in
paths.ts. Jedes neue Tool, das auf das Dateisystem zugreift, muss Pfade durchresolveWorkspacePath()leiten.
Projektübersicht
Einstiegspunkt –
src/server.tscreateServer()instanziiertMcpServerund ruftregisterTools()auf.serveStdio()verbindet es mit stdin/stdout.Tool-Registrierung –
src/tools.tsFünfserver.registerTool(...)-Aufrufe. Jeder deklariert eine Beschreibung, ein zod-validiertesinputSchemaund einen asynchronen Handler. Handler delegieren an die folgenden Module und verpacken die Ausgabe mit den Helfern ausresult.ts.Konfiguration –
src/config.tsZentrale Konstanten:WORKSPACE_ROOT(ausprocess.cwd()aufgelöst), Größen-/Ergebnislimits, GitHub-Benutzername/-URL und Ignorier-/Binärmengen.Pfadsicherheit –
src/paths.tsresolveWorkspacePath()ist das Sandbox-Tor.toWorkspaceRelative()wandelt absolute Pfade zur Anzeige wieder in arbeitsbereichsrelative Zeichenfolgen um.isProbablyTextFile()klassifiziert Dateien anhand der Erweiterung.Arbeitsbereichs-I/O –
src/workspace.tscollectFiles()(rekursive Auflistung),readWorkspaceFile()(sicheres Lesen) undsearchContext()(Stichwortsuche). Alle laufen überresolveWorkspacePath().GitHub –
src/github.tsfetchGitHubProfile()ruft die öffentliche API auf und bildet den rohenGitHubUserauf die benutzerfreundlichereGitHubProfile-Form ab.Git –
src/git.tssummarizeDiff()erstellt und führt dengit diff-Befehl aus;parseDiffStats()leitet die Einfüge-/Löschzahlen pro Datei direkt aus dem Diff-Text ab.Ergebnisse –
src/result.tsKleine Helfer (textResult,errorResult,errorWithContext) standardisieren den MCP-content-Umschlag und die Fehlerkennzeichnung.
Konfiguration
opencode.json (Projektwurzel) deklariert den Server:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"github-assistant": {
"type": "local",
"command": ["node", "dist/server.js"],
"cwd": ".",
"enabled": true
}
}
}Innerhalb des Servers wird das Verhalten über Konstanten in src/config.ts eingestellt:
Konstante | Standard | Bedeutung |
|
| Sandbox-Wurzel (Projektverzeichnis) |
|
| Maximale lesbare Dateigröße |
|
| Maximale Dateien aus Liste/Suche |
|
| Profilziel |
|
| Beim Durchlaufen übersprungen |
|
| Als Nicht-Text behandelt |
Erstellen & Ausführen
# 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 erkennt den Server nach dem Erstellen (dist/server.js) automatisch aus opencode.json.
Dateistruktur
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)Einschränkungen
get_github_profilezielt auf einen einzelnen fest codierten Benutzer; es ist nicht parametrisiert.summarize_diffmeldet nur Änderungen im Arbeitsverzeichnis – nicht verfolgte Dateien werden vongit diffnicht angezeigt.Dateisystem-Tools sind auf
WORKSPACE_ROOTbeschränkt; es gibt keinen projektübergreifenden Zugriff.Alle Tools sind schreibgeschützt – keine Bearbeitungen, Löschungen oder Shell-Ausführungen.
Keine Authentifizierung: Der GitHub-Aufruf verwendet die nicht authentifizierte öffentliche API (auf 60 Anfragen/Std. pro IP begrenzt).
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