Documentation
Working with Lumnis

Lumnis MCP

Research people, companies, and audiences, inspect the evidence, and continue approved work from your AI assistant.

Reviewed 2026-09-09

Lumnis MCP brings your people, company, and audience intelligence into an AI assistant. Find the right people, inspect their evidence and available CRM context, research a company or person, and continue approved work using the same Projects and campaigns you see in Lumnis.

This guide covers connecting to Lumnis's hosted MCP endpoint and every registered tool, not configuring external MCP servers for SDK-driven agents. You do not need to install an SDK or create your own server to use this connector.

Connect your assistant

Use an MCP client that supports a remote HTTP server with OAuth authentication. The server URL is:

https://app.lumnis.ai/mcp
  1. Add that URL as a remote MCP server in your client.
  2. Complete the Lumnis OAuth sign-in and authorization in your browser.
  3. Ask your assistant to call get-my-account. Choose the organization you want to work in from the returned organizations list.
  4. Before planning a people search or named-company map, load get-lumnis-skill with skill: "prospecting" or skill: "account_research". It returns an authored guide, not a generated plan or a research run.

Client menus vary. Use your client's remote-server setup instructions instead of assuming that every client has the same connector screen. A configured URL is not proof that authentication succeeded: check the account response.

No Lumnis API key is pasted into the conversation. Never share passwords, session cookies, or verification codes in chat. Connecting a LinkedIn or email sending account is a separate browser authorization flow, described below.

Scope, IDs, and returned data

Organization-scoped tools require organization_slug; get-my-account and get-lumnis-skill do not. Use an exact slug returned by get-my-account, not an organization name. Requests run under the signed-in user's access; supplying a different slug does not grant access to another organization.

list-projects, list-pipelines, and list-campaign-pending-actions default to the caller's own work. Their member_emails filter selects specific organization members; all_members: true selects the whole organization and takes precedence over member_emails. Discover teammate emails from get-my-account; do not guess them. These filters select whose work to read, not which account to authenticate as.

Tool inputs generally use snake_case, while many result fields use camelCase. Keep the returned names intact. Results are generally JSON inside MCP text content; get-lumnis-skill returns the authored Markdown string directly, not a JSON-encoded document. Check both the MCP isError flag and fields such as failed, partialFailure, pending, and error; a response can preserve useful successes alongside failures. Null, unavailable, and an empty list do not all mean the same thing.

IdentifierWhere to obtain itWhere it is used
Organization slugget-my-accountorganizations[].slugorganization_slug
Project IDlist-projects or a launch resultProject-scoped reads and writes
Local prospect IDlist-prospects, get-project, or add-prospects-to-projectProspect detail, research, enrichment, and enrollment
Local campaign IDget-projectcampaigns[].id or soleLiveAiCampaign.id; launch → localCampaignIdCampaign stats, settings, and adding prospects
Backend AI campaign IDLaunch → campaignId; a local campaign's aiCampaignIdOptional campaign filter on the pending-action tool
Action IDlist-campaign-pending-actionsApproval decisions
Account sluglist-account-intelligenceaccounts[].slug; launch → accountSlugget-account-intelligence.account_slug
Audience brief IDlist-audience-briefsruns[].id; launch → briefIdget-audience-brief.brief_id

An approval action's backend prospectId is not interchangeable with the local Prospect ID accepted by get-prospect-timeline. Use the timeline already attached to that pending action when reviewing it.

Read first, confirm before spending or acting

Searches, new Account Intelligence runs, new Person Intelligence research, Audience Research, and contact enrichment can spend credits. Confirm the targets, scope, and credits before launch. Phone enrichment is opt-in and materially more expensive than email-only lookup. A refresh can buy new research; it is not just a page reload.

Creating or editing Personas and playbooks changes saved configuration. Changing campaign settings can enable channels or automatic actions. Adding people to an active campaign can make them eligible for real outreach. Approving an action can send its message or connection request. Review and confirm those changes before calling their tools.

Not every action requires routine approval by default. Campaign guardrails and approval settings decide what can run. Report the settings returned by the campaign rather than promising that every message or action will wait. An autonomous pipeline can still have actions requiring human review.

Read-oriented tools can also reconcile status or warm a cache. For example, get-action-history verifies unfinished actions, research polling refreshes run state, live CRM matching can populate cached matches, and LinkedIn status checking may repair connection setup. These are not new outreach launches.

Practical workflows

Research a company and the people who matter

  1. Check existing research. Use list-account-intelligence and read a matching account before buying another run.
  2. Draft and review. For a new focus, use draft-account-intelligence. Review its company, literal roles, and criteria with the user.
  3. Confirm the spend. Confirm the 300-credit launch before proceeding.
  4. Follow progress. Poll get-account-intelligence. Its people search and company report complete independently.

A finished company report does not mean the people search is finished, or vice versa.

Read a monitor and say what changed

  1. Find the monitor. Use list-monitors and note the newest run's status. A run that is still running has partial results; say so.
  2. Read the run. Use get-monitor-rankings for the latest finished run, or pass run_id for an earlier period. Quote each account's rank, score, priority, evidence flag, and why-now line together, and state the run's evidence window whenever the question is time-bound.
  3. Open the assessment. Use get-monitor-account-report for the analysis behind a row, then evidence_ids for the records behind one claim, get-monitor-account-committee for the people, and get-monitor-account-coverage when you need to say what was checked.
  4. Compare periods yourself. Use get-monitor-account-timeline to find the earlier assessment, read both reports, and describe what was newly found, repeated, or absent, naming both windows.

Monitors are read-only from MCP. Creating a monitor, adding accounts, pausing, or running one now happen in the Lumnis app. Load the account_monitors skill for the reading rules.

