Install
$ agentstack add skill-apideck-libraries-api-skills-apideck-mcp-month-end-close ✓ 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
Month-end close snapshot (Apideck MCP)
When the user wants a one-shot financial snapshot, prefer apideck-month-end-close-check over fetching the four reports individually. The workflow fans out aged creditors, aged debtors, balance sheet, and profit-and-loss in parallel against the connected accounting service and returns one aggregated object.
When this is the right tool
| User intent | Tool | |---|---| | "Run the month-end close", "P&L plus balance sheet for last month", "Aged AP/AR snapshot as of March 31" | apideck-month-end-close-check ✓ | | "Just the P&L" | accounting-profit-and-loss-get directly | | "Just aged creditors" | accounting-aged-creditors-get directly | | "Reconcile bank statements" | Out of scope — use the connector's native reconciliation |
IMPORTANT RULES
- READ-ONLY, idempotent. Safe to call repeatedly — no confirmation needed. The tool fetches data; it doesn't post anything.
- OMIT
report_as_of_dateto use today. Most users running a month-end ask for "last month", in which case pass an explicitYYYY-MM-DDlike"2026-03-31". - EXPECT partial results. Connector coverage varies — Odoo doesn't implement aged-creditors, Moneybird doesn't implement balance-sheet, etc. The workflow returns
{ unsupported: true, reason }for steps the connector can't fulfill, plus a top-levelwarnings[]array. Surface these to the user instead of treating them as failures. - **
isError: trueonly fires when every report failed** — typically a missing connection or expired credentials. Partial snapshots come back asisError: falseso the agent can still extract value.
Argument map
| Arg | Required | Default | Notes | |---|---|---|---| | report_as_of_date | no | today (YYYY-MM-DD) | Cutoff date for aged reports + balance sheet. | | x-apideck-service-id | no | first accounting connection | E.g. "xero", "quickbooks". |
Result shape
Full success
{
"report_as_of_date": "2026-03-31",
"service_id": "xero",
"aged_creditors": { "summary": [...] },
"aged_debtors": { "summary": [...] },
"balance_sheet": { "assets": 100000, ... },
"profit_and_loss":{ "revenue": 250000, ... }
}
Partial — some reports unsupported
{
"report_as_of_date": "2026-03-31",
"service_id": "odoo",
"aged_creditors": { "unsupported": true, "reason": "Aged-creditors not implemented for Odoo" },
"aged_debtors": { "unsupported": true, "reason": "..." },
"balance_sheet": { "assets": 100000, ... },
"profit_and_loss":{ "revenue": 250000, ... },
"warnings": [
"aged_creditors: unsupported on odoo (...)",
"aged_debtors: unsupported on odoo (...)"
]
}
isError: false — two reports came back, that's still useful.
Total failure
{
"report_as_of_date": "2026-03-31",
"service_id": null,
"aged_creditors": { "error": "..." },
"aged_debtors": { "error": "..." },
"balance_sheet": { "error": "..." },
"profit_and_loss":{ "error": "..." },
"warnings": [...]
}
With isError: true. Usually a missing connection — surface the elicitation URL.
Worked example
User: "Give me a month-end snapshot for March 2026 from QuickBooks."
{
"name": "apideck-month-end-close-check",
"arguments": {
"report_as_of_date": "2026-03-31",
"x-apideck-service-id": "quickbooks"
}
}
Then summarize for the user, calling out any unsupported rows distinctly:
> On 2026-03-31 in QuickBooks: revenue $250K, total assets $100K. Aged creditors / aged debtors aren't supported by this connector — pull those from the Bills-list and Invoices-list reports if you need them.
Common failure modes
| Symptom | Cause | Fix | |---|---|---| | All four reports unsupported | Connector doesn't implement these (e.g. Odoo without the Reports module) | Surface the limitation; suggest aggregating from accounting-bills-list + accounting-invoices-list instead | | UnsupportedFiltersError on a report | Connector rejects filter[report_as_of_date] or filter[end_date] | Connector quirk — currently surfaces as unsupported with the upstream message | | UrlElicitationRequiredError | Connection expired/missing | Surface consent URL, retry |
Related
- [
apideck-mcp](../apideck-mcp/) — front-door skill - Workflow source: src/gen/workflows/monthEndClose.ts
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: apideck-libraries
- Source: apideck-libraries/api-skills
- License: Apache-2.0
- Homepage: https://developers.apideck.com/building-with-llms
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.