Skip to main content
Glama
imshashwatsingh

github-assistant-mcp

GitHub Assistant MCP

Model Context Protocol(MCP)サーバーを実装した、小規模で自己完結型のサーバーです。AIコーディングアシスタント(例:OpenCode)に5つの読み取り専用ツールを公開します。このサーバーにより、アシスタントはローカルワークスペースを検査し、クリーンでサンドボックス化されたstdioトランスポート経由で公開GitHubプロフィールを取得できます。

「OpenCodeのためのシンプルなGitHub MCPサーバー」


目次


Related MCP server: agenticscope

概要

このサーバーは、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。

  • 起動シーケンス:

    1. node dist/server.js が実行されます(opencode.json で宣言、cwd = ".")。

    2. createServer() が github-assistant(v1.0.0)という名前の McpServer を構築します。

    3. registerTools(server) が5つのツールを配線します。

    4. 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


セキュリティモデル

このサーバーは意図的に読み取り専用かつサンドボックス化されています:

懸念事項

保護

パストラバーサル(../../etc/passwd)

resolveWorkspacePath()(src/paths.ts)がパスを解決し、WORKSPACE_ROOT との関係を計算し、外部へ逃れる場合(.. プレフィックスまたは絶対パス)は例外をスローします。

バイナリファイルの読み取り

isProbablyTextFile() が非テキスト拡張子(png、exe、pdf など)をブロックします。

過大なファイル

read_file / search_context は MAX_FILE_SIZE(1 MB)を超えるファイルを拒否します。

シンボリックリンクループ

collectFiles() はシンボリックリンクを完全にスキップします。

ディレクトリの爆発

一覧表示/検索は MAX_RESULTS(500)と maxDepth 10で上限設定。

書き込み / 削除 / 実行

なし。 サーバーには書き込み、削除、任意のシェル実行ツールはありません。生成される唯一のプロセスは、固定された引数形状の git のみです。

ネットワーク

発信呼び出しは1つのみ: 固定ユーザーに対する読み取り専用のGitHub公開API。

サンドボックス境界は完全に paths.ts に存在します。ファイルシステムに触れる新しいツールは必ず resolveWorkspacePath() 経由でパスをルーティングする必要があります。


プロジェクトウォークスルー

  1. エントリポイント — src/server.ts createServer() が McpServer をインスタンス化し、registerTools() を呼び出します。serveStdio() がそれをstdin/stdoutに橋渡しします。

  2. ツール登録 — src/tools.ts 5つの server.registerTool(...) 呼び出し。それぞれが説明、zod検証済みの inputSchema、非同期ハンドラーを宣言します。ハンドラーは以下のモジュールに委譲し、result.ts のヘルパーで出力をラップします。

  3. 設定 — src/config.ts 中央定数: WORKSPACE_ROOT(process.cwd() から解決)、サイズ/結果の上限、GitHubユーザー名/URL、無視セットとバイナリセット。

  4. パス安全性 — src/paths.ts resolveWorkspacePath() がサンドボックスゲートです。toWorkspaceRelative() は絶対パスを表示用のワークスペース相対文字列に戻します。isProbablyTextFile() は拡張子でファイルを分類します。

  5. ワークスペースI/O — src/workspace.ts collectFiles()(再帰的一覧表示)、readWorkspaceFile()(安全な読み取り)、searchContext()(キーワードスキャン)。すべて resolveWorkspacePath() を経由します。

  6. GitHub — src/github.ts fetchGitHubProfile() が公開APIを呼び出し、生の GitHubUser をより親しみやすい GitHubProfile の形にマッピングします。

  7. Git — src/git.ts summarizeDiff() が git diff コマンドを構築・実行します。parseDiffStats() はdiffテキストから直接、ファイルごとの挿入/削除数を導出します。

  8. 結果 — 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 の定数で動作を調整します:

定数

デフォルト

意味

WORKSPACE_ROOT

path.resolve(process.cwd())

サンドボックスルート(プロジェクトディレクトリ)

MAX_FILE_SIZE

