Development

Model Context Protocol Series 2A — OAuth 2.1 for MCP: Connecting Claude to Your Real Users with OpenIddict

Model Context Protocol Series 2A — OAuth 2.1 for MCP: Connecting Claude to Your Real Users with OpenIddict

A service account has admin access and no tenant context. This post shows the OAuth 2.1 flow that makes Claude authenticate as the real user: discovery endpoints, mock Dynamic Client Registration, JWT validation, and bearer token forwarding. (Claude's random callback ports get their own post — Series 2B.)

Posted in Development, AI, MCP, .NET, Security on July 2, 2026 by  ‐ 16 min read

Model Context Protocol Series 2B — The Bridge Middleware That Lets Claude Debug and Fix Its Own Tools
Version-Based Cache Validation in ABP — Keeping the Application Layer Clean Without Redis

Version-Based Cache Validation in ABP — Keeping the Application Layer Clean Without Redis

Every caching tutorial ends up polluting the application layer with GetAsync, SetAsync, and RemoveAsync. This post shows a different approach: a decorator that intercepts at the DI layer, version-based ETags that validate client caches without a round trip to the database, and why Redis becomes optional once you get the defaults right.

Posted in Development, .NET, ABP Framework, Architecture on June 28, 2026 by  ‐ 16 min read

Model Context Protocol Series 1 — Building a Production MCP Server in .NET with HTTP Transport
Custom SaaS Subscription System: ABP Framework
MCP-First Development: Letting AI Write, Run, and Maintain Your Tests
What Working With a Greek Engineer Taught Me
What Building an MCP Server Taught Me About API Design
Do You Actually Need Microservices or NoSQL to Build a Fast System? Here's How to Know.

Do You Actually Need Microservices or NoSQL to Build a Fast System? Here's How to Know.

A 9:1 read-write ratio is real, but it doesn't automatically mean your relational schema is wrong. A monolith on plain Postgres handles most traffic, most slow pages have cheaper fixes than re-architecting, and when a join genuinely is the bottleneck, a denormalized read table inside the same database solves it. No NoSQL or microservices required.

Posted in Development, Architecture, Databases on June 10, 2026 by  ‐ 13 min read

Don't Babysit One Coding Agent. Orchestrate a Fleet.