Developer Portfolio MCP Server
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., "@Developer Portfolio MCP ServerShow me your best Python projects"
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.
Developer Portfolio MCP Server
An MCP server that lets recruiters and AI assistants explore your profile, skills, and projects through natural language.
What is this?
This project is a Model Context Protocol (MCP) server — a standardized bridge between AI assistants (Cursor, Claude Desktop, etc.) and your developer portfolio data.
Instead of sending recruiters a static PDF resume, you give them (or their AI tools) a live MCP server they can query interactively:
"What Python projects has this developer built?"
"How well does their stack match this job description?"
"Generate an interview prep brief for a Senior Engineer role."
Why recruiters care: It demonstrates you understand modern AI tooling, can build production integrations, and think about developer experience.
Related MCP server: resume-mcp
Quick Start
1. Clone and install
git clone https://github.com/YOUR_USERNAME/developer-portfolio-mcp.git
cd developer-portfolio-mcp
uv sync --extra dev2. Customize your data
Edit these JSON files with your real information:
File | What to update |
| Name, email, GitHub, LinkedIn, summary |
| Your real projects |
| Your actual skills |
3. Run the server
uv run developer-portfolio-mcp4. Connect to Cursor
Copy the example config and update the path:
cp .cursor/mcp.json.example .cursor/mcp.json
# Edit the absolute path in mcp.json to your project directoryThen in Cursor: Settings → MCP — your server should appear. Try asking:
"Use the developer-portfolio MCP to show me this candidate's top projects."
What's Inside
Tools (6) — Actions the AI can perform
Tool | Description |
| Core profile and availability |
| Portfolio projects (filterable by status) |
| Deep dive on one project |
| Search skills by keyword/category |
| Contact links and scheduling info |
| Match job requirements vs. your skills |
Resources (3) — Read-only data endpoints
URI | Content |
| Full resume in Markdown |
| Skills by category |
| All projects as JSON |
Prompts (3) — Reusable AI templates
Prompt | Use case |
| Generate role-specific interview prep |
| One-page candidate summary |
| Pitch a project to a hiring manager |
Project Structure
developer-portfolio-mcp/
├── src/developer_portfolio_mcp/
│ ├── server.py # MCP server (tools, resources, prompts)
│ ├── loaders.py # Data loading utilities
│ └── data/ # Your portfolio JSON (customize these!)
│ ├── profile.json
│ ├── projects.json
│ └── skills.json
├── tests/ # Unit tests
├── docs/
│ └── LEARNING_GUIDE.md # MCP basics → advanced (start here to learn!)
├── .cursor/mcp.json.example
├── pyproject.toml
└── README.mdRun Tests
uv run pytest -vLearning MCP
New to MCP? Read docs/LEARNING_GUIDE.md — a structured path from basics to advanced concepts, using this project as your hands-on lab.
Topics covered:
What MCP is and why it matters
Tools vs Resources vs Prompts
Transports (stdio, HTTP)
Building your own tools
Deploying for recruiters
Push to GitHub
# After customizing your data:
git add .
git commit -m "Add developer portfolio MCP server"
git remote add origin https://github.com/YOUR_USERNAME/developer-portfolio-mcp.git
git push -u origin mainAdd this to your resume/LinkedIn:
Built an MCP server exposing developer portfolio data to AI assistants — github.com/YOUR_USERNAME/developer-portfolio-mcp
Tech Stack
MCP Python SDK (FastMCP)
Python 3.11+
uv for package management
License
MIT — use freely, customize for your portfolio, and share with recruiters.
Available Tools
6 toolscompare_stackB
Compare a job's required tech stack against the developer's skills.
Args: required_stack: List of technologies from a job description, e.g. ['Python', 'React', 'Docker'].
| Name | Required | Description | Default |
|---|---|---|---|
| required_stack | 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, and the description only states the basic purpose. It does not disclose how the comparison works, what happens with mismatches, or any other behavioral traits, leaving the agent with minimal 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, no unnecessary words, and the core purpose is front-loaded. Every sentence earns its place.
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?
The tool has an output schema, so return values don't need elaboration. However, the description lacks edge cases or context on the output format; it is adequate but minimal.
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%, but the description adds an example and clarifies the parameter as 'list of technologies from a job description,' which provides some meaning beyond the schema's bare type definition.
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 compares a job's required tech stack against the developer's skills, with a specific verb and resource. It is distinct from sibling tools like get_developer_profile or search_skills.
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 provides an example but no explicit guidance on when to use this tool vs alternatives, nor any prerequisites or exclusions. Usage is implied but not clarified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contact_infoA
Get contact links and availability for scheduling interviews.
| 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 provided; description only states 'get' which implies read-only but does not disclose any other behavioral traits like privacy, rate limits, or authentication requirements.
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?
Single sentence, 10 words, front-loaded with key information. No unnecessary text.
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?
Tool is simple with no parameters and has an output schema (not provided but present). Description covers the basic functionality adequately.
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?
Input schema has zero parameters; baseline score of 4 for no params. Description does not add param info but none is needed.
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?
Description clearly states the action (Get), resource (contact info), and purpose (for scheduling interviews). Distinguishes from siblings like get_developer_profile or get_project_details.
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?
Implies usage for scheduling interviews but provides no explicit guidance on when to use vs. alternatives, nor 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.
get_developer_profileA
Get the developer's core profile: name, title, contact, summary, and availability.
| 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?
Since no annotations are provided, the description must convey behavioral traits. It lists return fields but omits aspects like permission requirements, error handling, or caching. For a read-only tool, this is acceptable but lacks depth.
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?
A single sentence that efficiently conveys the tool's purpose and output. No redundancy or filler, earning its place.
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?
Given the presence of an output schema, the description appropriately summarizes key fields without detailing return structure. It is sufficient for a simple tool with no parameters.
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, so schema coverage is 100%. The description adds value by enumerating the returned fields, enhancing understanding beyond the empty schema.
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 retrieves a developer's core profile with specific fields (name, title, contact, summary, availability). The verb 'Get' and the resource 'developer profile' are unambiguous, and the listed fields differentiate it from siblings like get_contact_info.
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 implicitly indicates when to use (when needing core profile data). It doesn't explicitly state when not to use or mention alternatives, but the sibling names provide context. For a simple retrieval tool, this is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_detailsB
Get detailed information about a specific project.
Args: project_id: Project slug, e.g. 'developer-portfolio-mcp'.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | 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 must convey behavioral traits. It implies a read operation but does not confirm idempotency, safety, or mention any authentication or rate limits.
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?
Description is extremely concise: one sentence for purpose and one for parameter. Every word earns its place with no redundancy.
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?
Given the tool is simple (1 param, output schema exists), the description is minimal but lacks usage guidelines and detailed behavioral context. It would not fully equip an agent to decide when to invoke this tool correctly.
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%, but the description adds a helpful example ('e.g. 'developer-portfolio-mcp'') and clarifies that project_id is a slug. However, it does not explain what constitutes a valid slug or how to obtain it, which limits practical guidance.
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?
Description clearly states the action 'Get detailed information' and the resource 'specific project'. Sibling tools like list_projects and compare_stack serve different purposes, so this tool's unique role is evident.
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?
No guidance on when to use this tool versus alternatives (e.g., list_projects for listing all projects) or when not to use it. No prerequisites or context are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsA
List all projects in the developer's portfolio.
Args: status: Optional filter — 'Active', 'Completed', or None for all.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No |
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 transparency burden. It discloses allowed filter values but does not mention read-only nature, sorting, or pagination behavior.
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 with a clear one-sentence purpose and an args section. No waste, but could be slightly more structured.
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?
Given low schema coverage and a single parameter, the description adequately explains the parameter. The output schema exists, so return values need not be described. The tool is simple and covered well.
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%, but the description adds explicit allowed values for the status parameter ('Active', 'Completed', or None), which compensates for the lack of schema-level documentation.
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 lists all projects in the developer's portfolio, with a specific verb and resource. It distinguishes from siblings as no other tool lists projects.
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 provides parameter guidance but lacks explicit guidance on when to use this tool vs alternatives. No exclusions or alternative tools are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_skillsA
Search skills by keyword and optional category.
Args: query: Skill name or keyword to search for (case-insensitive). category: Skill category to search in, or 'all' for every category.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| category | No | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses case-insensitivity for query parameter and default category. However, it omits details about pagination, sorting, rate limits, or error behavior. Adds some behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two-sentence purpose statement followed by clear, concise parameter descriptions. Front-loaded with main action. No redundant information.
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?
Covers input parameters well. Output schema exists (though not shown) so return format is likely covered. Lacks mention of result ordering, limits, or pagination, but sufficient for a straightforward search tool.
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 has 0% description coverage (only titles and types). Description adds meaning: 'Skill name or keyword to search for (case-insensitive)' for query, and 'Skill category to search in, or 'all' for every category' for category. Adds value beyond schema.
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?
Description clearly states 'Search skills by keyword and optional category', defining the action (search), resource (skills), and parameters. Distinct from sibling tools like compare_stack, get_contact_info, etc.
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?
Implies usage (searching skills) but does not provide explicit guidance on when to use versus alternatives or any exclusions. No mention of prerequisites or when not to use.
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.
6 tool updates
v1.0.0- First observed
compare_stack - First observed
get_contact_info - First observed
get_developer_profile - First observed
get_project_details - First observed
list_projects - First observed
search_skills
TDQS
Each tool has a distinct purpose: profile, contact, projects (list and detail), skills search, and stack comparison. No overlapping functionality.
All tool names follow a consistent verb_noun pattern in snake_case, making them predictable and easy to understand.
With 6 tools, the server is well-scoped for a developer portfolio, covering all essential areas without unnecessary bloat.
The tool set covers profile, contact, projects, skills, and stack comparison. Missing a direct list_all_skills tool, but search_skills covers it with a broad query. Minor gap, but overall adequate for a read-only portfolio.
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
An MCP server that integrates with Discord to provide AI-powered features.
Driflyte MCP server which lets AI assistants query topic-specific knowledge from web and GitHub.
An MCP server that gives your AI access to the source code and docs of all public github repos
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceAn MCP server that gives AI assistants (like Cursor, Claude, Windsurf) the ability to remember user information across conversations using vector search technology.-
- FlicenseNot gradedqualityCmaintenanceAn MCP server that provides a structured API for AI agents to query a person's resume, including profile, projects, writing, and gated access to experience and skills.-
- AlicenseNot gradedqualityDmaintenanceThis MCP server enables AI-assisted professional profile generation by connecting to verified employee work data (skills, career history, certifications, projects) from employer HCM systems.MIT
- FlicenseNot gradedqualityDmaintenanceAI-powered MCP server that transforms learning by finding best YouTube tutorials, generating personalized learning paths, and tracking progress for any tech skill.11-
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/minhasaatish/developer-portfolio-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server