# TradieBridge > TradieBridge keeps a copy of a business's systems that the business owns, and keeps it in sync. Read it from code with the data API (https://app.tradiebridge.com/api/v1, an API key as a bearer token) or from an AI assistant with the MCP server (https://app.tradiebridge.com/mcp, OAuth 2.1). Neither changes a source. ## Docs - [Data API and MCP server](https://docs.tradiebridge.com/): authentication, endpoints, errors, webhooks, exports, MCP tools - [OpenAPI 3.1 document](https://app.tradiebridge.com/api/v1/openapi.json): every data API endpoint and parameter ## Sources - [Simpro](https://docs.tradiebridge.com/simpro): Jobs, quotes, invoices, customers and more. 88 resources, 7 questions - [Xero](https://docs.tradiebridge.com/xero): Invoices, bills, payments, bank transactions and contacts. 43 resources, 7 questions - [Verizon Connect](https://docs.tradiebridge.com/verizon-connect): Vehicles, trips, GPS points and inspections from Reveal. 18 resources, 1 question - [The Fleet Office](https://docs.tradiebridge.com/the-fleet-office): Assets, GPS history, prestarts, utilisation and timesheets. 15 resources, 1 question - [Deputy](https://docs.tradiebridge.com/deputy): Timesheets, rosters, staff and leave. 59 resources, 1 question ## MCP tools - whoami: Return the authenticated TradieBridge user and company. Use to confirm the connection works. - list_connections: List the company's builds, each a copy of one source: id (pass it as build_id to the other tools), name, source, web address, the company or organisation backed up, sync health, when it last synced and how many records the backup holds. - describe_resources: What a build's backup holds. Without resource: every resource key with what it means, how many records it holds and what it hangs off, and the keys that hold none. Name one resource or several to add when each last synced and the columns search_records filters and orders by and summarize_records sums and groups by. - search_records: Find records of one resource in a build's backup, of any source, highest source ID first, or largest first by order_by (ascending: true for smallest or oldest; empty values last). query matches a source ID as a prefix or a name holding every word; filters and order_by take the columns describe_resources lists. Answers the total that match and, when more remain, next_before_id to pass back as before_id (with order_by, raise limit instead). Each result's id is what get_record takes. For totals and counts use summarize_records instead of paging. - summarize_records: Count, sum, average, min or max over one resource's records in one call, of any source, optionally per group. Takes the same query and filters as search_records. column is a number column from describe_resources (min and max also take a date). measures asks several figures at once, e.g. ["count", "sum", "avg"] over column, or "sum:" for another column; the answer is then values, keyed as asked. group_by is a column, week:/month:/quarter:/year:, or a list of two, e.g. ["", "month:"]. A week is named by its Monday. Groups come largest first, or in date order when a date is bucketed, at most 100. - get_record: Records from a build's backup, of any source, exactly as the source sent them, with the records each one names (links) and the records hanging off it (related, first 50 of each). id is the source's own ID, or the id search_records returned; ids reads up to 20 at once. fields keeps only those keys of each document: top-level keys or dotted paths such as Contact.Name. - discover_questions: The questions ask_question answers in one call, for the sources this company holds: each one's name, what it answers and the arguments it takes, as a JSON schema. A question two sources share is listed under each, answered from that source's own records. Filter by source, or by a word or topic (money, tax, jobs, customers, sales, schedule, staff). - ask_question: Answer one of the questions the instructions name (discover_questions describes them) in one call, reading the build's copy server-side. arguments are the question's own; a missing or wrong one answers with the arguments it takes. Without build_id every build that answers the question answers it, each under answers with its build_id, build, source and as_of: two sources measure different ledgers, so read them side by side and never add them. build_id narrows to one build. - discover_operations: Search everything else TradieBridge can do, beyond the tools listed here — every screen and action in the app, named as "controller#action", with the arguments each one takes and the tool that runs it: call_read_operation for a read, call_write_operation for a write. Each refuses the other kind. Use it when no dedicated tool fits. Search by word: "export", "sync", "member". - call_read_operation: Run one of the read-only operations discover_operations lists, with the arguments it named. A path argument goes at the top level ({"id": 7}). It changes nothing. You never name a company: the tenant comes from your token. - call_write_operation: Run one of the write or destructive operations discover_operations lists, with the arguments it named. It changes data in TradieBridge. A path argument goes at the top level ({"id": 7}); a write's fields go nested under the key discover_operations printed them against ({"connection": {"name": "Main"}}). You never name a company: the tenant comes from your token.