# Portfolio MCP Server
A dual-stack Model Context Protocol (MCP) server for Srikanth Karthikeyan's portfolio data, available in both Node.js and Python implementations with containerized deployment options.
## Features
The server provides the following tools:
### 🔍 `search_portfolio`
Search through portfolio data by keywords, category, or content.
**Parameters:**
- `query` (required): Search query to find relevant information
- `category` (optional): Filter by specific category
- `limit` (optional): Maximum results to return (default: 10)
### 📂 `get_portfolio_categories`
Get all available categories in the portfolio data.
### 🎯 `get_portfolio_item`
Get a specific portfolio item by ID.
**Parameters:**
- `id` (required): The ID of the portfolio item
### 📞 `get_contact_info`
Get all contact information.
### 💻 `get_tech_stack`
Get detailed information about technical skills and tools.
**Parameters:**
- `type` (optional): Filter by specific tech type
## 🚀 Installation & Deployment
### Package Registries
#### Node.js Packages (Both Registries)
```bash
# From npmjs.com (public)
npm install srikanth-mcp-portfolio-server
# From GitHub Packages
npm install @srikanthkarthi/srikanth-mcp-portfolio-server
```
#### Python Package
```bash
# From PyPI (public)
pip install srikanth-mcp-portfolio
```
### Docker Deployment (Multiple Registries)
#### From Docker Hub (Public)
```bash
# Node.js version
docker run -it srikanthkarthi/mcp-portfolio-server:nodejs-latest
# Python version
docker run -it srikanthkarthi/mcp-portfolio-server:python-latest
# Multi-runtime version
docker run -it srikanthkarthi/mcp-portfolio-server:multi-latest
```
#### From GitHub Container Registry
```bash
# Node.js version
docker run -it ghcr.io/srikanthkarthi/mcp-portfolio-server:nodejs-latest
# Python version
docker run -it ghcr.io/srikanthkarthi/mcp-portfolio-server:python-latest
# Multi-runtime version
docker run -it ghcr.io/srikanthkarthi/mcp-portfolio-server:multi-latest
```
#### Using Docker Compose (Local Development)
```bash
# Choose one:
docker compose up mcp-portfolio-nodejs # Node.js only
docker compose up mcp-portfolio-python # Python only
docker compose up mcp-portfolio-multi # Both runtimes
```
### Development Setup
#### Node.js Development
```bash
npm install
npm run dev
```
#### Python Development
```bash
pip install -e .
python -m mcp_portfolio_server.server
```
## 🔧 Claude Desktop Integration
### Using Docker Hub (Public)
```json
{
"mcpServers": {
"portfolio": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"srikanthkarthi/mcp-portfolio-server:latest"
]
}
}
}
```
### Using GitHub Container Registry
```json
{
"mcpServers": {
"portfolio": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"ghcr.io/srikanthkarthi/mcp-portfolio-server:latest"
]
}
}
}
```
### Using npm Package (Public Registry)
```json
{
"mcpServers": {
"portfolio": {
"command": "npx",
"args": ["srikanth-mcp-portfolio-server"]
}
}
}
```
### Using npm Package from GitHub Packages
```json
{
"mcpServers": {
"portfolio": {
"command": "npx",
"args": ["@srikanthkarthi/srikanth-mcp-portfolio-server"]
}
}
}
```
### Using Python Package
```json
{
"mcpServers": {
"portfolio": {
"command": "python",
"args": ["-m", "mcp_portfolio_server.server"]
}
}
}
```
### Development Mode
```json
{
"mcpServers": {
"portfolio": {
"command": "node",
"args": ["/path/to/mcp-portfolio/src/index.js"],
"cwd": "/path/to/mcp-portfolio"
}
}
}
```
## 📦 Automated Building & Publishing
### GitHub Actions Workflows
The repository includes automated CI/CD workflows:
- **Triggers**: Git tags (`v*`) or manual workflow dispatch
- **Builds**: Multi-architecture Docker images (AMD64/ARM64)
- **Publishes**:
- Node.js package to GitHub Packages
- Python package to PyPI
- Docker images to GitHub Container Registry
### Manual Building
#### Docker Build Commands
```bash
# Build Node.js image
docker build --target nodejs -t mcp-portfolio:nodejs .
# Build Python image
docker build --target python -t mcp-portfolio:python .
# Build multi-runtime image
docker build --target multi -t mcp-portfolio:multi .
```
### Configuration Options
| Environment Variable | Description | Default |
|---------------------|-------------|---------|
| `NODE_ENV` | Node.js environment | `production` |
| `PYTHONUNBUFFERED` | Python output buffering | `1` |
| `DATA_PATH` | Portfolio data file path | `/app/sample-data.json` |
Switch between Node.js and Python in multi-runtime container:
```yaml
# In docker-compose.yml, uncomment to use Python:
command: ["python3", "-m", "mcp_portfolio_server.server"]
```
## Data Categories
The server provides access to the following portfolio categories:
- **Profile Summary**: Overview and introduction
- **Current Position**: Job title, company, duration
- **Current Work**: Responsibilities and projects
- **Experience**: Work history and achievements
- **Education**: Academic background
- **Tech Stack**: Programming languages, frameworks, tools
- **Certifications**: Professional certifications
- **Volunteerism**: Community service and activities
- **Contact**: Social media and professional links
- **Languages**: Language proficiency
## Example Queries
- Search for cloud experience: `search_portfolio("cloud", "Experience")`
- Get all tech stack info: `get_tech_stack()`
- Find contact information: `get_contact_info()`
- Search for certifications: `search_portfolio("aws certification")`
## License
MIT
Raw data
{
"_id": null,
"home_page": null,
"name": "srikanth-mcp-portfolio",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "data, mcp, portfolio, server",
"author": null,
"author_email": "Srikanth Karthikeyan <srikanthkarthi2003@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/46/d1/3329889ef97c52371bb64da85f0a6b063547d0b574f9c435894aa0a9428c/srikanth_mcp_portfolio-1.0.3.tar.gz",
"platform": null,
"description": "# Portfolio MCP Server\n\nA dual-stack Model Context Protocol (MCP) server for Srikanth Karthikeyan's portfolio data, available in both Node.js and Python implementations with containerized deployment options.\n\n## Features\n\nThe server provides the following tools:\n\n### \ud83d\udd0d `search_portfolio`\nSearch through portfolio data by keywords, category, or content.\n\n**Parameters:**\n- `query` (required): Search query to find relevant information\n- `category` (optional): Filter by specific category\n- `limit` (optional): Maximum results to return (default: 10)\n\n### \ud83d\udcc2 `get_portfolio_categories`\nGet all available categories in the portfolio data.\n\n### \ud83c\udfaf `get_portfolio_item`\nGet a specific portfolio item by ID.\n\n**Parameters:**\n- `id` (required): The ID of the portfolio item\n\n### \ud83d\udcde `get_contact_info`\nGet all contact information.\n\n### \ud83d\udcbb `get_tech_stack`\nGet detailed information about technical skills and tools.\n\n**Parameters:**\n- `type` (optional): Filter by specific tech type\n\n## \ud83d\ude80 Installation & Deployment\n\n### Package Registries\n\n#### Node.js Packages (Both Registries)\n```bash\n# From npmjs.com (public)\nnpm install srikanth-mcp-portfolio-server\n\n# From GitHub Packages \nnpm install @srikanthkarthi/srikanth-mcp-portfolio-server\n```\n\n#### Python Package\n```bash\n# From PyPI (public)\npip install srikanth-mcp-portfolio\n```\n\n### Docker Deployment (Multiple Registries)\n\n#### From Docker Hub (Public)\n```bash\n# Node.js version\ndocker run -it srikanthkarthi/mcp-portfolio-server:nodejs-latest\n\n# Python version \ndocker run -it srikanthkarthi/mcp-portfolio-server:python-latest\n\n# Multi-runtime version\ndocker run -it srikanthkarthi/mcp-portfolio-server:multi-latest\n```\n\n#### From GitHub Container Registry\n```bash\n# Node.js version\ndocker run -it ghcr.io/srikanthkarthi/mcp-portfolio-server:nodejs-latest\n\n# Python version\ndocker run -it ghcr.io/srikanthkarthi/mcp-portfolio-server:python-latest\n\n# Multi-runtime version\ndocker run -it ghcr.io/srikanthkarthi/mcp-portfolio-server:multi-latest\n```\n\n#### Using Docker Compose (Local Development)\n```bash\n# Choose one:\ndocker compose up mcp-portfolio-nodejs # Node.js only\ndocker compose up mcp-portfolio-python # Python only\ndocker compose up mcp-portfolio-multi # Both runtimes\n```\n\n### Development Setup\n\n#### Node.js Development\n```bash\nnpm install\nnpm run dev\n```\n\n#### Python Development\n```bash\npip install -e .\npython -m mcp_portfolio_server.server\n```\n\n## \ud83d\udd27 Claude Desktop Integration\n\n### Using Docker Hub (Public)\n```json\n{\n \"mcpServers\": {\n \"portfolio\": {\n \"command\": \"docker\", \n \"args\": [\n \"run\", \"-i\", \"--rm\",\n \"srikanthkarthi/mcp-portfolio-server:latest\"\n ]\n }\n }\n}\n```\n\n### Using GitHub Container Registry \n```json\n{\n \"mcpServers\": {\n \"portfolio\": {\n \"command\": \"docker\",\n \"args\": [\n \"run\", \"-i\", \"--rm\", \n \"ghcr.io/srikanthkarthi/mcp-portfolio-server:latest\"\n ]\n }\n }\n}\n```\n\n### Using npm Package (Public Registry)\n```json\n{\n \"mcpServers\": {\n \"portfolio\": {\n \"command\": \"npx\",\n \"args\": [\"srikanth-mcp-portfolio-server\"]\n }\n }\n}\n```\n\n### Using npm Package from GitHub Packages\n```json\n{\n \"mcpServers\": {\n \"portfolio\": {\n \"command\": \"npx\",\n \"args\": [\"@srikanthkarthi/srikanth-mcp-portfolio-server\"]\n }\n }\n}\n```\n\n### Using Python Package\n```json\n{\n \"mcpServers\": {\n \"portfolio\": {\n \"command\": \"python\",\n \"args\": [\"-m\", \"mcp_portfolio_server.server\"]\n }\n }\n}\n```\n\n### Development Mode\n```json\n{\n \"mcpServers\": {\n \"portfolio\": {\n \"command\": \"node\",\n \"args\": [\"/path/to/mcp-portfolio/src/index.js\"],\n \"cwd\": \"/path/to/mcp-portfolio\"\n }\n }\n}\n```\n\n## \ud83d\udce6 Automated Building & Publishing\n\n### GitHub Actions Workflows\n\nThe repository includes automated CI/CD workflows:\n\n- **Triggers**: Git tags (`v*`) or manual workflow dispatch\n- **Builds**: Multi-architecture Docker images (AMD64/ARM64)\n- **Publishes**: \n - Node.js package to GitHub Packages\n - Python package to PyPI \n - Docker images to GitHub Container Registry\n\n### Manual Building\n\n#### Docker Build Commands\n```bash\n# Build Node.js image\ndocker build --target nodejs -t mcp-portfolio:nodejs .\n\n# Build Python image \ndocker build --target python -t mcp-portfolio:python .\n\n# Build multi-runtime image\ndocker build --target multi -t mcp-portfolio:multi .\n```\n\n### Configuration Options\n\n| Environment Variable | Description | Default |\n|---------------------|-------------|---------|\n| `NODE_ENV` | Node.js environment | `production` |\n| `PYTHONUNBUFFERED` | Python output buffering | `1` |\n| `DATA_PATH` | Portfolio data file path | `/app/sample-data.json` |\n\nSwitch between Node.js and Python in multi-runtime container:\n```yaml\n# In docker-compose.yml, uncomment to use Python:\ncommand: [\"python3\", \"-m\", \"mcp_portfolio_server.server\"]\n```\n\n## Data Categories\n\nThe server provides access to the following portfolio categories:\n\n- **Profile Summary**: Overview and introduction\n- **Current Position**: Job title, company, duration\n- **Current Work**: Responsibilities and projects\n- **Experience**: Work history and achievements\n- **Education**: Academic background\n- **Tech Stack**: Programming languages, frameworks, tools\n- **Certifications**: Professional certifications\n- **Volunteerism**: Community service and activities\n- **Contact**: Social media and professional links\n- **Languages**: Language proficiency\n\n## Example Queries\n\n- Search for cloud experience: `search_portfolio(\"cloud\", \"Experience\")`\n- Get all tech stack info: `get_tech_stack()`\n- Find contact information: `get_contact_info()`\n- Search for certifications: `search_portfolio(\"aws certification\")`\n\n## License\n\nMIT",
"bugtrack_url": null,
"license": "MIT",
"summary": "MCP server for Srikanth's portfolio data",
"version": "1.0.3",
"project_urls": {
"Documentation": "https://github.com/srikanthkarthi/mcp-portfolio#readme",
"Homepage": "https://github.com/srikanthkarthi/mcp-portfolio",
"Repository": "https://github.com/srikanthkarthi/mcp-portfolio"
},
"split_keywords": [
"data",
" mcp",
" portfolio",
" server"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "ca7325c1a4fad2e6ca3585b1baa3d8b780774306a965a04185c2d1a932bdc057",
"md5": "b058c35d4370bfe7da1a13cb6869c7bb",
"sha256": "bd7b7e313a968acbcb29f82cc3058c2d8734dd2bc89240b2895f8cedec4bd900"
},
"downloads": -1,
"filename": "srikanth_mcp_portfolio-1.0.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "b058c35d4370bfe7da1a13cb6869c7bb",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 6083,
"upload_time": "2025-09-11T14:39:22",
"upload_time_iso_8601": "2025-09-11T14:39:22.199822Z",
"url": "https://files.pythonhosted.org/packages/ca/73/25c1a4fad2e6ca3585b1baa3d8b780774306a965a04185c2d1a932bdc057/srikanth_mcp_portfolio-1.0.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "46d13329889ef97c52371bb64da85f0a6b063547d0b574f9c435894aa0a9428c",
"md5": "3594514896f74ef70178fb53e2b02d3f",
"sha256": "a7ac5b2aff8273120f960994017d670c47735bc487c7a45a760c44fd8b9525eb"
},
"downloads": -1,
"filename": "srikanth_mcp_portfolio-1.0.3.tar.gz",
"has_sig": false,
"md5_digest": "3594514896f74ef70178fb53e2b02d3f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 23839,
"upload_time": "2025-09-11T14:39:23",
"upload_time_iso_8601": "2025-09-11T14:39:23.291981Z",
"url": "https://files.pythonhosted.org/packages/46/d1/3329889ef97c52371bb64da85f0a6b063547d0b574f9c435894aa0a9428c/srikanth_mcp_portfolio-1.0.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-11 14:39:23",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "srikanthkarthi",
"github_project": "mcp-portfolio#readme",
"github_not_found": true,
"lcname": "srikanth-mcp-portfolio"
}