Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Create and check EU e-invoices (XRechnung, ZUGFeRD, Factur-X, Peppol) locally. Free, no API key.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"conformo": {
"command": "npx",
"args": [
"-y",
"@conformo/mcp-server"
]
}
}
}在终端中运行这条命令
claude mcp add conformo -- npx -y @conformo/mcp-server粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"conformo": {
"command": "npx",
"args": [
"-y",
"@conformo/mcp-server"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"conformo": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@conformo/mcp-server"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 arsalmurad 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.2.3)于昨天进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。
同一分类中有:Spec Driven Development, Remote Desktop Commander, Microsoft Exchange Online MCP
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Exchange Online admin for MSPs: forwarding audits, EWS posture and offboarding, no PowerShell
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
Let Claude, Cursor or any MCP client make and check European e-invoices: XRechnung, ZUGFeRD / Factur-X PDF, Peppol BIS Billing 3.0, plain CII and UBL.
validate_invoice runs the official KoSIT, CEN and Peppol rules plus the XSDs. Its verdicts match the official KoSIT validator 100% on the official test invoices, and the full comparison is public.Quick start for Claude Code: claude mcp add conformo -- npx -y @conformo/mcp-server. Other clients are below. Needs Node.js 20 or newer. MCP Registry name: io.github.arsalmurad/conformo.
Then ask your agent things like:
Every tool is a thin wrapper over @conformo/toolkit. Two transports: stdio (default, for desktop clients) and stateless Streamable HTTP (for a shared deployment).
| Tool | What it does | Read-only |
|---|---|---|
create_invoice | Structured invoice (JSON object) to XML: cii, cii-extended, ubl, xrechnung-cii, xrechnung-ubl, peppol-ubl. | yes |
create_invoice_pdf | Same input to a Factur-X / ZUGFeRD PDF/A-3 (en16931, xrechnung, extended). Returns base64, or writes outputPath. | no |
validate_invoice | XML text or base64 PDF. Detects syntax and profile, runs XSD and the matching rule sets, reports which ran. Optional country FR or DE. | yes |
convert_invoice | XML or PDF in, another syntax out. | yes |
parse_invoice | XML or PDF to the invoice JSON model. | yes |
get_country_requirements | Mandates, dates, thresholds and sources per country, plus what Conformo itself supports. | yes |
explain_validation_rule | A rule id such as BR-CO-15: official wording, plain-language meaning and fix. | yes |
All tools declare an outputSchema and return structuredContent plus a text fallback. Money is always integer minor units (EUR 12.34 is 1234). The input schema of create_invoice documents every field with its BT/BG identifier. Input problems come back as an isError result listing every issue (path, BT id, message), never a stack trace.
The commands below use the published package name. From a checkout, replace npx -y @conformo/mcp-server with npx tsx /absolute/path/to/conformo/packages/mcp-server/src/server.ts.
Add to claude_desktop_config.json (Settings, Developer, Edit Config):
{
"mcpServers": { "conformo": { "command": "npx", "args": ["-y", "@conformo/mcp-server"] } } }
On Windows, if npx is not found, use "command": "cmd" with "args": ["/c", "npx", "-y", "@conformo/mcp-server"].
claude mcp add conformo -- npx -y @conformo/mcp-server
claude mcp add --transport http conformo https://mcp.example.com/mcp
.cursor/mcp.json in the project, or ~/.cursor/mcp.json for all projects:
{
"mcpServers": { "conformo": { "command": "npx", "args": ["-y", "@conformo/mcp-server"] } } }
outputPathcreate_invoice_pdf can write a file instead of returning base64. The path must end in .pdf, stay inside the server's working directory, and not exist yet unless overwrite: true. Set CONFORMO_MCP_ALLOW_ANY_PATH=1 to lift the directory limit.
conformo-mcp --http --port 8787 --host 127.0.0.1 --max-body-bytes 8388608
| Flag | Env | Default |
|---|---|---|
--port | CONFORMO_MCP_PORT | 8787 (0 picks a free port; the URL is printed on stderr) |
--host | CONFORMO_MCP_HOST | 127.0.0.1 |
--max-body-bytes | CONFORMO_MCP_MAX_BODY_BYTES | 8388608 (8 MiB); larger bodies get 413 |
Endpoints: POST /mcp (JSON-RPC, JSON responses), GET /healthz (liveness), GET/DELETE /mcp answer 405. The server is stateless: a fresh server and transport per request, no session ids, no data kept between calls. It has no authentication and no TLS.
Do not expose the port directly. Run it on a private interface and put a reverse proxy with TLS and authentication in front (a bearer token check, mTLS, or your identity-aware proxy). Because it is stateless you can run any number of replicas behind a load balancer with no sticky sessions. Bind to 0.0.0.0 only inside a container or private network.
Dockerfile:
FROM node:22-slim
WORKDIR /app RUN npm install -g @conformo/mcp-server ENV CONFORMO_MCP_HOST=0.0.0.0 CONFORMO_MCP_PORT=8787 EXPOSE 8787 USER node HEALTHCHECK CMD node -e "fetch('http://127.0.0.1:8787/healthz').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))" CMD ["conformo-mcp", "--http"]
Caddy example (token auth and TLS in front):
mcp.example.com {
@authed header Authorization "Bearer {env.MCP_TOKEN}" handle @authed { reverse_proxy 127.0.0.1:8787 } respond "unauthorized" 401 }
Note that invoices contain personal and commercial data: whoever can reach the endpoint can send invoices through it, and you carry the usual obligations for the traffic your proxy logs.
valid: true means the rule sets listed in ruleSets and the XSD passed. It is not a statement that any tax authority, buyer or network will accept the invoice.get_country_requirements reports a sourced dataset; entries marked unverified are not confirmed from an official source. It is not legal advice.Design decisions are recorded in DECISIONS.txt.