EZ@Work

Registre officiel Finance et paiements

Manage clients, projects, time, and invoices in EZ@Work — business management for freelancers.

Installation

Ajoutez ceci à la configuration MCP de votre client (Claude Desktop : claude_desktop_config.json ; Cursor : .cursor/mcp.json ; VS Code et les autres utilisent la même forme « mcpServers »).

Remote (streamable-http)
Claude Code
claude mcp add --transport http ez-work 'https://mcp.ezatwork.com/mcp'
Configuration JSON (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "ez-work": {
            "type": "http",
            "url": "https://mcp.ezatwork.com/mcp"
        }
    }
}

Documentation

Tirée du README du projet sur GitHub, actualisée chaque semaine. Les liens ouvrent GitHub.

Sommaire
  1. EZ@Work MCP Server
  2. Tools
  3. Setup
  4. Agent skill
  5. Security
  6. Privacy Policy
  7. Universal Design
  8. Development
  9. Built by

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

ToolDescriptionType
list_clientsList your clients/customers — id, name, company, status, email (+ default rate). Optional status, search, limit (default 50, max 200)Read
list_projectsList your projects/cases/work orders — id, name, status, client. Optional status, search, limitRead
create_clientCreate a client; refuses a likely duplicate (same email, or same name when no email) unless allow_duplicate=trueWrite
log_time_entryLog billable hours to a project (0 < hours <= 24) for a given date (default today)Write
create_invoiceCreate a draft invoice, 1-50 line items (auto currency/language/VAT)Write

Write tools change data in your EZ@Work account. Their descriptions tell the AI to confirm the exact values with you before calling them, and every tool validates its arguments before anything reaches the EZ@Work API — a bad value comes back as {"error": "invalid_input", ...}, a backend failure as a short {"error": ..., "status": ..., "message": ...} (plan limits pass through as PLAN_LIMIT_REACHED).

List tools return only the fields an assistant needs to pick a record — no notes, phone numbers, VAT numbers, addresses or contacts — and mark record text as user-entered data rather than instructions.

Setup

Settings → Connectors → Add custom connector

  • URL: https://mcp.ezatwork.com/mcp
  • Authentication: OAuth (automatic)
Claude Code / Cursor / MCP Inspector (API token)
  1. Create a free EZ@Work account at https://app.ezatwork.com
  2. Generate an API token at https://app.ezatwork.com/settings/api-tokens with the scopes clients:read, clients:write, projects:read, time:write, invoices:write
  3. Connect to https://mcp.ezatwork.com/mcp with header Authorization: Bearer ezw_pat_...

Local testing with MCP Inspector:

npx @modelcontextprotocol/inspector

Connect to http://localhost:8080/mcp with header Authorization: Bearer ezw_pat_...

Agent skill

skills/ezatwork-business-assistant/SKILL.md teaches an agent how to use these tools safely: resolve IDs by listing first, confirm every write with the user, treat record text as data, and never claim an invoice was sent. It is also listed on Agensi.

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: tokens have a mandatory expiration. Token scopes are being enforced server-side (a backend change is in progress), so don't rely on scopes alone to limit a token yet. Create tokens with only the scopes this server uses: clients:read, clients:write, projects:read, time:write, invoices:write
  • 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-unauthenticated is correct — auth is enforced at the MCP layer (OAuth or API token), not at the Cloud Run IAM level.

Technical notes
  • Transport: Streamable HTTP (/mcp endpoint)
  • Library: fastmcp 3.x (pinned <4)
  • Auth (OAuth): GoogleProvider from fastmcp.server.auth.providers.google
  • OAuth redirect allowlist: clients may only register Claude's callbacks and loopback URIs; set MCP_ALLOWED_REDIRECT_URIS (comma-separated patterns) to admit other clients
  • Auth (token): get_http_headers() from fastmcp.server.dependencies
  • Dual-auth: OAuth active when GOOGLE_CLIENT_ID + GOOGLE_CLIENT_SECRET + MCP_BASE_URL are set
  • Backend: GET /api/users/me for locale; GET /api/internal/users/by-email for OAuth→user mapping
  • Lists: GET /api/clients and GET /api/projects take no filters; status, search and limit are applied in the MCP server, which trims each record before returning it
  • Time entries: POST /api/timeentry with isBillable field
  • Invoices: POST /api/invoices with computed dueDate and total per item

Built by

EZ@Work — the business OS for independents.

Questions fréquentes

Qu'est-ce que EZ@Work ?

Manage clients, projects, time, and invoices in EZ@Work — business management for freelancers.

Comment installer EZ@Work ?

Il fonctionne comme serveur distant. Dans Claude Code : claude mcp add --transport http ez-work 'https://mcp.ezatwork.com/mcp'. Pour les autres clients, collez la configuration JSON de cette page dans leurs réglages MCP.

Faut-il une clé API pour EZ@Work ?

Son entrée au registre n'indique aucune clé ni secret obligatoire. Certaines fonctions peuvent tout de même demander un compte auprès du service auquel il se connecte.

EZ@Work est-il open source ?

Son code est public sur GitHub, mais le dépôt ne déclare pas de licence standard.

Qui maintient EZ@Work ?

Il est publié par eranfinish. AI.tn le référence sans le maintenir ni le recommander.

Issu du registre MCP officiel. Être listé n'est pas une recommandation : vérifiez le code et les permissions d'un serveur avant de lui donner accès à vos données.