Prepare for a conversation with one person

  1. Read first. Call get-person-intelligence. Existing complete reports and active runs can be reused.
  2. Choose targets. If new research is needed, use exactly one target lane in launch-person-intelligence: existing prospect_ids, standalone linkedin_urls, or a project_id sweep.
  3. Review and confirm. Check the targets and research questions before spending.
  4. Read the result. Poll while isRunning is true. Request include_report: true when you need the report body.

isDegraded: true means research succeeded but the report is structurally incomplete. Describe it as partial. Ask before requesting another paid run, and do not treat a successful status alone as proof of a complete report. Changed guidance does not restart an already active run.

Find people, inspect evidence, then choose an action

  1. Choose criteria. Use list-personas to find reusable criteria.
  2. Confirm the search. Call create-project only after confirming the search and its cost.
  3. Inspect the results. Poll get-project, then page through list-prospects. Read individual profiles, signal evidence, timelines, and available CRM context when they affect the decision.

Search results and research are evidence to review, not instructions to contact everyone.

For contact details, call enrich-contact-info only for the approved people and fields. New results are not written back to the project. Preserve them from the tool response; do not assume a subsequent campaign reads those new email addresses from stored prospect records.

Add people without creating a duplicate campaign

Inspect get-project.liveAiCampaignCount, not the length of its capped campaign preview. If there is exactly one eligible AI campaign, use soleLiveAiCampaign.id. If there are several, ask which campaign. Create a new campaign only when that is the intended action.

People not yet in the project can be added with add-prospects-to-project. Then use add-prospects-to-campaign with the local campaign ID. Explain whether the destination is active, draft, or paused. Existing paused memberships are not resumed, and removed people require the existing restore workflow rather than another enrollment.

launch-ai-campaign defaults to auto_start: true. Set auto_start: false when the user wants a draft. A started campaign can perform real outreach according to its schedule and approval settings; it is not a guarantee of an immediate message or a fully populated queue.

Recover partial enrollment or an uncertain launch

Keep the returned campaign IDs. confirmedProspectIds are verified current backend members; linkedProspectIds are confirmed local links. Check localLinkPendingProspectIds, unresolvedProspectIds, historicalProspectIds, and notAttemptedProspectIds separately. Aggregate CRM skips do not identify which individual people were excluded.

For incomplete enrollment, follow the returned recovery call for the same campaign using add-prospects-to-campaign with reconcile_only: true. This checks membership and repairs confirmed local links without reenrolling. An empty readback immediately after a timeout does not prove a delayed write will never complete. Do not repeat normal enrollment or create another campaign as a blanket retry.

Launch withholds automatic start when enrollment or local linking needs attention. A creation timeout can return created: null and creationOutcomeUnknown: true; a start timeout can return started: null and startOutcomeUnknown: true. These mean unknown, not false. Local DRAFT status does not prove the backend is stopped. The local status in get-campaign-stats alone cannot settle an uncertain start; verify live backend status in the existing dashboard campaign view before another write. When a deadline prevents a start request from being sent at all, the result instead says started: false and startOutcomeUnknown: false.

Enrollment has a bounded HTTP time budget and paginated membership readback. Exhausting either returns unresolved work instead of silently treating every requested person as enrolled. These checks do not make multiple systems one atomic transaction; read the recovery result before deciding the next action.

Review pending actions with their conversation context

Read list-campaign-pending-actions, including the attached timeline before approving a reply. decide-campaign-actions supports different decisions in one call and returns per-sender and individual results. An approval executes as the campaign's sender, not automatically as the manager reviewing it. Keep successful results if another item fails; do not reapprove the whole batch blindly.

Account and sender tools

The shared organization_slug input is required below unless a section says otherwise. Input summaries highlight the supported controls; your connected client's tool schema provides the complete validation rules.

get-my-account

Read & inspect

Finds your profile, organizations, roles, and teammates so your assistant can choose the correct workspace.

Inputs

None. No organization_slug is needed. Use this tool to find your organizations.

Returns

  • The signed-in user's profile.
  • organizations, each with its slug, role, and member roster. Use these to choose the workspace and discover teammate emails.
  • Account and team information visible to the connected assistant.

get-lumnis-skill

Read & inspect

Returns an authored prospecting or account research guide as plain text without model calls, research, or credit spend.

Inputs

Only skill is required. Choose:

  • "prospecting" — guidance for finding and reviewing the right people.
  • "account_research" — guidance for researching a named company.
  • "account_monitors" — guidance for answering from a monitor's saved runs.

No organization_slug, ICP, context, or objective is required. Authentication is still required.

Returns

The selected human-authored Markdown string directly in MCP text content, including its version and review date. The result is not a generated plan or JSON document. The endpoint makes no model calls, database reads, provider requests, or credit charges, and does not launch or change anything.

Usage notes

The prospecting guide explains conditional search selection, seed quality, criteria versus configuration, evidence review, and recovery from weak results. The account research guide covers company identity, reviewed buying roles, existing research, independent people/report progress, evidence gaps, and a reviewable account brief. The account monitors guide covers evidence windows, unscored rows, evidence flags, comparing two saved assessments by hand, and the questions a monitor cannot answer. The calling assistant applies the text using context already in the conversation. Guidance never substitutes for user consent, tool authorization, or the current input schema.

get-linkedin-connection-status

Account setup

Checks your LinkedIn connection and may repair setup state, with only an active result confirming a completed connection.

Inputs

organization_slug.

Returns

The authenticated user's LinkedIn connection state. Only status: "active" confirms an active connection. Checking can repair setup or initiate playbook preparation; it does not send outreach.

connect-linkedin

Account setup

Returns a browser sign-in link for LinkedIn or reuses your active connection unless you explicitly request reconnection.

