Skip to main content
Glama
sam170203

Personal GitHub MCP

by sam170203

Personal GitHub MCP

A production-grade Model Context Protocol server that acts as a personal GitHub engineering assistant.

Instead of exposing raw GitHub API calls, it provides high-level tools that represent real user intentions — publish the project you are working in, upload a Project Euler solution with an auto-generated README, find where you used a library, or search your entire engineering memory.

Built with Python 3.12+, the official MCP Python SDK (v2), PyGithub, GitPython, Pydantic v2, and uv.


Features

  • Repository management — list, summarize, create, and inspect your repositories.

  • Publishingpublish_current_project publishes the directory you are in with an auto-generated README and .gitignore; publish_project / backup_project cover the rest.

  • Project Euler flagship workflowpublish_euler_solution detects the problem from the current directory, infers the language, generates a professional README (LLM or static analysis), and pushes both to your solutions repo.

  • Search — GitHub code/repo search plus search_my_engineering_memory, which ranks hits across your repositories, READMEs, architecture docs, and source code.

  • Analysis — explain a repo in plain language, compare repos, recommend what to work on, detect stale repos, and summarize a local project's dependencies and architecture.

  • Structured, typed errors — the server never crashes; every failure is returned as a structured envelope.

  • Structured JSON logging with per-tool timing.

Every tool returns the same envelope:

{ "ok": true, "data": { ... } }

or

{ "ok": false, "error": { "kind": "repository_not_found", "message": "..." } }

Related MCP server: GitHub Agent MCP Server

Architecture

src/
├── server.py              # MCP server assembly + tool registration wiring
├── main.py                # CLI entry point (uv run personal-github-mcp)
├── config.py              # Settings loaded from .env (pydantic-settings)
├── models.py              # Pydantic response models for every tool
├── github_client.py       # Thin PyGithub wrapper (exception mapping)
├── git_client.py          # Thin GitPython wrapper (exception mapping)
├── dependencies.py        # Service container / dependency wiring
├── tools/                 # Tool registration only (thin, one concern per file)
│   ├── repo.py            #   repository listing/summary/create + reporting
│   ├── publish.py         #   publish_project, publish_current_project, backup_project
│   ├── search.py          #   search_code, search_repository, where_did_i_use,
│   │                      #   search_my_engineering_memory
│   ├── euler.py           #   upload_euler_solution, publish_euler_solution, update_progress
│   └── analyze.py         #   compare_repositories, dependency_summary, ...
├── services/              # Business logic (SOLID, no raw API calls here)
│   ├── github_service.py  #   core GitHub CRUD (list/summary/create/exists)
│   ├── report_service.py  #   statistics, explain, stale report, recommend, compare
│   ├── git_service.py     #   local git + project analysis
│   ├── search_service.py  #   code/repo search + engineering memory search
│   ├── euler_service.py   #   Project Euler detection, upload, publish, progress
│   ├── project_service.py #   publish / backup workflows
│   ├── readme_service.py  #   README generation (static analysis + optional LLM)
│   ├── scaffold_service.py#   README + .gitignore scaffolding for projects
│   └── llm_service.py     #   optional OpenAI-compatible client (never required)
└── utils/
    ├── logging.py         # Structured JSON logging
    └── errors.py          # Typed errors + tool_handler decorator

Layering is strict:

tools (MCP registration only)
   → services (business logic, returns Pydantic models)
      → clients (PyGithub / GitPython wrappers, raise typed errors)
         → utils (shared errors + logging)

This keeps tool files small, makes the business logic unit-testable, and keeps the server module free of implementation details. Services are dependency-injected and model-backed so they can be lifted straight into LangGraph agents later.


Installation

Prerequisites: Python 3.12+, git, and uv.

git clone <your-repo-url> personal-github-mcp
cd personal-github-mcp

# Install dependencies and the package (editable dev install)
uv sync --all-extras

# Configure secrets
cp .env.example .env
# edit .env and set GITHUB_TOKEN

Configuration

Copy .env.example to .env and fill in at least GITHUB_TOKEN.

Variable

Required

Default

Description

GITHUB_TOKEN

yes

GitHub Personal Access Token (classic repo scope, or a fine-grained token with read/write on your repos). PERSONAL_GITHUB_TOKEN is accepted as an alias.

GITHUB_USERNAME

no

token owner

Account used to scope searches/repo listing.

EULER_REPOSITORY

no

project-euler

Repo that stores Project Euler solutions.

DEFAULT_VISIBILITY

no

private

Visibility for new repos (private/public).

DEFAULT_BRANCH

no

main

Branch used when initializing new repos.

GIT_AUTHOR_NAME

no

Personal GitHub MCP

Author for local git commits.

GIT_AUTHOR_EMAIL

no

personal-github-mcp@users.noreply.github.com

Committer email for local commits.

LOG_LEVEL

no

INFO

DEBUG, INFO, WARNING, ERROR.

MAX_RESULTS

no

20

Default result cap for list/search tools (1–100).

OPENAI_API_KEY

no

Optional OpenAI-compatible API key for LLM-generated READMEs (LLM_API_KEY also accepted).

OPENAI_BASE_URL

no

https://api.openai.com/v1

Base URL for an OpenAI-compatible chat/completions endpoint (LLM_BASE_URL also accepted).

OPENAI_MODEL

no

gpt-4o-mini

Model used for README generation (LLM_MODEL also accepted).

Never commit .env. It is git-ignored. If the token is missing at startup the server prints a clear message and exits with a non-zero code.

