EnterpriseLab: A Full-Stack Platform for developing and deploying agents in Enterprises
Organizations: Fujitsu Research India.
Abstract
Deploying AI agents in enterprise environments requires balancing capability with data sovereignty and cost constraints. While small language models offer privacy-preserving alternatives to frontier models, their specialization is hindered by fragmented development pipelines that separate tool integration, data generation, and training. We introduce EnterpriseLab, a full-stack platform that unifies these stages into a closed-loop framework. EnterpriseLab provides (1) a modular environment exposing enterprise applications via Model Context Protocol, enabling seamless integration of proprietary and open-source tools; (2) automated trajectory synthesis that programmatically generates training data from environment schemas; and (3) integrated training pipelines with continuous evaluation. We validate the platform through EnterpriseArena, an instantiation with 15 applications and 140+ tools across IT, HR, sales, and engineering domains. Our results demonstrate that 8B-parameter models trained within EnterpriseLab match GPT-4o's performance on complex enterprise workflows while reducing inference costs by 8-10x, and remain robust across diverse enterprise benchmarks, including EnterpriseBench (+10%) and CRMArena (+10%). EnterpriseLab provides enterprises a practical path to deploying capable, privacy-preserving agents without compromising operational capability.
Figures & tables
| Model | LLM | Tool |
|---|---|---|
| Eval | Eval | |
| Qwen3-8B AGRPO (original env) | 0.50 | 0.20 |
| Qwen3-8B AGRPO (modified env) | 0.43 | 0.15 |
| + 200 samples incremental training | 0.48 | 0.18 |
Appendix figures & tables17 assets
Supplementary material from the paper’s appendix.
Appendix
| Model | Score |
|---|---|
| GPT-4o | 0.47 |
| ToolAce | 0.41 |
| XLAM-2-70B | 0.40 |
| Qwen3-4B (Base) | 0.27 |
| Qwen3-4B (SFT) | 0.32 |
| Qwen3-4B (Agentic GRPO) | 0.38 |
| Model | Score |
|---|---|
| GPT-4o | 0.44 |
| ToolAce | 0.39 |
| XLAM-2-70B | 0.39 |
| Qwen3-4B (Base) | 0.25 |
| Qwen3-4B (SFT) | 0.31 |
| Qwen3-4B (Agentic GRPO) | 0.36 |
| Model | Input | Output |
|---|---|---|
| ($ per 1M tokens) | ($ per 1M tokens) | |
| GPT-4o | 5.00 | 15.00 |
| Claude-3.5-Sonnet | 3.00 | 15.00 |
| Gemini-2.5 Pro | 1.25 | 10.00 |
| Qwen3-8B Agentic GRPO | 0.50–1.00 | |
| Benchmark | Domain Focus | Multi-App Flow | Dynamic Data | Enterprise Constraints | Key Limitation |
|---|---|---|---|---|---|
| AgentBench ( Liu et al., 2024 ) | General Reasoning | ✗ | ✗ | ✗ | No Enterprise Context |
| WebArena ( Zhou et al., ) | General Web UI | ✗ | ✓ (Live Sites) | ✗ | Public Web, No Authorization |
| SWE-bench ( Yang et al., ) | Software Eng. | ✗ (GitHub only) | ✗ (Repo Snapshot) | ✗ | Coding Domain Only |
| WorkArena ( Drouin et al., 2024 ) | IT/ServiceNow | ✗ (Single Platform) | ✓ (Live UI) | ✓ | Single SaaS Ecosystem |
| CRMArena ( Huang et al., 2025a ) | CRM | ✗ (Salesforce) | ✗ (Static) | ✓ | Single Domain (CRM) |
| Tau-bench ( Yao et al., 2025 ) | Customer Service | ✗ | ✓ (Stateful) | ✗ | Limited Tool Diversity |
| Domain | Task Description | Task Category | Tools Used |
|---|---|---|---|
| Software Engineering | Create a project named ’Nexus’, add frontend, backend, database modules, and create issues in each module. | Multi-step CRUD | create_project , create_module (×3), create_issue (×3), send_channel_message |
| HR & Recruitment | Read job description from Documents, fetch shortlisted resumes, identify top candidates, and coordinate interview scheduling. | Search & Orchestration | list_files , read_file_content , search_files , get_employees , send_email (×2) |
| IT & Project Mgmt | Announce MCP agent online in general channel, create MCP-adapters issue in Sprint 2, verify it appears in module. | Communication & CRUD | send_channel_message , create_issue , list_issues , create_cycle |
| CRM & Business | Create customer TechCorp, add three products to catalog, generate sales order, create invoice, email confirmation. | Multi-entity Workflow | create_customer , create_product (×3), create_order , create_invoice , send_email |
| DevOps | Search for repository, fork to personal namespace, create feature branch, push config files, open merge request. | Version Control | search_repositories , fork_repository , create_branch , push_files , create_merge_request |
| File & Storage | List project documents, create Finance folder in OwnCloud, upload monthly reports, share folder info via channel. | Data Organization | list_files , create_folder , upload_file (×2), get_storage_info , send_channel_message |
| Domain | % | Category | % |
|---|---|---|---|
| IT & Project Mgmt | 22 | CRUD Operations | 35 |
| Software Engineering | 18 | Search & Orchestration | 28 |
| Human Resources | 15 | Multi-entity Workflow | 18 |
| CRM & Business | 14 | Version Control | 12 |
| DevOps | 12 | Cross-functional | 7 |
| Communication | 10 |
| Benchmark | Train (Size) | Test (Size) |
|---|---|---|
| EnterpriseArena | 500 | 500 |
| EnterpriseBench | 700 | 500 |
| CRMArena | 600 | 500 (Function Calling) |
| Tau-Bench | 300 (Retail), 300 (Airline) | 115 (Retail), 50 (Airline) |
| Sym. | Meaning | Sym. | Meaning |
|---|---|---|---|
| Policy model (LLM) | Group size (rollouts/query) | ||
| Trainable params (LoRA) | Trajectory index | ||
| Frozen reference policy | Trajectory set for query | ||
| Training dataset | History (msgs buffer) | ||
| Batch sampled from | Max tool steps limit | ||
| Single query/task | Thought tokens ( <think> ) |
| Profession | Gender | Age |
|---|---|---|
| Software Engineer | M | 25 |
| Senior Engineer | F | 29 |
| Business Development Representative | F | 26 |
| Sales Manager | F | 35 |
| IT Engineer | M | 29 |
| IT Security Head | M | 32 |
| Category | MCP Server | # Tools | Representative Tools |
| Communication | RocketChat | 12 | send_user_message , send_channel_message , get_channels |
| Mail System | 8 | send_email , read_email , search_emails , draft_email | |
| Development | GitLab MCP | 22 | create_merge_request , create_issue , push_files , execute_graphql |
| Operations & IT | Zammad | 10 | create_ticket , assign_agent , update_status , add_note |
| Plane (Jira) | 14 | create_issue , add_milestone , assign_task , update_state | |
| Human Resources | Frappe HR | 14 | get_employee , create_leave_request , get_attendance , get_payroll |
| Tool Name | Description & Key Parameters |
|---|---|
| send_user_message | Send direct message to user (e.g., ’john.doe’, ’@john.doe’). Params: channel (string, required), message (string, required) |
| send_channel_message | Send message to channel (e.g., ’general’, ’#general’). Params: channel (string, required), message (string, required) |
| get_channels | List all available channels. Params: None |
| get_channel_messages | Get recent messages from a channel. Params: channel (string, required), count (integer, optional) |
| create_channel | Create new public or private channel. Params: name (string, required), description (string, optional), private (boolean, optional) |
| get_user_info | Get information about current authenticated user. Params: None |
| Tool Name | Description & Key Parameters |
|---|---|
| send_email | Send email with attachments (supports plain text, HTML, and multipart formats). Params: to (string, required), subject (string, required), body (string, required), attachments (array, optional) |
| draft_email | Create draft email without sending. Params: to (string, required), subject (string, required), body (string, required) |
| read_email | Retrieve complete email content by ID with attachment info. Params: email_id (string, required) |
| search_emails | Search emails by subject, sender, or date range. Params: query (string, required), from_date (string, optional), to_date (string, optional) |
| list_folders | List all mail folders (inbox, sent, drafts, etc.). Params: None |
| move_email | Move email to specified folder. Params: email_id (string, required), folder (string, required) |
| Tool Name | Description & Key Parameters |
|---|---|
| Repository Management | |
| create_repository | Create new GitLab project. Params: name (string, required), description (string, optional), visibility (string, optional), initialize_with_readme (boolean, optional) |
| search_repositories | Search for GitLab projects. Params: search (string, required), page (number, optional), per_page (number, optional, max 100) |
| fork_repository | Fork project to your account or namespace. Params: project_id (string, optional), namespace (string, optional) |
| get_repository_tree | Get repository file tree structure. Params: project_id (string, optional), path (string, optional), ref (string, optional) |
| File Operations | |
| Tool Name | Description & Key Parameters |
|---|---|
| Zammad MCP (IT Ticketing) | |
| create_ticket | Create new support ticket. Params: title (string, required), description (string, required), priority (string, optional), category (string, optional) |
| get_ticket | Retrieve ticket details by ID. Params: ticket_id (string, required) |
| update_ticket | Update ticket status, priority, or assignee. Params: ticket_id (string, required), status (string, optional), priority (string, optional), assignee_id (string, optional) |
| search_tickets | Search tickets by criteria. Params: query (string, required), status (string, optional), assignee (string, optional) |
| add_note | Add internal or public note to ticket. Params: ticket_id (string, required), note (string, required), internal (boolean, optional) |
| Tool Name | Description & Key Parameters |
|---|---|
| Frappe HR MCP | |
| get_employees | Retrieve employee list with filters. Params: department (string, optional), designation (string, optional), status (string, optional) |
| get_employee | Get employee details by ID. Params: employee_id (string, required) |
| create_employee | Onboard new employee. Params: first_name (string, required), last_name (string, required), email (string, required), department (string, required) |
| get_departments | List organization departments. Params: None |
| get_attendance | Retrieve attendance records. Params: employee_id (string, optional), from_date (string, optional), to_date (string, optional) |
| Tool Name | Description & Key Parameters |
|---|---|
| File System MCP | |
| read_file | Read file contents. Params: path (string, required) |
| write_file | Write data to file. Params: path (string, required), content (string, required) |
| list_directory | List directory contents. Params: path (string, required) |
| create_directory | Create new directory. Params: path (string, required) |
| Web Browser MCP | |