Skip to main content
Glama
AriOliv
by AriOliv

LinkedIn MCP

비공식 Model Context Protocol 서버 for LinkedIn — 프로필, 네트워크 및 연결을 읽고, 사람과 채용 공고를 검색하고, 모든 MCP 클라이언트(Claude 등)에서 메시지를 보낼 수 있습니다.

두 가지 모드로 실행됩니다:

  • HTTP + OAuth 2.1 (권장) — 서버는 MCP 클라이언트용 OAuth 2.1 인증 서버 역할을 하며 LinkedIn의 실제 3-legged OAuth 동의 화면으로 연결합니다. 각 사용자는 linkedin.com에서 로그인하며, 서버는 사용자의 비밀번호를 절대 볼 수 없습니다.

  • stdio — 환경 변수에서 LINKEDIN_ACCESS_TOKEN을 읽는 로컬 서버입니다. 단일 사용자 또는 빠른 테스트에 유용합니다.

이 구조는 @aol/ifood-mcp 및 @aol/uber-mcp의 인증 아키텍처를 반영하되, 역공학 기반 로그인 대신 LinkedIn의 일급 OAuth를 사용합니다.


도구

도구

LinkedIn 엔드포인트

참고 사항

linkedin_me

GET /v2/userinfo

기본 openid profile email 스코프로 작동합니다.

linkedin_network_stats

GET /v2/networkSizes/{urn}

r_1st_connections_size 필요.

linkedin_connections

GET /v2/connections

승인된 connections 제품 필요.

linkedin_get_profile

GET /v2/people/{id}

승인된 profile 제품 필요.

linkedin_search_people

GET /v2/search/people

승인된 search 제품 필요.

linkedin_search_jobs

GET /v2/jobs/search

승인된 jobs 제품 필요.

linkedin_send_message

POST /v2/messages

w_member_social(메시징) 필요.

LinkedIn API 액세스. 기본적으로 표준 LinkedIn 앱은 OpenID Connect 스코프(openid profile email)만 부여하므로 linkedin_me는 즉시 작동합니다. 다른 도구들은 LinkedIn이 승인된 제품(Sign In, Marketing, Talent Solutions 등) 뒤에 게이트를 둔 엔드포인트를 호출합니다. 앱이 해당 제품에 대해 승인되기 전까지는 해당 도구들이 403을 반환합니다 — 이는 LinkedIn 플랫폼 제한이지 버그가 아닙니다. 승인 후 부여된 스코프를 LINKEDIN_SCOPES에 추가하세요.


Related MCP server: Linkd MCP Server

빠른 시작 (HTTP + OAuth)

1. LinkedIn 앱 만들기

  1. https://www.linkedin.com/developers/apps로 이동 → Create app.

  2. Auth에서 Client ID와 Client Secret을 복사합니다.

  3. Authorized redirect URLs에 콜백을 추가합니다: http://localhost:3000/login/callback (또는 PUBLIC_URL + /login/callback).

  4. Products에서 Sign In with LinkedIn using OpenID Connect를 추가합니다(필요한 다른 제품도 함께).

2. 구성

cp .env.example .env
# then edit .env:
#   MCP_JWT_SECRET=$(openssl rand -hex 32)
#   LINKEDIN_CLIENT_ID=...
#   LINKEDIN_CLIENT_SECRET=...
#   PUBLIC_URL=http://localhost:3000

3. 실행

npm install
npm run build
npm run start:http      # or: npm run dev  (tsx watch)

MCP 클라이언트를 http://localhost:3000/mcp로 지정합니다. 첫 연결 시 OAuth 2.1 흐름이 실행되어 LinkedIn 로그인으로 리디렉션한 다음, 사용자를 대신해 도구를 호출합니다.


빠른 시작 (stdio)

cp .env.example .env
# set LINKEDIN_ACCESS_TOKEN=... (e.g. from the LinkedIn developer console token generator)
npm install && npm run build
npm start

MCP 클라이언트 구성:

{
  "mcpServers": {
    "linkedin": {
      "command": "node",
      "args": ["/absolute/path/to/linkedin-mcpserver/build/index.js"],
      "env": { "LINKEDIN_ACCESS_TOKEN": "AQV..." }
    }
  }
}

OAuth 브리지 작동 방식

