Foxmayn Frappe CLI
Read and change documents, reports and workflows on Frappe and ERPNext sites.
Connector by nasroykh · GitHub account verified by the MCP Registry
Chalk Labs
Need help deploying Foxmayn Frappe CLI?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Desktop. Read the repository before you give any tool access to your data.
MCP bundle (.mcpb): open it with Claude Desktop.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: workflow-automation, finance-accounting
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.
- Tools
- 24 read · 16 write · 6 delete · 2 not yet classified
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Downloaded binary
Tools by what they do 48
Read from the source code; the running server may list different tools.
Read 24 · Look things up without changing anything.
aggregatecheck_permissioncount_docserp_itemerp_partyerp_stockget_docget_doc_contextget_print_htmlget_schemaget_transitionslist_attachments
Show 12 more tools
list_docslist_doctypeslist_errorslist_jobslist_reportslist_sitespingrun_reportscheduler_statussearchsite_healthwhoami
Write 16 · Create, change, send or run things.
add_commentadd_tagamend_docapply_workflowassign_toattach_filebulk_createbulk_updatecancel_doccreate_docerp_paymentrename_doc
Show 4 more tools
restore_docshare_docsubmit_docupdate_doc
Delete 6 · Delete, drop, revoke or wipe things.
bulk_deletecall_methoddelete_docremove_assignmentremove_tagunshare_doc
Not yet classified 2 · We could not tell from the name and description.
copy_docerp_map
Network hosts it talks to 29
::1· found in codea.test· found in codeacme.test· found in codeai.google.dev· found in codeapi.anthropic.com· found in codeapi.github.com· found in codeapi.githubcopilot.com· found in codeapi.openai.com· found in codeapple.com· found in codeb.test· found in codedevelopers.openai.com· found in codeelsewhere.test· found in codeerp.example.com.evil.com· found in codeerp.example.com.evil.test· found in codeexample.invalid· found in codefresh.test· found in codegenerativelanguage.googleapis.com· found in codegithub.com· found in install command, codeko-fi.com· found in codelocalhost.evil.com· found in codelocalhost.evil.x· found in codeobjects.githubusercontent.com· found in codeollama.com· found in codeopenrouter.ai· found in codeother.test· found in codeplatform.claude.com· found in coderaw.githubusercontent.com· found in codeschemas.openxmlformats.org· found in codeui.shadcn.com· found in code
Files it touches
/dev/null/home/linuxbrew/.linuxbrew/Cellar/ffc/1.16.0/bin/ffc/home/me/home/me/.local/bin/ffc/home/me/go/bin/ffc/home/u/.config/ffc/config.yaml/opt/ffc/opt/ffc/bin/ffc/opt/homebrew/bin/ffc/opt/homebrew/Caskroom/ffc/1.0.0/ffc/opt/homebrew/Caskroom/ffc/1.12.0/ffc/opt/homebrew/Caskroom/ffc/1.16.0/ffc/opt/homebrew/Caskroom/ffc/1.2.3/ffc/opt/homebrew/Caskroom/ffc/1.3.0/ffc/opt/homebrew/Cellar/ffcx/1.0/bin/ffc/opt/preview/ffc/private/private/files/private/files/a.bin/private/files/a.txt/private/files/big.bin/private/files/ffc-contract-missing.bin/private/files/in.bin/private/files/inv.pdf/private/files/nope.bin/private/files/p.txt/private/files/report.bin/private/files/scan.pdf/private/files/t/private/files/TD-1-c.txt/private/files/x/private/files/x.bin/private/files/x.txt/tmp/foxmayn-frappe-desktop/tmp/x/Users/me/Users/me/.config/ffc/config.yaml/Users/me/.local/bin/usr/local/Caskroom/ffc/1.16.0/ffc- Your home directory (~)
Tools (48)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
add_commentAdd a comment to a document's timeline as the signed-in user. text is plain text (escaped, line breaks kept) unless html is true; Frappe sanitises HTML either way and saves data-URI images in it as private Files attached to the document (then the DocType rules for File apply). Needs read permission on the document. Returns the Comment's name and stored content.
add_tagAdd tags to a document, creating each Tag that does not exist. Needs write permission on the document. A tag cannot contain a comma. Returns added, already_tagged and tags (all the document's tags).
aggregateread-onlyDescription is built at runtime.
amend_docCreate the amendment of a cancelled document: a new draft linked by amended_from, named <name>-1 (an amendment of <name>-1 is <name>-2). Returns the new draft.
apply_workflowApply a workflow action (e.g. Approve) to a document. The action must be one get_transitions lists; it may submit or cancel the document. Returns the document.
assign_toAssign a document to users: each gets an open ToDo and a notification. Users already assigned are reported in already_assigned, not assigned twice. An assignee who cannot read the document gets read access to it through a share, so the user may be asked to confirm. Needs read permission on the document. Returns assigned, already_assigned and assignees (everyone assigned now).
attach_fileDescription is built at runtime.
bulk_createDescription is built at runtime.
bulk_deletecan change or delete dataDescription is built at runtime.
bulk_updateDescription is built at runtime.
call_methodcan change or delete dataCall a whitelisted Frappe server method. This is a low-level escape hatch for operations not covered by other tools. The method must be whitelisted (@frappe.whitelist()) on the server. It may read or mutate data depending on the method.
cancel_docCancel a submitted document (docstatus 1 to 2). This cannot be undone; amend_doc makes a corrected copy. Submitted documents that link to it block the cancel. Refused for DocTypes with an active Workflow (use apply_workflow). Returns the cancelled document.
check_permissionread-onlyCheck whether the configured user holds a permission on a DocType or on one document, without changing anything. Use it before a write to avoid a refused call. With name, the site judges that document (user permissions, sharing and controller rules count): basis is 'document'. Without name, the DocType's role permission rows are applied to the user's roles (if_owner rows narrow a right to the user's own documents, select is implied by read, submit/cancel/amend need a submittable DocType, import an importable one): basis is 'doctype', and user permissions, sharing, controller rules and the disa…
copy_docDuplicate a document like the desk's Duplicate: identity and "no copy" fields are left out, child rows are copied. Returns the new document.
count_docsread-onlyCount the number of documents in a DocType, optionally filtered. Returns a single integer count. More efficient than list_docs when you only need the count.
Show 33 more tools
create_docCreate a new document in a Frappe DocType. Provide field values as a JSON object. Returns the created document with all server-generated fields (name, creation date, etc.).
delete_doccan change or delete dataPermanently delete a Frappe document. This action cannot be undone. Returns a confirmation message on success.
erp_itemLook up what ERPNext fills into a document row when an item is picked, as the desk does: the rate (price list rate, pricing rules), UOM, warehouse, accounts, taxes and stock levels. Nothing is written. ERPNext 15 or 16. doctype is the document the row is for: a sales one (Quotation, Sales Order, Delivery Note, Sales Invoice) with customer, or a purchase one (Supplier Quotation, Purchase Order, Purchase Receipt, Purchase Invoice, Material Request) with supplier; default Sales Invoice, or Purchase Invoice with supplier. Prices are not converted between currencies. Returns the row's fields.
erp_mapMap an ERPNext document into the next one in its chain, as the desk's Create button does (items, taxes and links come across): Quotation to Sales Order; Sales Order to Sales Invoice or Delivery Note; Delivery Note to Sales Invoice; Purchase Order to Purchase Receipt or Purchase Invoice; Purchase Receipt to Purchase Invoice; Material Request to Purchase Order. ERPNext 15 or 16. Returns {draft}: an UNSAVED document, nothing is written. Save it with create_doc (doctype = to_doctype, data = draft), then submit_doc if it should be final. A Quotation made out to a Lead or Prospect with no customer i…
erp_partyLook up what ERPNext fills into a document when a customer or supplier is picked, as the desk does: address and contact, price list, currency, taxes template, payment terms and, with an invoice doctype (Sales Invoice, Purchase Invoice), the receivable or payable account and the due date. Nothing is written. ERPNext 15 or 16. Give customer or supplier, not both; company is optional but the accounts, taxes and payment terms depend on it. Returns the fields.
erp_paymentMake a Payment Entry against a Sales Invoice, Sales Order, Purchase Invoice, Purchase Order or Dunning, as the desk's Create > Payment button does: ERPNext picks the party account, the bank or cash account, the payment type and the amount still outstanding. ERPNext 15 or 16. Returns {draft, warnings?}: an UNSAVED Payment Entry, nothing is written. Save it with create_doc (doctype 'Payment Entry', data = draft), then submit_doc. warnings says when the draft has no bank or cash account (set the Company's default or pass bank_account; the insert would fail) or when bank_account was not used becau…
erp_stockShow an item's stock. With warehouse: the balance there (actual_qty, and valuation_rate with valuation), now or, with date, at the end of that day. Without warehouse: {item_code, rows, truncated}, one row per warehouse that holds any quantity or has a reservation, order or plan (actual, reserved, projected quantity, valuation rate), at most 504 rows. date and valuation need warehouse. The Item, and the Warehouse when given, must exist (a typo is not-found, not zero). Quantities keep the number the site sends. ERPNext 15 or 16.
get_docread-onlyRetrieve a single Frappe document by its DocType and name. Returns all fields of the document, or only the requested fields. Use this when you know the exact document identifier. For Single DocTypes (e.g. 'System Settings', 'HR Settings'), omit name — the DocType name is used automatically.
get_doc_contextread-onlyEverything around one document in one call, as the desk's form sidebar shows it: who changed which fields (the last 10 versions, newest first; each version lists changed fields with from/to, child-row changes as "items[2].qty"; changes to fields the user may not read are left out and counted in hidden_fields), comments, emails, attachments (names and URLs, not contents), assignments, shares, tags, the workflow log and the user's permissions on it. With links (default true), the number of linked documents per DocType as the Connections panel counts them (DocTypes from the DocType's dashboard, e…
get_print_htmlRender a document with a print format, as HTML (frappe.www.printview.get_html_and_style): returns {html, style}, or {text} with text_only, which is the readable text without tags. Needs read access to the document. Rendering runs the DocType's before_print hook (app code), as printing in the desk does, so it may have side effects an app put there. Results over 512 KiB drop the style, then cut the HTML (truncated: true). For a PDF use the CLI: ffc pdf.
get_schemaread-onlyGet the definition of a Frappe DocType as the desk sees it (custom fields and Customize Form overrides applied): module, naming rule, submittability, permissions and all field metadata (fieldname, label, fieldtype, required, options, defaults, constraints). By default returns a compact view with zero-value noise and internal Frappe metadata stripped. Pass full=true for the raw response, or keys to select specific top-level properties.
get_transitionsList the workflow actions the current user can apply to a document in its current state (action, next_state, allowed). Empty when none apply.
list_attachmentsList the files attached to a document (File documents with attached_to_doctype/attached_to_name), oldest first: name, file_name, file_url, is_private, file_size, attached_to_field, folder, creation. File contents are not returned.
list_docsread-onlyList documents from a Frappe DocType with optional filtering, field selection, ordering, and pagination. Returns an array of document objects. Use this to search and browse records; page with start and limit rather than fetching everything.
list_doctypesList all DocTypes available on the Frappe site, optionally filtered by module. Returns name, module, and description for each DocType. Use this to discover what data types exist on the site.
list_errorsList the site's Error Log, newest first (System Manager only). Answers {errors, hidden_by_policy}: each entry has method (its title), the document it concerns (reference_doctype, reference_name) and error, the last line of its traceback; entries about a DocType this server may not read are left out and counted in hidden_by_policy. Pass name for one entry with its full traceback. since counts back in the site's time zone. Reading does not mark entries as seen.
list_jobsList the site's background jobs (RQ Job) that Redis still holds, newest first (System Manager only). Redis keeps finished and failed jobs only for a while. Each job has error, the last line of its traceback; pass name (a job_id) for one job with its arguments and full traceback (exc_info), which can hold any DocType's data. Answers {jobs, warning?}, or the job with name. On Frappe v15 at most 20 jobs come back, not necessarily the newest (warning): filter with status or queue.
list_reportsList available reports on the Frappe site, optionally filtered by module. Returns report name, type, module, and reference DocType.
list_sitesread-onlyList the Frappe sites this MCP server serves: name, URL, how ffc signs in, and whether MCP may only read it. When the server serves several sites, every other tool requires one of these names in its site argument; there is no default.
pingread-onlyCheck that the Frappe site is reachable. frappe.ping answers without credentials, so a pong does not prove the configured login works; any other tool call does.
remove_assignmentRemove users' assignments of a document: their open ToDos are cancelled and they are notified. Users not assigned are reported in not_assigned. Returns unassigned, not_assigned and assignees.
remove_tagRemove tags from a document (the match ignores case). Needs write permission on the document. Returns removed, not_tagged and tags.
rename_docRename a document; links to it are updated. With merge=true it is merged into the existing document named new_name and disappears, which cannot be undone. Returns the new name.
restore_docRestore a deleted document from its "Deleted Document" record, the undo of delete_doc. Name the Deleted Document (deleted_document), or the deleted document (doctype and name: its latest unrestored deletion is used), not both. The DocType rules apply to the deleted document's own DocType, so a deleted Server Script, User or Webhook is refused unless allow_doctypes lists it. A DocType named by hash or naming series may get a new name. Returns restored, deleted_document and the restored name.
run_reportread-onlyExecute a Frappe query report and return its columns and data rows. Strips execution metadata (timing, chart config). Includes report_summary if the report provides one. When rows are cut by limit, total_rows and truncated are included. Use list_reports first to discover available report names.
scheduler_statusShow whether the site's scheduler is active, how many scheduled job types are enabled and stopped, and which ones failed within since, with their failure count and the last line of the last error (System Manager only; list_errors and list_jobs have whole tracebacks). Only job types with Create Log leave a log (Frappe sets it for every frequency but All and Cron); other failures show only in list_jobs status=failed.
searchread-onlyDescription is built at runtime.
share_docGive a user, or every user, access to one document beyond what their roles allow. Read is always granted; write, submit (submittable DocTypes only) and share (may share further) add rights. Sharing again with the same user replaces that share's rights. The user may be asked to confirm. Returns the share's rights.
site_healthRead the site's System Health Report (System Manager only): background workers and queues, the scheduler and failing scheduled jobs, emails (7 days), errors (24 hours), database, cache, storage and users. attention lists what needs attention. Building it takes a few seconds and, as the desk's page does, queues one frappe.ping background job to test the queue; it changes nothing else. A check that failed on the site leaves its fields out.
submit_docSubmit a draft document (docstatus 0 to 1), which makes it final: a submitted document can only be cancelled, not edited. Refused for DocTypes with an active Workflow (use apply_workflow). Returns the submitted document.
unshare_docRemove a user's (or everyone's) share of a document. Access their roles give is not affected. Returns removed: false when there was no such share.
update_docUpdate an existing Frappe document. Provide only the fields you want to change as a JSON object (a "name" key in data is ignored). Returns the full updated document. For Single DocTypes (e.g. 'System Settings'), omit name — the DocType name is used automatically.
whoamiread-onlyShow which user the configured credentials belong to on the Frappe site, the user's roles, and the installed apps with their versions (Frappe major version included). Unlike ping this proves the login works. Versions are cached for 24 hours.
Signals
- Stars
- 16
- Forks
- 6
- Open issues
- 0
- Last commit
- Oct 22, 2026 (8 days ago)
- Last release
- Oct 25, 2026 (5 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- Registry name
io.github.nasroykh/ffc- Version
- 1.21.1
- Auth
- No auth
- Packages
- mcpb https://github.com/nasroykh/foxmayn_frappe_cli/releases/download/v1.21.1/ffc_1.21.1.mcpb
- License
- MIT
- Repository
- github.com/nasroykh/foxmayn_frappe_cli
- First seen
- Oct 24, 2026
- Last checked
- Oct 26, 2026
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get Foxmayn Frappe CLI running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
Foxmayn Frappe CLI MCP server. Agent Mart. https://agentmart.dev/connectors/nasroykh-ffc (last updated 2026-10-26)