enterprise-mcp-server
Provides tools for interacting with Google BigQuery, including dataset and table discovery, schema retrieval, dry-run cost estimation, and read-only query execution with scan limits.
Provides tools for interacting with Sage HR, enabling employee directory lookup, leave and time-off management, and expense management with server-side privacy protection and PII masking.
Provides tools for interacting with Xero Accounting, enabling management of accounts, invoices, credit notes, and manual journals, with rate limiting and error handling for LLM self-correction.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@enterprise-mcp-serverSummarize outstanding Xero invoices over $10k and show which are overdue"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Enterprise Multi-Service MCP Server (enterprise-mcp-server)
Enterprise-grade Model Context Protocol (MCP) server written in TypeScript and optimized for containerized execution on Google Cloud Run over StreamableHTTP. Built to connect Google Gemini Enterprise (via custom data store actions) and LLM agents with enterprise data sources: Xero Accounting, Google BigQuery, Google Cloud Firestore, and Sage HR (59 standardized tools).
Quickstart: Deploy in Under 2 Minutes
Deploy this server into your Google Cloud environment in under 2 minutes using either the Local Web Studio (Recommended) or the Interactive Terminal Bootstrapper:
Option 1: Local Web Deployment Studio (setup:web) — Recommended
# 1. Clone repository & install dependencies
git clone https://github.com/Nick-DCA/enterprise-mcp-server.git
cd enterprise-mcp-server
npm install
# 2. Start the local deployment studio (auto-opens your browser with token pre-filled)
npm run setup:webAutomatically launches http://localhost:3000/admin/setup?token=... in your default browser with your active Google account auto-detected, setup token pre-filled, IAM diagnostics, region selector, and live streaming Cloud Run deployer.
Option 2: Interactive Terminal Bootstrapper (setup:cli)
# 1. Clone repository & install dependencies (if not already done)
git clone https://github.com/Nick-DCA/enterprise-mcp-server.git
cd enterprise-mcp-server
npm install
# 2. Run the interactive cloud bootstrapper in your terminal
npm run setup:cliPrompts for your GCP Project ID, corporate email domain, region, and database mode (Standard vs. Enterprise). Automatically enables APIs, provisions Secret Manager, deploys to Cloud Run, and prints your Gemini Enterprise configuration blueprint.
Related MCP server: SentinelAI MCP Server
Architecture Overview
┌─────────────────────────────────────┐
│ Google Gemini Enterprise / │
│ AI Orchestrator Agent │
└──────────────────┬──────────────────┘
│
HTTPS / StreamableHTTP
(Bearer JWT + OAuth 2.0 PKCE)
▼
┌────────────────────────────────────────────────────────────────────────────────────────┐
│ Google Cloud Run (Node.js 22 Express Host) │
│ │
│ ┌───────────────────────┐ ┌────────────────────────┐ ┌─────────────────────────┐ │
│ │ OAuth 2.0 Engine │ │ StreamableHTTP Server │ │ ToolRegistry │ │
│ │ (/oauth/authorize, │ │ Transport (/mcp, /) │ │ (Filter via │ │
│ │ /oauth/token) │ │ │ │ ENABLED_DOMAINS) │ │
│ └───────────────────────┘ └────────────────────────┘ └────────────┬────────────┘ │
│ │ │
│ ┌───────────────────┬──────────────────────────────────┼───────────┐ │
│ ▼ ▼ ▼ ▼ │
│ ┌────────────────────┐ ┌────────────────────┐ ┌───────────────┐ ┌───────┐ │
│ │ Xero SaaS Adapter │ │ BigQuery Adapter │ │ Firestore │ │Sage HR│ │
│ │ (xero-node SDK + │ │ (@google-cloud/bq │ │ Adapter │ │Adapter│ │
│ │ 2-Tier RateLimit) │ │ + Cost Guardrails) │ │(Privacy Shield│ │(PII │ │
│ └──────────┬─────────┘ └─────────┬──────────┘ └───────┬───────┘ └───┬───┘ │
└─────────────────┼─────────────────────┼────────────────────────────┼─────────────┼─────┘
▼ ▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌────────────┐ ┌─────────┐
│ Xero Cloud │ │ Google Cloud │ │Google Cloud│ │ Sage HR │
│Accounting API│ │ BigQuery │ │ Firestore │ │ REST API│
└──────────────┘ └──────────────┘ └────────────┘ └─────────┘Key Features
StreamableHTTP Protocol: Implements JSON-RPC 2.0 streaming HTTP responses over POST/GET endpoints, natively compatible with Google Gemini Enterprise without external protocol gateway proxies.
Stateless OAuth 2.0 PKCE Engine: Zero-state authorization server with cryptographic HMAC authorization codes and HS256 JWT bearer tokens designed for rapid autoscaling on Cloud Run.
Embedded Web Admin Portal: Single-container React 18 SPA (
/admin) for real-time connector management, Secret Manager vaulting, and Google Workspace SSO access governance.Server-Side Privacy & Cost Guards:
Sage HR: Multi-tier attribute classification engine masking PII, salaries, and medical notes before LLM serialization.
BigQuery: Read-only query enforcement, dry-run cost estimation, and hard scan limit caps (
maximumBytesBilled).Firestore: Collection allowlist enforcement, mutation write locks, and recursive sensitive field redaction.
Xero: Two-tier leaky bucket rate limiting with exponential backoff on HTTP 429 and error formatting for LLM self-correction.
Standardized Tool Catalog (59 Tools)
All tools adhere to the {product}-{verb}-{resource} kebab-case naming standard and contain prompt-optimized discovery descriptions.
1. Sage HR Domain Tools (sagehr-*) — 12 Tools
Server-Side Privacy Guarantee: All attribute filtering, field blocking, and PII masking occur server-side before response serialization. Blocked fields are completely omitted from JSON payloads, and sensitive fields (ID numbers, salary, bank details, medical notes) are masked with [REDACTED]. The LLM never sees blocked data.
Employee Directory & Profiles:
sagehr-list-employees: Retrieve company employee directory (email, name, title, department). Automatically excludes personal and salary data.sagehr-get-employee: Retrieve employee profile by ID with multi-tier attribute protection.
Leave & Time-Off Management:
sagehr-list-out-of-office-today: Query who is out of office or on approved leave today.sagehr-list-time-off-requests: Retrieve employee leave requests without sensitive medical notes.sagehr-get-time-off-balances: Retrieve remaining leave balances (allowance, taken, remaining).sagehr-list-time-off-policies: List configured company leave policy types.sagehr-create-time-off-request: Submit a leave request on behalf of an employee (SAGE_HR_ALLOW_WRITES=true).sagehr-cancel-time-off-request: Cancel/delete an existing leave request (destructiveHint: true).
Expense Management:
sagehr-list-expenses: Query employee expense claims with status (submitted, approved, paid) and date bounds.sagehr-get-expense: Retrieve detailed expense claim information and receipt metadata.sagehr-list-expense-categories: Retrieve configured company expense categories.sagehr-create-expense: Submit a new employee expense claim.
2. BigQuery Domain Tools (bigquery-*) — 5 Tools
Tool Name | Type | Read-Only | Description |
| Discovery | Yes | List all accessible BigQuery dataset IDs within the configured Google Cloud project. |
| Discovery | Yes | List table and view IDs in a dataset (filtered against |
| Schema | Yes | Retrieve schema metadata, column types, and field descriptions for a table/view. |
| Cost Guard | Yes | Dry run SQL to validate syntax and estimate bytes scanned before execution. |
| Execution | Yes | Execute read-only |
3. Firestore Domain Tools (firestore-*) — 6 Tools
Tool Name | Type | Read-Only | Description |
| Discovery | Yes | List accessible root collection IDs (filtered against |
| Schema | Yes | Sample documents to infer field structures, types, and nested schemas. |
| Discovery | Yes | List child subcollections nested under a parent document path. |
| Read | Yes | Retrieve a single document with automatic sensitive field masking ( |
| Query | Yes | Query documents with structured where filters, ordering, and pagination bounds. |
| Write | No | Create or merge document data (active only when |
4. Xero Accounting Domain Tools (xero-*) — 36 Tools
Chart of Accounts:
xero-list-accounts,xero-get-account,xero-create-accountInvoices:
xero-list-invoices,xero-get-invoice,xero-create-invoice,xero-update-invoiceCredit Notes:
xero-list-credit-notes,xero-create-credit-note,xero-update-credit-noteManual Journals:
xero-list-manual-journals,xero-create-manual-journal,xero-update-manual-journalPayments:
xero-list-payments,xero-create-paymentTax & Items:
xero-list-tax-rates,xero-list-items,xero-create-item,xero-update-itemBank Transactions & Quotes:
xero-list-bank-transactions,xero-create-bank-transaction,xero-update-bank-transaction,xero-list-quotes,xero-create-quote,xero-list-tracking-categoriesContacts & CRM:
xero-list-contacts,xero-get-contact,xero-create-contact,xero-update-contact,xero-list-contact-groups,xero-get-aged-receivables-by-contact,xero-get-aged-payables-by-contactFinancial Reports:
xero-get-profit-and-loss,xero-get-balance-sheet,xero-get-trial-balance,xero-get-organisation-details
Configuration & Environment Variables
The server dynamically loads configuration from GCP Secret Manager in production (via Application Default Credentials) and falls back to local .env variables.
Variable | Description | Default |
| HTTP port |
|
| OAuth Client ID for Gemini Enterprise | Required |
| OAuth Client Secret for Gemini Enterprise | Required |
| Secret key for signing/verifying Bearer JWTs | Required |
| Allowed OAuth callback URIs (or |
|
| Active domains filter (e.g. | All enabled if unset |
| Xero Custom Connection Client ID | Required for Xero |
| Xero Custom Connection Client Secret | Required for Xero |
| Requested OAuth scopes from Xero |
|
| Target GCP project ID for BigQuery | Auto-resolved via GCP |
| Table allowlist (comma-separated) |
|
| Query scan cap in bytes |
|
| Target GCP project ID for Firestore | Auto-resolved via GCP |
| Collection allowlist |
|
| Enable/disable document mutation tools |
|
| Redacted sensitive document keys |
|
| Sage HR API Key ( | Required for Sage HR |
| Sage HR Company Subdomain ( | Required for Sage HR |
| Enable/disable leave and expense mutations |
|
| Sensitive attributes replaced with |
|
| Attributes completely stripped from JSON |
|
| Strict allowlist mode of safe fields |
|
| Permitted team/department names |
|
| Blocked leadership/executive positions |
|
Adding a New SaaS or Cloud Service (Step-by-Step Guide)
enterprise-mcp-server is built with a modular architecture that makes it easy to integrate new SaaS connectors, databases, and cloud services (such as Google Cloud Storage (GCS), Salesforce, HubSpot, Stripe, or PostgreSQL).
Follow this step-by-step checklist to implement a new service connector adhering to gateway conventions:
src/services/
└── <service-id>/ # e.g., gcs/
├── client.ts # SDK initialization & connection wrapper
├── config.ts # Runtime settings resolution & caching
├── errors.ts # LLM self-correction error formatter
├── types.ts # TypeScript interfaces & domain types
└── tools/
├── index.ts # Aggregated tool export array
├── buckets.ts # Bucket-level tool definitions
└── objects.ts # Object-level tool definitionsStep 1: Implement the Service Adapter Layer (src/services/<service>/)
Create your service directory (e.g. src/services/gcs/) containing:
SDK Client & Auth (
client.ts):Initialize your SDK (e.g.,
@google-cloud/storage) using Application Default Credentials (ADC) or credentials resolved dynamically from Secret Manager.
Runtime Configuration (
config.ts):Provide helper functions to read instance-specific settings from
runtimeConfig.getServiceConfig('<service-id>')(e.g.,allowedBuckets,allowWrites,maxDownloadBytes).
LLM Self-Correction Error Formatter (
errors.ts):Format API errors into clear, actionable messages so the AI agent knows how to self-correct (e.g.,
"Bucket 'finance-bucket' not found. Available buckets in this tenant: [...]").
Modular Tool Definitions (
tools/*.ts):Structure tools using standardized MCP conventions:
Naming Pattern:
{service}-{action}-{target}(e.g.,gcs-list-buckets,gcs-get-object-content,gcs-upload-object).Schemas: Strict Zod schemas with descriptive parameter hints.
Annotations: Always declare
annotations: { readOnlyHint: boolean, destructiveHint: boolean }.Export Bundle: Aggregate all tools into a single array (
gcsTools) intools/index.ts.
Step 2: Register in Core MCP Server & Tool Registry
Update Domain Types:
Add your service domain (e.g.
'gcs') toDomainNameinsrc/mcp/types.ts.
Hook Error Formatter:
Add your error formatting helper to
ToolRegistry.formatErrorMessage()insrc/mcp/registry.ts.
Register Tools:
Import
gcsToolsinsrc/mcp/server.tsand register them with:registry.registerDomainTools(server, 'gcs', gcsTools);
Step 3: Configure Runtime State & Multi-Tenant Mesh
Update
ServiceId:Add
'gcs'toServiceIdunion type insrc/config/runtimeConfig.ts.
Define Default Configuration & Guardrails:
Add default metadata and runtime guardrail settings to
DEFAULT_SERVICE_CONFIGSinsrc/config/runtimeConfig.ts:gcs: { name: 'Google Cloud Storage', description: 'Cloud storage bucket inspection, object retrieval, and guarded upload capabilities.', toolCount: 5, settings: { allowedBuckets: '*', allowWrites: false, maxDownloadBytes: 10485760, // 10 MB }, },
Step 4: Provision Secrets in Google Secret Manager & Secret Vault
If the new service requires dedicated API keys, client secrets, or private tokens (e.g., GCS_HMAC_KEY_*, GCS_SECRET_*):
Secret Manager Engine: Register secret descriptors in
ALL_KNOWN_SECRETSinsrc/config/secretManager.ts.Frontend Secret Vault (
/admin/secrets): Ensure secret descriptors include helpful labels and placeholder masks so administrators can safely view status and update keys in the web UI.Vault Inventory Test: Update the Secret Vault inventory in
tests/server/test-secrets-api.ts.
Step 5: Update Frontend Admin Portal (Services Mesh & User Access Control)
To manage the new service in the Web UI:
API Client: Add
'gcs'toServiceIdinfrontend/src/api/client.ts.Services & Mesh Configs (
/admin/services):Add a service configuration card/panel in
frontend/src/pages/ServicesPage.tsxallowing administrators to configure bucket allowlists, write toggles, and size limits.Add a service icon and initial default settings in
frontend/src/components/AddServiceInstanceModal.tsxto allow provisioning multi-tenant customer instances.
User Access Control & Permissions (
/admin/users):Update
frontend/src/components/EditPermissionsModal.tsxandfrontend/src/pages/UsersPage.tsxto include the new service checkbox, enabling administrators to selectively grant or revoke user access to this service domain.
Keep Setup Lean: The initial setup wizard (npm run setup:web / setup:cli) is intentionally kept lightweight and only handles core GCP project configuration, Firestore database selection, Google Workspace OAuth, and Gemini integration credentials. All SaaS connectors (Xero, BigQuery, Firestore, Sage HR, GCS, etc.) are activated and configured post-setup in the Admin Portal.
Step 6: Add Automated Tests & CI Verification
Unit & Integration Tests: Create
tests/gcs/test-gcs-service.tsvalidating tool schemas, client error handling, and runtime guardrails.Master Schema Validator: Add
gcsToolstoallToolsand prefix verification (gcs-) intests/test-tools-schema.ts.Master Test Runner: Register the new test suite in
TEST_SUITESwithintests/runner.ts.Compile & Verify:
npm run build npm test
Build & Test Suite
Build Platform
# Compile both backend TypeScript and frontend Vite SPA
npm run buildRun Tests
# Run full automated test suite (18 test suites)
npm testDevelopment Mode
# Hot-reloading backend development server
npm run dev
# In a separate terminal: Vite React frontend development server
npm run dev:frontendContributing & Security
Contributing: Please review CONTRIBUTING.md for guidelines on code standards and submitting Pull Requests.
Code of Conduct: This project adheres to the Contributor Covenant Code of Conduct.
Security Policy: For reporting security vulnerabilities, please refer to SECURITY.md.
License
This project is licensed under the MIT License.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Connect AI agents to 1000+ apps with managed authentication and tool-calling.
Verified, pay-per-use API tools for AI agents through one authenticated connection.
Connect, monitor, and control AI agents — tasks, approvals, schedules, and governance.
Agent-native security, trust, reliability, data and procurement tools for AI workflows.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to securely manage Google Workspace services (Gmail, Calendar, Drive, Sheets, Contacts) with persistent multi-account OAuth. Uses OS keychain for credential storage with health monitoring and granular business rules for enterprise security.
- FlicenseNot gradedqualityBmaintenanceEnables secure enterprise AI agents to access internal tools like GitHub, Gmail, Calendar, file systems, databases, and knowledge bases through the Model Context Protocol, with built-in security, audit, and observability.
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to search HR policies, create IT support tickets, and send external emails with configurable security levels and human-in-the-loop validation.
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to securely interact with Google Workspace services, including sending emails via Gmail and appending content to Google Docs.225MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Nick-DCA/enterprise-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server