Inputs

organization_slug; optional reconnect defaults to false. Use true only for an explicitly requested reconnection.

Returns

An existing active connection, or status: "authentication_required", authorizationUrl, and nextStep. The user completes sign-in in their browser. Verify afterwards with get-linkedin-connection-status; receiving a URL is not a completed connection.

list-email-inboxes

Read & inspect

Lists your sending inboxes and sender identity in the selected organization without reading email messages.

Inputs

organization_slug.

Returns

The caller's sender identity, sending inboxes in the selected organization, and setupRequired. Includes connected Gmail, Outlook, and IMAP inboxes and Lumnis-provisioned inboxes where available. It does not read email message contents. A sync error is not evidence that no inbox exists.

setup-email-sender

Account setup

Creates or reuses your email sender identity from supplied personal details and a mailing address without provisioning domains or mailboxes.

Inputs

organization_slug, first_name, last_name, and the user's confirmed physical_address; optional title.

Returns

The created or reused email sender identity. This is separate from a search Persona and does not provision a domain or mailbox. Use the user's real details, then call connect-email-inbox.

connect-email-inbox

Account setup

Returns a browser sign-in link to connect your Gmail, Outlook, or IMAP sending inbox after sender setup.

Inputs

  • organization_slug — your selected organization.
  • providergmail, outlook, or imap.
  • daily_send_cap — optional; defaults to 20 and accepts 10–40.

Check list-email-inboxes and complete sender setup first if required.

Returns

A hosted authorizationUrl and browser sign-in instructions. The inbox belongs to the authenticated caller's sender in this organization. After sign-in, call list-email-inboxes again and verify the inbox appears. Connecting does not send email or launch a campaign. If the result is sender_setup_required, complete the returned setup step before requesting another authorization link.

Projects, prospects, and contact details

list-projects

Read & inspect

Lists your prospect search projects with filters and pagination, with options to include teammates and pipeline projects.

Inputs

  • Required: organization_slug.
  • Scope: optional all_members or member_emails.
  • Filters: optional name_contains, updated_since, and updated_before.
  • include_pipeline_projects — optional; defaults to false.
  • limit — defaults to 50; maximum 200.
  • offset — defaults to 0.

Returns

projects, totalCount, limit, and offset. Rows contain compact metadata, statuses, counts, and pipeline links, not the full search description. The default is the caller's standalone projects. Increment offset by limit until the returned window reaches totalCount.

get-project

Read & inspect

Shows a project’s search progress, prospect previews, and campaign totals, including its sole live AI campaign when there is exactly one.

Inputs

  • Required: organization_slug and project_id.
  • prospect_limit — defaults to 20; accepts 0–50.
  • campaign_limit — defaults to 10; accepts 0–20.

Returns

Project details, prospect and campaign previews, complete campaignCount and liveAiCampaignCount, campaignsTruncated, and soleLiveAiCampaign when exactly one eligible AI campaign exists. While a search runs, liveSearch provides a high-level stage and partial candidate preview, not a raw agent trace. Use list-prospects for full pagination; increasing a preview limit does not make the preview an unlimited list.

get-action-history

Read & inspect

Reads a project’s recent search actions and refreshes unfinished action statuses.

Inputs

organization_slug, project_id.

Returns

The latest 50 project search, rerun, and expansion actions. There is no offset parameter. Unfinished actions are checked against live state, and their stored status may be updated.

create-project

Can spend credits

Spends credits to start a prospect search using profile criteria, buying signals, engagement, lookalikes, or a Sales Navigator source.

Inputs

organization_slug, name, search_query, and search_type; search_limit defaults to 50 (1–200). Supported search types and their important companion fields are:

search_typePurpose and additional inputs
autoSelect a discovery lane from the audience description; optional competitor/company and profile seeds.
generalMatch people by profile and audience criteria.
job_signalFind people at hiring companies; optional job_signal_date_range.
sales_navigatorUse a people-search or lead-list sales_navigator_url. A suitable connected LinkedIn subscription is required.
post_discoveryFind people around topic-matching posts; optional post_topics, posts_date_range, and author/reactor/commenter controls.
competitor_engagementFind people engaging with competitor posts; engagement_types plus competitor targeting.
competitor_rep_engagementFind authors of posts competitor sales reps engage with; competitor targeting, engagement_types, and optional rep/crawl controls.
influencer_engagementFind qualified engagers around named experts; requires seed_profiles and engagement_types.
lookalikesExpand through shared engagement; minimum search_limit 50, optional source_brand_run_id from a finished audience run.

For competitor targeting, competitor_mode: "strict_only" takes a competitor_list; "auto_find" takes your company website plus optional anchor competitors. Do not mix incompatible modes. Advanced schemas include company/executive post selection, title replacements, and per-source limits.

Other controls include an explicitly selected persona_id and optional source_persona_version_id, delegated owner_email, overlap exclusions, max_candidates_per_company, verification/ranking options, stacked signals or auto_select_signals, and intent_scoring_instructions. Optional template fields do not constitute a general sequence-management API. First-degree network search is not exposed by this tool.

Do not combine explicit signals with auto_select_signals. Available signals are engagement, hiring, recently_joined, funding, and events; job-change evidence is recently_joined, not a separate search type. posts_extract_commenters defaults to false on this tool, and executive title overrides replace the default list rather than extending it. Ranking and backfill options can surface lower-fit candidates; review their evidence instead of assuming every returned result passed every criterion.

Returns

A project identifier and initial search state, with creditsUsed and creditsRemaining. Creation starts paid asynchronous research; poll get-project, then inspect the results. Cost depends on the lane, selected signals, and target count. Auto selection uses a flat per-prospect rate; manual signal selections can increase the lane's base cost. Confirm the actual configuration instead of assuming all searches cost one credit per person. Search-start failure and later partial results are different outcomes; follow the returned error and credit state.

