Also at Deasil Works · txn2 · Plexara
Profiles GitHub · X · LinkedIn
Theme Light · Auto · Dark
Professional notes by Craig Johnston
long-form, short-form, working drafts · since 2008
VOL. XIX · MMXXVI
124 NOTES IN PRINT

Posts

124 NOTES
XCIV

Completion: Argument Autocomplete for Prompts and Resources

One method that suggests values as a user fills in an argument, and the context field that scopes those suggestions to what is already filled
MCPGOPROTOCOLCOMPLETION
2026-05-21
XCIII

Prompts: Server-Authored Conversation Starters

The third server primitive and the one people misread: templates the user selects, rendered into messages that can embed a server's own resources
MCPGOPROTOCOLPROMPTS
2026-05-19
XCII

Resources: list, read, templates, and subscriptions

The primitive for data the model reads, the counterpart to tools, with URI templates for whole families and live notifications when something changes
MCPGOPROTOCOLRESOURCES
2026-05-17
XCI

Tools, Part 2: Calling, Content Types, and Structured Output

Every shape a tool result can take: the five content types, structured output validated against a schema, and the difference between a failed tool and a failed protocol
MCPGOPROTOCOLTOOLS
2026-05-15
XC

Tools, Part 1: Discovery and the inputSchema Contract

What the model actually receives when it lists a server's tools, how the schema is built from a Go type, and why a tool's annotations cannot be trusted
MCPGOPROTOCOLTOOLS
2026-05-13
LXXXIX

Transport II, Streamable HTTP: One Endpoint, Two Directions

A single HTTP path carries the whole protocol, a session id threads state across requests, and a dropped stream resumes where it left off
MCPGOPROTOCOLHTTP
2026-05-11
LXXXVIII

Transport I, stdio: Two Pipes and a Subprocess

The simplest MCP transport, built by hand on both sides with no SDK, plus the stderr rule that silently breaks servers
MCPGOPROTOCOLSTDIO
2026-05-09
LXXXVII

Why Data MCPs Need Vector Search

Vector Search Without the Vector Database, Part 1
AIMCPPOSTGRESPGVECTOR
2026-05-08
LXXXVI

The Handshake: initialize, Capabilities, and Version Negotiation

The one exchange that must happen before any other MCP method is legal, hand-rolled in Go against a real server
MCPGOPROTOCOLJSON-RPC
2026-05-07
LXXXV

JSON-RPC 2.0: The Grammar Underneath MCP

Three message shapes, one error object, and a hundred and fifty lines of Go that every MCP transport is built on
MCPGOPROTOCOLJSON-RPC
2026-05-05
LXXXIV

Why a Protocol, Not an API

Build the same tool as a REST endpoint and as an MCP server, then watch what discovery, schemas, and the callback direction cost to hand-roll
MCPGOAIPROTOCOL
2026-05-03
LXXXIII

Why Read the Wire When the SDK Hides It

Drive a real Go MCP server with four lines of JSON and watch the protocol the SDK keeps out of sight
MCPGOAIPROTOCOL
2026-05-01
LXXXII

The Pre-Commit Review Gate

AI on a Leash: Mechanical Self-Review for Claude Code
AICLAUDEDEVOPSTESTING
2026-04-22
LXXXI

The Two Failure Modes That Break Your AI Data Agent

A Case Study in Agent Psychology
MCPLLMAIOPENSEARCH
2026-02-26
LXXX

PostgreSQL to OpenSearch with PySpark on Kubernetes

Date-windowed ETL, idempotent upserts, and CronJob scheduling
KUBERNETESPOSTGRESQLOPENSEARCHPYSPARK
2026-02-25
LXXIX

GoReleaser with Cosign Signing and Syft SBOM

Signed Builds and Supply Chain Security for Go Projects
GOLANGDEVOPSSECURITY
2026-02-11
LXXVIII

AI on a Leash: Complete Go Project Configuration

AI on a Leash for Go
AIGOLANGTESTINGDEVOPS
2026-02-09
LXXVII

Ralph's Uncle

AI on a Leash
AITESTINGDEVOPSCLAUDE
2026-02-06
LXXVI

Go's Constraints and Idioms Make AI Coding Better

From Vibe Coding to Vibe Engineering
AIGOLANGCLAUDEDEVOPS
2026-02-04
LXXV

MCP Is Flawed. Build With It Anyway.

Context has always been the hard problem. MCP forces you to solve it.
MCPAIDATAARCHITECTURE
2026-01-20
LXXIV

AI Data Lake Access with MCP and S3

Building composable MCP servers for object storage
MCPAIDATAS3
2026-01-19
LXXIII

AI Data Warehouse Access with MCP and Trino

Building composable MCP servers for enterprise data
MCPAIDATATRINO
2026-01-17
LXXII

kubefwd: Forward Kubernetes Services to Localhost by Name

One command, no configuration, automatic reconnection
KUBERNETESDEVELOPMENTKUBEFWD
2026-01-04
LXXI

kubefwd in 2026: Interactive TUI and Auto-Reconnect

The complete guide to kubefwd's new features
KUBERNETESDEVELOPMENTKUBEFWDMCP
2026-01-04
LXX

AI-Assisted Kubernetes Development with kubefwd

Let your AI assistant manage cluster connections
KUBERNETESDEVELOPMENTKUBEFWDMCP
2026-01-04
LXIX

Apache NiFi: Dynamic HTTP Listeners with portpxy

Apache NiFi Part 5
APACHE NIFIKUBERNETESWEBHOOKSGO
2023-04-20
LXVIII

Apache NiFi: JOLT Transformations Part 2

Apache NiFi Part 4
APACHE NIFIJOLTJSONDATA TRANSFORMATION
2023-02-15
LXVII

Apache NiFi: JOLT Transformations Part 1

Apache NiFi Part 3
APACHE NIFIJOLTJSONDATA TRANSFORMATION
2022-12-10
LXVI

Apache NiFi: Securing Your Data Flows

Apache NiFi Part 2
APACHE NIFISECURITYKUBERNETESAUTHENTICATION
2022-10-05
LXV

Apache NiFi: Production Kubernetes Deployment

Apache NiFi Part 1
APACHE NIFIKUBERNETESDATA ENGINEERINGDEVOPS
2022-07-30