# Harshith Nayaka L — Developer portal

> Public, read-only JSON over everything on this site. No key, no signup, no rate limit, no write surface.

## Quickstart

```
curl https://harshith-nayaka-l-portfolio.vercel.app/api/v1/projects
```

That is the whole setup. There is no authentication step because there is nothing here that is not already public on the page.

## Endpoints

| Method | Path | Returns |
| --- | --- | --- |
| GET | [`/api`](https://harshith-nayaka-l-portfolio.vercel.app/api) | Service root and available versions |
| GET | [`/api/v1`](https://harshith-nayaka-l-portfolio.vercel.app/api/v1) | Every collection in this version |
| GET | [`/api/v1/profile`](https://harshith-nayaka-l-portfolio.vercel.app/api/v1/profile) | Name, headline, location, contact, focus areas |
| GET | [`/api/v1/projects`](https://harshith-nayaka-l-portfolio.vercel.app/api/v1/projects) | Every project, strongest first |
| GET | `/api/v1/projects/{slug}` | One project |
| GET | [`/api/v1/case-studies`](https://harshith-nayaka-l-portfolio.vercel.app/api/v1/case-studies) | Every case study, summarised; `?view=full` for all of them in full |
| GET | `/api/v1/case-studies/{slug}` | One case study, in full |
| GET | [`/api/v1/faqs`](https://harshith-nayaka-l-portfolio.vercel.app/api/v1/faqs) | Question and answer pairs |
| GET | [`/api/v1/skills`](https://harshith-nayaka-l-portfolio.vercel.app/api/v1/skills) | Packaged agent skills published from this site |

## Pagination

Every list (projects, case studies, FAQs, skills) is served whole by default. Add `?limit=` (1-50) for a page, then pass the response's `next_cursor` back as `?cursor=` until `has_more` is false. Every list response carries `total`, `has_more` and `next_cursor`, whole or paged, and a paged one links the next page in `_links.next` and a `Link: rel="next"` header.

```
curl 'https://harshith-nayaka-l-portfolio.vercel.app/api/v1/faqs?limit=5'
```

## MCP server

The same content is also served over the Model Context Protocol at `https://harshith-nayaka-l-portfolio.vercel.app/mcp` — Streamable HTTP, protocol 2025-11-25, read-only, no authentication. Add that URL as a remote MCP server in any MCP client.

| Tool | Arguments | Returns |
| --- | --- | --- |
| `get_profile` | none | Who Harshith Nayaka L is: role, employer, location, availability, contact email and public profiles |
| `list_projects` | `topic` (optional) | Every project in the portfolio with a one-line outcome, tags, status, links and its slug, optionally narrowed to one topic |
| `get_case_study` | `slug` | The full case study for one project: the problem, what was built, the pipeline, the engineering decisions, results, stack and sources |
| `list_faqs` | `query` (optional) | The questions and answers from the site's FAQ (hiring and availability, what the role involves, technical questions answered from the projects), optionally ranked against a question |
| `list_agent_skills` | `name` (optional) | The published agent skills: what each one does, the method behind it, and its repository |
| `answer_question` | `question` | Answers a question about Harshith Nayaka L or his work by quoting the site's own published answer, with its source URL |

Every page is also an MCP resource (`resources/list`, `resources/read`), returned as its markdown twin.

Server card: [`/.well-known/mcp/server-card.json`](https://harshith-nayaka-l-portfolio.vercel.app/.well-known/mcp/server-card.json).

## Docs MCP server

This documentation is served over MCP too, at `https://harshith-nayaka-l-portfolio.vercel.app/mcp/docs`: same transport, read-only, no authentication. Use it while integrating; use `/mcp` for the portfolio content itself.

| Tool | Returns |
| --- | --- |
| `list_docs` | Every developer document on the site: its path, title and what it covers, optionally narrowed to a topic |
| `get_doc` | One developer document in full, as markdown (the OpenAPI description is YAML) |
| `search_docs` | The documentation sections that best match a question, each with its source URL, best first |

Server card: [`/.well-known/mcp/docs-server-card.json`](https://harshith-nayaka-l-portfolio.vercel.app/.well-known/mcp/docs-server-card.json).

## NLWeb

`https://harshith-nayaka-l-portfolio.vercel.app/ask` speaks Microsoft's NLWeb protocol (v0.55, list mode): send a question as `query` by GET or POST and get back the site's matching published answers and case studies, each with its URL, a score and a schema.org object. Add `streaming=true` (or `Accept: text/event-stream`) for server-sent events: `start`, one `result` per item, `complete`. Only list mode exists: summarize and generate would need a model writing text, so they are answered as a list.

```
curl 'https://harshith-nayaka-l-portfolio.vercel.app/ask?query=is+he+available+for+freelance+work'
```

## A2A agent

An Agent2Agent (A2A) agent answers at `https://harshith-nayaka-l-portfolio.vercel.app/a2a` over the JSON-RPC binding, protocol versions 1.0 and 0.3. Send it a message; it replies with a completed task whose artifact quotes the site's published answer and its source URL. There is no model behind it, so it never answers beyond what the site says. Stateless: no task is stored, and streaming and push notifications are off.

| Skill | Send | Returns |
| --- | --- | --- |
| `answer-question` | e.g. "Who is Harshith Nayaka L and where is he based?" | Answer a question about Harshith Nayaka L |
| `list-projects` | e.g. "What has Harshith built?" | List projects |
| `get-case-study` | e.g. "Tell me about Cannon." | Summarise a case study |

```bash
curl -s https://harshith-nayaka-l-portfolio.vercel.app/a2a \
  -H 'Content-Type: application/json' -H 'A2A-Version: 1.0' \
  -d '{"jsonrpc":"2.0","id":1,"method":"SendMessage","params":{"message":{"messageId":"1","role":"ROLE_USER","parts":[{"text":"Where is Harshith based?"}]}}}'
```

Agent card: [`/.well-known/agent-card.json`](https://harshith-nayaka-l-portfolio.vercel.app/.well-known/agent-card.json). With the official SDK (`pip install a2a-sdk`), pass the site origin to `A2ACardResolver` and the client picks the interface itself.

## Authentication

None, deliberately. Every record served here is already public on the site, so there is no key to obtain, no token to refresh and no scope to request. Every operation is a read; nothing can be mutated, so there is no separate test environment to point you at and no production data at risk from calling it.

## Rate limits

None. The responses are static files on a CDN, so the API has the same availability and the same limits as the site itself.

## Errors

Anything under `/api` that does not resolve returns JSON, never an HTML error page:

```json
{
  "error": {
    "code": "not_found",
    "message": "No projects record with the slug \"nope\".",
    "hint": "GET /api/v1/projects lists every valid slug.",
    "documentation": "https://harshith-nayaka-l-portfolio.vercel.app/openapi.json"
  }
}
```

`code` is stable and safe to branch on. `hint` names the call that will tell you the valid values.

## Machine-readable description

- [OpenAPI 3.1](https://harshith-nayaka-l-portfolio.vercel.app/openapi.json) — every route typed, with a unique operationId and a description on each operation.
- [API catalog](https://harshith-nayaka-l-portfolio.vercel.app/.well-known/api-catalog) — RFC 9727 linkset.
- [Agent skills index](https://harshith-nayaka-l-portfolio.vercel.app/.well-known/agent-skills/index.json) — capabilities, when to use them, and a sha256 digest of each artifact.
- [Agent resource catalog](https://harshith-nayaka-l-portfolio.vercel.app/.well-known/ard.json) — every agent-readable resource on this host.

## Versioning

`/api/v1` is current and stable. Fields are added, never removed or retyped. A breaking change would ship as `/api/v2` with v1 still serving.

## Other formats

Every page is also a document. Append `/index.md` or `.md` to any route, send `Accept: text/markdown`, or add `?mode=agent`.

- [llms.txt](https://harshith-nayaka-l-portfolio.vercel.app/llms.txt) — the index, with a when-to-use section.
- [llms-full.txt](https://harshith-nayaka-l-portfolio.vercel.app/llms-full.txt) — every case study in one fetch.
- [agents.md](https://harshith-nayaka-l-portfolio.vercel.app/agents.md) — what this site is a good source for, and what it is not.
