MCP Buste Paga
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Buste Paga Show my salary history for 2024"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Buste Paga
An MCP (Model Context Protocol) server that parses Italian INAZ payslip PDFs and stores them in a local SQLite database. Connect it to any MCP-compatible AI client to analyze your salary history, search payslip items, and get detailed breakdowns — all with your data staying on your machine.
Installation
Requirements: Python 3.10+, uv
Clone the repository and install dependencies:
git clone https://github.com/morettimarco/MCP-Buste-Paga.git
cd MCP-Buste-Paga
uv syncVerify it runs:
uv run mcp-buste-pagaRelated MCP server: Doc Agent
Ingesting payslips
Once the server is connected to an AI client (see below), ask the assistant to ingest your payslip PDFs:
"Ingest my payslips from ~/Documents/Buste"
The ingest_payslips tool will recursively scan the directory for .pdf files, parse each one, and store the data. Duplicates are automatically skipped via SHA-256 hashing.
Database location
All data is stored in a local SQLite database at:
~/.mcp-buste-paga/buste_paga.dbThe directory is created automatically on first run. The database contains four tables:
Table | Description |
| Company information (name, fiscal code, INPS/INAIL codes) |
| Employee profile (name, fiscal code, hire date, role, contract) |
| Monthly payslip summaries (gross, net, taxes, TFR, etc.) |
| Individual payslip line items (base pay, overtime, deductions, etc.) |
Available tools
Tool | Description |
| Scan a directory for PDF payslips, parse and store them. Returns a summary of ingested/skipped/failed files. |
| Get employee profile and company details, plus the number of payslips stored. |
| Get salary history (net pay, gross, deductions) ordered by most recent month. Optionally filter by year. |
| Get the full breakdown of a specific payslip by month and year, including all line items. |
| Search payslip line items by keyword (e.g. "Straordinario", "Ferie", "Ticket") with per-month and grand totals. |
Connecting to AI clients
Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"buste-paga": {
"command": "/full/path/to/uv",
"args": [
"--directory",
"/full/path/to/MCP-Buste-Paga",
"run",
"mcp-buste-paga"
]
}
}
}Note: Use absolute paths. Find your
uvpath withwhich uv.
Restart Claude Desktop. A hammer icon in the chat input confirms the server is connected.
Claude Code (CLI)
Add to your project's .mcp.json or run:
claude mcp add buste-paga -- uv --directory /full/path/to/MCP-Buste-Paga run mcp-buste-pagaChatGPT Desktop
ChatGPT Desktop supports MCP servers via its settings. Go to Settings > Beta features > MCP Servers, click Add, and configure:
Name: buste-paga
Command:
/full/path/to/uvArguments:
--directory /full/path/to/MCP-Buste-Paga run mcp-buste-paga
Cursor
Add to .cursor/mcp.json in your project root:
{
"mcpServers": {
"buste-paga": {
"command": "/full/path/to/uv",
"args": [
"--directory",
"/full/path/to/MCP-Buste-Paga",
"run",
"mcp-buste-paga"
]
}
}
}Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"buste-paga": {
"command": "/full/path/to/uv",
"args": [
"--directory",
"/full/path/to/MCP-Buste-Paga",
"run",
"mcp-buste-paga"
]
}
}
}Privacy
All payslip data is parsed and stored locally on your machine. No data is sent to external services. The AI client only accesses the data through the MCP tools above.
License
MIT
Available Tools
5 toolsget_employee_summaryA
Get employee and company information from the database.
Returns the employee profile (name, fiscal code, hire date, role) and company details, plus the number of payslips stored.
Inputs: no named parameters. Returns: result
get_payslip_details_toolA
Get the full details of a specific payslip by month and year.
Args: mese: Month number (1-12). anno: Year (e.g. 2026).
Returns the payslip master record plus all line items (voci) showing what was paid or deducted (base pay, overtime, taxes, etc.).
Inputs: anno (required), mese (required). Returns: result
get_salary_history_toolA
Get salary history ordered by most recent month first.
Args: year: Filter to a specific year (optional). limit: Maximum number of months to return (default 12).
Returns a JSON array with mese, anno, totale_competenze, totale_ritenute, netto_a_pagare, and lordo_anno for each month.
Inputs: year, limit. Returns: result
ingest_payslipsA
Scan a directory for PDF payslips, parse them, and store in the database.
Skips already-ingested files (SHA-256 deduplication). Returns a JSON summary: total files, ingested, duplicates skipped, failures.
Inputs: directory_path (required). Returns: result
search_payslip_itemsA
Search payslip line items by description keyword.
Searches the voci_corpo_busta table using SQL LIKE matching. Groups and sums results by month/year.
Args: keyword: Search term (e.g. "Straordinario", "Ferie", "Ticket", "Commissioni"). start_year: Filter from this year (optional). end_year: Filter up to this year (optional).
Returns per-month breakdown and grand totals for competenze and ritenute.
Inputs: keyword (required), end_year, start_year. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
Each tool targets a distinct operation: ingestion, employee profile, salary summary, payslip details, and keyword search. There is no apparent overlap; even the two 'get' tools serve clearly separate purposes (aggregate history vs. individual payslip detail).
Most names follow a verb_noun pattern, but two tools have the '_tool' suffix (get_salary_history_tool, get_payslip_details_tool) while others do not. This is a minor inconsistency that doesn't impede understanding, but it breaks the pattern slightly.
With exactly 5 tools, the set is well-scoped for a payslip management server. Each tool addresses a necessary step (ingestion, querying summaries, details, and search) without redundancy or bloat.
The server covers the core lifecycle: import payslips, view employee context, review salary history, inspect specific payslips, and search line items. Minor gaps exist (e.g., no list of all payslips as a lightweight endpoint, no update/delete), but the core functionality is complete for typical read-only and ingestion use cases.
Maintenance
Related MCP Connectors
Turn PDFs, scans and photos into a queryable database. Invoices, CVs, receipts, in bulk.
Make PDF invoices from your AI chat: clients, numbering, VAT, overdue reports. All data is local.
Create PDF invoices from your AI chat: clients, numbering, VAT, overdue reports. All data is local.
Create PDF invoices from your AI chat: clients, numbering, VAT, overdue reports. All data is local.
Related MCP Servers
- FlicenseAqualityDmaintenanceParses PDF receipts to extract grocery and shopping expenses, automatically categorizes items using smart rules and LLM fallback, and stores them in a local SQLite database for querying purchase history and spending patterns.3-
- AlicenseNot gradedqualityDmaintenanceEnables extraction of structured data from documents like invoices, receipts, and bank statements using local Vision AI (Ollama) or cloud providers (Gemini), with data stored in a local SQLite database.4 npmMIT
- AlicenseNot gradedqualityCmaintenanceBuilds searchable SQLite databases from PDFs, preserving inline image locations for AI agents to discover and caption visual content. Supports full-text search over text, image placeholders, and saved captions.1MIT
- AlicenseAqualityBmaintenanceIndexes local documents (PDF, Word, Markdown, text) into a SQLite database for AI agents to search and retrieve bounded, source-located passages. Runs fully locally with optional OCR, preserving privacy.5MIT