Skip to main content
Glama
Bijon2002

Bijon Portfolio MCP Server

by Bijon2002

πŸ”Œ Bijon Portfolio MCP Server

A Node.js & TypeScript-based Model Context Protocol (MCP) server that exposes my resume, portfolio projects, certifications, skills, and live GitHub repositories as tools. This allows AI assistants (like Claude Desktop) to query my professional background, projects, and experiences dynamically using natural language.


πŸš€ Features & Exposed Tools

The server registers the following tools with the MCP client:

  1. getProfile: Exposes core bio, contact information, education history, work/internship experiences, volunteering, and social links.

  2. getProjects: Lists curated portfolio projects (both professional and academic), with support for filtering by specific tech stacks (e.g. React, Laravel, Node.js).

  3. getSkills: Lists structured technical skills categorized by programming languages, frameworks, and developer tools.

  4. getCertificates: Lists professional and academic certifications (e.g., Salesforce AI Associate, Postman Expert, etc.).

  5. getGithubRepos: Performs an authenticated fetch to the GitHub API to return a live list of my active public repositories, showing updated dates, stars, and languages.

  6. askAboutBijon: A free-text search tool allowing natural language Q&A across the entire portfolio dataset (e.g., "What did he do at FAITE?" or "Summarize his research project at SLIIT").


Related MCP server: personal-mcp

πŸ› οΈ Tech Stack

  • Runtime: Node.js (v18+)

  • Language: TypeScript

  • Protocol: @modelcontextprotocol/sdk (Stdio transport)

  • JSON Data Layer: Custom file-based single source of truth for resume info.


πŸ“¦ Getting Started

Prerequisites

  • Node.js installed (LTS recommended)

  • A GitHub Personal Access Token (GITHUB_TOKEN) with read-only public repository access (recommended to avoid API rate limits).

Setup

  1. Clone the repository:

    git clone https://github.com/Bijon2002/Build-Own-MCP.git
    cd Build-Own-MCP
  2. Install dependencies:

    npm install
  3. Configure Environment Variables: Create a .env file in the root directory (or copy from the template):

    GITHUB_TOKEN=your_github_personal_access_token_here
  4. Build the project:

    npm run build

πŸ–₯️ Local Integration (Claude Desktop)

To add this server to your local Claude Desktop client, edit the configuration file:

  1. Open your Claude Desktop config file:

    • On Windows: %APPDATA%\Claude\claude_desktop_config.json

    • On macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  2. Add the following definition under the mcpServers property:

{
  "mcpServers": {
    "bijon-portfolio": {
      "command": "npx",
      "args": [
        "-y",
        "tsx",
        "A:/Build Own MCP/src/server.ts"
      ],
      "env": {
        "GITHUB_TOKEN": "your_github_token_here"
      }
    }
  }
}
  1. Restart Claude Desktop. You will now see the tool icon (πŸ”Œ) with my portfolio tools active!


πŸ“‚ Project Structure

β”œβ”€β”€ data/
β”‚   β”œβ”€β”€ portfolio-data.json   # Bio, education, experience, skills, socials
β”‚   β”œβ”€β”€ projects.json         # Curated projects list
β”‚   └── certificates.json     # Certifications list
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ lib/
β”‚   β”‚   β”œβ”€β”€ github.ts         # Live GitHub API query helper
β”‚   β”‚   └── loadData.ts       # JSON loader helper
β”‚   β”œβ”€β”€ tools/
β”‚   β”‚   β”œβ”€β”€ askAboutBijon.ts  # Free-text Q&A tool
β”‚   β”‚   β”œβ”€β”€ getCertificates.ts
β”‚   β”‚   β”œβ”€β”€ getGithubRepos.ts
β”‚   β”‚   β”œβ”€β”€ getProfile.ts
β”‚   β”‚   β”œβ”€β”€ getProjects.ts
β”‚   β”‚   └── getSkills.ts
β”‚   └── server.ts             # Entry point (MCP server & stdio setup)
β”œβ”€β”€ tsconfig.json
β”œβ”€β”€ package.json
└── README.md

πŸ‘¨β€πŸ’» Author

Marislin Bijosilin (Bijon)

Available Tools

6 tools
askAboutBijonA

A free-text Q&A search tool. Ask questions or search keywords about Bijon's background, projects, work experience, or achievements.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesThe question or search query (e.g. 'tell me about his intern experience at FAITE', 'what are his roles in Rotaract?')

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 must disclose behavioral traits. It states the tool is a 'search tool' but does not mention whether it is read-only (likely), any authentication needs, rate limits, or what happens if no results are found. The return format is unspecified (no output schema). This leaves significant ambiguity about the tool's 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 two sentences long, with the first sentence front-loading the core purpose. Every word is informative, and there is no redundant or irrelevant content. It achieves maximum information density.

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, no nested objects), the description is minimally viable. It explains the purpose and provides query examples. However, the lack of output schema means the agent does not know the return format (e.g., text, list, or structured answer). Additional context about expected output would improve 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?

