ALTR MCP Server
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ORG_ID | Yes | ALTR organization ID | |
| MAPI_KEY | Yes | ALTR management API key | |
| MCP_HOST | No | Bind address for HTTP transports (default: 0.0.0.0) | 0.0.0.0 |
| MCP_PORT | No | Port for HTTP transports (default: 8000) | 8000 |
| LOG_LEVEL | No | Log level (default: INFO) | INFO |
| LOG_FORMAT | No | Log output format: console (default) or json | console |
| MAPI_SECRET | Yes | ALTR management API secret | |
| MCP_TRANSPORT | No | Transport protocol: stdio (default), sse, or streamable-http | stdio |
| RESTRICTED_TOOLS | No | Comma-separated tool names to hide from clients |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_policiesA | List masking policies configured in your ALTR organization. Returns each policy's tag, policy ID, and current rule count. Use the
policy_id from results when calling Masking levels reference:
|
| get_rulesA | View all masking rules configured for a specific policy. Shows which roles have what masking levels for which tag values. Masking levels reference:
|
| create_policyA | Create an empty masking policy for a specific tag. Creates a masking policy that controls how data tagged with the
specified tag is masked. Until you add rules with Each tag can only have one policy — check After creating a policy, use PLATFORM DIFFERENCES — TAG HANDLING: Snowflake and Databricks tags are FUNDAMENTALLY DIFFERENT in ALTR:
Snowflake: The Databricks: The Available masking levels:
|
| add_rulesA | Add one or more masking rules to a policy in a single batch request. Each rule specifies: which role, which tag value,
and what masking level
they should see. A policy must already exist for the tag (see
Each rule in the list must be a dict with these keys:
|
| delete_policyA | Delete a masking policy and all its rules. Use with caution - this removes all masking rules
associated with the policy. Consider reviewing rules
with |
| update_ruleA | Update an existing masking rule's properties without deleting and recreating it. Only the fields you provide will be updated; omitted
fields remain unchanged. Use Masking levels reference:
|
| delete_ruleA | Remove a specific masking rule from a policy. Allows fine-grained removal of individual rules
without deleting the entire policy.
Use |
| get_rolesA | List all ALTR roles (user groups) available in your organization. Role names are used in |
| get_tagsA | List all Snowflake tags connected to ALTR (available for use in policies). SNOWFLAKE ONLY. Databricks tags are NOT first-class objects in
ALTR — they are raw string references used at policy-creation
time only — so they will never appear in this list. Do not call
For Snowflake, only tags that have been connected to ALTR via
|
| delete_tagA | Delete a connected Snowflake tag from ALTR. SNOWFLAKE ONLY. Databricks tags are not ALTR objects (they are
raw strings referenced at policy-creation time), so there is
nothing to delete here for Databricks — to stop masking a
Databricks column tag, remove the policy with All policies on the tag must be removed first, or the deletion will fail. |
| get_tag_valuesA | List all allowed values configured for a specific tag. SNOWFLAKE ONLY. Databricks tags are raw strings, not ALTR-managed objects, so they have no stored allowed-values list here — use whatever tag values exist in the Databricks catalog directly. These values are referenced when creating masking
rules with |
| get_tag_details_by_group_idA | Get full details for a specific connected tag by its group ID. SNOWFLAKE ONLY. Returns masking configuration, status, database info, and timestamps.
Use |
| get_tag_detailsA | Get full details for a specific tag masking by database, tag, and schema. SNOWFLAKE ONLY. Databricks tags are not stored as ALTR objects, so they have no detail record to fetch. Returns masking configuration, status, and timestamps. Use when you know the exact database/schema/tag but not the tag_group_id. |
| update_tagA | Update an existing tag connection's masking configuration. SNOWFLAKE ONLY. Databricks tags are not ALTR-managed objects, so there is no Databricks tag configuration to update — change Databricks masking by editing the policy or its rules instead. Use |
| delete_tag_by_detailsA | Delete a tag masking by database, schema, and tag name. SNOWFLAKE ONLY. Databricks tags are not ALTR objects; to stop
masking a Databricks column, delete the policy with
Alternative to |
| connect_tagA | Connect a Snowflake tag to ALTR so it can be used in masking policies. SNOWFLAKE ONLY — do NOT use for Databricks. There is no Databricks
equivalent of this tool: Databricks tags are not stored as ALTR
objects, they are just raw strings referenced at policy-creation
time. Skip For Snowflake, this call registers an existing Snowflake tag as a
first-class ALTR tag object — it gets a The tool automatically resolves the friendly name to the actual Snowflake database name for the API call. |
| get_classifiersA | List all available data classifiers (pattern-based detectors) in ALTR. Classifiers automatically detect sensitive data types like SSNs, emails, and phone numbers. Includes both ALTR-managed and custom classifiers. |
| create_classifierA | Create a custom data classifier for detecting specific data patterns. Use when ALTR's built-in classifiers don't cover your data types. Custom classifiers can be added to collections and used in classification jobs. |
| delete_classifierA | Remove a custom classifier you created. Cannot delete ALTR managed classifiers. Only use for
classifiers you created with |
| get_collectionsA | List classifier collections (groups of classifiers used for classification jobs). A collection is required when creating a classification
job with |
| create_collectionA | Create a classifier collection to use for automated data discovery. Collections group classifiers together for classification jobs. After creating a collection, you can run a classification job to automatically scan your database columns and identify which contain sensitive data patterns. Typical workflow: Create a collection (or use
existing "ALTR Managed"), then use it in
|
| delete_collectionA | Delete a classifier collection. Cannot delete collections that are in use by active or recent jobs. Only delete collections you created that are no longer needed. |
| add_classifiers_to_collectionA | Add classifiers to an existing collection. All classifiers must already exist and not already be in the collection. ALTR managed collections cannot have classifiers appended. |
| remove_classifiers_from_collectionB | Remove classifiers from a collection. |
| get_jobsA | Check the status of classification jobs you've run. Classification jobs run asynchronously and can take 10-30+ minutes to complete depending on your database size. Use this to check if a job has finished after waiting an appropriate amount of time. Once a job shows status COMPLETED, you can fetch its
detailed report with Typical workflow: After creating a job with
|
| create_jobA | Run an automated classification scan to discover sensitive data in your database. Scans database columns using classifiers in the specified collection to identify columns containing PII, financial data, etc. Classification jobs run asynchronously and can take
10-30+ minutes depending on database size. After
creating a job, use |
| update_job_statusA | Control a running classification job (pause, cancel, or resume). Use to manage long-running classification jobs. Status options: PAUSED, CANCELLED, or RUNNING. |
| create_databricks_jobA | Run a GDLP classification scan on a Databricks database. Scans the Databricks catalog to identify sensitive data columns using
ALTR's built-in GDLP classifiers. Runs asynchronously — after
creating the job, use |
| get_classification_reportA | Get detailed results from a completed classification job. Returns which columns were detected as containing
sensitive data along with confidence scores. Only call
after the job status is COMPLETED (verify with
After reviewing results, check if the needed Snowflake
tags exist using |
| get_databasesA | Discover which Snowflake databases are connected to ALTR. Returns connection metadata including database names and IDs. Use
|
| get_database_idA | Get the ALTR database ID for a database name. Required before creating classification jobs. The database ID is a numeric identifier that ALTR uses internally to reference your Snowflake database. Typical workflow: After identifying your database with |
| get_service_usersA | List Snowflake service users available for database connections. Returns service user IDs needed for |
| create_databaseA | Connect a new data source to the ALTR platform. Supports two authentication modes:
After creation, use |
| create_databricks_databaseA | Connect a Databricks workspace to the ALTR platform. Supports two authentication modes:
After creation, use |
| update_databaseA | Update a database connection's properties. Only the fields you provide will be updated; omitted fields remain unchanged. |
| trigger_database_status_syncA | Trigger a database status sync. Sets the database to "in progress" until the status check
completes. Use |
| delete_databaseA | Disconnect and remove a database from ALTR. Permanently removes the database connection. This does not affect the actual database — only the ALTR connection to it. |
| create_snowflake_access_policyA | Create an access management policy for a Snowflake datasource. Defines which roles can access which databases, schemas, or tables with read or write permissions. Policies are enforced by ALTR and checked on a schedule. Each rule in the list must contain:
Optionally, rules may include 'tagged_objects' for tag-based targeting:
|
| create_oltp_access_policyA | Create an access management policy for an OLTP datasource. Each rule in the list must contain:
|
| update_snowflake_access_policyA | Update an existing Snowflake access management policy. Replaces the policy's name, description, and rules. See
|
| trigger_access_policy_checkA | Trigger a manual compliance check for a grant/access management policy. Runs the policy check immediately instead of waiting for the next scheduled run. |
| create_access_requestA | Create a new access request for data access approval. Submits a request that must be approved before access is granted.
Use Each rule follows the same format as access management policy rules:
|
| get_access_requestsA | List access requests in your ALTR organization. |
| get_access_requestA | Get details for a specific access request. |
| approve_access_requestB | Approve a pending access request. |
| deny_access_requestB | Deny a pending access request. |
| cancel_access_requestB | Cancel an access request you created. |
| get_agent_instancesA | List running instances for a specific ALTR agent. |
| get_agent_instanceA | Get details for a specific agent instance. |
| delete_agent_instanceB | Delete an agent instance. |
| get_agent_task_telemetryA | Get task telemetry for a specific agent. Returns task status, messages, and metadata for tasks assigned to this agent. |
| get_sidecar_instancesA | List running instances for a specific sidecar. |
| get_sidecar_instanceB | Get details for a specific sidecar instance. |
| delete_sidecar_instanceC | Delete a sidecar instance. |
| get_task_telemetryA | Get telemetry for a specific task by its ID. |
| delete_task_telemetryB | Delete telemetry for a specific task. |
| search_auditsA | Search sidecar query audits with filters. Triggers an async search and returns a search_uuid (valid 30 days).
Use |
| get_audit_resultsA | Get results from a previously triggered audit search. Results may not be immediately available — a 202 response means the search is still processing. Retry after a short wait. |
| search_system_auditsA | Search ALTR platform system audits. Starts an async query against system audit logs. Returns a token
to retrieve results with The |
| get_system_audit_resultsA | Get results from a system audit query. Use the token returned by |
| search_query_auditsA | Search Snowflake query audits (tag and column masking). Triggers an async search and returns a search_uuid (valid 30 days).
Use Use this for Snowflake tag-based or column-based masking audits.
For sidecar proxy audits, use |
| get_query_audit_resultsA | Get results from a previously triggered query audit search. Results may not be immediately available — a 202 response means the search is still processing. Retry after a short wait. Use this to retrieve results from |
| list_report_definitionsA | List audit report definitions. Returns paginated definitions ordered by creation time descending.
Use |
| create_report_definitionA | Create a new audit report definition. Defines what data is included, how it is scheduled, and where it
is delivered. After creating, use |
| get_report_definitionA | Get a single audit report definition by ID. |
| update_report_definitionA | Update an existing audit report definition (full replacement). Replaces the definition's configuration entirely. All fields that should be preserved must be included. |
| archive_report_definitionA | Archive (soft-delete) an audit report definition. Archived definitions are hidden from normal listings but can be
restored with |
| restore_report_definitionA | Restore an archived audit report definition. |
| trigger_report_definitionA | Trigger an on-demand audit report for a definition. Generates a report instance immediately outside of the normal schedule. Rate-limited to one trigger per definition per 5 minutes. |
| list_report_instancesA | List report instances for a given definition. Each instance represents one generated report. Instances are returned newest-first. |
| get_report_instanceB | Get a single report instance by ID. |
| get_report_instance_download_urlA | Get a download URL for a report instance. Returns a pre-signed URL to download the report file. |
| list_report_commentsA | List comments on a report instance. Pinned comments appear first, followed by the rest in chronological order. |
| create_report_commentB | Add a comment to a report instance. |
| pin_report_commentA | Pin a comment on a report instance. Only one comment per instance can be pinned at a time. Pinning is allowed after the instance has been signed off. |
| unpin_report_commentB | Unpin the currently pinned comment on a report instance. |
| get_report_sign_offA | Get the current user's sign-off for a report instance. Returns null/empty if the current user has not yet signed off. |
| create_report_sign_offA | Sign off on a report instance. Records the current user's approval of the report. After signing off, comments can be pinned on the instance. |
| list_report_sign_offsA | List all sign-offs for a report instance. Returns sign-offs from all users who have reviewed the instance. |
| list_sc_agentsB | List ALTR agents (SIS or CLASSIFIER) in your organization. |
| create_sc_agentC | Create a new ALTR agent. |
| get_sc_agentC | Get details for a specific agent. |
| update_sc_agentA | Update an existing agent. Only provided fields are changed. |
| delete_sc_agentA | Delete an agent. Agent must have task_count of 0. |
| list_sc_agent_tasksA | List tasks assigned to an agent. |
| create_sc_agent_taskA | Create a task for an agent. A task runs against a specific repo on a schedule.
Configuration depends on agent type (check with
CLASSIFIER agent configuration:
SIS (audit) agent configuration varies by DB:
Schedule: 'type' ("CRON"), 'value' (cron expression), optional 'max_duration' (ISO 8601), optional 'timezone' (e.g. "America/New_York"). |
| update_sc_agent_taskA | Update an agent task. Only provided fields change. Configuration update rules vary by database type.
See |
| delete_sc_agent_taskA | Delete an agent task. Atomically removes the task and decrements the agent's and service user's task counts. |
| list_sc_reposA | List database repositories configured for sidecar proxying. |
| create_sc_repoB | Create a new database repository for sidecar proxying. |
| get_sc_repoB | Get details for a specific repository. |
| update_sc_repoC | Update a repository's description. |
| delete_sc_repoA | Delete a repository. Must have no users or bindings. |
| list_sc_repo_usersA | List users configured for a repository. |
| create_sc_repo_userA | Create a repo user with credential reference. Provide exactly one of aws_secrets_manager or azure_key_vault. |
| get_sc_repo_userB | Get details for a specific repo user. |
| update_sc_repo_userA | Update a repo user's credential reference. |
| delete_sc_repo_userC | Delete a repo user. |
| list_sc_service_usersA | List service users. Optionally filter by repo. |
| create_sc_service_userA | Create a service user for a repository. Provide exactly one of aws_secrets_manager or azure_key_vault. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/altrsoftware/altr-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server