Skip to main content
Glama
bdbrown4

GitHub Portfolio MCP Server

by bdbrown4

GitHub Portfolio MCP Server

An MCP (Model Context Protocol) server that exposes tools for AI agents to query a GitHub user's public profile, repositories, languages, and README content.

Tools

Tool

Description

list_repos

List all public repositories with optional fork filtering and sorting

get_repo_details

Get detailed info about a repo including its full README

get_languages

Get language breakdown (with percentages) for a repository

get_profile

Get the GitHub user's public profile (bio, location, stats)

search_repos

Search repos by keyword across names, descriptions, and topics

get_tech_stack_summary

Aggregate languages and topics across all original repos

Related MCP server: GitBridge

Resources

Resource

URI

Description

Profile

github://bdbrown4/profile

Full GitHub profile JSON

README

github://{owner}/{repo}/readme

README content for any repo

Setup

npm install
npm run build

Usage with Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "github-portfolio": {
      "command": "node",
      "args": ["C:/dev/github-portfolio-mcp-server/dist/index.js"]
    }
  }
}

Usage with VS Code (GitHub Copilot)

Add to your .vscode/mcp.json or user settings:

{
  "servers": {
    "github-portfolio": {
      "command": "node",
      "args": ["C:/dev/github-portfolio-mcp-server/dist/index.js"]
    }
  }
}

Optional: Higher Rate Limits

Set a GitHub Personal Access Token to avoid the 60 req/hour unauthenticated limit:

{
  "mcpServers": {
    "github-portfolio": {
      "command": "node",
      "args": ["C:/dev/github-portfolio-mcp-server/dist/index.js"],
      "env": {
        "GITHUB_TOKEN": "ghp_your_token_here"
      }
    }
  }
}

Example

Here's the list_repos tool in action inside VS Code with GitHub Copilot, listing all 18 original (non-forked) public repos sorted by most recently updated:

list_repos example

Development

npm run dev    # Watch mode — recompiles on change
npm run build  # One-time compile
npm start      # Run the server (stdio)

Available Tools

6 tools
get_languagesGet Repository LanguagesB

Get programming languages used in a repository with byte counts.

ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameYes

TDQS

B3.1/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 implies a safe read operation ('Get') and mentions byte counts in the output, which is useful. However, it does not discuss auth requirements, rate limits, or possible errors, leaving some transparency gaps.

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

Conciseness5/5

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

The description is a single, compact sentence that is front-loaded with the core action and resource. There is no fluff or redundancy; 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?

The tool is simple with one parameter and no output schema, and the description does state the key output (languages and byte counts). However, it fails to differentiate from the closely related get_tech_stack_summary and provides no hints about response structure beyond byte counts, leaving some contextual gaps.

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?

Schema description coverage is 0%, so the description must compensate. It only says 'repository' for repo_name, which barely adds meaning beyond the parameter name. It does not clarify the expected format (e.g., 'owner/repo') or any constraints, providing minimal additional value.

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 ('Get') and resource ('programming languages used in a repository') with an added detail ('with byte counts'). It is clear and distinguishes from sibling tools like list_repos and get_profile, though no explicit contrast with get_tech_stack_summary is provided.

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, nor any prerequisites. The description merely states what it does, leaving the agent to infer usage context from the tool name and sibling list.

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

get_profileGet GitHub ProfileA

Get the public GitHub profile for bdbrown4.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It states the profile is 'public', implying a read-only, non-destructive operation, but it does not disclose potential error cases (e.g., user not found) or return format. This is average transparency.

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

Conciseness5/5

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

The description is a single, direct sentence with no redundancy or filler. It is appropriately concise and immediately communicates the tool's purpose.

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, parameterless read-only tool, the description conveys the core action and scope clearly. It does not describe the exact response fields, but that is not essential for the agent to select and invoke the tool correctly.

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

Parameters4/5

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

There are zero parameters, so the schema already fully covers them. The description adds no parameter-specific information, but none is needed. Baseline for 0 params is 4.

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

Purpose5/5

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

The description uses a specific verb ('Get') and resource ('public GitHub profile for bdbrown4'), clearly distinguishing it from siblings that focus on repositories. This is exactly the 'specific verb+resource' required for a top score.

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: when you need the GitHub profile for bdbrown4, this is the tool. However, there is no explicit guidance on when to use it over alternatives or any exclusions, so it does not fully meet the 'explicit when/when-not' criteria.

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

get_repo_detailsGet Repository DetailsA

Get detailed info about a specific repository including its README.

ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameYesRepository name

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 discloses that the tool returns detailed info and includes the README, which is useful. However, it does not mention response format, error behavior, or whether any permissions are needed, leaving moderate gaps.

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

Conciseness5/5

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

The description is a single sentence, front-loaded with the main action, and contains no filler. It is optimally concise for the information it conveys.

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 tool with one parameter and no output schema, the description provides the basic purpose but leaves 'detailed info' vague. It does not enumerate what fields are returned beyond README, so the agent might not know if it satisfies the need compared to siblings like get_tech_stack_summary. This is adequate but not complete.

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

