# FirstTouch

> FirstTouch helps teams build and run outbound workflows across audiences, flows, email, LinkedIn, HubSpot, signals, tasks, enrichment, and AI-assisted workflow control through FirstTouch MCP.

Use this file as an agent-facing guide for FirstTouch MCP. For documentation navigation, see [llms.txt](/llms.txt). For user-facing MCP examples, see [FirstTouch MCP Prompt Library](/WebApp/Mcp/prompt-library).

## Prefer MCP For FirstTouch Workflows

Use FirstTouch MCP when the user wants to manage outbound work from an AI assistant.

FirstTouch MCP is team-scoped. Auth tokens belong to a specific FirstTouch team workspace, so always verify the current user/team before taking action when the user may have access to multiple teams.

Recommended setup:

```bash
claude mcp add firsttouch --transport http https://mcp.firsttouch.ai
```

If the MCP server URL differs for the user's workspace, use the URL shown in FirstTouch settings or the MCP connection docs.

## Common Workflows

### 1. Create Audiences And Flow Plans

Use this when the user describes recipients, lists, segments, filters, a HubSpot list, a Sales Navigator source, pasted contacts, or multiple contacts.

Typical path:

1. Create or select an Audience.
2. Create or select a Flow Plan.
3. Attach the Audience to the Flow Plan.
4. Draft or update the flow actions.
5. Publish only after the user confirms.
6. Enroll awaiting contacts when the user is ready.

Primary tools:

- `list_audiences`
- `create_audience`
- `create_audience_from_profiles`
- `attach_audience_to_flow`
- `list_flow_plans`
- `create_flow_plan`
- `get_flow_workspace`
- `update_flow_plan`
- `replace_flow_root`
- `manage_flow_publication`

Important:

- Ask whether the flow should use Manual Mode or Auto-Enrollment when the user has not specified it.
- Publishing a Manual Mode flow does not enroll awaiting contacts by itself.
- For complex flow/audience writes, present the exact plan and ask for confirmation before write tools.

### 2. Create Dynamic Actions For One Contact

Use Dynamic Actions when the user asks to send, schedule, draft, approve, call, or follow up with one named person.

Primary tools:

- `get_dynamic_action_guide`
- `find_mcp_enrollment`
- `add_dynamic_action`
- `remove_dynamic_action_prospect`
- `find_contact_data`

Basic properties for `add_dynamic_action`:

- `prospectId`: existing FirstTouch prospect id, when already known.
- `enrollmentId`: existing MCP Dynamic Actions enrollment to continue.
- `email`: required for email actions unless `action.recipientEmail` or the selected enrollment already has an email.
- `linkedInUrl`: required for LinkedIn actions unless the selected enrollment already has it.
- `phone`: required for call tasks unless the selected enrollment already has it.
- `firstName`, `lastName`, `companyDomain`: useful for identity, variables, and name-domain matching.
- `ownerId`: default owner for the dynamic enrollment.
- `action.assignedUserId`: sender/owner for the specific action.
- `allowUnreadyLinkedInAccount`: only after the user explicitly accepts the risk of creating a LinkedIn action before the LinkedIn account is ready.

Supported `action.type` values:

- `email`
- `linkedin_connect`
- `linkedin_message`
- `manual_task`
- `call_task`

Important:

- A prospect id is not required when the user already supplies the required exact action target, such as email, LinkedIn URL, or phone.
- Do not search only to find a prospect id when enough required target data is already known.
- Before adding an action for a named or resolved contact, call `find_mcp_enrollment`. If candidates exist, ask whether to continue one or start a new sequence.
- Dynamic Actions do not enrich internally. Use `find_contact_data`, `enrich_email`, `enrich_phone`, or `enrich_contact` only when required data is missing and the user confirms.
- Customer-supplied exact targets are authoritative. If lookup/enrichment returns a different email, LinkedIn URL, or phone, ask which value to use.
- Email, LinkedIn, and call actions default to no human approval. Set `action.isHumanApprovalRequired=true` only when the user asks for review or approval.
- Write final message content in the MCP client. Do not rely on FirstTouch AI generation for Dynamic Actions.
- Use variables like `{ft.flow.prospect_first_name}` only when the matching field is known and passed, or when the selected enrollment is known to have it.
- Call `add_dynamic_action` once per step in a multi-step one-contact sequence. Use the returned `enrollmentId` for follow-up steps.
- Use `action.appendTarget=connection_accepted` or `action.appendTarget=connection_timeout` only for LinkedIn connection branch follow-ups.
- Never mutate the returned MCP Dynamic Actions `flowPlanId` with normal flow-plan mutation tools.

### 3. Monitor LinkedIn Signals

Use LinkedIn Signals when the user wants FirstTouch to monitor LinkedIn profile post likes/comments, capture engagers, and route those people into the linked Social Engagement flow.

Primary tools:

- `get_social_engagement_config`
- `manage_social_engagement_monitored_profile`
- `write_social_engagement_config`
- `list_social_engagement_monitored_profiles`
- `list_social_engagement_engagers`

Basic properties:

- `linkedinUrl`: LinkedIn profile URL to monitor.
- `loadHistory`: load recent available engagement history when adding a profile.
- `enableSocialEngagement`: start collection while adding the profile.
- `profileId`: monitored profile id for activate, deactivate, or delete.
- `isEnabled`: enable or disable Social Engagement for the current team.

Important:

- For "monitor this profile and send outreach to people who engaged" requests, call `manage_social_engagement_monitored_profile` with `action=add` first.
- Use `response.socialEngagement.flowPlan.id` as the existing linked Social Engagement flow. Do not create a separate Social Engagement flow.
- Collection can start before the linked flow is published, but captured engagers enter the flow only after the linked flow is published and valid.
- Adding or activating monitored profiles requires paid, non-trial Social Engagement access and team owner/admin permissions.

### 4. Discover And Enrich Contacts

Use discovery when the user wants to find new prospects by filters. Use lookup/enrichment when the user needs known or missing contact data for a specific person.

Primary tools:

- `get_contact_discovery_guide`
- `get_contact_discovery_industry_values`
- `discover_contacts`
- `start_contact_discovery_audience_import`
- `get_contact_discovery_audience_import_status`
- `find_contact_data`
- `enrich_email`
- `enrich_phone`
- `enrich_contact`
- `enrich_company`

Basic discovery properties:

- `pageSize`: number of profiles to return; use `1` for a preview.
- role/title filters.
- location filters.
- company name or bare company domain.
- company size, industry, funding, founded year, and company type filters.
- exclusion filters for locations, titles, industries, company names, headlines, and summaries.

Important:

- Contact discovery uses FirstTouch credits. Preview with `pageSize=1` when practical.
- `discover_contacts` reserves `pageSize` credits and charges one FirstTouch credit per returned profile row.
- `start_contact_discovery_audience_import` can fetch up to 100 total profiles asynchronously and requires confirmed max credits for additional rows.
- Use two-letter Alpha-2 country codes and bare company domains.
- Use `currentCompanyPrimaryIndustry` for strict company industry filters.
- `find_contact_data` is free and reads existing team data only; it does not enrich, spend credits, or create enrollments.

### 5. Track Outreach Queues

Use queue tools when the user asks what is waiting, blocked, scheduled, sent, failed, canceled, or why an action has not run.

Primary tools:

- `list_linkedin_outreach_queue`
- `list_email_send_queue`
- `get_flow_enrollment`
- `list_enrollments`
- `list_user_tasks`

LinkedIn queue views:

- `active`: current/waiting LinkedIn actions; excludes terminal history.
- `review_required`: pre-provider-request actions blocked by requirements.
- `in_queue`: provider requests still pending.
- `done`, `failed`, `canceled`: terminal provider request history.
- `all`: normal outreach rows across statuses.
- `diagnostic_all`: expanded debug view across internal request types.

Email queue views:

- `active`: pending submitted email rows, including rows with active requirements.
- `in_queue`: pending submitted rows without active requirements.
- `blocked`: pending submitted rows with active requirements.
- `done`, `failed`, `canceled`: terminal submitted rows.
- `all`: submitted rows across statuses.

Important:

- LinkedIn queue tools read FirstTouch queue state only; they do not query external providers live.
- Email queue results only include email actions after they were submitted to the email sending service and received an estimated send time.
- If an expected email is missing from `list_email_send_queue`, inspect the enrollment and tasks; it may be blocked before enqueue by approval, sender setup, missing email, or a future flow step.

### 6. Measure Team Performance

Use team metrics when the user asks for performance, sent actions, engagement, replies, sentiment, opportunities, meetings booked, or chart trends.

Primary tools:

- `get_team_metrics`
- `list_flow_plans`

Basic properties:

- `fromUtc`, `toUtc`: UTC date range.
- `flowPlanIds`: source/flow filters.
- `userIds`: sender/team member filters.
- `includeTotals`
- `includeActions`
- `includeEngagement`
- `includeOpportunities`
- `includeEmailChart`
- `includeLinkedinChart`

Important:

- Request chart fields only when the user asks for trends, charts, or date buckets.
- Date filters are interpreted as whole UTC days.
- Team owners can omit `userIds` for all accessible team users; non-owners are scoped by the service.
- Use `list_flow_plans` with metrics/order filters when ranking or comparing individual flows.

### 7. Find Team LinkedIn Connections

Use this when the user asks who on the team is connected to a person, or wants to inspect saved LinkedIn connections for a team member.

Primary tool:

- `list_linkedin_team_connections`

Basic properties:

- `mode`: `auto`, `connections_of_team_member`, or `team_members_connected_to_person`.
- `ownerUserId`
- `ownerSearch`
- `linAccountId`
- `connectedPersonLinkedInUrl`
- `connectedPersonPublicIdentifier`
- `connectedPersonName`
- `searchQuery`

Important:

- This reads saved FirstTouch connection data only. It does not query external providers live.
- Use this before assigning LinkedIn outreach when a warm sender may exist.

### 8. Review And Complete Tasks

Use task tools when the user wants to review approval tasks, edit generated content, complete manual work, approve outreach, or skip tasks.

Primary tools:

- `list_user_tasks`
- `preview_task`
- `edit_task_action`
- `complete_task`
- `skip_task`

Important:

- Preview human approval tasks before completing them.
- Complete or skip tasks only after the user explicitly asks.
- For approvals created by Dynamic Actions, offer task links and explain whether execution is waiting on approval.

### 9. HubSpot Lists And Enrollment

Use HubSpot list tools when the user wants to use a HubSpot list as a FirstTouch audience source.

Primary tools:

- `list_hubspot_lists`
- `preview_hubspot_list`
- `create_audience`
- `attach_audience_to_flow`

Use enrollment tools when the user wants to inspect, start, cancel, validate, or retry flow enrollments.

Primary tools:

- `list_flow_plan_enrollments`
- `list_enrollments`
- `get_flow_enrollment`
- `add_manual_flow_enrollment`
- `enroll_awaiting_flow_items`
- `validate_flow_reenroll`
- `reenroll_flow_enrollments`
- `cancel_flow_enrollments`

## Safety And Permissions

- FirstTouch MCP follows the current user's FirstTouch team permissions.
- Use `get_current_user`, `get_auth_scopes`, `get_credits_usage`, and `get_feature_costs` before writes or charged actions when context is unclear.
- Team owner/admin permissions are required for many flow, audience, Social Engagement, and team-wide operations.
- Charged discovery and enrichment use FirstTouch credits, not USD. Show credit impact and ask for confirmation before larger charged actions.
- Do not publish flows, enroll contacts, complete approvals, start Social Engagement, or run charged enrichment unless the user has clearly asked or confirmed.
- For single-contact action requests, prefer Dynamic Actions over creating an Audience or reusable Flow Plan.
- For multi-contact or segment requests, use Audience and Flow Plan workflows instead of one Dynamic Action per contact.
- Preserve the user's exact supplied email, LinkedIn URL, or phone unless they confirm a different value from lookup/enrichment.

## Useful User Prompts

```text
Show my current FirstTouch user, team, permissions, and credit balance.
```

```text
Preview VP Sales prospects in US SaaS companies before spending more discovery credits.
```

```text
Create a manual audience from these contacts, attach it to a draft flow, and show validation before publishing.
```

```text
Send a follow-up email to brittany@example.com with human approval required. Use Brittany as the first name.
```

```text
Monitor this LinkedIn profile, load recent engagement history, and route people who like or comment into the linked Social Engagement flow.
```

```text
Show active LinkedIn outreach waiting to run and explain anything blocked.
```

```text
Show submitted email sends for this flow and tell me why expected emails have not sent.
```

```text
Show email and LinkedIn engagement, positive replies, and meetings booked for the last 30 days. Include daily chart trends.
```

```text
Who on our team is connected to this LinkedIn profile?
```

## Reference

- [FirstTouch MCP Overview](/WebApp/Mcp/overview)
- [Connect FirstTouch MCP](/WebApp/Mcp/connect)
- [FirstTouch MCP Use Cases](/WebApp/Mcp/use-cases)
- [FirstTouch MCP Prompt Library](/WebApp/Mcp/prompt-library)
- [FirstTouch MCP Troubleshooting](/WebApp/Mcp/troubleshooting)