README generation never fails without an LLM. When no OPENAI_API_KEY is set (or the call fails), READMEs are generated deterministically from static analysis of the project/solution.


Tools

Repository

Tool

Description

list_repositories(visibility, sort, limit)

List your repos, optionally filtered by private/public and sorted by pushed/updated/created/full_name.

repository_summary(name)

High-level summary: languages, topics, last commit, top-level structure.

create_repository(name, description, private)

Create a repo under your account (auto-initialized with a README).

project_statistics(name)

Language breakdown, commits per author, open issues/PRs.

explain_repository(name)

Plain-language explanation of what a repo is about.

stale_repository_report(threshold_days, limit)

Repos not pushed to for a while.

recommend_project(interests, limit)

Ranked suggestions for what to work on next.

Publishing

Tool

Description

publish_current_project(repo_name, description, private, commit_message, branch)

Publish the current working directory. Detects the project, generates a README and .gitignore when missing, initializes git, creates the GitHub repo if needed, commits and pushes. Returns the repo URL.

publish_project(path, repo_name, description, private, commit_message, branch)

Publish a local directory as a new GitHub repo (init → commit → create repo → push).

backup_project(path, commit_message)

Commit local changes and push to an existing repo (creates the repo only if no remote exists).

Publishing handles every combination: existing repos, not-yet-created repos, repos with a remote, and repos without one.

Tool

Description

search_code(keyword, language, owner, limit)

GitHub code search.

search_repository(name, owner, limit)

GitHub repository search by name.

where_did_i_use(keyword, language, limit)

Find where you used a keyword in your own repos.

search_my_engineering_memory(keyword, limit)

Search across your repositories, README files, architecture documentation, and source code, returning ranked results.

Project Euler

Tool

Description

publish_euler_solution(path, commit_message)

Flagship workflow. Detects the problem in the current directory (folders like 001/ or problem_023/), infers the language and source file, generates a professional README, and uploads the solution + README to your Euler repo.

upload_euler_solution(problem_number, file_path, commit_message)

Upload a solution as problem_<NNN>/<filename> in your Euler repo.

update_progress()

Solved problems, totals, and the next unsolved problem number.

Generated Euler READMEs include: Problem Number, Problem Statement (placeholder — the official statement is copyright and cannot be reproduced), Approach, Complexity (time & space), Key Insights, and Files.

Analysis

Tool

Description

compare_repositories(repository_a, repository_b)

Compare two repos and summarize differences.

dependency_summary(path)

Detect and list a local project's dependencies.

architecture_summary(path)

Languages, structure, and entry points of a local project.


Example usage

// publish the project you're currently in (detects cwd, writes README + .gitignore)
publish_current_project(description: "my notes app")
// → { "ok": true, "data": { "repository": "me/notes-app", "url": "https://github.com/me/notes-app",
//     "created": true, "readme_generated": true, "gitignore_generated": true, ... } }

// flagship Project Euler workflow (run from inside "ProjectEuler/023/")
publish_euler_solution()
// → { "ok": true, "data": { "problem_number": 23, "path_in_repo": "problem_023/solution.py",
//     "readme_url": "https://github.com/me/project-euler/...", ... } }

// search your entire engineering memory
search_my_engineering_memory(keyword: "sieve")
// → { "ok": true, "data": { "query": "\"sieve\" user:me", "items": [
//     { "kind": "repository", "repository": "me/algo", ... },
//     { "kind": "source", "repository": "me/algo", "path": "sieve.py", ... } ] } }

// publish a local project by path
publish_project(path: "/Users/me/projects/notes", repo_name: "notes", private: true)
// → { "ok": true, "data": { "repository": "me/notes", "url": "https://github.com/me/notes", "created": true, ... } }

// upload a Project Euler solution
upload_euler_solution(problem_number: 25, file_path: "/Users/me/euler/p025.py")
// → { "ok": true, "data": { "problem_number": 25, "path_in_repo": "problem_025/p025.py", ... } }

Connecting from Claude Desktop

Add this to your Claude Desktop config (claude_desktop_config.json):

{
  "mcpServers": {
    "personal-github-mcp": {
      "command": "uv",
      "args": ["--directory", "/absolute/path/to/personal-github-mcp", "run", "personal-github-mcp"],
      "env": {
        "GITHUB_TOKEN": "ghp_xxxx"
      }
    }
  }
}

If your token is already in the project's .env, you can omit env — the server loads .env itself.


Connecting from Cursor

In Cursor, add an MCP server (Settings → MCP) with the stdio type:

{
  "mcpServers": {
    "personal-github-mcp": {
      "type": "stdio",
      "command": "uv",
      "args": ["--directory", "/absolute/path/to/personal-github-mcp", "run", "personal-github-mcp"],
      "env": {
        "GITHUB_TOKEN": "ghp_xxxx"
      }
    }
  }
}

The same pattern works for other MCP clients (Claude Code, VS Code Copilot, etc.): point the client at uv --directory <path> run personal-github-mcp.


Screenshots

Area

Placeholder

Claude Desktop tools

docs/screenshots/claude-tools.png

publish_euler_solution result

docs/screenshots/euler-publish.png

Engineering memory search

docs/screenshots/memory-search.png


Troubleshooting

"GitHub token is required" and the server exits with code 2 Set GITHUB_TOKEN in .env (or export it) and retry. The server deliberately refuses to start without a token.

