Google Search Console integration for Model Context Protocol (MCP)
LeadSync is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Manage Facebook and Instagram lead ad delivery: CRMs, alerts, autoresponders and test leads.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user leadsync-mcp '--' npx -y @leadsync/mcp
# 2 — ask your agent for something these tools do
# get_me, find_accounts, get_connections and 11 more
LeadSync costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. This one runs on your machine: your client starts LeadSync as a process under your own user, with your files and your network, so the tool surface below is what it can do to your computer rather than to a server somewhere else. Its scan result is on the Security tab — read the surface before you approve it.
This is a public server: you run it yourself and this marketplace is not in the path. You need Node.js — the current LTS (24) is the safe choice; npx comes with it. Claude Code registers it in one command; --scope user makes it available in every project. The '--' is in quotes so that PowerShell passes it on.
claude mcp add --scope user leadsync-mcp '--' npx -y @leadsync/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
Nothing is required, but it can take LEADSYNC_API_KEY (LeadSync API key (Account, Settings, API keys). Optional if you ran npx @leadsync/skills login, which saves it to ~/.leadsync/.env.) if you want to set it.
One config entry your client uses to start the process locally. A local server runs with your file system and your network, which is why it is priced without metering.
14 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Read from its source code. A server that builds its tool list when it starts can list more tools than this.
Returns the account (id, email, username, plan level, subscription), the key (name, scope, can_write_accounts, can_test_lead), acting_on_other_account and limits; no balance. Use it first to confirm which account you are working on.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account_id | yes | — |
Admin keys only. Matches email, username or page name, up to 20 accounts, so you can pick an account_id to act on.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| q | string | yes | Search text: email, username or page name |
| account_id | yes | — |
Returns the sources (pages) -> lists graph (each list with active, mapping_set and its destinations) plus the account's connections with their autoresponders. A source's LeadSync page id is page.id; its Facebook id is page.page_fb_id. Use it to find a page_id, list_id or connection_id. It…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account_id | yes | — |
Returns the fields a destination connection accepts, for building a field mapping. For Google Sheets pass sheet_id, the exact TAB NAME inside the spreadsheet, not the spreadsheet id. Ask the human for it (new Google Sheets often use "Sheet1", but a sheet created another way may be "Untitled"); a…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| connection_id | integer | yes | Connection id from get_connections |
| sheet_id | string | no | Google Sheets only: the exact TAB NAME inside the spreadsheet, not the spreadsheet id. Ask the human for it (new Google Sheets often use "Sheet1", but a sheet created another way may be "Untitled") |
| account_id | yes | — |
Lists the account's autoresponders and the connection each is attached to. Every lead through a connection gets every autoresponder on it.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account_id | yes | — |
Lists recent leads, newest activity first, with the delivery status for each destination. The first stop for "why didn't my lead arrive": check for failed, pending or held deliveries. since defaults to 7 days ago and the response echoes the value used as since_used; limit defaults to 50 (max…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| list_id | integer | no | Filter to one LeadSync list id |
| since | string | no | Only items after this time, ISO 8601 with offset or Z, e.g. 2026-10-27T00:00:00Z |
| status | string | no | Filter by delivery status |
| limit | integer | no | Max rows to return (1 to 200) |
| account_id | yes | — |
Lists emails LeadSync sent (lead notifications, autoresponders, system mail). The first stop for "why didn't my lead arrive" when the destination is an email address, or to check an autoresponder fired.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| list_id | integer | no | Filter to one LeadSync list id |
| type | string | no | Filter by email type |
| since | string | no | Only items after this time, ISO 8601 with offset or Z, e.g. 2026-10-27T00:00:00Z |
| limit | integer | no | Max rows to return (1 to 200) |
| account_id | yes | — |
Re-reads the page's lead forms from Meta so newly created forms appear and attached ones are marked; each form's leads_count shows whether it is live, and forms[].questions[] lists its questions (key, label and type): use each key as the form field key when mapping. Takes the LeadSync page id…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page_id | integer | yes | LeadSync page id: sources[].page.id from get_connections (not page.page_fb_id) |
| account_id | yes | — |
Attaches a lead form to a destination connection by creating a list. Send mapping AND settings in this same call: a NEW list immediately replays up to 7 days of that form's leads using the mapping given here, so mapping afterwards delivers the replay unmapped. Idempotent on page, form and…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page_id | yes | — | |
| form_id | yes | Meta lead form id as a digit string, or "catch_all" for every form on the page | |
| form_name | string | no | Required unless form_id is catch_all |
| connection_id | integer | yes | Connection id from get_connections |
| mapping | object | no | Lead field key to destination field, e.g. {"first_name":"First name","phone_number":"Phone"}. Keys are lead keys as delivered (first_name, last_name, full_name, email, phone_number, custom question ke |
| settings | object | no | Per-list destination settings |
| override_limits | boolean | no | Admin keys with write access only: skip account and plan limits (audited) |
| account_id | yes | — |
Pauses or resumes delivery for one list. Resuming can use a source slot and is refused if another active list covers the same form and connection.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| list_id | integer | yes | LeadSync list id from list_leads or attach_form |
| active | boolean | yes | true to resume delivery, false to pause it |
| override_limits | boolean | no | Admin keys with write access only: skip account and plan limits |
| account_id | yes | — |
Sets an EXISTING list's field mapping and/or per-list settings. Replaces the whole mapping with what you send; settings keys are merged. Send settings alone to leave the mapping untouched. An empty mapping object clears it. No tool can read the current mapping, so on a list with mapping_set true…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| list_id | integer | yes | LeadSync list id from list_leads or attach_form |
| mapping | object | no | Lead field key to destination field, e.g. {"first_name":"First name","phone_number":"Phone"}. Keys are lead keys as delivered (first_name, last_name, full_name, email, phone_number, custom question ke |
| settings | object | no | Per-list destination settings |
| account_id | yes | — |
Creates an email autoresponder on a connection. A gated write on another account: it starts emailing the customer's prospects, so wait for the human's yes (on another account there may be no 409 warning). Every lead through the connection receives every autoresponder on it; a 409 lists what is…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| connection_id | integer | yes | Connection id from get_connections |
| name | string | yes | Single line, up to 80 characters |
| subject | string | yes | Single line, up to 255 characters |
| content | string | yes | Plain text (blank-line paragraphs become paragraphs) or HTML per content_format. Tokens like #first_name pass through |
| content_format | string | no | Defaults to text |
| from_name | string | no | Defaults to LeadSync |
| reply_email | string | no | Defaults to the account email |
| acknowledge_shared_connection | boolean | no | Set true only after the human has seen the existing autoresponders from a 409 and agreed they will stack |
| override_limits | boolean | no | Admin keys with write access only: skip plan and quantity limits, never the shared-connection guard |
| account_id | yes | — |
Requeues a Meta lead's failed or held deliveries. Meta leads only, only failed or held legs, refused while the lead is still in flight; duplicates are irreversible so check list_leads first. Delivery is asynchronous (about a minute); poll list_leads.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| leadgen_id | string | yes | Lead id (leadgen_id) exactly as returned by list_leads |
| list_id | integer | no | Only resend this list's delivery |
| account_id | yes | — |
Asks Meta to create a test lead for a list's form. The test lead goes to the list's real destinations; on another account it may email the customer, so ask the human before setting acknowledge_customer_impact. Without it on another account the API answers 400 customer_impact_not_acknowledged.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| list_id | integer | yes | LeadSync list id from list_leads or attach_form |
| acknowledge_customer_impact | boolean | no | Set true only after the human confirmed the customer may be emailed. Required when acting on another account |
| account_id | yes | — |
- Every tool, no call limit
- No card, and mcprush charges nothing for it
- Source published under MIT
- Runs on your machine — nothing of it reaches our gateway
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install LeadSync or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | moderate | capability blast radius (moderate) — client exposure if the model is manipulated | −3 |
| verification-discount | source | publisher verification (provenance) — cryptographic build provenance ties the artifact to its source | −0 |
| coverage-honesty | source | inspection depth (source) — how much of the target the scan could see | −0 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
Tools were statically extracted from the published source (14 recovered), not enumerated from a running server. Tool-poisoning, Unicode-smuggling, capability and toxic-flow analysis ran on this inferred surface, but a mis-parsed registration could be missed or mis-attributed, so tool-derived findings are capped below “confirmed”. To grade the real runtime surface, scan the running server: --command "npx -y <package>".
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. moderate is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| get_me | no tags | |
| find_accounts | no tags | |
| get_connections | no tags | |
| get_destination_fields | no tags | |
| list_autoresponders | no tags | |
| list_leads | no tags | |
| list_email_log | no tags | |
| refresh_forms | external-sink | external-sink: handler sends an HTTP POST (request("POST", …)) at dist/tools/write.js:28 |
| attach_form | external-sink | external-sink: handler sends an HTTP POST (request("POST", …)) at dist/tools/write.js:41 |
| set_list_active | external-sink | external-sink: handler sends an HTTP PATCH (request("PATCH", …)) at dist/tools/write.js:53 |
| set_mapping | external-sink | external-sink: handler sends an HTTP PUT (request("PUT", …)) at dist/tools/write.js:57 |
| create_autoresponder | external-sink | external-sink: handler sends an HTTP POST (request("POST", …)) at dist/tools/write.js:72 |
| resend_lead | external-sink | external-sink: handler sends an HTTP POST (request("POST", …)) at dist/tools/write.js:80 |
| send_test_lead | external-sink | external-sink: handler sends an HTTP POST (request("POST", …)) at dist/tools/write.js:88 |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
The public result for this release does not print the flow graph, so there is nothing to show here. That is not the same as "no paths were found": what the scan did read is above, under coverage.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
Always latest — the install command names no version, so it installs the newest release when it runs; the current release on file is 0.1.1. Pin a release below and the command asks for exactly that one.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish LeadSync can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.