An MCP server that gives Claude (and other LLM clients) direct access to the Wint / Superkoll business management API — invoicing, expenses, accounting, salary, and more.
Claude Desktop <--> wint-mcp (stdio) <--> Wint API
In Wint, go to Settings > Integrations > Custom integrations and create a new integration. This gives you a username and API key. The integration's permissions control what the MCP server can access.
git clone <repo-url> wint-mcp
cd wint-mcp
npm install
npm run buildOpen your Claude Desktop config file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Add the server:
{
"mcpServers": {
"wint": {
"command": "node",
"args": ["/absolute/path/to/wint-mcp/dist/src/index.js"],
"env": {
"WINT_USERNAME": "your-username",
"WINT_API_KEY": "your-api-key"
}
}
}
}Restart Claude Desktop. You should see "wint" listed under the MCP tools icon.
The server exposes 89 tools across 12 modules, plus a generic fallback tool for any endpoint not covered by the curated tools.
| Module | Key | Tools | What it covers |
|---|---|---|---|
| Invoicing | invoicing |
8 | Create, send, and manage customer invoices |
| Incoming invoices | incoming-invoices |
10 | Supplier invoice approval workflow, create, route, supplier directory |
| Customers | customers |
5 | Customer CRUD and search |
| Receipts | receipts |
9 | Expense reports, file uploads, categories, payment methods |
| Quotations | quotations |
5 | Quotes / offers |
| Accounting | accounting |
11 | Accounts, vouchers, financial reports, dimensions, transactions |
| Salary | salary |
12 | Reports, payslips, approvals, deviations, drafts, specs |
| Time reporting | time-reporting |
4 | Time logs and projects |
| Company | company |
7 | Company info, employees, global search |
| Todos | todos |
3 | Todo summary, list, and snoozing |
| Articles | articles |
3 | Product / service articles |
| Automations | automations |
11 | Supplier auto-approval rules, WintCard classification rules |
| Fallback | always loaded | 1 | Generic wint_api_call for any API endpoint |
By default all modules are loaded. To load only specific modules, set the WINT_MODULES environment variable:
{
"mcpServers": {
"wint": {
"command": "node",
"args": ["/absolute/path/to/wint-mcp/dist/src/index.js"],
"env": {
"WINT_USERNAME": "your-username",
"WINT_API_KEY": "your-api-key",
"WINT_MODULES": "invoicing,customers,receipts"
}
}
}
}This reduces the number of tools the LLM sees, which can improve response quality and is useful when you only have API permissions for certain areas.
The wint_api_call fallback tool is always available regardless of this setting.
The Wint API has hundreds of endpoints. The curated modules cover the most common workflows, but wint_api_call lets Claude call any endpoint directly by specifying the HTTP method, path, and optional params/body. Its description includes a full endpoint index so the LLM knows what's available.
npm run dev # Run with tsx (no build step)
npm run build # Compile TypeScript
npm test # Run tests
npm run test:watch # Run tests in watch modesrc/
index.ts # Entrypoint (stdio transport)
server.ts # MCP server setup, tool registration
auth/client.ts # Wint API HTTP client (basic auth)
security.ts # Path validation, error sanitization
tools/
registry.ts # Module map, WINT_MODULES filtering
types.ts # WintTool interface, shared schemas
fallback.ts # Generic wint_api_call tool
invoicing.ts # Invoice tools
incoming-invoices.ts
customers.ts
receipts.ts
quotations.ts
accounting.ts
salary.ts
time-reporting.ts
company.ts
todos.ts
articles.ts
automations.ts # Automation rule tools
generated/
endpoint-index.ts # Auto-generated API endpoint list
- Create
src/tools/your-module.tsexporting aWintTool[]array - Import and add it to
moduleMapinsrc/tools/registry.ts - Update the
MODULE_NAMESlength assertion inregistry.test.ts - Run
npm test && npm run build