publish_euler_solution says "No Project Euler problem detected" The tool expects to run inside (or above) a folder named like 001, problem_023, or ProjectEuler/023, and that folder must contain a recognized source file (solution.py, main.cpp, etc.). Supported extensions: .py, .cpp, .cc, .cxx, .c, .rs, .go, .js, .ts, .java, .rb, .cs, .php, .swift, .kt, .hs, .lua, .zig, .ml.

"Git push failed" A remote may point to a repository you cannot write to, or the branch has diverged. Run git remote -v and git log to diagnose; backup_project is the safe way to push to an existing remote.

GitHub API / rate-limit errors GitHub rate limits apply. Wait and retry, or reduce limit/MAX_RESULTS. Fine-grained tokens need read/write access to the repos you manage.

READMEs look generic No LLM is configured, so READMEs come from static analysis. Set OPENAI_API_KEY (and optionally OPENAI_BASE_URL/OPENAI_MODEL) to get LLM-written READMEs. Any LLM failure falls back to static analysis silently.

Logs are JSON lines Set LOG_LEVEL=DEBUG for more detail. Per-tool timing and error kinds are logged to stderr.


Testing

uv run pytest

The suite covers GitHub services (with in-memory fakes), reporting/analysis services, git services (real repos in temp dirs, including pushes to a local bare remote), the full publish/backup workflows, Project Euler detection and publishing, README/.gitignore scaffolding, search, MCP tool registration and response envelopes.

Development

uv sync --all-extras        # install everything
uv run ruff format src tests
uv run ruff check src tests
uv run pytest

Roadmap

  • LangGraph integration — services are deliberately dependency-injected and model-backed so they can be lifted straight into LangGraph agents/nodes.

  • Project Euler templates — generate solution scaffolds per problem.

  • PR automation — raise pull requests from local branches.

  • SSE / HTTP transport — support transport="streamable-http" for remote clients.

  • Issues triage — list and label open issues across repositories.

  • Auth UX — OAuth device flow as an alternative to a PAT.

  • Fuzzy "where did I use" — tokenized search across clone history, not just the API.

Available Tools

20 tools
architecture_summaryA

Summarize the architecture of a local project.

Reports file language breakdown, top-level structure, and likely entry points.

Args: path: absolute path to the local project directory.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/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 burden of disclosing safety. The verb 'Summarize' and the phrase 'local project' imply read-only behavior, but the description does not explicitly state that it does not modify files or perform network calls. It does clarify what information is reported, which provides some 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 compact and efficiently structured: a one-sentence purpose, a one-line output enumeration, and an Args section. Every sentence contributes meaningful information with no redundancy.

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?

Given the presence of an output schema, the description does not need to explain return values. It covers the tool's purpose, key deliverables, and the only parameter. It could add prerequisites (e.g., path must exist) or mention that it reads only local files, but the description is largely adequate for this simple tool.

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

Parameters5/5

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

The schema provides only a 'path' string with no description (coverage 0%). The description compensates fully by explaining that 'path' is an 'absolute path to the local project directory', adding crucial semantics beyond the structured 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 the action ('Summarize the architecture') and the target ('a local project'), and lists specific outputs (file language breakdown, top-level structure, likely entry points). This distinguishes it from siblings like project_statistics or dependency_summary.

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 description implies when to use the tool (when an architecture overview of the local project is needed) but provides no explicit comparison to siblings such as repository_summary or explain_repository, nor any 'when not to use' guidance.

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

backup_projectA

Commit local changes and push them to GitHub.

Requires path to be a git repository with (or able to create) an 'origin' remote. Use for routine backups of an existing project.

Args: path: absolute path to the local project directory. commit_message: optional commit message (defaults to a dated message).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
commit_messageNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output 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 carries the full burden. It discloses the core actions, a prerequisite (git repo with origin), and the commit message default. However, it does not mention authentication, failure modes, or what happens if there are no committed changes. This is partial but acceptable for a simple tool.

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 concise and front-loaded: the first sentence states the action, followed by a brief prerequisite/use-case line and a short Args list. No redundant sentences.

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 only 2 parameters and an output schema present, the description covers the main purpose, prerequisites, and parameter semantics. It omits edge-case behavior like no-op commits or remote conflicts, but given low complexity and the output schema, the description is reasonably complete.

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 schema includes no property descriptions (0% coverage), but the description compensates with an Args section explaining path as an absolute directory and commit_message as optional with a dated default. It also adds the requirement that path be a git repository. This provides meaningful context beyond the bare 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 the tool's function with specific verbs 'Commit' and 'push' and names the target resource 'GitHub'. The phrase 'routine backups of an existing project' distinguishes it from sibling operations like publish_project.

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 recommends using this tool 'for routine backups of an existing project' and specifies a prerequisite (path must be a git repository with or able to create an origin remote). It does not name alternative tools or exclusions, but the context is clear.

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

compare_repositoriesA

Compare two repositories and summarize their differences.

Args: repository_a: first repository name ('repo' or 'owner/repo'). repository_b: second repository name ('repo' or 'owner/repo').

ParametersJSON Schema
NameRequiredDescriptionDefault
repository_aYes
repository_bYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description must disclose safety and side effects, but it only says 'compare' and 'summarize.' It does not mention that it is read-only, whether it accesses network, or what kind of differences are included. This is minimal.

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 concise: one sentence for purpose plus a clear Args section. No unnecessary words, and it is front-loaded with the primary action.

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

Completeness3/5

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

