github-portfolio-mcp
Allows listing, searching, and fetching READMEs of GitHub repositories via the GitHub API.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@github-portfolio-mcplist my GitHub portfolio repositories"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
github-portfolio-mcp
GitHub 포트폴리오 레포를 검색하고 조회하는 토이 MCP 서버입니다.
📋 개요
우아한형제들 기술 블로그의 MCP 해커톤 후기를 참고해 MCP의 개념 및 구조를 학습하고,
이를 참고하여 GitHub API를 연동한 MCP 서버를 구현하고 Claude Desktop에 연결해본 토이 프로젝트입니다.
Related MCP server: Portfolio MCP Server
🛠️ 기능
Claude Desktop에 연결하면 자연어로 GitHub 포트폴리오를 조회할 수 있습니다.
list_repos — 전체 공개 레포 목록과 설명을 가져온다
search_repos — 키워드로 레포 이름/설명을 검색한다
get_readme — 특정 레포의 README 내용을 가져온다 (최대 3000자)
💡 배운 점
MCP SDK v1 → v2 마이그레이션: 개발 중 SDK가 v2로 업데이트되면서
FastMCP클래스가MCPServer로 이름이 바뀜 (mcp.server.fastmcp→mcp.server.mcpserver). 공식 마이그레이션 가이드를 참고해 import 경로만 수정해서 해결. 데코레이터(@mcp.tool())나 나머지 로직은 그대로 유지됨.tool의 description이 곧 사용성: LLM은 함수의 docstring만 보고 언제/어떻게 호출할지 스스로 판단하기 때문에, 이 설명을 얼마나 명확히 쓰느냐가 tool의 실사용성을 좌우한다.
시스템 Python 격리: macOS 기본 Python(3.9.6)을 건드리지 않고
uv로 프로젝트별 Python 버전(3.12)을 관리하는 방식으로 진행.
⚠️ 한계
search_repos는 이름/설명에 대한 단순 부분 문자열 매칭이라, README 본문 검색이나 유사어 검색은 불가능합니다 (예: "RAG"로 검색해도 이름에 "RAG"가 없으면 못 찾음).get_readme는 3000자 이후 내용이 잘립니다.GitHub 공개 레포만 조회 가능합니다. (private 레포 미지원).
🖥️ 실행 예시
Claude Desktop에서 자연어로 질문하면 실제 GitHub API를 호출해서 답합니다.

Available Tools
3 toolsget_readmeA
특정 레포의 README 내용을 가져옵니다.
Args:
repo_name: 정확한 레포 이름 (예: "MIMIC-IV-ICU-LOS")
| Name | Required | Description | Default |
|---|---|---|---|
| repo_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It adds the useful constraint that repo_name must be exact and provides an example, but it does not disclose error behavior, access requirements, or any edge cases. This is minimal but acceptable for a simple read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short, front-loaded with the core purpose, and includes a compact parameter explanation. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with an output schema, the description is adequate but not fully complete. It lacks sibling-routing guidance and behavioral caveats, though these are less critical given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 explains that repo_name means the exact repository name and gives a concrete example, adding value beyond the schema's plain string type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: fetching the README content of a specific repository. This clearly distinguishes the tool from the sibling search_repos and list_repos tools, which operate on repo discovery/listing rather than README retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool instead of search_repos or list_repos, and does not mention any prerequisites or exclusions. An agent must infer that this is for retrieving READMEs from already-known repositories.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_reposA
내 GitHub 계정의 모든 공개 레포 목록을 이름과 설명과 함께 가져옵니다.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It does disclose the operational scope (only public repos), the resource owner (the GitHub account), and the returned content (names and descriptions). However, it does not mention authentication requirements, pagination, rate limits, or ordering, which are relevant for a listing endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no filler or redundant information. It front-loads the action and resource, making it easy for an agent to understand the tool quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless list tool with an output schema and simple sibling context, the description is largely complete. It states the scope, subject, and included fields. It could slightly improve by noting that this is a read-only operation and whether the public-repo scope is the only intended use case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema description coverage is 100%, so there are no parameters to document. The description adds meaningful context about what the result will include, which is sufficient for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('가져옵니다' fetches) and a specific resource: all public repositories in the user's GitHub account, with names and descriptions. This clearly differentiates the tool from siblings like search_repos, which searches across repositories rather than listing the account's own public repos.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for listing the authenticated user's public repositories, but it does not explicitly state when to prefer this over search_repos or get_readme. There is no exclusionary guidance or mention of alternatives, so usage context is only implied rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_reposA
키워드로 내 레포 이름과 설명을 검색합니다.
Args:
keyword: 검색할 키워드 (예: "RAG", "텍스트마이닝")
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the behavior (searching and returning matching repos) and indicates a read-only action. However, it does not mention potential side effects, return format, or error cases, though these are not critical for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and focused, containing only the essential information: the tool's purpose and the parameter definition. No unnecessary words or redundant details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple search tool, the description provides sufficient context: it specifies what is searched (repo names and descriptions) and what the keyword is. No additional context needed for correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explicitly defines the 'keyword' parameter as the search term, which adds meaning beyond the bare schema type. Since the parameter coverage is 100% and the description enriches it, a score above baseline is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: searching repository names and descriptions by keyword. It is specific and distinct from sibling tools (list_repos lists all repos, get_readme fetches a specific repo's readme).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly mention when to use this tool versus alternatives like list_repos or get_readme. The intent is implied but not stated, leaving some ambiguity for the agent.
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.
3 tool updates
v0.1.0- First observed
get_readme - First observed
list_repos - First observed
search_repos
TDQS
Scored across 3 tools
Each tool has a distinct purpose, but search_repos and list_repos both return repository names and descriptions, with the only difference being keyword filtering. This overlap is manageable but could cause minor selection confusion.
All tool names follow a consistent verb_noun pattern with snake_case: search_repos, get_readme, list_repos. The naming convention is uniform and predictable.
With only 3 tools, the set is tightly scoped to a portfolio viewing purpose. Each tool is essential and there is no clutter or redundancy.
For a read-only portfolio server, the tools cover the core workflows: listing all repositories, searching by keyword, and retrieving a README. No critical operations are missing given the stated purpose.
Maintenance
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
Ask any GitHub repository a question. Get source-backed answers.
Code intelligence for LLMs. Analyze, search, and retrieve code from any public git repository.
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
A cited wiki of your GitHub repo: search, read pages, find symbols and ask, with line citations.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables natural language search and querying of your GitHub starred repositories.13113Apache 2.0
- AlicenseAqualityCmaintenanceEnables searching and retrieving portfolio data including experience, skills, and contact information through natural language queries.5MIT
- AlicenseBqualityCmaintenanceEnables querying GitHub repos and stats, and managing DEV.to articles (list, create, update) through natural language.7MIT
- FlicenseAqualityDmaintenanceEnables natural-language queries about public GitHub repositories, including issues, pull requests, repo metadata, and READMEs, via the GitHub API.5-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/Hoseong21/github-portfolio-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server