# IMTI > Craig Johnston is a Chief Engineer at Deasil Works who wrote Advanced Platform Development with Kubernetes, and this site is the 2026 rebuild of that platform plus notes on MCP and Go. Craig Johnston has been writing here continuously since 2008. Each post is a long-form, short-form, or working-draft note grounded in real production work. ## Recent notes - [Don't Pay to Host Your Hobby](https://imti.co/fewbottles/): fewbottles.com is GitHub Pages, Cloudflare, four JSON files, and a bitmask in localStorage - [Plexara: A Managed MCP Layer for Data Platforms](https://imti.co/plexara/): Deasil operates the endpoint. The engine is txn2/mcp-data-platform, Apache-2.0. I wrote the harness this replaced. - [Don't Impersonate the Caller. Put the Credential on the Connection.](https://imti.co/mcp-connection-credential/): Trino, S3, DataHub, and vendor APIs do not share an identity model. They all have a credential. - [OAuth in Front of Keycloak](https://imti.co/mcp-oauth-broker/): Pre-registered clients and PKCE. Login stays in the IdP. - [REST APIs for Agents](https://imti.co/mcp-four-tools/): Index the OpenAPI document. Search across catalogs. Then call one operation. - [Sessions Left the Protocol. Put the Handle in the Argument.](https://imti.co/mcp-session-handles/): platform_info mints dps_…; the model threads it. Go SDK v1.7.0, MCP 2026-07-28. - [Don't Ingest the CSV. Point Hive at It.](https://imti.co/hive-csv-table/): Hive still maps a table name to a directory of files - [Don't Sandbox Python. Embed Starlark.](https://imti.co/starlark-agents/): starlark-go in a Go server: FileOptions, host bindings, and a cancel watchdog - [God Packages and Other Slow Failures](https://imti.co/go-architecture-ratchet/): Structural ratchets for AI-assisted Go, six months into make verify - [Do Cross-References Help LLM Agents Complete Documents?](https://imti.co/graph-completion-benchmark/): The agent found every page certified unreachable. Links cut search cost and keep working when search is off; they do not change what it reaches - [Knowledge Pollution: Verification Displacement, Capability, and the Price of a Curation Gate](https://imti.co/knowledge-pollution-benchmark/): A wrong note that passed review spread only where the agent could have checked it, and only on Haiku 4.5: 16 of 24, against 0 of 24 on Sonnet 5 and Opus 5 - [On-Prem GPUs in a Boring Kubernetes Cluster](https://imti.co/on-prem-gpus-kubernetes/): Adding your own GPUs to the platform with the NVIDIA GPU Operator - [One Cluster Across Clouds and Your Garage: Hybrid k3s With WireGuard](https://imti.co/hybrid-k3s-wireguard-cluster/): A single Kubernetes cluster spanning cloud regions and your own hardware, encrypted over the public internet - [What Happened to the Blockchain Chapter](https://imti.co/what-happened-to-blockchain-chapter/): Why the chapter is cut from this rebuild, and where tamper-evidence lives in 2026 - [Serverless Without the Cloud: Knative on Your Cluster](https://imti.co/knative-serverless-functions/): Scale-to-zero functions you own, after OpenFaaS moved the good parts behind a paywall - [Write-Heavy and Always On: Cassandra and Scylla on Kubernetes](https://imti.co/cassandra-scylla-kubernetes/): Running Cassandra and Scylla on K8ssandra and the Scylla Operator after Rook dropped its own - [Event-Driven Object Processing: Bucket Events to Jobs](https://imti.co/event-driven-object-processing/): Object storage that triggers work, a self-hosted answer to S3 plus Lambda on your own cluster - [An Instrument for MCP Agent Studies](https://imti.co/mcp-agent-benchmark-harness/): The harness behind two DOI-archived benchmark reports, and why a study premise can be killed in one working day - [A Multi-User Data Lab: JupyterHub on Your Platform](https://imti.co/jupyterhub-data-lab/): Self-hosted notebooks for the whole team, on Keycloak SSO, wired to the lakehouse and every data source you own - [IoT Ingest You Own: MQTT With Mosquitto on Kubernetes](https://imti.co/mqtt-mosquitto-iot-ingest/): Lightweight device messaging into the platform, bridged to Kafka, with the Mosquitto 2.0 change the old guides miss - [See the Whole Platform: Prometheus, Grafana, Loki, and OpenTelemetry](https://imti.co/kubernetes-observability-stack/): Self-hosted observability for everything you built, on the open standard instead of a per-host APM bill - [When Do Agents Use Stored Knowledge?](https://imti.co/when-agents-use-stored-knowledge/): A benchmark that killed its own hypothesis: strong models re-derive what they can check, and a weak model trusts a stale note over the evidence in front of it - [Cilium: One eBPF Data Plane for Networking, Security, and Encryption](https://imti.co/cilium-ebpf-networking/): The CNI that replaced Weave Net, kube-proxy, and a hand-rolled WireGuard overlay with a single component - [containerd Without Docker: the Runtime Under Your Cluster](https://imti.co/containerd-without-docker/): The container runtime the kubelet actually uses, and how to configure and debug it now that the Docker shim is gone - [Does a Semantic Knowledge Layer Make an Agent Measurably Better?](https://imti.co/knowledge-layer-benchmark/): A reproducible benchmark: 42.7% to 98.7% on knowledge-trap questions, and a platform that learns from empty ## Series - [advanced platform development](https://imti.co/series/advanced-platform-development/) (28 notes) - [ai](https://imti.co/series/ai/) (3 notes) - [ai on a leash](https://imti.co/series/ai-on-a-leash/) (5 notes) - [apache nifi](https://imti.co/series/apache-nifi/) (5 notes) - [blockchain](https://imti.co/series/blockchain/) (3 notes) - [data science](https://imti.co/series/data-science/) (3 notes) - [kubernetes](https://imti.co/series/kubernetes/) (27 notes) - [linear algebra crash course](https://imti.co/series/linear-algebra-crash-course/) (12 notes) - [linear algebra in go](https://imti.co/series/linear-algebra-in-go/) (10 notes) - [mcp by design](https://imti.co/series/mcp-by-design/) (11 notes) - [mcp on the wire](https://imti.co/series/mcp-on-the-wire/) (20 notes) - [mcp studies](https://imti.co/series/mcp-studies/) (5 notes) - [vector search without the vector database](https://imti.co/series/vector-search-without-the-vector-database/) (3 notes) ## Tags - [kubernetes](https://imti.co/tags/kubernetes/) (61 notes) - [go](https://imti.co/tags/go/) (54 notes) - [mcp](https://imti.co/tags/mcp/) (48 notes) - [ai](https://imti.co/tags/ai/) (45 notes) - [data](https://imti.co/tags/data/) (39 notes) - [foss](https://imti.co/tags/foss/) (34 notes) - [platform](https://imti.co/tags/platform/) (29 notes) - [data science](https://imti.co/tags/data-science/) (25 notes) - [linear algebra](https://imti.co/tags/linear-algebra/) (22 notes) - [protocol](https://imti.co/tags/protocol/) (22 notes) - [python](https://imti.co/tags/python/) (18 notes) - [security](https://imti.co/tags/security/) (18 notes) - [agents](https://imti.co/tags/agents/) (17 notes) - [math](https://imti.co/tags/math/) (17 notes) - [devops](https://imti.co/tags/devops/) (15 notes) - [linear algebra: python](https://imti.co/tags/linear-algebra-python/) (12 notes) - [matrices](https://imti.co/tags/matrices/) (11 notes) - [linear algebra: golang](https://imti.co/tags/linear-algebra-golang/) (10 notes) - [machine learning](https://imti.co/tags/machine-learning/) (8 notes) - [postgresql](https://imti.co/tags/postgresql/) (7 notes) - [apache nifi](https://imti.co/tags/apache-nifi/) (6 notes) - [development](https://imti.co/tags/development/) (6 notes) - [docker](https://imti.co/tags/docker/) (6 notes) - [elasticsearch](https://imti.co/tags/elasticsearch/) (6 notes) - [ingress](https://imti.co/tags/ingress/) (6 notes) - [sdlc](https://imti.co/tags/sdlc/) (6 notes) - [testing](https://imti.co/tags/testing/) (6 notes) - [benchmark](https://imti.co/tags/benchmark/) (5 notes) - [blockchain](https://imti.co/tags/blockchain/) (5 notes) - [claude](https://imti.co/tags/claude/) (5 notes) - [json-rpc](https://imti.co/tags/json-rpc/) (5 notes) - [microservices](https://imti.co/tags/microservices/) (5 notes) - [iot](https://imti.co/tags/iot/) (4 notes) - [kubectl](https://imti.co/tags/kubectl/) (4 notes) - [ci/cd](https://imti.co/tags/ci/cd/) (3 notes) - [data engineering](https://imti.co/tags/data-engineering/) (3 notes) - [database](https://imti.co/tags/database/) (3 notes) - [json](https://imti.co/tags/json/) (3 notes) - [kubefwd](https://imti.co/tags/kubefwd/) (3 notes) - [opensearch](https://imti.co/tags/opensearch/) (3 notes) - [raspberry pi](https://imti.co/tags/raspberry-pi/) (3 notes) - [s3](https://imti.co/tags/s3/) (3 notes) - [trino](https://imti.co/tags/trino/) (3 notes) - [utils](https://imti.co/tags/utils/) (3 notes) ## Elsewhere - [Deasil Works](https://deasil.works) - [txn2](https://txn2.com) - [Plexara](https://plexara.io) - [GitHub](https://github.com/cjimti) - [X](https://x.com/cjimti) - [LinkedIn](https://linkedin.com/in/cjimti) ## Full archive - [/sitemap.xml](https://imti.co/sitemap.xml) - complete URL index - [/index.xml](https://imti.co/index.xml) - RSS feed of all notes