MCP Server

MCP Server

Voyager ships an MCP server that exposes 34 LinkedIn tools over the Model Context Protocol. Any MCP-compatible client — Claude Code, Claude Desktop, Cursor, or your own agent — can call LinkedIn APIs through natural tool use.

Setup

1. Configure .mcp.json

Add the Voyager server to your project’s .mcp.json (or Claude Desktop’s config):

1{
2 "mcpServers": {
3 "voyager": {
4 "command": "bun",
5 "args": ["run", "src/mcp-server.ts"],
6 "cwd": "/path/to/linkedin-voyager",
7 "env": {
8 "VOYAGER_API_URL": "https://li.scaleabm.org",
9 "VOYAGER_API_KEY": "voy_your_api_key_here",
10 "VOYAGER_USER_ID": "your-user-id"
11 }
12 }
13 }
14}

2. Environment Variables

VariableRequiredDescription
VOYAGER_API_KEYYesVoyager tenant API key (voy_ prefix)
VOYAGER_API_URLNoAPI base URL (default: https://li.scaleabm.org)
VOYAGER_USER_IDNoDefault LinkedIn user ID. Can also be set per-tool call

3. Requirements

  • Bun runtime
  • @modelcontextprotocol/sdk (included in project dependencies)
$bun install

You can test the server directly from the command line before connecting an AI client:

$VOYAGER_API_KEY=voy_xxx bun src/mcp-server.ts

The server communicates over stdio — type JSON-RPC messages to interact manually.

Tool Categories

The MCP server registers all 34 tools from Voyager’s chat tool library. Each tool maps directly to one or more Voyager API endpoints.

Profile

ToolDescription
get_my_profileYour own LinkedIn profile with positions and current company
get_profileAny user’s profile by vanity name or profile ID
get_profile_viewersWho viewed your profile recently
ToolDescription
search_peopleSearch people by keywords, company, connection degree
search_companiesSearch companies by keywords
search_jobsSearch job listings
search_groupsSearch LinkedIn groups
search_contentSearch posts and articles

Messaging

ToolDescription
get_conversationsList message threads with pagination
get_conversation_messagesMessages within a specific conversation
send_messageSend a message to a LinkedIn member
mark_conversation_readMark a conversation as read

Connections

ToolDescription
send_connection_requestSend a connection request with optional note
get_received_connectionsPending inbound connection requests
accept_connectionAccept a pending connection request
get_relationship_statusConnection degree, shared connections

Engagement

ToolDescription
like_postLike a post or article
comment_on_postComment on a post
create_postPublish a new post
get_notificationsEngagement notifications (likes, comments, mentions)
get_post_reactionsReactions on a specific post
get_post_commentsComments on a specific post

Posts & Feed

ToolDescription
get_feedYour LinkedIn feed
get_postA specific post by URN

Companies

ToolDescription
get_companyCompany profile and details
get_company_employeesList employees at a company
get_company_postsRecent posts by a company

Groups

ToolDescription
get_groupsGroups you belong to
get_group_membersMembers of a specific group

Session

ToolDescription
get_session_capabilitiesSession health, rate limits, cooldowns
get_network_summaryNetwork stats (connection count, pending invitations)

SalesNav

ToolDescription
salesnav_searchSalesNav lead search with 22 structured filters
salesnav_get_leadDetailed SalesNav lead profile
salesnav_typeaheadResolve names to SalesNav IDs (school, company, industry, etc.)

SalesNav tools require li_a and li_ep_auth_context cookies synced in your session. See the SalesNav guide for details.

Tool Annotations

Tools that mutate LinkedIn state are annotated with destructiveHint: true. MCP clients like Claude Code will prompt for confirmation before executing these:

Destructive ToolWhat it does
send_messageSends a LinkedIn message
send_connection_requestSends an invitation
accept_connectionAccepts a pending invitation
like_postLikes a post
comment_on_postComments on a post
create_postPublishes a new post
mark_conversation_readMarks messages as read

All other tools are annotated with readOnlyHint: true — they only read data and are safe to run without confirmation.

Destructive tools perform real actions on LinkedIn. There is no undo for sent messages, connection requests, or published posts. MCP clients should confirm with the user before calling these tools.

Architecture

The MCP server (src/mcp-server.ts) is a thin adapter:

  1. It imports the same CHAT_TOOLS array used by the AI Chat endpoint
  2. Each tool is registered with the @modelcontextprotocol/sdk McpServer class
  3. Tool calls are routed to the Voyager HTTP API using the configured API key
  4. Results are returned as JSON text content

The server uses stdio transport — the MCP client spawns it as a subprocess and communicates over stdin/stdout. No network ports are opened.

AI Client (Claude Code, etc.)
|
| stdin/stdout (JSON-RPC)
|
MCP Server (bun src/mcp-server.ts)
|
| HTTPS
|
Voyager API (li.scaleabm.org)
|
| Voyager API calls
|
LinkedIn

Example Session

With the MCP server configured, you can ask an AI agent questions in natural language:

You: Who are the CTOs at fintech startups in Berlin?
Claude: I'll search SalesNav for CTOs at fintech startups in Berlin.
[Tool call: salesnav_search]
filters: CURRENT_TITLE="CTO", INDUSTRY="Financial Services",
REGION="Berlin", COMPANY_HEADCOUNT="1-50"
Found 47 leads matching your criteria:
1. Anna Mueller - CTO at PayFlow (Berlin)
2. ...

The AI decides which tools to call, chains them as needed, and formats the results — all through the standard MCP protocol.