> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to the Revealed AI MCP server

The Revealed AI MCP connector routes your AI agent's tool calls to Revealed AI's own MCP server through Scalekit. Each user signs in to Revealed AI once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 13 tools.

**Authentication:** OAuth 2.1/DCR
**Categories:** CRM & Sales, Analytics, AI
**Tools:** 13: 13 read, 0 write, 0 destructive
**Users sign in with:** OAuth
**OAuth app:** Scalekit's or your own
**Built by:** Vendor MCP
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=REVEALEDAIMCP)

## What you can do

- **Review accounts**: list accounts and pull full snapshots or compact briefs with company signals and summaries
- **Track buying signals**: see recent changes, person changes, and signal events since the last snapshot
- **Research people**: list people and buyer personas at an account and open their full profiles
- **Get next best actions**: retrieve ranked outreach actions with target, rationale, and a draft message

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Revealed AI MCP connection

   In **AgentKit > Connections**, create a Revealed AI MCP connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

   Scalekit credentials are available for Revealed AI MCP server, so you don't need to register an OAuth app.

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'revealedaimcp'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Revealed AI MCP:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'revealedaimcp_list_accounts',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "revealedaimcp"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Revealed AI MCP:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="revealedaimcp_list_accounts",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user signs in once. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'revealedaimcp_get_account',
  toolInput: {
    account_id: '<account_id>',
  },
  connector: 'revealedaimcp',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="revealedaimcp_get_account",
    tool_input={
        "account_id": "<account_id>",
    },
    connection_name="revealedaimcp",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `revealedaimcp_get_account`

Get Account · Read-only

Retrieve the full account snapshot including company signals, people, summaries, and metadata. Use Get Account Brief for lightweight overviews when scanning many accounts.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `account_id` (`string`, required): Account UUID from list_accounts. Obtain by calling List Accounts first.

Example input: `{"account_id":"<account_id>"}`

### `revealedaimcp_get_account_brief`

Get Account Brief · Read-only

Retrieve a compact account overview from the latest snapshot including change summary, signal counts, and top signals by impact.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `account_id` (`string`, required): Account UUID from list_accounts. Obtain by calling List Accounts first.

Example input: `{"account_id":"<account_id>"}`

### `revealedaimcp_get_company_signal`

Get Company Signal · Read-only

Retrieve all snapshot rows for a specific company signal by its data element slug. Use List Tracked Signals to discover available signal slugs.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `account_id` (`string`, required): Account UUID from list_accounts. Obtain by calling List Accounts first.
- `signal_slug` (`string`, required): Data element slug for the company signal. Obtain from List Tracked Signals.

Example input: `{"account_id":"<account_id>","signal_slug":"<signal_slug>"}`

### `revealedaimcp_get_person`

Get Person · Read-only

Retrieve the full person record from the latest snapshot. Provide exactly one of persona (slug), name (full name), or person_id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `account_id` (`string`, required): Account UUID from list_accounts. Obtain by calling List Accounts first.
- `name` (`string`, optional): Person's full name as shown in List People. Merges all persona rows for that person. Mutually exclusive with persona.
- `person_id` (`string`, optional): Deprecated alias for persona slug. Use persona or name instead.
- `persona` (`string`, optional): Persona slug (e.g. chief-nursing-officer). Obtain from List Personas or List People.

Example input: `{"account_id":"<account_id>"}`

### `revealedaimcp_list_accounts`

List Accounts · Read-only

List accounts in the workspace with lifecycle status and last reviewed date. Call this first to obtain account IDs required by all other account-scoped tools.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`integer`, optional): Maximum number of items to return. Default: `50`.
- `query` (`string`, optional): Case-insensitive substring to filter account names.
- `status` (`string`, optional): Lifecycle status filter. Accepted values: active, paused, all. Default: `active`.

Example input: `{}`

### `revealedaimcp_list_people`

List People · Read-only

List people at an account from the latest snapshot, deduplicated by name. Optionally filter by persona slug substring or change type.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `account_id` (`string`, required): Account UUID from list_accounts. Obtain by calling List Accounts first.
- `change_type` (`string`, optional): Filter people by their latest change type. Accepted values: new, departed, role_change, any. Default: `any`.
- `limit` (`integer`, optional): Maximum number of items to return. Default: `50`.
- `persona` (`string`, optional): Persona slug (e.g. chief-nursing-officer). Obtain from List Personas or List People.

Example input: `{"account_id":"<account_id>"}`

### `revealedaimcp_list_personas`

List Personas · Read-only

List buyer persona slugs present in an account snapshot with counts and human-readable names. Use slugs with Get Person.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `account_id` (`string`, required): Account UUID from list_accounts. Obtain by calling List Accounts first.

Example input: `{"account_id":"<account_id>"}`

### `revealedaimcp_list_tracked_signals`

List Tracked Signals · Read-only

List persona slugs, people signal slugs, and company signal slugs configured for this workspace. Use these slugs with Get Person and Get Company Signal.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `revealedaimcp_mcp_status`

Mcp Status · Read-only

Check MCP connectivity and return workspace name, OAuth client ID, and granted token scopes. Call after connecting to verify the session.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `revealedaimcp_plan_usage`

Plan Usage · Read-only

Retrieve billing plan limits and current account usage counts for the workspace. Requires admin:read scope.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `revealedaimcp_recent_changes`

Recent Changes · Read-only

Retrieve what changed since the last finalized snapshot: change summary, person changes, and signal events. Use for meeting prep and what-is-new questions.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `account_id` (`string`, required): Account UUID from list_accounts. Obtain by calling List Accounts first.
- `limit` (`integer`, optional): Maximum number of items to return. Default: `20`.
- `since` (`string`, optional): Reserved for future time filtering. Currently unused.

Example input: `{"account_id":"<account_id>"}`

### `revealedaimcp_recommended_actions`

Recommended Actions · Read-only

Retrieve outreach-oriented actions derived from person changes and signal events, including target, rationale, and a draft message.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `account_id` (`string`, required): Account UUID from list_accounts. Obtain by calling List Accounts first.
- `limit` (`integer`, optional): Maximum number of items to return. Default: `10`.
- `person_id` (`string`, optional): Deprecated alias for persona slug. Use persona or name instead.
- `persona` (`string`, optional): Persona slug (e.g. chief-nursing-officer). Obtain from List Personas or List People.

Example input: `{"account_id":"<account_id>"}`

### `revealedaimcp_top_actions`

Top Actions · Read-only

Retrieve ranked recommended actions across all active accounts in the workspace. Use when the user asks for next steps without specifying an account.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`integer`, optional): Maximum number of items to return. Default: `15`.

Example input: `{}`

## Related

Other CRM & Sales connectors ([all 64](/agentkit/connectors/?category=crm-sales)):

- [HubSpot](/agentkit/connectors/hubspot/): Scalekit connector, OAuth, 457 tools
- [Salesforce](/agentkit/connectors/salesforce/): Scalekit connector, OAuth, 74 tools
- [Close](/agentkit/connectors/close/): Scalekit connector, OAuth, 103 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