MCP client ──/authorize──▶ this server ──302──▶ /login ──▶ /login/start
                                                              │
                                                    302 ▼ linkedin.com/oauth/v2/authorization
                                              user signs in on LinkedIn
                                                              │
      /login/callback ◀──302 code&state──────────────────────┘
            │  exchange code → LinkedIn access + refresh token
            │  fetch /v2/userinfo → stable member id (sub)
            │  store tokens per‑user, mint an MCP auth code
            ▼
MCP client ──/token──▶ this server ──▶ HS256 JWT (audience‑bound to /mcp)
MCP client ──/mcp (Bearer JWT)──▶ tools call LinkedIn with the member's token
  • MCP 액세스 토큰은 MCP_JWT_SECRET으로 서명된 단기 HS256 JWT이며, /mcp 리소스에 audience가 바인딩되고(RFC 8707), 순환 refresh 토큰을 사용합니다.

  • 다운스트림 LinkedIn 토큰은 앱이 refresh 토큰용으로 승인된 경우 투명하게 갱신되며, 그렇지 않은 경우 사용자가 다시 인증합니다.

  • 모든 상태는 메모리에 있습니다(단일 프로세스). 수평 확장을 위해 src/http/store.ts의 스토어를 Redis/DB로 교체하세요.


환경 변수

변수

필수

기본값

용도

PORT

–

3000

HTTP 포트.

PUBLIC_URL

HTTP

http://localhost:PORT

클라이언트와 LinkedIn이 보는 URL.

MCP_JWT_SECRET

HTTP

–

HS256 키(32자 이상). openssl rand -hex 32.

LINKEDIN_CLIENT_ID

HTTP

–

LinkedIn 앱 클라이언트 ID.

LINKEDIN_CLIENT_SECRET

HTTP

–

LinkedIn 앱 클라이언트 시크릿.

LINKEDIN_SCOPES

–

openid profile email

요청할 OAuth 스코프.

LINKEDIN_REDIRECT_URI

–

PUBLIC_URL/login/callback

OAuth 콜백 재정의.

LINKEDIN_ACCESS_TOKEN

stdio

–

stdio 모드용 토큰.

LINKEDIN_API_BASE

–

https://api.linkedin.com

API 호스트 재정의.

LINKEDIN_VERSION

–

–

/rest용 LinkedIn-Version 헤더(YYYYMM).


구조

src/
  index.ts                 stdio server + tool catalog + executeTool + TokenProvider
  http-server.ts           remote MCP server (Streamable HTTP + OAuth 2.1)
  http/
    provider.ts            LinkedInOAuthProvider (OAuthServerProvider, HS256 JWTs)
    login-router.ts        /login → LinkedIn consent → /login/callback
    linkedin-auth.ts       LinkedIn OAuth client (authorize / token / userinfo)
    session-provider.ts    per-user token lookup + transparent refresh
    store.ts               in-memory OAuth + downstream token stores

스크립트

스크립트

작업

npm run build

build/로 컴파일.

npm run start:http

HTTP/OAuth 서버 실행.

npm start

stdio 서버 실행.

npm run dev

HTTP 서버를 tsx watch로 실행.

npm run dev:stdio

stdio 서버를 tsx watch로 실행.

npm run typecheck

tsc --noEmit.

라이선스

MIT. LICENSE 참조.

Available Tools

7 tools
linkedin_connectionsC

List the member's 1st-degree connections (paginated). Requires an approved connections product/scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoPage size (default 100, max 500).
startNoPagination offset (default 0).

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description must carry behavioral disclosure. It explicitly notes the scope requirement, which is useful, but does not mention authentication, rate limits, or what happens when scope is missing. The read-only nature is implied but not stated. Minimal disclosure beyond the obvious.

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 sentence that leads with the action and resource, immediately followed by the key requirement. No wasted words, and the essential information is front-loaded.

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

Completeness3/5

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

For a simple paginated list tool, the description conveys the core function and a critical prerequisite. However, without an output schema or annotations, it does not disclose return format, whether the response includes profiles, or potential errors. Acceptable but with gaps an agent might need to infer.

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

Parameters3/5

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

Schema description coverage is 100% for both count and start, so the description adds no additional parameter meaning. It does not explain acceptable value ranges beyond what the schema provides, but the baseline of 3 applies because the schema already fully documents the parameters.

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

Purpose4/5

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

