Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@linkedapi/mcp",
"version": "2.3.5",
"version": "2.3.6",
"description": "MCP server that lets AI assistants control LinkedIn accounts and retrieve real-time data.",
"main": "dist/index.js",
"bin": {
Expand Down
2 changes: 1 addition & 1 deletion src/tools/fetch-company.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ export class FetchCompanyTool extends OperationTool<TFetchCompanyParams, unknown
return {
name: this.name,
description:
'Allows you to open a company page to retrieve its basic information (st.openCompanyPage action). Can optionally retrieve employees, posts and decision makers.',
'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 — the permanent LinkedIn organization URN of the company (urn:li:organization:<id>); retrieved employees and decision makers carry their own member urn (urn:li:member:<id>), and retrieved posts carry urn on their author and reposter. Each of them is null when LinkedIn does not expose the identifier.',
inputSchema: {
type: 'object',
properties: {
Expand Down
2 changes: 1 addition & 1 deletion src/tools/fetch-job.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ export class FetchJobTool extends OperationTool<TBaseFetchJobParams, unknown> {
return {
name: this.name,
description:
'Open a LinkedIn job and retrieve its details such as company, location, salary, and description (st.openJob action).',
'Open a LinkedIn job and retrieve its details such as company, location, salary, and description (st.openJob action). The result carries urn — the permanent LinkedIn job posting URN (urn:li:jobPosting:<jobId>) — and companyUrn for the hiring company (urn:li:organization:<id>); either is null when LinkedIn does not expose the identifier.',
inputSchema: {
type: 'object',
properties: {
Expand Down
2 changes: 1 addition & 1 deletion src/tools/fetch-person.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ export class FetchPersonTool extends OperationTool<TFetchPersonParams, unknown>
public override getTool(): Tool {
return {
name: this.name,
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, posts, comments and reactions.
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, posts, comments and reactions. The basic information carries urn — the person's permanent LinkedIn member URN (urn:li:member:<id>), or null when LinkedIn does not expose it. Retrieved posts carry urn on their author and reposter as well.
⚠️ **PERFORMANCE WARNING**: Only set additional retrieval flags to true if you specifically need that data. Each additional parameter significantly increases execution time:
💡 **Recommendation**: Start with basic info only. Only request additional data if the user explicitly asks for it or if it's essential for the current task.
`,
Expand Down
2 changes: 1 addition & 1 deletion src/tools/fetch-post.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export class FetchPostTool extends OperationTool<TFetchPostParams, unknown> {
return {
name: this.name,
description:
'Open a LinkedIn post and retrieve its data, with optional comments and reactions. (st.openPost action).',
'Open a LinkedIn post and retrieve its data, with optional comments and reactions. (st.openPost action). The author and reposter carry urn — a member URN (urn:li:member:<id>) for a person actor and an organization URN (urn:li:organization:<id>) for a company actor — and retrieved reactions carry engagerUrn for the same identity; each is null when LinkedIn does not expose the identifier. This action reads identifiers from the post page itself, so it resolves actor URNs that post listings such as retrieve_feed cannot. Comment authors carry no URN.',
inputSchema: {
type: 'object',
properties: {
Expand Down
2 changes: 1 addition & 1 deletion src/tools/get-conversation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ operationName: OPERATION_NAME.syncConversation };
return {
name: this.name,
description:
'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 tool starts a syncConversation workflow and returns its ack ({status, workflowId, operationName: "syncConversation", message}); the client should call get_workflow_result with that workflowId until completion, then call get_conversation again to read the synced messages. The result carries syncUntil — the moment syncing of this conversation stops. Once it is in the past the messages are still returned but no longer updated; call sync_conversation again for the same person to resume updates.',
'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 tool starts a syncConversation workflow and returns its ack ({status, workflowId, operationName: "syncConversation", message}); the client should call get_workflow_result with that workflowId until completion, then call get_conversation again to read the synced messages. The result carries syncUntil — the moment syncing of this conversation stops. Once it is in the past the messages are still returned but no longer updated; call sync_conversation again for the same person to resume updates. It also carries personUrn — the permanent LinkedIn member URN (urn:li:member:<id>) of the person, or null when LinkedIn does not expose it.',
inputSchema: {
type: 'object',
properties: {
Expand Down
2 changes: 1 addition & 1 deletion src/tools/get-inbox.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ export class GetInboxTool extends LinkedApiTool<TInboxPollRequest, TInboxPollRes
return {
name: this.name,
description:
'Get messages from the monitored inbox across all conversations (standard and Sales Navigator), newest first. Requires inbox monitoring to be enabled once with sync_inbox (or nv_sync_inbox for Sales Navigator).',
'Get messages from the monitored inbox across all conversations (standard and Sales Navigator), newest first. Requires inbox monitoring to be enabled once with sync_inbox (or nv_sync_inbox for Sales Navigator). Every message carries personUrn — the permanent LinkedIn member URN (urn:li:member:<id>) of the person on the other side of the thread, or null when LinkedIn does not expose it.',
inputSchema: {
type: 'object',
properties: {
Expand Down
2 changes: 1 addition & 1 deletion src/tools/get-network.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export class GetNetworkTool extends LinkedApiTool<TNetworkPollRequest, TNetworkP
return {
name: this.name,
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 connection appeared in your network), "connectionRequestReceived" (someone sent you a connection request).',
'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 connection appeared in your network), "connectionRequestReceived" (someone sent you a connection request). Every event carries personUrn — the permanent LinkedIn member URN (urn:li:member:<id>) of the person the event is about, or null when LinkedIn does not expose it or the event was recorded before URNs were captured.',
inputSchema: {
type: 'object',
properties: {
Expand Down
2 changes: 1 addition & 1 deletion src/tools/nv-fetch-company.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ export class NvFetchCompanyTool extends OperationTool<TNvFetchCompanyParams, unk
return {
name: this.name,
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.',
'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 — the permanent LinkedIn organization URN of the company (urn:li:organization:<id>) — and retrieved employees and decision makers carry their own member urn (urn:li:member:<id>); each is null when LinkedIn does not expose the identifier.',
inputSchema: {
type: 'object',
properties: {
Expand Down
2 changes: 1 addition & 1 deletion src/tools/nv-fetch-person.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ export class NvFetchPersonTool extends OperationTool<TNvOpenPersonPageParams, un
return {
name: this.name,
description:
'Allows you to open a person page in Sales Navigator to retrieve their basic information (nv.openPersonPage action).',
"Allows you to open a person page in Sales Navigator to retrieve their basic information (nv.openPersonPage action). The result carries urn — the person's permanent LinkedIn member URN (urn:li:member:<id>) — and companyUrn for their current company (urn:li:organization:<id>); either is null when LinkedIn does not expose it. The same person carries the same urn in standard interface results, so it can be used to match Sales Navigator results against them.",
inputSchema: {
type: 'object',
properties: {
Expand Down
2 changes: 1 addition & 1 deletion src/tools/nv-get-conversation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ operationName: OPERATION_NAME.nvSyncConversation };
return {
name: this.name,
description:
'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 tool starts an nvSyncConversation workflow and returns its ack ({status, workflowId, operationName: "nvSyncConversation", message}); the client should call get_workflow_result with that workflowId until completion, then call nv_get_conversation again to read the synced messages.',
'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 tool starts an nvSyncConversation workflow and returns its ack ({status, workflowId, operationName: "nvSyncConversation", message}); the client should call get_workflow_result with that workflowId until completion, then call nv_get_conversation again to read the synced messages. The result carries personUrn — the permanent LinkedIn member URN (urn:li:member:<id>) of the person, or null when LinkedIn does not expose it.',
inputSchema: {
type: 'object',
properties: {
Expand Down
2 changes: 1 addition & 1 deletion src/tools/nv-search-companies.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ export class NvSearchCompaniesTool extends OperationTool<TNvSearchCompaniesParam
return {
name: this.name,
description:
'Allows you to search for companies in Sales Navigator applying various filtering criteria. (nv.searchCompanies action).',
'Allows you to search for companies in Sales Navigator applying various filtering criteria. (nv.searchCompanies action). Every company in the result carries urn — its permanent LinkedIn organization URN (urn:li:organization:<id>), or null when LinkedIn does not expose it.',
inputSchema: {
type: 'object',
properties: {
Expand Down
2 changes: 1 addition & 1 deletion src/tools/nv-search-people.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export class NvSearchPeopleTool extends OperationTool<TNvSearchPeopleParams, unk
return {
name: this.name,
description:
'Allows you to search people in Sales Navigator applying various filtering criteria. (nv.searchPeople action).',
'Allows you to search people in Sales Navigator applying various filtering criteria. (nv.searchPeople action). Every person in the result carries urn — their permanent LinkedIn member URN (urn:li:member:<id>), or null when LinkedIn does not expose it. The same person carries the same urn in standard interface results, so it can be used to match Sales Navigator results against them.',
inputSchema: {
type: 'object',
properties: {
Expand Down
2 changes: 1 addition & 1 deletion src/tools/retrieve-connections.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ export class RetrieveConnectionsTool extends OperationTool<
return {
name: this.name,
description:
'allows you to retrieve your connections and perform additional person-related actions if needed (st.retrieveConnections action).',
'allows you to retrieve your connections and perform additional person-related actions if needed (st.retrieveConnections action). Every person in the result carries urn — their permanent LinkedIn member URN (urn:li:member:<id>), or null when LinkedIn does not expose it.',
inputSchema: {
type: 'object',
properties: {
Expand Down
2 changes: 1 addition & 1 deletion src/tools/retrieve-feed.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ export class RetrieveFeedTool extends OperationTool<TRetrieveFeedParams, Array<T
return {
name: this.name,
description:
"Retrieves posts from the current account's personalized LinkedIn home feed (st.retrieveFeed action).",
"Retrieves posts from the current account's personalized LinkedIn home feed (st.retrieveFeed action). Each post's author and reposter carry urn — a member URN (urn:li:member:<id>) for a person actor and an organization URN (urn:li:organization:<id>) for a company actor, or null when LinkedIn does not expose it in the feed; fetch_post resolves actor URNs this listing cannot.",
inputSchema: {
type: 'object',
properties: {
Expand Down
2 changes: 1 addition & 1 deletion src/tools/retrieve-invitations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ export class RetrieveInvitationsTool extends OperationTool<unknown, unknown> {
return {
name: this.name,
description:
'Retrieves incoming connection, company-follow, and newsletter-subscription invitations received by your account (st.retrieveInvitations action).',
'Retrieves incoming connection, company-follow, and newsletter-subscription invitations received by your account (st.retrieveInvitations action). Every invitation carries urn — the permanent LinkedIn member URN (urn:li:member:<id>) of the person who sent it, or null when LinkedIn does not expose it.',
inputSchema: {
type: 'object',
properties: {},
Expand Down
2 changes: 1 addition & 1 deletion src/tools/retrieve-pending-requests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ export class RetrievePendingRequestsTool extends OperationTool<unknown, unknown>
return {
name: this.name,
description:
'Allows you to retrieve pending connection requests sent from your account. (st.retrievePendingRequests action).',
'Allows you to retrieve pending connection requests sent from your account. (st.retrievePendingRequests action). Every person in the result carries urn — their permanent LinkedIn member URN (urn:li:member:<id>), or null when LinkedIn does not expose it.',
inputSchema: {
type: 'object',
properties: {},
Expand Down
2 changes: 1 addition & 1 deletion src/tools/search-companies.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ export class SearchCompaniesTool extends OperationTool<TSearchCompaniesParams, u
return {
name: this.name,
description:
'Allows you to search for companies applying various filtering criteria (st.searchCompanies action).',
'Allows you to search for companies applying various filtering criteria (st.searchCompanies action). Every company in the result carries urn — its permanent LinkedIn organization URN (urn:li:organization:<id>), or null when LinkedIn does not expose it.',
inputSchema: {
type: 'object',
properties: {
Expand Down
2 changes: 1 addition & 1 deletion src/tools/search-jobs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ export class SearchJobsTool extends OperationTool<TSearchJobsParams, unknown> {
return {
name: this.name,
description:
'Allows you to search jobs applying various filtering criteria (st.searchJobs action).',
'Allows you to search jobs applying various filtering criteria (st.searchJobs action). Every job in the result carries urn — its permanent LinkedIn job posting URN (urn:li:jobPosting:<jobId>), or null when the job id could not be extracted.',
inputSchema: {
type: 'object',
properties: {
Expand Down
2 changes: 1 addition & 1 deletion src/tools/search-people.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ export class SearchPeopleTool extends OperationTool<TSearchPeopleParams, unknown
return {
name: this.name,
description:
'Allows you to search people applying various filtering criteria (st.searchPeople action).',
'Allows you to search people applying various filtering criteria (st.searchPeople action). Every person in the result carries urn — their permanent LinkedIn member URN (urn:li:member:<id>), or null when LinkedIn does not expose it.',
inputSchema: {
type: 'object',
properties: {
Expand Down