Abil ShresthaHellllllllllloooooooo

Abil Shrestha API and developer docs

Everything on abilshr.com, Abil Shrestha's site, is available to programs and AI agents through open, read-only interfaces: a JSON API, an MCP server, markdown versions of every page, and standard discovery files. There is no sign-up and no API key.

Quickstart

List the latest posts as JSON:

curl https://www.abilshr.com/api/v1/posts

Read any page as markdown, either by asking for it or by adding .md to the URL:

curl -H 'Accept: text/markdown' https://www.abilshr.com/
curl https://www.abilshr.com/writing/droid-maxxing.md

Connect an MCP client to https://www.abilshr.com/mcp (Streamable HTTP, no auth).

REST API

Base URL: https://www.abilshr.com/api/v1. The full description is the OpenAPI 3.1 document at /openapi.json.

  • GET /api/v1: index of the endpoints
  • GET /api/v1/profile: name, tagline, location and profile links
  • GET /api/v1/projects: projects with links, descriptions and years
  • GET /api/v1/posts: published posts, newest first, paginated
  • GET /api/v1/posts/{slug}: one post, including its full text as markdown
  • GET /api/v1/health: returns {"status":"ok"} when the API is up

Example response from GET /api/v1/posts?limit=1:

{
  "posts": [
    {
      "slug": "droid-maxxing",
      "title": "Droid Maxxing",
      "date": "2025-12-01",
      "summary": "Make the best use of Droids",
      "url": "https://www.abilshr.com/writing/droid-maxxing"
    }
  ],
  "next_cursor": "eyJvIjoxfQ"
}

Pagination

GET /api/v1/posts takes limit (1 to 50, default 20) and cursor. When there are more results the response includes next_cursor; pass it back as cursor to get the next page. When next_cursor is null you have everything. Cursors are opaque, so don't build them yourself.

Errors

Errors use RFC 9457 problem details with the application/problem+json content type. Every error has a machine-readable code and a hint saying what to do next:

{
  "type": "about:blank",
  "title": "Not Found",
  "status": 404,
  "code": "post_not_found",
  "detail": "No published post with slug \"nope\".",
  "hint": "List valid slugs with GET /api/v1/posts.",
  "docs": "https://www.abilshr.com/openapi.json"
}

The codes are invalid_parameter (400), post_not_found and endpoint_not_found (404), method_not_allowed (405) and internal_error (500).

Authentication, limits and sandbox

  • Authentication: none. Send requests without an Authorization header; see /auth.md.
  • Rate limits: there are no API keys or per-client quotas. Responses are cached at the edge where possible. Please keep automated traffic reasonable.
  • Sandbox: there is no separate sandbox. Every endpoint is read-only, so calling production can't change anything.

Versioning

The version is part of the path. Changes within v1 are additive, such as new fields or new endpoints; a change that would break existing clients would ship under a new version path, with v1 kept running alongside it.

MCP server

https://www.abilshr.com/mcp speaks the Model Context Protocol over Streamable HTTP with no auth. Its tools are read-only:

  • get_profile: who Abil is, his projects, writing and links
  • list_projects: projects with links, descriptions and years
  • list_writing: published posts with slugs and summaries
  • read_post: the full text of one post

The first three take an optional format of markdown or json. Example client configuration:

{
  "mcpServers": {
    "abilshr": { "type": "http", "url": "https://www.abilshr.com/mcp" }
  }
}

The server card is at /mcp/server-card.

Markdown and llms.txt

  • Send Accept: text/markdown to the home page, writing pages, posts or this page to get markdown, or add .md to the URL (for example /index.md).
  • Markdown pages start with frontmatter carrying the title, description, canonical URL and last-updated date.
  • /llms.txt is a one-file overview of the site. /writing/llms.txt indexes the posts and /developers/llms.txt indexes this documentation.

In the browser

Pages register WebMCP tools (get_profile, list_writing, read_post and open_page) through document.modelContext, so browser agents can use the site without scraping it.

Discovery files

Updated October 17, 2026