There are two VisIQ MCP servers, both listed in
/.well-known/mcp/server-cards.json:- Public MCP —
https://visiqlabs.com/mcp— read-only discovery, no credentials. Public information about VisIQ only. - Platform MCP (this page) —
https://app.visiqlabs.com/api/mcp— authenticated; operates your tenant.
Endpoint & transport
You need a management-audience API key. Get one from Connectors → API
Keys in the dashboard, or have your agent
self-register with
"requested_key_type": "management". A harness key is confined to the SDK
operational surface and is not accepted here.
What needs a key
Connect a client
Every client needs the URL and anAuthorization: Bearer header carrying a management key. Keep the key in an environment variable (VISIQ_API_KEY below), not in a file you commit. The Claude Code, Cursor and Claude Desktop shapes follow those clients’ own documentation at the time of writing; the curl call is tested against this server.
Claude Code
.cursor/mcp.json)
mcp-remote bridge (not a VisIQ project; check its current flags). The header value is passed through env because the bridge splits arguments on spaces:
whoami to confirm which vendor, role and permissions your
key resolves to. Every other tool is gated by those permissions.
Retries and audit
- Retries. Read-only tools are always safe to repeat.
create_rule,create_recall_ruleandcompile_ruletake an optionalidempotency_key: repeat the call with the same key and the same arguments (in any key order) and you get the first result back instead of a second write. Without a key, a repeatedcreate_ruleorcreate_recall_rulewith the same name is refused with409 A rule with this name already exists, but a repeatedcompile_rulecan create a second rule under another name.update_rule,delete_rule,register_agent,update_agent,respond_hitl,update_allow_settingsandrevoke_selfare safe to repeat: a second call changes nothing further or is refused. Key-order tolerance applies to calls made through this server; the REST API hashes the body exactly as sent. - Audit. Tool calls your key makes are recorded in Settings → Activity with the tool, the outcome and the key that made it. The record holds the size of the arguments, never their content. A write is recorded before it runs and is not attempted if that record cannot be written; a read is recorded after it answers, on a best-effort basis. Not recorded:
describe_chat, which reads nothing about your key; calls refused before a key resolves (no key, or an unknown, revoked or expired one); calls naming an unknown tool or sending invalid arguments.
Tool catalog
Arguments are checked against each tool’sinputSchema before the tool runs:
an argument the schema does not list, a missing required one, or a value of
the wrong type is refused with -32602.
The server advertises 26 tools through tools/list. Each one is gated by the same permission as its web API route; call whoami to see which your key holds.
Discovery
whoami
Return the vendor, role and effective permissions of the management key you authenticated with, exactly as every other tool resolves them.
Takes no arguments.
describe_chat
Discover the in-product AI chat surface: which chat_* tools exist, how to read the NlChatResult widgets (previews/final/clarify/navigate), and the catalog of pages a navigation proposal can point at.
Takes no arguments.
Governance rules (unified: action and retrieval)
list_rules
List the tenant’s unified governance rules (action and retrieval), paginated. Filter by facet with operations.
get_rule
Fetch a single governance rule (action or retrieval) by id, including its Rego and applies_to facets.
create_rule
Create a governance rule. Author the logic in Rego and declare which operation facets it governs. Pass idempotency_key to make a retry safe.
update_rule
Update an existing governance rule. Send any subset of its fields; omitted fields are unchanged.
delete_rule
Delete a governance rule by id.
compile_rule
Author a governance rule from a natural-language description via the in-product Rule Builder assistant. The assistant compiles the intent to Rego, simulates its impact, and PERSISTS the rule (write). An ACTION rule needs allow_rules:create, a RETRIEVAL rule needs recall_rules:create (whichever facet the assistant persists is enforced). Returns the compiled rule graph + related rules. Pass idempotency_key to make a retry safe: without it, a retried call can create a second rule.
Retrieval-only rule aliases
list_recall_rules
List the tenant’s retrieval-governance rules only, paginated. list_rules returns both facets.
create_recall_rule
Create a retrieval-governance rule, authored in Rego (the retrieval facet is set for you). Pass idempotency_key to make a retry safe.
Agents
list_agents
List the tenant’s registered AI agents (across all connected frameworks) with governance metadata.
get_agent
Fetch a single agent by id with its full governance profile.
register_agent
Register/connect an AI agent from a supported framework (LangChain, OpenAI Agents SDK, LlamaIndex, Vercel AI SDK, Mastra, VoltAgent, Semantic Kernel, Pydantic AI, OpenClaw, CrewAI, AutoGen, LangGraph, Google ADK, Strands Agents, …). agent_id is the natural key: registering the same agent_id again is refused (409), never duplicated.
update_agent
Update an agent’s governance settings (mode, trust tier, categories, business function, owner, HITL pathway, shutdown, …). Unknown fields are refused.
Decisions and action schemas
get_decision_outcomes
Read governance decision outcomes (the decision audit log): each agent action or retrieval and whether it was permitted, denied, sent to approval, or masked.
list_action_schemas
List the discovered action/tool schemas and their field mappings for the tenant’s agents.
Human-in-the-loop
list_hitl_queue
List human-in-the-loop approval requests (actions routed for human review). Defaults to open requests.
respond_hitl
Respond to a human-in-the-loop request. For an end-user approval send decision; for other items send action (dismiss or create_rule). The approver is recorded from the authenticated management key you call with. It cannot be supplied or spoofed.
Settings
get_allow_settings
Read the tenant’s governance settings (no-coverage defaults, autopilot, HITL timeout, default agent mode, fail mode, redaction floor, Context Firewall policy, auto-disable).
Takes no arguments.
update_allow_settings
Update the tenant’s governance settings. Send any subset of the fields; omitted fields are unchanged.
Natural-language queries
chat_rules_table
Ask the in-product AI assistant about the governance RULES table in natural language (‘which enabled rules block writes to external APIs?’). Returns a machine-friendly NlChatResult (previews/final query/clarify/navigate). Does not mutate. It resolves a query the Rules table would apply.
chat_events_log
Ask the in-product AI assistant about the EVENT LOG (governance decision outcomes) in natural language (‘show denies on stripe in the last hour’). Returns a machine-friendly NlChatResult. Read-only query resolution.
chat_agents_inventory
Ask the in-product AI assistant about the AGENTS inventory in natural language (‘which discovered agents are ungoverned shadow AI?’). Returns a machine-friendly NlChatResult. Read-only query resolution.
chat_hitl_queue
Ask the in-product AI assistant about the HUMAN-IN-THE-LOOP approval queue in natural language (‘pending refunds over $500 from the fraud bot’). Returns a machine-friendly NlChatResult. Read-only query resolution (use respond_hitl to act on an entry).
chat_data_table
Ask the in-product AI assistant about ANY other data table by supplying that table’s field schema (the generic dock every StandardTablePage carries). Returns a machine-friendly NlChatResult with the resolved query or a navigation proposal.
Key lifecycle
revoke_self
Revoke THIS API key: the exact management key you are authenticated with (RFC 7009 self-revocation). No special permission is required, and no other key can be targeted: the credential is identified from the request’s own bearer token. After this succeeds the key immediately stops authenticating, so it MUST be your final call with it. Irreversible.
Takes no arguments.
Errors and limits
Errors
A failure is reported in one of two places. A problem with the request itself is a JSON-RPC error. A tool that ran and was refused, or failed, is a normal result withisError: true, and its text carries the HTTP status and the route’s error body.
Limits and transport
The first two limits are per-deployment settings (
MCP_RATE_LIMIT_IP_PER_MIN and MCP_RATE_LIMIT_KEY_PER_MIN) and are enforced on each server instance, as a guard against a single runaway client rather than as a billing quota. Every call also spends the key’s own request budget, which it shares with the REST API.
Related
- Agent authentication — the agent-facing auth guide (device flow + self-revoke).
- Managing API keys — key lifecycle, formats, errors.
- Agent self-registration — obtain a key without a pre-provisioned credential.