list-prospects

Read & inspect

Pages through project prospects with compact profiles, scores, intent signals, and optional CRM matches and account context.

Inputs

  • Required: organization_slug and project_id.
  • Pagination: limit defaults to 50 (maximum 200); offset defaults to 0.
  • include_excluded: true selects only excluded prospects, not active and excluded combined.
  • include_summary — defaults to true.
  • crm_match_mode — optional; none (default), cached, or live.
  • include_crm_account_context — defaults to false.

Returns

prospects, totalCount, limit, offset, and blurredCount, with compact profile, fit, campaign, pause/exclusion, intent, intentSignals, and signalEvidence fields. Heavy rawData is omitted. Page with limit/offset. CRM matching can add contact links and account/deal context; live matching adds latency. Failures appear in crmEnrichment.errors without suppressing the prospect page. A missing match is not proof that the person is absent from every CRM. These controls inspect CRM context; they do not write CRM contacts or deals.

get-prospect

Read & inspect

Reads a prospect’s full profile, research, signals, and outreach history, with optional CRM matches and account context.

Inputs

organization_slug, project_id, prospect_id; optional crm_match_mode and include_crm_account_context as above.

Returns

Full local prospect detail, including rawData, experience, signal evidence, sequence state, and outreach history. The prospect must belong to the specified project. Optional CRM failures remain non-fatal and are reported alongside the core record.

get-prospect-timeline

Read & inspect

Shows a prospect’s outbound actions, inbound replies, and pending next action in chronological order.

Inputs

organization_slug, project_id, and a local prospect_id; optional limit accepts 1–500 and keeps the most recent actions.

Returns

prospect, chronological actions, and the current pendingAction. Actions include content, channel, timestamps, and reasoning where available. Inbound replies can appear as cancelled records whose agentReasoning contains inbound_reply_received; interpret these as the prospect's replies, not cancelled outbound messages. Omit limit for full history; there is no offset pagination.

Usage notes

Timeline resolution requires an attached AI campaign and a stored LinkedIn URL, so this tool cannot resolve every email-only or manually added person. Its identity lookup currently inspects only the first 500 backend campaign prospects. A lookup failure does not prove there is no membership or prior history, particularly in a larger campaign. For approval review, use the timeline attached to the pending action where available.

enrich-contact-info

Can spend credits

Finds emails and optional phone numbers with provider verification status, spending credits for new lookups without saving results to the project.

Inputs

  • Required: organization_slug.
  • Targets: exactly one of prospect_ids or linkedin_urls, up to 50 targets.
  • include_email — defaults to true.
  • include_phone — defaults to false.
  • refresh — defaults to false.

At least one contact field is required. Contacts are not filtered by verification.

Returns

Per-person results, requestedFields, target and deduplication counts, totalCost, costComplete, unknownCostLookups, and persisted: false. Stored project values are reused unless refreshed, and are returned as-is rather than newly verified. Standalone URLs require a provider lookup. New results are not written back to the project. Optional deepWebFindings are separate research evidence, not automatically verified primary contact values.

Usage notes

Each requested contact field includes its source, raw provider status (emailStatus / phoneStatus), and a normalized emailVerification / phoneVerification label: verified, unverified, or unknown. These are provider-reported claims, not independently verified by Lumnis. Present the status alongside the contact instead of treating every enriched value as verified.

For email, VERIFIED, DELIVERABLE, and VALID map to verified; HIGH_PROBABILITY, CATCH_ALL, RISKY, INVALID, and UNVERIFIED map to unverified. For phone, VERIFIED maps to verified, while RISKY, INVALID, and UNVERIFIED map to unverified. Matching is case-insensitive. Stored contacts, absent contacts, missing statuses, and unrecognized statuses are unknown; the raw status remains available when supplied for a returned provider value. An unverified result is still returned, not discarded.

On partial failure, retain successful fields and inspect unresolvedTargets and failures. totalCost is only reported cost. If costComplete is false, the final charge is unknown, including for timed-out lookups. Confirm any targeted retry with the user; do not retry the entire paid batch.

add-prospects-to-project

Changes saved data

Adds manually supplied people to a project without search credits, identifying duplicates without enrolling them in outreach.

Inputs

organization_slug, project_id, and prospects (1–50). Each person needs name plus a valid linkedin_url or email; optional title, company, and location provide useful context.

Returns

created, duplicateInputsRemoved, optional duplicatesSkipped, resolved prospects[].prospectId, and unresolvedTargets. This is a free, synchronous saved-record write, not a search or campaign launch. If target IDs cannot be read back after creation, inspect existing project rows rather than repeating creation.

Company and person research

list-account-intelligence

Read & inspect

Lists researched company accounts with research status, run history, and deduplicated people counts.

Inputs

organization_slug; include_archived defaults to false.

Returns

Organization accounts ordered by recent activity, including company information, durable slugs, report/people state, runs, and deduplicated people counts. No tool-level limit or offset is exposed. Check for an existing account before buying another run.

get-account-intelligence

Read & inspect

Reads a company’s facts, research report, buying committee, candidate people, campaigns, and run progress.

Inputs

organization_slug, account_slug.

Returns

Account facts, company report, buying committee, candidates, campaigns, and runs. Poll while people.isRunning or report.isRunning is true. Treat their completion states independently and check the research date and source evidence before acting on a claim.

draft-account-intelligence

Read & inspect

Researches a company and proposes buyer criteria for review without creating an account or starting the paid people search.

Inputs

organization_slug, company with a public domain, and roles (1–30 literal roles/functions). Company name, logo, employee count, and location are optional. Optional instructions guide the draft.

Returns

Normalized company, roles, and editable criteria, plus nextStep. This researches and drafts review criteria but does not create the account, launch the people search, or spend the 300 launch credits.

launch-account-intelligence

Can spend credits

Uses reviewed buyer criteria to start paid company research and a people search, creating a project and creating or reusing its company account.

Inputs

organization_slug, the reviewed company, roles, and criteria from drafting. Criteria include name, target_audience, must_haves, exclusions, and post_topics, with outreach, seniority, and extra context where relevant. Optional competitors, engagement_activities, and exec_titles refine signals. Omitted competitors use the organization's known sales-Persona competitors; an empty list explicitly requests no competitor targets. Activity overrides (reactions, comments, authored_posts) require an explicit competitors list. Executive title overrides replace the defaults.

Returns

Account/project identifiers, launch state, credit information, and polling guidance. A run costs a flat 300 credits and creates or reuses the durable account while creating run-specific research records. It includes engagement, recently joined, and hiring signals. It intentionally maps the account without excluding everyone already found, contacted, or in CRM. Confirm the reviewed criteria and spend first.

launch-person-intelligence

Can spend credits

Starts paid public-source research for selected people or a project, always reusing active runs and reusing complete reports unless fresh research is requested.

Inputs

  • Required: organization_slug.
  • Targets: exactly one of prospect_ids, linkedin_urls, or project_id. Explicit lists accept up to 50 targets.
  • limit — for a project sweep; defaults to 25, maximum 50.
  • Research guidance: optional company_context, research_instructions, and up to 10 questions.
  • refresh — defaults to false.

Returns

Separate launched and failed arrays, with target identifiers, run IDs, responseId, and reused where applicable. A successful HTTP response can still contain failed targets. Project sweeps choose top-scoring non-excluded prospects; explicit IDs must be visible in the selected organization. Standalone LinkedIn research needs no project.

Usage notes

New research is paid per person. Complete reports and active runs are reused by default; incomplete reports may require new paid work. refresh: true bypasses a completed report, but still reuses an active run. Guidance is research direction, not evidence establishing a fact. Poll with get-person-intelligence; do not relaunch the full batch because one target failed or a report has not arrived yet.

get-person-intelligence

Read & inspect

Checks research by LinkedIn URL or project, showing running and partial-result flags with full reports available on request.

Inputs

  • Required: organization_slug.
  • Target: exactly one of linkedin_url, project_id, or run_id (the exact report's id returned by an earlier read).
  • include_sections — defaults to false. Set it to true to discover section IDs, titles, availability, and sizes without retrieving their text.
  • section_ids — up to 20 exact IDs from that report's sectionIndex. Retrieves selected text for one linkedin_url or run_id; not a project.
  • report_version — optional reportVersion from the index. Use with section_ids to detect a report that changed between discovery and reading.
  • cursor — optional sectionPage.nextCursor from the previous response. Repeat the same target, section IDs, and order to continue reading.
  • include_report — defaults to false. Set it to true for the full original report response. Cannot be combined with section_ids.

Returns

runs with camelCase fields including prospectId, linkedinUrl, status, isRunning, isDegraded, error, startedAt, completedAt, and report. With include_report: false, report: null is returned rather than the report body. Reads reconcile run state and are organization-scoped. The current read is capped at 200 runs with no MCP offset input; a project response is not an unlimited research archive. A degraded success is a partial report, not a complete answer or permission to buy a refresh automatically.

Usage notes

Read only what you need.

  1. Call with include_sections: true. Each run adds reportVersion, generatedAt, writer, sectionsAvailable, and sectionIndex. Index entries contain id, title, available, byteCount, and charCount.
  2. Choose relevant IDs from that index, then call with section_ids and report_version. Use the returned run id as run_id when choosing from a project or when a profile has multiple historical reports.
  3. Read sectionPage.sections. Each entry contains the original markdown, its charOffset, total charCount, and hasMore, along with the section's ID, title, availability, and byte count. Full report JSON and visual annotations are not included.
  4. If sectionPage.nextCursor is not null, request the next page. Each page contains at most 12,000 characters of section text in total. Join fragments for each section in offset order before interpreting Markdown, tables, or citations that may cross a page boundary. Character counts and offsets use JavaScript UTF-16 units; pagination preserves surrogate pairs.

For example, to prepare for a call, discover the report's sections and select the IDs for “What they care about” and “Relevant to your context,” if present. Do not assume section numbers or IDs stay the same across reports.

sectionPage.isPartialSelection means you requested only part of the report; it does not mean the source is degraded. Continue to check isDegraded and the writer's fallbackUsed provenance. Unknown section IDs return an error with the available index; a changed report returns report_changed and requires a fresh index. A cursor cannot be reused for a different run or selection.

Older or malformed reports may return sectionsAvailable: false with sectionsUnavailableReason; they remain readable with include_report: true. Reports with document-wide reference-style citation definitions require that full-report mode to preserve citation context. Inline citation links travel with their original section text. Section retrieval does not launch research or spend credits on a new run.

Account monitors

A monitor is a named list of accounts that Lumnis assesses every 7, 14, or 30 days over a fixed evidence window. Every run and every account assessment is saved, so earlier periods stay readable. These four tools read exactly what the monitor page shows; they never launch a run, enroll an account, change a schedule, or spend credits.

list-monitors

Read & inspect

Lists the organization’s account monitors with depth, cadence, account count, schedule, and the newest run’s status.

Inputs

organization_slug.

Returns

monitors[] with id, name, defaultDepth (light assesses the company; deep also reads the buying committee found once when the account joined), intervalDays, status (active or paused), memberCount, nextRunAt, lastRunAt, and latestRun with its status, evidence window, and item counts. Pass monitors[].id as monitor_id to the other monitor tools.

get-monitor-rankings

Read & inspect

Reads one monitor run as the page shows it, with global ranks, priorities, scores, why-now reasons, owners, evidence flags, facets, and its evidence window.

Inputs

organization_slug, monitor_id. Optional run_id reads an earlier saved run instead of the latest finished one; priority filters to act, look, or keep (default all); owner filters by the stored owner label, or "__unassigned__" for accounts without one; search matches an account name or domain; page selects a 50-row page (default 1).

Returns

monitor settings, the selected run with windowStart and windowEnd, latestRun for current activity, items[] of 50, pagination, facets counts per priority, hasOwner, plus bounded progressItems (unfinished, failed, or skipped) and awaitingMembers (never assessed). Each item carries rank, priority, score, level, topReason, evidenceFlag (limited or warnings), ownerLabel, tier, completedAt, targetAccountId, and the assessment id. rank is a global ordinal over the whole run and does not change with filters. rank: null means unranked: validation warnings can exclude a usable score, so inspect score, assessmentStatus, and validationStatus. Pages group by priority before rank; follow pagination when needed to identify the global top accounts. A weekly run does not prove coverage of the last 72 hours; state the window.

get-monitor-account-report

Read & inspect

Reads one account’s saved analysis from a run: verdict, why-now sections, next step, signal judgments, company and committee analysis, with cited evidence records on request.

Inputs

organization_slug, monitor_id, assessment_id (an items[].id from get-monitor-rankings or get-monitor-account-timeline). Optional include adds evidence (every cited record) and/or markdown (the prose report); optional evidence_ids returns just the records behind one section, signal, or finding.

Returns

The item row, the run window, the frozen context the assessment used (owner, tier, committee people, scoring guide, depth), and report.analysis as the monitor page presents it: score, level, assessment and validation status, the account-analysis bullets, why-now sections with evidenceIds, the recommendation, every signal judgment, the company analysis (company: news and hiring narratives with findings), the committee analysis (synthesis: patterns, findings, questions) and caveats. About 80 KB for a deep account. report.peopleIndex and peopleTotal list every committee member cheaply; evidenceTotal counts cited records. Caveats collapse per-person coverage lines into their aggregate; the per-person view is in get-monitor-account-coverage. Evidence records and person reports are omitted unless requested; a deep account can carry 400 KB of evidence and 50 person reports. Current settings do not rewrite a saved assessment.

get-monitor-account-committee

Read & inspect

Reads the committee synthesis and bounded per-person reports for one saved assessment, active people first.

Inputs

organization_slug, monitor_id, assessment_id. Optional people_limit (default 10, max 50) or people (names or LinkedIn URLs) to choose which person reports to return.

Returns

people (each person's name, title, URL, summary, reasoning, coverage statement, nothingInWindow, and dated claims with evidenceIds), the full peopleIndex (name, title, URL, activeInWindow, failed) and peopleTotal. People are ordered active-in-window first, then by number of claims, then roster order. The committee synthesis is part of get-monitor-account-report. Light monitors have no committee. A person with nothing in the window has no observed activity there, not a negative signal.

get-monitor-account-coverage

Read & inspect

Pages the sources-checked log for one saved assessment so a reader can tell not checked from nothing found.

Inputs

organization_slug, monitor_id, assessment_id. Optional cursor from a previous nextCursor.

Returns

entries[] of up to 50 sources-checked rows as the page lists them — source, subject (the account or a committee member), status (checked, partial, or unavailable), detail, limitations, observations, inPeriod, and pages — plus hasMore and nextCursor. This is the only read that distinguishes a source that was not checked from one that returned nothing.

get-monitor-account-timeline

Read & inspect

Lists one account’s saved assessments across runs with scores, statuses, and evidence windows for period-to-period comparison.

Inputs

organization_slug, monitor_id, target_account_id (from a rankings row). Optional cursor from a previous nextCursor.

Returns

items[] of up to 25 assessments for that account, newest run first, each with id, runId, score, level, status, completedAt, windowStart, and windowEnd, plus hasMore and nextCursor. The tool does not compute differences or repeated findings; read two assessments with get-monitor-account-report and compare them, naming both windows.

Audience research

list-audience-briefs

Read & inspect

Lists existing audience research briefs so you can find useful research before paying for another run.

Inputs

organization_slug.

Returns

The newest 25 non-archived organization audience run/brief summaries, so you can find an ID and inspect recent research before launching. No tool-level pagination or archive controls are exposed; a missing older brief is not proof that no previous research exists.

get-audience-brief

Read & inspect

Reads an audience brief’s engagement trends, pain points, audience language, top voices, curated posts, and ranked ideas with optional drafts.

Inputs

organization_slug, brief_id; optional sections, include_drafts (default true), and feed_limit (default 10, range 0–100). Sections are theRead, howAttentionMoved, themeTrends, takeaways, painPoints, openOpportunities, topVoices, postIdeas, topPosts, competitors, and seeds.

Returns

briefId, status, and the requested digest sections when ready; otherwise progress/error information. painPoints includes audience language, while postIdeas can include drafts and grounding judgments. Competitor and seed sections depend on what that run requested. feed_limit caps a preview, not a pageable archive of every collected post. Select only the sections needed for the question to reduce response size.

launch-audience-research

Can spend credits

Spends credits to analyze audience engagement and optionally competitor or expert publishing, producing research and content ideas without posting or contacting anyone.

Inputs

organization_slug, audience; optional name, selected persona_id, tier, company_context, content_direction, posts_date_range, competitors, and seed_profiles. Competitor controls include own_company, company/executive post toggles, exec_titles, and max_execs_per_target.

Returns

briefId, initial status, tier, peopleRead, timeframe, source selections, creditsUsed, creditsRemaining, and viewAt. Poll get-audience-brief; the run continues server-side. The audience portion is typically described as 20–40 minutes, not a completion guarantee, and extra sources add time.

Usage notes

Current tiers are light (150 credits, 50 people), standard (default; 300 credits, 100 people), deep (600 credits, 200 people), and max (1,200 credits, 400 people). Confirm the selected tier before spending. Supported windows are past-week, past-2-weeks, past-3-weeks, and past-month (default). Up to five competitors and 25 personal LinkedIn seed profiles can add separate reports. Reading expert seed posts is listen-only; it is different from finding their engagers through a prospect search.

company_context and content_direction also become organization steering defaults for later runs. Do not supply invented company details or save a temporary direction without making that persistence clear.

Personas and playbooks

list-personas

Read & inspect

Lists saved audience definitions, including roles, seniority, industries, locations, requirements, and exclusions.

Inputs

organization_slug.

Returns

Reusable organization Personas and targeting criteria. No tool-level pagination is exposed. Select an existing Persona with the user, or use freeform search criteria when no saved Persona fits.

create-persona

Changes saved data

Saves reviewed targeting criteria as a reusable persona with an initial version, without launching research or a prospect search.

Inputs

organization_slug, name, use_case, and target_audience. Optional structured fields include outreach_reason, must_haves, nice_to_haves, exclusions, seniority bounds, geographies, company_attributes, competitors, post_topics, additional_context, and equal-preference flags. Company attributes cover industries, funding stages, and employee-count bounds. Supported use_case values are sales, recruiting, vc_investor, partnerships, community, fundraising, market_research, and other.

Returns

A saved Persona and initial version whose ID can be used in search or audience workflows. This saves reviewed criteria; it does not run the UI research wizard or launch a prospect search. Recruiting Personas do not retain sales competitor criteria.

update-persona

Changes saved data

Updates selected persona fields or list sections while preserving omitted fields and creating a reversible history version.

Inputs

organization_slug, exact persona_id, and updates and/or section_changes; optional change_note. updates replaces supplied fields or lists. Ordered section operations are add, remove, replace, and clear, for targeting lists and company industry/funding lists.

Returns

The updated Persona with a new reversible history version. Omitted fields stay unchanged; empty lists clear lists, and supported null values clear optional fields. add deduplicates values; remove matches exact strings. Confirm the patch before writing.

list-playbooks

Read & inspect

Lists available outbound playbooks, with an option to include archived playbooks.

Inputs

organization_slug; active_only defaults to true.

Returns

Playbooks available for campaign selection. Set active_only: false to include archived/historical ones. No tool-level limit or offset is exposed. Find a suitable playbook before creating one.

get-playbook

Read & inspect

Reads a playbook’s full text and parsed sections before you choose or edit its messaging strategy.

Inputs

organization_slug, playbook_id.

Returns

A playbook containing full markdown, parsed sections, and sectionFormat (legacy or sectioned). Read it before editing, especially when preserving existing strategy matters.

create-playbook

Changes saved data

Creates an outbound playbook from supplied content or generates one from a goal for use in an AI campaign.

Inputs

organization_slug, name, and a content source. Use content_mode: "provided" with either content or sections, or content_mode: "generate" with a goal. Mode can be inferred when only one source is supplied; make it explicit when ambiguous. Generation also accepts organization_context, up to 20 sample_prospects, and warm_intro_context.

Returns

playbookId, name, and source. Provided markdown is saved verbatim; structured sections produce the canonical headings used by the section editor. Supported sections are sequencing, message_tone, positioning, constraints, cta_strategy, follow_up_logic, objection_handling, and approval_safe. Creating a playbook does not launch outreach, but it creates usable saved campaign strategy.

Usage notes

Structured section bodies are checked before saving. Section-like headings inside examples can confuse the editor, so ambiguous bodies are rejected without creating a playbook. Remove those headings or use complete reviewed content, which is saved verbatim.

update-playbook

Changes saved data

Changes a playbook’s name, complete text, or selected sections while preserving omitted sections and recording a new version.

Inputs

organization_slug, playbook_id, and the requested name, content, or section_updates; optional change_reason. Full content and section_updates are alternatives, not simultaneous sources.

Returns

Updated playbook data with a new version. Full markdown replaces the old text verbatim. A section patch preserves omitted sections and an empty string removes that section. Both the existing document and the proposed merged sections are checked before saving. Unsafe legacy, custom, duplicate, or fenced-heading structures are rejected by section editing rather than silently rewritten. Read the existing text and supply a complete reviewed content replacement when a safe section patch is not possible.

Campaigns, approvals, and pipeline visibility

get-campaign-stats

Read & inspect

Reads performance metrics, outreach funnel stages, and conversion rates for an AI campaign or sequence campaign.

Inputs

organization_slug, project_id, and local campaign_id.

Returns

Campaign metadata and engagement, prospect, execution, pause, approval, and conversion breakdowns. AI campaigns can include supplemental backend metrics; failure to fetch those does not suppress the local detail. Supports AI and sequence campaign detail, but does not expose sequence lifecycle controls. Local status alone is not proof of backend start/stop state after an uncertain request.

launch-ai-campaign

Can affect outreach

Creates an AI campaign with a chosen playbook and starts real outreach by default, with an explicit option to stage it without starting.

Inputs

  • Required: organization_slug, project_id, name, playbook_id, and prospect_ids.
  • auto_start — defaults to true. Use false when the user wants a draft.
  • Context: optional goal, company_context, max_prospects, and playbook_version.
  • Controls: optional guardrails and approval_settings.
  • executing_user_email — only for an explicitly requested organization teammate.

Returns

Backend campaignId, localCampaignId, created, mirrored, enrollment counts and exact membership/link IDs, started, actual approvalSettings where available, and nextStep. Partial enrollment returns recovery instructions rather than starting. Read the earlier recovery section for unknown creation/start outcomes.

Usage notes

The campaign is mirrored into the project before enrollment. Live-campaign conflicts and duplicate LinkedIn identities are checked before launching; these checks do not provide a global concurrency lock. Defaults are seeded from the launch wizard and individual requested overrides are applied. Do not assume every action is approval-gated, change sending hours or approval modes by guesswork, or infer a colleague's sender identity. guardrails.channel: "email_only" avoids LinkedIn outreach but requires the executing sender's email setup. Email sender identity is resolved server-side.

add-prospects-to-campaign

Can affect outreach

Enrolls project prospects into an existing AI campaign that may contact them, with reconciliation available for uncertain previous outcomes.

Inputs

organization_slug, project_id, local campaign_id, and prospect_ids; reconcile_only defaults to false.

Returns

Campaign IDs and name, known counts, enrollmentCountKnown, confirmed and linked prospect IDs, unresolved/local-link-pending/historical/ not-attempted IDs, warnings, and nextStep. Only verified current backend members are linked locally. An active destination may act on new people under its existing settings. This tool does not create a campaign, start a draft, resume paused memberships, or restore removed people.

Usage notes

After a partial or uncertain write, set reconcile_only: true to verify and repair without enrolling again. Existing local links are not proof of current backend membership; reconciliation can report a mismatch without automatically deleting those links. Already-enrolled local rows can be a normal no-op outside reconciliation mode.

update-ai-campaign-settings

Can affect outreach

Updates campaign sending rules, channels, and approval requirements, which can enable automatic outreach or social actions.

Inputs

organization_slug, project_id, local campaign_id, and nonempty guardrails and/or approval_settings. Guardrails cover channel, daily and follow-up caps, likes/comments, active hours/timezone, allowed weekdays (0 is Sunday), and pacing. Approval fields use auto or require per action type.

Returns

updated, local and backend campaign IDs, status, guardrails, and approvalSettings. Omitted fields remain unchanged. Completed campaigns cannot be changed. Confirm edits because enabling an action or changing a gate to auto changes real outreach behavior.

list-campaign-pending-actions

Read & inspect

Lists AI campaign actions awaiting review, with prospect details, category filters, and optional prior-interaction timelines.

Inputs

  • Required: organization_slug.
  • Scope: optional all_members, member_emails, and backend campaign_id.
  • Filters: optional filter_category and action_type. action_type takes precedence over the category.
  • Pagination: limit defaults to 100 (maximum 500); offset defaults to 0.
  • include_prospect_details and include_timeline — both default to true.
  • timeline_limit — optional; caps each history at 1–500 recent actions.

Categories are replies, initial, follow_ups, inmails, comments, likes, connections, stop, and meeting_booked.

Returns

Pending-approval actions, totalMatched, and the result window. Results are merged across in-scope campaigns, filtered, then paged; compare the returned count plus offset with totalMatched. Timelines add per-person live reads, so disable them for count-only scans. A timeline may be unavailable; inspect its reason instead of assuming no prior contact. Setting include_prospect_details: false also bypasses timeline enrichment. Read context before approving replies, including on autonomous pipelines.

decide-campaign-actions

Can affect outreach

Approves, rejects, or skips pending actions with optional message edits, executing approved actions from each campaign’s own sender account.

Inputs

organization_slug and 1–100 decisions, each with action_id and decision (approve, reject, or skip). Rejection needs a reason. Approvals can include notes, modified_content, and, for email/InMail, modified_subject.

Returns

bulk per-sender group results, individual results, and a summary. Subject edits use individual calls; other decisions are grouped by campaign sender. Approving can execute real outreach from that sender's account. Check each result rather than treating a mixed batch as all-or-none.

list-pipelines

Read & inspect

Lists your or your teammates’ pipelines and summary metrics, with local contacted counts treated as a lower bound.

Inputs

organization_slug; optional all_members and member_emails, with caller-only default scope.

Returns

Pipelines and top-level prospect/contact/reply/booking metrics. No tool-level pagination controls are exposed. Local totalContacted can undercount autonomous AI sends, so zero does not establish that nobody was contacted. Pipeline replyMode is not a substitute for checking approvals. This tool reads pipelines; it does not create, pause, or edit them.

get-pipeline-stats

Read & inspect

Reads one pipeline’s project and persona breakdowns alongside live outreach funnel counts for contacted people, replies, and booked meetings.

Inputs

organization_slug, pipeline_id.

Returns

Aggregate metrics, per-project and per-Persona breakdowns, and funnelMetrics from live backend campaign funnels when available. Prefer the funnel for outreach-volume questions over the local contacted counter. If the live funnel is unavailable, describe that limitation instead of presenting the local lower bound as the complete sending total.

Limits of the connector

Tool availability is the registered reference above, not every action in the Lumnis interface. There is no general MCP tool here for pausing a prospect, creating or editing a recurring pipeline, deleting arbitrary records, reading mailbox messages, controlling sequence lifecycles, or creating, enrolling accounts in, pausing, or running an account monitor. Use the appropriate dashboard workflow for operations the connector does not expose.

Research can be incomplete, stale, or missing a source. Provider reads can fail independently of the core Lumnis record. Async launches and paid writes can outlive a client timeout. Preserve IDs and successful results, surface uncertainty, and confirm any additional spend or outreach rather than turning a missing result into an automatic retry.