# Derek Ethan Davis — full blog contents Site: https://blog.derekethandavis.com Author: Derek Ethan Davis --- # Shipping posts from the command line URL: https://blog.derekethandavis.com/blog/shipping-posts-from-the-command-line Published: 2026-08-10 TL;DR: Writing directly to Sanity via `bun run publish post.md` — no Studio, no git commit, no manual redeploy. Webhook handles the rebuild. The Sanity Studio is nice, but sometimes I want to write in vim and ship a post without opening a browser tab. So I built a CLI.How it worksThe CLI reads a markdown file with frontmatter, converts the body to portable text, and creates a document in Sanity via the Content Lake API.bun run publish drafts/my-post.mdBehind the scenes:Frontmatter maps directly to the post schemaMarkdown body becomes portable text blocks (paragraphs, headings, code fences, links)The existing Sanity webhook fires on document creationGitHub `repository_dispatch` triggers CICloudflare Pages redeploys in ~90 secondsWhy not just commit MDX?I could — Astro content collections handle MDX fine. But Sanity is the source of truth now, and going through the Studio (or its API) means every post shows up in the Studio's edit view. If I need to fix a typo three weeks later, I don't have to remember whether it lives in git or in Sanity. It's all in Sanity.The tradeoff: markdown gets a lossy conversion to portable text on the way in. Simple inline formatting (bold, italic, code, links) survives. Anything exotic doesn't. For engineering posts this has been fine. --- # New Blog With Studio URL: https://blog.derekethandavis.com/blog/new-blog-with-studio Published: 2026-08-10 TL;DR: This is my new blog with the studio This is my new blog about things that I like I guess Hello from R2 0:03 Your browser does not support the audio element. TranscriptThis is a test tone uploaded via bun run upload-audio, served from Cloudflare R2 at audio.derekethandavis.com. --- # Azure DevOps ships a remote MCP server — what it means for agentic workflows URL: https://blog.derekethandavis.com/blog/azure-devops-mcp-ga Published: 2026-08-10 TL;DR: Azure DevOps' MCP server is now hosted at mcp.dev.azure.com/{org} over streamable HTTP. VS Code + Copilot, Foundry, and Copilot Studio work today; Claude Desktop, Claude Code, ChatGPT, and Cursor are blocked on Entra dynamic client registration. Local server remains an option and stays feature-parity. Microsoft announced GA of the Azure DevOps Remote MCP Server this week. The short version: you no longer need to run a local MCP process to give an AI assistant contextual access to your ADO projects. You point it at a hosted endpoint and Entra handles the rest.For anyone building agent workflows against work items, repos, or pipelines, this materially shortens the setup path. It also draws a fresh line between the clients that can talk to it today and the ones that can't.What actually shippedThe hosted endpoint speaks streamable HTTP transport. The minimum configuration is a three-line entry in your `mcp.json`:{ "servers": { "ado-remote-mcp": { "url": "https://mcp.dev.azure.com/{organization}", "type": "http" } }, "inputs": [] }That's it — no local process, no PAT rotation, no self-hosted infra. Auth flows through Microsoft Entra, which is the pivot point for the client-support story below.The Entra dependency is the real storyBecause auth runs through Entra, two things follow:1. Your ADO org has to be backed by an Entra tenant. Standalone orgs on Microsoft accounts (MSAs) are excluded from the hosted server. If you're on an MSA, keep running local. 2. Your client has to support either dynamic OAuth client registration or client-ID metadata documents in Entra. Today, that's a fairly small set.Supported at GA with zero extra onboarding:VS Code with GitHub Copilot — the most fleshed-out story; Copilot gets work-item, PR, repo, and pipeline context inline.Microsoft Foundry — connects via the tools catalog.Microsoft Copilot Studio — low-code agent builder now has ADO as a first-class tool.Visual Studio, GitHub Copilot CLI, and the GitHub Copilot app also work.Explicitly not supported yet: Claude Desktop, Claude Code, ChatGPT, Cursor and similar. Microsoft says they're working with the Entra team to enable the required client-registration paths.That's a notable gap. Most of the agent development I do runs through Claude Code and Cursor, and those are exactly the tools that would benefit most from streamed MCP context over an Entra-authenticated endpoint. Until dynamic client registration lands, those clients have to keep pointing at the local Azure DevOps MCP server.Local vs remote: what to run todayMicrosoft explicitly says feature parity between local and remote is a maintained commitment. They recently consolidated the local server's toolset to match the remote surface, which is a good signal.Practical guidance for anyone deciding right now:On VS Code / Copilot / Foundry / Copilot Studio — go remote. Nothing to install, Entra handles auth, done.On Claude Code, Cursor, ChatGPT — stay local. You get the same tools; you just wear the runtime yourself.Building a custom MCP client — implement dynamic client registration against Entra and you'll be ready when the remote endpoint accepts you. Building for the local server is a shorter path today.What this changes about agent architectureFor folks like me who orchestrate agent loops that touch multiple systems (GitHub, ADO, ticketing, monitoring), the remote endpoint means one fewer sidecar process per developer machine. That matters more than it sounds — sidecars are where auth expires, versions drift, and support tickets come from.The bigger architectural signal is that Microsoft has decided MCP is worth hosting as first-party infrastructure with Entra as the auth boundary. That sets a template. Expect similar hosted MCP servers from the other Microsoft platform teams over the next few quarters, all funneling through Entra.If you're on the ADO stack and running agents against it, the setup got easier. If you're on Claude or Cursor, you're waiting on client-registration work. Either way, worth pinning the official docs and watching the Entra changelog. --- # Starting a blog for the workshop URL: https://blog.derekethandavis.com/blog/welcome Published: 2026-08-09 TL;DR: New personal blog on Astro + Cloudflare Pages, MDX for content, Sanity CMS wiring next. Built to be the canonical home for my public build work — AI agents, edge infra, WorkIQ, MSP tooling. For a while my public build work has been scattered across GitHub READMEs, subdomain deploys, and half-finished SelfIQ drafts. This site is where it consolidates.What lives hereBlog posts on the things I'm actively building — AI agent systems, Cloudflare edge infra, the WorkIQ house stack, MSP tooling, and the occasional philosophy or memoir detour.Projects — a running list of what's live, what's active, and what's alpha.About — the shorter answer to "what do you do."How it's builtStandard house stack, minus the API tier:Astro static, MDX content collections, typed frontmatter via ZodCloudflare Pages for hosting — same edge as everything else I runSanity CMS is coming — will replace the local MDX files without changing routes or componentsSEO baked in: sitemap, RSS, JSON-LD Article schema, OpenGraph, Twitter cardsAIO baked in: `llms.txt` and `llms-full.txt` so AI crawlers can find and cite content efficientlyThe whole thing will move into a WorkIQ skill once I've refactored the packaging so the same scaffold can be used for other author-owned public sites (client dossiers, project microsites, docs).What to expectCadence will be irregular — posts drop when something's worth writing about, not on a calendar. Feed's at /rss.xml. AI-friendly index at /llms.txt. ---