Skip to main content
Glama

LinkedIn MCP Server (Salesbot)

upsert_linkedin_contact

Idempotent

Create a contact from a known LinkedIn profile URL, or return the existing contact when the profile was already imported. Use this when you already know the exact profile URL and do not need to run a search. The contact is saved to a dedicated CRM Imports list and can then be passed to add_contacts_to_campaign. Pass web_research (what you found about their company/person online) and personalization_note (a hook for the outreach message) — both are stored on the contact and fed to the LinkedIn message generator as facts to personalize on. On an existing contact these are MERGED in (they enrich, never blank out existing data).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
companyNoCurrent company. Optional.
list_idNoUUID of an existing lead list to put the contact into (from list_lead_lists). Optional — defaults to the 'CRM Imports' list. For an existing contact this MOVES it into that list.
headlineNoLinkedIn headline. Optional.
positionNoCurrent role/title. Optional.
full_nameNoContact name. Optional when it is not available yet.
profile_urlYesLinkedIn profile URL in the form https://www.linkedin.com/in/...
web_researchNoFree-text research about the person/company found online (news, website, recent events). Used as facts to personalize the outreach. Optional.
prospect_company_idNoUUID returned by list_companies. Links this employee to the stored company and, when that company is in CRM, also adds/links the person to the CRM company.
personalization_noteNoA short note/hook for writing the LinkedIn message (e.g. 'reference their new plant in Brno'). Fed to the message generator. Optional.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / prospect_company_id
      Added value: +{
      +  "description": "UUID returned by list_companies. Links this employee to the stored company and, when that company is in CRM, also adds/links the person to the CRM company.",
      +  "type": "string"
      +}
  2. Changed1 schema field changed
    • addedInput schema / properties / list_id
      Added value: +{
      +  "description": "UUID of an existing lead list to put the contact into (from list_lead_lists). Optional — defaults to the 'CRM Imports' list. For an existing contact this MOVES it into that list.",
      +  "type": "string"
      +}
  3. Changed2 schema fields changed
    • addedInput schema / properties / personalization_note
      Added value: +{
      +  "description": "A short note/hook for writing the LinkedIn message (e.g. 'reference their new plant in Brno'). Fed to the message generator. Optional.",
      +  "type": "string"
      +}
    • addedInput schema / properties / web_research
      Added value: +{
      +  "description": "Free-text research about the person/company found online (news, website, recent events). Used as facts to personalize the outreach. Optional.",
      +  "type": "string"
      +}
  4. Added

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate idempotentHint=true, meaning repeated calls are safe and return existing contact. The description adds crucial context: on existing contacts, `web_research` and `personalization_note` are MERGED in, never blanking existing data. It also mentions the contact is saved to a dedicated CRM Imports list unless list_id is specified. While it doesn't detail all side effects (e.g., moving contact when list_id is provided), it covers key behavioral traits beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph of about 5 sentences. It's front-loaded with the core purpose, then usage guidance, then parameter-specific notes. It's dense but not overly verbose. Each sentence adds value, though it could potentially be split for readability, but it's fine.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 9 parameters and no output schema, the description covers the essential usage: when to use, key parameters' roles, merge behavior, and downstream integration. It might miss some edge cases like required fields or error handling, but given the complexity, it provides sufficient context for correct invocation. Not perfect but strong.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are fully described. The description adds semantic value by explaining the purpose of `web_research` and `personalization_note` as facts fed to LinkedIn message generator, which is not obvious from schema. It also clarifies merge behavior for these fields on existing contacts. This goes beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: create a contact from a known LinkedIn profile URL or return an existing one. It distinguishes itself from search tools by explicitly saying 'when you already know the exact profile URL and do not need to run a search', which differentiates it from siblings like search_linkedin_people.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance on when to use: when the exact profile URL is known and no search is needed. It also names downstream tools (add_contacts_to_campaign) and related lists, and hints at alternatives like import_linkedin_company_list. This is clear and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.