
Sofvie Inc.
A production tool-using foundation-model agent: a real agentic loop that plans, calls tools, validates every tool output, and synthesizes an answer over multi-tenant data — roughly 2 Bedrock invocations and ~42 MCP tool calls per question, with cross-tenant access made structurally impossible by construction.
The customer
Sofvie Inc. is a North-America-headquartered SaaS provider focused on industrial and mining safety and operational analytics, serving industrial-safety customers across multiple geographies. It runs a multi-tenant platform on a database-per-client isolation model. The agentic workload in this case study is embedded directly inside Sofvie's commercial product and exposed to in-product analytical users at each client tenant.
The challenge
Sofvie's analytical users needed to ask questions of their data in plain language, but that data spans roughly 40 tables behind 800+ existing Django REST API endpoints, under strict per-tenant isolation and privacy-relevant PII columns. A single-shot LLM prompt was infeasible: it could not reason reliably over the multi-table schema, it ballooned cost by sending the full schema on every prompt, and it offered no deterministic validation chokepoint. Sofvie's starting point was a proof-of-concept that proved a tool-using agent loop was viable but lacked every production control — no authentication, no tenant isolation, a regex-based SQL check, and a single internet-exposed host.
The solution
VeUP designed an MCP-orchestrated agent on Amazon Bedrock rather than a long-context prompt or a single-shot model. A user question enters an async agent runtime; a first Bedrock invocation produces a tool plan, and the agent then issues iterative tool calls to a bespoke Model Context Protocol (MCP) server that wraps Sofvie's 800+ existing Django REST endpoints. The team deliberately chose to wrap those endpoints rather than have the model generate SQL directly — a design pivot that kept the model's job to intent-to-tool matching and made cost-optimized Amazon Nova Lite economically viable. A second Bedrock invocation synthesizes the redacted result into a natural-language answer. The measured production cost signature is roughly 2 Bedrock invocations plus ~42 MCP tool calls per question — the telemetry of a genuine agentic loop.
Model selection was evaluated for tool-using agent workloads: Amazon Nova Lite as the cost-optimized primary, Amazon Nova Pro as the higher-reasoning fallback, and Anthropic Claude on Bedrock retained as a qualified A/B and disaster-recovery alternate over the same MCP tool surface. Keeping inference on Bedrock gave Sofvie a single AWS-native control plane for model-invocation logging, IAM, and KMS — with no GPU capacity planning for a team with no ML-platform function.
Security and Responsible-AI controls are structural, not bolt-ons. Authorization is identity-scoped tool authority: the agent never holds a database handle — the runtime resolves a signed JWT to exactly one tenant database and binds every tool call to that read-only, SSL-required connection, so cross-tenant access is structurally impossible rather than policy-enforced. The MCP server is a single safety chokepoint that AST-validates every proposed SQL string against an allow-list and redacts PII columns before any result re-enters the model's context. A prompt-injection adversarial corpus and a 100+ representative-question golden regression set run in CI on every prompt, model, or tool-surface change, with a thumbs-feedback human-in-the-loop signal. The production agent went live on 2026-05-13, 28 days ahead of the contracted close, with zero cross-tenant incidents at go-live.

Production outcomes
| KPI | Result |
|---|---|
| Measured agent-loop cost signature | ~2 Bedrock invocations + ~42 MCP tool calls per question — bona fide tool-using-agent telemetry, not a one-shot LLM call. |
| Production go-live | Live 2026-05-13 — 28 days ahead of contracted close. |
| Multi-tenant isolation | 0 cross-tenant data-access incidents at go-live; JWT-driven per-tenant DB routing — isolation by construction. |
| Tool surface wrapped | 800+ existing Django REST endpoints abstracted behind the MCP tool layer — 0 schema tokens injected into LLM prompts. |
| Agent-quality regression coverage | 100+ representative-question golden set plus a prompt-injection adversarial corpus, gated in CI. |
Customer voice
Sofvie's engineering team confirmed the wrapped 800+ endpoint surface and the MCP-over-API design direction in a customer model-selection and architecture review, validating the production agent stack as integrated and demoed ahead of production cutover.
Amazon Bedrock (Nova Lite primary, Nova Pro fallback, Anthropic Claude alternate) · Model Context Protocol (MCP) server on Amazon ECS / EKS Fargate · Application Load Balancer · AWS Certificate Manager · Amazon VPC (multi-AZ) · VPC Interface Endpoints (Bedrock, Secrets Manager, KMS, ECR, CloudWatch Logs) · AWS IAM · AWS Secrets Manager · AWS KMS · Amazon CloudWatch · AWS X-Ray · Amazon ECR · Amazon RDS for MariaDB (per-tenant).