Parameters3/5

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

The schema description covers 100% of the parameter with 'Repository name', so the description adds no new meaning. The baseline of 3 applies because the schema already handles parameter documentation.

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+resource ('Get detailed info about a specific repository') and explicitly mentions the README, clearly distinguishing it from siblings like list_repos and get_languages. It is unambiguous about what the tool does.

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 clearly indicates the tool is for a specific repository, implying you need the repo name. It provides context for when to use it, though it does not explicitly mention alternatives or exclusions, which keeps it a step below a 5.

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

get_tech_stack_summaryTech Stack SummaryA

Aggregate languages and technologies across all of bdbrown4's repos.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the aggregation scope but omits any details about return format, whether the operation is read-only, or any filtering rules (e.g., forked repos excluded). This is minimal beyond stating the purpose.

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

Conciseness5/5

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

The description is a single, focused sentence that immediately states the tool's purpose with no extraneous information. It is well-structured and front-loaded.

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 zero-parameter tool, the description covers the scope ('all of bdbrown4's repos') and action ('aggregate'), but it lacks context about what the returned summary contains (e.g., counts, percentages, technologies list). Since there is no output schema, the description could reasonably mention return-shape details.

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 fully covers parameter semantics (vacuously). The description adds no parameter-specific meaning, but with no parameters to document, the baseline of 4 is appropriate.

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 the specific verb 'Aggregate' and clearly states the resource ('languages and technologies across all of bdbrown4's repos'). This distinguishes it from siblings like get_languages, which likely targets a single repo, while this tool offers a cross-repo 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 usage for getting a high-level summary across all repos, but it does not explicitly mention when to use this tool versus alternatives such as get_languages or get_repo_details. No exclusions or alternative trade-offs are stated.

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

list_reposList GitHub RepositoriesC

List public repositories for bdbrown4.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoupdated
include_forksNo

TDQS

C2.9/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 burden. It implies a read-only operation ('List public repositories'), but there is no mention of pagination, response format, or any limits. The tool may or may not be side-effect-free, but the description does not fully disclose 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 a single, concise sentence that is easily parsed. It front-loads the primary purpose without unnecessary detail, achieving maximum efficiency.

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

Completeness2/5

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

The tool is simple, but the description lacks essential context such as default sort order, fork inclusion policy, and what fields are returned in the response. With no output schema, the agent is left without enough information to confidently invoke the tool.

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?

The schema has zero parameter descriptions (0% coverage) and the description does not mention 'sort' or 'include_forks' at all. The enum values are self-explanatory, but the description adds no value to the agent's understanding of how these parameters affect the output.

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 'List public repositories for bdbrown4', specifying the action, resource type, and user scope. This distinguishes it from sibling tools like search_repos (searching) and get_repo_details (getting a single repo's details).

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 versus alternatives. The description does not mention search_repos for broad searching or get_repo_details for specific repos, nor does it explain any exclusions or prerequisites.

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

search_reposSearch RepositoriesA

Search bdbrown4's repositories by keyword.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

TDQS

A3.5/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. It only states the core function without disclosing return format, matching behavior, or edge cases. Similar to under-disclosed mutation tools.

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 sentence with no wasted words, front-loaded with the action word 'Search'.

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 tool is simple with one parameter and no output schema, but the description doesn't specify return values or any behavioral constraints. It's minimally sufficient but lacks explicit boundary conditions.

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

Parameters3/5

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

Input schema has a required 'query' string with zero description coverage. The description adds that the query is a 'keyword', which gives some meaning to the parameter, but doesn't elaborate on format or expected values.

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

Purpose5/5

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

The description uses a specific verb 'Search' with resource 'repositories' and scope 'bdbrown4's', plus method 'by keyword', clearly distinguishing from siblings like list_repos which lists all repos.

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 keyword-based search but doesn't explicitly state when to choose this over list_repos or other siblings. No exclusions are mentioned, so usage context is implied rather than stated.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 6 tool updatesv1.0.0
    • First observedget_languages
    • First observedget_profile
    • First observedget_repo_details
    • First observedget_tech_stack_summary
    • First observedlist_repos
    • First observedsearch_repos

TDQS

A3.8/5.0
Disambiguation5/5

Each tool serves a clear, distinct purpose: listing repos, getting specific repo details, languages, profile, searching, and tech stack aggregation. Overlap between list_repos and search_repos is minimal since search is a filtered view, and get_languages vs get_tech_stack_summary differ by scope (single repo vs aggregate).

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., list_repos, get_profile, search_repos). Even the longer get_tech_stack_summary adheres to the same convention, making the set predictable and easy to navigate.

Tool Count5/5

Six tools is well-scoped for a portfolio-focused server. The count is neither too sparse nor too heavy, and each tool contributes a necessary function for showcasing a GitHub profile and repos.

Completeness5/5

The tool surface fully covers the apparent domain of a GitHub portfolio: listing repos, viewing details, checking languages, profile info, searching, and summarizing tech stack. There are no obvious dead ends or missing operations for the stated purpose.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bdbrown4/github-portfolio-mcp-server'

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