{"componentChunkName":"component---src-templates-project-template-js","path":"/projects/agentone-sap-b1-ai-automation-platform","result":{"data":{"project":{"title":"AgentOne — SAP B1 AI Automation Platform","slug":"agentone-sap-b1-ai-automation-platform","description":"A multi-tenant SaaS platform (sapb1.ai) that connects on-prem SAP Business One to cloud AI agents. A Go headless agent bridges the customer's SAP B1 (HANA / SQL Server) to a broker and connectors; a Python configurator self-provisions each tenant on GCP Cloud Run — Cloud SQL, buckets, schema bootstrap, and a per-tenant MCP server. ~22 microservices span an agent registry, downloadable connectors, Stripe billing, and MS Teams / WhatsApp integrations.","caseStudy":"## The problem\n\nSAP Business One runs the back office of tens of thousands of SMBs — but it lives\n**on-premise**, behind the firewall, on SQL Server or SAP HANA. That makes it almost\nimpossible to point a modern AI agent at it: there's no public API surface, every customer's\ninstance is different, and nobody wants to expose their ERP database to the internet.\nAgentOne (sapb1.ai) closes that gap — it lets a business *talk to its own SAP B1 data*\nthrough AI agents, without re-platforming and without opening the database to the world.\n\n## The approach\n\nAgentOne is a **multi-tenant SaaS platform** with a deliberately thin on-prem footprint and a\nfully managed cloud control plane. A customer installs one lightweight agent on their network;\neverything else — provisioning, agents, billing, integrations — is self-service in the cloud.\nEach tenant is isolated end to end and gets its own deployed services, including a\n**per-tenant MCP server**, so an AI host can connect to *that customer's* SAP B1 in natural\nlanguage.\n\n## Architecture\n\nThe runtime is a five-stage pipeline, visible in the platform's Command Center:\n\n- **Configurator (Python)** — the control plane. Provisions each tenant on **GCP Cloud Run**:\n  preflight checks, credential injection, a per-tenant **Cloud SQL** instance, GCS buckets,\n  provider/tenant DB schema bootstrap, and Cloud Run env wiring — fully automated from a single\n  \"provision\" action.\n- **Headless agent (Go)** — a small Windows service installed on the customer's network. It\n  bridges the on-prem SAP B1 (SQL Server / HANA) outward to the broker over an authenticated\n  channel, so **no inbound ports** are opened on the customer side.\n- **Broker** — routes work between the cloud agents and the headless connectors.\n- **Connectors** — translate agent intent into SAP B1 operations.\n- **Database** — the customer's SAP B1 instance, reached only through the connector.\n\nAround that core sit ~22 microservices: an **agent registry** and custom-agent images, a\ncontainer image registry, downloadable connectors (standard + headless), **Stripe billing**\n(subscriptions, usage metering, promo codes), and **MS Teams / WhatsApp** handlers — plus a\ntenant health dashboard and monitoring for the operator.\n\n## Why it's hard\n\nThe interesting engineering is in the seams: turnkey per-tenant infrastructure provisioning\n(so onboarding is self-service, not a services engagement), a keyless on-prem→cloud bridge\nthat security teams will actually approve, and a clean separation between provider-level and\ntenant-level assets so one platform safely serves many isolated customers.\n","gallery":["/case-studies/agentone-sap-b1-ai-automation-platform/1-dashboard.png","/case-studies/agentone-sap-b1-ai-automation-platform/2-connections.png","/case-studies/agentone-sap-b1-ai-automation-platform/3-downloads.png","/case-studies/agentone-sap-b1-ai-automation-platform/4-automations.png"],"date_start":"2026","date_end":null,"hours":null,"client":null,"tags":["ai","saas","sap","automation","gcp","multi-tenant"],"outcomes":["Self-service tenant provisioning on GCP Cloud Run (Cloud SQL, buckets, schema bootstrap, per-tenant MCP server)","Go headless agent bridges on-prem SAP B1 (HANA / SQL Server) to the cloud via a broker","~22 microservices: configurator, broker, connectors, agent registry, integrations","Stripe billing (subscriptions, usage, promo codes) plus MS Teams and WhatsApp integrations"],"tech_stack":["Python","Go","Next.js","GCP Cloud Run","Cloud SQL","Docker","Stripe","MCP","SAP B1"],"links":[{"label":"Live","url":"https://sapb1.ai"}],"image":{"childImageSharp":{"fluid":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='229'%20viewBox='0%200%20400%20229'%20preserveAspectRatio='none'%3e%3cpath%20d='M106%2010l-1%203c1%203%206%204%209%202h1c0%201%204%201%204-1h1l2%202%201-2h1c0%202%2010%202%2010%200h1l4%202c3%200%203%200%203-3s0-3-2-2h-4l-3%201h-1l-1-1-2%201h-1l-9-1h-9c0-1-3-2-4-1m39%200l-1%203c0%202%201%203%205%203l4-1h1c1%201%203%201%204-1h1c0%203%207%202%209-1%201-2%201-2-3-2h-16c0-1-3-2-4-1m-34%2090c-2%203%200%203%2013%203l12-1h1l7%201c7%200%208%200%207-1%200-1-2-2-5-2h-35'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","aspectRatio":1.7543859649122806,"src":"/static/b5264eb9c7d0ab4c69367ed6eba2b089/ee604/agentone.png","srcSet":"/static/b5264eb9c7d0ab4c69367ed6eba2b089/69585/agentone.png 200w,\n/static/b5264eb9c7d0ab4c69367ed6eba2b089/497c6/agentone.png 400w,\n/static/b5264eb9c7d0ab4c69367ed6eba2b089/ee604/agentone.png 800w","srcWebp":"/static/b5264eb9c7d0ab4c69367ed6eba2b089/58556/agentone.webp","srcSetWebp":"/static/b5264eb9c7d0ab4c69367ed6eba2b089/61e93/agentone.webp 200w,\n/static/b5264eb9c7d0ab4c69367ed6eba2b089/1f5c5/agentone.webp 400w,\n/static/b5264eb9c7d0ab4c69367ed6eba2b089/58556/agentone.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}},"stack_icons":[{"name":"Python","icon":{"childImageSharp":{"fixed":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20preserveAspectRatio='none'%3e%3cpath%20d='M1%201v22c2%202%2020%201%2022-1s3-22%201-21H1'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","width":24,"height":24,"src":"/static/64d0f7b1b208f14bd8dd5134b3ed7ff5/6d1ba/python.png","srcSet":"/static/64d0f7b1b208f14bd8dd5134b3ed7ff5/6d1ba/python.png 1x,\n/static/64d0f7b1b208f14bd8dd5134b3ed7ff5/a9c35/python.png 1.5x,\n/static/64d0f7b1b208f14bd8dd5134b3ed7ff5/559c9/python.png 2x","srcWebp":"/static/64d0f7b1b208f14bd8dd5134b3ed7ff5/f8bad/python.webp","srcSetWebp":"/static/64d0f7b1b208f14bd8dd5134b3ed7ff5/f8bad/python.webp 1x,\n/static/64d0f7b1b208f14bd8dd5134b3ed7ff5/f81b6/python.webp 1.5x,\n/static/64d0f7b1b208f14bd8dd5134b3ed7ff5/804d1/python.webp 2x"}}}},{"name":"GCP","icon":{"childImageSharp":{"fixed":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20preserveAspectRatio='none'%3e%3cpath%20d='M1%201v22c2%202%2020%201%2022-1s3-22%201-21H1'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","width":24,"height":24,"src":"/static/11c8c3d5bb464ba2f088929c7c3857c2/6d1ba/gcloud.png","srcSet":"/static/11c8c3d5bb464ba2f088929c7c3857c2/6d1ba/gcloud.png 1x,\n/static/11c8c3d5bb464ba2f088929c7c3857c2/a9c35/gcloud.png 1.5x,\n/static/11c8c3d5bb464ba2f088929c7c3857c2/559c9/gcloud.png 2x","srcWebp":"/static/11c8c3d5bb464ba2f088929c7c3857c2/f8bad/gcloud.webp","srcSetWebp":"/static/11c8c3d5bb464ba2f088929c7c3857c2/f8bad/gcloud.webp 1x,\n/static/11c8c3d5bb464ba2f088929c7c3857c2/f81b6/gcloud.webp 1.5x,\n/static/11c8c3d5bb464ba2f088929c7c3857c2/804d1/gcloud.webp 2x"}}}},{"name":"Docker","icon":{"childImageSharp":{"fixed":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20preserveAspectRatio='none'%3e%3cpath%20d='M1%201v22c2%202%2020%201%2022-1s3-22%201-21H1'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","width":24,"height":24,"src":"/static/56da43d828dc522662791d50808cbb00/6d1ba/docker.png","srcSet":"/static/56da43d828dc522662791d50808cbb00/6d1ba/docker.png 1x,\n/static/56da43d828dc522662791d50808cbb00/a9c35/docker.png 1.5x,\n/static/56da43d828dc522662791d50808cbb00/559c9/docker.png 2x","srcWebp":"/static/56da43d828dc522662791d50808cbb00/f8bad/docker.webp","srcSetWebp":"/static/56da43d828dc522662791d50808cbb00/f8bad/docker.webp 1x,\n/static/56da43d828dc522662791d50808cbb00/f81b6/docker.webp 1.5x,\n/static/56da43d828dc522662791d50808cbb00/804d1/docker.webp 2x"}}}},{"name":"Node.js","icon":{"childImageSharp":{"fixed":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20preserveAspectRatio='none'%3e%3cpath%20d='M1%201v22c2%202%2020%201%2022-1s3-22%201-21H1'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","width":24,"height":24,"src":"/static/a9c1179d285f13340020fc303e7afa0d/6d1ba/nodejs.png","srcSet":"/static/a9c1179d285f13340020fc303e7afa0d/6d1ba/nodejs.png 1x,\n/static/a9c1179d285f13340020fc303e7afa0d/a9c35/nodejs.png 1.5x,\n/static/a9c1179d285f13340020fc303e7afa0d/559c9/nodejs.png 2x","srcWebp":"/static/a9c1179d285f13340020fc303e7afa0d/f8bad/nodejs.webp","srcSetWebp":"/static/a9c1179d285f13340020fc303e7afa0d/f8bad/nodejs.webp 1x,\n/static/a9c1179d285f13340020fc303e7afa0d/f81b6/nodejs.webp 1.5x,\n/static/a9c1179d285f13340020fc303e7afa0d/804d1/nodejs.webp 2x"}}}},{"name":"API","icon":{"childImageSharp":{"fixed":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20preserveAspectRatio='none'%3e%3cpath%20d='M1%201v22c2%202%2020%201%2022-1s3-22%201-21H1'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","width":24,"height":24,"src":"/static/fb76c0da90f90c016ad01e4dc810443f/6d1ba/api.png","srcSet":"/static/fb76c0da90f90c016ad01e4dc810443f/6d1ba/api.png 1x,\n/static/fb76c0da90f90c016ad01e4dc810443f/a9c35/api.png 1.5x,\n/static/fb76c0da90f90c016ad01e4dc810443f/559c9/api.png 2x","srcWebp":"/static/fb76c0da90f90c016ad01e4dc810443f/f8bad/api.webp","srcSetWebp":"/static/fb76c0da90f90c016ad01e4dc810443f/f8bad/api.webp 1x,\n/static/fb76c0da90f90c016ad01e4dc810443f/f81b6/api.webp 1.5x,\n/static/fb76c0da90f90c016ad01e4dc810443f/804d1/api.webp 2x"}}}}]}},"pageContext":{"slug":"agentone-sap-b1-ai-automation-platform"}},"staticQueryHashes":["3724428426"]}