A Model Context Protocol (MCP) server for invoice management with modular architecture.
- Examples Guide - Comprehensive usage examples, workflows, and error handling
- Development Guide - Developer setup, testing, and contributing
- Architecture Guide - Technical architecture and component details
- API Reference - MCP tools, resources, and prompts reference
- Contributing - Contribution guidelines
- MCP Protocol Support: Full implementation of Tools, Resources, and Prompts
- Multiple Transports: STDIO and HTTP/SSE support
- Dual GUI: CLI and Web interfaces
- SDK Layer: All operations through unified SDK
- Modular Design: Swappable components without code changes
┌─────────────────────────────────────────────────────────────┐
│ GUI Layer │
│ ┌─────────┐ ┌─────────┐ │
│ │ CLI │ │ Web │ │
│ └────┬────┘ └────┬────┘ │
├───────────────────┴──────────────┴──────────────────────────┤
│ SDK Layer │
│ CustomerOperations │ InvoiceOperations │ ReportOperations │
├─────────────────────────────────────────────────────────────┤
│ MCP Server │
│ ┌─────────┐ ┌───────────┐ ┌─────────┐ │
│ │ Tools │ │ Resources │ │ Prompts │ │
│ └─────────┘ └───────────┘ └─────────┘ │
├─────────────────────────────────────────────────────────────┤
│ Transport Layer │
│ ┌─────────┐ ┌─────────┐ │
│ │ STDIO │ │ HTTP │ │
│ └─────────┘ └─────────┘ │
├─────────────────────────────────────────────────────────────┤
│ Infrastructure │
│ Database │ Repositories │ Lock Manager │ Config │
└─────────────────────────────────────────────────────────────┘
# 1. Clone and install
git clone <repository-url>
cd MCP_Server
pip install -e ".[dev]"
# 2. Test the CLI
python -m invoice_mcp_server cli customer list
# 3. Run the MCP server
python -m invoice_mcp_server stdio- Python 3.10+
- pip
# Install with dev dependencies (pytest, mypy, ruff)
pip install -e ".[dev]"pip install -e .All configuration via environment variables or .env file:
# Server
SERVER_HOST=127.0.0.1
SERVER_PORT=8080
# Database
DB_PATH=data/invoices.db
# Invoice
VAT_RATE=0.17
CURRENCY=ILS
# Transport
TRANSPORT_TYPE=stdio
# Logging
LOG_LEVEL=INFOpython -m invoice_mcp_server stdioUse this mode when connecting from Claude Desktop or other MCP clients.
python -m invoice_mcp_server httppython -m invoice_mcp_server web
# Access at http://localhost:8080python -m invoice_mcp_server --helpThe CLI provides direct access to all operations for testing and management.
# List all customers
python -m invoice_mcp_server cli customer list
# Create a new customer
python -m invoice_mcp_server cli customer create --name "Acme Corp" --email "contact@acme.com"
# Create with all fields
python -m invoice_mcp_server cli customer create --name "Acme Corp" --email "contact@acme.com" --address "123 Main St" --phone "555-1234"
# Delete a customer
python -m invoice_mcp_server cli customer delete <customer-id># List all invoices
python -m invoice_mcp_server cli invoice list
# Create a new invoice
python -m invoice_mcp_server cli invoice create --customer-id <customer-id>
# Create with due date and notes
python -m invoice_mcp_server cli invoice create --customer-id <customer-id> --due-date "2024-12-31" --notes "Project payment"
# Add item to invoice
python -m invoice_mcp_server cli invoice add-item --invoice-id <invoice-id> --description "Consulting services" --quantity 10 --price 150.00
# Send invoice
python -m invoice_mcp_server cli invoice send <invoice-id>
# Record payment
python -m invoice_mcp_server cli invoice pay --invoice-id <invoice-id> --amount 1500.00 --method "bank_transfer"# Show statistics
python -m invoice_mcp_server cli report stats
# Show overdue invoices
python -m invoice_mcp_server cli report overdueAdd to your claude_desktop_config.json:
{
"mcpServers": {
"invoice-server": {
"command": "python",
"args": ["-m", "invoice_mcp_server", "stdio"],
"cwd": "/path/to/MCP_Server"
}
}
}You can test the MCP server by sending JSON-RPC messages via stdio:
# Start the server and send an initialize request
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"capabilities":{}}}' | python -m invoice_mcp_server stdiocreate_customer- Create new customerupdate_customer- Update customer detailsdelete_customer- Delete customercreate_invoice- Create new invoiceadd_invoice_item- Add item to invoiceupdate_invoice_status- Change invoice statusrecord_payment- Record paymentsend_invoice- Send invoice to customer
invoice://config- Server configurationinvoice://vat-rates- VAT ratesinvoice://customers/list- Customer listinvoice://invoices/list- Invoice listinvoice://invoices/recent- Recent invoicesinvoice://invoices/overdue- Overdue invoicesinvoice://statistics/overview- Statistics
create_invoice- Guide for invoice creationmanage_customer- Guide for customer managementprocess_payment- Guide for payment processinggenerate_report- Guide for report generation
pytestpytest --cov=src/invoice_mcp_server --cov-report=term-missing# Test models
pytest tests/test_models.py -v
# Test database
pytest tests/test_database.py -v
# Test SDK
pytest tests/test_sdk.py -v
# Test MCP server
pytest tests/test_mcp_server.py -v# Run all customer-related tests
pytest -k "customer" -v
# Run all invoice-related tests
pytest -k "invoice" -v# Type checking
mypy src/invoice_mcp_server
# Linting
ruff check src/invoice_mcp_server
# Format check
ruff format --check src/invoice_mcp_server# 1. Create a customer
python -m invoice_mcp_server cli customer create --name "Test Company" --email "test@company.com"
# Returns: {"id": "uuid-here", "name": "Test Company", ...}
# 2. List customers to get the ID
python -m invoice_mcp_server cli customer list
# 3. Create an invoice for the customer
python -m invoice_mcp_server cli invoice create --customer-id <customer-id-from-step-2>
# 4. Add items to the invoice
python -m invoice_mcp_server cli invoice add-item --invoice-id <invoice-id> --description "Service" --quantity 1 --price 100
# 5. Check statistics
python -m invoice_mcp_server cli report statsMIT