qlickxl/iplicit_mcp_server
If you are the rightful owner of iplicit_mcp_server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.
The iplicit MCP Server integrates Claude AI with the iplicit cloud accounting API, allowing users to query financial data, manage contacts, and generate reports using natural language.
iplicit MCP Server
An MCP (Model Context Protocol) server that integrates Claude AI with the iplicit cloud accounting API. Query your financial data, search documents, manage contacts, and generate reports using natural language through Claude.
Features
- 🔍 Search Documents - Find invoices, purchase orders, journals, and other financial documents
- 📄 Document Details - Get complete information about specific documents including line items
- 👥 Contact Management - Search and retrieve customer and supplier information
- 📊 Project Tracking - Query project data and profitability information
- 🔄 Automatic Authentication - Session token management with auto-refresh
- 📝 Multiple Formats - Get responses in JSON or human-readable Markdown
- ⚡ Rate Limiting - Built-in request throttling to respect API limits
Prerequisites
- Python 3.10 or higher
- iplicit account with API access enabled
- API credentials from your iplicit administrator (API key, username, domain)
- Claude Desktop or another MCP-compatible client
Installation
1. Clone the repository
git clone https://github.com/qlickxl/iplicit_mcp_server.git
cd iplicit_mcp_server
2. Install dependencies
pip install -r requirements.txt
3. Configure environment variables
Copy the example environment file and fill in your iplicit credentials:
cp .env.example .env
Edit .env and add your credentials:
IPLICIT_API_KEY=your_api_key_here
IPLICIT_USERNAME=your_username_here
IPLICIT_DOMAIN=your_domain_here
Where to get credentials:
- Contact your iplicit administrator or email
apisupport@iplicit.com - Your domain is typically something like
mycompany.iplicitorsandbox.demo
4. Configure Claude Desktop
Add the server to your Claude Desktop configuration file:
Location:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
Configuration:
{
"mcpServers": {
"iplicit": {
"command": "python",
"args": ["-m", "iplicit_mcp_server"],
"cwd": "/path/to/iplicit_mcp_server",
"env": {
"IPLICIT_API_KEY": "your_api_key_here",
"IPLICIT_USERNAME": "your_username_here",
"IPLICIT_DOMAIN": "your_domain_here"
}
}
}
}
Note: Replace /path/to/iplicit_mcp_server with the actual path to your installation.
5. Restart Claude Desktop
After updating the configuration, restart Claude Desktop for the changes to take effect.
Usage
Once configured, you can ask Claude natural language questions about your iplicit data:
Example Queries
Search for documents:
"Show me all outstanding purchase invoices from October 2025"
"Find sales invoices posted this week"
"List all journals created yesterday"
Get document details:
"Get full details for invoice SIN100"
"Show me the line items for purchase order PO-2025-001"
Search contacts:
"Find all suppliers with 'Office' in their name"
"List active customers"
"Show me all contacts in the United Kingdom"
Get contact information:
"Get details for supplier code SUP001"
"Show me information about customer 'Acme Corp'"
Search projects:
"List all active projects"
"Find projects containing 'Website' in the description"
"Show me completed projects"
See for more examples.
Available Tools
1. search_documents
Search for financial documents with flexible filtering.
Parameters:
doc_class(optional): Document type (e.g., "SaleInvoice", "PurchaseInvoice")status(optional): Document status (e.g., "posted", "outstanding", "draft")from_date(optional): Start date (YYYY-MM-DD)to_date(optional): End date (YYYY-MM-DD)contact_account(optional): Filter by customer/supplierlimit(default: 50): Maximum results (1-500)format(default: "markdown"): Output format ("json" or "markdown")
2. get_document
Retrieve full details of a specific document.
Parameters:
document_id(required): Document ID or referenceinclude_details(default: true): Include line item detailsformat(default: "markdown"): Output format
3. search_contact_accounts
Search for customers, suppliers, or all contacts.
Parameters:
account_type(default: "all"): "customer", "supplier", or "all"search_term(optional): Search by name or codeactive_only(default: true): Show only active accountslimit(default: 50): Maximum resultsformat(default: "markdown"): Output format
4. get_contact_account
Get detailed information about a specific contact.
Parameters:
account_id(required): Contact account ID or codeinclude_contacts(default: true): Include associated contactsinclude_balance(default: true): Include balance informationformat(default: "markdown"): Output format
5. search_projects
Search for projects.
Parameters:
search_term(optional): Search by code or namestatus(optional): Filter by status ("active", "completed")legal_entity(optional): Filter by legal entitylimit(default: 50): Maximum resultsformat(default: "markdown"): Output format
Phase 2: Write Operations ⚠️
IMPORTANT: Phase 2 tools create and modify real financial data. Use with caution!
6. create_purchase_invoice
Create a new purchase invoice (supplier invoice).
Parameters:
contact_account_id(required): Supplier contact ID or code (auto-resolves codes to UUIDs)doc_date(required): Document date (YYYY-MM-DD)due_date(required): Payment due date (YYYY-MM-DD)currency(default: "GBP"): Currency codedoc_type_id(optional): Document type UUID (auto-fetched if not provided)legal_entity_id(optional): Legal entity UUID (auto-fetched if not provided)description(optional): Invoice descriptiontheir_doc_no(optional): Supplier's invoice numberpayment_terms_id(optional): Payment terms UUIDproject_id(optional): Project UUIDlines(optional): Array of line items with: description, quantity, net_currency_unit_price, tax_code_id, account_idformat(default: "markdown"): Output format
Example:
"Create a purchase invoice for supplier B023 for £1,500 due in 30 days"
Returns: Created invoice with document number, ID, and full details
7. create_sale_invoice
Create a new sales invoice (customer invoice).
Parameters:
contact_account_id(required): Customer contact ID or code (auto-resolves codes to UUIDs)doc_date(required): Document date (YYYY-MM-DD)due_date(required): Payment due date (YYYY-MM-DD)currency(default: "GBP"): Currency codedoc_type_id(optional): Document type UUID (auto-fetched if not provided)legal_entity_id(optional): Legal entity UUID (auto-fetched if not provided)description(optional): Invoice descriptionreference(optional): Invoice reference numberpayment_terms_id(optional): Payment terms UUIDproject_id(optional): Project UUIDlines(optional): Array of line itemsformat(default: "markdown"): Output format
Example:
"Create a sales invoice for customer 10723 for £2,400 for consulting services"
Returns: Created invoice with document number, ID, and full details
8. update_document
Update an existing document. IMPORTANT: Only draft documents can be updated. Posted/approved documents will be rejected.
Parameters:
document_id(required): Document ID or reference numberdescription(optional): Update descriptiontheir_doc_no(optional): Update supplier/customer referencereference(optional): Update document referencedoc_date(optional): Update document date (YYYY-MM-DD)due_date(optional): Update due date (YYYY-MM-DD)contact_account_id(optional): Change contact account (ID or code)lines(optional): Update line items (replaces existing)format(default: "markdown"): Output format
Example:
"Update invoice PIN000048 to change the description to 'Office supplies Q4'"
Returns: Updated document with modification tracking
Note: At least one field must be provided to update.
Phase 3: Orders, Payments & Products
9. search_purchase_orders
Search for purchase orders with flexible filtering.
Parameters:
status(optional): Filter by status (draft, approved, outstanding, posted)supplier(optional): Filter by supplier name or codefrom_date(optional): Start date (YYYY-MM-DD)to_date(optional): End date (YYYY-MM-DD)project_id(optional): Filter by projectlimit(default: 50, max: 500): Maximum resultsformat(default: "markdown"): Output format
Example:
"Show me all outstanding purchase orders"
"Find purchase orders for supplier B023"
10. get_purchase_order
Get detailed information about a specific purchase order.
Parameters:
order_id(required): Purchase order ID or referenceinclude_details(default: true): Include line itemsformat(default: "markdown"): Output format
Example:
"Get details for purchase order PO000123"
11. search_sale_orders
Search for sales orders with filtering options.
Parameters:
status(optional): Filter by statuscustomer(optional): Filter by customer name or codefrom_date(optional): Start date (YYYY-MM-DD)to_date(optional): End date (YYYY-MM-DD)project_id(optional): Filter by projectlimit(default: 50, max: 500): Maximum resultsformat(default: "markdown"): Output format
Example:
"Show me sales orders for customer 10723"
12. get_sale_order
Get detailed information about a specific sales order.
Parameters:
order_id(required): Sales order ID or referenceinclude_details(default: true): Include line itemsformat(default: "markdown"): Output format
Example:
"Get details for sales order SO000456"
13. search_payments
Search payment transactions (received and made).
Parameters:
payment_type(default: "all"): "received", "made", or "all"from_date(optional): Start date (YYYY-MM-DD)to_date(optional): End date (YYYY-MM-DD)contact(optional): Filter by customer/suppliermin_amount(optional): Minimum amountmax_amount(optional): Maximum amountlimit(default: 50, max: 500): Maximum resultsformat(default: "markdown"): Output format
Example:
"Show me all payments received in November"
14. search_products
Search the product catalog.
Parameters:
search_term(optional): Search by code or descriptionactive_only(default: true): Show only active productsproduct_type(optional): Filter by product typelimit(default: 50, max: 500): Maximum resultsformat(default: "markdown"): Output format
Example:
"Show me all active products with 'Office' in the description"
15. get_product
Get detailed information about a specific product.
Parameters:
product_id(required): Product ID or codeinclude_pricing(default: true): Include pricing infoinclude_stock(default: true): Include stock levelsformat(default: "markdown"): Output format
Example:
"Get details for product PROD-001"
Phase 4: Organizational Hierarchy & Document Workflows ⚠️
IMPORTANT: Phase 4 includes document workflow operations (post, approve, reverse) that modify financial data and are irreversible. Use with extreme caution!
16. search_departments
Search for departments in your organization.
Parameters:
search_term(optional): Search by department code or nameactive_only(default: true): Show only active departmentslimit(default: 50, max: 500): Maximum resultsformat(default: "markdown"): Output format
Example:
"Show me all active departments"
"Find departments with 'Sales' in the name"
17. get_department
Get detailed information about a specific department.
Parameters:
department_id(required): Department ID or codeformat(default: "markdown"): Output format
Example:
"Get details for department SALES"
18. search_cost_centres
Search for cost centres in your organization.
Parameters:
search_term(optional): Search by cost centre code or nameactive_only(default: true): Show only active cost centreslimit(default: 50, max: 500): Maximum resultsformat(default: "markdown"): Output format
Example:
"Show me all cost centres"
"Find cost centres for project tracking"
19. get_cost_centre
Get detailed information about a specific cost centre.
Parameters:
cost_centre_id(required): Cost centre ID or codeformat(default: "markdown"): Output format
Example:
"Get details for cost centre CC-001"
20. post_document ⚠️⚠️⚠️
CRITICAL OPERATION: Post a draft document to finalize it in the ledger. This operation:
- Changes document status from draft to posted
- Makes the document affect financial reports
- Makes the document non-editable (can only be reversed)
- Cannot be undone (except through reversal)
Use with extreme caution!
Parameters:
document_id(required): Document ID or reference to postposting_date(optional): Posting date (YYYY-MM-DD) - uses document date if not providedformat(default: "markdown"): Output format
Example:
"Post draft invoice SIN000041"
"Post document PIN000048 with posting date 2025-11-04"
Returns: Posted document with updated status and posting date
Important Notes:
- Only draft documents can be posted
- Document must pass all validations
- Once posted, document affects ledger balances
- To correct posted documents, use reverse_document
21. approve_document
Approve a document if approval workflow is enabled. This moves the document to approved status, making it ready for posting.
Parameters:
document_id(required): Document ID or reference to approveapproval_note(optional): Optional approval note/commentformat(default: "markdown"): Output format
Example:
"Approve document SIN000042"
"Approve invoice PIN000049 with note 'Approved by finance manager'"
Returns: Approved document ready for posting
22. reverse_document ⚠️⚠️
IMPORTANT OPERATION: Reverse a posted document by creating a reversing entry. This is the correct way to correct errors in posted documents.
Parameters:
document_id(required): Document ID or reference to reversereversal_date(required): Reversal date (YYYY-MM-DD)reversal_reason(optional): Reason for reversal (recommended for audit trail)format(default: "markdown"): Output format
Example:
"Reverse posted invoice SIN000040 on 2025-11-04 due to pricing error"
Returns: Reversal result with original and reversing document details
Important Notes:
- Only posted documents can be reversed
- Creates a new reversing document
- Both original and reversing documents remain in the system
- Reversal affects ledger balances
23. search_batch_payments
Search for batch payment records.
Parameters:
from_date(optional): Start date filter (YYYY-MM-DD)to_date(optional): End date filter (YYYY-MM-DD)status(optional): Filter by status (e.g., draft, posted)limit(default: 50, max: 500): Maximum resultsformat(default: "markdown"): Output format
Example:
"Show me all batch payments from November"
"Find posted batch payments"
Returns: List of batch payments with totals, item counts, and status
Troubleshooting
Authentication Errors
Error: "Missing required environment variables"
Solution: Ensure all three environment variables are set:
IPLICIT_API_KEYIPLICIT_USERNAMEIPLICIT_DOMAIN
Connection Errors
Error: "Failed to authenticate with iplicit API"
Solutions:
- Verify your API key is correct and not expired
- Check your username and domain are correct
- Ensure you have network connectivity
- Contact your iplicit administrator to verify API access is enabled
Resource Not Found
Error: "Resource not found in iplicit"
Solutions:
- Verify the document ID or account code is correct
- Use search tools first to find valid IDs
- Check you have permission to access the resource
Rate Limiting
Error: "iplicit API rate limit exceeded"
Solution: The server has built-in rate limiting (1500 requests per 5 minutes). If you hit this limit, wait a few minutes before making more requests.
Security Considerations
- ⚠️ Never commit your
.envfile to version control - 🔐 Keep your API key secure - treat it like a password
- 👤 Use dedicated API users with minimum required permissions
- 📊 Monitor API usage through your iplicit admin panel
- 🔄 Rotate API keys periodically as recommended by your security policy
Development
Running Tests
pytest tests/
Project Structure
iplicit_mcp_server/
├── src/
│ ├── __init__.py # Package initialization
│ ├── __main__.py # Entry point
│ ├── server.py # Main MCP server with tools
│ ├── session.py # Session token management
│ ├── api_client.py # API request handler
│ ├── formatters.py # Response formatters
│ └── models.py # Pydantic input models
├── tests/ # Test files
├── examples/ # Example queries
├── requirements.txt # Python dependencies
├── .env.example # Example environment file
└── README.md # This file
Contributing
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
API Documentation
For detailed iplicit API documentation:
- API Docs: https://docs.iplicit.com/api/
- Swagger Reference: https://api.iplicit.com/api-docs/index.html
- Support: apisupport@iplicit.com
License
This project is licensed under the MIT License - see the file for details.
Support
- Issues: https://github.com/qlickxl/iplicit_mcp_server/issues
- iplicit API Support: apisupport@iplicit.com
- MCP Documentation: https://modelcontextprotocol.io/
Roadmap
Phase 1 ✅ (Completed)
- Read-only document search
- Contact account search and retrieval
- Project search
- Session management with auto-refresh
- Markdown and JSON formatting
Phase 2 ✅ (Completed)
- Document creation (purchase and sales invoices)
- Document updates (draft documents)
- Smart defaults (auto-lookup of IDs)
- Comprehensive error handling
Phase 3 ✅ (Completed)
- Purchase order search and retrieval
- Sales order search and retrieval
- Payment search (received and made)
- Product catalog search and retrieval
- Advanced filtering and client-side search
Phase 4 ✅ (Completed - v1.0.0)
- Department and cost centre management
- Document workflow operations (post/approve/reverse)
- Batch payment search
- Complete document lifecycle support
- Production-ready error handling
Phase 5 (Future Enhancements)
- Journal entry creation and management
- Financial reporting (trial balance, P&L, balance sheet)
- Real-time webhooks for document events
- Data export and analysis tools
- PyPI package publication
- Bulk operations
- Advanced analytics and reporting
Acknowledgments
- Built with MCP Python SDK
- Designed for Claude Desktop
- Powered by iplicit API
Version: 1.0.0 Last Updated: November 4, 2025