For a simple two-parameter tool with an output schema, the description covers the essentials. However, it lacks usage guidance and more behavioral detail, such as what kind of differences are summarized or how the comparison is performed, leaving some ambiguity in 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?

The description adds useful format guidance for each parameter ('repo' or 'owner/repo'), which the input schema does not provide. Since schema description coverage is 0%, this compensates well for both parameters.

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 'Compare two repositories and summarize their differences' with a specific verb and resource. This distinguishes it from sibling tools like repository_summary or explain_repository, which handle single repositories.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives like repository_summary or explain_repository. The description only states what it does, not why or when to choose it.

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

create_repositoryA

Create a new repository on GitHub under your account.

Args: name: desired repository name (letters, digits, '-', '_', '.'). description: short description shown on GitHub. private: whether the repository is private.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
privateNo
descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/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 full burden. It states the action and 'under your account' but omits details like authentication requirements, behavior on duplicate names, success/failure responses, and whether the repo is initialized with a README. This is sparse for a mutating tool.

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

Conciseness4/5

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

The description is concise and front-loaded with the main purpose. The Args list is cleanly formatted and avoids extra fluff. It earns its place without being verbose.

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

Completeness3/5

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

While the output schema covers return values, the description lacks context for preconditions (e.g., authentication) and potential failures (e.g., name conflicts). Given the tool's mutating nature and the presence of overlapping sibling tools, it is minimally complete but leaves gaps.

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?

Schema description coverage is 0%, so the description must compensate. It does: name lists allowed characters, description notes it's shown on GitHub, and private clarifies its boolean nature. This adds meaning beyond the schema's types and defaults.

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 ('Create a new repository') and the resource ('on GitHub under your account'). It distinguishes itself from sibling tools like list_repositories and publish_project by focusing on the act of creation on GitHub.

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?

Usage is implied: use when you want to create a new GitHub repository. However, there is no explicit guidance on when to choose this over alternatives like publish_project or backup_project, and no mention of when not to use it.

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

dependency_summaryA

Summarize the dependencies of a local project.

Detects a manifest file (pyproject.toml, requirements.txt, package.json, Cargo.toml, go.mod, Gemfile, composer.json) and lists its dependencies.

Args: path: absolute path to the local project directory.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior2/5

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

Describes core behavior (detects manifest, lists dependencies) but does not disclose behavior for multiple manifests, subdirectory traversal, or error cases; no annotations to compensate.

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?

Purpose front-loaded, concise, no redundant info.

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?

Covers the main use case and supported manifests; output schema covers return values, but missing details about scope of search (root vs recursive) and failure modes.

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

Parameters5/5

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

Description explicitly defines path as absolute path to project directory, adding meaning beyond the bare schema type.

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?

States it summarizes dependencies of a local project and lists supported manifest types, distinguishing it from general repository summary tools.

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?

Implies usage for local dependency analysis but does not state when not to use or name alternatives like repository_summary.

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

explain_repositoryB

Explain what a repository is about in plain language.

Args: name: repository name ('repo' or 'owner/repo').

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of disclosing behavioral traits. It states only that the tool explains a repository in plain language, but does not disclose whether it performs a read-only operation, requires authentication, accesses external services, or has any side effects. The lack of behavioral detail is a significant gap for a tool with no annotation safety net.

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 exceptionally concise: a single purpose sentence plus a parameter definition. It is front-loaded with the main action and contains no filler, repetition, or unnecessary detail. Every word earns its place.

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

Completeness3/5

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

Given the tool's simplicity (one parameter, output schema present), the description provides sufficient information to invoke the tool correctly. However, it lacks usage guidance and behavioral transparency, leaving the agent to infer when to use it and what side effects may occur. The output schema mitigates the need to describe return values, but the missing contextual elements keep this from being fully complete.

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 schema provides only a string type for 'name', giving no semantic meaning. The description compensates by explaining the expected format: 'repo' or 'owner/repo'. This adds meaningful guidance that goes beyond the schema, making the one parameter clear and actionable.

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

Purpose4/5

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

The description clearly states the tool's purpose: to explain what a repository is about in plain language, using a specific verb ('explain') and resource ('repository'). However, with the sibling tool 'repository_summary' present, the description does not explicitly differentiate between the two, creating potential confusion about which tool to choose.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. For example, it doesn't explain how 'explain_repository' differs from 'repository_summary' or when a plain-language explanation is preferred over a structured summary. No contexts or exclusions are mentioned.

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

list_repositoriesA

List your GitHub repositories.

Args: visibility: 'all', 'private' or 'public'. sort: 'pushed', 'updated', 'created' or 'full_name'. limit: maximum number of repositories to return.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoupdated
limitNo
visibilityNoall

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description must disclose behavior, but it only explains parameters. It does not mention authentication, pagination, rate limits, or the shape of the returned data (though an output schema exists). The read-only nature is implied but not stated.

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 minimal and front-loaded with the purpose, followed by a well-formatted args list. Every sentence is functional with no filler.

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 list operation with an output schema and no required parameters, the description covers the essential parameter semantics. It does not discuss return value details, but the output schema presumably handles that. Minor gaps like sort value semantics are inferable from the names.

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

Parameters5/5

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

Schema coverage is 0%, so the description is the sole source of parameter meaning. It clearly enumerates the allowed values for visibility, sort, and explains limit as a maximum. This fully compensates for the schema's lack of descriptions.

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

Purpose4/5

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

The description opens with 'List your GitHub repositories,' which is a specific action and resource. It clearly indicates the tool's purpose but does not explicitly differentiate from siblings like search_repository or repository_summary, though listing vs searching is contextually distinct.

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

Usage Guidelines2/5

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

No guidance is provided about when to use this tool over alternatives. The description only lists arguments and offers no context or exclusions.

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

project_statisticsA

Show development statistics for a repository.

Includes language breakdown, commit counts per author, and open issues / pull requests.

Args: name: repository name ('repo' or 'owner/repo').

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits, but it only says 'Show', which implies read-only without explicitly stating it. It does not mention permissions, side effects, rate limits, or error conditions, leaving the agent to infer behavior.

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 compact and front-loaded, starting with the core purpose, then listing included statistics, and ending with a clear Args section. Every sentence adds value without redundancy.

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 output schema covers return values, and the description explains the parameter format, making the tool usable. However, it lacks guidance on edge cases (e.g., what if the repo does not exist) and does not clarify how repo resolution works when only 'repo' is provided. Minor gaps prevent a perfect score.

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

Parameters5/5

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

The schema provides no description for the 'name' parameter (0% coverage), but the tool description fully compensates by explaining the expected format: 'repo' or 'owner/repo'. This gives the agent the necessary guidance to invoke the tool correctly.

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 tool's purpose: 'Show development statistics for a repository' and enumerates specific statistics (language breakdown, commit counts per author, open issues/PRs). This distinguishes it from siblings like repository_summary or dependency_summary, which have different focuses.

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 description implies usage when development statistics are needed, but it does not provide explicit guidance on when to choose this tool over similar siblings (e.g., repository_summary, dependency_summary). No alternatives or exclusions are mentioned, so usefulness for selection is moderate.

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

publish_current_projectA

Publish the current working directory as a GitHub repository.

Detects the project, generates a README and .gitignore when missing, initializes git if needed, creates the GitHub repository if needed, commits and pushes everything, then returns the repository URL.

Args: repo_name: GitHub repository name (defaults to the folder name). description: short description for the new repository. private: whether the repository is private. commit_message: optional commit message for the initial commit. branch: default branch for new repositories.

ParametersJSON Schema
NameRequiredDescriptionDefault
branchNomain
privateNo
repo_nameNo
descriptionNo
commit_messageNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

No annotations provided, so the description carries the full burden. It thoroughly discloses the workflow: detecting project, generating README/.gitignore, initializing git, creating the repo, committing/pushing, and returning URL. This is transparent about side effects.

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 well-structured with a one-sentence overview, bullet-like steps, and an Args section. It's detailed but every sentence serves a purpose.

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

Completeness5/5

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

For a multi-step tool with no annotations, the description covers entry conditions, steps, and output (URL). It's sufficiently complete given the output schema exists.

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

Parameters5/5

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

Schema description coverage is 0%, but the description includes an Args section that explains each parameter's purpose and defaults, significantly adding meaning beyond the schema's bare property definitions.

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 tool publishes the current working directory as a GitHub repository, with a specific verb and scope. This distinguishes it from sibling tools like publish_project by emphasizing the current working directory.

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 the use case (publishing the current directory) but does not explicitly compare with alternatives such as publish_project. It lacks when-not-to-use guidance, so it's clear context but no exclusions.

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

publish_euler_solutionA

Publish a Project Euler solution with an auto-generated README.

Detects the problem in the current directory (or path), infers the problem number, language and source file, generates a README.md, then uploads the solution and README to your Euler repository and returns the GitHub URL.

Args: path: optional directory containing the problem (defaults to the current working directory). commit_message: optional commit message.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
commit_messageNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full transparency burden. It discloses the side effect (uploading to the Euler repository) and the return value (GitHub URL), but it omits potential failure modes, permission requirements, and whether an existing README will be overwritten.

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 compact and front-loaded with the primary action. The Args list is clear and adds value without redundancy. Every sentence earns its place.

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

Completeness3/5

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

The description explains the workflow and return value, but it lacks important context such as prerequisites (e.g., existing repository, valid Project Euler problem structure) and error cases (e.g., what happens if problem detection fails). Given no annotations, this leaves the tool less complete for an agent to operate safely.

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?

With 0% schema description coverage, the description must explain both parameters. It does so in the Args section, noting the default for path. However, commit_message is only described as 'optional commit message' without indicating its default or effect, which leaves some ambiguity.

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 tool's purpose: 'Publish a Project Euler solution with an auto-generated README.' It enumerates the full pipeline (detect problem, infer metadata, generate README, upload, return URL), which is specific and differentiates it from siblings like upload_euler_solution.

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 provides clear context for when to use the tool: it operates on the current directory or a specified path, and it auto-generates a README. However, it does not explicitly contrast with alternatives such as upload_euler_solution, nor does it state when not to use it.

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

publish_projectA

Publish a local project as a new GitHub repository.

Initializes a git repository if needed, commits all files, creates the remote repository on GitHub and pushes the default branch.

Args: path: absolute path to the local project directory. repo_name: GitHub repository name (defaults to the folder name). description: short description for the new repository. private: whether the repository is private. commit_message: optional commit message for the initial commit. branch: default branch for new repositories.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
branchNomain
privateNo
repo_nameNo
descriptionNo
commit_messageNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It transparently lists the full sequence: 'Initializes a git repository if needed, commits all files, creates the remote repository on GitHub and pushes the default branch.' It also explains the defaults for parameters (e.g., repo_name defaults to folder name, branch defaults to 'main'), giving good insight into side effects. It does not mention error scenarios or authentication prerequisites, but core behavior is well covered.

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 front-loaded with a one-sentence summary, followed by a compact step description, and then a clean bullet list of parameters. Every sentence adds information without redundancy. It is well-organized and appropriately sized for the tool's complexity.

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

