Integrate Soluta over MCP

Soluta is a remote MCP server for the accounting books of businesses in Vietnam (Circulars 133 and 99). Soluta accepts connections from Claude, ChatGPT and Grok/Cursor (OAuth sign-in). Other channels are not open yet. This page only describes what is running today.

Endpoint

ItemValue
MCPhttps://mcp.soluta.vn/mcp
TransportStreamable HTTP
Protocoluse 2025-06-18; the server also accepts 2024-11-05, 2025-03-26, 2025-11-25, 2026-07-28
Protected resourcehttps://mcp.soluta.vn/.well-known/oauth-protected-resource/mcp
Authorization serverhttps://auth.mcp.soluta.vn · metadata /.well-known/oauth-authorization-server

Quick start

Claude, ChatGPT and Grok/Cursor: follow the connection guide. Other channels are not open yet.

Authentication (OAuth 2.1)

  1. Calling /mcp without a token ⇒ 401 with WWW-Authenticate: Bearer resource_metadata="…/oauth-protected-resource/mcp", scope="soluta.so".
  2. Read the resource metadata ⇒ authorization server https://auth.mcp.soluta.vn ⇒ read /.well-known/oauth-authorization-server.
  3. Client registration: Client ID Metadata Document (client_id is an https URL) or DCR (POST /register). Public clients: token_endpoint_auth_method = none.
  4. Authorization code + PKCE S256 (required). Scope soluta.so.
  5. https redirects match the registration exactly.
  6. The user signs in to soluta.vn (email or Google), chooses a company, then clicks Allow. The consent screen shows your redirect domain.
  7. Access tokens carry aud = https://mcp.soluta.vn/mcp and are bound to exactly one book the user chose (claim soluta_so). For another book, add another connection.
  8. Refresh tokens rotate: each exchange returns a new refresh token and retires the old one; reusing an old one revokes the whole chain. Expired / revoked ⇒ invalid_grant.

Writing and approval

Document files

Tools

The list can change between releases — always read tools/list. This is the tools/list your client sees (server 0.9.1263).

NameTitleKind
soluta_books_openOpen accounting booksHas side effects
soluta_proposal_listList proposalsRead-only
soluta_proposal_showShow proposalRead-only
soluta_proposal_createPropose journal entryHas side effects
soluta_balanceAccount balanceRead-only
soluta_accountsChart of accountsRead-only
soluta_partiesPartiesRead-only
soluta_trial_balanceTrial balanceRead-only
soluta_balance_sheetBalance sheet (B01)Read-only
soluta_income_statementIncome statement (B02)Read-only
soluta_reconcile_bankReconcile bank statementRead-only
soluta_party_proposePropose partyHas side effects
soluta_company_proposePropose company profileHas side effects
soluta_vat_returnVAT return (01/GTGT)Read-only
soluta_period_close_proposePropose period closeHas side effects
soluta_companyCompany profileRead-only
soluta_einvoice_importRead e-invoice XMLRead-only
soluta_worksheet_createBuild worksheetRead-only
soluta_proposal_approve_in_chatPost to ledgerWrites the books · destructiveHint
soluta_proposal_approve_from_uiPost from review cardWrites the books · destructiveHint
soluta_proposal_reject_from_uiReject from review cardWrites the books · destructiveHint
soluta_opening_draftDraft opening balancesRead-only
soluta_book_createCreate new bookHas side effects
soluta_law_searchSearch lawRead-only
soluta_law_showShow law articleRead-only
soluta_law_gapReport law gapHas side effects
soluta_feedbackSend feedback to SolutaHas side effects
soluta_precedentsPrecedentsRead-only
soluta_party_balancesParty balancesRead-only
soluta_ledgerGeneral ledger and journalRead-only
soluta_financial_reportFinancial reportRead-only
soluta_report_exportExport report fileRead-only
soluta_reviewReview bookRead-only
soluta_manageManagement reportsRead-only
soluta_taxTax returns and deadlinesRead-only
soluta_traceTrace entries and figuresRead-only
soluta_correctPropose correctionHas side effects
soluta_fixed_assetDraft depreciationHas side effects
soluta_prepaidDraft prepaid allocationRead-only
soluta_period_close_draftDraft closing entriesRead-only
soluta_contractor_taxDraft foreign contractor taxRead-only
soluta_payrollDraft payrollRead-only
soluta_cit_returnDraft corporate income taxRead-only

Common errors

You seeMeaningWhat to do
HTTP 401 + WWW-Authenticatemissing, invalid or expired tokenrun OAuth from resource_metadata; use the refresh token if expired
HTTP 403 DUONG_LECH_SO_CUA_TOKENthe token was issued for a different book than the one in /mcp/<book code>use that book’s token, or call /mcp
error result KHONG_NHAN_TEPfile bytes were sentread the file on the client and send fields (see “Document files”)
error result QUA_TAIone call exceeds a computation limitsplit it into smaller calls
HTTP 429too many requests in a short time (rate limit)wait and retry, slow down
invalid_grant at /tokenrefresh token expired, used or revokedask the user to reconnect

Contact

Integration questions and bug reports: info@soluta.vn.