> ## Documentation Index
> Fetch the complete documentation index at: https://docs.linkedcamp.com/llms.txt
> Use this file to discover all available pages before exploring further.

# MCP for agencies

> Reach every sub-account you own from one assistant, with one owner key.

An agency owner connects once and the assistant can then read any sub-account in
that agency. There is no separate key per client and no signing in and out.

Two things make that work: a tool that lists your accounts, and seven tools that
accept one of those ids.

## 1. Get the roster

[`subaccount_list`](/mcp/tools/subaccounts#subaccount_list) returns your active
sub-accounts — id, name, email, plan and state. Owner-only; any other role is
refused.

An account is listed when it is enabled and on a plan. Disabled, deleted and
not-yet-subscribed accounts are left out, and the response says how many were.

## 2. Name the account

Seven tools take a `userId`. Pass one and they answer for that sub-account
instead of yours:

| Tool | Kind | What you get for that client |
| - | - | - |
| [`campaign_list`](/mcp/tools/campaigns#campaign_list) | Read-only | their campaigns and statuses |
| [`linkedin_account_list`](/mcp/tools/accounts#linkedin_account_list) | Read-only | their LinkedIn accounts and session health |
| [`email_account_list`](/mcp/tools/accounts#email_account_list) | Read-only | their connected mailboxes |
| [`analytics_campaign`](/mcp/tools/analytics#analytics_campaign) | Read-only | campaign performance |
| [`analytics_reporting`](/mcp/tools/analytics#analytics_reporting) | Read-only | the day-by-day series |
| [`tag_list`](/mcp/tools/library#tag_list) | Read-only | reply tags and sentiment buckets |
| [`agent_duplicate`](/mcp/tools/agents#agent_duplicate) | **Write** | copies an agent you built **into** that account |

`agent_duplicate` is the only one that writes across accounts. It creates an
agent inside the client's account, so name the client and get a yes first.

> [!NOTE]
>
> Take the id from `subaccount_list`. Never construct or guess one — a wrong id
> does not fail quietly, it names a different account.

## Records by id

Beyond those seven, any tool that takes a record id — `campaignId`, `leadId`,
`conversationId`, `linkedAccountId` — also works on a sub-account's records once
you have the id. That includes writes such as
[`campaign_update`](/mcp/tools/campaigns#campaign_update) and
[`flow_set`](/mcp/tools/flows#flow_set), so an id is effectively full access to
that record.

## What is enforced, and where

Scoping is applied by the server, not hidden in an interface. Rephrasing a
request does not widen it.

* `userId` is accepted **only** from an agency owner key.
* It is accepted **only** for an account inside your own agency. An id from
  outside your roster is refused with an error naming
  [`subaccount_list`](/mcp/tools/subaccounts#subaccount_list).
* The sub-account list itself is scoped by the server to your own agency tree,
  and excludes you.
* A record reached by id is checked against the accounts you own before it is
  read or written.

Client accounts keep their own keys for their own assistants. Connecting your
agency key changes nothing about what a client can see.

## Worth asking for

Because one key reaches the whole roster, the useful questions are the ones that
span clients:

* "Which client campaigns had the worst reply rate this week?"
* "Any LinkedIn sessions expired across my accounts?"
* "Which clients have no active campaigns right now?"
* "Copy my qualifier agent into the Acme account."

The assistant will need to call `subaccount_list` first to know who it is
comparing. Ask it to tell you which account each number belongs to — the tools
return data per account, not a labelled roll-up.

> [!NOTE]
>
> On the [ChatGPT plugin](/mcp/chatgpt-plugin) this needs release **1.2.8** or
> later. Earlier releases ship a skill that predates `subaccount_list`, so
> ChatGPT does not know to ask for the roster first.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.