streamable-httpupdated 2mo ago
Connect EZ@Work β all-in-one business management for freelancers, lawyers, agencies, and service businesses β to Claude, Gemini, Cursor, and any MCP-compatible AI.
What can you do with EZ@Work?
EZ@Work MCP Server
Connect EZ@Work β all-in-one business management for freelancers, lawyers, agencies, and service businesses β to Claude, Gemini, Cursor, and any MCP-compatible AI.
Tools (v1)
| Tool | Description | Type |
|---|---|---|
list_clients |
List your clients/customers | Read |
list_projects |
List your projects/cases/work orders | Read |
log_time_entry |
Log billable hours to a project | Write |
create_invoice |
Create a draft invoice (auto currency/language/VAT) | Write |
Setup
Claude Desktop / Claude.ai (OAuth β recommended)
Settings β Connectors β Add custom connector
- URL:
https://mcp.ezatwork.com/mcp - Authentication: OAuth (automatic)
Claude Code / Cursor / MCP Inspector (API token)
- Create a free EZ@Work account at https://app.ezatwork.com
- Generate an API token at https://app.ezatwork.com/settings/api-tokens
- Connect to
https://mcp.ezatwork.com/mcpwith headerAuthorization: Bearer ezw_pat_...
Local testing with MCP Inspector:
npx @modelcontextprotocol/inspector
Connect to http://localhost:8080/mcp with header Authorization: Bearer ezw_pat_...
Security
- Your data stays in your EZ@Work account
- OAuth mode: Google identity β EZ@Work account lookup; no credentials stored in the MCP
- API token mode: scoped permissions β grant only what you need; mandatory expiration
- Authorization is verified on every request
Privacy Policy
https://www.ezatwork.com/privacy
Universal Design
EZ@Work adapts to your business type: a lawyer sees "cases," a freelancer sees "projects," a service business sees "work orders." Currency, language (24 supported), and tax rules auto-detect from your profile β no configuration needed in the MCP.
Development
Run locally
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e .
cp .env.example .env
# Edit .env: EZ_API_BASE=http://localhost:5000 for local backend
python -m ezatwork_mcp.server
# Server starts at http://localhost:8080/mcp
Run tests
pip install pytest pytest-asyncio
pytest tests/
Docker
docker build -t ezatwork-mcp .
docker run -p 8080:8080 -e EZ_API_BASE=https://api.ezatwork.com ezatwork-mcp
Deploy to Cloud Run
gcloud run deploy ezatwork-mcp \
--source . \
--region europe-west1 \
--project ezatwork-production \
--allow-unauthenticated \
--port 8080 \
--update-env-vars "EZ_API_BASE=https://api.ezatwork.com,MCP_BASE_URL=https://mcp.ezatwork.com" \
--update-secrets "GOOGLE_CLIENT_ID=ezmcp-google-client-id:latest" \
--update-secrets "GOOGLE_CLIENT_SECRET=ezmcp-google-client-secret:latest" \
--update-secrets "EZ_MCP_MASTER_TOKEN=ezmcp-master-token:latest"
--allow-unauthenticatedis correct β auth is enforced at the MCP layer (OAuth or API token), not at the Cloud Run IAM level.
Technical notes
- Transport: Streamable HTTP (
/mcpendpoint) - Library:
fastmcp 3.3.1 - Auth (OAuth):
GoogleProviderfromfastmcp.server.auth.providers.google - Auth (token):
get_http_headers()fromfastmcp.server.dependencies - Dual-auth: OAuth active when
GOOGLE_CLIENT_ID+GOOGLE_CLIENT_SECRET+MCP_BASE_URLare set - Backend:
GET /api/users/mefor locale;GET /api/internal/users/by-emailfor OAuthβuser mapping - Time entries:
POST /api/timeentrywithisBillablefield - Invoices:
POST /api/invoiceswith computeddueDateandtotalper item
Built by
EZ@Work β the business OS for independents.
Install
Add EZ@Work to your client. Pick the one you use.
claude mcp add --transport http ez-work https://mcp.ezatwork.com/mcpcodex mcp add ez-work --url https://mcp.ezatwork.com/mcp{
"mcpServers": {
"ez-work": {
"url": "https://mcp.ezatwork.com/mcp"
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
{
"servers": {
"ez-work": {
"type": "http",
"url": "https://mcp.ezatwork.com/mcp"
}
}
}Add to `.vscode/mcp.json` in your workspace.
{
"mcpServers": {
"ez-work": {
"url": "https://mcp.ezatwork.com/mcp"
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"ez-work": {
"serverUrl": "https://mcp.ezatwork.com/mcp"
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
4 tools
EZ@Work exposes 4 tools to a connected agent.
- list_clients
- List your clients/customers
- list_projects
- List your projects/cases/work orders
- log_time_entry
- Log billable hours to a project
- create_invoice
- Create a draft invoice (auto currency/language/VAT)
Score
62 / 100
Good
- Documentation22/25
- Maintenance16/25
- Trust6/20
- Capability6/15
- Install experience12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 74 days ago
- Has a release history
- Repository is not archived
- No licence detected
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 4 tool(s) documented
- Provides prompt templates
- Provides resources
- 6 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint β no local install
Version history
| Versions | Published |
|---|---|
| 0.1.0Latest | Jun 17, 2026 |