Skip to main content
Glama
Portfolio MCP Server

Portfolio MCP Server

πŸ—‚οΈ Portfolio MCP Server

Ask an AI about my work. It answers from real data, not a PDF.

An MCP server that makes my AI project portfolio queryable. Connect it to Claude, Cursor, or any MCP client and just ask.

PyPI CI Python 3.10+ MCP License: MIT Code style: ruff PRs Welcome

Quickstart Β· Tools Β· Demo Β· Connect a client Β· Limitations Β· Roadmap

⚑ Quickstart

The server command (clients launch it for you; run by hand, it just waits silently for a client):

uvx --with "mcp<2" portfolio-mcp-server

Add it to Claude Code with one line:

claude mcp add --scope user portfolio -- uvx --with "mcp<2" portfolio-mcp-server

Then ask:

"What has Ayush built with LangGraph?"

Prefer pip? pip install portfolio-mcp-server

Related MCP server: toad-mcp-server

πŸ’‘ Why this exists

Most AI-developer portfolios are a list of links. This is a working MCP server built around my own portfolio, using the same protocol agentic products use to connect to tools. It is a real implementation of the spec and a direct answer to "show me you've actually built with MCP."

πŸ“¦ Published

Live on PyPI and the official MCP registry

πŸ”§ 5 tools

List, detail lookup, stack search, flagship pick, resume summary

βœ… Tested

Lint, type-check, and a stdio smoke test on every push

🧰 Tools

Tool

What it does

Try asking

list_projects

Summary of every project in the dataset

"List everything Ayush has built."

get_project_details(project_name)

Full details for one project

"Tell me about his RAG chatbot."

search_projects_by_stack(technology)

Projects using a given technology

"Which projects use FastAPI?"

get_flagship_project

The best project to look at first

"What should I look at first?"

get_resume_summary

Background, target role, core stack

"Summarize his background."

🧠 How it works

MCP client (Claude, Cursor, agents)  <--stdio-->  portfolio-mcp-server (FastMCP)  -->  bundled project data

The client launches the server as a local process and talks to it over stdio. The server answers each tool call from its bundled project data. Nothing is hosted, and no API keys are needed.

🎬 Demo

MCP Inspector: tool discovery

Live chat demo

MCP Inspector Demo

MCP Chat Demo

https://github.com/user-attachments/assets/4c1b844a-087f-48a6-b156-bdef27282acc

Setup β†’ tool calls β†’ live answers, end to end.

πŸ”Œ Connect a client

claude mcp add --scope user portfolio -- uvx --with "mcp<2" portfolio-mcp-server

Open your 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, add "portfolio" inside it instead of overwriting the file.

Installed with pip:

{
  "mcpServers": {
    "portfolio": {
      "command": "portfolio-mcp-server"
    }
  }
}

Running from a cloned checkout (use the absolute path to server.py):

{
  "mcpServers": {
    "portfolio": {
      "command": "python",
      "args": ["/absolute/path/to/portfolio-mcp-server/server.py"]
    }
  }
}

Restart Claude Desktop and ask: "What projects has Ayush built with FastAPI?"

Any MCP client that can launch a stdio server works. Use portfolio-mcp-server (after pip install) or the uvx command above as the server command.

πŸ› οΈ Development

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:

mcp dev server.py

This opens a browser UI where you can call each tool and inspect raw request and response payloads.

Every push and pull request runs through GitHub Actions:

Check

Command

Lint

ruff check .

Type check

mypy server.py

Smoke test

Starts the server and calls all 5 tools over stdio, confirming each returns valid, schema-matching JSON

Run the same checks locally before opening a PR:

pip install -r requirements-dev.txt
ruff check .
mypy server.py
pytest

See .github/workflows/ci.yml.

