Skip to main content
Glama

mcp-trial

Me learning the Model Context Protocol by building a server for the GitHub API. Python SDK v2, running over stdio and hooked into Claude Code.

What it does

Two tools, one for a repo's summary and one for its recent commit messages. There's also a resource that serves a repo's raw README, and a prompt template for assessing a repo as a portfolio piece.

Related MCP server: GitHub MCP Server

Running it

uv sync
uv run mcp dev server.py          # opens the inspector
uv run python test_server.py      # calls the server directly, no host needed

To register it with Claude Code:

claude mcp add gh-lab -- uv run --directory /path/to/mcp-trial mcp run server.py

What I learned

Your type hints are the actual API contract, since the SDK builds the tool's JSON schema straight from the function signature. Writing limit: int = 5 also makes that parameter optional, so the model can skip it.

Docstrings mattered more than I expected, because they get sent to the model as the tool description and decide which tool it picks. I asked Claude Code whether a repo was actively maintained, and it called both tools and worked it out, which only happened because the descriptions made them look combinable.

Everything a tool returns becomes text in the model's context, so each field costs tokens. GitHub hands back about a hundred fields and I return five.

Raising an error beats returning one, since raising sets a flag the host checks and the message reaches the model as something it can act on.

Async doesn't make anything faster. A single call takes the same time either way. What await does is park the function and free the event loop so other calls can run during the wait.

Notes

mcp-reference.md has my working notes from building this.

Available Tools

2 tools
get_repoA

Get summary info for a GitHub repository: description, stars, language, last push.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYes
ownerYes

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 carries the behavioral transparency burden. 'Get summary info' conveys a read-only operation and names the returned fields, but it does not mention authentication needs, rate limits, error behavior, or edge cases like repositories without a last push.

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?

A single, tightly structured sentence front-loads the action and resource, then enumerates concrete outputs. There is no filler, repetition, or unnecessary detail.

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 two-parameter read-only metadata tool, the description is largely complete: it states the operation, target resource, and output fields. A note about when to prefer recent_commits would improve it, but that gap is already reflected in the usage guidelines score.

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

Parameters2/5

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

The schema has no parameter descriptions and the description does not define 'owner' or 'repo' beyond the general reference to a GitHub repository. The parameter names are fairly self-evident, but the description adds no meaningful semantic depth.

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?

Begins with 'Get summary info for a GitHub repository' which is a specific verb plus resource, and lists concrete fields (description, stars, language, last push) that clearly distinguish it from the sibling tool recent_commits.

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 does not explicitly state when to use this tool versus recent_commits, nor does it provide prerequisites or exclusions. Usage context must be inferred from the word 'summary' and the listed output fields.

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

recent_commitsB

List the most recent commit messages on a repository's default branch.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYes
limitNo
ownerYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 burden of behavioral disclosure. It usefully clarifies that only the default branch is inspected and that only messages are returned, but it does not mention ordering beyond 'most recent,' pagination, authentication needs, or rate-limit behavior. This is adequate but not richly 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?

One short, front-loaded sentence that states the core behavior without filler or redundancy. Every word contributes meaning, making it easy for an agent to parse quickly.

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 read-only listing tool, the description covers the main action and branch scope, and an output schema exists to describe return values. However, it leaves the limit parameter's semantics completely unaddressed and assumes the agent infers the standard owner/repo relationship, so the context is minimally sufficient rather than complete.

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

Parameters1/5

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

Schema description coverage is 0%, yet the description does not explain any of the three parameters (owner, repo, limit). It adds no meaning beyond the raw property names and default value already present in the input schema, so it fails to compensate for the low schema coverage.

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

Purpose5/5

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

The description uses a specific verb ('List') and a specific resource ('recent commit messages'), clearly scoping them to 'a repository's default branch.' This distinguishes it from the sibling get_repo, which is about repository metadata rather than commit messages.

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 use when recent commit messages are needed, but it provides no explicit guidance about when not to use it or how it compares to the sibling get_repo. It does not include exclusions or alternative recommendations, so usage guidance is only implicit.

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. 2 tool updatesv0.1.0
    • First observedget_repo
    • First observedrecent_commits

TDQS

B3.4/5.0

Scored across 2 tools

Disambiguation5/5

get_repo and recent_commits are clearly distinct: one fetches repository metadata, the other lists recent commit messages. There is no ambiguity between them.

Naming Consistency3/5

Both names use snake_case but follow different patterns: get_repo uses a verb_noun construction while recent_commits is an adjective_noun phrase. The inconsistency is minor but noticeable.

Tool Count3/5

With only 2 tools, the server feels thin for a GitHub-related purpose. It is slightly under the typical well-scoped range, though acceptable for a narrow read-only trial.

Completeness2/5

The tools only cover repository metadata and recent commits. Obvious gaps like branches, issues, pull requests, and other common repository operations are missing, which would significantly hinder agents needing broader repo access.

Maintenance

ActivityMaintained
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

  • A
    license
    A
    quality
    D
    maintenance
    An MCP server that enables analyzing and querying GitHub repositories through the GitHub Chat API, allowing users to index repositories and ask questions about their code, architecture and tech stack.
    2
    88
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that provides tools for interacting with the GitHub API, enabling AI assistants to query repositories, pull requests, issues, commits, users, and more.
    428
    ISC
  • F
    license
    Not graded
    quality
    C
    maintenance
    A read-only MCP server that exposes GitHub user profiles, repository info, and search via tools for AI assistants like Claude.
    -
  • A
    license
    A
    quality
    B
    maintenance
    MCP server that enables AI assistants to look up and analyze GitHub repositories, including stars, forks, description, open issues, and README content.
    2
    68
    MIT