akaushik.org
← Back to home

akaushik.org portfolio API

OpenAPI 3.1.0

Read-only access to portfolio content through Markdown, JSON, and MCP.

The portfolio exposes its content for agent consumption via five surfaces: (1) the full-corpus Markdown at /llms-full.txt, (2) per-page Markdown alternates at /work/<slug>.md and /writing/<slug>.md, (3) JSON listings at /api/writing and /api/case-studies, (4) HTTP content negotiation on /work/<slug> and /writing/<slug> via `Accept: text/markdown`, and (5) a stateless read-only MCP endpoint at /api/mcp.

Version1.0.0
Serverhttps://akaushik.org

MCP tools.

Stateless — Streamable HTTP

https://akaushik.org/api/mcp is a stateless Streamable HTTP endpoint whose current revision is 2025-11-25. It also supports 2025-11-25, 2025-06-18, 2025-03-26 for this bounded tool subset; initialize echoes a supported requested revision and otherwise negotiates the current one. A later request without MCP-Protocol-Version is handled as 2025-03-26, whose batches are capped at 32 calls.

Every POST must use Content-Type: application/json and an Accept header listing both application/json and text/event-stream; request bodies are capped at 1 MiB before parsing. Responses with bodies use JSON. Every no-id call is dispatched as a notification without a response: a single notification or all-notification batch receives 202. This server issues no MCP-Session-Id; GET, HEAD, PUT, PATCH, DELETE, and other unsupported methods return 405, and OPTIONS returns 204.

JSON-RPC errors are -32700 parse error, -32600 invalid request, -32601 method not found, -32602 invalid params, and -32603 internal error. Numeric request IDs must be integers. The /.well-known/mcp.json document is site/scanner-specific discovery metadata, not an MCP protocol-standard server card.

lookup_case_study

Return one published portfolio case study as structured data and Markdown.

Input
slugrequired · string
Structured output
slugstring
titlestring
dekstring
rolestring
yearstring
stackarray
urlstring
markdownstring

Annotations: read-only, idempotent, non-destructive, closed-world.

get_availability

Return current public project availability and contact details.

Input

No arguments.

Structured output
statusstring
capacitystring
contactUrlstring
emailstring

Annotations: read-only, idempotent, non-destructive, closed-world.

Paths.

8 endpoints

/llms.txt

GETShort-form site digest (llmstxt.org format)
Responses
200Markdown digest · text/markdown

/llms-full.txt

GETFull portfolio corpus, concatenated
Responses
200Markdown corpus · text/markdown

/api/writing

GETList writing posts
Responses
200Newest-first list of writing posts · application/json

/api/case-studies

GETList case studies
Responses
200Curated order list of case studies · application/json

/api/mcp

POSTCall the stateless MCP server over Streamable HTTP

Accepts one JSON-RPC 2.0 request or notification for 2025-11-25 and 2025-06-18. The 2025-03-26 compatibility path also accepts batches of 1–32 calls. Every POST uses Content-Type application/json, is capped at 1 MiB before parsing, and negotiates the transport by listing both application/json and text/event-stream in Accept; responses use application/json when a body is present. Initialize echoes a supported requested revision and otherwise negotiates 2025-11-25. Later requests without MCP-Protocol-Version are handled as 2025-03-26. The server is stateless and never issues MCP-Session-Id.

Parameters
headerMCP-Protocol-Version · string · Required by clients after initialization. Explicit values must be supported; when omitted, this stateless server applies the 2025-03-26 compatibility fallback.
headerOrigin · string · May be omitted by server clients. When present, it must be the canonical origin.
Request body
BodyRequired · application/json
Responses
200JSON-RPC response for initialize, ping, tools/list, or tools/call · application/json
202Single notification or notification-only compatibility batch accepted; no response body
400Malformed JSON (-32700), invalid JSON-RPC envelope (-32600), or unsupported explicit protocol version (-32602) · application/json
403Origin is present and does not match the canonical origin · application/json
406Accept does not list both application/json and text/event-stream (-32600) · application/json
413Request body exceeds the 1 MiB transport limit · application/json
415Content-Type is not application/json · application/json
GETStreaming GET is not supported

This stateless server does not expose a server-initiated SSE stream, so GET always returns HTTP 405.

Responses
400Unsupported explicit MCP protocol version · application/json
403Origin is present and does not match the canonical origin · application/json
405Method not allowed · application/json
DELETESession deletion is not supported

The MCP server is stateless and never issues session identifiers.

Responses
400Unsupported explicit MCP protocol version · application/json
403Origin is present and does not match the canonical origin · application/json
405Method not allowed · application/json
OPTIONSDescribe same-origin HTTP capabilities
Responses
204Capability response with no body
400Unsupported explicit MCP protocol version · application/json
403Origin is present and does not match the canonical origin · application/json

/writing/{slug}.md

GETWriting post as Markdown

Pattern B (suffix). Equivalent to GET /writing/{slug} with Accept: text/markdown (Pattern A, RFC 7231 content negotiation).

Parameters
pathslug · string · required
Responses
200Post Markdown · text/markdown
404Slug not found

/work/{slug}.md

GETCase study as Markdown

Pattern B (suffix). Equivalent to GET /work/{slug} with Accept: text/markdown (Pattern A, RFC 7231 content negotiation).

Parameters
pathslug · string · required
Responses
200Case study Markdown · text/markdown
404Slug not found

/

GETHome page

HTML by default. With Accept: text/markdown the server rewrites to /llms.txt (short-form digest).

Responses
200HTML home page or Markdown digest (content-negotiated) · text/html, text/markdown

Schemas.

9 definitions

WritingPost

Properties
slugrequired · string
titlerequired · string
dekrequired · string
daterequired · string · date
readingTimestring
urlrequired · string · uri
markdownrequired · string · uri

WritingList

Properties
countrequired · integer
postsrequired · array

CaseStudy

Properties
slugrequired · string
titlerequired · string
dekrequired · string
indexstring
tagstring
yearrequired · string
rolerequired · string
stackrequired · array
evidenceOfstring
urlrequired · string · uri
markdownrequired · string · uri

CaseStudyList

Properties
countrequired · integer
caseStudiesrequired · array

McpJsonRpcRequest

Properties
jsonrpcrequired · string
idobject
methodrequired · string
paramsobject

McpJsonRpcResponse

Properties

McpJsonRpcSuccessResponse

Properties
jsonrpcrequired · string
idrequired · object
resultrequired · object

McpJsonRpcErrorResponse

Properties
jsonrpcrequired · string
idrequired · object
errorrequired · object

McpToolResult

Properties
contentrequired · array
structuredContentobject
isErrorrequired · boolean