1 MB

読み取り可能な最大ファイルサイズ

MAX_RESULTS

500

一覧/検索からの最大ファイル数

GITHUB_USERNAME

imshashwatsingh

プロフィール対象

IGNORED_DIRECTORIES

node_modules、.git、dist など

走査中にスキップ

BINARY_EXTENSIONS

png、exe、pdf など

非テキストとして扱う


ビルドと実行

# 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リクエストにレート制限)。

Available Tools

5 tools
get_github_profileA

Get the public GitHub profile of imshashwatsingh.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavior. It only states 'Get the public GitHub profile' without mentioning authentication requirements, rate limits, return format, or side effects. The description is minimally transparent beyond the core action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no fluff. It states the action and target clearly, earning full marks for conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For the tool's simplicity (no parameters, no output schema), the description adequately conveys what it does. It could mention the return format, but the core purpose is clear and complete for the given context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, and schema coverage is effectively 100% (vacuously). The description doesn't need to explain parameters, and the baseline for 0-parameter tools is 4. It does not add any misleading parameter info.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and clearly identifies the resource ('public GitHub profile of imshashwatsingh'). This distinguishes it from sibling tools (file operations), making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context is clear: use when you need the public GitHub profile for the specified user. No explicit exclusions or alternatives are mentioned, but the sibling tools are unrelated, so confusion is unlikely. It lacks explicit 'when not to use' guidance, hence not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_filesA

List files in the workspace so the assistant can inspect the project before reading or summarizing it.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoDirectory relative to the workspace root..
maxDepthNoMaximum directory depth to traverse.

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. However, it only restates the basic function without exposing any behavioral traits: it doesn't mention that it traverses directories, that output includes files and directories (or just files), whether it returns a tree or flat list, or any caveats like permission requirements. This is a significant gap for a tool with no annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence with no filler. It immediately states the action and purpose, making it highly scannable and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with only two parameters, both fully described in the schema, and no output schema. The description states the core purpose and intended usage context, which is sufficient for an agent to know when to invoke it. It doesn't detail return format, but for a listing tool that's often implicit. Overall, it's adequately complete for the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (both parameters are fully described in the schema), so the baseline is 3. The description adds no parameter-specific details, but the schema already provides defaults and explanation, so the description does not need to compensate. No extra semantic value is added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List files') and the resource ('in the workspace'), with a specific purpose ('so the assistant can inspect the project before reading or summarizing it'). This distinguishes it from sibling tools like read_file (which reads content) and search_context (which searches).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly indicates when to use it: 'before reading or summarizing it' – providing a clear usage context. It doesn't explicitly state exclusions or alternatives, but the context is sufficient for an agent to infer it should be used first in a project inspection workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_fileA

Read a text file from the workspace. Use list_files first to discover available files.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFile path relative to the workspace root.
endLineNoOptional 1-based ending line.
startLineNoOptional 1-based starting line.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. 'Read' clearly implies a non-destructive, read-only operation, but the description does not disclose any additional behavioral traits such as error behavior, encoding, or line range semantics (though line range is covered by the schema). It is adequate but minimal, not misleading.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core action and followed by a useful usage hint. There is zero filler, and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, with a well-documented schema. The description provides sufficient context for a basic read operation, including the prerequisite step of listing files. While there is no output schema, the return value (file content) is obvious. Missing details like error handling are minor and expected for such a straightforward tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for all three parameters (path, startLine, endLine), with clear descriptions. The tool description adds no additional meaning beyond the schema, so the baseline of 3 applies as the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb and resource: 'Read a text file from the workspace.' This is a specific, unambiguous action that distinguishes it from sibling tools like list_files (listing) and search_context (searching). The inclusion of 'text file' also scopes the tool's domain.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs to 'Use list_files first to discover available files,' providing clear contextual guidance on when to use this tool relative to the siblings. It implies that read_file is for after discovery, though it does not explicitly state exclusions or alternative scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_contextA

