PortfolioMCP
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., "@PortfolioMCPWhat are your most relevant projects for a senior backend role?"
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.
PortfolioMCP
A publicly deployable, MCP-powered portfolio: a recruiter or visitor can chat with a candidate's portfolio and get grounded, factual answers about skills, projects, experience and role fit — backed by a real Model Context Protocol (MCP) server, not a hardcoded FAQ.
Documentation
This README covers setup and a high-level overview. For depth:
docs/MCP.md — the MCP tools/resources/prompts this project exposes, why each exists, the exact request flow from a chat question to a grounded answer, and how to extend it.
docs/DEPLOYMENT.md — how to deploy the frontend and backend on free hosting tiers, and why they need different kinds of hosts.
Related MCP server: candidate-mcp-server
Status
Weekend build, in progress.
Repository scaffold (server / client / data / api / frontend)
Portfolio JSON (
data/portfolio.json) filled with real candidate dataMCP server with tools, resources and prompts (
server/portfolio_server.py)MCP client that discovers and exercises the server (
client/portfolio_client.py)Gemini-backed chat loop over the MCP tools (
api/chat_server.py), verified against a real keyNext.js portfolio + chat UI (
frontend/)Initial failure-case testing (unknown project, hallucination fix — see docs/MCP.md)
More failure-case coverage (ambiguous questions, empty search)
Public deployment (see docs/DEPLOYMENT.md for the plan)
Architecture
Next.js Portfolio + Chat UI --> FastAPI Chat Service --> Python MCP Client --> Python MCP Server --> data/portfolio.json
| ^
`---------------------- Gemini (tool-calling) ------'The MCP server (server/portfolio_server.py) exposes:
Tools (actions/queries):
get_skills,get_projects,get_experience,search_profileResources (stable read-only context):
portfolio://profile,portfolio://skills,portfolio://experience,portfolio://projectsPrompts (reusable interaction patterns):
recruiter_summary,technical_profile,project_summary— discoverable and demonstrated by the standalone client; see docs/MCP.md for their current status relative to the live chat
api/chat_server.py is a FastAPI service that keeps one persistent MCP client
session open and:
serves
GET /api/portfoliofor the Next.js landing page by reading theportfolio://resources (no duplicated data file for the frontend),serves
POST /api/chat, which runs a bounded loop letting Gemini decide which MCP tool(s) to call, executes them against the live MCP session, and returns a grounded answer plus a log of which tools were used.
The LLM provider is isolated behind server/model_adapter.py (a small
ModelAdapter interface) so swapping Gemini for another provider later means
writing one new adapter class, not touching the chat loop.
Repository layout
PortfolioMCP/
├── data/
│ └── portfolio.json # single source of truth for candidate data
├── server/
│ ├── portfolio_data.py # loads the JSON data
│ ├── portfolio_server.py # FastMCP server: tools, resources, prompts
│ ├── model_adapter.py # provider-agnostic LLM interface
│ └── gemini_adapter.py # Gemini function-calling implementation
├── client/
│ └── portfolio_client.py # standalone MCP client for local testing
├── api/
│ └── chat_server.py # FastAPI service: /api/portfolio, /api/chat
└── frontend/ # Next.js portfolio + chat UILocal setup
Backend (MCP server + chat API)
Create and activate a virtual environment, then install dependencies:
python -m venv .venv .venv\Scripts\activate # Windows pip install -r requirements.txtCopy
.env.exampleto.envand add a free Google AI Studio API key:copy .env.example .env(Optional) Verify the MCP core on its own — spawns the server over stdio, discovers its tools/resources/prompts, and exercises a few of each:
python client/portfolio_client.pyStart the chat API (keeps one MCP session alive for the process lifetime):
uvicorn api.chat_server:app --reload --port 8000GET http://localhost:8000/api/healthshould list the four tools.
Frontend (Next.js)
Copy
frontend/.env.local.exampletofrontend/.env.local(defaults tohttp://localhost:8000for the backend).Install and run:
cd frontend npm install npm run devOpen
http://localhost:3000— the portfolio page and chat widget should both load from the running backend.
What this project deliberately does not include
No NestJS backend, no database or vector store, no RAG/embeddings, no multi-agent system, no automatic social posting, no complex auth, and no sprawling tool surface — the goal is a small, explainable MCP demonstration, not production infrastructure.
Sample questions the chat should be able to answer
"What frontend frameworks does this candidate know?"
"Tell me about the Merchant Portal project."
"Why would this candidate be a good fit for a React role?"
"Has this candidate worked with Kubernetes in production?" (should say "not found in the data" rather than guessing, since Kubernetes only appears as a certification topic, not production experience)
This server cannot be installed
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
Query professional profiles, search candidates, and get AI-powered summaries and job fit analysis.
AI resume triage for recruiters. Query your candidate pool from Claude or ChatGPT.
Read-only candidate intelligence — hiring questions answered from real interview transcripts.
Talent discovery for AI. Search and read agent-readable candidate profiles; cite by URL.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables natural language querying of a resume with AI/ML experience, business impact metrics, and technical skills. Supports searching by company, skill, or achievement with built-in analytics and evaluation capabilities.
- AlicenseNot gradedqualityDmaintenanceEnables LLMs to access candidate information including resume, LinkedIn, GitHub, and contact via email.3281MIT
- AlicenseAqualityCmaintenanceEnables searching and retrieving portfolio data including experience, skills, and contact information through natural language queries.5MIT
- FlicenseNot gradedqualityCmaintenanceEnables recruiters to query a person's career, projects, and impact using natural language, acting as a living resume.
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/vishwakanth183/MCP_PORTFOLIO'
If you have feedback or need assistance with the MCP directory API, please join our Discord server