Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.theluckystrike/office-suite-time-invoice-expense-excel-price

MCPB · OFFICE-SUITE.MCPB · SCANNED SEP 21

One MCP server for the whole freelancer office: time tracking, price watching, spreadsheets, PDF.

Available components

46 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security22
  • Malware scan not yet available for this package.Unverified
  • Known CVEs were checked across the 190 of 190 dependencies we could resolve, so this covers what we could see, not the whole tree.Partial
  • No install/post-install scripts declared.Pass
  • 88 of 190 dependencies flagged as unhealthy (2 deprecated). View diagnostics → Partial
Provenance & Transparency45
Schema Quality & AI Usability81
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 24098 tokens (~139/item across 173 items; 158 tools + 15 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
  • Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage95
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 85% of tool parameters carry a description.Partial
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 12 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "entry_delete" implies "delete" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 159 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass

Unverified: 1 category

A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

mcpb · office-suite.mcpb

Download bundle
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 17 Sept 26 46

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 21 Sept 2026 · Analysed mcpb/https://github.com/theluckystrike/mcp-servers/releases/download/v0.22.0/office-suite.mcpb@0.22.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem mcpb

Background: How many MCP packages publish verified provenance →

Dependencies 190 packages
Packages resolved 190
Deprecated 2
Stale 88
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 158 exposed · ~23,736 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
pdf_pages ~138

Call this tool to pull selected pages into one new PDF, in the order written: "2,4-6" gives four pages. Asking for a page twice copies it twice. The input is never modified. Free tier: files up to 30 pages.

NameTypeReqDescription
out_pathstringyesWhere to write the extracted PDF
overwritebooleanReplace out_path if it exists. Default false
pagesstringyes1-based pages and ranges to keep, in output order, e.g. "2,4-6" or "5,1,1"
pathstringyesThe source PDF

No output schema declared.

No examples provided.

pdf_reorder ~129

Call this tool to write a new PDF with pages in the order you give. The order must name every page exactly once, so nothing drops by accident; use pdf_pages for a subset. Pro.

NameTypeReqDescription
orderarrayyesThe 1-based page numbers in their new order, e.g. [3,1,2] for a three-page file. Every page must appear exactly once
out_pathstringyesWhere to write the reordered PDF
overwritebooleanReplace out_path if it exists. Default false
pathstringyesThe source PDF

No output schema declared.

No examples provided.

pdf_rotate ~157

Call this tool to turn pages by a multiple of 90 degrees, clockwise for positive. Rotation is added to whatever the page already had, for a sideways scan. Writes a new file. Free tier: files up to 30 pages.

NameTypeReqDescription
degreesintegeryes90, 180, 270 or -90. Positive turns clockwise. Added to the page's existing rotation
out_pathstringyesWhere to write the rotated PDF
overwritebooleanReplace out_path if it exists. Default false
pagesstringWhich pages to turn, e.g. "1" or "2,4-6". Omit for every page
pathstringyesThe source PDF

No output schema declared.

No examples provided.

pdf_split ~219

Call this tool to write one new PDF per range. Ranges are 1-based and may be open-ended: "1-3,5,7-" gives pages 1-3, page 5, and 7 to the end. The input is never modified. Free tier: files up to 30 pages.

NameTypeReqDescription
out_path_patternstringyesOutput path with a placeholder: {n} is the part number (1, 2, 3...), {range} is the range itself (e.g. 1-3), {name} is the input file name without .pdf. Example: ~/out/{name}-{range}.pdf
overwritebooleanReplace existing outputs. Default false: nothing is overwritten and nothing is written at all if any target exists
pathstringyesThe PDF to split
rangesstringyesComma-separated 1-based page ranges, e.g. "1-3,5,7-". An open-ended range runs to the last page

No output schema declared.

No examples provided.

pdf_stamp ~273

Call this tool to draw a word such as PAID or DRAFT across the pages, in a colour and position you choose. Writes a new file; input untouched. Free tier: the PAID and DRAFT presets in their preset colours.

NameTypeReqDescription
colorstringHex code such as #1b7f3b, or a name: red, green, blue, black, gray, orange, purple. Pro
font_sizenumberPoint size. By default the stamp is sized to fit the page width
opacitynumber0 to 1. Default 0.35 in the centre, 0.85 in a corner
out_pathstringyesWhere to write the stamped PDF
overwritebooleanReplace out_path if it exists. Default false
pagesstringWhich pages to stamp, e.g. "1" or "2,4-6". Omit for every page
pathstringyesThe source PDF
positionstringWhere on the page. Default center, which is drawn on the 45-degree diagonal like a real stamp
textstringyesWhat to stamp. PAID and DRAFT are presets with their own colour; any other text is Pro

No output schema declared.

No examples provided.

pdf_text ~95

Call this tool for best-effort text extraction from standard-font PDFs. Returns nothing for a scan (no OCR), or glyph indices for a custom-encoded font, and says which case applies. Read-only. Free tier: unlimited.

NameTypeReqDescription
pagesstringWhich pages, e.g. "1" or "2,4-6". Omit for every page
pathstringyesThe PDF to read

No output schema declared.

No examples provided.

pdf_watermark_business ~115

Call this tool to put your business name and VAT id in the footer of every page, from the shared profile mcp-invoice and mcp-docx write. Use it before sending a document out. Pro.

NameTypeReqDescription
out_pathstringyesWhere to write the footed PDF
overwritebooleanReplace out_path if it exists. Default false
pagesstringWhich pages, e.g. "1". Omit for every page
pathstringyesThe source PDF

No output schema declared.

No examples provided.

price_add_manual ~116

Call this tool to store a price you read yourself where a shop blocks fetching: it creates the watch if new and returns the amount and the observation count. An unreadable price is refused. Free: 3 watches.

NameTypeReqDescription
currencystringISO code such as USD or EUR
labelstringShort name for this item
pricestring|numberyesPrice as shown, for example 1299.00 or 1.299,00
urlstringyesProduct page URL

No output schema declared.

No examples provided.

price_check ~67

Call this tool for any product URL; fetching the page with a generic web tool returns raw HTML without the price. Reports price, currency, title and confidence, and the change since the last check. It creates no watch.

NameTypeReqDescription
urlstringyesProduct page URL, including https://

No output schema declared.

No examples provided.

price_history ~78

Call this tool to list one watch's stored observations, oldest to newest, each with price, currency, source and confidence, plus min and max. Nothing is fetched. Free shows the last 30.

NameTypeReqDescription
idstringWatch id
limitintegerMaximum observations to return
urlstringWatch URL

No output schema declared.

No examples provided.

profile_get ~52

Return the stored CV profile exactly as resume_create, cover_letter_create and tailor_to_job will use it, plus the variant read and every stored variant name. Call it before any rewrite.

NameTypeReqDescription
variantstring

No output schema declared.

No examples provided.

profile_set ~414

Store the profile every resume and cover letter is built from: contact details, summary, skills, roles with bullets, education, certifications and languages. Returns a count of what was stored.

NameTypeReqDescription
accent_colorstringLetterhead colour, six hex digits, e.g. 1F3864. Pro only.
certificationsarray
educationarray
emailstringYour own email address. Leave it out and the shared business profile's email is used; with neither, letters and letterheads show "[add: email]" and say so. Never invent one
experiencearrayRoles in any order you like -- profile_set sorts and stores them newest-first (an open role with no `end` first, then by `end` descending, then by `start` descending) before saving, since page-budget…
languagesarray
linksarrayPortfolio, LinkedIn, GitHub
locationstring
mergebooleanUpdate the stored profile: fields you pass replace their stored value, fields you leave out are kept. Required when a profile already exists, unless you pass replace
namestringYour own name. Leave it out and the shared business profile's name is used, so you are never asked for a name the suite already holds
phonestringYour own phone number. Defaults to the shared business profile's phone
replacebooleanDiscard the stored profile and store exactly what this call carries. Required when a profile already exists, unless you pass merge
skillsarray
summarystringTwo or three lines. Used verbatim as the fit paragraph of a cover letter.
variantstringName a second profile, e.g. "backend". One profile per data directory on the free tier; named variants are Pro only.

No output schema declared.

No examples provided.

project_set_rate ~283

Set the hourly rate and currency used to turn tracked hours into money for a project or client. Returns the new rate and, when re-rating is asked for, how many already logged entries changed.

NameTypeReqDescription
apply_to_existingbooleanRe-rate time already logged for this project: every entry is re-stamped with the new rate, including entries that already carry one. Default false: the new rate applies to future entries only, becaus…
currencystringCurrency: a code (EUR, USD, GBP, PLN) or a word ('euros', 'pounds', 'zl'). Defaults to the shared business profile's default_currency, else USD.
hourly_rateyesHourly rate: a number (85) or the words the user said ('90 euros an hour'). '1,200 USD' is 1200; '12,50 EUR' is 12.50; anything ambiguous is refused.
only_missingbooleanOnly meaningful with apply_to_existing. True restores the old fill-the-gaps behaviour: only entries that carry no rate of their own are touched. Default false, which re-stamps every entry of the proj…
projectstringyesProject or client name. A partial name that matches exactly one existing project is used as that project.

No output schema declared.

No examples provided.

proposal_create ~269

Call this tool to produce a client-ready .docx proposal from summary, scope, deliverables, timeline, price and terms. Returns the reference, the total and the file path. Free tier: 3 proposals or contracts per month.

NameTypeReqDescription
clientstringyesClient name, printed as 'Prepared for'. The letterhead comes from your business_set profile
deliverablesarrayWhat the client receives, one bullet each. Omitted from the document if not given or empty
out_pathstringWhere to write the .docx. Defaults to the data directory
overwritebooleanReplace out_path if a file is already there. Default false: an existing file is never overwritten
priceobjectyes
project_titlestringyesProject title
scopearrayWhat is in scope, one bullet each. Omitted from the document if not given or empty
summarystringOne or two paragraphs on the problem and the approach. Omitted from the document if not given
timelinearrayPhases and their durations, rendered as a table. Omitted from the document if not given or empty
valid_untilstringYYYY-MM-DD, the date the quote expires

No output schema declared.

No examples provided.

proposal_update ~149

Rewrite an existing proposal in place from its reference. Only the fields you pass change; the rest comes from the data stored at creation. Returns the fields that changed and the file path.

NameTypeReqDescription
clientstring
deliverablesarray
priceobject
project_titlestring
referencestringyesThe proposal reference, e.g. PROP-2026-0001. The same file and the same reference number are kept, so no second document is burned against the free-tier monthly count
scopearray
summarystring
timelinearray
valid_untilstring

No output schema declared.

No examples provided.

rate_history ~213

Call this tool for the ECB rate of one currency pair across a window. Returns one row per published day plus the min, max, average and the change. A window wider than the free 90 days is shortened, not refused.

NameTypeReqDescription
daysintegerTrailing window in calendar days, default 30. Only TARGET business days carry a rate, so 30 days holds about 21 rows. Free reads up to 90 days back; Pro reads the whole series back to 1999-01-04
fromstringyesBase currency of the pair
from_datestringISO date, inclusive. Overrides days. Free is limited to the last 90 days
max_rowsintegerCap the table, default 200. min/max/avg still cover the whole window
tostringyesQuote currency of the pair. Each row is 1 from = X to
to_datestringISO date, inclusive, default today

No output schema declared.

No examples provided.

rate_on ~231

Call this tool for the ECB rate of one pair on one date. Returns both directions and the rate date, so a reciprocal is never reported as the published figure. A date beyond the free window is shortened, never refused.

NameTypeReqDescription
datestringyesISO date YYYY-MM-DD. If the ECB published nothing that day - every weekend, 1 January, Good Friday, Easter Monday, 1 May, 25 and 26 December - the last rate published on or before it is returned and…
fromstringyesBase currency. The ECB quotes every currency per 1 euro, so "the ECB rate for USD" is from EUR to USD, not the other way round; invert only if the user asked for the inverse
tostringyesQuote currency. The rate returned is 1 from = X to

No output schema declared.

No examples provided.

rates_latest ~138

Call this tool for the latest ECB daily reference rates against any base: 1.0812 for USD means 1 base = 1.0812 USD. Crosses go through the euro. Returns the ECB rate date and the cache age.

NameTypeReqDescription
basestringBase currency; defaults to the shared business profile's default_currency, else EUR. A rate of 1.0812 for USD means 1 base = 1.0812 USD. Cross rates go through the euro, the only pair the ECB publish…
quotesarrayOnly these currencies, at most 200. Omit for all of them

No output schema declared.

No examples provided.

report ~263

Timesheet report: total tracked hours and billable money for a period, optionally grouped by (group by) project, day, task or tag - hours per project, how much to bill. Omit group_by for the plain total per currency.

NameTypeReqDescription
formatstringtable (default), json or csv. Every format carries one amount per currency, never a mixed-currency sum.
fromstringyesISO date/time start of the period. On the free tier the window is clamped to the last 7 days; Pro reports over the full history.
group_bystringproject | day | task | tag. Optional: omit it for the plain total per currency, with no breakdown. Money is grouped by currency and EUR is never added to USD.
projectstringOptional project filter
tostringyesISO date/time end of the period. On the free tier the window is clamped to the last 7 days; Pro reports over the full history.
unbilled_onlybooleanDefault true: hours already put on an invoice (entry_mark_billed) are excluded, so the report answers 'what is still to bill'. Pass false for the full timesheet including invoiced work.

No output schema declared.

No examples provided.

resume_create ~237

Call this tool to write the stored profile to a Word .docx. Returns the output path, the estimated page count, which bullets were dropped to fit, and which keywords matched or are missing.

NameTypeReqDescription
keywordsarrayFrom the posting. A keyword that appears anywhere in the profile is printed in bold; one that does not is reported as missing and is never added to the resume.
max_pagesintegerBullets are ordered by relevance to target_role and keywords, then trimmed to fit this many pages against a measured word budget. Default 2.
out_pathstringWhere to write the .docx. Defaults to <data dir>/documents/<name>-resume.docx, numbered -2, -3, ... if that exists.
overwritebooleanReplace an existing file at out_path. Default false: the call fails and nothing is written.
stylestringFree tier prints "modern" only; "classic" and "compact" are Pro.
target_rolestringPrinted under your name and used to rank bullets
variantstring

No output schema declared.

No examples provided.

resume_read ~121

Call this tool to read an existing .docx resume into the profile shape, with the sections found and anything unplaced. It saves nothing unless save is true, so review it first. .doc and .rtf are refused.

NameTypeReqDescription
pathstringyesPath to an existing .docx. Legacy .doc and .rtf are not readable here. Parsed best effort, section by heading.
savebooleanStore the result as the profile. Default false: nothing is saved. Review the result first.
variantstring

No output schema declared.

No examples provided.

resume_to_html ~162

Call this tool to write the resume as semantic HTML with a print stylesheet and return where it went; print it to PDF from a browser, because there is no doc_to_pdf here. Bullets are trimmed to fit max_pages. Free.

NameTypeReqDescription
max_pagesintegerBullets are trimmed to fit this many pages against a measured word budget. Default 2.
out_pathstringWhere to write the .html. Defaults to <data dir>/documents/<name>-resume.html, numbered -2, -3, ... if that exists.
overwritebooleanReplace an existing file at out_path. Default false: the call fails and nothing is written.
target_rolestring
variantstring

No output schema declared.

No examples provided.

resume_to_markdown ~72

Return the stored profile as markdown text inline, ready to paste into a form or an ATS box. Same page-budget trimming as resume_create for max_pages. Nothing is written to disk. Free.

NameTypeReqDescription
max_pagesinteger
target_rolestring
variantstring

No output schema declared.

No examples provided.

sale_create ~606

Record a sale and generate the bill of sale: who sold, who bought, what item (with VIN, serial or IMEI where it has one), the price in minor units and the date. Returns the BOS-YYYY-NNNN number of the draft. The draft can still be changed with sale_update; sale_finalize freezes it into the signing copy and sale_render prints it. Free tier: 10 drafts.

NameTypeReqDescription
as_isbooleanInclude the as-is clause: sold with all faults, no warranties except any written here. Default true, the norm for second-hand sales; pass false to leave it out
buyer_addressstringThe buyer's postal address, one string
buyer_emailstringThe buyer's email
buyer_namestringyesWho is buying, e.g. Jane Kowalska or Northwind Sp. z o.o.
buyer_phonestringThe buyer's phone number
conditionstringThe condition at handover, e.g. used, good working order, or new, sealed
currencystringyesISO code the price is in
datestringThe date of the sale, YYYY-MM-DD. Default today
duplicate_okbooleanRecord it even though an identical sale to the same buyer exists, for a genuinely repeated sale. Default false
identifier_otherstringAny other identifying number, e.g. a hull number or an asset tag
imeistringIMEI, 15 digits, for a phone or tablet
item_categorystringWhat kind of item, e.g. vehicle, equipment, electronics, stock
item_descriptionstringyesWhat was sold, specific enough to identify it, e.g. 2019 Honda Civic 1.5 petrol, grey, or MacBook Pro 14-inch 2021
notesstringAnything else the document should say, e.g. payment method or what is included in the sale
price_minorintegeryesThe sale price in whole minor units (integer cents). 120000 is USD 1,200.00
quantityintegerHow many units this document covers. Default 1
seller_addressstringThe seller's postal address, one string
seller_emailstringThe seller's email
seller_namestringWho is selling. Defaults to the shared business profile's name when the profile has one
seller_phonestringThe seller's phone number
serialstringSerial number, for equipment and electronics
vinstringVehicle Identification Number, 17 characters, for a vehicle sale
warrantystringA warranty the seller does give, in their own words, e.g. The seller warrants the engine for 30 days from the sale date

No output schema declared.

No examples provided.

sale_delete ~111

Delete a bill of sale by its BOS number. A draft goes outright. A finalized document needs confirm_finalized true, because it is the local copy of a record the buyer may hold. The BOS number is never reissued, so a gap in the series is the record that a document was deleted.

NameTypeReqDescription
confirm_finalizedbooleanRequired true to delete a finalized document. Default false
salestringyesThe bill of sale id, e.g. BOS-2026-0001

No output schema declared.

No examples provided.

sale_finalize ~80

Finalize a bill of sale so it is ready to sign: the document is frozen from this call on, sale_update refuses it, and every later render is the signing copy without the DRAFT watermark. Free tier: 5 finalized documents.

NameTypeReqDescription
salestringyesThe bill of sale id, e.g. BOS-2026-0001

No output schema declared.

No examples provided.

sale_get ~69

Read one bill of sale in full by its BOS number: both parties, the item and its identifiers, price, terms, and whether it is still a draft or the finalized signing copy.

NameTypeReqDescription
salestringyesThe bill of sale id, e.g. BOS-2026-0001

No output schema declared.

No examples provided.

sale_list ~77

List every bill of sale, drafts and finalized, newest first: id, status, date, item, buyer, seller and price. Filter to drafts or finalized documents with status.

NameTypeReqDescription
limitintegerMaximum rows, default 500
statusstringWhich documents to list: all (default), draft, or final

No output schema declared.

No examples provided.

sale_render ~207

Render a bill of sale as a clean printable document: Markdown, a self-contained HTML file ready for print-to-PDF, or both, with signature lines for seller and buyer. Drafts render with a DRAFT watermark so a review copy cannot be signed by mistake. Files default to the server's documents folder; pass out_path to choose. Free.

NameTypeReqDescription
formatstringWhat to render: markdown, html, or both (default). The HTML is one self-contained file, no external assets
out_pathstringWhere to write. With format both this is a stem and .md / .html are appended. Default: the server's documents folder under the data directory
overwritebooleanReplace an existing file at out_path. Default false: an occupied explicit path is refused, a derived one gets -2, -3, ...
salestringyesThe bill of sale id, e.g. BOS-2026-0001

No output schema declared.

No examples provided.

sale_summary ~43

Summarize the book: how many drafts and finalized documents, and the total sold value per currency, drafts separate from finalized. Currencies are never added together. Free.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

sale_update ~274

Change anything on a bill of sale that is not finalized yet: price, buyer, seller, item details, identifiers, the as-is clause, warranty or notes. Pass an empty string to clear an optional field. A finalized document cannot be edited.

NameTypeReqDescription
as_isboolean
buyer_addressstring
buyer_emailstring
buyer_namestringWho is buying
buyer_phonestring
conditionstring
currencystring
datestringThe date of the sale, YYYY-MM-DD
identifier_otherstring
imeistring
item_categorystring
item_descriptionstring
notesstring
price_minorintegerThe sale price in whole minor units (integer cents)
quantityinteger
salestringyesThe bill of sale id, e.g. BOS-2026-0001
seller_addressstring
seller_emailstring
seller_namestringWho is selling
seller_phonestring
serialstring
vinstring
warrantystring

No output schema declared.

No examples provided.

schedule_create ~457

Define a repeating invoice: a client, the line items, how often to bill, and when it starts and ends. Returns the schedule id, a summary and its next dates. Nothing is invoiced until invoice_generate_due runs.

NameTypeReqDescription
anchor_dayintegerPro: bill on this day of month instead of the start date's day. 31 means the last day of every month
auto_generatebooleanMarks the schedule for the monthly_billing_run prompt. Default false. Nothing runs in the background either way: invoices are created only when invoice_generate_due is called
clientstringyesClient name or id, as in the invoice server. Unknown names are created on the first generated invoice
currencystringDefaults to your business default currency
due_daysintegerDays until each invoice is due, defaults to your payment terms
end_datestringYYYY-MM-DD, INCLUSIVE: an occurrence landing exactly on it is still generated
end_of_monthbooleanPro: always bill on the last day of the month
everyyesHow often to bill: "weekly", "monthly", "quarterly", "yearly", or {days: 10}. Month steps keep the start date's day of month and clamp it to shorter months, so a schedule starting on the 31st bills o…
itemsarrayyesThe line items billed every period
notesstringFree text printed under the totals of every generated invoice
start_datestringyesYYYY-MM-DD. The first invoice falls on this date, and for weekly/monthly/quarterly/yearly steps its day of month is the billing day for every later period
tax_notestringWhy this schedule bills the tax it bills, e.g. 'Reverse charge: VAT accounted for by the recipient, art. 196 Directive 2006/112/EC'. It is printed under the totals of EVERY invoice this schedule gene…

No output schema declared.

No examples provided.

schedule_delete ~95

Delete one schedule permanently. Invoices already generated stay in the invoice server and the history is kept. Re-creating it gives a NEW id, so its old periods count as unbilled. schedule_pause is reversible.

NameTypeReqDescription
idstringyesSchedule id, or a client name. Deletion is permanent; re-creating the same schedule afterwards gives it a NEW id, so its old periods count as unbilled again

No output schema declared.

No examples provided.

schedule_get ~66

Return one schedule in full by id or client: items, cadence, dates, due days, anchor rules, notes, per-period amount, next due date and how many invoices it generated. schedule_history is the log.

NameTypeReqDescription
idstringyesSchedule id, or a client name

No output schema declared.

No examples provided.

schedule_history ~63

The audit log for one schedule id, oldest first: period, invoice number, issue and due dates, amount, PDF path, and whether that invoice is unpaid, paid, skipped or since deleted. schedule_list finds the id. Pro.

NameTypeReqDescription
idstringyes

No output schema declared.

No examples provided.

schedule_list ~57

List schedules: id, client, cadence, per-period amount and currency, start and end dates, status, next due date and auto_generate. Filter by status; a paused schedule reports no next due date.

NameTypeReqDescription
statusstring

No output schema declared.

No examples provided.

schedule_pause ~54

Stop one schedule generating invoices without deleting it; invoice_generate_due and forecast skip it. Its periods keep falling due and resuming back-bills them, so use schedule_skip to drop just one.

NameTypeReqDescription
idstringyes

No output schema declared.

No examples provided.

schedule_resume ~56

Make a paused schedule active again. Every period missed while it was paused is still due and the next invoice_generate_due creates them all. Refused when it would pass the free tier's 3 active.

NameTypeReqDescription
idstringyes

No output schema declared.

No examples provided.

schedule_skip ~161

Close ONE occurrence for good without pausing the schedule, reporting what will not be billed. period must be a real occurrence of it. An invoiced period is refused; undo reopens a skip.

NameTypeReqDescription
idstringyesSchedule id, or a client name
periodstringyesThe occurrence date to skip, YYYY-MM-DD, exactly as it appears in schedule_upcoming or forecast. This is the answer to "pause this client for October": schedule_pause stops the whole schedule and a r…
undobooleanRemove a previous skip so the period becomes due again. Works only on a period that has not been invoiced. Default false

No output schema declared.

No examples provided.

schedule_upcoming ~88

Table every occurrence of every ACTIVE schedule due in the next N days (30 default), with its amount and the invoice due date, plus a total per currency. Free lists the first 3 in your horizon.

NameTypeReqDescription
daysintegerDays ahead, default 30. The free tier honours the horizon you ask for and lists the first 3 occurrences in it; Pro lists them all

No output schema declared.

No examples provided.

schedule_update ~251

Change one schedule by id: client, items, currency, cadence, dates, due_days, notes or auto_generate. Only the fields you pass change. Periods already invoiced are never re-issued, so a new amount applies to future ones.

NameTypeReqDescription
anchor_dayPro
auto_generateboolean
clientstring
currencystring
due_daysinteger
end_datestring|nullnull clears the end date
end_of_monthbooleanPro
everyHow often to bill: "weekly", "monthly", "quarterly", "yearly", or {days: 10}. Month steps keep the start date's day of month and clamp it to shorter months, so a schedule starting on the 31st bills o…
idstringyes
itemsarray
notesstring
start_datestring
tax_notestringReplace the tax reason carried onto every future generated invoice. Pass an empty string to clear it

No output schema declared.

No examples provided.

sheet_add_column ~289

Call this tool to add a computed column and save the result to a NEW file; the source is never modified unless out_path points at it. Returns the new file path, the row count and a preview of the first rows.

NameTypeReqDescription
decimalsintegerRound numeric formula results to this many decimals. Default: the widest decimal count of the columns the formula reads, capped at 2 when they all hold 2 or fewer (money in, money out); otherwise no…
formulastringExpression over the columns of each row, in the same expression language as sheet_query, e.g. "[Qty] * [Unit Price]" or '[Country] = "PL"'. Give either formula or values
namestringyesName of the new column. It must not already exist on the sheet
out_pathstringOutput file; default <source>-plus-<column>.<same ext>. The source file is left untouched unless this points at it
pathstringyesPath to the source .xlsx/.xlsm/.xlsb/.ods/.csv/.tsv file (~ is expanded); it is never modified
sheetstringSheet name; default is the first sheet
valuesarrayExplicit values, one per data row, instead of a formula. Missing entries are left blank

No output schema declared.

No examples provided.

sheet_convert ~167

Call this tool to convert a sheet between excel (xlsx), csv and json. Writes a new file next to the source unless out_path is given; the source is never modified. Returns the new file path with its row and column counts.

NameTypeReqDescription
out_pathstringWhere to write; default is the source name with the new extension, next to the source. It must differ from the source path
pathstringyesPath to the source .xlsx/.xlsm/.xlsb/.ods/.csv/.tsv file (~ is expanded); it is never modified
sheetstringSheet to convert; default is the first sheet. Only that one sheet is written
tostringyesTarget format; the default out_path takes this as its extension

No output schema declared.

No examples provided.

sheet_find ~123

Call this tool to search every cell of a spreadsheet or CSV for text; built-in file readers cannot parse spreadsheets. Matching is case insensitive. Returns cell addresses with a preview of the row each hit is on.

NameTypeReqDescription
pathstringyesPath to the .xlsx/.xlsm/.xlsb/.ods/.csv/.tsv file (~ is expanded)
sheetstringSheet name; default searches every sheet
textstringyesText to look for; matched case insensitively anywhere inside a cell. Up to 200 hits are returned

No output schema declared.

No examples provided.

sheet_info ~79

Call this tool for any spreadsheet or CSV file path; built-in file readers cannot parse spreadsheets and must not be used for them. Start here: sheet names, size, header row, column types and samples.

NameTypeReqDescription
pathstringyesPath to the .xlsx/.xlsm/.xlsb/.ods/.csv/.tsv file (~ is expanded)

No output schema declared.

No examples provided.

sheet_query ~240

Call this tool for any spreadsheet or CSV file path; built-in file readers cannot parse spreadsheets and must not be used for them. Filters, groups, aggregates and sorts in one call: where '[Qty] > 10'.

NameTypeReqDescription
aggregatearrayAggregates per group, e.g. [{"col":"Units","fn":"sum","as":"total_units"}]. Defaults to a row count when group_by is given.
asstring
group_byarrayGroup rows by these columns before aggregating, e.g. ["Rep"] or ["Region","Rep"]
limitintegerDefault 100
pathstringyesPath to the .xlsx or .csv file
selectarrayColumn names to return; default all (with group_by, defaults to the group columns plus the aggregates)
sheetstring
sortobjectSort column; may be an aggregate alias such as total_units
wherestringFilter, e.g. [Qty] >= 5 AND ([Status] = "open" OR [Status] = "new")

No output schema declared.

No examples provided.

sheet_read ~138

Call this tool for any spreadsheet or CSV file path; built-in file readers cannot parse spreadsheets and must not be used for them. Reads rows as a table, JSON or CSV; page with limit/offset or an A1 range.

NameTypeReqDescription
asstringOutput format, default table
limitintegerRows to return, default 100
offsetintegerRows to skip, default 0
pathstringyes
rangestringA1 range such as A1:D50; overrides limit/offset
sheetstringSheet name; defaults to the first sheet

No output schema declared.

No examples provided.

sheet_stats ~82

Call this tool for any spreadsheet or CSV file path; built-in file readers cannot parse spreadsheets and must not be used for them. Whole-column statistics: count, empty, distinct, min, max, sum, mean, median.

NameTypeReqDescription
columnsarrayLimit to these columns; default all
pathstringyes
sheetstring

No output schema declared.

No examples provided.

sheet_write ~244

Call this tool to write rows to an xlsx, csv, tsv or json file; the extension of out_path picks the format. mode is new_file, append or overwrite. Other sheets are kept. Free: 500 rows per file.

NameTypeReqDescription
modestringyesnew_file writes a brand new file and refuses to clobber an existing one; append adds the rows under the existing data; overwrite replaces the file contents
out_pathstringWhere to write; default is a new file next to the source for new_file, or the source itself for append/overwrite. The output format follows this extension: .xlsx, .csv, .tsv or .json. An extension is…
pathstringyesSource file for append/overwrite, or the intended file for new_file (~ is expanded)
rowsarrayyesArray of objects, whose keys become the headers, or an array of arrays with the header row first
sheetstringSheet to write; default is the first sheet of the source, or "Sheet1" for a new file. Other sheets of an existing workbook are kept unchanged

No output schema declared.

No examples provided.

tailor_to_job ~104

READ-ONLY gap analysis against a posting: writes nothing, changes nothing. Returns matched keywords, missing ones, a coverage figure and orderings of facts you already stated. Act on it with resume_create.

NameTypeReqDescription
job_descriptionstringyesPaste the posting. The free tier reads up to 2,000 characters; Pro reads any length.
limitintegerHow many keywords to extract from the posting. Default 30.
variantstring

No output schema declared.

No examples provided.

Common questions

What is the io.github.theluckystrike/office-suite-time-invoice-expense… MCP server?

io.github.theluckystrike/office-suite-time-invoice-expense… is an MCP server listed in the public MCP registry as io.github.theluckystrike/office-suite-time-invoice-expense…. One MCP server for the whole freelancer office: time tracking, price watching, spreadsheets, PDF. This page covers its MCPB bundle (https://github.com/theluckystrike/mcp-servers/releases/download/v0.22.0/office-suite.mcpb).

Is the io.github.theluckystrike/office-suite-time-invoice-expense… MCP server safe to use?

io.github.theluckystrike/office-suite-time-invoice-expense… scores 46 out of 100 on VerifyMCP. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.theluckystrike/office-suite-time-invoice-expense… MCP server expose?

io.github.theluckystrike/office-suite-time-invoice-expense… exposes 158 tools: timer_start, timer_stop, timer_status, entry_add, entry_list, and 153 more. Their descriptions and schemas cost roughly 23,736 tokens of context every time the server is loaded.

What licence is the io.github.theluckystrike/office-suite-time-invoice-expense… MCP server under?

io.github.theluckystrike/office-suite-time-invoice-expense… declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.