# Zoho Books MCP Server
Connect your Zoho Books account to AI assistants like Claude Desktop through the Model Context Protocol (MCP).
## Quick Start
### 1. Get Zoho API Credentials
1. Go to [Zoho API Console](https://api-console.zoho.com/)
2. Create a "Server-based Application"
3. Add redirect URI: `http://localhost:8099/callback`
4. Select scope: `ZohoBooks.fullaccess.all`
5. Save your Client ID, Client Secret, and Organization ID
### 2. Install via uvx
Add to your Claude Desktop configuration:
```json
{
"mcpServers": {
"zoho-books": {
"command": "uvx",
"args": ["zoho-books-mcp"],
"env": {
"ZOHO_CLIENT_ID": "your_client_id",
"ZOHO_CLIENT_SECRET": "your_client_secret",
"ZOHO_REFRESH_TOKEN": "your_refresh_token",
"ZOHO_ORGANIZATION_ID": "your_organization_id",
"ZOHO_REGION": "US"
}
}
}
}
```
To get a refresh token: `uvx zoho-books-mcp --setup-oauth`
### 3. Restart Claude Desktop
Look for the 🔌 icon to verify connection.
## Local Development
```bash
# Clone and setup
git clone https://github.com/kkeeling/zoho-mcp.git
cd zoho-mcp
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
# Run tests
pytest
# Run server
python server.py
```
For local development in Claude Desktop:
```json
{
"mcpServers": {
"zoho-books": {
"command": "/path/to/venv/bin/python",
"args": ["/path/to/zoho-mcp/server.py"],
"env": {
"ZOHO_CLIENT_ID": "your_client_id",
"ZOHO_CLIENT_SECRET": "your_client_secret",
"ZOHO_REFRESH_TOKEN": "your_refresh_token",
"ZOHO_ORGANIZATION_ID": "your_organization_id",
"ZOHO_REGION": "US"
}
}
}
}
```
## Available Features
### Tools
**Invoices**: create_invoice, email_invoice, record_payment, send_payment_reminder, void_invoice, list_invoices, get_invoice, mark_invoice_as_sent
**Contacts**: create_customer, create_vendor, update_contact, delete_contact, email_statement, list_contacts, get_contact
**Expenses**: create_expense, update_expense, categorize_expense, upload_receipt, list_expenses, get_expense
**Items**: create_item, update_item, list_items, get_item
**Sales Orders**: create_sales_order, update_sales_order, convert_to_invoice, list_sales_orders, get_sales_order
### Resources
- **dashboard://summary** - Business metrics overview
- **invoice://overdue** - Overdue invoices list
- **invoice://unpaid** - Unpaid invoices
- **payment://recent** - Recent payments
- **contact://list** - All contacts
- **expenses://summary** - Expense overview
### Prompts
- **invoice_collection_workflow** - Complete invoice-to-payment cycle
- **monthly_invoicing** - Bulk invoice creation
- **expense_tracking_workflow** - Expense recording and categorization
## Configuration
### Regions
- US (zoho.com), EU (zoho.eu), IN (zoho.in), AU (zoho.com.au), JP (zoho.jp), UK (zoho.uk), CA (zoho.ca)
### Troubleshooting
- **Tools not showing**: Restart Claude Desktop completely
- **Auth errors**: Regenerate refresh token with `uvx zoho-books-mcp --setup-oauth`
- **Module errors**: Ensure virtual environment is activated
## Development & Releases
### Creating a Release
To publish a new version to PyPI and create a GitHub release:
1. **Update version** in `pyproject.toml`
2. **Update CHANGELOG.md** with release notes
3. **Create and push a git tag**:
```bash
git tag v0.1.0
git push origin v0.1.0
```
4. **Create GitHub Release** from the tag (triggers automatic PyPI publish)
The GitHub Actions workflow will automatically:
- Build the package
- Publish to PyPI (via trusted publishing)
- Attach distribution files to the GitHub release
### Prerequisites for Publishing
- PyPI account with trusted publishing configured
- GitHub repository with PyPI environment protection enabled
## License
MIT License - see [LICENSE](LICENSE) file for details.
Raw data
{
"_id": null,
"home_page": null,
"name": "zoho-books-mcp",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "ai, books, claude, mcp, model-context-protocol, zoho",
"author": null,
"author_email": "Keenan Keeling <keenan@example.com>",
"download_url": "https://files.pythonhosted.org/packages/6f/04/73aa256a058c8a8d7e83129121ed59d964f35b9ec1fd4399b2a66ec00513/zoho_books_mcp-0.1.0.tar.gz",
"platform": null,
"description": "# Zoho Books MCP Server\n\nConnect your Zoho Books account to AI assistants like Claude Desktop through the Model Context Protocol (MCP).\n\n## Quick Start\n\n### 1. Get Zoho API Credentials\n\n1. Go to [Zoho API Console](https://api-console.zoho.com/)\n2. Create a \"Server-based Application\"\n3. Add redirect URI: `http://localhost:8099/callback`\n4. Select scope: `ZohoBooks.fullaccess.all`\n5. Save your Client ID, Client Secret, and Organization ID\n\n### 2. Install via uvx\n\nAdd to your Claude Desktop configuration:\n\n```json\n{\n \"mcpServers\": {\n \"zoho-books\": {\n \"command\": \"uvx\",\n \"args\": [\"zoho-books-mcp\"],\n \"env\": {\n \"ZOHO_CLIENT_ID\": \"your_client_id\",\n \"ZOHO_CLIENT_SECRET\": \"your_client_secret\",\n \"ZOHO_REFRESH_TOKEN\": \"your_refresh_token\",\n \"ZOHO_ORGANIZATION_ID\": \"your_organization_id\",\n \"ZOHO_REGION\": \"US\"\n }\n }\n }\n}\n```\n\nTo get a refresh token: `uvx zoho-books-mcp --setup-oauth`\n\n### 3. Restart Claude Desktop\n\nLook for the \ud83d\udd0c icon to verify connection.\n\n## Local Development\n\n```bash\n# Clone and setup\ngit clone https://github.com/kkeeling/zoho-mcp.git\ncd zoho-mcp\npython -m venv venv\nsource venv/bin/activate # Windows: venv\\Scripts\\activate\npip install -r requirements.txt\n\n# Run tests\npytest\n\n# Run server\npython server.py\n```\n\nFor local development in Claude Desktop:\n```json\n{\n \"mcpServers\": {\n \"zoho-books\": {\n \"command\": \"/path/to/venv/bin/python\",\n \"args\": [\"/path/to/zoho-mcp/server.py\"],\n \"env\": {\n \"ZOHO_CLIENT_ID\": \"your_client_id\",\n \"ZOHO_CLIENT_SECRET\": \"your_client_secret\",\n \"ZOHO_REFRESH_TOKEN\": \"your_refresh_token\",\n \"ZOHO_ORGANIZATION_ID\": \"your_organization_id\",\n \"ZOHO_REGION\": \"US\"\n }\n }\n }\n}\n```\n\n## Available Features\n\n### Tools\n\n**Invoices**: create_invoice, email_invoice, record_payment, send_payment_reminder, void_invoice, list_invoices, get_invoice, mark_invoice_as_sent\n\n**Contacts**: create_customer, create_vendor, update_contact, delete_contact, email_statement, list_contacts, get_contact\n\n**Expenses**: create_expense, update_expense, categorize_expense, upload_receipt, list_expenses, get_expense\n\n**Items**: create_item, update_item, list_items, get_item\n\n**Sales Orders**: create_sales_order, update_sales_order, convert_to_invoice, list_sales_orders, get_sales_order\n\n### Resources\n\n- **dashboard://summary** - Business metrics overview\n- **invoice://overdue** - Overdue invoices list\n- **invoice://unpaid** - Unpaid invoices\n- **payment://recent** - Recent payments\n- **contact://list** - All contacts\n- **expenses://summary** - Expense overview\n\n### Prompts\n\n- **invoice_collection_workflow** - Complete invoice-to-payment cycle\n- **monthly_invoicing** - Bulk invoice creation\n- **expense_tracking_workflow** - Expense recording and categorization\n\n## Configuration\n\n### Regions\n- US (zoho.com), EU (zoho.eu), IN (zoho.in), AU (zoho.com.au), JP (zoho.jp), UK (zoho.uk), CA (zoho.ca)\n\n### Troubleshooting\n- **Tools not showing**: Restart Claude Desktop completely\n- **Auth errors**: Regenerate refresh token with `uvx zoho-books-mcp --setup-oauth`\n- **Module errors**: Ensure virtual environment is activated\n\n## Development & Releases\n\n### Creating a Release\n\nTo publish a new version to PyPI and create a GitHub release:\n\n1. **Update version** in `pyproject.toml`\n2. **Update CHANGELOG.md** with release notes\n3. **Create and push a git tag**:\n ```bash\n git tag v0.1.0\n git push origin v0.1.0\n ```\n4. **Create GitHub Release** from the tag (triggers automatic PyPI publish)\n\nThe GitHub Actions workflow will automatically:\n- Build the package\n- Publish to PyPI (via trusted publishing)\n- Attach distribution files to the GitHub release\n\n### Prerequisites for Publishing\n- PyPI account with trusted publishing configured\n- GitHub repository with PyPI environment protection enabled\n\n## License\n\nMIT License - see [LICENSE](LICENSE) file for details.",
"bugtrack_url": null,
"license": "MIT",
"summary": "Connect your Zoho Books account to AI assistants like Claude Desktop through the Model Context Protocol (MCP)",
"version": "0.1.0",
"project_urls": {
"Changelog": "https://github.com/kkeeling/zoho-mcp/blob/main/CHANGELOG.md",
"Documentation": "https://github.com/kkeeling/zoho-mcp#readme",
"Issues": "https://github.com/kkeeling/zoho-mcp/issues",
"Repository": "https://github.com/kkeeling/zoho-mcp"
},
"split_keywords": [
"ai",
" books",
" claude",
" mcp",
" model-context-protocol",
" zoho"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "e366ed97858fde1737b2f6e44d0dec075b57a10d056810b770a0d9cf1f7ffcdd",
"md5": "cfe1d387c26a8497af792230429b16af",
"sha256": "8b29fc799af961912ee983026358141d25465f28cf495e74d393a16a0fd4bd32"
},
"downloads": -1,
"filename": "zoho_books_mcp-0.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "cfe1d387c26a8497af792230429b16af",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 67208,
"upload_time": "2025-08-02T14:13:03",
"upload_time_iso_8601": "2025-08-02T14:13:03.733344Z",
"url": "https://files.pythonhosted.org/packages/e3/66/ed97858fde1737b2f6e44d0dec075b57a10d056810b770a0d9cf1f7ffcdd/zoho_books_mcp-0.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6f0473aa256a058c8a8d7e83129121ed59d964f35b9ec1fd4399b2a66ec00513",
"md5": "e87e8a19f6aca2b9bc8b7069519b0d2c",
"sha256": "3c735e9b7ecb7980ae2257420068a764d3d778752d8b57ec732987c34c4c2b9a"
},
"downloads": -1,
"filename": "zoho_books_mcp-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "e87e8a19f6aca2b9bc8b7069519b0d2c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 106600,
"upload_time": "2025-08-02T14:13:04",
"upload_time_iso_8601": "2025-08-02T14:13:04.874841Z",
"url": "https://files.pythonhosted.org/packages/6f/04/73aa256a058c8a8d7e83129121ed59d964f35b9ec1fd4399b2a66ec00513/zoho_books_mcp-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-02 14:13:04",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "kkeeling",
"github_project": "zoho-mcp",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "mcp",
"specs": [
[
">=",
"1.6.0"
]
]
},
{
"name": "httpx",
"specs": [
[
">=",
"0.25.0"
]
]
},
{
"name": "python-dotenv",
"specs": [
[
">=",
"1.0.0"
]
]
},
{
"name": "pydantic",
"specs": [
[
">=",
"2.4.0"
]
]
},
{
"name": "email-validator",
"specs": [
[
">=",
"2.0.0"
]
]
},
{
"name": "pytest",
"specs": [
[
">=",
"7.0.0"
]
]
},
{
"name": "pytest-cov",
"specs": [
[
">=",
"4.1.0"
]
]
},
{
"name": "pytest-httpx",
"specs": [
[
">=",
"0.25.0"
]
]
},
{
"name": "pytest-asyncio",
"specs": [
[
">=",
"0.21.0"
]
]
},
{
"name": "structlog",
"specs": [
[
">=",
"23.1.0"
]
]
},
{
"name": "click",
"specs": [
[
">=",
"8.1.0"
]
]
},
{
"name": "asyncio",
"specs": [
[
">=",
"3.4.3"
]
]
},
{
"name": "anyio",
"specs": [
[
">=",
"3.7.0"
]
]
},
{
"name": "starlette",
"specs": [
[
">=",
"0.27.0"
]
]
},
{
"name": "uvicorn",
"specs": [
[
">=",
"0.23.0"
]
]
}
],
"lcname": "zoho-books-mcp"
}