LinkedIn My Profile MCP Server

As a developer, use this guide to connect your AI agent or assistant to the LinkedIn My Profile MCP server, hosted remotely by LinkedIn. The server provides tools to securely read and update supported sections of a LinkedIn member’s own profile after the member grants your integration access.

The member can ask the assistant to review their profile and draft an update. The assistant prepares the proposed change, and the member must approve it in a preview card rendered by LinkedIn before anything is published. Every write follows a read → preview → approve → apply flow.

My Profile MCP server features

Use the My Profile MCP server’s tools to build assistants that help members review and update their profiles:

Read the member's profile

Retrieve the signed-in member’s basic profile fields, including their name, headline, summary, default locale, and profile picture. You can optionally include their experience (position) and project entries.

Resolve companies and locations

Match the company and location names provided by the member to the corresponding records in LinkedIn.

Preview and apply profile changes

Create a preview of a new or updated experience entry that only the member can view. The member can edit the content before approving it. Changes are applied to the member’s LinkedIn profile only after approval.

Example use cases

  • "Add my new role as Senior Engineer at Contoso to my LinkedIn profile."
  • "Rewrite the description of my current job to highlight the migration project I led."
  • "What does my LinkedIn headline say right now?"
  • "Update the end date on my previous position to March 2026."

Access requirements

The My Profile MCP server is currently available to select partners. Access is limited to registered LinkedIn developer applications approved by LinkedIn for this server. The server rejects requests from unapproved applications, even if they include a valid access token.

Security

The model and the LinkedIn member draft all profile content. The server reads profile data, resolves company and location names, creates previews, and applies updates that the member approves.

  • Member-scoped access: Tools identify the member through the access token and can read or update only the signed-in member’s own profile. Tools don't accept a member ID or profile URL.
  • Member approval: The model cannot publish changes independently. Each update requires explicit member approval in a preview rendered by LinkedIn.
  • Request validation: LinkedIn checks authorization and validates every request, regardless of the scopes granted.
  • Token handling: Send access tokens only in the HTTP Authorization header. Never include them in tool arguments, results, or model context.
  • Data minimization: The read tool returns only an approved set of profile fields. Request only the data needed for the current task.

Authentication

The server uses the OAuth 2.0 authorization code flow with Proof Key for Code Exchange (PKCE). Your MCP client discovers the authorization server through the protected resource metadata.

If your MCP client supports OAuth 2.0 protected resource metadata (RFC 9728) and authorization server metadata (RFC 8414), as specified by the MCP authorization specification, it can discover the authorization endpoints automatically. An unauthenticated request returns HTTP 401 Unauthorized with a WWW-Authenticate header that points to the protected resource metadata document.

The following URLs support authorization discovery:

Resource URL Purpose
Protected resource metadata https://mcp.linkedin.com/.well-known/oauth-protected-resource/mcp-my-profile Your MCP client fetches this document first, either from the WWW-Authenticate header on a 401 response or directly at this well-known URL. It identifies the authorization server that protects this resource and lists the scopes the server supports.
Authorization server (issuer) https://www.linkedin.com/oauth/pkce The issuer identifier for LinkedIn's authorization server, as referenced by the protected resource metadata. Your MCP client uses this value to locate and validate the authorization server metadata document below.
Authorization server metadata https://www.linkedin.com/.well-known/oauth-authorization-server/oauth/pkce Your MCP client fetches this document to discover the authorization and token endpoints, supported grant types, and other OAuth 2.0 capabilities needed to complete the PKCE authorization code flow.

Your MCP client should read scopes_supported from the protected resource metadata rather than use hardcoded scopes.

Metadata discovery identifies the authorization endpoints but does not provide client credentials. The server does not support dynamic client registration. Before starting the authorization code flow, configure your MCP client with the client ID of a registered LinkedIn developer application. Include a client secret if required for your application type.

Transport and endpoint

Property Value
Endpoint https://mcp.linkedin.com/mcp-my-profile
Transport The server uses session-based Streamable HTTP. It does not support the SSE transport.
Protocol Model Context Protocol (MCP)

Session lifecycle

Before calling any tools, initialize a session with the LinkedIn My Profile MCP server to establish the protocol version and obtain a session identifier. Complete the following steps:

Send every JSON-RPC message as an HTTP POST with the following headers:

  • Content-Type set to application/json.
  • Accept set to application/json, text/event-stream.
  1. Send an initialize JSON-RPC request to https://mcp.linkedin.com/mcp-my-profile with the Content-Type and Accept headers.
  2. Read the negotiated protocol version from result.protocolVersion in the response body and the session identifier from the Mcp-Session-Id response header.
  3. Send notifications/initialized with the Content-Type and Accept headers and the following additional HTTP headers:
    • MCP-Protocol-Version set to the negotiated protocol version.
    • Mcp-Session-Id set to the session identifier.
  4. Include the Content-Type, Accept, MCP-Protocol-Version, and Mcp-Session-Id headers in all subsequent requests, including tool calls.

Tools reference

The tool catalog is published dynamically. Retrieve tool names, input schemas, and annotations from tools/list at runtime rather than hardcoding them. Tools use readOnlyHint: true for read operations and readOnlyHint: false with destructiveHint: false for write operations. The following table summarizes the current tools.

Tool Purpose Annotations
linkedin_get_profile_context This tool reads the member’s basic profile fields and optionally includes experience and project entries. Read-only, idempotent
linkedin_resolve_referenced_entities This tool matches company and location names to LinkedIn records for the member’s own experience entries. Read-only, idempotent
linkedin_preview_profile_section This tool creates a private preview of a proposed change to a profile component without updating the profile. Because it creates a preview, don't auto-approve calls to this tool. Write, non-destructive
linkedin_update_profile_section This tool applies a member-approved change to an experience entry. Write

Rate limits

Rate limits apply to each calling application. If a limit is exceeded, the server returns HTTP 429 Too Many Requests.

Scope Limit
Per application 5,000 requests/day
Per member 500 requests/day

Errors and retries

An HTTP 429 Too Many Requests response indicates throttling, not an outage. Wait before retrying read requests.

After the member approves the preview, pass the approval envelope returned by linkedin_preview_profile_section as input to linkedin_update_profile_section. If the update returns a 429 or 5xx, the write may have succeeded. Retry with the exact same approval envelope, including the same idempotencyKey; do not change any envelope fields between attempts.

An HTTP 401 Unauthorized response means the request is missing a valid access token. If the request had no token, start the authorization flow using the WWW-Authenticate header. If the request included a token, the token is expired or revoked, so ask the member to reconnect.

An HTTP 403 Forbidden response indicates that the application or token lacks the required permission.

Disconnection

To disconnect, revoke the member’s OAuth token and clear any stored credentials.

The member can also disconnect directly from LinkedIn, without any action from your application, by removing it from their permitted services:

  1. Sign in to LinkedIn and go to Me > Settings & Privacy.
  2. Select Data privacy > Other applications > Permitted services.
  3. Find your application in the list and select Remove.

Alternatively, members can go directly to linkedin.com/psettings/permitted-services.

After disconnection, requests to protected resources return HTTP 401 Unauthorized. Your MCP client should prompt the member to reconnect when it receives this response.