{"passport":{"unfragile":{"@version":"1.0","version":"2026-05","artifact":{"id":"github_mcp-xeroapi-xero-mcp-server","slug":"mcp-xeroapi-xero-mcp-server","name":"xero-mcp-server","type":"mcp","url":"https://github.com/XeroAPI/xero-mcp-server","page_url":"https://unfragile.ai/mcp-xeroapi-xero-mcp-server","categories":["mcp-servers"],"tags":[],"pricing":{"model":"open_source","free":true,"starting_price":null},"status":"active","verified":false},"capabilities":[{"id":"github_mcp-xeroapi-xero-mcp-server__cap_0","uri":"capability://tool.use.integration.mcp.protocol.bridge.to.xero.accounting.api","name":"mcp protocol bridge to xero accounting api","description":"Implements a Model Context Protocol (MCP) server that translates MCP tool calls into Xero REST API requests and formats responses back to MCP-compliant JSON. Uses stdio transport for bidirectional communication with MCP clients (Claude Desktop, etc.), abstracting away Xero's REST API complexity behind a standardized protocol interface. The server instantiates core components during initialization and registers 49+ tools before accepting client connections.","intents":["Connect Claude or other AI assistants to Xero accounting data without building custom integrations","Enable AI agents to execute accounting operations through a standardized protocol","Expose Xero API capabilities to MCP-compliant clients without modifying client code"],"best_for":["AI assistant developers integrating Xero accounting workflows","Teams building multi-tenant AI applications with accounting backends","Xero partners extending AI capabilities to their user base"],"limitations":["Stdio transport limits concurrent connections — single client per server instance","No built-in request queuing or rate-limiting — relies on Xero API rate limits","Response formatting adds serialization overhead for large datasets (100+ records)"],"requires":["Node.js v18 or higher","Valid Xero API credentials (OAuth token or client ID/secret)","MCP-compliant client (Claude Desktop 0.1.0+, or compatible)","Network access to Xero API endpoints (api.xero.com)"],"input_types":["MCP tool call JSON with parameters","Authentication credentials (bearer token or OAuth client credentials)"],"output_types":["MCP tool result JSON","Structured accounting data (invoices, contacts, reports)","Error responses with Xero API error codes"],"categories":["tool-use-integration","mcp-protocol"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-xeroapi-xero-mcp-server__cap_1","uri":"capability://tool.use.integration.strategy.pattern.authentication.with.dual.credential.support","name":"strategy-pattern authentication with dual credential support","description":"Implements a pluggable authentication system using the strategy pattern, selecting between two client implementations (BearerTokenXeroClient for OAuth tokens, CustomConnectionsXeroClient for client credentials) based on environment variables. Bearer token takes precedence when both credential types are present. The MCPXeroClient abstract base class defines the interface both implementations satisfy, allowing runtime credential selection without code changes.","intents":["Support multi-tenant production deployments using OAuth bearer tokens","Enable development and testing with client credentials (client ID/secret)","Switch authentication methods without redeploying or modifying code"],"best_for":["Multi-tenant SaaS platforms using OAuth for user-specific Xero access","Development teams testing against Xero sandbox with static credentials","Organizations migrating from client credentials to OAuth"],"limitations":["No automatic token refresh — bearer tokens must be pre-refreshed by caller","Environment variable precedence is fixed (bearer token always wins) — no runtime override","No credential rotation or expiry management — relies on external token management"],"requires":["XERO_CLIENT_BEARER_TOKEN environment variable (for OAuth flow) OR","XERO_CLIENT_ID and XERO_CLIENT_SECRET environment variables (for client credentials)","Valid Xero API credentials registered in Xero developer portal"],"input_types":["Environment variables (string)","Xero API requests (authenticated via selected strategy)"],"output_types":["Authenticated HTTP headers","Access tokens (passed to Xero API)"],"categories":["tool-use-integration","safety-moderation"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-xeroapi-xero-mcp-server__cap_10","uri":"capability://safety.moderation.xero.organization.context.and.multi.tenant.isolation","name":"xero organization context and multi-tenant isolation","description":"Manages organization context (tenant ID) throughout the request lifecycle, ensuring that all API calls are scoped to the correct Xero organization. The server extracts organization ID from authentication context (OAuth token or client credentials) and passes it to all tool handlers. This prevents cross-tenant data leakage and ensures that each request operates on the correct organization's data.","intents":["Ensure that AI agents only access data from the correct Xero organization","Support multi-tenant deployments where one server instance serves multiple organizations","Prevent accidental data leakage between organizations"],"best_for":["Multi-tenant SaaS platforms using OAuth with per-user Xero access","Accounting firms managing multiple client organizations","Integration platforms that need to isolate data per customer"],"limitations":["Organization context is determined at authentication time — cannot switch organizations mid-request","No cross-organization queries — cannot aggregate data across multiple organizations","Organization ID must be present in authentication context — fails if missing"],"requires":["Valid authentication with organization context (OAuth token with org ID, or client credentials for single org)"],"input_types":["Authentication context (bearer token or client credentials)"],"output_types":["Organization ID passed to all tool handlers"],"categories":["safety-moderation","tool-use-integration"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-xeroapi-xero-mcp-server__cap_2","uri":"capability://tool.use.integration.accounting.entity.crud.operations.invoices.contacts.quotes.credit.notes.bank.transactions.manual.journals","name":"accounting entity crud operations (invoices, contacts, quotes, credit notes, bank transactions, manual journals)","description":"Provides 36+ tools for creating, reading, updating, and deleting core accounting entities through the Xero API. Each entity type (Invoice, Contact, Quote, CreditNote, BankTransaction, ManualJournal, Item, TrackingCategory) has dedicated handler functions that map MCP tool parameters to Xero REST endpoints, handle validation, and format responses. The handler layer abstracts entity-specific business logic (e.g., invoice line items, contact addresses) from the protocol layer.","intents":["Create invoices, purchase orders, and credit notes programmatically","Update contact details, payment terms, and tracking categories","List entities with filtering and pagination for reporting","Delete entities with cascade handling (e.g., removing invoice line items)"],"best_for":["Accounting automation workflows (invoice generation, payment reconciliation)","AI agents building financial reports from raw transaction data","Integration platforms syncing data between Xero and other systems"],"limitations":["No batch operations — each entity requires a separate API call (36+ tools vs 1 batch tool)","Pagination limited to 100 records per request — large datasets require multiple calls","No transaction support — partial failures leave inconsistent state (e.g., invoice created but line items fail)","Entity relationships not enforced at server level — orphaned records possible (e.g., invoice without contact)"],"requires":["Valid Xero organization ID (tenant context)","Appropriate Xero user permissions for entity type (e.g., invoicing permission)","Entity-specific required fields (e.g., invoice requires contact, line items, due date)"],"input_types":["JSON object with entity fields (name, email, amount, etc.)","Entity IDs (UUID format)","Filter parameters (status, date range, amount range)"],"output_types":["Created/updated entity JSON with server-generated IDs and timestamps","List of entities with metadata (count, pagination tokens)","Success/error response with Xero validation messages"],"categories":["tool-use-integration","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-xeroapi-xero-mcp-server__cap_3","uri":"capability://data.processing.analysis.financial.reporting.with.calculated.metrics.p.l.balance.sheet.trial.balance.aged.receivables.payables","name":"financial reporting with calculated metrics (p&l, balance sheet, trial balance, aged receivables/payables)","description":"Exposes 5 financial report tools that retrieve pre-calculated accounting reports from Xero's reporting engine. Reports are fetched via dedicated API endpoints and formatted into structured JSON with line items, subtotals, and period comparisons. The server handles date range filtering, currency conversion, and report-specific parameters (e.g., tracking category breakdown for P&L).","intents":["Generate financial statements for board meetings or investor reports","Analyze cash flow and receivables aging for credit decisions","Compare period-over-period performance (YoY, QoQ)","Extract specific line items (e.g., total revenue, COGS) for dashboards"],"best_for":["CFOs and accountants building automated reporting workflows","AI agents analyzing financial health for lending decisions","Accounting firms generating client reports at scale"],"limitations":["Reports are read-only snapshots — no drill-down to transaction level from report","Calculation lag — reports may reflect data up to 24 hours old depending on Xero sync","Limited customization — cannot add custom line items or change report structure","Currency conversion only available for multi-currency organizations"],"requires":["Valid Xero organization with accounting data (invoices, payments, etc.)","Appropriate user permissions (Reports view permission)","Date range parameters (from_date, to_date in YYYY-MM-DD format)"],"input_types":["Date range (from_date, to_date)","Optional filters (tracking category, department)","Report-specific parameters (e.g., standard layout vs detailed)"],"output_types":["Structured report JSON with rows, columns, and calculated totals","Line item arrays with amounts, percentages, and period comparisons","Metadata (report date, currency, organization name)"],"categories":["data-processing-analysis","tool-use-integration"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-xeroapi-xero-mcp-server__cap_4","uri":"capability://tool.use.integration.payroll.operations.for.nz.uk.regions.employees.timesheets.leave","name":"payroll operations for nz/uk regions (employees, timesheets, leave)","description":"Provides 8 tools for managing payroll in New Zealand and United Kingdom regions only, covering employee master data, timesheet entry, and leave accrual/usage. Tools interact with Xero Payroll API endpoints that are region-specific and require payroll-enabled organizations. The server validates region context before executing payroll operations and returns region-specific error messages if payroll is not enabled.","intents":["Automate timesheet entry from external time tracking systems","Manage employee leave balances and accrual calculations","Sync employee master data (name, tax ID, bank account) to Xero","Generate payroll reports for compliance (PAYE, KiwiSaver, etc.)"],"best_for":["NZ/UK accounting firms managing payroll for multiple clients","HR teams automating timesheet workflows","Payroll service providers integrating with Xero"],"limitations":["Region-locked to NZ and UK only — no AU, US, or other regions supported","Requires payroll module enabled in Xero organization — not available on basic accounting plans","No payroll processing/payment execution — only data entry and reporting","Leave calculations follow region-specific rules (NZ annual leave, UK statutory) — not customizable"],"requires":["Xero organization in NZ or UK region","Payroll module enabled and licensed","Appropriate payroll permissions (employee management, timesheet entry)","Employee master records already created in Xero"],"input_types":["Employee ID (UUID)","Timesheet data (hours, date range, pay period)","Leave request (type, start date, end date, reason)"],"output_types":["Timesheet confirmation with calculated pay","Leave balance updates","Employee master data (read-only)","Payroll reports (PAYE summary, leave accrual)"],"categories":["tool-use-integration","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-xeroapi-xero-mcp-server__cap_5","uri":"capability://tool.use.integration.deep.link.generation.for.xero.ui.navigation","name":"deep link generation for xero ui navigation","description":"Generates clickable deep links to specific Xero UI pages (invoice detail, contact profile, report view) that users can follow to view or edit entities in the Xero web app. Links are constructed using entity IDs and organization context, enabling seamless handoff from AI agent to human user for manual review or editing. Helper utility functions format links based on entity type and Xero region.","intents":["Provide users with direct links to view AI-generated invoices in Xero UI","Enable human review of agent-created contacts before finalizing","Link to financial reports for detailed drill-down analysis","Create audit trails showing which entities were created/modified by AI"],"best_for":["AI agents that need human-in-the-loop approval workflows","Accounting teams auditing AI-generated transactions","Customer-facing applications showing Xero data with edit capability"],"limitations":["Links are read-only navigation — no embedded editing capability","Requires user to be logged into Xero — links fail for unauthenticated users","Region-specific URLs — links may break if organization is migrated to different region","No permission checking — links may point to entities user cannot access"],"requires":["Valid entity ID (UUID) from Xero","Organization ID and region context","User with active Xero login session"],"input_types":["Entity type (Invoice, Contact, Quote, etc.)","Entity ID (UUID)","Organization ID"],"output_types":["HTTPS URL to Xero UI page","Formatted link with entity name and type"],"categories":["tool-use-integration"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-xeroapi-xero-mcp-server__cap_6","uri":"capability://safety.moderation.structured.error.handling.with.xero.api.error.code.mapping","name":"structured error handling with xero api error code mapping","description":"Implements a centralized error handling layer that catches Xero API errors, maps them to human-readable messages, and returns structured error responses to MCP clients. Error handler translates Xero-specific error codes (e.g., 'INVALID_CONTACT_STATUS', 'DUPLICATE_INVOICE_NUMBER') into actionable messages with remediation suggestions. Errors are logged with full context (request parameters, API response) for debugging.","intents":["Provide clear error messages when AI agents attempt invalid operations (e.g., creating invoice for non-existent contact)","Enable agents to retry with corrected parameters based on error feedback","Debug integration issues by capturing full error context and API responses","Prevent cascading failures by catching and handling errors gracefully"],"best_for":["AI agents that need to understand why operations failed and retry intelligently","Development teams debugging Xero API integration issues","Production systems that need detailed error logging for support"],"limitations":["Error messages are Xero API responses — may be technical and not user-friendly","No automatic retry logic — agents must implement retry strategies themselves","Error context is logged but not persisted — requires external logging system for long-term analysis","Some Xero errors are ambiguous (e.g., 'INVALID_REQUEST') — difficult to determine root cause"],"requires":["Xero API error response (HTTP status code + error body)","Logging infrastructure (console, file, or external service)"],"input_types":["HTTP error response from Xero API","Request context (tool name, parameters, organization ID)"],"output_types":["Structured error JSON with error code, message, and remediation suggestions","Logged error context for debugging"],"categories":["safety-moderation","tool-use-integration"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-xeroapi-xero-mcp-server__cap_7","uri":"capability://data.processing.analysis.data.formatting.and.field.mapping.for.xero.api.compatibility","name":"data formatting and field mapping for xero api compatibility","description":"Provides utility functions that transform MCP tool parameters into Xero API request format and transform Xero API responses into MCP-compatible JSON. Handles field name mapping (e.g., 'contact_name' → 'Name'), type conversion (dates to ISO 8601, amounts to decimal), and nested object flattening (e.g., contact addresses as array → individual address fields). Formatters ensure data consistency across all 49+ tools.","intents":["Accept user-friendly parameter names and convert to Xero API field names","Format dates, amounts, and other types correctly for Xero API","Flatten nested Xero responses into simple JSON for AI agents","Validate required fields before sending requests to Xero"],"best_for":["AI agents that need consistent parameter naming across tools","Integration platforms mapping between different accounting systems","Development teams reducing boilerplate field mapping code"],"limitations":["Formatters are Xero-specific — not reusable for other accounting APIs","Complex nested structures (e.g., invoice with 50+ line items) may lose precision during flattening","Type conversion assumes standard formats (ISO 8601 dates, decimal amounts) — custom formats not supported","No schema validation — invalid field values may pass through to Xero API"],"requires":["Input data in expected format (JSON object with field names)","Knowledge of Xero field names and types"],"input_types":["JSON object with user-friendly field names","Dates (ISO 8601 or Unix timestamp)","Amounts (decimal or integer)"],"output_types":["JSON object with Xero API field names","Formatted dates (ISO 8601)","Formatted amounts (decimal with 2 decimal places)"],"categories":["data-processing-analysis","tool-use-integration"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-xeroapi-xero-mcp-server__cap_8","uri":"capability://tool.use.integration.tool.registration.and.discovery.for.mcp.clients","name":"tool registration and discovery for mcp clients","description":"Implements a tool registry that exposes all 49+ tools to MCP clients via the MCP protocol's tools/list endpoint. Each tool is registered with metadata (name, description, input schema, output schema) that enables clients to discover capabilities and validate parameters before execution. The registry is populated during server initialization and remains static for the server lifetime. Input schemas are JSON Schema format, enabling client-side validation.","intents":["Enable MCP clients (Claude Desktop, etc.) to discover available Xero operations","Provide clients with parameter validation schemas before tool execution","Generate tool documentation automatically from registry metadata","Support dynamic tool discovery without hardcoding tool lists in clients"],"best_for":["MCP client developers building UIs for tool discovery","AI agents that need to understand available operations before planning","Documentation generators that extract tool metadata from registry"],"limitations":["Tool registry is static — new tools require server restart to be discovered","Input schemas are JSON Schema v7 — some clients may not support all schema features","No tool versioning — breaking changes to tool parameters require new tool names","Registry metadata is not persisted — lost on server restart"],"requires":["MCP client that supports tools/list endpoint","Server running and accessible via stdio transport"],"input_types":["MCP tools/list request (no parameters)"],"output_types":["Array of tool objects with name, description, input schema, output schema"],"categories":["tool-use-integration"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-xeroapi-xero-mcp-server__cap_9","uri":"capability://tool.use.integration.stdio.transport.for.mcp.protocol.communication","name":"stdio transport for mcp protocol communication","description":"Implements stdin/stdout-based bidirectional communication using the MCP protocol, enabling the server to receive tool calls from MCP clients and send responses back. The transport layer handles message framing, JSON serialization/deserialization, and error propagation. Stdio transport is compatible with any MCP client (Claude Desktop, custom agents, etc.) without requiring HTTP or WebSocket infrastructure.","intents":["Enable MCP clients to communicate with Xero server without HTTP/WebSocket setup","Support local-first deployments where server and client run on same machine","Simplify deployment by eliminating need for reverse proxy or load balancer"],"best_for":["Claude Desktop users running server locally","Development teams testing MCP integration","Single-client deployments where concurrency is not required"],"limitations":["Stdio transport is single-client only — cannot handle concurrent connections","No built-in message buffering — large responses may cause buffer overflow","No encryption — requires secure transport layer (SSH, TLS) for remote access","Process termination closes connection immediately — no graceful shutdown"],"requires":["MCP client that supports stdio transport","Server process running with stdin/stdout accessible"],"input_types":["MCP protocol messages (JSON) via stdin"],"output_types":["MCP protocol messages (JSON) via stdout"],"categories":["tool-use-integration"],"confidence":0.5,"matches":0,"success_rate":0}],"trust":{"score":37,"verified":false,"data_access_risk":"high","permissions":["Node.js v18 or higher","Valid Xero API credentials (OAuth token or client ID/secret)","MCP-compliant client (Claude Desktop 0.1.0+, or compatible)","Network access to Xero API endpoints (api.xero.com)","XERO_CLIENT_BEARER_TOKEN environment variable (for OAuth flow) OR","XERO_CLIENT_ID and XERO_CLIENT_SECRET environment variables (for client credentials)","Valid Xero API credentials registered in Xero developer portal","Valid authentication with organization context (OAuth token with org ID, or client credentials for single org)","Valid Xero organization ID (tenant context)","Appropriate Xero user permissions for entity type (e.g., invoicing permission)"],"failure_modes":["Stdio transport limits concurrent connections — single client per server instance","No built-in request queuing or rate-limiting — relies on Xero API rate limits","Response formatting adds serialization overhead for large datasets (100+ records)","No automatic token refresh — bearer tokens must be pre-refreshed by caller","Environment variable precedence is fixed (bearer token always wins) — no runtime override","No credential rotation or expiry management — relies on external token management","Organization context is determined at authentication time — cannot switch organizations mid-request","No cross-organization queries — cannot aggregate data across multiple organizations","Organization ID must be present in authentication context — fails if missing","No batch operations — each entity requires a separate API call (36+ tools vs 1 batch tool)","builder identity is not verified yet","no observed match outcomes yet"],"rank_breakdown":{"adoption":0.3372768849532277,"quality":0.32,"ecosystem":0.39999999999999997,"match_graph":0.25,"freshness":0.75,"weights":{"adoption":0.25,"quality":0.25,"ecosystem":0.15,"match_graph":0.23,"freshness":0.12}},"observed_outcomes":{"matches":0,"success_rate":0,"avg_confidence":0,"top_intents":[],"last_matched_at":null},"maintenance":{"status":"active","updated_at":"2026-05-24T12:16:22.065Z","last_scraped_at":"2026-05-03T14:23:38.364Z","last_commit":"2026-04-29T05:02:38Z"},"community":{"stars":268,"forks":125,"weekly_downloads":null,"model_downloads":null,"model_likes":null}},"distribution":{"claim_url":"https://unfragile.ai/submit?claim=mcp-xeroapi-xero-mcp-server","compare_url":"https://unfragile.ai/compare?artifact=mcp-xeroapi-xero-mcp-server"}},"signature":"UTtU2rsRH7dlBtsepsogLHX/QSnhdVcQ10g9RynmyTY+a+S0adDr2oK2z9STOiAUxTkPv83QGb7rF9/+3wTGDQ==","signedAt":"2026-06-21T15:44:51.374Z","signedBy":"unfragile.ai","version":1},"_links":{"self":"https://unfragile.ai/api/v1/passport/mcp-xeroapi-xero-mcp-server","artifact":"https://unfragile.ai/mcp-xeroapi-xero-mcp-server","verify":"https://unfragile.ai/api/v1/verify?slug=mcp-xeroapi-xero-mcp-server","publicKey":"https://unfragile.ai/api/v1/trust-passport-public-key","spec":"https://unfragile.ai/trust","schema":"https://unfragile.ai/schema.json","docs":"https://unfragile.ai/docs"}}