SQL Account MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@SQL Account MCP Servershow me unpaid invoices for this month"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
SQL Account MCP Server
A hosted remote Model Context Protocol server that lets any MCP-capable AI app (Claude, ChatGPT, Cursor, VS Code, …) read and write a user's SQL Account (Malaysian accounting software) data.
Users install by pasting one URL (https://<mcp>/mcp) and clicking Connect (OAuth login).
No Node, no config files, no pasted secrets in AI app settings.
The server never talks to api.sql.my directly. It calls the existing
sqlaccount-proxy Edge Function, which owns billing, rate limits, request signing and
validation.
How it works
AI app ──► MCP server (/mcp) ──► sqlaccount-proxy ──► api.sql.my
resource server (billing, SigV4,
+ OAuth (Supabase Auth) rate limit, validation)OAuth server: Supabase Auth (OAuth 2.1 beta). Issues JWT access tokens via PKCE.
Resource server: this repo. Validates JWTs against the project JWKS, requires the
client_idclaim (OAuth-issued tokens only), loads the user's stored credentials from Supabase Vault, and calls the Proxy.Credentials: entered once in the portal's "Connect SQL Account" page and stored encrypted in Supabase Vault. This is a change from the n8n node's "never stored" promise; see
docs/SECURITY.md.
Related MCP server: QBO-Multicompany-MCP
Endpoints
Path | Method | Purpose |
| POST (GET/DELETE per transport) | Streamable HTTP MCP endpoint, protected |
| GET | RFC 9728 metadata |
| GET | Same document (path-inserted form) |
| GET | Liveness, no auth |
Configuration
Copy .env.example to .env.local and fill it in. All values are server-only.
The server fails fast at startup if any required variable is missing.
Name | Purpose |
|
|
| Server-only; used only to call the Vault read function |
|
|
|
|
|
|
| Canonical URL of this server, no trailing slash |
| Portal URL used in user-facing error messages |
|
|
Local development
npm install
cp .env.example .env.local # fill in
npm run dev # http://localhost:3000/mcpnpm run lint
npm run typecheck
npm run test
npm run build
npm run gen # regenerate src/lib/registry.generated.ts from operations.json
npm run check:contract # fail if contract/ drifts from CHECKSUMS.txt
npm run check:gen # fail if the generated registry driftsConnecting a client
Paste the server URL; OAuth handles the rest.
Claude / claude.ai custom connector: add a remote MCP server with URL
https://<mcp>/mcp, click Connect, approve.Cursor (
.cursor/mcp.json):{ "mcpServers": { "sqlaccount": { "url": "https://<mcp>/mcp" } } }VS Code (
mcp.json):{ "servers": { "sqlaccount": { "type": "http", "url": "https://<mcp>/mcp" } } }ChatGPT connector: add a custom connector with URL
https://<mcp>/mcp.MCP Inspector:
npx @modelcontextprotocol/inspector, transport Streamable HTTP, URLhttps://<mcp>/mcp.
Tools
Tools are generated from contract/operations.json — never hand-written.
sqlaccount_list_resources— discovery: every resource, its ops,path_paramtype, and whether it is verified.sqlaccount_<resource>_read—list,get, reportget. Read-only.sqlaccount_<resource>_write—create,update,delete. Only whenENABLE_WRITE_TOOLS=true; clients should prompt for approval.
Query filters accept the SQL Account wildcards * and ~. Lists paginate at 50 rows per page;
set fetch_all_pages: true to page automatically (capped at 500 rows / 10 pages).
Contract
contract/CONTRACT.md and contract/operations.json
are copied verbatim from the node/proxy repos and pinned by
contract/CHECKSUMS.txt. CI fails on drift. Changing the contract means
bumping contract_version in every repo.
Security
See docs/SECURITY.md. Highlights: JWTs verified against JWKS with an ES256/RS256
allowlist; stored credentials read only through a SECURITY DEFINER Vault function with the sub
of a verified token; secrets never logged or echoed; the Proxy URL is the only outbound host.
Deployment notes
Host: Vercel (App Router). Route segment config sets
maxDuration = 60on/mcp, because the Proxy plus SQL Account can take up to 30 s.Sessions:
mcp-handlerreadsREDIS_URL(orKV_URL) automatically to keep MCP sessions across serverless instances. Without it, sessions are in-memory per instance. SetREDIS_URLto an Upstash/Vercel KV database for reliable session continuity.Well-known paths:
MCP_PUBLIC_URLmust be the canonical public origin (no trailing slash) so the 401resource_metadataURL and the metadataresourcefield match what clients probe. RFC 9728 metadata is served at predictable root paths, which is why this runs on Vercel rather than as a Supabase Edge Function.Redis is optional for tool correctness: each request re-resolves credentials and the business logic is stateless; Redis only affects transport session continuity.
License
MIT — see LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Connect any AI agent to 1,000+ apps and 27,000+ actions through one remote MCP server (OAuth).
Zero-setup MCP gateway securely connecting AI to your tools with authentication and workflows
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Connect Xero to AI agents with secure read or write access across multiple organisations.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables AI assistants to securely interact with rental management data (leases, rent status, tenant records, tax filings) through a per-user OAuth 2.0 authenticated MCP server, with human-in-the-loop for sensitive actions.5AGPL 3.0
- AlicenseNot gradedqualityCmaintenanceA self-hosted MCP server that provides AI assistants with secure access to multiple QuickBooks Online company files through a single connection, featuring a company registry, OAuth-based authorization, and comprehensive read/write tools.1MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI assistants to securely access and work with JIAD accounting and finance data in Bukku through a remote MCP endpoint.-

GatewayMCPofficial
AlicenseCqualityFmaintenanceEnables AI coding and operational assistants to securely access company systems through a single MCP endpoint, with OAuth authentication, scoped resource grants, audit logging, secret isolation, and corporate memory.94Apache 2.0