Skip to content

For machines & the curious

MCP Server Documentation

This site exposes its reference content as a public, read-only MCP (Model Context Protocol) server, so AI assistants such as ChatGPT, Claude or Cursor can answer questions about Anna Mani straight from the source. No authentication is required.

Endpoint & protocol

URL
https://www.anna-mani.com/mcp
Transport
Streamable HTTP (single POST endpoint)
Protocol
MCP 2025-06-18 over JSON-RPC 2.0
Auth
None. The server is public and read-only.

Every request must send the header Accept: application/json, text/event-stream; requests without it are rejected with HTTP 406. MCP clients (ChatGPT, Claude, Cursor) do this automatically when you add the URL as a connector.

Quick test with curl
curl -X POST https://www.anna-mani.com/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": { "name": "search_content", "arguments": { "query": "ozone" } }
  }'

Handshake: initialize & tools/list

A session begins with initialize, then tools/list returns the five tools with their full input schemas.

Request · initialize
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2025-06-18",
    "capabilities": {},
    "clientInfo": { "name": "my-client", "version": "1.0.0" }
  }
}
Response · initialize
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "protocolVersion": "2025-06-18",
    "capabilities": { "tools": {} },
    "serverInfo": { "name": "anna-mani", "title": "Anna Mani", "version": "0.1.0" },
    "instructions": "Reference tools for the Anna Mani archive (anna-mani.com) …"
  }
}
Response · tools/list (request: {"jsonrpc":"2.0","id":2,"method":"tools/list"})
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "tools": [
      { "name": "get_biography", "title": "Get biography", "description": "…" },
      { "name": "get_timeline", "title": "Get life timeline", "description": "…" },
      { "name": "get_faq", "title": "Get FAQ and remembrances", "description": "…" },
      { "name": "get_bibliography", "title": "Get further reading", "description": "…" },
      { "name": "search_content", "title": "Search site content", "description": "…" }
    ]
  }
}

Tools

All tools are read-only and idempotent. Each response includes a pretty-printed JSON text block plus a matching structuredContent payload; the examples below are abbreviated.

01 · Get biography

get_biography

Returns a concise factual profile of Anna Mani: dates, places, fields of work, a career summary and her best-known quotations. Takes no arguments.

Request · tools/call
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "get_biography",
    "arguments": {}
  }
}
Response (abbreviated)
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "content": [{ "type": "text", "text": "{\"name\": \"Anna Modayil Mani\", ... }" }],
    "structuredContent": {
      "biography": {
        "name": "Anna Modayil Mani",
        "lived": "1918–2001",
        "knownAs": "The Weather Woman of India",
        "fields": ["Physics", "Meteorology", "Solar radiation", "Atmospheric ozone", "Wind energy"],
        "quotes": ["You can but do your best.", "We have only one life.", "Find a better way to do it!"]
      }
    }
  }
}

02 · Get life timeline

get_timeline

Returns the chronology of Anna Mani’s life and career from 1918 to 2001, each entry with its year, place and description. Accepts an optional year filter matched against the entry’s year label.

Request · tools/call
{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "get_timeline",
    "arguments": { "year": "1948" }
  }
}
Response (abbreviated)
{
  "jsonrpc": "2.0",
  "id": 3,
  "result": {
    "content": [{ "type": "text", "text": "[{\"year\": \"1948\", ... }]" }],
    "structuredContent": {
      "entries": [
        {
          "year": "1948",
          "place": "Pune",
          "text": "Returns to India and joins the India Meteorological Department. …"
        }
      ]
    }
  }
}

03 · Get FAQ and remembrances

get_faq

Returns the site’s frequently asked questions about Anna Mani with their answers, plus short notes on her legacy in instruments and the honours and memorials named after her. Takes no arguments.

Request · tools/call
{
  "jsonrpc": "2.0",
  "id": 4,
  "method": "tools/call",
  "params": {
    "name": "get_faq",
    "arguments": {}
  }
}
Response (abbreviated)
{
  "jsonrpc": "2.0",
  "id": 4,
  "result": {
    "content": [{ "type": "text", "text": "{\"faqs\": [...], \"remembrance\": [...]}" }],
    "structuredContent": {
      "faqs": [
        {
          "q": "Who was Anna Mani?",
          "a": "Anna Modayil Mani (1918–2001) was an Indian physicist and meteorologist, …"
        }
      ],
      "remembrance": [
        { "title": "A legacy in instruments", "body": "Under her leadership, India stopped importing …" }
      ]
    }
  }
}

04 · Get further reading

get_bibliography

Returns the curated bibliography about Anna Mani: the biography, the children’s picture book, essays and scholarship, tributes, press coverage and film, each with citation details and links where available. Takes no arguments.

Request · tools/call
{
  "jsonrpc": "2.0",
  "id": 5,
  "method": "tools/call",
  "params": {
    "name": "get_bibliography",
    "arguments": {}
  }
}
Response (abbreviated)
{
  "jsonrpc": "2.0",
  "id": 5,
  "result": {
    "content": [{ "type": "text", "text": "[{\"heading\": \"The Biography\", ... }]" }],
    "structuredContent": {
      "groups": [
        {
          "heading": "The Biography",
          "items": [
            {
              "title": "Anna Mani: The Uncut Diamond",
              "meta": "Asha Gopinathan · National Book Trust · 2025",
              "href": "https://annamani.co.in/"
            }
          ]
        }
      ]
    }
  }
}

05 · Search site content

search_content

Full-text search across everything published on the site: the timeline, the remembrance notes, the FAQ and the bibliography. Requires a query string; matching is case-insensitive.

Request · tools/call
{
  "jsonrpc": "2.0",
  "id": 6,
  "method": "tools/call",
  "params": {
    "name": "search_content",
    "arguments": { "query": "ozone" }
  }
}
Response (abbreviated)
{
  "jsonrpc": "2.0",
  "id": 6,
  "result": {
    "content": [{ "type": "text", "text": "[{\"section\": \"timeline\", ... }]" }],
    "structuredContent": {
      "results": [
        {
          "section": "timeline",
          "label": "1950s–1960s · Across India",
          "text": "Establishes a network of solar radiation monitoring stations and advances ozone research, …"
        },
        {
          "section": "timeline",
          "label": "1987 · New Delhi",
          "text": "Awarded the K. R. Ramanathan Medal by the Indian National Science Academy for her work on ozone."
        }
      ]
    }
  }
}

Errors

Invalid arguments (for example a missing query) return a JSON-RPC error; a search with no matches returns an empty results array rather than an error.

Response · missing required argument
{
  "jsonrpc": "2.0",
  "id": 7,
  "error": {
    "code": -32602,
    "message": "Invalid params: query is required"
  }
}