{
  "slug": "io-github-linked-api-linkedapi-mcp",
  "name": "Linked API",
  "auditedAt": "2026-11-02T12:22:36Z",
  "version": "2.3.21",
  "ecosystem": "npm",
  "package": "@linkedapi/mcp",
  "disclaimer": "Automated smoke test, not a security guarantee.",
  "complete": true,
  "checks": {
    "versionPin": {
      "status": "pass",
      "detail": "Pinned npm @linkedapi/mcp@2.3.21",
      "version": "2.3.21"
    },
    "vulnerabilities": {
      "status": "pass",
      "detail": "No critical, high, or medium advisories were returned.",
      "critical": 0,
      "high": 0,
      "medium": 0,
      "low": 0,
      "packagesScanned": 97
    },
    "license": {
      "status": "pass",
      "detail": "MIT",
      "spdx": "MIT"
    },
    "installScripts": {
      "status": "warn",
      "detail": "Install-time scripts: prepare",
      "scripts": [
        "prepare"
      ]
    },
    "secrets": {
      "status": "pass",
      "detail": "No credential patterns in the published artifact.",
      "findings": []
    },
    "packageSize": {
      "status": "pass",
      "detail": "738175 bytes",
      "bytes": 738175
    },
    "activity": {
      "status": "pass",
      "detail": "Active 7 days ago.",
      "ageDays": 7
    },
    "sandbox": {
      "status": "pass",
      "detail": "MCP handshake completed. 68 tools listed.",
      "starts": true,
      "handshake": true,
      "timeToReadyMs": 311,
      "tools": [
        {
          "name": "send_message",
          "description": "Allows you to send a message to a person (st.sendMessage action). Provide either personUrl or threadId (threadId replies into an existing conversation thread and takes precedence). Optionally pass manageConversation to archive, star, or mut"
        },
        {
          "name": "sync_inbox",
          "description": "Recommended first step before reading messages. Enable whole-inbox monitoring so every incoming conversation can be polled with get_inbox (st.syncInbox action). Run once per account, before sending messages whose replies you want to read; o"
        },
        {
          "name": "get_inbox",
          "description": "Default way to read LinkedIn messages (standard and Sales Navigator), newest first. Without personUrl returns new messages across all conversations since inbox monitoring was enabled; requires sync_inbox (or nv_sync_inbox) once per account."
        },
        {
          "name": "sync_conversation",
          "description": "Loads this person's earlier message history (st.syncConversation action). Call once per person; repeating it within 24 hours returns quickly. Do not call it to check for new messages \u2013 use get_inbox. After it completes, read the history wit"
        },
        {
          "name": "get_conversation",
          "description": "Legacy. Prefer get_inbox with personUrl. Retrieve a conversation with a LinkedIn person via standard LinkedIn messaging. Returns the conversation immediately if it has already been synced. If the conversation has not been synced yet, this t"
        },
        {
          "name": "sync_network",
          "description": "Enable background network monitoring so connection events can be polled with get_network (st.syncNetwork action). Run once per account; only changes that happen after it is enabled are captured.\n\nLinked API actions are queued into a cloud-b"
        },
        {
          "name": "get_network",
          "description": "Get connection events from the monitored network, newest first. Requires network monitoring to be enabled once with sync_network. Event types: \"connectionAccepted\" (a connection request you sent was accepted), \"connectionAdded\" (a new conne"
        },
        {
          "name": "manage_conversation",
          "description": "Archive, star, or mute a conversation thread by threadId (st.manageConversation action). Provide the threadId as returned by get_inbox and the operation to perform.\n\nLinked API actions are queued into a cloud-browser workflow and may take s"
        },
        {
          "name": "check_connection_status",
          "description": "Allows you to check the connection status between your account and another person (st.checkConnectionStatus action).\n\nLinked API actions are queued into a cloud-browser workflow and may take several minutes. The server returns immediately a"
        },
        {
          "name": "retrieve_connections",
          "description": "allows you to retrieve your connections and perform additional person-related actions if needed (st.retrieveConnections action). Every person in the result carries urn \u2014 their permanent LinkedIn member URN (urn:li:member:<id>), or null when"
        },
        {
          "name": "send_connection_request",
          "description": "Allows you to send a connection request to a person (st.sendConnectionRequest action). If this workflow is still running, do not retry this tool; retrying can queue duplicate connection request attempts for the same person.\n\nLinked API acti"
        },
        {
          "name": "withdraw_connection_request",
          "description": "Allows you to withdraw the connection request sent to a person (st.withdrawConnectionRequest action). If this workflow is still running, do not retry this tool; retrying can queue duplicate withdrawal attempts for the same person.\n\nLinked A"
        },
        {
          "name": "retrieve_pending_requests",
          "description": "Allows you to retrieve pending connection requests sent from your account. (st.retrievePendingRequests action). Every person in the result carries urn \u2014 their permanent LinkedIn member URN (urn:li:member:<id>), or null when LinkedIn does no"
        },
        {
          "name": "retrieve_invitations",
          "description": "Retrieves incoming connection, company-follow, and newsletter-subscription invitations received by your account (st.retrieveInvitations action). Every invitation carries urn \u2014 the permanent LinkedIn member URN (urn:li:member:<id>) of the pe"
        },
        {
          "name": "accept_invitation",
          "description": "Accepts an incoming connection, company-follow, or newsletter-subscription invitation (st.acceptInvitation action). Set invitationType and provide only its matching URL. If this workflow is still running, do not retry this tool; retrying ca"
        },
        {
          "name": "ignore_invitation",
          "description": "Ignores an incoming connection, company-follow, or newsletter-subscription invitation (st.ignoreInvitation action). Set invitationType and provide only its matching URL. If this workflow is still running, do not retry this tool; retrying ca"
        },
        {
          "name": "remove_connection",
          "description": "Allows you to remove a person from your connections (st.removeConnection action). If this workflow is still running, do not retry this tool; retrying can queue duplicate removal attempts for the same person.\n\nLinked API actions are queued i"
        },
        {
          "name": "search_companies",
          "description": "Allows you to search for companies applying various filtering criteria (st.searchCompanies action). Every company in the result carries urn \u2014 its permanent LinkedIn organization URN (urn:li:organization:<id>), or null when LinkedIn does not"
        },
        {
          "name": "search_people",
          "description": "Allows you to search people applying various filtering criteria (st.searchPeople action). Every person in the result carries urn \u2014 their permanent LinkedIn member URN (urn:li:member:<id>), or null when LinkedIn does not expose it. Every per"
        },
        {
          "name": "search_jobs",
          "description": "Allows you to search jobs applying various filtering criteria (st.searchJobs action). LinkedIn serves either a classic or an AI-powered jobs search, and the two do not offer the same refinements: send filter for the classic one or preferenc"
        },
        {
          "name": "search_posts",
          "description": "Allows you to search posts applying various filtering criteria (st.searchPosts action). Either term or customSearchUrl must be provided, and when customSearchUrl is specified, filter is ignored entirely and only the facets already encoded i"
        },
        {
          "name": "fetch_company",
          "description": "Allows you to open a company page to retrieve its basic information (st.openCompanyPage action). Can optionally retrieve employees, posts and decision makers. The basic information carries urn \u2014 the permanent LinkedIn organization URN of th"
        },
        {
          "name": "fetch_person",
          "description": "Allows you to open a person page to retrieve their basic information and perform additional person-related actions if needed. (st.openPersonPage action). Allows additional optional retrieval of experience, education, skills, languages, post"
        },
        {
          "name": "endorse_person_skill",
          "description": "Endorses one skill by name on a 1st-degree connection's profile. Skill names are in the profile owner's language, regardless of your LinkedIn language. An already-endorsed skill counts as success and is never removed. Every success, includi"
        },
        {
          "name": "endorse_person_skills",
          "description": "Endorses selected skills of a 1st-degree connection, returning each selected skill's name, success and error if it failed. Skill names are in the profile owner's language. Patterns use RE2, are case-insensitive and match anywhere; anchor wi"
        },
        {
          "name": "fetch_post",
          "description": "Open a LinkedIn post and retrieve its data, with optional comments and reactions. (st.openPost action). The author and reposter carry urn \u2014 a member URN (urn:li:member:<id>) for a person actor and an organization URN (urn:li:organization:<i"
        },
        {
          "name": "fetch_job",
          "description": "Open a LinkedIn job and retrieve its details such as company, location, salary, and description (st.openJob action). The result carries urn \u2014 the permanent LinkedIn job posting URN (urn:li:jobPosting:<jobId>) \u2014 which is null when LinkedIn d"
        },
        {
          "name": "react_to_post",
          "description": "Allows you to react to a post using any available reaction type (st.reactToPost action). If this workflow is still running, do not retry this tool; retrying can queue duplicate reaction attempts.\n\nLinked API actions are queued into a cloud-"
        },
        {
          "name": "comment_on_post",
          "description": "Allows you to leave a comment on a post (st.commentOnPost action); returns the comment's URN and URL. If this workflow is still running, do not retry this tool; retrying can post duplicate comments.\n\nLinked API actions are queued into a clo"
        },
        {
          "name": "react_to_comment",
          "description": "React to a comment by commentUrl (like, love, support, celebrate, insightful, funny). If this workflow is still running, do not retry this tool; retrying can queue duplicate reaction attempts.\n\nLinked API actions are queued into a cloud-bro"
        },
        {
          "name": "reply_to_comment",
          "description": "Reply to a comment by commentUrl; returns the reply's URN and URL. If this workflow is still running, do not retry this tool; retrying can post duplicate replies.\n\nLinked API actions are queued into a cloud-browser workflow and may take sev"
        },
        {
          "name": "create_post",
          "description": "Creates a new LinkedIn post with optional mentions and media attachments (st.createPost action). Returns the URL and URN of the new post. If this workflow is still running, do not retry this tool; retrying can create duplicate posts.\n\nLinke"
        },
        {
          "name": "create_repost",
          "description": "Reposts a LinkedIn post, either as is or with your own commentary (st.createRepost action). Returns the URL and URN of the repost itself, which is a post of your own account, not of the post that was reshared. Reposting the same post twice "
        },
        {
          "name": "retrieve_feed",
          "description": "Retrieves posts from the current account's personalized LinkedIn home feed (st.retrieveFeed action). Each post's author and reposter carry urn \u2014 a member URN (urn:li:member:<id>) for a person actor and an organization URN (urn:li:organizati"
        },
        {
          "name": "retrieve_profile_viewers",
          "description": "Retrieves the people who recently viewed the current account's LinkedIn profile (st.retrieveProfileViewers action). Each entry is either identified \u2014 carrying name, publicUrl and urn (a member URN urn:li:member:<id>, null when LinkedIn does"
        },
        {
          "name": "retrieve_ssi",
          "description": "Allows you to retrieve your current SSI (Social Selling Index) (st.retrieveSSI action).\n\nLinked API actions are queued into a cloud-browser workflow and may take several minutes. The server returns immediately after starting the workflow wi"
        },
        {
          "name": "retrieve_performance",
          "description": "Allows you to retrieve performance analytics from your LinkedIn dashboard (st.retrievePerformance action).\n\nLinked API actions are queued into a cloud-browser workflow and may take several minutes. The server returns immediately after start"
        },
        {
          "name": "nv_send_message",
          "description": "Allows you to send a message to a person in Sales Navigator (nv.sendMessage action). Provide either personUrl or threadId (threadId replies into an existing conversation thread and takes precedence). If this workflow is still running, do no"
        },
        {
          "name": "nv_sync_inbox",
          "description": "Recommended first step before reading Sales Navigator messages. Enable whole-inbox monitoring in Sales Navigator so every incoming conversation can be polled with get_inbox (nv.syncInbox action). Run once per account, before sending message"
        },
        {
          "name": "nv_sync_conversation",
          "description": "Loads this person's earlier Sales Navigator message history (nv.syncConversation action). Call once per person. Do not call it to check for new messages \u2013 use get_inbox. After it completes, read the history with get_inbox and personUrl.\n\nLi"
        },
        {
          "name": "nv_get_conversation",
          "description": "Legacy. Prefer get_inbox with personUrl. Retrieve a conversation with a LinkedIn person via Sales Navigator messaging. Returns the conversation immediately if it has already been synced. If the conversation has not been synced yet, this too"
        },
        {
          "name": "nv_manage_conversation",
          "description": "Archive or unarchive a Sales Navigator conversation thread by threadId (nv.manageConversation action). Provide the threadId as returned by get_inbox and the operation to perform.\n\nLinked API actions are queued into a cloud-browser workflow "
        },
        {
          "name": "nv_search_companies",
          "description": "Allows you to search for companies in Sales Navigator applying various filtering criteria. (nv.searchCompanies action). Every company in the result carries urn \u2014 its permanent LinkedIn organization URN (urn:li:organization:<id>), or null wh"
        },
        {
          "name": "nv_search_people",
          "description": "Allows you to search people in Sales Navigator applying various filtering criteria. (nv.searchPeople action). Every person in the result carries urn \u2014 their permanent LinkedIn member URN (urn:li:member:<id>), or null when LinkedIn does not "
        },
        {
          "name": "nv_fetch_company",
          "description": "Allows you to open a company page in Sales Navigator to retrieve its basic information (nv.openCompanyPage action). Can optionally retrieve employees and decision makers. The basic information carries urn \u2014 the permanent LinkedIn organizati"
        },
        {
          "name": "nv_fetch_person",
          "description": "Allows you to open a person page in Sales Navigator to retrieve their basic information (nv.openPersonPage action). The result carries urn \u2014 the person's permanent LinkedIn member URN (urn:li:member:<id>) \u2014 and companyUrn for their current "
        },
        {
          "name": "execute_custom_workflow",
          "description": "Execute a custom workflow definition. Pass a single action with actionType and its parameters at the top level. A single-action or array definition can alternatively be passed in definition. If this workflow is still running, do not retry t"
        },
        {
          "name": "get_workflow_result",
          "description": "Check the current state of a previously started Linked API workflow. Returns the final result when the workflow has completed, otherwise returns the current in-progress snapshot ({status, pendingReason, workflowId, operationName, message})."
        },
        {
          "name": "get_api_usage",
          "description": "Retrieve Linked API usage statistics. Date range must not exceed 30 days."
        },
        {
          "name": "send_feedback",
          "description": "Send product feedback about Linked API straight to the Linked API team. The team welcomes any feedback, positive or negative: use it when the user reports a problem, is unhappy with a result, asks for something Linked API cannot do yet, or "
        },
        {
          "name": "admin_get_subscription_status",
          "description": "Get current subscription status, trial eligibility, and cancellation schedule."
        },
        {
          "name": "admin_get_seats",
          "description": "Get active subscription seats. Each seat allows one connected LinkedIn account. Seat types: core (standard) and plus (includes Sales Navigator)."
        },
        {
          "name": "admin_set_seats",
          "description": "Set number of subscription seats. Returns checkout link if no active subscription, otherwise updates immediately."
        },
        {
          "name": "admin_get_accounts",
          "description": "Get all connected LinkedIn accounts and pending connection sessions."
        },
        {
          "name": "admin_reparse_account_info",
          "description": "Refresh stored profile information for a connected account. Starts a background reparse workflow and returns workflowId."
        },
        {
          "name": "admin_create_reconnection_session",
          "description": "Create a reconnection session for an account with status reconnection_required. Returns reconnectionSessionId and reconnectionLink."
        },
        {
          "name": "admin_connect_account",
          "description": "Create a connection session to connect a new LinkedIn account. Returns a sessionId and connectionLink that must be opened in a browser."
        },
        {
          "name": "admin_get_connection_session",
          "description": "Get connection or reconnection session status by session ID."
        },
        {
          "name": "admin_cancel_connection_session",
          "description": "Cancel a pending connection or reconnection session."
        },
        {
          "name": "admin_disconnect_account",
          "description": "Disconnect a LinkedIn account. This action is irreversible \u2014 the account must be reconnected from scratch."
        },
        {
          "name": "admin_regenerate_token",
          "description": "Regenerate identification token for an account. The old token becomes invalid immediately."
        },
        {
          "name": "admin_get_limits_defaults",
          "description": "Get system default rate limits."
        },
        {
          "name": "admin_get_limits",
          "description": "Get configured rate limits for an account."
        },
        {
          "name": "admin_get_limits_usage",
          "description": "Get current usage against configured rate limits for an account."
        },
        {
          "name": "admin_set_limits",
          "description": "Set rate limits for an account. Only specified limits are created or updated; other limits remain unchanged. Categories: stPersonProfileViews, stCompanyPageViews, stConnectionRequests, stMessages, stSearchQueries, stReactions, stComments, s"
        },
        {
          "name": "admin_delete_limits",
          "description": "Delete specific rate limits for an account. Each removed category/period has no limit until set again. Use admin_reset_limits to restore all default limits for the account."
        },
        {
          "name": "admin_reset_limits",
          "description": "Reset all rate limits for an account to the system defaults."
        },
        {
          "name": "get_changelog",
          "description": "Read the public Linked API changelog: what was released and when, newest first. Use it when the user asks what is new or recently changed in Linked API, or whether Linked API supports something yet \u2014 a capability may have shipped recently, "
        }
      ],
      "toolCount": 68,
      "resourceCount": 0,
      "promptCount": 5,
      "stderrExcerpt": "stdio transport connected",
      "network": "disabled",
      "networkAttemptedWhileOffline": false,
      "outboundHosts": [],
      "requiresCredentials": false
    }
  },
  "tier": "tested",
  "tierReason": "Sandbox handshake completed, with warnings: install scripts present.",
  "logExcerpt": "stdio transport connected"
}