/user/kayd @ devops :~$ cat mcp-server.md

MCP Server MCP Server

QR Code linking to: MCP Server

Summary

🔌 MCP Server This blog runs a public, read-only MCP (Model Context Protocol) server, so Claude and other AI clients can search, read and reason over its DevOps and AWS content directly — no copy-pasting. Endpoint: https://karandeepsingh.ca/mcp Registry: io.github.karandaid/karandeepsingh-blog Auth: none — the content …

🔌 MCP Server

This blog runs a public, read-only MCP (Model Context Protocol) server, so Claude and other AI clients can search, read and reason over its DevOps and AWS content directly — no copy-pasting.

Endpoint: https://karandeepsingh.ca/mcp Registry: io.github.karandaid/karandeepsingh-blog Auth: none — the content is public

⚡ Add it in one line

Claude Code

claude mcp add --transport http kayd https://karandeepsingh.ca/mcp

Claude app — Settings → Connectors → Add custom connector → paste the endpoint.

Cursor~/.cursor/mcp.json

{
  "mcpServers": {
    "kayd": { "url": "https://karandeepsingh.ca/mcp" }
  }
}

VS Code / Copilot.vscode/mcp.json

{
  "servers": {
    "kayd": { "type": "http", "url": "https://karandeepsingh.ca/mcp" }
  }
}

ChatGPT — Settings → Connectors → add a custom MCP connector with the same URL.

Stdio-only clients — bridge it with mcp-remote:

{
  "mcpServers": {
    "kayd": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://karandeepsingh.ca/mcp"]
    }
  }
}

🏗 How it works

    flowchart LR
  C["🤖 Claude / Cursor / ChatGPT"] -->|"JSON-RPC over HTTPS"| M["⚡ /mcp<br/>serverless function"]
  H["🏗 Hugo build"] --> T["📇 mcp-index.json<br/>47 KB · metadata"]
  H --> F["📚 index.json<br/>full article text"]
  H --> Q["🧠 mcp-quiz.json<br/>76 questions"]
  H --> K["⌨️ mcp-code.json<br/>963 code blocks"]
  M --> T
  M --> F
  M --> Q
  M --> K
  M --> R["🧰 11 tools<br/>📄 resources · 💬 prompts<br/>⌨️ completions"]
  

A stateless MCP server running as a single serverless function on the same deploy as the site. Anything that only needs titles, tags and summaries reads a trimmed metadata index generated at build time (~47 KB); full text, quiz questions and code blocks live in separate indexes fetched only by the tools that need them, so the common path stays fast. No session state, no database, and no second thing to deploy — the server ships with the blog.

Get new articles by email

One DevOps article a week, plus the 18-cheatsheet PDF pack. No spam, one click to leave.

🧰 Tools

ToolWhat it does
🔍search_postsSearch articles and cheatsheets; returns title, URL, tags, date, reading time and summary. Optionally filter to posts or cheatsheets
📖read_postRead an article’s full text by URL, slug or title — paginated, with related links appended
📋get_cheatsheetJump straight to a cheatsheet by topic (docker, cloudformation, cost, aurora, …)
🗒list_cheatsheetsEvery quick-reference guide on the blog
🆕list_recentThe most recently published posts
🏷browse_by_tagPosts filtered by a tag
🗂list_topicsEvery tag with a post count, for discovery
🔗related_postsPosts sharing the most tags with a given post
🎲random_postA surprise pick
🧠quiz_meRun a real multiple-choice quiz drawn from questions written for the articles — answers and explanations included
⌨️get_commandsReturn only the runnable commands from a page, no prose

Every tool is annotated read-only, idempotent and non-destructive, so clients can safely allow them without prompting each time.

🧠 Quiz mode

Every article on this blog ends with comprehension questions. Those 76 questions are exposed through the server, so you can be tested on them:

"Quiz me on Aurora"

## 🧠 Quiz: aurora (3 questions)

**1.** Why set "Public access" to No when creating an Aurora cluster
       for an app running on EC2 in the same VPC?
   A. Public access makes the database slower
   B. The app reaches the database privately inside the VPC, so a
      public IP only adds attack surface with no benefit
   C. Aurora does not support public access
   D. It is required to use Serverless v2

Answers and explanations come back in a separate section, each linked to the article it came from — so the client can ask first and mark afterwards.

⌨️ Just the commands

When you want the command and not the article:

"Give me the docker build commands from Karandeep's blog"

## ⌨️ Commands from 📋 Docker Cheatsheet

docker build -t myapp:1.0 .
docker build -t myapp:1.0 -f prod.Dockerfile .
docker push registry.example.com/team/myapp:1.0

📄 Resources

Every article and cheatsheet is also exposed as an MCP resource, addressed by its real canonical URL:

https://karandeepsingh.ca/posts/{slug}/
https://karandeepsingh.ca/cheatsheets/{category}/{slug}/

That means a client can attach a specific article as context directly, without searching for it first. resources/list is cursor-paginated, and resource templates are published for both sections.

💬 Prompts

PromptWhat it does
🔬research_topicSearch, read the best matches, and answer grounded in the articles — with sources
quick_referencePull up the right cheatsheet and answer a specific question from it
⚖️compare_optionsWeigh two technologies against each other on cost and fit
📰whats_newSummarise the newest posts

⌨️ Completions

Prompt arguments and resource-template variables autocomplete from the site’s real data — tag names, cheatsheet topics and article slugs — so clients can offer a picker instead of making you guess. With tools, resources, prompts and completions all implemented, this is a complete MCP server rather than a tools-only one.

🔒 Privacy & terms

No personal data is stored and no login is required. Requests may be logged by IP address solely to enforce rate limiting. See the Privacy Policy and Terms of Service. Support: Email me.

Curious how it was built? I wrote it up in I Gave My Blog an MCP Server (and You Can Too).

Get new articles by email

One DevOps article a week, plus the 18-cheatsheet PDF pack. No spam, one click to leave.