Completeness5/5

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

Given the tool's complexity (6 parameters, multi-step process) and the presence of an output schema, the description is highly complete. It covers parameter semantics, the operational sequence, and defaults. The absence of annotations is offset by the thorough description, making it sufficient for an agent to invoke the tool correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must fully explain all parameters. It does so explicitly: 'path: absolute path to the local project directory,' 'repo_name: GitHub repository name (defaults to the folder name),' 'private: whether the repository is private,' etc. This adds meaning beyond the schema, which only provides titles and defaults.

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: 'Publish a local project as a new GitHub repository.' It enumerates the concrete steps (init, commit, create remote, push), which distinguishes it from sibling tools like 'create_repository' (which likely only creates an empty repo) and 'publish_current_project' (which likely operates on the current directory rather than an arbitrary path).

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 provides clear context for when to use the tool: when publishing a local project as a new GitHub repo. It does not explicitly mention when not to use it or name alternative tools, but the detailed behavior (initializing git, committing all files) implies it is for turning an existing local project into a new remote repository, which is sufficient guidance.

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

recommend_projectA

Recommend a project to work on next.

Scores your repositories by recency, activity and (optionally) a comma-separated list of interests matched against the primary language.

Args: interests: comma-separated language interests, e.g. 'python, rust'. limit: number of recommendations to return.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
interestsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior3/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. It discloses the scoring logic (recency, activity, optional interest matching) and parameter behavior, but does not explicitly state whether the operation is read-only, mention side effects, permissions, or limitations. This is useful but not fully transparent.

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 extremely concise: one purpose sentence, one scoring sentence, and a compact parameter list. Every sentence adds value and is front-loaded, with no filler or repetition.

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

Completeness5/5

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

An output schema is present, so return values are covered externally. The description adds scoring criteria, optional-interest semantics, and parameter definitions, making the tool sufficiently understandable for its moderate complexity.

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

Parameters5/5

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

The input schema has no property descriptions (0% coverage), but the description includes a dedicated Args section that defines both parameters: interests as a comma-separated list with an example, and limit as the number of recommendations. This fully compensates for the schema gap.

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 opens with a specific action 'Recommend a project to work on next,' clearly identifying the resource and intent. It distinguishes from sibling repository tools by focusing on next-project selection and scoring by recency, activity, and optional interests.

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?

Establishes a clear usage context: to decide which project to work on next, optionally filtered by interests. It does not explicitly name alternatives or state when not to use this tool, but the context is unambiguous enough for selection.

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

repository_summaryB

Return a high-level summary of a GitHub repository.

Args: name: repository name ('repo' or 'owner/repo').

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states 'Return' which implies a read-only operation, but does not mention authentication requirements, error behavior, rate limits, or what constitutes a 'high-level summary'. This lack of detail is a significant gap.

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 highly concise: two short sentences with the primary action front-loaded and parameter documentation efficiently after. Every word earns its place, with no redundancy or filler.

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 one-parameter tool with an existing output schema, the description provides enough information for correct invocation. It doesn't elaborate on the summary's content, but the output schema likely provides that structure. Some nuance about scope is missing, but overall it is adequate.

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 schema provides only a bare string type with no description (0% coverage), but the description includes an Args section explaining the parameter format ('repo' or 'owner/repo'), adding practical meaning beyond the schema. This compensates well for the missing schema descriptions.

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

Purpose4/5

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

The description clearly states the tool's purpose with a specific verb ('Return') and resource ('a high-level summary of a GitHub repository'). It is unambiguous, though it does not explicitly distinguish itself from sibling tools like 'explain_repository' or 'architecture_summary'.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. The description does not mention any exclusions, prerequisites, or preferred scenarios, leaving the agent without context for selecting this tool among siblings.

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

search_codeA

Search GitHub code for a keyword.

Args: keyword: the text to search for. language: optional filter, e.g. 'python'. owner: optional GitHub user/org to scope the search to. limit: maximum number of results.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
ownerNo
keywordYes
languageNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/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 full responsibility for behavioral disclosure. It only states the search action and parameter semantics, but does not mention auth requirements, rate limits, behavior for private repos, pagination, or error handling. This is a minimal behavioral description beyond the tool name.

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 extremely concise: one clear sentence and a compact Args list. Every line adds value and there is no redundant or filler content.

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?

Given the tool's simplicity, the output schema covers return values, and all parameters are explained. However, without annotations, critical context such as authentication needs or rate limits is missing. The description is largely complete for a basic search tool but lacks some safety/contextual guidance.

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?

With 0% schema description coverage, the description compensates by explaining every parameter: keyword as 'text to search for,' language as an optional filter, owner as a GitHub user/org scoping, and limit as maximum results. These semantics add meaningful value over the bare schema property names.

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

Purpose4/5

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

The description clearly states 'Search GitHub code for a keyword,' which is a specific verb+resource combination. It distinguishes from siblings like search_repository by targeting 'code' rather than repositories, though it doesn't explicitly mention these alternatives.

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 description implies usage for searching code snippets via the phrase 'Search GitHub code,' but it provides no explicit guidance on when to use this tool versus alternatives such as search_repository. No exclusions or contextual triggers are mentioned.

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

