Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
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
Authorizationheader. 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-Typeset toapplication/json.Acceptset toapplication/json, text/event-stream.
- Send an
initializeJSON-RPC request tohttps://mcp.linkedin.com/mcp-my-profilewith theContent-TypeandAcceptheaders. - Read the negotiated protocol version from
result.protocolVersionin the response body and the session identifier from theMcp-Session-Idresponse header. - Send
notifications/initializedwith theContent-TypeandAcceptheaders and the following additional HTTP headers:MCP-Protocol-Versionset to the negotiated protocol version.Mcp-Session-Idset to the session identifier.
- Include the
Content-Type,Accept,MCP-Protocol-Version, andMcp-Session-Idheaders 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:
- Sign in to LinkedIn and go to Me > Settings & Privacy.
- Select Data privacy > Other applications > Permitted services.
- 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.