Portfolio MCP Server
An MCP server that turns my AI project portfolio into something you can query, not just read.
Point any MCP client (Claude Desktop, Cursor, custom agents) at it and ask "What has Ayush built with LangGraph?" or "What's his flagship project?" — it answers from live structured data, not a static PDF.
Table of contents
- Why this exists
- Demo
- Tools exposed
- Quickstart
- Connect to Claude Desktop
- Stack
- Testing & CI
- Project structure
- Roadmap
- License
- Author
Why this exists
Most AI-developer portfolios are a list of links. This is a working MCP server — the same protocol agentic products use to connect to tools — built around my own portfolio. It's both a real implementation of the spec and an answer to "show me you've actually built with MCP," not just talked about it.
Demo
| MCP Inspector — tool discovery | Live chat demo |
|---|---|
Full video walkthrough (setup → tool calls → live answers): watch here ▶
Tools exposed
| Tool | Description |
|---|---|
list_projects |
Short summary of all 9 projects |
get_project_details(project_name) |
Full details for one project |
search_projects_by_stack(technology) |
Find projects using a given technology |
get_flagship_project |
The single best project to look at first |
get_resume_summary |
Background, target role, and core stack |
Quickstart
git clone https://github.com/ayush-s-tomar/portfolio-mcp-server.git
cd portfolio-mcp-server
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
Test it interactively with the MCP Inspector before wiring it into a client:
mcp dev server.py
This opens a browser UI where you can call each tool manually and inspect raw request/response payloads.
Connect to Claude Desktop
Open your Claude Desktop config file:
| OS | Path |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
If the file already has an mcpServers key with other servers in it, add
the "portfolio" entry inside the existing object rather than overwriting
the file. Use the absolute path to server.py on your machine:
{
"mcpServers": {
"portfolio": {
"command": "python",
"args": ["/absolute/path/to/portfolio-mcp-server/server.py"]
}
}
}
Restart Claude Desktop, then ask it something like:
"What projects has Ayush built with FastAPI?"
Claude will call search_projects_by_stack and answer from the live data.
Stack
- Python 3.10+
- MCP Python SDK (
FastMCP) - stdio transport
Testing & CI
Every push and pull request runs through GitHub Actions:
- Lint —
ruff check . - Type check —
mypy server.py - Smoke test — spins up the server and calls each of the 5 tools over stdio to confirm they return valid, schema-matching JSON
See .github/workflows/ci.yml. Run the same
checks locally before opening a PR:
pip install -r requirements-dev.txt
ruff check .
mypy server.py
pytest
Project structure
portfolio-mcp-server/ ├── server.py # FastMCP server + tool definitions ├── data/ │ └── projects.json # Project data the tools read from ├── tests/ │ └── test_tools.py # Smoke tests for each tool ├── requirements.txt ├── requirements-dev.txt └── .github/workflows/ci.yml
Roadmap
-
search_projects_by_stack— support matching on multiple technologies at once - Add an HTTP/SSE transport option alongside stdio for remote clients
- Publish to the MCP server registry
- Cache resume/project data with a lightweight refresh endpoint instead of static JSON
License
Released under the MIT License.
Author
Ayush Tomar — GitHub
If this was useful as a reference for building your own MCP server, a ⭐ on the repo is appreciated.
mcp-name: io.github.ayush-s-tomar/portfolio-mcp-server
Metadata
Release files for portfolio-mcp-server 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| portfolio_mcp_server-1.0.1.tar.gz | 8.0 MB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| portfolio_mcp_server-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 8.0 MB
Release files / portfolio_mcp_server-1.0.1.tar.gz
| Download URL | portfolio_mcp_server-1.0.1.tar.gz |
|---|---|
| Size | 8.0 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9e20757110994934c5185d0c50faaba401ce31901d22162aa1fd06033dcdef59
|
|
BLAKE2b-256 checksum How to use checksums |
6924f478d315ddff22cbf08f30215cffacb8f0fdbcf136581c0fb9ece177cab9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.5
|
Release files / portfolio_mcp_server-1.0.1-py3-none-any.whl
| Download URL | portfolio_mcp_server-1.0.1-py3-none-any.whl |
|---|---|
| Size | 8.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
45688c940b830e0f642d86ddc90fc8df7110eb43ec81b94645e617c915b16f25
|
|
BLAKE2b-256 checksum How to use checksums |
fc21888163164a84c45304cb4137d39a3a9ffc9ba461b6b6b26cba2fa6cbb156
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.5
|
Security for portfolio-mcp-server 1.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.