service-ops-demo
Reads QuickBooks sandbox customer and invoice data, including invoice balances separated by currency, with pagination, timeouts, retries, and OAuth token refresh for read-only access.
Reads Zoho CRM contact details and customer records through authenticated, read-only tools, supporting customer summaries and role-restricted access.
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
Service ops MCP demo
Read a customer's Zoho CRM details and QuickBooks invoices through MCP. Get one structured summary and a local HTML report.
The default demo runs locally with synthetic records. It needs no API keys, model calls, paid plan, or cloud deployment. The provider code also has an authenticated read-only mode for Zoho Developer Edition and a QuickBooks sandbox.
Live vendor calls have not been verified with real credentials. This is a new integration demo, not a claim of previous client delivery.

Run the demo
Install Python 3.11 or newer and uv. Then run these commands from the repository folder.
uv sync --locked
uv run python -m service_ops.demoThe demo launches the MCP server as a subprocess and calls its tools through the official MCP client. It checks the customer summary and verifies that an engineer cannot read invoice data.
Open evidence/report.html to see the report. evidence/demo.json contains the structured results from the protocol run. All customer records in these files are synthetic.
Related MCP server: zoho-crm-mcp
What works
Zoho CRM contact reads and QuickBooks sandbox customer and invoice reads.
OAuth token refresh, including persisted QuickBooks refresh token rotation.
A customer summary with invoice balances kept separate by currency.
Server-selected roles, with manager-only access to financial tools.
Bounded pagination, timeouts, one bounded retry for temporary provider errors, and redacted error messages.
A local report built from the MCP tool result. It preserves available records when a provider fails and labels incomplete invoice totals as partial.
Tool | Sales | Engineer | Manager |
| Yes | Yes | Yes |
| No | No | Yes |
| No | No | Yes |
The server owner selects the role at startup. The model cannot request a different role as a tool argument. This demonstrates a permission boundary within one local process. It is not a shared multi-user login system.
Check the code
uv run pytest
uv run ruff check .
uv run ruff format --check .
uv run python -m service_ops.demoThe tests use vendor-shaped HTTP responses. The same URL builders, headers, response parsers, OAuth code, and service methods run in fixture and live modes. See verification status for the actual checks and limits.
Use an MCP client
For a client that accepts an mcpServers configuration, use this entry. Replace the directory with your checkout's absolute path.
{
"mcpServers": {
"service-ops-demo": {
"command": "uv",
"args": [
"run",
"--directory",
"/absolute/path/to/service-ops-mcp-demo",
"python",
"-m",
"service_ops.server"
],
"env": {
"SERVICE_OPS_MODE": "fixture",
"SERVICE_OPS_ROLE": "manager"
}
}
}
}Ask the client to call get_customer_overview for customer key demo-engineering. The local demo command proves the tool protocol without a language model. No authenticated Claude session was used for the saved verification run.
Test with developer accounts
Zoho Developer Edition is free for testing. Intuit provides QuickBooks sandbox companies for development. This repository does not start subscriptions or call a paid model API.
Create your own developer accounts and authorize your own test organizations using the vendors' developer tools.
Copy
.env.exampleto.env. Enter credentials locally. Do not paste tokens into an issue or commit them.Create a private customer mapping file with the Zoho contact ID and QuickBooks customer ID for the same test business. Set its absolute path in
SERVICE_OPS_CUSTOMERS_FILE.Set
SERVICE_OPS_MODE=live-readonlyand a private absoluteSERVICE_OPS_TOKEN_DIRoutside the checkout. SetZOHO_REGIONto the region of your developer organization.Start the server with
uv run --env-file .env python -m service_ops.server. Connect your MCP client and call a tool with a mapped customer key.
The mapping file has this shape. Replace the sample IDs with records from your own test organizations.
[
{
"key": "demo-engineering",
"zoho_contact_id": "5725767000000412001",
"quickbooks_customer_id": "42"
}
]Use the Zoho scope ZohoCRM.modules.contacts.READ. QuickBooks uses the vendor's com.intuit.quickbooks.accounting scope, which can grant broader access than these read-only tools use. Keep that credential limited to your sandbox.
If QuickBooks omits an invoice's CurrencyRef, set QUICKBOOKS_HOME_CURRENCY to the test company's verified home currency. Without that explicit value, the server returns missing_currency rather than guessing a currency.
The initial authorization and token provisioning happen in the vendor developer tools. This demo implements token refresh, not a hosted OAuth consent callback.
Use only one server process per token directory. Token files have private file permissions and atomic replacement, but the demo does not coordinate refreshes across multiple processes.
The QuickBooks API host is fixed to the sandbox. Zoho uses regional developer API hosts. Business tools only issue GET requests. The only external POST requests refresh OAuth tokens. There are no invoice creation, payment, deletion, or arbitrary query tools.
Scope
This first demo covers the Zoho and QuickBooks integration slice of a service-business workflow. Synchroteam, call transcription, coaching, engineering manual search, and shared user authentication are not implemented. Connecting a tool through MCP does not itself prove Claude's answer quality.
The repository contains no real customer records or client accounts. See the design notes and official API references.
MIT licensed.
This server cannot be deployed
Maintenance
Related MCP Connectors
The HubSpot MCP Server acts as a bridge that enables AI assistants and Large Language Models to securely interact with HubSpot CRM data through natural conversation, without requiring users to understand complex API structures. It provides read-only access to standard CRM objects (contacts, companies, deals, tickets, products, invoices, and more) and their associations, secured via OAuth 2.0, allowing AI agents to perform tasks like summarizing deals, fetching company updates, and looking up record changes.
Native MCP access to CRM contacts, organizations, deals and tasks with user permissions.
Read-only access to a Median customer's ledger, financial reports and transactions. OAuth sign-in.
Read-only access to InfoTech-CRM leads, contacts, customers, deals, tickets and activities.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for QuickBooks Online providing read-only access to customers, vendors, invoices, bills, and chart of accounts. Enables natural language queries to your financial data through Claude or any MCP client.8MIT
- FlicenseNot gradedqualityDmaintenanceProvides live Zoho CRM data access via MCP tools, enabling queries on modules, records, fields, and related lists without syncing data.-
- AlicenseNot gradedqualityDmaintenanceA self-hosted MCP server that provides AI assistants with secure access to multiple QuickBooks Online company files through a single connection, featuring a company registry, OAuth-based authorization, and comprehensive read/write tools.1MIT
- AlicenseBqualityCmaintenanceEnables read-only access to Epicor Kinetic ERP data, including sales orders, customers, parts, and shipments, through secure MCP tools.4MIT