{
  "$schema": "https://modelcontextprotocol.io/schemas/manifest.json",
  "name": "aham",
  "title": "Vivek Shrivastava - Living Profile MCP Server",
  "version": "1.0.0",
  "description": "A public, read-only Model Context Protocol server exposing Vivek Shrivastava's professional profile, career decisions, work, corpus search, and an LLM-driven fit assessment tool. Designed to let AI-native recruiters, founders, and engineering peers query Vivek's profile directly from their own AI tools.",
  "author": "Vivek Shrivastava",
  "homepage": "https://aham.page/mcp",
  "license": "MIT",
  "endpoint": {
    "url": "https://aham.page/mcp/rpc",
    "transport": "http",
    "protocol": "jsonrpc-2.0",
    "auth": "none",
    "cors": "*",
    "method": "POST"
  },
  "capabilities": {
    "tools": true,
    "resources": false,
    "prompts": false,
    "logging": false
  },
  "tools": [
    {
      "name": "get_profile_summary",
      "description": "Returns Vivek's name, headline, tagline, current ask (roles open to, stage preference, availability), areas of focus, signature work, what he avoids, and useful links. Use this when you need an overview of who Vivek is and what he is looking for.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    },
    {
      "name": "get_career_decisions",
      "description": "Returns the 8-node career decision map across Vivek's 25-year arc. Each decision has a year, title, the decision taken, the alternative declined, and a reflection in hindsight. Use this when you need to understand how Vivek thinks about career choices, or to identify pattern recognition across his arc.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    },
    {
      "name": "get_work",
      "description": "Returns selected work items with tech stack and outcomes. Use this when you need concrete examples of what Vivek has shipped, the technologies involved, and the measurable outcomes.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "description": "Maximum number of items to return. Defaults to all.",
            "minimum": 1,
            "maximum": 100
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "search_corpus",
      "description": "Keyword search across the indexed public corpus (writing, talks, notebook entries, GitHub activity, FAQs). Returns matching chunks with a relevance score and source citation. Use this to ground any claim in primary source material.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Free-form search query. Multi-word queries are tokenised and matched."
          },
          "limit": {
            "type": "integer",
            "description": "Maximum results to return. Defaults to 8.",
            "minimum": 1,
            "maximum": 25
          }
        },
        "required": ["query"],
        "additionalProperties": false
      }
    },
    {
      "name": "assess_fit",
      "description": "LLM-driven structured fit assessment. Given a job description, returns a structured JSON object with fit_score (1-10), strengths, gaps, evidence citing at least three corpus items, and suggested interview questions. Use this to evaluate whether Vivek is a fit for a specific role.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "job_description": {
            "type": "string",
            "description": "The full job description text to assess Vivek against."
          }
        },
        "required": ["job_description"],
        "additionalProperties": false
      }
    }
  ],
  "setup": {
    "claude_desktop": {
      "config_path_mac": "~/Library/Application Support/Claude/claude_desktop_config.json",
      "config_path_windows": "%APPDATA%\\Claude\\claude_desktop_config.json",
      "snippet": {
        "mcpServers": {
          "aham": {
            "url": "https://aham.page/mcp/rpc"
          }
        }
      }
    },
    "cursor": {
      "config_path": "~/.cursor/mcp.json",
      "snippet": {
        "mcpServers": {
          "aham": {
            "url": "https://aham.page/mcp/rpc"
          }
        }
      }
    },
    "claude_code": {
      "command": "claude mcp add --transport http vivekshrivastava https://aham.page/mcp/rpc"
    }
  },
  "limitations": [
    "v1 uses streamable HTTP (POST + JSON response). Server-Sent Events streaming is not yet supported.",
    "No authentication. Read-only. Rate limited at the Cloud Function level.",
    "search_corpus uses keyword matching, not vector embeddings, in v1.",
    "assess_fit calls Gemini via the existing aiProxy and may return a fallback if the proxy is rate-limited."
  ]
}