The description uses a specific verb ('List') and identifies the exact resource ('member's 1st-degree connections') with pagination noted. It is clear and distinct from sibling tools like 'linkedin_search_people' or 'linkedin_network_stats', though it does not explicitly name an alternative for contrast.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus siblings. It does not mention scenarios where linkedin_network_stats or linkedin_search_people might be more appropriate. Only a prerequisite (approved connections product/scope) is given, which is not usage selection guidance.

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

linkedin_get_profileA

Retrieve a member profile by person id (publicId or numeric/URN id). Requires an approved profile product/scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
personIdYesPublic id, numeric id, or full urn:li:person URN.

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals a key requirement (approved profile product/scope), which is useful. However, it does not mention error patterns (e.g., missing permissions, invalid ID), rate limits, or what happens if the ID is not found. The single behavioral note is helpful but not comprehensive.

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

Conciseness5/5

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

Two concise sentences with zero filler. The verb and resource are front-loaded, followed immediately by the accepted ID types and the prerequisite. Every word contributes, making it easy to scan and understand quickly.

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 simple one-parameter read tool with no output schema, the description covers the essential invocation details: the parameter purpose and a key prerequisite. It does not explain the return shape, but this is less critical given that 'profile' implies its content. The absence of annotation support is partly mitigated by the scope requirement, so the description is close to complete.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already explains that personId accepts public, numeric, or URN formats. The description essentially repeats this information without adding new meaning (e.g., syntax examples, required format precedence). Thus it adds minimal value beyond the schema, aligning with the baseline of 3.

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 action ('Retrieve a member profile') and the resource (member profile by person id), with explicit detail on the accepted id formats (publicId, numeric, or URN). It distinguishes from siblings by its specific focus on fetching a profile by ID versus searching (linkedin_search_people) or accessing the caller's own profile (linkedin_me).

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

Usage Guidelines3/5

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

The description provides a prerequisite ('Requires an approved profile product/scope') but does not explicitly state when to use this tool versus alternatives like linkedin_me or linkedin_search_people. The context is clear that you need a known person ID, but there is no contrast with sibling tools, leaving the agent to infer the selection logic.

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

linkedin_meA

Get the authenticated member's profile via OpenID Connect (sub, name, email, locale, picture). Works with the openid profile email scopes.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full behavioral burden. It adds valuable context by listing the returned fields and the required OAuth scopes, which informs the agent of prerequisites and output shape. However, it lacks any mention of failure modes, rate limits, or behavior when scopes are unsupported—important for robust invocation but not critical for a simple call.

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

Conciseness5/5

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

The description is a single, well-constructed sentence that front-loads the core action and resource, then lists the precise return fields and required scopes. Every word contributes to understanding, with zero fluff or repetition—an exemplar of concise, structured writing.

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 parameterless tool with no output schema, the description conveys the essential operational details: what it does, what it returns (field list), and prerequisites (scopes). It could mention authentication or error handling, but the simplicity of the operation makes this largely complete. The explicit field list compensates for the lack of an output schema.

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?

The tool has zero parameters, and the description appropriately says nothing about them. The baseline for 0 parameters is 4, and since there is no schema to elaborate on, the description does not need to add parameter-level detail. It correctly focuses on the operation and output.

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 action (Get), the resource (authenticated member's profile), and enumerates the specific fields returned (sub, name, email, locale, picture). It implicitly distinguishes from sibling `linkedin_get_profile` by emphasizing 'authenticated member's' (i.e., the caller's own profile), giving the tool a unique, unambiguous purpose.

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

Usage Guidelines3/5

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

The description specifies required scopes (`openid profile email`), which is a useful prerequisite, but it does not explicitly contrast with alternatives like `linkedin_get_profile`. An agent might be uncertain when to use this tool vs. a generic profile getter; the context of 'authenticated member' implies it's for the caller, but there is no explicit 'use this instead of X' guidance.

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

linkedin_network_statsA

Get the member's network size (1st-degree connection count). Requires the r_1st_connections_size product/scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
personUrnNoPerson URN, e.g. urn:li:person:xxxx. Defaults to the token owner (~).

TDQS

A3.8/5.0
Behavior3/5

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

No annotations exist, so the description bears full burden. It discloses a key requirement: the r_1st_connections_size product/scope, which is critical for authorization. However, it does not mention other behavioral aspects such as response format, potential errors, or side effects (which are minimal for a read operation). Adds some value but not comprehensive.

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

Conciseness5/5

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

A single, front-loaded sentence with the purpose stated first and the scope requirement second. No unnecessary words, and the information is structured efficiently.

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?

Given the tool's simplicity (one optional param, no nested objects, no output schema), the description and schema together provide adequate information for correct invocation. It clarifies the purpose and authorization requirement. It does not explicitly state the return value format, but the 'count' phrasing makes it likely a simple number. Missing only minor detail about response shape.

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

Parameters3/5

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

Schema coverage is 100% since personUrn has a description including its default. The description adds no additional meaning beyond the schema; the default behavior is already captured in the parameter description. Baseline of 3 is appropriate.

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 states a specific verb ('Get'), a resource ('member's network size'), and clarifies it as '1st-degree connection count', distinguishing it from sibling tools like linkedin_connections (which likely lists connections) and linkedin_get_profile (which fetches profile details). Clear and unambiguous.

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

Usage Guidelines3/5

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

The description does not explicitly discuss when to use this tool versus alternatives. It implies usage for obtaining the network size, but no exclusions or comparisons with siblings like linkedin_connections are provided. Guidance is minimal and left to inference.

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

linkedin_search_jobsA

Search job postings by keywords / location / company / job type. Requires an approved jobs product/scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
jobTypeNoFilter by job type (Full-Time, Contract, ...).
keywordsNoFree-text search terms.
locationNoLocation filter.
companiesNoFilter by company.

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. The verb 'Search' implies a read-only operation, and the mention of an approved scope adds authorization context. However, it does not disclose pagination, rate limits, or what happens if the scope is missing, leaving significant behavioral aspects undocumented.

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

Conciseness5/5

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

Two short sentences, the first front-loading the action and scope, the second adding the essential prerequisite. No wasted words; every clause earns its place. The structure is efficient and scannable.

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

Completeness3/5

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

For a search tool with no output schema, the description does not explain what the tool returns (e.g., job listings, IDs, metadata) or any result limits. It also omits details like sorting or default behavior. The prerequisite is helpful, but the lack of output context leaves the agent uncertain about the return shape, making it only partially complete.

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

Parameters3/5

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

Schema description coverage is 100%—all four parameters have descriptive text in the schema. The description merely restates the same filter categories without adding format, defaults, or interdependencies. It neither compensates for a gap nor adds value beyond the schema, so baseline 3 is appropriate.

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 names a specific verb ('Search') and a clear resource ('job postings'), and enumerates the primary filters (keywords, location, company, job type). This unambiguously distinguishes it from sibling tools like linkedin_search_people, which targets people rather than jobs.

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

Usage Guidelines4/5

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

The description clearly indicates the tool is for job postings and adds a critical prerequisite ('Requires an approved jobs product/scope'), which tells the agent when it is permissible to call. However, it does not explicitly mention when NOT to use it or point to alternative tools (e.g., use search_people for people), so it lacks explicit exclusions.

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

linkedin_search_peopleC

Search member profiles by keywords / location / company / industry. Requires an approved search product/scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordsNoFree-text search terms.
locationNoLocation filter.
industriesNoFilter by industry.
currentCompanyNoFilter by current company.

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description must carry full behavioral disclosure. It mentions the approval prerequisite, which is a meaningful constraint, but does not disclose what happens without approval, whether the operation is read-only, how results are returned, or any pagination/rate-limit behavior. This is a significant gap for a search tool.

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?

Two sentences with no redundancy. The primary action is front-loaded, and the prerequisite is stated separately. It is efficient and easy to scan, though it omits possibly important details that are not covered elsewhere, making it slightly under-specified rather than overly verbose.

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

Completeness2/5

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

For a search tool with no annotations and no output schema, the description should explain what the tool returns, any error conditions, and the implications of the approval requirement. It only covers the approval prerequisite, leaving the agent without enough information about expected output or failure modes. The simplicity of the tool (4 optional params) lowers the bar, but the missing behavioral details make it incomplete.

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

Parameters3/5

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

Schema coverage is 100%, so each parameter already has a description. The description's listing of 'keywords / location / company / industry' merely echoes the schema without adding new meaning, such as format expectations, wildcard support, or interaction between filters. It meets the baseline for 100% coverage but does not go beyond it.

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

Purpose4/5

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

The description clearly states the verb 'Search' and the resource 'member profiles', and lists the search dimensions (keywords, location, company, industry) which map to the parameters. It differentiates from sibling tools like linkedin_search_jobs by explicitly targeting member profiles, though it does not name alternatives. The purpose is unambiguous.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It only states a prerequisite ('Requires an approved search product/scope') but does not explain when to choose this over linkedin_get_profile or linkedin_search_jobs. There is no mention of exclusions or contextual triggers.

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

linkedin_send_messageA

Send a message to a connection. Requires the w_member_social (messaging) product/scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
subjectNoMessage subject.
messageBodyYesMessage body text.
recipientUrnYesRecipient person URN (urn:li:person:xxxx).

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, leaving the description to carry the full burden of behavioral disclosure. The description only states the action and required scope, but it does not disclose that this is a write operation with potential side effects (sending a message), nor does it mention irreversibility, rate limits, or what happens on success/failure. The term 'send' implies a mutation, but explicit behavioral context is missing.

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

Conciseness5/5

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

The description is a single sentence that front-loads the purpose and immediately follows with the scope requirement. It is minimal and every word serves a purpose, with no redundancy or unnecessary detail.

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

Completeness3/5

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

The tool is relatively simple with 3 parameters and no output schema, yet the description omits key behavioral details like what the response resembles, whether it is irreversible, and any message length limits. It also does not mention that messages can only be sent to first-degree connections, although 'connection' hints at this. Given no annotations or output schema, more context would be beneficial, but the core purpose and scope are covered.

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

Parameters3/5

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

The input schema has 100% coverage; all three parameters already have descriptive text. The description adds no extra meaning beyond the schema, such as format constraints or usage patterns. Since the schema clearly documents recipientUrn and messageBody, the baseline of 3 is appropriate.

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 verb ('send') and resource ('message to a connection'). It also adds a specific requirement (w_member_social scope) which further clarifies the tool's function. No sibling tools overlap with this messaging capability, so there is no ambiguity about what it does.

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

Usage Guidelines4/5

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

The description provides clear context by stating the prerequisite scope, which is a necessary condition for using the tool. While it does not explicitly mention alternatives or when not to use it, the absence of any sibling messaging tools makes those exclusions unnecessary. The scope requirement effectively guides the agent on when this tool is applicable.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv1.0.0
    • First observedlinkedin_connections
    • First observedlinkedin_get_profile
    • First observedlinkedin_me
    • First observedlinkedin_network_stats
    • First observedlinkedin_search_jobs
    • First observedlinkedin_search_people
    • First observedlinkedin_send_message

TDQS

A3.7/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a distinct purpose: self-profile, profile by ID, search people, search jobs, send messages, connections list, and network size. Although 'me' and 'get_profile' both retrieve profiles, one is self and the other is arbitrary, so there is no ambiguity. The two search tools clearly target different resources.

Naming Consistency4/5

All tools share the 'linkedin_' prefix, which is consistent. However, the pattern after the prefix varies: some use bare nouns (me, connections, network_stats) while others use verb_noun (search_people, search_jobs, send_message, get_profile). This is a minor inconsistency but still predictable and readable.

Tool Count5/5

With 7 tools, the server is well-scoped for a LinkedIn integration. Each tool covers a core functionality area without unnecessary bloat, falling well within the typical 3-15 range for a focused server.

Completeness4/5

The tool surface covers the most common LinkedIn actions: viewing profiles, searching people and jobs, messaging, and managing connections. Missing capabilities like posting updates or managing connection requests are noticeable but not critical, as the core workflows are covered.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that enables seamless interaction with LinkedIn for job applications, profile retrieval, feed browsing, and resume analysis through natural language commands.
    36
    -
  • A
    license
    A
    quality
    D
    maintenance
    An unofficial Model Context Protocol server that enables programmatic access to LinkedIn data through tools like user search, company search, profile enrichment, and contact retrieval.
    7
    12 npm
    3
    ISC
  • F
    license
    Not graded
    quality
    D
    maintenance
    A comprehensive Model Context Protocol server that enables AI assistants to interact with LinkedIn APIs for profile management, content creation, networking, messaging, and analytics.
    2
    -
  • A
    license
    A
    quality
    F
    maintenance
    An unofficial Model Context Protocol server that provides LinkedIn tools for searching users, enriching profiles, retrieving contact information, and conducting deep research through natural language interfaces.
    5
    13 npm
    5
    MIT