search_my_engineering_memoryA

Search your engineering memory across all of your repositories.

Looks through repository metadata, README files, architecture documentation and source code, returning ranked results.

Args: keyword: the text to search for. limit: maximum number of ranked results to return.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
keywordYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/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. It does disclose that the tool searches metadata, READMEs, architecture documentation, and source code, and returns ranked results. However, it does not explain ranking criteria, potential coverage limitations (e.g., archived/private repos), or output structure, though the output schema mitigates the latter.

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 compact and front-loaded: the first sentence states purpose, the second adds detail on sources and ranking, and the Args block is a clear, structured parameter list. Every sentence earns its place; no fluff or redundancy.

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 search tool with an output schema, the description covers the essential aspects: purpose, scope, data sources, ranking, and all parameters. It lacks explicit usage differentiation (addressed in dimension 2) but is otherwise sufficient for correct invocation and interpretation. The absence of annotations is less critical for a read-only search operation.

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

Parameters5/5

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

The schema itself has no descriptions (0% coverage), but the description includes an Args block that clearly explains both parameters: 'keyword: the text to search for' and 'limit: maximum number of ranked results to return.' This fully compensates for the schema's lack, adding meaning beyond the type/default information.

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 ('Search') and resource ('your engineering memory across all of your repositories'), with the second sentence enumerating what is searched (metadata, READMEs, architecture docs, source code) and noting ranked results. This differentiates it from siblings like search_code (code-only) and search_repository (likely single-repo) by emphasizing cross-repo scope and ranked output.

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 description implies usage context: a broad search across all repositories, including documentation and code. However, it provides no explicit guidance on when to use this tool versus sibling tools like search_code or search_repository, and no exclusions or alternative recommendations are mentioned.

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

search_repositoryA

Search for repositories by name.

Args: name: repository name to search for. owner: optional GitHub user/org to scope the search to. limit: maximum number of results.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
limitNo
ownerNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 must carry the full burden of behavioral disclosure. It only says 'Search for repositories by name' and gives param descriptions, but doesn't disclose whether the operation is read-only, whether it hits a rate limit, pagination behavior, or any side effects. This is a clear gap for a tool with zero 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 appropriately sized: a one-line purpose followed by a compact Args list. Every sentence is informative and there is no fluff. Front-loaded with the core action.

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?

This is a simple search tool with only 3 params (1 required) and an output schema is present, so return values need not be explained. The description is sufficient for basic usage, but with no annotations it's slightly bare for a full understanding. It covers the essential semantics without over-explaining.

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 Args section adds meaning beyond the schema: it explains name as 'repository name to search for', owner as 'optional GitHub user/org to scope the search to', and limit as 'maximum number of results'. Since schema coverage is 0%, this description compensates well, though it doesn't detail defaults or edge cases.

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 starts with 'Search for repositories by name', which is a specific verb+resource statement. It clearly distinguishes from sibling tools like list_repositories (which lists all) and search_code (which searches code, not repositories).

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 usage is implied from the purpose: use this when you need to find a repository by name, rather than listing all repositories or searching code. However, there is no explicit statement of when not to use it or what alternatives exist.

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

stale_repository_reportA

List repositories that have not been pushed to recently.

Args: threshold_days: only report repos idle for at least this many days. limit: maximum number of repos to report.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
threshold_daysNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/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. It clearly indicates this is a read-only reporting operation ('List...'), but it does not disclose potential side effects, sorting behavior, or details about output format beyond the parameters. It is adequate 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 highly concise: one sentence stating the purpose, followed by a structured 'Args' section with two brief explanations. Every word earns its place, and the format is easy to parse.

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 tool with two optional parameters and an existing output schema, the description is complete enough. It covers the purpose and parameter semantics. It could mention ordering or default behavior details, but these are not essential given the tool's simplicity and the presence of an output schema.

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

Parameters5/5

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

The schema provides only titles and defaults for the two parameters, with 0% description coverage. The tool description fully compensates by explaining both 'threshold_days' and 'limit' in plain language, making the parameters meaningful and easy to understand.

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

Purpose4/5

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

The description clearly states the tool's function: 'List repositories that have not been pushed to recently.' This is a specific verb-resource combination with a clear condition. It is distinct from sibling tools like list_repositories, but it does not explicitly name alternatives, so it earns a 4 rather than 5.

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 description implies when to use the tool (when you need to identify stale repositories), but it provides no explicit guidance on when not to use it or how it compares to alternatives. There are no exclusions or alternative tool references, so usage guidance is only implied.

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

update_progressA

Report your current Project Euler progress from GitHub.

Returns the list of solved problems, totals and the next unsolved problem number.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior2/5

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

With no annotations, the description carries the full transparency burden, but it only mentions the data source (GitHub) and return values. It does not disclose whether this tool mutates any state (despite the 'update_progress' name), whether authentication is required, or whether it fetches live data. This leaves important behavioral traits unspecified.

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 concise sentences, front-loaded with the core verb and resource, and contains no filler or redundant information.

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 no-parameter reporting tool, the description covers the key output and data source. The presence of an output schema fills in return structure details, though prerequisites like GitHub authentication are not mentioned. Overall, it is adequate but not exhaustive.

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 imposes no burden. The description adds value by explaining what the tool returns, which is enough for a no-parameter tool.

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: reporting current Project Euler progress from GitHub. It further specifies the exact outputs (solved problems, totals, next unsolved problem), and this distinguishes it from sibling tools like upload_euler_solution and publish_euler_solution.

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 description implies the tool is used when you need your current Project Euler progress, but it offers no explicit guidance on when to prefer it over alternatives like project_statistics or repository_summary. No exclusions or alternative tool references are provided.

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

