toconline-mcp (themiguelamador/toconline-mcp) is an MCP server listed on the M8ven Trust Index. It scores 54 out of 100, grade D. It declares 58 tools. No publisher has claimed this listing.

D
Caution
54/100

toconline-mcp

Local MCP server for TOCOnline accounting/invoicing API that enables AI assistants to manage customers, products, sales documents, and call arbitrary endpoints via natural language after OAuth login.

Caution. Specific findings reduced this grade. They are listed on the page. Grades reflect the full trust pyramid: code, verification depth, and reputation. New projects cap at C until adoption is earned.

How we verified

Code Verified⚡ Live Monitored: not connected

Verified is a snapshot. Live keeps it current, and builds your track record.

⚡ Connect GitHub → continuous verification on every pushwhy connect →

Who stands behind it

themiguelamador

Source: Glama

Is this your MCP?

Claim it to get a verified publisher badge, a free copy of our full audit findings, and direct contact for any high-priority issues we find. Or connect your repo for our deepest verification, Live Monitored: read-only, revoke anytime. What we access →

Install from

The grade above is for the source repository. Registries can serve a different version, so we mark the ones we were not able to read.

// key findings
No credential exfiltration, no sensitive file access, no obfuscation
Static analysis found nothing flowing your secrets to unexpected places.
Open source with a license and README
Anyone can audit the code, the license is declared, and the publisher documents what it does.
🔐
You'll be asked for 2 credentials: TOCONLINE_CLIENT_SECRET, GMAIL_CLIENT_SECRET
These are read from process.env at runtime. Make sure you trust where they’ll be sent.
// tools this server exposes58 tools

These names and descriptions are the publisher's own, read from the source code. We print them as written. Our assessment is the findings above, not this list.

list_addresses

List addresses. Normally scope to a customer_id or supplier_id.

get_address

Fetch a single address by id.

create_address

Create an address attached to a customer or supplier.

update_address

Update an address. Only non-null fields are sent.

delete_address

Delete an address. Requires `confirm=true`.

auth_status

Report whether TOCOnline credentials are configured and their expiry.

login

Open a browser and complete OAuth login against TOCOnline.

logout

Delete the stored TOCOnline credentials and drop in-memory tokens.

list_bank_accounts

List company bank accounts (name, IBAN, SWIFT, type).

get_bank_account

Fetch a single bank account by id, enriched with derived `id_banco` and `pais_conta` fields (see `list_bank_accounts` for the rules).

list_bank_transactions

List bank transactions (movements) imported into TOCOnline.

get_bank_transaction

Fetch a single bank transaction by id.

get_current_company

Return the authenticated company's own profile.

list_contacts

List contacts. Normally scope to a customer_id or supplier_id.

get_contact

Fetch a single contact by id.

create_contact

Create a contact attached to a customer or supplier.

update_contact

Update a contact. Only non-null fields are sent.

delete_contact

Delete a contact. Requires `confirm=true`.

list_customers

List customers. All filters are exact match.

get_customer

Fetch a single customer by id.

create_customer

Create a customer. Returns the created record.

update_customer

Update a customer. Only non-null fields are sent.

get_document_pdf_url

Get a signed, shareable URL to a PDF render of a document or receipt.

send_document_email

Send a sales document or receipt to a recipient by email.

finalize_sales_document

Finalize (issue) a draft sales document.

finalize_purchase_document

Finalize a draft purchase document.

void_sales_receipt

Void (anular) a sales receipt.

void_purchase_document

Void (anular) a purchase document.

api_request

Escape hatch for endpoints not covered by typed tools.

gmail_auth_status

Report whether Gmail credentials are configured and their expiry.

gmail_login

Run the Google OAuth browser flow and store Gmail credentials.

gmail_logout

Delete stored Gmail credentials and drop in-memory tokens.

gmail_search_messages

Search Gmail and return compact message metadata.

gmail_get_message

Fetch one message's metadata and attachment list.

gmail_download_attachment

Download one attachment to `save_dir`. Returns the saved path and size.

gmail_list_labels

List Gmail labels (system + user) with their ids.

gmail_create_label

Create a Gmail label. Fails if a label of the same name already exists.

gmail_add_label_to_message

Add a label to a message — useful to mark it as processed/imported.

gmail_remove_label_from_message

Remove a label from a message.

list_products

List products. All filters are exact match.

get_product

Fetch a single product by id.

list_purchase_documents

List commercial purchase documents, newest first by default.

get_purchase_document

Fetch a purchase document, optionally with its line items merged.

create_purchase_document

Create a purchase document with lines in a single v1 call.

list_purchase_payments

List purchase payments, newest first by default.

get_purchase_payment

Fetch a single purchase payment by id.

create_purchase_payment

Create a purchase payment record.

list_sales_documents

