Skip to main content
Glama
751,085 tools. Updated 2026-11-06 12:28

"CRM" matching MCP tools:

  • Get workspace record counts, opportunity pipeline totals by stage, and user-timezone-aware task due status.
    ConnectorAPI key
  • Get the current workspace schema for one CRM entity, including active custom fields, choice options, filters, and relationships.
    ConnectorAPI key
  • Turn 1 to 100 buyer-supplied US brand signal rows into unsent HubSpot, Salesforce, or generic CRM field proposals while preserving evidence IDs and URLs. No CRM credentials, network calls, proxy, LLM, identity resolution, or arbitrary expressions. — $0.05/call, x402 (USDC on base).
    ConnectorNo auth
  • Change an existing automation by id. action=disable stops it firing (use this to turn off a misbehaving rule); action=enable resumes it; action=delete removes it. To read one, use relm_get_automation. To change a rule's trigger/conditions/actions, delete and recreate.
    Connector
    Destructive
    No auth
  • Change an existing pipeline by key or pl_ id. action=rename changes its display `name` and/or its key (pass `new_key`) - deals link by internal id, so they follow a re-key automatically; action=set_default makes it the workspace default; action=delete removes it (fails if deals still use it - move them first). To read one, use relm_get_pipeline.
    Connector
    Destructive
    No auth
  • Replace the categories on one or more accounts. Valid categories: CUSTOMER, PROSPECT, OPEN_OPPORTUNITY, CLOSED_LOST, CHURNED, PARTNER, COMPETITOR, OTHER. An account can carry several; this call removes every category not listed, so each account ends up with exactly the given ones. Pass the full set in categories; category is the older single-value form, used only when categories is empty. To clear an account's categories use BulkRemoveAccountCategories. Accounts are identified by internal UUID, not name or CRM id. Returns updated_count plus skipped_account_ids: an account is skipped when the id does not exist in this workspace, so a non-empty skipped list means those ids were wrong, not that the write failed. To attach tags use the Tagging service instead. Use when: Use when the user asks to re-classify accounts outright — 'move Acme to Prospect', 'these are only Partners'. To add a category while keeping the existing ones ('also mark Acme as a Partner') use BulkAddAccountCategories; to drop one use BulkRemoveAccountCategories. Resolve account UUIDs first via search_accounts_with_filters or get_accounts_by_ids; never guess them. This writes to the workspace and is visible to every user in it, so confirm the account list with the user before calling when the selection came from an ambiguous search. Behavior: destructive workspace_id / user_id are injected from request headers.
    Connector
    Destructive
    OAuth

Matching MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to manage a fully customizable CRM, including contacts, companies, sales pipelines, custom objects and fields, file uploads, and data relationships via MCP over HTTP.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI agents and IDE clients to query CRM case, customer, and order data and to perform guarded actions such as issuing refunds, updating cases, and drafting customer emails.
    6
    MIT

