L Harness MCP Server
Run a self-hosted L Harness LINE Official Account CRM from an MCP client: friends, tags, scenarios, broadcasts
Send email and manage contacts, campaigns, segments and workflows in a Plunk project
Official · Plunk TypeScript Local · stdio CommunicationCRM and sales
58 popularity score ★ 5.6k ↓ 1.4k/wk
Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs PLUNK_API_KEY. Replace each <NAME> with your value.
claude mcp add plunk -e PLUNK_API_KEY=<PLUNK_API_KEY> -- npx -y @plunk/mcp{
"mcpServers": {
"plunk": {
"command": "npx",
"args": [
"-y",
"@plunk/mcp"
],
"env": {
"PLUNK_API_KEY": "<PLUNK_API_KEY>"
}
}
}
}{
"mcpServers": {
"plunk": {
"command": "npx",
"args": [
"-y",
"@plunk/mcp"
],
"env": {
"PLUNK_API_KEY": "<PLUNK_API_KEY>"
}
}
}
}{
"servers": {
"plunk": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@plunk/mcp"
],
"env": {
"PLUNK_API_KEY": "<PLUNK_API_KEY>"
}
}
}
}[mcp_servers.plunk]
command = "npx"
args = ["-y", "@plunk/mcp"]
[mcp_servers.plunk.env]
PLUNK_API_KEY = "<PLUNK_API_KEY>"gemini mcp add --scope user -e PLUNK_API_KEY=<PLUNK_API_KEY> plunk npx -- -y @plunk/mcpPLUNK_API_KEY |
Required: Project secret key (sk_...); the server will not start without it and rejects pk_ keys. |
|---|---|
PLUNK_API_URL |
Optional: API base URL; defaults to https://next-api.useplunk.com, set it for self-hosted Plunk. |
PLUNK_PUBLIC_KEY |
Optional: Public key (pk_...) so plunk_track_event makes one request instead of two. |
PLUNK_READ_ONLY |
Optional: When true, only the 16 read tools are registered (same as --read-only). |
PLUNK_ALLOW_UNCONFIRMED_SENDS |
Optional: When true, sends skip the confirmation prompt; meant for headless use. |
PLUNK_MCP_API_KEY |
Optional: Overrides PLUNK_API_KEY when that name is already used in the environment. |
PLUNK_MCP_API_URL |
Optional: Overrides PLUNK_API_URL for the same reason. |
The Plunk MCP server is the email platform's own connector, published as @plunk/mcp from the main useplunk/plunk repository. It runs locally over stdio and calls the Plunk API with a project's secret key, so an assistant can look up and edit contacts, send transactional messages, draft, test and send campaigns, create segments and templates, and check sender domains and campaign statistics.
A large share of its 42 tools deal with automation workflows: an assistant can create a workflow, add steps of every type the dashboard builder has (send email, delay, wait for event, condition, update contact, webhook, exit), connect and disconnect them, check the graph for problems, enable it and inspect individual runs. Step settings are validated by the server before they are stored, since the Plunk API itself does not check them.
It works against the hosted Plunk service or a self-hosted instance. Without PLUNK_API_URL it talks to https://next-api.useplunk.com, the default set in its config.ts; the server also refuses to start when handed a public pk_ key in place of the secret sk_ key (apps/mcp/src/config.ts, v0.16.0).
| Runtime | Node.js |
|---|
Node.js with npx. A Plunk project, hosted or self-hosted, and its secret API key (sk_...) from Settings → API Keys in the dashboard. Self-hosted instances also need PLUNK_API_URL pointing at their API domain.
Adding or removing sender domains is left out on purpose; domain tools only read. Billing, project deletion and key rotation cannot be reached, as those need a dashboard session. Sending a campaign, sending an email to more than one recipient, enabling a workflow with email steps and starting a workflow run all ask the user to confirm; clients that cannot show that prompt cannot send unless PLUNK_ALLOW_UNCONFIRMED_SENDS is set. A workflow can only be deleted while disabled, and enabling one is refused while its check reports errors.
Teams already sending email through Plunk who want an assistant to handle contact upkeep, campaign drafting and workflow building without the dashboard. Because the secret key gives full access to a project, those who only want reporting should run it with PLUNK_READ_ONLY=true, which leaves only the 16 read tools, or point it at a separate project. People on another email provider need that provider's own server; this one only reaches Plunk.
plunk_list_contactsplunk_get_contactplunk_verify_emailplunk_list_templatesplunk_list_campaignsplunk_get_campaignplunk_get_campaign_statsplunk_list_segmentsplunk_list_domainsplunk_check_domainplunk_list_workflowsplunk_get_workflowplunk_check_workflowplunk_list_workflow_fieldsplunk_list_workflow_executionsplunk_get_workflow_executionplunk_create_contactplunk_update_contactplunk_subscribe_contactplunk_unsubscribe_contactplunk_delete_contactplunk_send_emailplunk_track_eventplunk_create_templateplunk_create_campaignplunk_test_campaignplunk_send_campaignplunk_cancel_campaignplunk_create_segmentplunk_create_workflowplunk_update_workflowplunk_duplicate_workflowplunk_delete_workflowplunk_add_workflow_stepplunk_add_workflow_stepsplunk_update_workflow_stepplunk_delete_workflow_stepplunk_connect_workflow_stepsplunk_disconnect_workflow_stepsplunk_set_workflow_enabledplunk_start_workflow_executionplunk_cancel_workflow_executions