Install
$ agentstack add skill-igptai-skills-expense-report-builder ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Expense Report Builder
Prerequisites
This skill needs the iGPT MCP at https://mcp.igpt.ai/.
If the MCP tools aren't available or return an auth error, tell the user to install the iGPT plugin (/plugin marketplace add igptai/skills) or add https://mcp.igpt.ai/ as a connector, then complete OAuth and say "ready". Retry once after they confirm. Never invent tokens or OAuth URLs. For deeper troubleshooting: https://raw.githubusercontent.com/igptai/skills/main/shared/mcp-guard.md
What This Skill Does
Finds all expense receipts in email for a given period, categorizes each by expense type and optionally by project or client, and returns a structured expense report ready for submission to accounting software or an accountant.
Workflow
- Before calling any tool, collect these values from the user. Offer the
defaults and let the user override them; do not invent values they did not give.
- [time_range] — what window of email to scan. The user may give this
in any form ("the current month", "last 30 days", "May 2024", "since the trip"). Default: the current calendar month. Keep the user's natural phrasing for use in the ask input; convert to ISO dates separately for the search call.
- [grouping_scope] — optional grouping for the report. "none"
(default), "project", or "client".
- [groupingclause] — derived. When [groupingscope] is not "none",
set to ", grouped by [grouping_scope]". When "none", set to empty string.
- [local_currency] — the currency to convert all totals into (e.g.
USD, EUR, ILS). No default — must come from the user.
- Call search with:
- query: receipt expense reimbursement purchase paid travel meal hotel
- datefrom: ISO start date derived from [timerange]
- dateto: ISO end date derived from [timerange] (or today if open-ended)
- Call ask with:
- input: Find all expense receipts and purchase confirmations in email from [timerange][groupingclause]. For each expense extract: the vendor, the amount, the currency, the date, the expense category, and any project or client it can be associated with based on context. Convert all amounts to [local_currency].
- output_format:
{ "strict": true, "schema": { "type": "object", "description": "Expense report for a specific time period built from email receipts", "additionalProperties": false, "properties": { "periodfrom": { "type": "string", "description": "ISO8601 start date of the expense report period" }, "periodto": { "type": "string", "description": "ISO8601 end date of the expense report period" }, "localcurrency": { "type": "string", "description": "Currency all amounts have been converted to" }, "expenses": { "type": "array", "description": "List of every expense receipt found in email during the period", "items": { "type": "object", "description": "A single expense item extracted from an email receipt", "additionalProperties": false, "properties": { "vendor": { "type": "string", "description": "Name of the vendor or merchant" }, "date": { "type": "string", "description": "ISO8601 date of the expense" }, "originalamount": { "type": "number", "description": "Expense amount in its original currency" }, "originalcurrency": { "type": "string", "description": "Currency code of the original expense" }, "convertedamount": { "type": "number", "description": "Expense amount converted to local currency" }, "category": { "type": "string", "description": "Type of expense", "enum": [ "travel", "accommodation", "meals", "software", "hardware", "officesupplies", "marketing", "professionalservices", "communication", "other" ] }, "projectorclient": { "type": "string", "description": "Project or client this expense can be attributed to, empty string if not determinable" }, "notes": { "type": "string", "description": "Any additional context about this expense from the email" } }, "required": [ "vendor", "date", "originalamount", "originalcurrency", "convertedamount", "category", "projectorclient", "notes" ] } }, "totalsbycategory": { "type": "array", "description": "Subtotal of expenses grouped by category", "items": { "type": "object", "description": "Category subtotal", "additionalProperties": false, "properties": { "category": { "type": "string", "description": "Expense category name" }, "total": { "type": "number", "description": "Total amount for this category in local currency" } }, "required": ["category", "total"] } }, "grandtotal": { "type": "number", "description": "Total of all expenses in local currency" }, "summary": { "type": "string", "description": "One or two sentence summary of total expenses found and largest categories" } }, "required": [ "periodfrom", "periodto", "localcurrency", "expenses", "totalsbycategory", "grandtotal", "summary" ] } }
- Present with grand total and category breakdown first, then full itemized
list grouped by category.
- Ask: "Would you like this formatted for a specific expense tool like
Expensify, QuickBooks, or a CSV?"
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: igptai
- Source: igptai/skills
- License: MIT
- Homepage: https://www.igpt.ai
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.