Professional notes by Craig Johnston
long-form, short-form, working drafts · since 2008
long-form, short-form, working drafts · since 2008
VOL. XIX · MMXXVI
124 NOTES IN PRINT
124 NOTES IN PRINT
Posts
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
2026-05-21
XCIIIPrompts: 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
2026-05-19
XCIIResources: 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
2026-05-17
XCITools, 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
2026-05-15
XCTools, 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
2026-05-13
LXXXIXTransport 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
2026-05-11
LXXXVIIITransport 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
2026-05-09
LXXXVIIWhy Data MCPs Need Vector Search
Vector Search Without the Vector Database, Part 1
2026-05-08
LXXXVIThe 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
2026-05-07
LXXXVJSON-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
2026-05-05
LXXXIVWhy 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
2026-05-03
LXXXIIIWhy 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
2026-05-01
LXXXIIThe Pre-Commit Review Gate
AI on a Leash: Mechanical Self-Review for Claude Code
2026-04-22
LXXXIThe Two Failure Modes That Break Your AI Data Agent
A Case Study in Agent Psychology
2026-02-26
LXXXPostgreSQL to OpenSearch with PySpark on Kubernetes
Date-windowed ETL, idempotent upserts, and CronJob scheduling
2026-02-25
LXXIXGoReleaser with Cosign Signing and Syft SBOM
Signed Builds and Supply Chain Security for Go Projects
2026-02-11
LXXVIIIAI on a Leash: Complete Go Project Configuration
AI on a Leash for Go
2026-02-09
LXXVIIRalph's Uncle
AI on a Leash
2026-02-06
LXXVIGo's Constraints and Idioms Make AI Coding Better
From Vibe Coding to Vibe Engineering
2026-02-04
LXXVMCP Is Flawed. Build With It Anyway.
Context has always been the hard problem. MCP forces you to solve it.
2026-01-20
LXXIVAI Data Lake Access with MCP and S3
Building composable MCP servers for object storage
2026-01-19
LXXIIIAI Data Warehouse Access with MCP and Trino
Building composable MCP servers for enterprise data
2026-01-17
LXXIIkubefwd: Forward Kubernetes Services to Localhost by Name
One command, no configuration, automatic reconnection
2026-01-04
LXXIkubefwd in 2026: Interactive TUI and Auto-Reconnect
The complete guide to kubefwd's new features
2026-01-04
LXXAI-Assisted Kubernetes Development with kubefwd
Let your AI assistant manage cluster connections
2026-01-04
LXIXApache NiFi: Dynamic HTTP Listeners with portpxy
Apache NiFi Part 5
2023-04-20
LXVIIIApache NiFi: JOLT Transformations Part 2
Apache NiFi Part 4
2023-02-15
LXVIIApache NiFi: JOLT Transformations Part 1
Apache NiFi Part 3
2022-12-10
LXVIApache NiFi: Securing Your Data Flows
Apache NiFi Part 2
2022-10-05
LXVApache NiFi: Production Kubernetes Deployment
Apache NiFi Part 1
2022-07-30