diff --git a/package.json b/package.json index 07c238b..bea0133 100644 --- a/package.json +++ b/package.json @@ -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": { diff --git a/src/tools/fetch-company.ts b/src/tools/fetch-company.ts index 49a35cd..ffe3b03 100644 --- a/src/tools/fetch-company.ts +++ b/src/tools/fetch-company.ts @@ -44,7 +44,7 @@ export class FetchCompanyTool extends OperationTool); retrieved employees and decision makers carry their own member urn (urn:li:member:), 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: { diff --git a/src/tools/fetch-job.ts b/src/tools/fetch-job.ts index 947fe72..94fb1fb 100644 --- a/src/tools/fetch-job.ts +++ b/src/tools/fetch-job.ts @@ -15,7 +15,7 @@ export class FetchJobTool extends OperationTool { 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:) — and companyUrn for the hiring company (urn:li:organization:); either is null when LinkedIn does not expose the identifier.', inputSchema: { type: 'object', properties: { diff --git a/src/tools/fetch-person.ts b/src/tools/fetch-person.ts index 72cba64..907f803 100644 --- a/src/tools/fetch-person.ts +++ b/src/tools/fetch-person.ts @@ -39,7 +39,7 @@ export class FetchPersonTool extends OperationTool 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:), 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. `, diff --git a/src/tools/fetch-post.ts b/src/tools/fetch-post.ts index 3cabcff..aec1566 100644 --- a/src/tools/fetch-post.ts +++ b/src/tools/fetch-post.ts @@ -29,7 +29,7 @@ export class FetchPostTool extends OperationTool { 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:) for a person actor and an organization URN (urn:li:organization:) 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: { diff --git a/src/tools/get-conversation.ts b/src/tools/get-conversation.ts index 26290bb..3413e98 100644 --- a/src/tools/get-conversation.ts +++ b/src/tools/get-conversation.ts @@ -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:) of the person, or null when LinkedIn does not expose it.', inputSchema: { type: 'object', properties: { diff --git a/src/tools/get-inbox.ts b/src/tools/get-inbox.ts index 9ea6a9d..d87c603 100644 --- a/src/tools/get-inbox.ts +++ b/src/tools/get-inbox.ts @@ -30,7 +30,7 @@ export class GetInboxTool extends LinkedApiTool) of the person on the other side of the thread, or null when LinkedIn does not expose it.', inputSchema: { type: 'object', properties: { diff --git a/src/tools/get-network.ts b/src/tools/get-network.ts index a912721..7b440b3 100644 --- a/src/tools/get-network.ts +++ b/src/tools/get-network.ts @@ -32,7 +32,7 @@ export class GetNetworkTool extends LinkedApiTool) 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: { diff --git a/src/tools/nv-fetch-company.ts b/src/tools/nv-fetch-company.ts index cdc2602..4d91776 100644 --- a/src/tools/nv-fetch-company.ts +++ b/src/tools/nv-fetch-company.ts @@ -38,7 +38,7 @@ export class NvFetchCompanyTool extends OperationTool) — and retrieved employees and decision makers carry their own member urn (urn:li:member:); each is null when LinkedIn does not expose the identifier.', inputSchema: { type: 'object', properties: { diff --git a/src/tools/nv-fetch-person.ts b/src/tools/nv-fetch-person.ts index d256e4c..e708fec 100644 --- a/src/tools/nv-fetch-person.ts +++ b/src/tools/nv-fetch-person.ts @@ -15,7 +15,7 @@ export class NvFetchPersonTool extends OperationTool) — and companyUrn for their current company (urn:li:organization:); 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: { diff --git a/src/tools/nv-get-conversation.ts b/src/tools/nv-get-conversation.ts index bd5e497..c9904b6 100644 --- a/src/tools/nv-get-conversation.ts +++ b/src/tools/nv-get-conversation.ts @@ -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:) of the person, or null when LinkedIn does not expose it.', inputSchema: { type: 'object', properties: { diff --git a/src/tools/nv-search-companies.ts b/src/tools/nv-search-companies.ts index 5ed9d3b..de7607b 100644 --- a/src/tools/nv-search-companies.ts +++ b/src/tools/nv-search-companies.ts @@ -42,7 +42,7 @@ export class NvSearchCompaniesTool extends OperationTool), or null when LinkedIn does not expose it.', inputSchema: { type: 'object', properties: { diff --git a/src/tools/nv-search-people.ts b/src/tools/nv-search-people.ts index cc6588c..15b0d5a 100644 --- a/src/tools/nv-search-people.ts +++ b/src/tools/nv-search-people.ts @@ -29,7 +29,7 @@ export class NvSearchPeopleTool extends OperationTool), 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: { diff --git a/src/tools/retrieve-connections.ts b/src/tools/retrieve-connections.ts index cadda9c..3efa3bc 100644 --- a/src/tools/retrieve-connections.ts +++ b/src/tools/retrieve-connections.ts @@ -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:), or null when LinkedIn does not expose it.', inputSchema: { type: 'object', properties: { diff --git a/src/tools/retrieve-feed.ts b/src/tools/retrieve-feed.ts index f2952d0..854ec06 100644 --- a/src/tools/retrieve-feed.ts +++ b/src/tools/retrieve-feed.ts @@ -15,7 +15,7 @@ export class RetrieveFeedTool extends OperationTool) for a person actor and an organization URN (urn:li:organization:) 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: { diff --git a/src/tools/retrieve-invitations.ts b/src/tools/retrieve-invitations.ts index 4cc92b8..051045d 100644 --- a/src/tools/retrieve-invitations.ts +++ b/src/tools/retrieve-invitations.ts @@ -13,7 +13,7 @@ export class RetrieveInvitationsTool extends OperationTool { 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:) of the person who sent it, or null when LinkedIn does not expose it.', inputSchema: { type: 'object', properties: {}, diff --git a/src/tools/retrieve-pending-requests.ts b/src/tools/retrieve-pending-requests.ts index b587571..07fa7c4 100644 --- a/src/tools/retrieve-pending-requests.ts +++ b/src/tools/retrieve-pending-requests.ts @@ -13,7 +13,7 @@ export class RetrievePendingRequestsTool extends OperationTool 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:), or null when LinkedIn does not expose it.', inputSchema: { type: 'object', properties: {}, diff --git a/src/tools/search-companies.ts b/src/tools/search-companies.ts index 6ccf6d6..242ee28 100644 --- a/src/tools/search-companies.ts +++ b/src/tools/search-companies.ts @@ -36,7 +36,7 @@ export class SearchCompaniesTool extends OperationTool), or null when LinkedIn does not expose it.', inputSchema: { type: 'object', properties: { diff --git a/src/tools/search-jobs.ts b/src/tools/search-jobs.ts index 08e8f32..2ef6b1a 100644 --- a/src/tools/search-jobs.ts +++ b/src/tools/search-jobs.ts @@ -57,7 +57,7 @@ export class SearchJobsTool extends OperationTool { 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:), or null when the job id could not be extracted.', inputSchema: { type: 'object', properties: { diff --git a/src/tools/search-people.ts b/src/tools/search-people.ts index f0568c3..00d5465 100644 --- a/src/tools/search-people.ts +++ b/src/tools/search-people.ts @@ -28,7 +28,7 @@ export class SearchPeopleTool extends OperationTool), or null when LinkedIn does not expose it.', inputSchema: { type: 'object', properties: {