
Peil
app.peilPublished by peil.appv0.1.5Updated Oct 31, 2026
Log hours, draft invoices and check where you stand — finance for Dutch freelancers.
Overview
Peil's MCP server lets an assistant log hours, draft invoices, file expenses and check outstanding balances for Dutch freelancers.
- What you can do
- Read clients, unbilled hours, invoices, expenses and an outstanding/overdue/drafts/YTD snapshot
- Log, edit and delete timesheet entries
- Create, update and delete clients
- Add expenses from a receipt, including Dutch btw and category
- Draft invoices from unbilled hours, change status, edit, archive or delete them, and set reminder copy
- Email invoices, schedule or cancel sends, and send payment reminders when the key allows it
- When to use it
- Useful for Dutch freelancers who already use Peil and want to handle admin from a prompt: logging hours, turning unbilled hours into draft invoices, filing receipts as expenses, and asking where they stand financially.
- Requirements
- Runs locally over stdio as a Python package (Python 3.11 or newer when run from source; uvx or pipx can run it without a clone). Needs a scoped API key from Peil under Settings, Developer, passed as PEIL_API_KEY; PEIL_API_URL optionally overrides the API base URL. Network access to the Peil API.
Installation
In SourceWeft
- Open Peil in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
Peil MCP server
mcp-name: app.peil/peil-mcp
Connect Peil to Claude (or any MCP client): log hours, draft invoices from unbilled hours, add expenses from a receipt, and check where you stand — from a prompt.
- Website: https://peil.app
- Docs: https://peil.app/en/docs/mcp
- Source: https://github.com/Luminc/peil-mcp
The server is a pure client of Peil's public API. It authenticates with a scoped API key you create in Peil under Settings → Developer. Keys and this server are free on every plan; what is Pro in Peil (emailing invoices, reminders, recurring invoices) stays Pro over a key too.
Draft-by-default
draft_invoice only ever creates a draft — nothing is sent to your
clients. Sending is a separate tool (send_invoice) that also requires the
separate invoices:send permission on your key. A key without that
permission can never email anything on your behalf.
Tools
Reads (read)
Hours (timesheet:write)
Clients (clients:write)
Expenses (expenses:write)
Invoices (invoices:write)
Client-facing email (invoices:send — irreversible, always confirm first)
1. Create your key
In Peil: Settings → Developer → create a key with the permissions you want.
Start with read + Log hours + Draft invoices (add Add expenses if you
want your assistant to file receipts); leave Send invoices off unless you
truly want an assistant emailing clients. You'll paste this key into
your assistant's config as PEIL_API_KEY below.
2. Install the server
The easy way — no clone, no install:
→ Your launch command is uvx peil-mcp (or pipx run peil-mcp). Skip to
step 3. Everything below is only needed if you're
running from source (e.g. before the first release, or to hack on it).
From source
You need Python 3.11 or newer and a local copy of this mcp-server/ folder.
Check your Python with python3 --version.
Which method? Run
which uv pipxfirst. If you already haveuv, use A — it's the least work. If not,pipx(B) gives you a clean global command. If you have neither and don't want to install tooling, the plain-venvpath (C) works with nothing but the Python that's already on your machine.
Everywhere below, replace /ABS/PATH/TO/mcp-server with the real absolute path
to this folder (run pwd inside it to get it).
A. With uv (no install step)
uv builds and runs on demand — nothing to install first:
→ Your launch command is: uv run --directory /ABS/PATH/TO/mcp-server peil-mcp
Don't have uv? curl -LsSf https://astral.sh/uv/install.sh | sh (macOS/Linux)
or pip install uv.
B. With pipx (isolated global command)
pipx installs the server into its own isolated environment and puts a
peil-mcp command on your PATH:
→ Your launch command is simply: peil-mcp
Don't have pipx? python3 -m pip install --user pipx && python3 -m pipx ensurepath.
C. Plain venv + pip (works with only stock Python)
No extra tooling — just the python3 you already have:
→ Your launch command is: /ABS/PATH/TO/mcp-server/.venv/bin/peil-mcp
(equivalently /ABS/PATH/TO/mcp-server/.venv/bin/python -m peil_mcp).
Use a plain
pip install .(not-e/editable) for running. An editable install relies on a.pthpath hook that can silently fail to load on some setups, givingModuleNotFoundError: No module named 'peil_mcp'. Editable is only needed if you're modifying the server itself — see Local development.
3. Connect your assistant
The only thing that changes between assistants is where the config lives. Every MCP client needs the same three things:
- command — your launch command from step 2
- env —
PEIL_API_KEYset to the key from step 1 - (optional)
PEIL_API_URL— only if you're pointing at a non-production Peil (see Local development); defaults tohttps://api.peil.app/api/v1.
The canonical config block (used by Claude Desktop, Cursor, Windsurf, Cline, and
most others) looks like this — command + args are just your launch command
split on spaces:
Claude Desktop
Edit claude_desktop_config.json
(macOS: ~/Library/Application Support/Claude/,
Windows: %APPDATA%\Claude\), add the block above, and restart Claude Desktop.
Claude Code (CLI)
Anything after -- is the launch command. Verify with claude mcp get peil
(look for Status: ✔ Connected) and use /mcp in a session to reconnect.
Cursor
Add the canonical block to .cursor/mcp.json (this project) or
~/.cursor/mcp.json (all projects), then enable peil in
Settings → MCP.
Windsurf
Add the canonical block to ~/.codeium/windsurf/mcp_config.json, then hit
Refresh in the Cascade MCP panel.
Cline / Roo (VS Code)
Open the extension's MCP Servers → Configure panel and add the canonical
block to cline_mcp_settings.json.
VS Code (native Copilot agent mode)
VS Code uses a slightly different shape — servers (not mcpServers) and an
explicit type — in .vscode/mcp.json:
Any other MCP client
Give it the same command + args + PEIL_API_KEY env. The server speaks MCP
over stdio; if a client can launch a stdio command, it can run Peil.
First prompts
Once connected, try:
- "Where do I stand?" →
orientation_snapshot - "Log 6 hours to De Correspondent today for editing work." →
log_hours - "Draft an invoice from my unbilled hours for De Correspondent." →
draft_invoice - "Here's my train ticket, add it as an expense." (with a photo) →
create_expense
With Send invoices left off your key, an assistant can prepare everything but physically cannot email a client — you send from Peil yourself.
Local development
Point the server at a local backend with PEIL_API_URL:
If you're modifying the server, an editable install picks up your changes without reinstalling:
Tests (mocked HTTP, no backend needed — pythonpath = ["src"] in
pyproject.toml makes them independent of the install mechanism):
Source: README.md at commit 643582f
Tools
0Version history
3- v0.1.5LatestOct 10, 2026
- v0.1.4Sep 25, 2026
- v0.1.3Sep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts