Back to home

Read-only MCP server

An AI client that speaks the Model Context Protocol (MCP) can read my public resume text through this endpoint. It has three tools. None of them can change anything.

The endpoint takes JSON-RPC 2.0 messages over HTTP POST and answers with JSON. It reads the same text as the chat assistant on this site, through the same read-only database role, and every text it returns passes the chat's link, private-word and format guards.

01

Connect

Endpoint: https://sanjaykandimalla.com/api/mcp

Protocol version 2025-06-18. List the tools:

curl -s https://sanjaykandimalla.com/api/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Call one:

curl -s https://sanjaykandimalla.com/api/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"search_resume","arguments":{"query":"RAG pipelines"}}}'

02

Tools

search_resume

Search Sanjay Kandimalla's public resume and project notes with a plain-English query, for example "RAG pipelines" or "Python experience". Returns up to 5 short passages, best match first, each with its section heading and a similarity score from 0 to 1. Returns an empty list when nothing is close enough. Read-only.

Input
InputTypeMeaning
querystringWhat to look for, in plain English. (1 to 200 characters)
Output
OutputTypeMeaning
passagesarrayMatching passages, best first. May be empty.
passages[].sectionstringHeading of the section the passage comes from.
passages[].textstringThe passage text.
passages[].scorenumberSimilarity from 0 to 1, rounded to one decimal.

get_section

Return the full public text of one section of the resume, for example "Summary" or "Technical skills". Use search_resume first if you do not know which section you need. The section must be one of the listed values. Read-only.

Input
InputTypeMeaning
sectionstringSection heading to read.
Output
OutputTypeMeaning
sectionstringThe section heading that was asked for.
textstringThe section text, one item per line.

list_evals

List the public evaluation sets that test this site's chat assistant: each set's name, what it checks, and how many cases it has. Takes no arguments. Private test sets are never listed. Read-only.

Input: none.

Output
OutputTypeMeaning
setsarrayOne entry per public eval set.
sets[].namestringSet name, for example Golden.
sets[].testsstringWhat the set checks.
sets[].casesnumberNumber of cases in the set.

03

What it does not do

  • No writes. There is no tool that stores, changes or deletes anything.
  • No sessions. Every request stands alone, and GET and DELETE are refused.
  • No memory. Nothing from one call is kept for the next.
  • No answers written by a model. It returns passages of text, and the client decides what to do with them.
  • No private notes. Text that fails those guards is left out without explanation.
  • No extra allowance. It shares the chat assistant's rate limits, and every request counts, including listing the tools.