An MCP server in front of a business platform
Twenty-six typed tools instead of one query tool, two auth schemes, bounded results, and the authorisation rule that decides whether it is safe at all.
Posts in the Deep dive category.
Twenty-six typed tools instead of one query tool, two auth schemes, bounded results, and the authorisation rule that decides whether it is safe at all.
Two verdicts force a system to call missing data a failure. The third one — to be checked — is what separates a decision aid from an automatic rejection.
Referencing by code instead of by FK buys real decoupling and costs a guarantee. An incident, its two faults, and why the second one was worse.
JSONB stops paying off eventually. Here is how a user-drawn form becomes a real typed table, versioned outside django_migrations, additively.
SET_DNS_ZONE replaces everything. That one constraint decides where truth lives, how you delete a record, and why the mail block is published late.
Every OCR tutorial ends at image_to_string. Production starts there — attaching the text to a field, storing failures, and a confidence score that is not one.
Conditional form logic in the browser is presentation, not validation. Keeping show, enable and require independent — and the half that must exist twice.
A form builder means the form does not exist at import time. Here is the dispatch, the degradation rule, and the N+1 that a dict literal hides.
Schema per tenant is the easy part. This is the configuration that decides whether your image builds, whether a Postgres blip takes the fleet down, and whether migrations run.
Waiting for Postgres is the easy line. Extensions before migrations, assets from the image, and one release job instead of four concurrent migrations.
Tell us about your needs in IoT, GIS, or custom development — we'll get back to you within 24h.