portfolio-mcp-server/
|-- portfolio_mcp_server/
|   |-- __init__.py
|   `-- server.py          # packaged module (what PyPI ships)
|-- server.py              # top-level entry point (dev / MCP Inspector / CI)
|-- tests/
|   |-- smoke_test.py      # stdio smoke test: calls all 5 tools, validates JSON schema
|   |-- test_tools.py      # per-tool tests
|   |-- test_data.py       # data integrity checks for the bundled projects
|   `-- check_links.py     # checks every URL in the data (runs weekly in CI)
|-- assets/                # demo GIF and screenshots
|-- .github/
|   |-- workflows/         # ci.yml, links.yml
|   |-- ISSUE_TEMPLATE/
|   |-- PULL_REQUEST_TEMPLATE.md
|   `-- dependabot.yml
|-- pyproject.toml         # PyPI packaging config
|-- server.json            # MCP registry manifest
|-- requirements.txt
|-- requirements-dev.txt
|-- claude_desktop_config_snippet.json
|-- CHANGELOG.md
|-- CONTRIBUTING.md
|-- SECURITY.md
`-- LICENSE

Built with: Python 3.10+ Β· MCP Python SDK (FastMCP) Β· stdio transport Β· registered on the MCP registry as io.github.ayush-s-tomar/portfolio-mcp-server

⚠️ Known limitations

Warning: The installed package is a snapshot. pip install gets the portfolio as it was at that release (v1.0.4, published 2026-10-27, at the time of writing). Projects added and demo links changed since then won't appear until a new version is published, and tool responses can't yet say how current they are.

  • Static project data. Tools read from bundled data, so updating a project means editing it and republishing. There is no live sync with the GitHub repos or portfolio site yet.

  • stdio only. It works for local clients that can spawn the process, such as Claude Desktop, but there is no HTTP/SSE option yet for remote clients.

  • One technology per search. search_projects_by_stack filters on a single technology per call, so "LangGraph and FastAPI together" isn't supported yet.

πŸ—ΊοΈ Roadmap

Done

  • Publish to PyPI as an installable package

  • Publish to the official MCP server registry

  • Refresh the bundled project data (v1.0.2)

  • Weekly CI link check of every URL in the bundled data

Next

  • Fetch project data from the portfolio site at startup, with the bundled snapshot as an offline fallback (one source of truth instead of two copies that drift apart)

  • Return a last_updated date from every tool so an answer can say how current it is

  • Support matching multiple technologies at once in search_projects_by_stack

  • Add an HTTP/SSE transport option alongside stdio for remote clients

🌐 Also listed on

πŸ“„ License

Released under the MIT License.


Built by Ayush Singh Tomar

GitHub Β· LinkedIn Β· Portfolio

If this helped you build your own MCP server, a ⭐ on the repo is appreciated.

mcp-name: io.github.ayush-s-tomar/portfolio-mcp-server

Available Tools

5 tools
get_flagship_projectB

Get Ayush's flagship/best project β€” the one to look at first for a quick sense of his skill level.

Inputs: no named parameters.

get_project_detailsA

Get full details for a single project by name (case-insensitive, partial match allowed, e.g. 'sales' matches 'SalesAgent').

Returns description, full stack, GitHub repo, live demo link, and writeup link if one exists.

Inputs: project_name (required).

get_resume_summaryA

Get a summary of Ayush's background: education, target role, core tech stack, and career highlights.

Inputs: no named parameters.

list_projectsA

List all projects in Ayush's portfolio with a short summary of each.

Returns a compact list (name, one-line description, stack) β€” use get_project_details for the full description, GitHub link, and demo URL.

Inputs: no named parameters. Returns: result

search_projects_by_stackA

Find all projects that use a given technology or tool, e.g. 'LangGraph', 'Groq', 'FastAPI', 'React'. Case-insensitive, partial match.

Useful for answering "does Ayush have experience with X?"

Inputs: technology (required). Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.2/5.0

    Scored across 5 tools

    Disambiguation5/5

    Each tool has a clearly distinct purpose: listing projects, getting details, searching by stack, retrieving the flagship project, and summarizing resume background. No two tools appear to overlap in ways that would cause misselection.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern using list_, get_, or search_ prefixes. The naming is predictable and makes the toolset easy to navigate.

    Tool Count5/5

    Five tools is well-scoped for a portfolio server. Each tool covers a meaningful query a user or agent would need, without unnecessary redundancy or bloat.

    Completeness5/5

    The toolset covers the full read-only portfolio domain: browsing projects, retrieving full details, filtering by technology, identifying the best project, and accessing background information. There are no obvious dead ends or missing critical operations.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers