MCP audit#
The MCP Server Log is Reportworq's audit trail of AI access to reports over MCP. It records every MCP tool call that reaches a tool (who saw what, when) and every request rejected at the authentication gate before any tool ran. It is what makes AI access to reports accountable and revocable, and it is central to the Copilot agent's "auditable and revocable" security claim.
The log is one of four tabs in Settings ▸ Auditing (System Log, Job Log, AI Interactions, and MCP Server Log). It audits the tool request-and-result exchange, not the AI model's conversation, that conversation is the AI Interactions log. Access to Auditing is administrator only; a User or an Author cannot reach it.
When to review it. Turn to the MCP Server Log after enabling any MCP surface (the Copilot agent, the MCP shim, or direct on-prem MCP) to monitor and audit programmatic report access: to confirm which report a Copilot query retrieved, to review who was turned away and why after tightening an access rule, or to prove for a compliance file that a report was emailed to a specific recipient.
What each event records#
Every event is a summary row backed by a full drill-in.
| Captured fact | Detail |
|---|---|
| Time | When the event occurred. |
| Outcome | Success, Tool error, Not found, Access denied (the tool ran but the caller was not entitled to the resource), or Gate denied (rejected before any tool ran). |
| Tool | The MCP tool called, for example list reports, fetch an output, fetch a report's markdown, or email an output. |
| Target report | The resolved report display name and full folder path, falling back to the report id. |
| Workspace | The workspace id and name the call resolved to. |
| Caller | The user id, email, and name under the OAuth identity path, or "System" for the API-key and relay path. |
| Client | Derived from the client's User-Agent, for example "Sydney" for Copilot, or "claude-ai" / "claude-code" for Anthropic clients. |
| Transport | The ingress, "direct" or "cloudhub-relay". See Copilot, MCP, and trust paths. |
| Duration | How long the call took. |
| Trace and session | A trace identifier and a derived session key (persisted, not surfaced in this view). |
Credentials are never written to a record, the bearer token or API key is not stored. The drill-in shows a Call card, a Caller card, an error callout when the call failed, and the full Request and Result panels with Formatted and Raw toggles and a per-body download. A markdown result renders as markdown. The request arguments and result body are stored in full, so the record holds the complete exchange.
Outcomes and denials#
| Outcome | Meaning |
|---|---|
| Success | The tool ran and returned a result. |
| Tool error | The tool ran but failed. |
| Not found | The requested resource was not found, or was trimmed away from the caller. |
| Access denied | The tool ran but the caller was not allowed the resource. |
| Gate denied | The request was rejected at the authentication gate before any tool ran. The specific reason rides in the deny reason, including DirectChannelDisabled and CloudHubChannelDisabled for the two ingress channels. |
The access decision behind each Access-denied or Not-found outcome is enforced upstream by the content service's ACL and secured-list trimming, not by the log. A caller who is not entitled to a report gets an Access-denied or Not-found row, never the report's data.
Toolbar and controls#
| Control | Values / default |
|---|---|
| Time range | Last hour · Last 24 hours (default) · Last 7 days · Last 30 days · This month · All time. |
| Outcome filter | All outcomes (default), or one of Success, Access denied, Not found, Tool error, Gate denied. Combines with the tool filter. |
| Tool filter | All tools (default), or a specific tool. |
| Search | Free text, matching user, client, tool, report, or error. |
| Columns | Toggle Time, Outcome, Tool, Target report, Workspace, User, Client, Transport, Duration. |
| Refresh | Rebinds the grid. |
| Export to Excel | Downloads the log as an Excel workbook. |
| Page size | 100 rows per page, paged server-side so the whole log is never loaded into memory. |
Enablement and retention#
| Setting | Default | Notes |
|---|---|---|
| Enable MCP audit logging | On | Set at Settings ▸ Configuration ▸ Audit Logging. When off, new tool calls are not recorded but already-captured events still display, with a callout. |
| Retention window | 90 days | Older records are purged automatically. |
Auditing never breaks the tool call it observes: a record or query failure is swallowed and logged rather than surfaced to the caller.
Notes and limits#
- It audits the tool exchange, not the chat. The AI model's conversation is the separate AI Interactions log.
- The view is a flat activity list. Session and thread grouping is persisted internally but not surfaced in this version.
- Turning logging off stops new records only. Existing records remain.
- The Tool filter dropdown lists the original tool set. The newer preview tool is audited but does not yet appear in the dropdown; use free-text search to find its rows until the list is refreshed.
Going deeper. The MCP Server Log sits alongside the System, Job, AI Interactions, and Contribution logs in Audit logs. The Transport value it records is explained in Copilot, MCP, and trust paths.
Feedback on this page
Comments, questions, requests, or something missing or unclear? Email us - the page you are on is filled in for you.
Email feedback on this pageOr write to support@reportworq.com directly.