What is MCP?
The Model Context Protocol (MCP) is an open standard that enables AI applications to securely connect with external data sources and tools. MCP is supported by various AI tools including Claude Desktop, Cursor, VS Code, and other AI development environments. For detailed information about MCP, see:Getting Started
MCP needs no setup in the workspace. Add the server to your AI client and sign in.Client Setup
Use the MCP server URL for your region:- Claude Code
- Claude Desktop / claude.ai
- Cursor
- VS Code
- Codex CLI
- Gemini CLI
- Other Clients
Run the command for your region:
Authentication
Coalesce Quality MCP uses OAuth2 with PKCE. You do not paste API keys or tokens anywhere. Every action the assistant takes is recorded as yours, with a via MCP badge, so the audit trail shows which changes came from an AI assistant. The flow:- When your AI client connects for the first time, your browser will open automatically
- If you are already logged in to Coalesce Quality, the consent screen appears directly. Otherwise, you will be asked to log in first.
- Select the permission level you want to grant (see Permissions below)
- Click Approve to authorize

Static tokens (legacy)
The MCP server also accepts long-lived workspace tokens (prefixedst-…) created under Settings → API. Pass the token as a Bearer token in the Authorization header of the MCP connection. Use a token only when OAuth is not possible, for example for automation that runs without a user, or when user API access is disabled for the workspace.
For interactive AI clients, use OAuth. Actions are recorded as the real user instead of a shared identity, each user can revoke their own access, and the user’s role limits what they can grant.
Permissions
During authorization, you choose what access to grant. The consent screen offers only what your user role allows.
The tool tables below use the short names in brackets (Read, Write, Governance, Deploy) in the Required scope column. Every tier also includes read-only access.
If the application asks for specific scopes, each tier grants only the scopes it asked for in that tier. The consent screen lists them per tier. Read them before you approve, and untick a tier you do not want to grant. If the application asks for no specific scopes, each tier grants everything in it, so select only the tiers the assistant needs.
Disabling User API Access
Workspace admins can stop users from giving third-party applications, MCP clients included, OAuth access to the Coalesce Quality API. The setting is Disable user API access in Settings → Workspace. A user with the Admin role can turn it on or off at any time.
- New OAuth consent attempts from MCP clients are rejected with an explanatory message on the consent screen.
- Existing OAuth tokens issued to users stop working.
- Long-lived workspace tokens (
st-…) and client credentials still work. Use them for programmatic access while the setting is on.
Coalesce Quality MCP Tools
The tables below list the tools your AI assistant gets, grouped by purpose. A session sees only the tools that the granted permissions allow.Session and Identity
Discovery and Search
Core Entity Operations
The three knowledge tools appear only when the workspace is linked to a Coalesce Catalog account.
Folder Navigation
Browse the catalog’s folder hierarchy: the root folders, the sub-folders of a folder, the folders an entity is in, and the entities in a folder. These tools are read-only. By default a call returns one level, with direct members only. Setdeep=true, or browse the sub-folders one by one, to go deeper. Use these tools to find the folder ids that the ResolverQL in_folder(...) operand needs.
Data Lineage Analysis
The same graph the lineage view draws, including column-level lineage where the warehouse supports it. Comprehensive Lineage
Upstream Analysis
Downstream Analysis
Cross-Entity Analysis
Issue and Incident Management
The read side of the workflow Incidents describes. The tools that change an issue or an incident are under Write Actions.Impact Analysis
Data Quality and Monitoring
The read side of a workspace’s checks. Monitors overview covers the monitor types and SQL tests the tests; creating and changing them is under Managing Monitors and Tests.Executions
SQL Generation for Data Analysis
These tools generate the SQL that Coalesce Quality would run to analyse data, but the MCP server does not execute queries against your warehouse. The response includes the full
executedSql. Run it yourself, or let your AI client run it through its own warehouse connection, to get the results. Your data stays in your warehouse, and the MCP server holds no database credentials.Change Tracking and History
Database Changes
Git Integration
Workspace Setup
What needs attention in how the workspace is set up: the changes Coalesce Quality recommends, such as a grant an integration’s role is missing or a setting that stopped matching what runs, and the integrations that are failing.
Deciding about a recommendation on an integration also needs permission to edit integrations.
Write Actions
The tools in this section modify workspace data and require Write access (for issue/incident actions) during OAuth consent. If the user granted only read-only access, these tools will not appear in the client.
Managing Monitors and Tests
These tools create and change monitors, table-stats monitors and SQL tests. They need Deploy access. Start with
describe_check_types, which needs no granted scope, to pick the right check type for a goal. Setting up monitors and SQL tests describe the same checks in the app. To keep checks under version control, see defining monitors in code.update_sql_tests takes a patch. Send the test’s id and only the fields to change, and the other fields keep their values. update_monitors and update_table_stats_monitor replace the whole object. Get the current definition with the matching list_* tool, make your edits, and send the complete object. Fields you leave out are cleared.Some changes need the user’s confirmation: a change that resets a check’s baseline (retrains anomaly detection or runs a test again), and a change to a check that the app or a YAML config owns. The first call does not apply such a change. It reports what needs approval. The assistant calls again only after the user confirms, and never confirms on its own.Deployment Rules
A deployment rule deploys monitors to every asset that a ResolverQL selection query matches. These are the same rules that Setting up deployment rules describes in the app. All of these tools need Deploy access, except
describe_resolver_ql. Call describe_resolver_ql for the query grammar, then preview_deployment_rule to see the impact, and only then deploy_deployment_rule. The deploy and delete tools need the user’s confirmation, and the assistant never confirms on its own.Monitoring Exclusions
Turn automatic monitoring off, or back on, for specific assets while the deployment rules that select them stay as they are. Each asset gets its own exclusion, which wins over every rule selecting it, so a noisy table can be silenced without editing a broad rule that may own hundreds of monitors.All three tools need Deploy access. They take assets as
entity_ids: an entity id, or a dotted database.schema.table.Excluding is safe to repeat. Adding one more table leaves the existing exclusions untouched, and assets that were already excluded come back in their own list.exclude_from_monitoring and unexclude_from_monitoring are confirmation-gated. The first call applies nothing and lists the assets whose monitoring would change; the assistant re-calls only after the user approves, and never confirms on its own. Lifting an exclusion created in the app or by a YAML config takes a second, separate overwrite confirmation.To check the result, call list_monitoring_exclusions with the same entity_ids. The monitor counts on deployment rules stay the same when an exclusion lands, so they tell you nothing here.SQL Test Deployment Rules
The same query-based deployment, applied to SQL tests: a rule carries a set of tests, a ResolverQL selection, a schedule and a severity, and deploys those tests onto every table or view the selection matches, also tables that only start matching later. SQL tests covers the tests themselves.Listing, reading and previewing these rules needs Read-only access. Deploying and deleting a rule needs Deploy access and the user’s confirmation, the same as for monitor deployment rules. To overwrite a rule made in the app or by a YAML config, the user must confirm a second time.Two things decide which rule a call addresses and what it deploys:
- The title identifies the rule. A spec with the title of an existing rule updates that rule, and a new title creates a new rule. Pass an existing id only to rename a rule, or to edit a rule in a YAML config’s namespace. Then pass the same id to preview and to deploy, or the two calls address different rules.
- A test that names a column fails on a matched table that does not have that column. Select on the column (
with_columns("email")) instead of deploying broadly. Views match the same as tables, as a SQL test is a plainSELECT. Addwith_type("table")to match tables only.
Check Categorisation
Every check has one category in each of two dimensions: governance, what the check is for (completeness, accuracy, timeliness), and technical, what the check does (nullness, uniqueness, freshness). The category comes from a per-check override, from the producer that declared it, or from a categorisation rule, in that order of precedence. Check categories describes the feature itself; these tools drive the same rules and overrides the Health → Check categorisation screens do.Start with
describe_check_categorisation, which needs no granted scope. It explains the resolution order, the matcher grammar and how to write a rule. Reading categories and rules needs Read-only access. The three writes need Governance access, as a rule applies to every check it matches, now and in the future.A rule’s matcher is the same predicate the app builds: either a structured predicate over the check’s platform, asset type, package, kind, name patterns and annotations, or a CEL expression, never both.The writes are confirmation-gated: the first call reports the impact and applies nothing, and the assistant never self-confirms. A save that would move checks off the category they already carry, or an override that replaces one somebody else set, needs a second explicit overwrite confirmation. You cannot edit or delete a global rule. Workspace rules are always tried before global rules, whatever their priorities, so to change what a global rule does, add a workspace rule that matches the same checks.Data Products
Data products are named, owned groupings of assets defined by a membership query (authored as ResolverQL, viadescribe_resolver_ql) or pinned asset ids. Data products overview describes what they are for.
save_data_product and delete_data_product need Governance access. They need the user’s confirmation: the first call only reports what would change, and the assistant calls again after the user approves. A product managed by an external source, such as Atlan, needs a second, explicit overwrite confirmation.Domains
A domain is a named area of ownership. It groups the assets, data products and sub-domains of one part of the business, see Domains. A domain can have a parent domain, and a parent’s membership includes everything in its sub-domains. Uselist_domains to walk the hierarchy. Leave out parent_id to get all domains at all levels, pass a domain id to get its direct children, or pass an empty string to get only the top-level domains.
Membership is a list of parts combined with OR: a pinned asset, a whole data product, a whole other domain, or a ResolverQL selection query. A domain can reference other domains and data products, and its membership is resolved recursively. A write that makes these references form a loop is rejected, and the error names the path of the loop.
save_domain and delete_domain need Governance access. They need the user’s confirmation: the first call only reports what would change, and the assistant calls again after the user approves. A domain managed by an external source, such as Atlan, needs a second, explicit overwrite confirmation.delete_domain reports how many direct sub-domains the domain has before anything is deleted, because the two delete modes differ: a soft delete leaves those sub-domains in place, parented to a deleted domain, while a purge is refused while any of them still exist.Owners and Ownership
An owner is a named responsible party with notification channels (contacts). An ownership assigns assets to an owner and sets the alerts sent to that owner. Ownership overview and Routing alerts describe the same model in the app.The
save_owner and delete_owner tools require Governance access. save_owner is a single use-case call that upserts the owner and its ownerships together. Both are confirmation-gated and never self-confirmed; overwriting an external-source (e.g. Atlan) owner requires an explicit overwrite confirmation.Alerts
Alerts are named rules that send a notification to a set of targets (Slack or Microsoft Teams channels, email recipients, an owner, a webhook) when something happens. An alert is one of three kinds: issues on the selected assets, schema changes on the selected assets, or incident state changes. Assets are selected with a ResolverQL query. Setting up alerts describes the same alerts in the app.Reading alerts needs Read-only access; the four writes need Write access. All four writes are confirmation-gated: the first call changes nothing and reports what would happen, and the assistant re-calls only after the user approves, never confirming on its own.
save_alert is a patch on update: a field you set is written, a field you leave out stays as it is, and targets replaces the whole list. Without an id, the alert’s fqn is the key, so a repeated call updates the same alert rather than creating a second one. The kind of an alert cannot change.Coverage
Coverage tells you how much of the catalog is in a data product or has an owner. These three read tools answer it without listing every product and owner first: what claims one asset, how much of a selection is claimed, and which assets are not claimed.Start with
get_coverage_summary. It takes up to twenty named selections in one call, returns only counts, and answers most coverage questions. Use list_entity_coverage only to name specific assets. When the gap is large, narrow the selection instead of paging through it. One selection per schema, folder or asset type shows where the gap is.Choose the candidate asset types with care. Data products group what is delivered, so for data product coverage, select tables, views and models. Without a type filter, most of the result is monitors, tests and reconciliation cases, which are never in a data product. For owner coverage, include checks, as a check usually should have an owner.
How to read the numbers:
- The counts overlap. An asset that is in a data product and has an owner is counted under “in a product”, under “has an owner” and under “both”. Only “claimed by nothing” does not overlap with the others.
- Selections can overlap too, so do not add rows together to get a workspace total. A common shape is one selection for the whole workspace and one per asset type. Adding those rows counts the same asset more than once. Ask for the total as its own selection.
- Membership is recalculated at intervals, and every answer says when.
members_computed_atsays when membership was last calculated. Show it next to every finding. If the answer must include a change made a moment ago, ask for live freshness. It is exact at the time of the call, but costs more, as it resolves the whole catalog again. - Membership follows identity. If one table appears twice in the catalog, for example as a transformation model and as the warehouse table it builds, an overlay that matches one also claims the other. Ask about the one you have.
get_entity_overlaysanswers for every id you give it. An id that names no entity comes back as claimed by nothing, the same as a real asset that nobody owns. If you typed the ids yourself instead of taking them from another tool’s response, check them withbatch_entity_detailsbefore you report a gap.
Usage and Popularity
These tools read your data platforms’ query history: how a table is used and by whom, and what a login, job, tool, service account or person reads, writes and costs.Service Accounts
A data platform login often acts for a tool (a BI tool, a scheduler, a transformation job) rather than for a person. Service accounts say which logins, or which of a login’s queries, belong to a tool, and person links name the person behind the rest. Together they decide whose reads count toward an entity’s popularity.Reading service accounts needs Read-only access; planning and applying a change needs Governance access, because one matcher attaches every login that matches it, now and later.
list_platform_users also needs the Developer or Admin role, since it shows every login on the connected platforms.The loop the assistant follows:list_platform_userswithunclassified_onlyto see the logins nothing classifies yet.list_service_account_suggestionsfor the accounts the evidence points at, or write an account yourself.list_service_accountsshows what already applies.plan_service_account_changesto see what the change set moves: every login whose reading changes, the reads it adds or removes from popularity, and the entities whose rank moves most.apply_service_account_changeswith the plan, only after the user confirms it.
apply_service_account_changes without confirmed writes nothing and only returns the plan again. If the service accounts changed after the plan was made, apply is refused and the change has to be planned again.Saved Views
Saved views are named, reusable selections over entities (or the checks / issues screens) with display configuration, sharing, and per-user pinning. Selections are authored as ResolverQL (viadescribe_resolver_ql).
save_saved_view and delete_saved_view need Write access. set_saved_view_pin needs only read access, as a pin is a personal preference and does not change the view. save_saved_view is confirmation-gated; editing a view you do not own, or changing its visibility / grants, requires an explicit overwrite confirmation.