upload_euler_solutionB

Upload a Project Euler solution to your solutions repository.

Files are stored as problem_<NNN>/<filename> in the Euler repository (default: project-euler).

Args: problem_number: the Project Euler problem number. file_path: absolute path to the local solution file. commit_message: optional commit message.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes
commit_messageNo
problem_numberYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/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. It discloses the storage structure ('problem_<NNN>/<filename>') and the default repository ('project-euler'), which is useful. However, it does not clarify side effects such as whether a commit is created (despite the 'commit_message' parameter), whether the repository is created if missing, if existing files are overwritten, or what the return value is.

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 compact and front-loaded. The first sentence states the core action, followed by a helpful storage-location detail, and then a clear parameter list. Every sentence earns its place with no redundancy.

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

Completeness3/5

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

The description is adequate for basic usage but lacks completeness in context. It does not explain how this tool differs from the similarly named 'publish_euler_solution', nor does it mention behavior on errors or whether it operates locally versus remote. Given an output schema exists, not explaining return values is acceptable, but the missing usage context and overlap with a sibling reduce completeness.

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?

Schema description coverage is 0%, so the description's Args section is essential. It provides meaningful explanations for all three parameters: problem_number, file_path (with 'absolute path' constraint), and commit_message (noting it is optional). This goes beyond the bare type information in the schema, though it could add more detail like allowed file extensions.

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

Purpose4/5

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

The description uses a specific verb 'Upload' and clearly identifies the resource ('a Project Euler solution to your solutions repository'). It also provides the storage path format, but it does not distinguish itself from the sibling tool 'publish_euler_solution', which likely serves a similar or overlapping purpose.

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

Usage Guidelines2/5

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

The description gives no explicit guidance on when to use this tool versus alternatives like 'publish_euler_solution'. It implies usage for uploading solutions but provides no when/when-not criteria or mention of alternative tools.

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

where_did_i_useA

Find where you used a given keyword in your own repositories.

Args: keyword: the text to search for in your code. language: optional filter, e.g. 'python'. limit: maximum number of results.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
keywordYes
languageNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description must disclose behavior. It adds the contextual constraint of searching 'your own repositories', but doesn't state read-only nature, permissions, or potential side effects. The behavior is typical for a search tool, so it's minimally adequate.

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 extremely concise: one purpose line plus a compact parameter list. Every sentence adds value, and it's front-loaded with the main action.

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?

Given the tool's simplicity and the presence of an output schema, the description covers the essential purpose and parameters. It lacks usage guidance and behavioral details, but for a straightforward search operation, it's adequate.

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 description provides full explanations for all three parameters, including an example for language ('python') and the meaning of limit. Since schema coverage is 0%, this fully compensates for missing schema descriptions.

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

Purpose4/5

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

Description uses specific verb 'Find' and resource 'keyword in your own repositories', clearly stating the tool's function. The phrase 'your own repositories' differentiates it from broader code search tools, though it doesn't explicitly name alternatives.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus siblings like search_code or search_repository. The scope is implied by 'your own repositories', but no comparative direction is provided.

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. 20 tool updatesv0.1.0
    • First observedarchitecture_summary
    • First observedbackup_project
    • First observedcompare_repositories
    • First observedcreate_repository
    • First observeddependency_summary
    • First observedexplain_repository
    • First observedlist_repositories
    • First observedproject_statistics
    • First observedpublish_current_project
    • First observedpublish_euler_solution
    • First observedpublish_project
    • First observedrecommend_project
    • First observedrepository_summary
    • First observedsearch_code
    • First observedsearch_my_engineering_memory
    • First observedsearch_repository
    • First observedstale_repository_report
    • First observedupdate_progress
    • First observedupload_euler_solution
    • First observedwhere_did_i_use

TDQS

B3.2/5.0

Scored across 20 tools

Disambiguation2/5

Several tools have overlapping purposes: repository_summary, explain_repository, and project_statistics all describe repository characteristics; publish_project and publish_current_project both publish local projects; and search_code, where_did_i_use, and search_my_engineering_memory all perform search operations. These unclear boundaries make it difficult for an agent to reliably select the correct tool.

Naming Consistency2/5

Naming is mixed between verb-first (list_repositories, create_repository, search_code) and noun-first (repository_summary, project_statistics, dependency_summary) patterns, with the exception of 'where_did_i_use' which uses a completely different sentence-like format. The inconsistency is significant enough to hinder predictable tool selection.

Tool Count3/5

With 20 tools, the server is on the heavy side—slightly above the ideal 3–15 range. While the count is not outrageous, the many overlapping tools inflate the number and make the set feel heavier than it needs to be.

Completeness2/5

The server covers repository listing, creation, searching, publishing, and local project analysis, but lacks basic GitHub operations such as updating or deleting repositories, managing issues and pull requests, or viewing commit history. These are significant gaps for a GitHub-related MCP, leaving core workflows incomplete.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to automate GitHub repository management, issue tracking, and commits using natural language.
    2 npm
    Apache 2.0
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to answer natural-language GitHub queries by listing repositories, issues, pull requests, branches, commits, and files, as well as performing writes with dry-run and confirmation safeguards.
    -