io.github.theluckystrike/office-suite
MCPB · OFFICE-SUITE.MCPB · SCANNED SEP 21
Whole freelancer office in one MCP server: time tracking, price watching, spreadsheets, invoicing.
Available components
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
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 4 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
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.
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 bundleEvery 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.
- 18 Sept 26 46
First indexed and scored.
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 →
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 →
pdf_pages Extract pages into a new PDF ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| out_path | string | yes | Where to write the extracted PDF |
| overwrite | boolean | – | Replace out_path if it exists. Default false |
| pages | string | yes | 1-based pages and ranges to keep, in output order, e.g. "2,4-6" or "5,1,1" |
| path | string | yes | The source PDF |
No output schema declared.
No examples provided.
pdf_reorder Reorder the pages of a PDF ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| order | array | yes | The 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_path | string | yes | Where to write the reordered PDF |
| overwrite | boolean | – | Replace out_path if it exists. Default false |
| path | string | yes | The source PDF |
No output schema declared.
No examples provided.
pdf_rotate Rotate pages ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| degrees | integer | yes | 90, 180, 270 or -90. Positive turns clockwise. Added to the page's existing rotation |
| out_path | string | yes | Where to write the rotated PDF |
| overwrite | boolean | – | Replace out_path if it exists. Default false |
| pages | string | – | Which pages to turn, e.g. "1" or "2,4-6". Omit for every page |
| path | string | yes | The source PDF |
No output schema declared.
No examples provided.
pdf_split Split a PDF into several files ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| out_path_pattern | string | yes | Output 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 |
| overwrite | boolean | – | Replace existing outputs. Default false: nothing is overwritten and nothing is written at all if any target exists |
| path | string | yes | The PDF to split |
| ranges | string | yes | Comma-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 Stamp text on a PDF ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| color | string | – | Hex code such as #1b7f3b, or a name: red, green, blue, black, gray, orange, purple. Pro |
| font_size | number | – | Point size. By default the stamp is sized to fit the page width |
| opacity | number | – | 0 to 1. Default 0.35 in the centre, 0.85 in a corner |
| out_path | string | yes | Where to write the stamped PDF |
| overwrite | boolean | – | Replace out_path if it exists. Default false |
| pages | string | – | Which pages to stamp, e.g. "1" or "2,4-6". Omit for every page |
| path | string | yes | The source PDF |
| position | string | – | Where on the page. Default center, which is drawn on the 45-degree diagonal like a real stamp |
| text | string | yes | What 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 Read the text of a PDF ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| pages | string | – | Which pages, e.g. "1" or "2,4-6". Omit for every page |
| path | string | yes | The PDF to read |
No output schema declared.
No examples provided.
pdf_watermark_business Stamp your business details in the footer ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| out_path | string | yes | Where to write the footed PDF |
| overwrite | boolean | – | Replace out_path if it exists. Default false |
| pages | string | – | Which pages, e.g. "1". Omit for every page |
| path | string | yes | The source PDF |
No output schema declared.
No examples provided.
price_add_manual Record a price by hand ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| currency | string | – | ISO code such as USD or EUR |
| label | string | – | Short name for this item |
| price | string|number | yes | Price as shown, for example 1299.00 or 1.299,00 |
| url | string | yes | Product page URL |
No output schema declared.
No examples provided.
price_check Check a price now ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| url | string | yes | Product page URL, including https:// |
No output schema declared.
No examples provided.
price_history 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.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | – | Watch id |
| limit | integer | – | Maximum observations to return |
| url | string | – | Watch URL |
No output schema declared.
No examples provided.
profile_get Show the stored profile ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| variant | string | – | – |
No output schema declared.
No examples provided.
profile_set Store your CV facts ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| accent_color | string | – | Letterhead colour, six hex digits, e.g. 1F3864. Pro only. |
| certifications | array | – | – |
| education | array | – | – |
| string | – | Your 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 | |
| experience | array | – | Roles 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… |
| languages | array | – | – |
| links | array | – | Portfolio, LinkedIn, GitHub |
| location | string | – | – |
| merge | boolean | – | Update 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 |
| name | string | – | Your 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 |
| phone | string | – | Your own phone number. Defaults to the shared business profile's phone |
| replace | boolean | – | Discard the stored profile and store exactly what this call carries. Required when a profile already exists, unless you pass merge |
| skills | array | – | – |
| summary | string | – | Two or three lines. Used verbatim as the fit paragraph of a cover letter. |
| variant | string | – | Name 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 Set project 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.
| Name | Type | Req | Description |
|---|---|---|---|
| apply_to_existing | boolean | – | Re-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… |
| currency | string | – | Currency: a code (EUR, USD, GBP, PLN) or a word ('euros', 'pounds', 'zl'). Defaults to the shared business profile's default_currency, else USD. |
| hourly_rate | – | yes | Hourly 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_missing | boolean | – | Only 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… |
| project | string | yes | Project 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 Create a proposal ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| client | string | yes | Client name, printed as 'Prepared for'. The letterhead comes from your business_set profile |
| deliverables | array | – | What the client receives, one bullet each. Omitted from the document if not given or empty |
| out_path | string | – | Where to write the .docx. Defaults to the data directory |
| overwrite | boolean | – | Replace out_path if a file is already there. Default false: an existing file is never overwritten |
| price | object | yes | – |
| project_title | string | yes | Project title |
| scope | array | – | What is in scope, one bullet each. Omitted from the document if not given or empty |
| summary | string | – | One or two paragraphs on the problem and the approach. Omitted from the document if not given |
| timeline | array | – | Phases and their durations, rendered as a table. Omitted from the document if not given or empty |
| valid_until | string | – | YYYY-MM-DD, the date the quote expires |
No output schema declared.
No examples provided.
proposal_update Update a proposal ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| client | string | – | – |
| deliverables | array | – | – |
| price | object | – | – |
| project_title | string | – | – |
| reference | string | yes | The 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 |
| scope | array | – | – |
| summary | string | – | – |
| timeline | array | – | – |
| valid_until | string | – | – |
No output schema declared.
No examples provided.
rate_history Rate history for a pair ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| days | integer | – | Trailing 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 |
| from | string | yes | Base currency of the pair |
| from_date | string | – | ISO date, inclusive. Overrides days. Free is limited to the last 90 days |
| max_rows | integer | – | Cap the table, default 200. min/max/avg still cover the whole window |
| to | string | yes | Quote currency of the pair. Each row is 1 from = X to |
| to_date | string | – | ISO date, inclusive, default today |
No output schema declared.
No examples provided.
rate_on Rate on a given date ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| date | string | yes | ISO 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… |
| from | string | yes | Base 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 |
| to | string | yes | Quote currency. The rate returned is 1 from = X to |
No output schema declared.
No examples provided.
rates_latest Latest ECB reference rates ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| base | string | – | Base 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… |
| quotes | array | – | Only these currencies, at most 200. Omit for all of them |
No output schema declared.
No examples provided.
report Time 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.
| Name | Type | Req | Description |
|---|---|---|---|
| format | string | – | table (default), json or csv. Every format carries one amount per currency, never a mixed-currency sum. |
| from | string | yes | ISO 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_by | string | – | project | 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. |
| project | string | – | Optional project filter |
| to | string | yes | ISO 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_only | boolean | – | Default 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 Write a resume .docx ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| keywords | array | – | From 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_pages | integer | – | Bullets are ordered by relevance to target_role and keywords, then trimmed to fit this many pages against a measured word budget. Default 2. |
| out_path | string | – | Where to write the .docx. Defaults to <data dir>/documents/<name>-resume.docx, numbered -2, -3, ... if that exists. |
| overwrite | boolean | – | Replace an existing file at out_path. Default false: the call fails and nothing is written. |
| style | string | – | Free tier prints "modern" only; "classic" and "compact" are Pro. |
| target_role | string | – | Printed under your name and used to rank bullets |
| variant | string | – | – |
No output schema declared.
No examples provided.
resume_read Read an existing resume .docx ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | Path to an existing .docx. Legacy .doc and .rtf are not readable here. Parsed best effort, section by heading. |
| save | boolean | – | Store the result as the profile. Default false: nothing is saved. Review the result first. |
| variant | string | – | – |
No output schema declared.
No examples provided.
resume_to_html Printable resume 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.
| Name | Type | Req | Description |
|---|---|---|---|
| max_pages | integer | – | Bullets are trimmed to fit this many pages against a measured word budget. Default 2. |
| out_path | string | – | Where to write the .html. Defaults to <data dir>/documents/<name>-resume.html, numbered -2, -3, ... if that exists. |
| overwrite | boolean | – | Replace an existing file at out_path. Default false: the call fails and nothing is written. |
| target_role | string | – | – |
| variant | string | – | – |
No output schema declared.
No examples provided.
resume_to_markdown Resume as 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.
| Name | Type | Req | Description |
|---|---|---|---|
| max_pages | integer | – | – |
| target_role | string | – | – |
| variant | string | – | – |
No output schema declared.
No examples provided.
sale_create Record a sale ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| as_is | boolean | – | Include 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_address | string | – | The buyer's postal address, one string |
| buyer_email | string | – | The buyer's email |
| buyer_name | string | yes | Who is buying, e.g. Jane Kowalska or Northwind Sp. z o.o. |
| buyer_phone | string | – | The buyer's phone number |
| condition | string | – | The condition at handover, e.g. used, good working order, or new, sealed |
| currency | string | yes | ISO code the price is in |
| date | string | – | The date of the sale, YYYY-MM-DD. Default today |
| duplicate_ok | boolean | – | Record it even though an identical sale to the same buyer exists, for a genuinely repeated sale. Default false |
| identifier_other | string | – | Any other identifying number, e.g. a hull number or an asset tag |
| imei | string | – | IMEI, 15 digits, for a phone or tablet |
| item_category | string | – | What kind of item, e.g. vehicle, equipment, electronics, stock |
| item_description | string | yes | What was sold, specific enough to identify it, e.g. 2019 Honda Civic 1.5 petrol, grey, or MacBook Pro 14-inch 2021 |
| notes | string | – | Anything else the document should say, e.g. payment method or what is included in the sale |
| price_minor | integer | yes | The sale price in whole minor units (integer cents). 120000 is USD 1,200.00 |
| quantity | integer | – | How many units this document covers. Default 1 |
| seller_address | string | – | The seller's postal address, one string |
| seller_email | string | – | The seller's email |
| seller_name | string | – | Who is selling. Defaults to the shared business profile's name when the profile has one |
| seller_phone | string | – | The seller's phone number |
| serial | string | – | Serial number, for equipment and electronics |
| vin | string | – | Vehicle Identification Number, 17 characters, for a vehicle sale |
| warranty | string | – | A 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 Delete a bill of sale ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm_finalized | boolean | – | Required true to delete a finalized document. Default false |
| sale | string | yes | The bill of sale id, e.g. BOS-2026-0001 |
No output schema declared.
No examples provided.
sale_finalize Finalize the bill of sale for signing ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| sale | string | yes | The bill of sale id, e.g. BOS-2026-0001 |
No output schema declared.
No examples provided.
sale_get Read one bill of sale ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| sale | string | yes | The bill of sale id, e.g. BOS-2026-0001 |
No output schema declared.
No examples provided.
sale_list List bills of sale ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum rows, default 500 |
| status | string | – | Which documents to list: all (default), draft, or final |
No output schema declared.
No examples provided.
sale_render Print the bill of sale ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| format | string | – | What to render: markdown, html, or both (default). The HTML is one self-contained file, no external assets |
| out_path | string | – | Where to write. With format both this is a stem and .md / .html are appended. Default: the server's documents folder under the data directory |
| overwrite | boolean | – | Replace an existing file at out_path. Default false: an occupied explicit path is refused, a derived one gets -2, -3, ... |
| sale | string | yes | The bill of sale id, e.g. BOS-2026-0001 |
No output schema declared.
No examples provided.
sale_summary Summarize the sales book ~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 Change a bill of sale before signing ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| as_is | boolean | – | – |
| buyer_address | string | – | – |
| buyer_email | string | – | – |
| buyer_name | string | – | Who is buying |
| buyer_phone | string | – | – |
| condition | string | – | – |
| currency | string | – | – |
| date | string | – | The date of the sale, YYYY-MM-DD |
| identifier_other | string | – | – |
| imei | string | – | – |
| item_category | string | – | – |
| item_description | string | – | – |
| notes | string | – | – |
| price_minor | integer | – | The sale price in whole minor units (integer cents) |
| quantity | integer | – | – |
| sale | string | yes | The bill of sale id, e.g. BOS-2026-0001 |
| seller_address | string | – | – |
| seller_email | string | – | – |
| seller_name | string | – | Who is selling |
| seller_phone | string | – | – |
| serial | string | – | – |
| vin | string | – | – |
| warranty | string | – | – |
No output schema declared.
No examples provided.
schedule_create Create a recurring invoice schedule ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| anchor_day | integer | – | Pro: bill on this day of month instead of the start date's day. 31 means the last day of every month |
| auto_generate | boolean | – | Marks 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 |
| client | string | yes | Client name or id, as in the invoice server. Unknown names are created on the first generated invoice |
| currency | string | – | Defaults to your business default currency |
| due_days | integer | – | Days until each invoice is due, defaults to your payment terms |
| end_date | string | – | YYYY-MM-DD, INCLUSIVE: an occurrence landing exactly on it is still generated |
| end_of_month | boolean | – | Pro: always bill on the last day of the month |
| every | – | yes | How 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… |
| items | array | yes | The line items billed every period |
| notes | string | – | Free text printed under the totals of every generated invoice |
| start_date | string | yes | YYYY-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_note | string | – | Why 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 Delete a schedule ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Schedule 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 Get one schedule ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Schedule id, or a client name |
No output schema declared.
No examples provided.
schedule_history 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.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
No output schema declared.
No examples provided.
schedule_list List schedules ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| status | string | – | – |
No output schema declared.
No examples provided.
schedule_pause Pause a schedule ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
No output schema declared.
No examples provided.
schedule_resume Resume a schedule ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
No output schema declared.
No examples provided.
schedule_skip Skip one period ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Schedule id, or a client name |
| period | string | yes | The 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… |
| undo | boolean | – | Remove 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 What falls due soon ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| days | integer | – | Days 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 Update a schedule ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| anchor_day | – | – | Pro |
| auto_generate | boolean | – | – |
| client | string | – | – |
| currency | string | – | – |
| due_days | integer | – | – |
| end_date | string|null | – | null clears the end date |
| end_of_month | boolean | – | Pro |
| every | – | – | How 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… |
| id | string | yes | – |
| items | array | – | – |
| notes | string | – | – |
| start_date | string | – | – |
| tax_note | string | – | Replace 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 Add a 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.
| Name | Type | Req | Description |
|---|---|---|---|
| decimals | integer | – | Round 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… |
| formula | string | – | Expression 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 |
| name | string | yes | Name of the new column. It must not already exist on the sheet |
| out_path | string | – | Output file; default <source>-plus-<column>.<same ext>. The source file is left untouched unless this points at it |
| path | string | yes | Path to the source .xlsx/.xlsm/.xlsb/.ods/.csv/.tsv file (~ is expanded); it is never modified |
| sheet | string | – | Sheet name; default is the first sheet |
| values | array | – | Explicit values, one per data row, instead of a formula. Missing entries are left blank |
No output schema declared.
No examples provided.
sheet_convert Convert file ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| out_path | string | – | Where to write; default is the source name with the new extension, next to the source. It must differ from the source path |
| path | string | yes | Path to the source .xlsx/.xlsm/.xlsb/.ods/.csv/.tsv file (~ is expanded); it is never modified |
| sheet | string | – | Sheet to convert; default is the first sheet. Only that one sheet is written |
| to | string | yes | Target format; the default out_path takes this as its extension |
No output schema declared.
No examples provided.
sheet_find Find text ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | Path to the .xlsx/.xlsm/.xlsb/.ods/.csv/.tsv file (~ is expanded) |
| sheet | string | – | Sheet name; default searches every sheet |
| text | string | yes | Text 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 Spreadsheet overview ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | Path to the .xlsx/.xlsm/.xlsb/.ods/.csv/.tsv file (~ is expanded) |
No output schema declared.
No examples provided.
sheet_query Filter, group and sort rows ~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'.
| Name | Type | Req | Description |
|---|---|---|---|
| aggregate | array | – | Aggregates per group, e.g. [{"col":"Units","fn":"sum","as":"total_units"}]. Defaults to a row count when group_by is given. |
| as | string | – | – |
| group_by | array | – | Group rows by these columns before aggregating, e.g. ["Rep"] or ["Region","Rep"] |
| limit | integer | – | Default 100 |
| path | string | yes | Path to the .xlsx or .csv file |
| select | array | – | Column names to return; default all (with group_by, defaults to the group columns plus the aggregates) |
| sheet | string | – | – |
| sort | object | – | Sort column; may be an aggregate alias such as total_units |
| where | string | – | Filter, e.g. [Qty] >= 5 AND ([Status] = "open" OR [Status] = "new") |
No output schema declared.
No examples provided.
sheet_read Read rows ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| as | string | – | Output format, default table |
| limit | integer | – | Rows to return, default 100 |
| offset | integer | – | Rows to skip, default 0 |
| path | string | yes | – |
| range | string | – | A1 range such as A1:D50; overrides limit/offset |
| sheet | string | – | Sheet name; defaults to the first sheet |
No output schema declared.
No examples provided.
sheet_stats Column statistics ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| columns | array | – | Limit to these columns; default all |
| path | string | yes | – |
| sheet | string | – | – |
No output schema declared.
No examples provided.
sheet_write Write rows ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| mode | string | yes | new_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_path | string | – | Where 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… |
| path | string | yes | Source file for append/overwrite, or the intended file for new_file (~ is expanded) |
| rows | array | yes | Array of objects, whose keys become the headers, or an array of arrays with the header row first |
| sheet | string | – | Sheet 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 Gap analysis against a posting ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| job_description | string | yes | Paste the posting. The free tier reads up to 2,000 characters; Pro reads any length. |
| limit | integer | – | How many keywords to extract from the posting. Default 30. |
| variant | string | – | – |
No output schema declared.
No examples provided.
What is the io.github.theluckystrike/office-suite MCP server?
io.github.theluckystrike/office-suite is an MCP server listed in the public MCP registry as io.github.theluckystrike/office-suite. Whole freelancer office in one MCP server: time tracking, price watching, spreadsheets, invoicing. 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 MCP server safe to use?
io.github.theluckystrike/office-suite 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 MCP server expose?
io.github.theluckystrike/office-suite 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 MCP server under?
io.github.theluckystrike/office-suite declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.