Matching MCP Connectors

  • Your own CRM, fully customizable and agent-driven. Start with contacts, companies and a sales pipeli

  • Ragently CRM: companies, contacts, deals, tasks and notes for your AI assistant.

  • The CRM pipeline as a board: every stage in board order with how many contacts sit in it, plus a count of contacts with no stage. A "deal" here is a contact in a pipeline stage — there are no deal amounts. List the contacts in one stage with search_leads (stage).
    ConnectorAPI key
  • Find arbitrage opportunities on Polymarket via monotonicity violations + partition-sum checks. Call with NO args for a `trending_scan` of the top ~200 markets by weekly volume; pass `event` for the strongest per-event partition_check, or `topic` for a themed cross-event scan. `event` (recommended for a specific market): pass a Polymarket event slug like "fed-decision-may-2026" or "when-will-bitcoin-hit-150k"; walks child markets, checks date-axis / threshold-axis ordering AND computes the partition_check (sum of YES prices across mutually-exclusive legs — should ≈1; deviations >3pp emit a BUY/SELL EVERY LEG signal). `topic` (for cross-event scanning): pass a seed question like "Strait of Hormuz traffic returns to normal" or "Fed rate decision"; searches related events across the platform, flattens markets, runs the comparator on the union. Cross-event mode catches "...by May 31" vs "...by Jun 30" patterns that single-event misses. SEMANTIC ANCHOR: cross-event pairs require ≥0.30 Jaccard similarity on question tokens (prevents Powell-Fed-Pause being paired with Powell-DOJ-probe); skipped_low_similarity surfaces the rejected pair count. PARTITION FILTER: drops will-person-X / will-manager-Y / will-someone-else- placeholder slugs; partitions with >20% placeholder fraction return null arb signal. Response: opportunities[] (gap_pp, suggested_trade, reasoning, monotonicity violation context), and in event mode partition_check{sum_yes_prices, gap_from_1, placeholders_filtered, suggested_trade}. FEES: every opportunities[] row and partition_check.arbitrage carry edge_pp_gross (== gap_pp / overround_pp), fees_pp, edge_pp_net, net_positive, plus polymarket_fee_pp, fee_basis and fee_categories[]. BOTH cost components are modeled: Polymarket's own per-category TAKER FEE (fee = shares × rate × p × (1-p), rates crypto 0.07 / sports-economics-culture-weather-other 0.05 / finance-politics-mentions-tech 0.04, geopolitics and world events fee-free; verified against Polymarket's own docs as of 2026-09-13) and Polygon gas (~$0.02/leg). The taker fee dominates: ~$1.75 per 100 shares on a crypto market at 50c versus $0.02 of gas, so rows that looked profitable before fleet #1927 may now show net_positive:false — that is the correction, not a regression. Each leg is priced at ITS OWN market's rate and price (the fee curve peaks at 50c and falls toward both extremes). fee_basis says where the rate came from: 'payload' (read off the market, the normal case), 'category' (mapped from its fee category), 'fee_free', or 'fallback' (rate unknown — charged at the modal 0.05 rather than assumed free, so an unreadable market is never reported as costless). Where fill_check reprices against live depth, this does NOT double-count that spread cost. FILL CHECK: when the partition signal fires, arbitrage.fill_check prices it against live CLOB depth (theoretical_edge_pp_at_book vs realizable_edge_pp at 1000 shares/leg, thin_legs[]) — realizable_edge_pp ≤ 0 means the overround exists only at last-trade, not in the book; do not trade it. For custom sizing use polymarket_fill_risk.
    ConnectorNo auth
  • Sets up a monitor: a check Manifold repeats on a schedule, keeping each result so it can report what changed. Urgent changes reach the user as an email alert. Show the monthly cost from preview first, then create it once the user agrees. Give it a description saying why the user wants it, so an agent reading its changes later knows what to do with them. Use when: "monitor this every week", "keep an eye on X", "tell me when Y changes", "check Z every hour", or the user ran the same check by hand before and wants it repeated. Not for: a one-off look, call the tool itself (reddit_search_posts, seo_get_page, seo_get_position, ads_get_advertiser_ads). Reading what a monitor found, use monitoring_get_changes. Returns: Record. monitor (monitor_id, name, description, preset, status, cadence, fields, est_credits_check, est_credits_month, next_check_at), created (false on preview). The first check runs within five minutes and records a starting point; changes are reported from the second check on. Fields by preset: mentions {keywords (up to 10), platforms (reddit, linkedin, instagram, tiktok, youtube; default reddit), communities (Reddit, every new post read in full), pages (1 to 3 per community per check)}, where Instagram searches each keyword as one hashtag ("acme crm" reads #acmecrm), so use a keyword people tag; social_accounts {accounts [{platform (twitter, linkedin, instagram, tiktok, youtube, facebook), account (handle, or URL for facebook and linkedin)}] (1 to 10)}; reviews {items [{source app_store or google_play, app_id} or {source google_maps, place_id or cid} or {source google_shopping, product_id, gid}] (1 to 5), stars, location}; website_changes {pages (1 to 10 URLs), mode (new_items: new links under the page and prices; any_change: new text), words}; ads {brands (1 to 5, a website works best), platforms (facebook, google, linkedin, tiktok)}; google_rankings {site, keywords (1 to 50), location}; ai_visibility {brand, aliases (other names for the brand, up to 5), domain (the brand's site, for citation share), questions (1 to 25; ones that name the brand are counted apart), competitors (up to 9), engines, samples (1 to 3), location, language}. cadence is hourly, daily or weekly; checks repeat from the first one. A bad field is InvalidTarget naming it. Cost: 0 credits to create. Each check charges for the calls it makes at their own prices, shown as est_credits_check and est_credits_month. Monitor checks read live data, never the cache. Example: {"preset": "mentions", "fields": {"keywords": ["acme crm"], "platforms": ["reddit", "linkedin"]}, "description": "Threads asking for a CRM, to answer while they are fresh.", "preview": true}
    ConnectorAPI key
  • Returns a paginated list of corporate entities in the TunnelMind surveillance database. Includes data categories, estimated data value, and industry classification. Useful for enumerating the surveillance ecosystem by sector. Use this tool when: - You want to enumerate all entities in a specific industry (e.g., all ad-tech companies). - You need a dataset of surveillance entities for analysis or reporting. - You are building a comprehensive surveillance landscape map. Do NOT use this tool when: - You need the full profile of a specific entity — use `get_entity` instead. - You are searching by entity name — use `search` instead. - You need domain-level data — use `list_domains` instead. Inputs: - `industry` (query, optional): Filter by industry classification. Examples: `ad_tech`, `analytics`, `data_broker`, `social`, `crm`. - `limit` (query, optional): Results per page. Max 100 (paid), 20 (free). Default 50. - `cursor` (query, optional): Pagination cursor from previous response's `next_cursor`. Returns: - Array of entity list items (slug, name, parent_company, industry, data_categories, data_cost_usd). - `meta.has_more` and `meta.next_cursor` for pagination. Cost: - Free tier: up to 20 results/page. Anonymous (no key): 10/min, 100/day. Free key: 50/day. Pro/enterprise: up to 100 results/page, included in plan. Latency: - Typical: <150ms, p99: <400ms.
    ConnectorNo auth
  • Check whether a TempGuru quote request reference was received by the CRM or durably queued. Use only after the buyer personally submitted a TempGuru website form and received a TG reference, or for a historical reference. The authless MCP request_quote handoff does not create a reference. This v1 status stub reports received/queued only; it does not yet expose quote_sent or won. <examples>get_quote_status(reference='TG-ABC234')</examples> <hints>Status records are retained for 90 days. A not-found result does not prove the CRM lead is absent; follow up with the reference at megan@tempguru.co.</hints>
    ConnectorNo auth
  • Send a one-off LinkedIn message to a specific saved contact outside any campaign. Prefer contact_id; Salesbot resolves the LinkedIn identifier internally. A random delay, daily/hourly limits, allowed hours and human approval are enforced. Refused with code DUPLICATE_RECENT_MESSAGE (and the campaign name + date) when a campaign of this LinkedIn account already messaged the person within the last 30 days; to continue an existing conversation use reply_to_chat.
    ConnectorAPI key
  • Update an existing pipeline stage's name, default probability, or WIP limit. Provide the stage id (from list_pipeline_stages) and ONLY the fields to change — omitted fields keep their current value; wipLimit null removes the limit. A name cannot be blank and must be unique among stages (409 CONFLICT otherwise). Stages cannot be created here, and stage order and terminal behavior are fixed. The result echoes the operating workspace.
    Connector
    Destructive
    No auth
  • Create new guides Create one or more new guides based on provided queries. Each guide targets exactly ONE engine and ONE analysis mode, chosen with the optional `source` field (default `google`). How to request each guide type: 1. Google SERP guide (1 credit per guide): omit `source`, or pass `source: "google"`. Example payload: {"queries": ["best crm"], "lang": "en-us"} 1bis. Google AI Overview guide (1 credit per guide). Two modes, like AI engines: `source: "google_ai_overview"` builds the guide from the TEXT of Google's AI answers (AI Overview, completed with AI Mode answers) ; `source: "google_ai_overview_citations"` builds it from the content of the web SOURCES those answers cite (recommended for GEO). Same language/country parameters as a Google SERP guide, 1 credit per guide in both modes. Example payload: {"queries": ["best crm"], "lang": "en-us", "source": "google_ai_overview_citations"} 2. LLM ANSWER guide (4 credits per guide): pass the engine name alone, e.g. `source: "chatgpt"`. The guide is built from the answer text the AI generates for the query. Example payload: {"queries": ["best crm"], "lang": "en-us", "source": "chatgpt"} 3. LLM CITATIONS guide (4 credits per guide) [RECOMMENDED AI mode]: pass the engine name with the `_citations` suffix, e.g. `source: "chatgpt_citations"`. The guide is built from the content of the web pages the AI cites in its answer. Example payload: {"queries": ["best crm"], "lang": "en-us", "source": "chatgpt_citations"} Which AI mode to pick? For GEO (getting a page visible in AI answers), prefer `<engine>_citations`: AI engines send traffic by CITING pages as sources, so the winning move is to look like the pages they cite. The answer-text mode (`<engine>` alone) is mostly useful to analyze how the AI phrases its own answer. When in doubt, pick `<engine>_citations`. The same two modes exist for every AI engine (chatgpt, perplexity, claude, gemini, grok, mistral, deepseek). To optimize the same page for several engines or modes (e.g. Google AND ChatGPT answers AND ChatGPT sources), create one guide per source value on the same query. IMPORTANT, HOW TO READ THE RESPONSE OF THIS ENDPOINT, WHICH SPENDS CREDITS. Queries listed in `guidesFailed` are PROVEN not to have produced a guide and their credit was given back (unless the account has unlimited credits, where nothing was reserved): re-sending them is free and correct. Queries listed in `guidesUnknown` have an UNDECIDABLE outcome and their credit is deliberately KEPT, because the guide was most likely written: DO NOT re-send them, you would pay for the same guide twice. Look them up in `GET /api/v1/guides` after a few minutes instead, and contact support if nothing shows up. Finally, a `200` is NOT a promise that every query produced a guide: compare `guides.length` with the number of queries you sent, never read `success` alone, and never re-send a query just because it is missing from `guides`.
    ConnectorNo auth
  • Push leads into a connected destination: 'close' (CRM — uses the account's saved field mapping), 'ghl' (GoHighLevel sub-account), 'google_sheets' (new spreadsheet, or pass spreadsheet_id for one LeadMarina created before), or a file — 'csv' | 'xlsx' | 'json' (a 7-day download link in the answer; not emailed). Exports EITHER one search's leads (pass search_id) or the whole library (set all=true). Either can be narrowed with the same filter rows as query_leads — with search_id they apply within that search. Leads go out best-ranked first (rank, then id), the order of the leads table. LIMITS PER CALL, which differ by destination because CRMs take one API call per lead: csv/xlsx 50,000 · json 25,000 · google_sheets 5,000 · close/ghl 1,000. For a big library going to a CRM, export csv and import the file instead. If more leads match than the limit, the response sets truncated=true and returns next_cursor — relay that to the user, the export was partial; to send the next batch, call export_leads again with the SAME destination, search_id or all, and filters, plus cursor=next_cursor — for google_sheets also spreadsheet_id from this response, or the next batch goes into a new spreadsheet (up to 50,000 leads a spreadsheet; past that the response has no spreadsheet_id and the next batch starts a new one, or export csv). A next_cursor with not_sent means the destination's time limit cut this batch short: the same call with that cursor sends the rest. An all=true export spread over several calls reads the library live, so a lead that a search running between calls finds again can be skipped or sent twice; for one consistent copy, export the library in a single csv/xlsx (up to 50,000 leads) or json (up to 25,000) call while no search is running. Close, GoHighLevel and a LeadMarina-created sheet passed as spreadsheet_id UPDATE previously exported leads in place (matched by Google CID), never touching the user's own CRM notes/columns — unless update_existing is false (then Close skips leads it already has, and a sheet appends every row); a file or a new sheet is a fresh copy every time — so do not repeat a call that succeeded. Or pass campaign_id instead of search_id to export one advanced search's leads.
    Connector
    Destructive
    No auth
  • List the cards on YOUR agency's CRM pipeline boards (Kanban), with each board's own stage names and card counts. Boards: lead, buyer, seller, tenant, nurture (each card is a contact) and property (each card is a listing). Stage names are whatever the agency renamed them to, so read them from the reply rather than assuming. Call with no pipeline for a summary of every board - use this to answer "what's in my pipeline?" or "how many buyers do I have?". Call with a pipeline for that board's cards, newest activity first. This is the board view. For enquiries that have just arrived and have not been worked yet, use my_leads instead. Returns the WHOLE agency's boards, not one agent's cards: CRM access belongs to the agency, not to a person. Requires a linked PropertyList account (or an agency API key); only ever returns the calling agency's own data.
    ConnectorNo auth
  • Rapprochement EN LOT de fiches mal identifiées (CRM, tableur, export CSV) vers leur SIREN. À utiliser pour une LISTE de sociétés à identifier ("retrouve les SIREN de ces 200 clients"). Pour UNE société cherchée par son nom, search_companies, qui rend des résultats classés ; celui-ci rend une décision, et refuse de trancher quand il n'est pas sûr. Chaque fiche revient avec un status : - resolved : SIREN certain. - review : plusieurs candidats plausibles ou nom trop générique ; les candidats sont retournés et le choix revient à l'utilisateur. - no_match : aucune correspondance. reason explique un review : ambiguous_candidates, weak_name_overlap, shared_domain (site partagé par un réseau ; domain_company_count dit combien de sociétés, fournir un nom ou un code postal), missing_name, invalid_domain, domain_no_match, lookup_failed (panne à rejouer, PAS une absence de correspondance). Conseils : domain (domaine ou URL) résout seul quand il désigne une seule société. Le code postal double quasiment le taux de rapprochement. Un mot en trop dans le nom ("Carrefour Massy") nuit plus qu'un nom tronqué. Un siren, siret ou numéro de TVA français est résolu sans recherche. COÛT en crédits : 0 (limite par minute seule) ; au quota : 1 unité par société distincte fournie (records[].siren) ou résolue. Retourne results[] (ordre d'entrée, avec l'id fourni) et summary{total, resolved, review, no_match}.
    ConnectorNo auth
  • Synchronize one provider-safe page (at most 500) of the API-key owner's 1st-degree LinkedIn relations into the local workspace cache. This is a provider read, not a LinkedIn people search, and does not consume the search quota. The server persists continuation state and atomically enforces a 15–20 minute delay, four-page hourly cap, and twelve-page daily cap across UI and MCP. Respect RELATIONS_SYNC_PROTECTED retry_after_seconds before continuing.
    ConnectorAPI key
  • Look up a person or company in the user's connected HubSpot CRM, live, by email address, domain, or name. Use this for 'what do I have on dshah@hubspot.com', 'is gusto.com in the CRM', 'is Acme a customer', or 'do we have a contact named Jane Doe'. An email finds that contact and the company at its domain; a domain finds the company and the contacts at it; anything else is a name search over both. Returns the matching records with their CRM properties and a url to open each in HubSpot. lifecyclestage says where a record stands (subscriber, lead, marketingqualifiedlead, salesqualifiedlead, opportunity, customer, evangelist, other), so 'a customer' means lifecyclestage is customer. found=false with no errors means the CRM has no such record. For aggregate questions over many records use ask_about_hubspot_contacts or ask_about_hubspot_companies instead.
    ConnectorNo auth
  • Sends a message from a user to the VertoDigital team and returns a reference ID. The message lands in the team's CRM and inbox, and the team replies to fromEmail, normally within one business day. Use it for service questions, partnerships, press and careers, or to request the free Pipeline Readiness Assessment: set topic: "assessment" and put the company and main pipeline challenge in message. If the user only wants contact details, use vertodigital_get_contact instead. Call it only with the user's consent, using their real name and email. Pass organization whenever the user names their company; it is saved as the company on the CRM record. Every call creates a new enquiry, so do not retry a call that succeeded. Calls are rate-limited: over the limit, the tool returns an isError result with a retry delay in seconds. No authentication required.
    ConnectorNo auth
  • Merge a duplicate CRM company into another one (e.g. 'Škoda JS' into 'Škoda Group'). All people move to keep_crm_company_id, empty details are filled from the duplicate, account notes are joined, the duplicate's name is remembered as an alias so future leads with that name land in the kept company, and the duplicate is deleted. Cannot be undone — only merge when both records are clearly the same organisation (check with get_crm_company), and confirm with the user when unsure. Prefer keeping the company imported from LinkedIn.
    Connector
    Destructive
    API key