tatersecurity.com Open App

Claude MCP Integration

Connect Claude Desktop or claude.ai directly to your TATER compliance data using the Model Context Protocol (MCP). Query scan results, explore failing controls, create risk acceptances, log change requests, write framework narratives, and assign work - all through a natural conversation.

What Is the MCP Integration?

The TATER MCP server makes your organization data available through 600+ tools. A connected assistant uses TATER as its first source for organization context, current configuration, operational history, compliance state, and institutional knowledge before falling back to external research or rebuilding an answer from scratch. Instead of copying scan results into a chat window, the assistant reads the relevant records directly from TATER. You can ask questions like:

  • "Which controls are failing for Exchange Online right now?"
  • "Create a risk acceptance for the SMTP AUTH control with a 90-day expiry."
  • "Show me all Critical findings from last week's scan."
  • "Assign the DMARC control to Sarah and set a due date of May 1st."
  • "Summarize our CIS Section 1 posture and write the framework narrative."
  • "Log that I just disabled legacy auth - impact is High."
  • "What's our compliance score across all frameworks?"

The MCP server supports two connection modes: a local stdio transport for clients that launch a process, and a remote HTTP transport for clients that connect over HTTPS. The HTTP endpoint uses per-person Microsoft OAuth sign-in; an API key is only needed for the local stdio and headless paths below.

Other OAuth-capable MCP clients

For a general-purpose AI assistant, use https://api.tatersecurity.com/api/mcp?mode=lazy&org_id=org-xxxxxxxx as the remote MCP server URL. Replace the organization ID with your own and sign in with the work account you use for TATER. The bare endpoint and explicit lazy mode advertise a compact discovery set while keeping every authorized TATER tool callable through find_tools, load_toolset, and invoke_tool. Clients that handle very large catalogs well can use https://api.tatersecurity.com/api/mcp?mode=full&org_id=org-xxxxxxxx to advertise the complete suite up front. You can also use a narrower domain URL such as https://api.tatersecurity.com/api/mcp/itsm?org_id=org-xxxxxxxx; see Available Tools for all domains.

ClientConnection guidance
Claude Desktop / claude.aiUse the remote connector setup below. The Microsoft sign-in flow has been exercised with this client.
ChatGPT / CodexAdd the lazy remote HTTP MCP URL above and choose OAuth sign-in when the client offers it. Use the full URL when you specifically want all tool schemas advertised up front. TATER publishes protected-resource metadata for the base URL and each domain URL. Client-specific sign-in and tool use should be verified in that client.
Microsoft 365 CopilotUse an MCP plugin or agent connector with an OAuth auth configuration. Microsoft Entra-backed servers require a statically registered OAuth client; TATER's public-client registration endpoint does not satisfy Microsoft 365 Copilot's dynamic registration requirements. See the Copilot setup guide and Microsoft's OAuth setup.
Other HTTP MCP clientsUse the same URL if the client supports OAuth protected-resource discovery and Microsoft sign-in. Verify the client's supported transport and OAuth flow before deployment.

If a client reports missing protected-resource metadata, open https://api.tatersecurity.com/.well-known/oauth-protected-resource/api/mcp in a browser. Its JSON resource must be https://api.tatersecurity.com/api/mcp. For a domain URL, append the same domain to both paths; for example, /.well-known/oauth-protected-resource/api/mcp/itsm must advertise https://api.tatersecurity.com/api/mcp/itsm. TATER's OAuth bridge accepts the MCP resource parameter, then signs you in through Microsoft with a fixed registered callback; the client does not need an API key. If discovery succeeds but sign-in fails, check the client's callback host, requested scope, and organization access.

In-app AI Analyst

TATER also has a built-in AI Analyst accessible from the application directly under AI Analyst in the sidebar. The MCP integration described here extends that capability to Claude Desktop and claude.ai, allowing you to work from those interfaces instead of the TATER web app.

Prerequisites

Requirement Details
TATER Account You must have an active TATER account with at least Auditor role in an organization.
TATER API Key
stdio / headless only
Only needed for local stdio mode and headless runners. The claude.ai and Claude Desktop remote connectors do not use one — you sign in as yourself instead (see why). If you do need a key, generate it in Manage → Connections → API Keys; the full key is shown only once.
Organization ID Found in Settings → Endpoint Agent, in the Agent Configuration Reference section at the bottom of the page. Format: org-xxxxxxxx.
Claude Desktop (stdio mode) Claude Desktop app for macOS or Windows. Download from claude.ai/download.
Node.js 20+ (stdio mode) Required to run the local MCP server process. Install from nodejs.org.

Step 1: Generate a TATER API Key

Skip this step for the remote connectors

If you are setting up claude.ai or the Claude Desktop Connectors UI, you do not need an API key at all — jump straight to those sections and sign in with Microsoft. API keys are for local stdio mode (Option B) and headless runners.

Open Manage → Connections → API Keys

Open TATER Manage → Connections → API Keys (manage.tatersecurity.com) - the single home for API key management.

Create a new key

Click Create API Key. Give it a descriptive name like claude-mcp and select your organization.

