Skip to main content
Glama
RachitJava

MCP GitHub Navigator

by RachitJava

MCP GitHub Navigator

A Model Context Protocol (MCP) server that provides an AI agent with secure access to GitHub data, allowing it to list repositories, view issues, and read files via the GitHub API.

HLD (High-Level Design)

  • Architecture: The server is built in Node.js/TypeScript and implements the standard MCP @modelcontextprotocol/sdk. It uses a StdioServerTransport to communicate directly with any MCP-compatible AI client via standard input/output.

  • External Integration: Uses Axios to connect to the GitHub REST API (https://api.github.com).

  • Authentication: Relies on a Personal Access Token provided via the GITHUB_TOKEN environment variable.

Related MCP server: @cloud9-labs/mcp-github

LLD (Low-Level Design)

  • Entry Point: src/index.ts is the main entry point which initializes the Server instance and maps MCP capabilities.

  • Tools Registered:

    • get_user: Uses GET /user to return the authenticated GitHub profile.

    • list_repos: Uses GET /user/repos?sort=updated&per_page=10 to return recently active repositories.

  • Data Flow: When an AI client sends a CallToolRequestSchema for list_repos, the MCP server validates the tool name, invokes the corresponding GitHub API endpoint via Axios, formats the JSON response into a text block, and returns it to the client.

TDD (Test-Driven Development) Strategy

  • Frameworks: We recommend using Jest for executing test suites.

  • Mocking: Testing relies on mocking the axiosInstance using libraries like nock or axios-mock-adapter to simulate GitHub API responses without requiring an active internet connection or hitting API rate limits.

  • Integration Tests: Creating a mock MCP Client using @modelcontextprotocol/sdk/client to test the end-to-end flow of standard CallTool requests.

Setup Instructions

Prerequisites

  • Node.js (v16 or higher)

  • A GitHub Personal Access Token (PAT)

Installation

  1. Clone the repository:

    git clone https://github.com/RachitJava/mcp-github.git
    cd mcp-github
  2. Install dependencies:

    npm install
  3. Build the project:

    npm run build

Running the Server

The server requires the GITHUB_TOKEN environment variable to be set. You can run it directly:

export GITHUB_TOKEN="your_personal_access_token_here"
npm start

Note: Since this is an MCP server, it is meant to be run by an MCP client (like Claude Desktop) rather than manually.

Available Tools

2 tools
get_userA

Get the authenticated GitHub user details

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the burden of behavioral disclosure. It clarifies that the user is the authenticated one, but it does not explicitly state that the operation is read-only, what the return format looks like, or potential errors. However, the word 'Get' strongly implies a safe read operation.

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?

One concise, front-loaded sentence with no wasted words. It states the action and target clearly.

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 a zero-parameter tool with no output schema, the description is adequate but could have been slightly more explicit about what 'details' includes or that it returns the profile object. It is still complete enough for an AI agent to correctly invoke the tool.

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 the schema covers 100% of the (empty) parameter set. The description adds meaning by noting the user is 'authenticated', implying no parameters are needed because the identity comes from the session.

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 (Get), the resource (authenticated GitHub user), and the scope (details). It distinguishes itself from the sibling tool list_repos, which deals with repositories, by focusing on the user profile.

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 phrase 'authenticated user' clearly implies this is for the current user's profile, and it contrasts with list_repos which handles repositories. No explicit exclusions are given, but the context is clear for such a simple tool.

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

list_reposA

List the 10 most recently updated repositories for the authenticated user

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description must carry the burden of behavioral disclosure. It reveals key constraints (10 most recently updated, authenticated user scope) but does not mention whether private repositories are included, pagination behavior, or typical auth failures. This is adequate but leaves room for more detail.

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 verb and includes the most important qualifiers without any filler. Every word contributes to understanding.

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 a simple zero-parameter list operation, the description provides the essential context: what is listed, for whom, and the ordering/limit. It is slightly incomplete in not mentioning alternatives or edge cases, but overall adequate for the tool's low complexity.

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?

The tool has zero parameters, so the schema already fully covers the input surface. The description adds value by specifying the implicit scope (authenticated user) and the limit of 10, which are meaningful semantics beyond the empty 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 clearly states a specific action ('List'), the resource ('repositories'), and precise scope ('10 most recently updated', 'for the authenticated user'). It distinguishes the tool from sibling 'get_user' by focusing on repositories rather than user info.

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 makes the intended use clear: list recent repositories for the authenticated user. It does not explicitly mention alternatives or when not to use it, but the sibling tool is clearly a different concern, so the context is sufficient without exclusions.

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. Dates show when Glama detected each change.

  1. 2 tool updatesv1.0.0
    • First observedget_user
    • First observedlist_repos

TDQS

A4.1/5.0
Disambiguation5/5

The two tools have completely distinct purposes: one retrieves authenticated user details, the other lists repositories. There is no overlap or confusion between them.

Naming Consistency5/5

Both tools follow the consistent verb_noun pattern (get_user, list_repos), making the naming predictable and clear.

Tool Count3/5

With only 2 tools, the server feels thin for its name 'Navigator', which implies broader GitHub navigation capabilities. The count is borderline acceptable but does not fully earn its place.

Completeness2/5

The surface is severely limited: it covers only user details and repository listing, missing common operations like fetching a specific repo, listing branches, or viewing commits. Significant gaps exist for a navigation-focused server.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

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/RachitJava/mcp-github'

If you have feedback or need assistance with the MCP directory API, please join our Discord server