The schema coverage is 100% with a single 'query' parameter described. The description adds value beyond the schema by providing concrete examples ('tell me about his intern experience at FAITE', 'what are his roles in Rotaract?'), which help the agent craft effective queries. While not exhaustive, this surpasses the baseline expectation for high 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 clearly states the tool is a 'free-text Q&A search tool' for asking questions about Bijon's background, projects, work experience, or achievements. It uses specific verbs ('Ask questions or search keywords') and identifies the resource (Bijon). This distinguishes it from sibling tools like getProfile or getProjects, which are structured retrievers for specific categories.

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 that this tool is for open-ended questions spanning multiple domains, contrasting with sibling tools that fetch specific data. However, it does not explicitly state when to use this vs. alternatives, nor does it provide exclusion criteria (e.g., 'use getProjects for a structured list'). The context is clear but lacks explicit guidance.

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

getCertificatesA

Get the list of professional and academic certifications earned by Bijon, including issuer names and completion dates.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

Since no annotations are provided, the description carries full burden for behavioral transparency. It correctly indicates this is a read operation (returns a list) and specifies the data scope (Bijon's certifications). It does not mention pagination, order, or what happens if no certifications exist, but for a simple, parameterless, single-person list, this is largely sufficient.

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 that is perfectly front-loaded with the action and result. Every word earns its place; no fluff. Ideal for an AI agent to parse quickly.

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 has zero parameters, no output schema, and simple intent, the description is complete. Minor points like whether the list is sorted by date or name are not covered, but the core use case is fully addressed. Sibling tools are clearly distinct in topic.

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

Parameters4/5

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

There are zero parameters and schema description coverage is 100% (since there's nothing to cover). The description adds meaning by explaining what the output list contains (issuer names and completion dates), which the schema cannot convey. This exceeds the baseline expectation for a parameterless 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 the verb ('Get'), the resource ('list of certifications'), and the specific scope ('earned by Bijon'). It also mentions what information is returned ('issuer names and completion dates'), distinguishing it from sibling tools like getSkills or getProjects.

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 for retrieving Bijon's certifications, but does not explicitly specify when to use this vs. alternatives like getSkills or getProfile. No discussion of when not to use it or prerequisites is provided.

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

getGithubReposA

Fetches dynamic, live repository list of Bijon from GitHub, displaying updated repositories, languages, description, and stats.

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 must carry the full burden. It says 'dynamic, live' suggesting real-time data and lists the displayed fields. However, it does not disclose whether authentication is required, rate limits, or data freshness guarantees. It provides moderate transparency for a simple read 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 a single 17-word sentence that immediately conveys the action and key outputs. It is tightly written with no filler or repetition, and it front-loads the 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 tool with no parameters and no output schema, the description is fairly complete: it states the source (GitHub), the owner (Bijon), and the data included (repos, languages, description, stats). It could be improved by explicitly stating that it returns a list, but the current text covers the essentials.

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

Parameters4/5

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

There are zero parameters, and the schema coverage is trivially 100%. The description does not add parameter info since none exist, so the baseline of 4 is appropriate. No additional semantics are needed.

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

Purpose5/5

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

The description clearly states the verb 'fetches' and the specific resource 'dynamic, live repository list of Bijon from GitHub'. It lists what is displayed (repositories, languages, description, stats), which distinguishes it from siblings that ask about Bijon, get profile, projects, skills, or certificates.

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?

No explicit guidance on when to use this tool versus alternatives. The name and description imply it's for GitHub repos, but there is no mention of when not to use it or scenarios where a sibling would be more appropriate. This is an adequate but not strong score given the sibling list.

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

getProfileC

Get Marislin Bijosilin (Bijon)'s core profile details, including summary, contact information, education history, work experiences, and social links.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description must fully disclose behavioral traits. It does not mention any data freshness, access restrictions, rate limits, or that it returns a static snapshot. The description only lists contents, leaving the agent unaware of potential pitfalls.

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 a single sentence, concise and front-loaded with the purpose. It lists the major fields without excessive detail. It could drop 'core' or rephrase for slightly better clarity, but overall it is efficient.

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 zero parameters, no output schema, and low complexity (a single profile fetch), the description is minimally adequate. It tells the agent what fields are returned but omits any behavioral context. With siblings providing alternative views, a note on when to use this tool would improve completeness.

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 input schema has no parameters and 100% coverage. Since there are no parameters to explain, the baseline is 3. The description adds no extra semantics for parameters but does not need to.

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 clearly states what the tool does ('Get Marislin Bijosilin (Bijon)'s core profile details') and lists the included sections (summary, contact info, education, work, social links). It distinguishes itself from siblings like getSkills or getProjects by specifying which parts of the profile are covered.

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 siblings such as getProjects or askAboutBijon. The description does not indicate when this tool is appropriate (e.g., for an overview) or when a more specific sibling might be better.

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

getProjectsA

List Bijon's curated portfolio projects, optionally filtered by a tech stack keyword (e.g. React, Laravel, PHP, Python, Deep Learning).

ParametersJSON Schema
NameRequiredDescriptionDefault
techNoTechnology keyword to filter by (case-insensitive, e.g. 'React', 'Laravel')

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 full burden for behavioral traits. It indicates a read operation ('List') and a filtering capability, but lacks details on limits, pagination, data freshness, or authorization requirements. The disclosure is adequate for a simple list tool but not comprehensive.

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 with no unnecessary words. The most important information ('List Bijon's curated portfolio projects') is front-loaded, and the filtering detail is added concisely.

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 low complexity (one optional parameter, no output schema), the description covers the main action and filter. However, since no output schema exists, describing the return value (e.g., list of project names and details) would improve completeness for an agent.

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 100%β€”the schema already describes the 'tech' parameter. The tool description adds value by providing concrete examples (e.g., 'React, Laravel') and clarifying the context ('Bijon's curated portfolio'), which goes beyond the schema's description.

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

Purpose5/5

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

The description clearly states the verb 'List' and the resource 'Bijon's curated portfolio projects', making the tool's purpose immediately obvious. It distinguishes from siblings like getProfile and getSkills by specifying 'projects' and the 'curated portfolio' context.

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 when to use (listing projects) and mentions optional filtering, providing clear context. However, it does not explicitly state when not to use this tool or suggest alternative sibling tools for different needs.

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

getSkillsA

List Bijon's structured technical skills categorized by programming languages, frameworks/libraries, and tools/other technologies.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

Since no annotations are provided, the description carries the full burden of behavioral disclosure. It clearly indicates the tool is read-only by using 'List' and describes the output structure (categorized skills). It does not contradict any annotations (none present), and provides sufficient context for agent decision-making.

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 that is front-loaded with the verb and resource. Every word provides value: it states the action, the owner (Bijon), the data type (structured technical skills), and the categorization scheme. No waste.

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 that there are no parameters, no output schema, and simple read-only intent, the description is fully complete. It explains what the tool returns and how the data is organized, which is sufficient for a straightforward list operation.

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 100% and there are no parameters, so the baseline is 4. The description adds no parameter-specific detail beyond the schema, but since the schema already fully documents the parameterless signature, this 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 a specific verb 'List' and identifies the resource 'Bijon's structured technical skills' with clear categorization (programming languages, frameworks/libraries, tools/other technologies). It also distinguishes itself from siblings like getProjects and getCertificates by specifying the nature of the data (structured skills) and its categorization.

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 its usage context: when an agent needs to retrieve structured technical skills for Bijon. However, it does not explicitly state when to use this tool versus alternatives like askAboutBijon or getProfile, nor does it provide any exclusions or 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.

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 observedaskAboutBijon
    • First observedgetCertificates
    • First observedgetGithubRepos
    • First observedgetProfile
    • First observedgetProjects
    • First observedgetSkills

TDQS

A3.9/5.0
Disambiguation5/5

Each tool targets a distinct resource: profile, projects, skills, certificates, GitHub repos, and a free-text Q&A search. The Q&A tool is clearly a query interface, separate from the structured getters, so there is no overlap or ambiguity.

Naming Consistency4/5

Five of six tools follow the getX pattern (getProfile, getProjects, getSkills, getCertificates, getGithubRepos). The exception is askAboutBijon, which uses a different verb, but it is still descriptive and the pattern is otherwise highly consistent.

Tool Count5/5

Six tools is a well-scoped number for a portfolio server. Each tool covers a major aspect of the portfolio (profile, projects, skills, certifications, GitHub repos, and general queries), and there is no bloat or redundancy.

Completeness5/5

The tool set comprehensively covers the domain of a personal portfolio. It provides structured access to all major sections (profile, projects, skills, certificates, live GitHub repos) plus a flexible Q&A tool for anything not explicitly covered. No obvious gaps exist for a read-only portfolio use case.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Exposes Aniket Charjan's resume as a queryable API for AI assistants, implementing MCP tools, resources, and prompts for detailed resume queries.
    11
    88
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Exposes personal portfolio data as tools for Claude to answer questions about the developer, including profile, skills, experience, projects, and contact information.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Exposes a structured professional resume as a set of AI-queryable tools, enabling AI clients like Claude Desktop to query summary, experience, skills, projects, and tailor resumes to job descriptions.
    1
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Exposes a personal portfolio of projects, skills, and resume as callable tools for MCP-compatible AI assistants like Claude Desktop.
    4
    MIT

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/Bijon2002/Build-Own-MCP'

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