Skip to main content
Glama
hritikff

xero-mcp

by hritikff

xero-mcp

The Xero MCP door, extracted from the main Teller gateway repo and deployed standalone on Netlify Functions, as a fast trial of hosting outside GCP. Nothing in /src/core or /src/adapters was rewritten — every file here is a copy of the original, with only import paths adjusted for the new directory layout. The RBAC decision, the audit trail, the Xero adapter, and the Money boundary are the same code, same behaviour, same tests passing against them in the main repo.

What's different from the GCP version

  • Transport: WebStandardStreamableHTTPServerTransport (Request/Response), not the Node-specific one — this is what makes it run on Netlify's web-standard function runtime at all.

  • Auth: Cloud Run's IAM has no Netlify equivalent. This uses a single shared-secret header (x-teller-secret) instead — read netlify/functions/mcp.mts's header comment before deploying. It is a PoC-grade gate: whoever holds the secret acts as one fixed principal (TELLER_MCP_PRINCIPAL), not per-person identity.

  • Roll-forward is off. No local filesystem, no Python runtime on Netlify Functions — TELLER_TRACKER_FILE stays unset, which the code already treats as a deliberate no-op, same as it does locally.

  • Rate limiting: same as the main repo today — Xero's own 429 + Retry-After, read and respected. There is no in-process token bucket to lose by running on a platform with unbounded concurrent instances, because one was never built (see the main repo's POC-PLAN.md §C2 for the documented pg_advisory_xact_lock escape hatch if this ever needs one).

Related MCP server: Python Xero MCP Server for BYB

Deploy

netlify deploy --prod

Then set the real values for every var in .env.example in Netlify's own environment variable settings — never in a committed file.

Structure

src/core/       rbac.ts, audit.ts, claims.ts, money.ts, policy.ts, db.ts,
                intents.ts, invoices.ts, log.ts, review/escalate.ts
src/adapters/   xero.ts, tracker/*  (roll-forward's plan/apply split,
                inert here - see above)
netlify/functions/mcp.mts   the only new file - protocol + platform glue

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Enables interaction with the Xero Accounting API to manage contacts, invoices, payments, accounts, and financial reports. It provides a suite of tools for natural language access to accounting records and business performance data.
    20
    1
    Apache 2.0
  • -
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with Xero accounting API for financial reporting, sales analysis, grant tracking, and bill management using natural language.
    1
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    An enhanced MCP server for Xero, enabling natural language interaction with your Xero organisation for accounting tasks like invoices, contacts, bank transactions, and payroll.
    -
  • A
    license
    A
    quality
    C
    maintenance
    Enables natural language interaction with Xero accounting data, managing contacts, invoices, and accounts across multiple organisations via OAuth2.
    12
    MIT