Copy the key immediately

The full API key is displayed only once. Copy it to a secure location (password manager or secrets vault) before closing the dialog. TATER stores only a hashed prefix.

Keep your API key secret

API keys grant full access to your organization's compliance data. Do not commit the key to source control or share it in chat. If a key is compromised, delete it immediately from Manage → Connections → API Keys and generate a new one.

Give each person their own key — don't share one

For a team, generate one API key per person, not a single org-wide key everyone pastes in. MCP attribution binds to the key: the first person who runs verify_identity on a key owns the audit trail, task comments, and XP for everyone else who uses that same key. On a shared key that is factually wrong — and in a compliance product a misattributed audit entry is a real defect, not cosmetic. When each person has their own key and verifies it once, attribution is correct. (#1373)

Cleaner still — per-person OAuth. The claude.ai remote connector can sign each user in as themselves via Entra ID (Microsoft) sign-in, so there is no shared secret to bind and no verify_identity step at all — every action is attributed to whoever is signed in. See Setup: claude.ai (Remote HTTP). This is the recommended path for human users; reserve API keys for headless runners (see Service keys below).

Fixing a mis-bound shared key. If a key is already bound to the wrong person, an admin can correct it in Manage → Connections → API Keys (the single home for key management): the key row shows who it is attributed to, with an Unbind button that clears the binding without changing the secret (agents keep working). The correct user then re-runs verify_identity, or switches to OAuth. Rotating the key also clears the binding.

Unexpected verification code? If you did not request the email, contact your organization administrator and review the key in TATER Manage → Connections → API Keys. Key management is in Manage, separate from TATER Security Settings.

Historical note: entries created while a key was mis-bound stay attributed to the original binder — TATER does not retroactively re-attribute past audit records (the data does not record who really acted, so any "correction" would be guesswork). Only new activity after unbinding/re-verifying is attributed correctly.

Verification codes: each code expires after 15 minutes. Five incorrect guesses invalidate the challenge across both REST and MCP; start again to obtain a new code. A key can request at most one new code per minute, and email requests also have an IP rate limit. Organization-scoped keys require a matching organization member at both start and confirmation. If delivery is withheld or fails, setup reports that failure; codes are never queued for delayed delivery. Service keys cannot be bound to a person.

Service keys (headless / autonomous runners)

A normal API key is a user key: the first time it performs a write action over MCP, TATER asks it to bind to a human identity via verify_identity (a 6-digit code emailed to you). That works for an interactive agent, but a headless runner — a scheduled job, a webhook worker, a CI task — has no inbox and can never complete it, so its writes stay blocked.

For those, create the key with keyType: "service" (POST /api/apikeys with { "name": "ops-webhook-runner", "orgRole": "Auditor", "keyType": "service" }). A service key:

  • Skips verify_identity for write actions — no interactive step, ever.
  • Attributes its writes to itself, not to a person. Comments and audit entries are recorded against service:<key-prefix> under the key's name, so the trail stays intact without a human in the loop.
  • Is still bound by RBAC. The key's orgRole decides what it may do. A service key with Viewer still cannot comment on a task. Exempting the identity step does not grant extra privilege — grant the least role the runner needs (usually Auditor).
Use service keys only for machines

Because a service key writes without ever binding to a person, treat it like a service-account credential: scope it to one organization, give it the lowest role that works, store it in a secrets vault, and rotate it. For anything a human drives, use a normal user key so writes are attributed to that human.

Setup: Claude Desktop

Claude Desktop supports two ways to add MCP servers: a built-in UI and manual config file editing. Both work - use whichever you prefer.

Option A: Connectors UI (recommended)

Open Customize → Connectors

In Claude Desktop, click Customize (or the profile/settings icon) and select Connectors. This is the same flow as claude.ai.

Add a custom integration

Click Add custom integration and enter:

FieldValue
Integration nameTATER
Integration URLhttps://api.tatersecurity.com/api/mcp?mode=lazy&org_id=org-xxxxxxxx

No API key in the URL. Claude will prompt you to sign in with Microsoft the first time you use the connector, and every action you take is attributed to you. Keep org_id — see why.

Sign in when prompted

Claude opens a Microsoft sign-in window. Sign in with the same work account you use for TATER and accept the consent prompt (once per person).

Test the connection

Start a new conversation and ask: "What is my current compliance score?" Then ask "who am I in TATER?" — get_org_context should report your own name, not a key's.

Option B: Config file (advanced)

For local stdio mode (runs a Node.js process on your machine, no inbound ports required), edit the config file directly:

Locate the config file

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Add the TATER server entry

Point args at the build/index.js produced by the build step above. Use the full path, and on Windows escape each backslash (\\) as JSON requires.

{
  "mcpServers": {
    "tater": {
      "command": "node",
      "args": ["C:\\path\\to\\tater-mcp\\build\\index.js"],
      "env": {
        "TATER_API_BASE": "https://api.tatersecurity.com",
        "TATER_API_KEY": "your-api-key-here",
        "TATER_ORG_ID": "org-xxxxxxxx"
      }
    }
  }
}

Do not use npx for this server. TATER does not currently publish the MCP server to the public npm registry, so an npx -y <name> command would install and run whatever some other party had published under that name, with your TATER_API_KEY in its environment. Install it from the source you build yourself, as above.

Restart Claude Desktop

Fully quit and relaunch Claude Desktop so it starts the local server from the path in your config file.

Local development

TATER Security developers running the API locally should set TATER_API_BASE to http://localhost:7071. Customers always use https://api.tatersecurity.com - TATER is a managed SaaS service; self-hosted deployment is not currently offered.

Setup: claude.ai (Remote HTTP)

The HTTP transport lets claude.ai connect to the TATER MCP server over HTTPS without installing anything locally. Claude obtains a per-person OAuth token after Microsoft sign-in; the connection URL contains the organization ID but no credential.

Plan requirement

The Integrations section in claude.ai is available on Pro and Team plans. If you do not see it, check your subscription level at claude.ai/settings.

Open claude.ai Settings → Integrations

In claude.ai, click your avatar (bottom-left) and choose Settings. Select the Integrations tab.

Add a custom integration

Click Add custom integration. You will see two fields: Integration name and Integration URL. Enter:

FieldValue
Integration name TATER
Integration URL https://api.tatersecurity.com/api/mcp?mode=lazy&org_id=org-xxxxxxxx

Replace org-xxxxxxxx with your Organization ID (from Settings → Endpoint Agent → Agent Configuration Reference). Do not put an API key in this URL — see the callout below.

Click Add → then sign in with Microsoft

Click Add to save. The first time you enable TATER in a conversation, Claude opens a Microsoft sign-in window — sign in with the same work account you use for TATER and accept the consent prompt. This happens once per person.

Toggle the integration on in your conversation

In any claude.ai conversation, open the tool/integration panel and enable TATER. Once enabled, TATER tools are available for that conversation.

Test the connection

Ask: "What is my current compliance score in TATER?" Claude should call the TATER tools and return a summary of your organization's posture.

Do not put an API key in the connector URL

Earlier versions of this page showed an ?api_key= connector URL. Remove it. An API key in the URL takes precedence over your personal sign-in, so every action you take is recorded against whoever that key is bound to — not you. On a key shared across a team, that silently collapses the entire audit trail onto one person. The calls all succeed; they just succeed under the wrong name, which is why this is easy to miss.

If your connector URL still has api_key= in it, delete the connector, re-add it with the key stripped, and sign in with Microsoft when prompted. Verify with get_org_context — it should report your own name.

Why org_id stays in the URL

Unlike an API key, a sign-in carries no organization. The connector is a bare URL and cannot send custom headers, so ?org_id= is how the connection learns its default organization: the one every call runs in unless that call says otherwise. If you belong to more than one TATER organization and the URL has no org_id, the connection has no default, so a tool that needs an organization is refused with "No organization selected" (that is the current wording; earlier versions reported "User does not have required role" here). When the request carries your sign-in, that refusal also lists your organization ids, so the assistant can name one on its next call.

A signed-in connection can name another organization you belong to on any call. The assistant adds org_id (an organization id) to that one call, and TATER treats you, for that call, as if you had connected to that organization: your role, permission bundles, custom groups and the organization's MCP tool policies there apply, and nothing is carried over from the default organization. The result ends with a line saying which organization and role it ran as. You do not need a second connector for each organization; ask in plain words and, if the assistant needs an id, list_organizations shows the ones you belong to.

It grants nothing on its own: the org must still match a real membership of yours (or you must be SuperAdmin). An id you are not a member of, or an archived organization, is refused with the same message and nothing is run or written. An organization you can reach only through an MSP relationship, not a membership, is not available per call: put its id in the connector URL as before. get_org_context describes the connection's own organization and cannot be pointed at another one; use list_organizations for names. It is not a secret — unlike the API key it replaced.

What stays the same. API keys remain bound to the one organization they were created for: a call that names a different organization is refused. The local stdio server (tater-mcp) is unchanged, because it connects with an API key. And one connection does not always reach every organization: if the default organization in the URL has been archived or suspended, or you were removed from it, TATER refuses the connection before any tool runs, and a call naming a different organization cannot get that far either. See Troubleshooting.

Assistants are shown an optional org_id on each tool only when you belong to more than one organization (or are a platform SuperAdmin). If you belong to one, passing org_id anyway still works for that organization and is refused for any other.

Accepted risk: untrusted text can now point the assistant at your other organizations

Some text in TATER did not come from TATER or from you: ticket bodies that arrived by email, comments, form answers, vendor responses. Someone who can get text into one organization's tickets can write instructions in it aimed at the assistant. TATER fences that text and instructs the assistant to treat it as data, never as a request, but it cannot guarantee that an assistant is never persuaded.

Because a signed-in connection can now name another organization on a call, such hidden text could try to steer a session toward any organization you belong to, not only the one it was connected to. This is a residual risk we have accepted, and it is bounded: only organizations you are a member of, only at the role you hold in each, with that organization's tool policies, and with the result naming the organization and role it ran as (by id; the name is not shown). If a result names an organization you did not ask about, stop and check what the assistant was reading. Where a hard limit matters, use an API key (bound to one organization) for that automation, and have each organization's administrators restrict write tools with MCP tool policies.

Expect a genuine drop in privilege

A shared API key runs as its own principal, often with a higher role than the people using it. Under sign-in you run as yourself, so anything that quietly relied on the key's elevated role will start failing with a permissions error. That is the system working correctly — it is also an honest accounting of what those sessions were doing before. Fix it by granting the person the role they actually need, not by putting the key back.

How Claude Works: Default Behavior

When you connect to the TATER MCP server, Claude receives mandatory working instructions automatically at session start. These instructions define a consistent, audit-quality workflow - you do not need to prompt Claude to follow it once you've opted in.

Session Opt-In Gate

Not every conversation needs TATER

If your first message references a TATER concept (compliance, controls, scans, risks, audits, policies, POAM, RMF, vendors, etc.) Claude proceeds with the full workflow without asking. If your first message is generic (general coding, writing help, debugging unrelated code), Claude asks once:

“I have TATER connected for this session - should I bring it in (compliance posture, risks, controls, policies, network docs) or are you good without it?”

If you say no or change the subject, Claude enters TATER-quiet mode - no proactive tool calls, the 8-step workflow below does not apply, and the documentation patterns (Three-Doc Rule, Help-Desk Pattern, Questionnaire Auto-Fill, etc.) are paused. You can opt in any time by mentioning a TATER topic or asking Claude to use a specific tool.

Autonomous task runners and explicit compliance-persona agents (Copilot's TATER Compliance Analyst, scheduled MCP jobs) skip the opt-in question and go straight to the workflow.

The 8-Step Mandatory Workflow (in TATER mode)

Automatic - no prompting required once you're in TATER mode

These behaviors are built into every TATER MCP session once the user has opted in (or the first message clearly references TATER). Claude follows them without being asked.

# Step What Claude does
1 Risk Analysis First Before any action, Claude states the security risk clearly - what the finding represents, the risk of not remediating vs. accepting it, and cascading effects. Critical and High findings are flagged first.
2 Load Context Calls get_control_context before advising on any specific control. This loads existing internal comments, team threads, related framework narratives, and change history - so Claude builds on documented work rather than duplicating it.
3 Record Changes Calls create_change_request whenever a risk acceptance, remediation, or configuration change is made. High and Critical impact changes are automatically queued for OrgAdmin approval.
4 Share Findings After analysis, documents key findings: add_thread_post for team-wide decisions and updates (visible to everyone); add_evidence_comment for internal audit notes (admins/auditors only).
5 Collaboration Awareness Reviews existing comments and threads before adding new ones. References prior findings and builds on them rather than restating documented work.
6 Evidence Collection For Manual Review or unclear failing controls, collects and records evidence. If evidence cannot be derived automatically, asks you explicitly - specifying what is needed (e.g., a screenshot, a PowerShell output). Records results as an evidence comment or thread post.
7 Configuration Documentation Before advising on any configuration change, searches existing config docs via search_config_docs for prior decisions, known-good baselines, or approved deviations. After completing analysis or changes, creates or updates a config doc via upsert_config_doc - capturing current state, rationale, and links to controls, frameworks, and change requests for future reference.
8 Framework Narratives When working through a framework section, reads existing narratives via get_framework_narratives first. After completing section analysis, writes or updates the narrative via set_framework_narrative - professional, audit-ready statements that appear on the Standards detail page in TATER.

Available Tools (450+)

The TATER MCP server exposes 600+ tools to Claude across the categories below. The tables here highlight representative samples; the live, complete list is in api/src/functions/mcp.ts (HTTP MCP) and mirrored in tater-mcp/src/index.ts (stdio MCP).

TATER first, with lean instructions. The MCP tells the assistant to check search_records, TATER Help, ConfigDocs, and TATERpedia before using outside sources for organization-specific questions. Search hits include a record identity, direct TATER link, and the best available source-updated date so the assistant can cite where its answer came from and flag unknown freshness. Detailed domain workflows — meeting capture, questionnaire auto-fill, the federal/DoD ATO pipeline, ServiceNow ITSM, ITIL task profiles, endpoint management, TATERpedia authoring, framework narratives, the remediation loop, and the tool-sequencing cheat-sheet — load on demand via get_workflow_guide. This keeps each session prompt lean while the full guidance stays one tool call away.

Choose how much catalog the client loads. The default endpoint advertises a compact core and discovery tools. Add ?mode=full to advertise the complete catalog; existing ?mode=lazy URLs keep the compact view. Discovery keeps every authorized tool reachable. Domain endpoints work well for assistants dedicated to one area:

  • By domain — https://api.tatersecurity.com/api/mcp/{domain} (e.g. /api/mcp/grc, /api/mcp/vendor, /api/mcp/endpoint) advertises just that domain's tools plus a small always-on core. Domains: compliance, grc, vendor, itsm, endpoint, identity, knowledge, workplace, platform. The equivalent query form is ?domain=grc.
  • Default / lazy mode (recommended for general assistants) — https://api.tatersecurity.com/api/mcp?mode=lazy advertises a small core including search_records, find_tools, load_toolset, and invoke_tool. The assistant searches TATER records first, discovers the capability it needs, and invokes any authorized tool by name.
  • Full catalog — https://api.tatersecurity.com/api/mcp?mode=full advertises every tool and is appropriate when the client can efficiently index a large tool suite or when up-front visibility matters more than context size.

Every tool is callable by name regardless of which endpoint you connect to — the slim modes only change what's advertised up front, never what's reachable. find_tools works on the full endpoint too, so Claude can always search the catalog.

The Three-Doc Rule (mandatory pattern)

Every diagnostic / troubleshooting / remediation session your AI assistant runs MUST produce three durable artifacts before completion:

  1. Ops task via create_tasker_task or update_tasker_task - the lifecycle record (who reported, status, root cause, resolution)
  2. ConfigDoc via upsert_config_doc - this org's specific configuration state at conclusion
  3. TATERpedia wiki page via create_wiki_page or update_wiki_page - the generic playbook for the next session

All three cross-link. The same root cause never bites twice. Enforced via the MCP server's INSTRUCTIONS - agents that skip these get reminded by the next message.

Help-Desk Session Pattern

When triaging user-reported symptoms ("user can't…", "OneDrive is acting weird", "MFA prompt won't go away"), the agent follows a strict 4-step workflow:

  1. Search Ops first via list_tasker_tasks with requester email + symptom keywords - load existing task and continue, don't duplicate
  2. If no match, create_tasker_task immediately with the user's reported symptom verbatim
  3. Append findings throughout the session - don't overwrite the original description
  4. At resolution, populate root cause + bulk-link all touched entities (controls, ConfigDocs, wiki pages, change requests, risks, vendors, applications)

Questionnaire Auto-Fill Pattern

When asked to "fill out this vendor questionnaire" / "draft answers for the SIG" / "respond to this RFP security section", the agent follows this MCP-first workflow (TATER runs no internal LLM - your AI does all synthesis):

  1. list_questionnaires (filter: in-progress, not-started) - find the one to work on
  2. get_questionnaire - pull the question list and current drafts
  3. For each question:
    • search_questionnaire_kb FIRST - prior answers to similar questions are highest-signal. Inspect verificationStatus + lastVerifiedAt on each hit.
    • If verification is missing or >90 days old, call verify_kb_entry BEFORE reusing.
    • Fall back to search_config_docs, search_wiki, get_control_info, list_policies, get_compliance_summary for fresh context.
    • draft_questionnaire_answer - writes the draft, always sets status to in-progress (humans approve complete). Cite ConfigDoc ids, wiki slugs, control IDs verbatim.
  4. update_questionnaire_status when all drafted (submitted is rejected - requires explicit human sign-off via full upsert).

Ingestion sub-pattern: when a user uploads historical questionnaires (PDF / DOCX / XLSX), the agent reads the file using its own file-read capability and bulk-imports Q&A pairs via import_questionnaire_kb. TATER does no server-side file parsing.

KB answer verification

Prior answers go stale. The agent calls verify_kb_entry to cross-check each KB hit against current state: re-fetches the latest scan and verifies each mappedControl is still passing, checks whether cited ConfigDocs have been updated since the answer was written, flags entries over 1 year old with no verifiable evidence. Writes verificationStatus back to the entry so subsequent searches surface staleness at a glance.

Verification statuses: current (safe to reuse) · stale-evidence (mapped controls now failing - do NOT reuse as-is) · stale-doc (cited config docs updated since answer) · stale-age (>1 year old) · unverifiable (no evidence to check against).

Tool categories (with sample tool names)

CategorySample toolsApproximate count
Compliance readslist_scans, get_failing_controls, get_control_info, get_all_controls_with_status, search_catalog, get_compliance_summary, list_overrides, get_control_context, get_control_grc_context~15
Service Cataloglist_service_catalog, get_catalog_item, submit_catalog_request3
CMDBlist_cis, get_ci, create_ci, relate_cis, get_ci_impact, discover_cis6
Major Incidentlist_active_major_incidents, declare_major_incident, post_major_incident_update, subscribe_major_incident, resolve_major_incident5
Service Portfoliolist_service_portfolio, get_service_health, add_service_members3
CAB workflowlist_cab_boards, create_cab_board, submit_change_to_cab, cab_vote, get_cab_queue, get_change_calendar6
Release Managementlist_releases, get_release, create_release, transition_release_status, append_release_log5
Help Documentationlist_help_docs, get_help_doc, search_help_docs - browse and search the 60+ articles at www.tatersecurity.com/Docs/Help/ (same content humans see)3
Knowledge Baseget_wiki_page, search_wiki, create_wiki_page, update_wiki_page, rate_wiki_page, suggest_wiki_pages, validate_wiki_content7
Questionnaire pipelinelist_questionnaires, get_questionnaire, draft_questionnaire_answer, update_questionnaire_status, import_questionnaire_kb, search_questionnaire_kb, verify_kb_entry7
Federal pipelinelist_poams, create_poam, auto_populate_poam (RMF + SSP via dedicated endpoints)3+
Ops tasks + workflowslist_tasker_tasks, create_tasker_task, update_tasker_task, plus profiles + workflows + schedules~10
Risk + GRC writescreate_risk_acceptance, create_risk, update_risk, create_change_request, verify_manual_control, add_evidence_comment, assign_control, trigger_remediation~11
Fleet / Help-Desk Triagefind_device_by_user, list_onedrive_issues, list_agent_diagnostics, get_device_diagnostics, execute_script - map a user complaint to their hostname, surface OneDrive sync problems, then run targeted ops scripts5
Application Monitoringlist_monitoring_findings, get_monitoring_summary, acknowledge_monitoring_finding, list_monitors, create_monitor, toggle_monitor - OneDrive / CISA KEV / templated agent-monitor findings as a continuously-updated state; create monitors and toggle them on/off6
Intune deploymentlist_intune_remediations, list_intune_platform_scripts, list_intune_groups, get_intune_assignments, create_intune_remediation, assign_intune_remediation, create_intune_platform_script, assign_intune_platform_script - create + assign Microsoft Intune Proactive Remediations and Platform Scripts via Graph, with What-If preview, Entra group targeting, change-control gating, and audit logging8
Endpoint Profileslist_endpoint_profiles, get_endpoint_profile, create_endpoint_profile, update_endpoint_profile, delete_endpoint_profile, evaluate_targeting, apply_endpoint_policy - author ScriptLogic / Desktop Authority-style endpoint configuration profiles (targeting rules + lifecycle triggers + typed elements), preview which devices/users a rule matches, and apply policy bundles to device groups7
Meeting documentationcreate_meeting_record, attach_meeting_transcript, append_meeting_decision, list_meeting_templates, list_business_docs, create_business_doc, etc.~14
Otheridentity_start/confirm/verify, list_community_stats, get_org_branding, list_recent_audit_log, list_bcpdr_plans, list_training_campaigns, list_vendors, list_audits, create_issue, get_subscription_status, get_calendar_events, opportunities (sales pipeline), config docs, framework narratives, implementation guides, playbooks, opps script library, opportunities, identity-confirm, etc.~60

For the canonical list, run grep -c "^\s*name: '" api/src/functions/mcp.ts against the live source.

Original tool tables follow for reference:

Reading Data

Tool What It Does
list_scans Retrieves recent compliance scans with summary statistics (pass rate, fail count, scan date).
get_failing_controls Returns control-by-control results for a scan, filterable by status (Fail, Pass, Manual, Skip, Override).
get_control_info Full catalog details for a control: what it checks, how to audit it, and exactly how to remediate it.
search_catalog Searches the compliance catalog by keyword to find relevant controls before diving into scan results.
get_compliance_summary High-level compliance posture from the most recent scan, optionally filtered by application.
get_scan_source_health Freshness of each scan source (cloud, endpoint) as fresh / aging / stale / never. Ask for this when compliance data looks old or gray to tell “the scan is overdue” apart from “a connector or permission is missing.”

Context & Collaboration

Tool What It Does
get_control_context Loads all existing context for a control: internal comments, team threads (with replies), related framework section narratives, and change history. Called automatically before any control-specific action.
get_framework_narratives Reads the organization's existing compliance narrative statements for a standard or framework section.
search_config_docs Searches configuration documentation by keyword, category, application, or linked control ID. Returns matching docs with content previews so Claude can find prior decisions and baselines before advising on changes.
list_overrides Lists existing risk acceptances so Claude can check for duplicates before creating new ones.
list_people Lists team members available for control assignment (name, email, role).
list_pending_changes Lists change control requests - pending approvals or recent change history for any control.

Writing & Acting

Tool Who Can See It What It Does
create_risk_acceptance Admin required Creates a new override record with business justification, expiry date, and approval metadata. Tagged source: mcp in the audit log.
add_evidence_comment Internal only (admins & auditors) Adds an auditable evidence note to a specific control - technical observations, configuration state, audit artifacts.
add_thread_post All collaborators Posts a finding or update to a control's team-wide conversation thread. Use for decisions, status updates, and action items the whole team should see.
assign_control All users Assigns a control to a team member with a due date and optional notes.
create_change_request All users Logs a planned or completed configuration change. Low/Medium impact changes auto-approve; High/Critical are queued for OrgAdmin approval.
set_framework_narrative All users - Standards page Writes or updates the organization's compliance narrative for a specific framework section. Appears directly on the Standards detail page in TATER.
upsert_config_doc All users - Config Documentation page Creates or updates a configuration documentation record. Supports links to controls, frameworks, and change requests. Automatically versions content on update so prior states are preserved.
Full Tool List

The table above covers the core tools. The TATER MCP server exposes 600+ tools in total. The complete current list is always available in the TATER platform under AI Analyst or via the MCP server's tool manifest. Additional tools include verify_manual_control, get_all_controls_with_status, get_control_grc_context, list_exceptions, list_risks, list_remediations, get_policy_detail, get_policy_sign_status, list_policies, list_community_stats, get_evidence_job_status, approve_policy, update_policy_draft, create_issue, create_policy, trigger_remediation, verify_identity, get_policy_context, update_policy_metadata, get_config_doc, list_tasker_tasks, create_tasker_task, update_tasker_task, plus the federal/DoD pipeline tools list_poams, create_poam, auto_populate_poam, and the Ops Script Library tools list_scripts, get_script, create_script, update_script, execute_script, get_script_job_status, list_script_jobs.

Example Conversations

Reviewing failing controls

You: What are the top failing controls from my most recent scan?

Claude: I'll check your latest scan results now.
[calls list_scans, then get_failing_controls with status=Fail]

⚠ Risk Summary: Your most recent scan from April 3rd shows 24 failing controls.
The top 5 by severity are:

1. EXO - DMARC Policy Enforced (High) - No DMARC record found for your domain
2. DEF - Safe Links Policy (High) - URL rewriting is disabled
3. ENT - Idle Session Timeout (Medium) - No timeout configured
4. SPO - External Sharing Restricted (Medium) - Sharing set to Anyone
5. EXO - External Forwarding Blocked (Medium) - Auto-forward rules permitted

The two High severity findings represent active phishing risk - DMARC absence
means attackers can spoof your domain, and disabled Safe Links means malicious
URLs are not inspected in email.

Would you like me to work through these? I'll load context on each control
before taking any action.

Working a specific control end-to-end

You: Let's handle the DMARC control.

Claude: [calls get_control_context for EXO_DMARC_Control]

Context loaded. I can see:
- No prior team notes or threads for this control
- No existing risk acceptance
- No change history

This is a first-time review. Here's the risk:
DMARC absence means anyone can send email that appears to be from your domain.
This enables phishing, brand spoofing, and BEC (Business Email Compromise) attacks.
The risk of not fixing this is High - I'd recommend remediation over acceptance.

How would you like to proceed?

You: We have a marketing tool that blocks DMARC enforcement. Accept the risk,
90-day expiry, and note the compensating control is SPF + DKIM alignment.

Claude: [calls create_risk_acceptance with audit-quality justification]
[calls create_change_request with impact=Medium]
[calls add_thread_post to notify the team]

Done:
- Risk acceptance created (expires July 5, 2026)
- Change logged in change control (auto-approved, Medium impact)
- Thread post added so the team can see the decision rationale

Creating a risk acceptance

You: Create a risk acceptance for the SMTP AUTH control. Legacy application
dependency. Expiry in 90 days.

Claude: [calls get_control_context - checks for existing overrides and team notes]

No prior risk acceptance found. Here is the security risk:
SMTP AUTH allows clients to authenticate with username/password instead of
modern OAuth flows, bypassing MFA. This is a known credential-stuffing vector.

Risk acceptance details:
- Control: EXO - SMTP AUTH
- Justification: Legacy application dependency requiring basic auth; MFA bypass
  mitigated by conditional access IP restriction to application server range
- Expiry: 90 days from today (July 5, 2026)
- Impact: Medium

Shall I proceed?

You: Yes

Claude: [calls create_risk_acceptance]
[calls create_change_request]
[calls add_thread_post]

Done. Risk acceptance, change log, and team thread all created.

Writing framework narratives

You: Review our CIS Section 1 (identity/authentication) posture and write
the framework narrative for it.

Claude: [calls get_framework_narratives for CIS_M365_v3 section 1]
[calls get_compliance_summary filtered to Entra ID]
[calls get_failing_controls filtered to ENT controls]

I found an existing narrative for section 1.1 from March. Here's what's
documented and what's changed since then...

[Reviews failing controls, existing risk acceptances, and team notes]

Ready to write narratives for sections 1.1–1.8. Here's a draft for 1.1:

"The organization enforces MFA for all users via Conditional Access policy
CA-001 (All Users – Require MFA). Legacy authentication protocols are blocked
at the tenant level (ENT_001 - Pass). One risk acceptance is active for SMTP
AUTH due to a legacy application dependency, expiring July 5, 2026, with
compensating controls in place (IP restriction via CA-014)."

[calls set_framework_narrative for CIS_M365_v3 section 1.1]

Section 1.1 narrative saved. Continue with 1.2 through 1.8?

Using configuration documentation

You: I just disabled SMTP AUTH on the tenant and restricted legacy auth
via Conditional Access. Document this for the team.

Claude: [calls search_config_docs for "SMTP AUTH" and "legacy auth"]

Found 1 existing doc: "Exchange Online Authentication Baseline" from 6 months
ago - notes that SMTP AUTH was enabled for a legacy application.

That application is no longer referenced in recent change requests or comments.
Here's the updated configuration state I'll document:

- SMTP AUTH: Disabled tenant-wide (EXO_028 now passing)
- Legacy auth: Blocked via CA-009 (Entra ID Conditional Access)
- Previous exception: Retired - legacy app dependency resolved

[calls upsert_config_doc, updating the existing Exchange Online auth doc]
[calls create_change_request with impact=High - queued for OrgAdmin approval]
[calls add_thread_post on EXO_028 for team visibility]

Done. The config doc is updated with the current state and links to the
change request. OrgAdmin approval needed for the change log (High impact).

Assigning controls to team members

You: Assign the top 5 failing Entra ID controls to Sarah and set a
due date of two weeks from today.

Claude: [calls get_failing_controls filtered to ENT prefix]
[calls list_people]

Found Sarah Chen in your team contacts - notes indicate she handles
Entra ID and identity policies.

Assigning 5 controls to Sarah with due date April 22, 2026:
[calls assign_control × 5]
[calls add_thread_post on each control so the team sees the assignment]

Done. Assignments visible in Assignments and on Sarah's "My Assignments" view.

Permissions and Safety

The MCP integration follows TATER's role-based access control:

Action Minimum Role Required
Read scan results, overrides, people, change requests Auditor
Create risk acceptances Admin (OrgAdmin)
Create evidence comments, thread posts Auditor
Assign controls, log change requests, write framework narratives Auditor
Search and create/update configuration documentation Auditor
Approve High/Critical change requests Admin (OrgAdmin)
Delete records Not available via MCP - use the TATER web application

Claude's built-in safety rules apply at all times. The MCP server does not expose destructive operations (delete, bulk overwrite). All actions taken via MCP are recorded in the TATER audit log with source: mcp for traceability.

Claude confirms before significant actions

For actions like creating risk acceptances for High/Critical controls or logging High/Critical impact change requests, Claude's built-in workflow instructs it to state the risk and confirm details before proceeding. You are always in control.

Change control approval

Change requests created by Claude for High or Critical user-impact changes are automatically placed in Pending status and require OrgAdmin approval in TATER before they are considered accepted. Low and Medium impact changes are auto-approved and appear in the change log immediately.

Troubleshooting

Codex connects, but the task shows no TATER tools

Use the lazy OAuth URL (https://api.tatersecurity.com/api/mcp?mode=lazy&org_id=org-xxxxxxxx), then start a fresh Codex task or restart the extension so Codex rebuilds its initial tool catalog. Remove or disable older duplicate TATER registrations, especially legacy npx mcp-remote API-key entries. Codex gives optional MCP servers a short startup grace; if a locally configured connection is still omitted intermittently, set top-level mcp_optional_startup_grace_ms = 5000 in ~/.codex/config.toml. Authentication to the TATER website is separate from the MCP OAuth session, so an open Ops page does not establish that the task loaded MCP tools.

Claude Desktop shows no TATER tools

Ensure Claude Desktop was fully restarted after editing claude_desktop_config.json. Check that npx is in your PATH by running npx --version in a terminal. Verify your API key and org ID are correct in the config. Check Claude Desktop's MCP logs (Settings → Developer → MCP Logs) for error details.

"Unauthorized" error when calling tools

Your API key may be invalid or expired. Go to Manage → Connections → API Keys in TATER, delete the old key, and generate a new one. Update your MCP config with the new key and restart Claude Desktop.

"Organization not found" error

Verify the TATER_ORG_ID value in your config matches your organization ID exactly (format: org-xxxxxxxx). You can find your org ID in Settings → Endpoint Agent, in the Agent Configuration Reference section at the bottom of that page.

Every call is refused, even for an organization I belong to

TATER checks the connection's default organization (the org_id in the connector URL) before any tool runs. If that organization has been archived or suspended, or you were removed from it, the whole connection is refused, and a call that names a different organization cannot get that far either. Edit the connector URL: change org_id to an organization you still belong to, or remove it. With no org_id and more than one organization, the assistant names one on each call.

A call that names another organization was refused

A refusal says the tool was not run (or the argument was not applied) and no data was returned. "Organization not available" means you are not a member of that organization, or it cannot be used (the two read the same on purpose), or its subscription is suspended or cancelled. "Organization could not be checked" means this request carried no sign-in token or your access could not be verified just now: retry, or leave org_id out to use the connection's own organization. "Organization mismatch" means the connection is an API key, which stays bound to one organization; reconnect with a binding for the other one. "Organization argument not valid" or "Organization conflict" means the id was blank, too long or not a string, or two different ids were given on one call.

A refused per-call organization is not written to any organization's Activity Log, because it would land in the log of the organization that was named, which that organization's auditors read. A write that does run is logged in the organization it ran in.

npx fails to download the package

Check your network connection and proxy settings. If you are behind a corporate proxy, set the HTTP_PROXY and HTTPS_PROXY environment variables in the MCP server's env block. If the server still does not start, confirm that build/index.js exists at the path in your args — re-run npm run build in the tater-mcp directory if it does not.

Next Steps

  1. Review the Settings Reference to learn about API key scopes and permissions
  2. Explore the Dashboard Guide to understand the data Claude is reading
  3. Set up Azure Runbooks so Claude always has fresh scan data to work with
  4. Learn about Running Scans to keep your compliance data current
  5. Open the Standards page in TATER to review framework narratives Claude has written
  6. Check Change Control in the GRC section for any High/Critical changes awaiting OrgAdmin approval