Peil

app.peil由 peil.app 发布v0.1.5更新于 Oct 31, 2026

Log hours, draft invoices and check where you stand — finance for Dutch freelancers.

概览

AI 生成的概览

Peil 的 MCP 服务器让助手为荷兰自由职业者记录工时、起草发票、登记支出并查看财务状况。

可以做什么
  • 读取客户、未开票工时、发票、支出,以及应收/逾期/草稿/年初至今概览
  • 新增、修改和删除工时记录
  • 创建、更新和删除客户
  • 按收据添加支出,含荷兰 btw 与类别
  • 从未开票工时起草发票,更改状态、编辑、归档或删除,并设置催款邮件文案
  • 在密钥允许时发送发票邮件、安排或取消发送、发送付款提醒
适用场景
适合已在使用 Peil 的荷兰自由职业者,希望通过一句提示完成日常事务:记录工时、把未开票工时变成草稿发票、把收据登记为支出,并询问自己的财务现状。
运行要求
以 Python 包形式通过 stdio 在本机运行(从源码运行需 Python 3.11 或更高;uvx 或 pipx 可免克隆直接运行)。需要在 Peil 的“设置 → 开发者”中创建带权限范围的 API 密钥,并以 PEIL_API_KEY 传入;PEIL_API_URL 可覆盖 API 基础地址。需要能访问 Peil API 的网络。
安装前请注意
密钥带有写入权限:工时、客户、支出和发票工具会创建、修改和删除数据。发送类工具会向客户发邮件且不可撤回,除非确有必要,否则不要开启 invoices:send 权限;没有该权限的密钥无法代发邮件。收据照片会被助手读取,照片本身保存在 Peil 应用中。部分功能在 Peil 套餐中仍属 Pro。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Peil,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

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.

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)

ToolWhat it does
list_clientsList your clients
get_client_detailsOne client's details, incl. whether a default rate is set
list_unbilledUnbilled hours per client for a period
list_invoicesList invoices, filterable by status / client
orientation_snapshotOutstanding / overdue / drafts / YTD position
get_reminder_copyYour custom reminder email copy + schedule
list_expensesA year's one-off expenses, and which have no receipt kept

Hours (timesheet:write)

ToolWhat it does
log_hoursAdd a timesheet entry (client default rate unless given)
edit_hoursEdit an entry (only the fields you pass change)
delete_hoursDelete an entry (blocked if on a sent/paid invoice)

Clients (clients:write)

ToolWhat it does
create_client / update_client / delete_clientClient CRUD (delete blocked if it has projects/sent invoices)

Expenses (expenses:write)

ToolWhat it does
create_expenseAdd an expense as the receipt says it: total, Dutch btw, category (key or label). Your assistant can read the receipt; the photo itself is kept in the Peil app

Invoices (invoices:write)

ToolWhat it does
draft_invoiceDraft an invoice from unbilled hours (summary / by_project / per_day)
set_invoice_statusChange status (e.g. mark paid) — does not email anyone
update_invoiceEdit safe fields (due date, payment date, notes)
delete_invoice / archive_invoiceDelete (paid ones blocked) / archive
set_reminder_copyWrite custom reminder email copy for one tone/language

Client-facing email (invoices:send — irreversible, always confirm first)

ToolWhat it does
send_invoiceEmail an invoice to the client now
schedule_sendSchedule a draft to be emailed at a future time
cancel_scheduled_sendCancel a scheduled send
send_reminderEmail a payment reminder for a sent/overdue invoice

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:

sh
uvx peil-mcp          # runs the latest release on demand# or, with pipx:pipx run peil-mcp

→ 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 pipx first. If you already have uv, 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-venv path (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:

sh
uv run --directory /ABS/PATH/TO/mcp-server peil-mcp

→ 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:

sh
pipx install /ABS/PATH/TO/mcp-server

→ 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:

sh
cd /ABS/PATH/TO/mcp-serverpython3 -m venv .venv.venv/bin/pip install .

→ 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 .pth path hook that can silently fail to load on some setups, giving ModuleNotFoundError: 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_KEY set to the key from step 1
  • (optional) PEIL_API_URL — only if you're pointing at a non-production Peil (see Local development); defaults to https://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:

jsonc
{  "mcpServers": {    "peil": {      "command": "peil-mcp",          // or "uv", or the venv's python path      "args": [],                     // e.g. ["run","--directory","/ABS/PATH/TO/mcp-server","peil-mcp"] for uv      "env": { "PEIL_API_KEY": "your-key" }    }  }}

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)

sh
# pipx / venv (single-command launcher):claude mcp add peil -e PEIL_API_KEY=your-key -- peil-mcp
# uv:claude mcp add peil -e PEIL_API_KEY=your-key -- uv run --directory /ABS/PATH/TO/mcp-server peil-mcp

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:

jsonc
{  "servers": {    "peil": {      "type": "stdio",      "command": "peil-mcp",      "args": [],      "env": { "PEIL_API_KEY": "your-key" }    }  }}

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:

sh
PEIL_API_URL=http://localhost:8000/api/v1 PEIL_API_KEY=your-local-key peil-mcp

If you're modifying the server, an editable install picks up your changes without reinstalling:

sh
.venv/bin/pip install -e ".[dev]"

Tests (mocked HTTP, no backend needed — pythonpath = ["src"] in pyproject.toml makes them independent of the install mechanism):

sh
.venv/bin/pytest

来源:README.md,提交 643582f

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

3
  1. v0.1.5最新Oct 10, 2026
  2. v0.1.4Sep 25, 2026
  3. v0.1.3Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分