Search the workspace for a keyword or phrase. Returns matching files and surrounding lines so the assistant can understand relevant context.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoOptional directory relative to the workspace root..
queryYesKeyword or phrase to search for.
maxResultsNoMaximum number of matching lines.
contextLinesNoNumber of surrounding lines to return.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden for behavioral disclosure. It states the core behavior (returns matching files and surrounding lines) but does not mention edge behaviors such as case sensitivity, binary file handling, or ordering of results. It adds value beyond the schema but lacks deeper behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, both information-dense with no filler. It immediately states the action, then the result and purpose, making it easy to scan and understand the tool's role.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite lacking an output schema and annotations, the description provides a sufficient high-level understanding of the return value. Combined with a fully documented schema, it is complete enough for a straightforward search tool. It could elaborate on return format, but the essentials are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description echoes the 'query' and 'contextLines' concepts ('keyword or phrase', 'surrounding lines') but does not add substantive meaning beyond what the schema parameters already document. It does not clarify path defaults or maxResults behavior beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Search') with a clear resource ('the workspace') and explicitly states the output ('matching files and surrounding lines'). This clearly distinguishes it from sibling tools like list_files and read_file, which serve different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it through the clause 'so the assistant can understand relevant context,' indicating it is for gaining situational understanding via keyword search. It does not explicitly mention alternatives or exclusion cases, but for a simple search tool this is adequate context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

summarize_diffA

Inspect the current Git diff and return a compact structured summary of changed files, additions, deletions, and the actual diff for the assistant to summarize.

ParametersJSON Schema
NameRequiredDescriptionDefault
baseNoOptional Git ref such as main, HEAD~1, or origin/main.
pathNoOptional file or directory relative to the workspace.
stagedNoWhen true, inspect staged changes instead of working-tree changes.
maxDiffCharsNoMaximum number of diff characters returned.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the transparency burden. It clearly signals a read-only operation via 'Inspect' and describes the output shape (summary plus actual diff). It does not detail edge cases such as empty diffs or repository errors, but the core behavioral contract is well communicated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the key action and outcome. Every clause adds value, and there is no fluff or redundant repetition of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly explains what the tool returns: changed files, additions, deletions, and the actual diff. The parameters are fully documented in the schema, so the description combined with the schema gives sufficient context for correct selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already has 100% description coverage for all four parameters, so the baseline is 3. The description adds context about the overall output but does not enrich understanding of individual parameters beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Inspect') and resource ('current Git diff'), and clearly states it returns a structured summary with changed files, additions, deletions, and the actual diff. This distinguishes it from sibling tools like list_files and read_file, which do not operate on Git diffs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'for the assistant to summarize' implies the intended use case: obtaining diff data to produce a summary. However, there is no explicit guidance about when to choose this over alternatives or when not to use it, so it relies on implication rather than clear direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv1.0.0
    • First observedget_github_profile
    • First observedlist_files
    • First observedread_file
    • First observedsearch_context
    • First observedsummarize_diff

TDQS

A3.9/5.0

Scored across 5 tools

Disambiguation5/5

The tools are clearly distinct: one fetches GitHub profile data, while the others handle local workspace file operations (listing, reading, searching, diffing). No functional overlap exists between them.

Naming Consistency5/5

All tool names follow a consistent 'verb_noun' pattern (e.g., list_files, read_file, summarize_diff). The single compound name 'get_github_profile' still adheres to the same structure, maintaining a uniform convention.

Tool Count4/5

Five tools is a reasonable number for a focused assistant, neither too sparse nor overwhelming. However, the mix leans heavily toward workspace operations rather than GitHub-specific actions, which slightly reduces appropriateness for the server's stated purpose.

Completeness2/5

The tool surface is severely incomplete for a GitHub assistant: it only covers profile retrieval and local file operations. Core GitHub workflows like issues, pull requests, repository management, and code search are entirely absent, making the toolset insufficient for its intended domain.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    A 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
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    A local MCP server that gives AI agents access to developer tooling — GitHub (read-only), documentation search, and web research — via stdio transport.
    MIT