About wfirma-mcp
wfirma-mcp is an unofficial, read-only MCP server for developers and assistants that need access to wFirma API v2 company data. Its typed tools retrieve invoices, contractors, expenses, and payments, while credentials remain on the local machine.
Key features
- 01List companies and invoices
- 02Retrieve invoice details
- 03List contractors and expenses
- 04Retrieve expense and payment details
- 05Keep access read-only
Use cases
- 01Check invoices in wFirma
- 02Look up contractors and company expenses
- 03Review payment records without modifying them
MCP support
The MCP server exposes nine typed, read-only tools for retrieving company data, invoices, contractors, expenses, and payments from the wFirma API v2.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
npx -y wfirma-mcpWFIRMA_ACCESS_KEYSecretwFirma access key from your panel (Integrations → API)WFIRMA_SECRET_KEYSecretwFirma secret key paired with the access keyWFIRMA_APP_KEYSecretwFirma app key for the API applicationLocal servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.
Tools
9Saved tool list · updated 2w ago
This tool takes no parameters.
Details
From the project READMEwFirma MCP
Unofficial, read-only MCP server for the wFirma API v2
(api2.wfirma.pl). Gives MCP-compatible AI assistants typed, read-only access
to company data, invoices, contractors, expenses, and payments — with
credentials that never leave your machine and no commercial middleware between
you and wFirma.
Not affiliated with wFirma. "wFirma" is a trademark of its respective owner.
Tools (9, all read-only)
| Tool | Endpoint |
|---|---|
wfirma_list_companies | GET /user_companies/find |
wfirma_list_invoices | GET /invoices/find |
wfirma_get_invoice | GET /invoices/get/{id} |
wfirma_list_contractors | GET /contractors/find |
wfirma_get_contractor | GET /contractors/get/{id} |
wfirma_list_expenses | GET /expenses/find |
wfirma_get_expense | GET /expenses/get/{id} |
wfirma_list_payments | GET /payments/find |
wfirma_get_payment | GET /payments/get/{id} |
Every company-scoped tool requires the internal companyId returned by
wfirma_list_companies. A Polish NIP is not accepted as a company id.
Why read-only
The server intentionally contains no add, edit, delete, send, fiscalization,
KSeF, or payment-mutation operation. The full list of excluded categories,
reviewed against the official documentation at
doc.wfirma.pl, is recorded in
coverage-manifest.json. If you need writes, use
wFirma's own tooling — not this server.
Setup
Credentials
wFirma API keys are created in your wFirma panel (Integrations → API). Required environment variables:
WFIRMA_ACCESS_KEYWFIRMA_SECRET_KEYWFIRMA_APP_KEY
See .env.example. Never commit real values.
Build
pnpm install
pnpm build # → dist/index.js (self-contained esbuild bundle)
pnpm test # all HTTP traffic is mocked; no live account needed
Claude Desktop / any stdio MCP client
{
"mcpServers": {
"wfirma": {
"command": "node",
"args": ["/absolute/path/to/wfirma-mcp/dist/index.js"],
"env": {
"WFIRMA_ACCESS_KEY": "your-access-key",
"WFIRMA_SECRET_KEY": "your-secret-key",
"WFIRMA_APP_KEY": "your-app-key"
}
}
}
}
Claude Code / Cursor (scope: project)
claude mcp add wfirma -- node /absolute/path/to/wfirma-mcp/dist/index.js
Design notes
- No runtime dependencies beyond the MCP SDK and zod. The client uses
Node's stdlib
httpswith a hard 20s timeout and a bounded response-size guard. - Fail-closed error taxonomy. Missing credentials, non-numeric company
ids, oversized responses, and auth failures each raise a distinct
wfirma_*error code instead of a generic failure. - No PII in logs. Tool parameters are never logged.
- Coverage manifest.
coverage-manifest.jsonmaps every tool to its endpoint, risk class, and the test that proves it; a CI test enforces the manifest stays in sync with the source.
License
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.