List commercial sales documents, newest first by default.

get_sales_document

Fetch a sales document, optionally with its line items merged.

create_sales_document

Create a sales document with line items.

delete_sales_document

Delete a draft sales document.

list_sales_receipts

List sales receipts (customer payments), newest first by default.

get_sales_receipt

Fetch a single sales receipt by id.

create_sales_receipt

Create a sales receipt (customer payment) record.

list_services

List services. All filters are exact match.

get_service

Fetch a single service by id.

list_suppliers

List suppliers. All filters are exact match.

get_supplier

Fetch a single supplier by id.

// environment variables
To run this server yourself, you supply these values. They go in your own MCP client configuration and stay on your machine. The secret label means the value is sensitive, not that the server mishandles it.
configTOCONLINE_CREDENTIALS_PATHoverride the credentials file location.
configXDG_CONFIG_HOME
configTOCONLINE_REDIRECT_PORT
configTOCONLINE_CLIENT_IDexport ='...'
🔐 secretTOCONLINE_CLIENT_SECRETexport ='...'
configTOCONLINE_AUTH_URLexport ='<OAUTH_URL>/auth'
configTOCONLINE_TOKEN_URLexport ='<OAUTH_URL>/token'
configTOCONLINE_API_BASEexport ='<API_URL>'
configTOCONLINE_SCOPE
configTOCONLINE_ENV_FILE1. Whatever points at (if set).
configGMAIL_CLIENT_ID/ GMAIL_CLIENT_SECRET — skip the CLI prompts during
🔐 secretGMAIL_CLIENT_SECRETGMAIL_CLIENT_ID / — skip the CLI prompts during
configGMAIL_SCOPE
configTOCONLINE_GMAIL_CREDENTIALS_PATHoverride the credentials file location.
configTOCONLINE_GMAILtools only appear once Gmail credentials exist (or you set =1).
configTOCONLINE_LOG_LEVELDEBUG, INFO, WARNING, etc. Logs go to stderr.
// quality suggestions

Tool annotations

No tools have read-only/destructive annotations

Add readOnlyHint or destructiveHint annotations to every tool so hosts can warn users before invoking.

All four hints declared on every tool

58/58 tools missing one or more hints — list_addresses (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); get_address (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); create_address (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint), +55 more. OpenAI's directory rejects tools where any of the four hints are missing or non-boolean.

For every tool, set all four hints (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) to explicit true/false values that match the handler’s actual behaviour.

Destructive tools are labelled

2 tools perform destructive updates without destructiveHint — logout deletes at line 112 (path.unlink()); gmail_logout deletes at line 76 (path.unlink())

Add destructiveHint:true to any tool whose handler calls .delete(), .upsert(), .update(), unlink, rm, DELETE, DROP, REPLACE INTO, or any operation that overwrites existing data.

Tool inputs are validated

52/58 tool handlers declare input schemas (90%)

Declare an inputSchema with zod/joi/yup on every tool definition.

Tool handlers catch errors

Only 2/58 tool handlers wrap calls in try/catch (3%)

Wrap each tool handler body in try/catch and return a structured error response.

Tests exist

No test files found

Add tests that exercise each declared tool.

Claim the listing to review these findings one by one and send us a correction where you disagree, straight to the team. Claiming also means we tell you when the grade moves, and reach you first if we find anything urgent.

// full audit trail
The findings above are the summary. The full trail, every check we ran, each deduction, the network hosts observed and the dependency advisories, goes to verified publishers, along with an alert whenever a new one lands. Verified publishers can also review each finding and dispute it in one click. Publisher corrections have sharpened several of our checks this month, because the maintainer knows the codebase better than any scanner.
// improvement guidance — verified publishers only
We have 6 concrete improvements we can share with the publisher of this MCP. Each comes with specific guidance to raise the trust score.
// embed badge in your README
[![M8ven Verified](https://m8ven.ai/badge/mcp/themiguelamador/toconline-mcp?variant=verified)](https://m8ven.ai/mcp/themiguelamador/toconline-mcp)
Shows verification status without the grade. Want the grade badge instead? Remove ?variant=verified from the URL.
commit: a6989f5b0cffd48bdde14c132d5838e932a198b9
code hash: 09f0195784574384089648b695a7147a97be403b39ae810ed81c3f6e45c09096
view raw JSON →
Check MCPs from inside your assistant
Tool Check · MCP

Vetting this one by hand? Tool Check is an MCP that scores other MCPs. Add it once and ask Claude, ChatGPT, or any MCP client to grade a server, surface CVEs, check the publisher, and suggest safer alternatives — before you install.

https://m8ven.ai/api/mcp/tool-check
check_toolsearch_toolscompare_toolsrecommend_alternativescheck_publisherreport_concern
How to add it →Free · no account needed · works in any MCP client