Open to Backend, GenAI & Full-Stack roles · remote or Hyderabad

// model context protocol

Anvilry MCP server: ask your own AI about me

This portfolio runs a small MCP server — the same protocol AI assistants use to call tools. Connect it to Claude Desktop or Cursor and ask your own AI about my work; it answers from my real projects and résumé.

Read-only · grounded in the same content as this site · no LLM cost on the server · it can only return real data, never invent.

// endpoint

https://anvilry.vercel.app/api/mcp/mcp

// Claude Desktop

{
  "mcpServers": {
    "sairam-portfolio": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://anvilry.vercel.app/api/mcp/mcp"]
    }
  }
}

// Cursor

{
  "mcpServers": {
    "sairam-portfolio": { "url": "https://anvilry.vercel.app/api/mcp/mcp" }
  }
}

// tools

toolwhat it returns
get_profileIdentity, headline, links, skills, achievements. sections (list, each one of identity, links, skills, achievements, optional): Which parts of the profile to return: identity (name, role, company, tenure, location, headline, summary), links, skills, achievements. Omit to get all four.
list_projectsAll open-source projects. group (string, up to 80 characters, optional): Return only the projects in this group. The rule is an exact match on the whole group name, case-insensitive and ignoring surrounding spaces, e.g. 'Tooling & Lab'. An unknown name (text of only spaces included) returns an error that lists the valid groups; the empty string is rejected. Omit for every group. limit (integer, 1 to 100, optional): Maximum number of projects to return, from 1 to 100. Omit for all of them.
get_projectOne project's detail by slug. slug (string, required): project slug, e.g. mindforge
list_workProduction work case studies. tech (string, up to 60 characters, optional): Return only the case studies whose tech list has an entry containing this text. The rule is a case-insensitive substring match against each entry, e.g. 'python' or 'sse'. Text of only spaces applies no filter; the empty string is rejected. Omit for all of them. limit (integer, 1 to 50, optional): Maximum number of case studies to return, from 1 to 50. Omit for all of them.
get_workOne case study's detail by slug. slug (string, required): work slug, e.g. pensieve
search_experienceKeyword search across work, projects, skills. query (string, up to 120 characters, required): Keywords, e.g. 'kafka' or 'multi-agent'. The rule is a case-insensitive substring match of the whole query as one phrase (not word by word) against work, project and skill text.
get_resume_variantThe canonical résumé PDF URL. role (one of master, required): target role flavor for the résumé variant
list_all_contentEvery work item, project, article and note — slug, name, summary, URL. type (one of work, project, article, note, optional): Return only this kind of content: work, project, article or note. The rule is an exact match on the item's type. Notes are listed only while the notes section is published. Omit for every kind. limit (integer, 1 to 200, optional): Maximum number of items to return, from 1 to 200. Applied after the type filter. Omit for all of them.
get_content_itemOne content item by type (work, project, article, note) and slug. type (one of work, project, article, note, required): Kind of content item to fetch: work, project, article or note. slug (string, required): content slug, e.g. 'pensieve' or 'mindforge'
list_decisionsReal architecture tradeoffs across projects and work, optionally filtered by tag. tag (string, optional): Return only the decisions carrying this tag. The rule is an exact, case-sensitive match against each tag ('Performance' is not 'performance'); a tag nothing carries returns an empty list, not an error, and the empty string applies no filter. Omit for all of them.