@linkedapi/mcp 2.3.16 → 2.3.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/linked-api-tools.d.ts.map +1 -1
- package/dist/linked-api-tools.js +10 -2
- package/dist/linked-api-tools.js.map +1 -1
- package/dist/tools/admin-delete-limits.js +2 -2
- package/dist/tools/admin-delete-limits.js.map +1 -1
- package/dist/tools/admin-set-limits.js +1 -1
- package/dist/tools/admin-set-limits.js.map +1 -1
- package/dist/tools/endorse-person-skill.d.ts +14 -0
- package/dist/tools/endorse-person-skill.d.ts.map +1 -0
- package/dist/tools/endorse-person-skill.js +38 -0
- package/dist/tools/endorse-person-skill.js.map +1 -0
- package/dist/tools/endorse-person-skills.d.ts +14 -0
- package/dist/tools/endorse-person-skills.d.ts.map +1 -0
- package/dist/tools/endorse-person-skills.js +43 -0
- package/dist/tools/endorse-person-skills.js.map +1 -0
- package/dist/tools/get-conversation.js +1 -1
- package/dist/tools/get-conversation.js.map +1 -1
- package/dist/tools/get-inbox.d.ts +10 -5
- package/dist/tools/get-inbox.d.ts.map +1 -1
- package/dist/tools/get-inbox.js +9 -3
- package/dist/tools/get-inbox.js.map +1 -1
- package/dist/tools/get-workflow-result.d.ts +2 -0
- package/dist/tools/get-workflow-result.d.ts.map +1 -1
- package/dist/tools/nv-get-conversation.js +1 -1
- package/dist/tools/nv-get-conversation.js.map +1 -1
- package/dist/tools/nv-sync-conversation.js +3 -3
- package/dist/tools/nv-sync-conversation.js.map +1 -1
- package/dist/tools/nv-sync-inbox.js +1 -1
- package/dist/tools/nv-sync-inbox.js.map +1 -1
- package/dist/tools/sync-conversation.js +3 -3
- package/dist/tools/sync-conversation.js.map +1 -1
- package/dist/tools/sync-inbox.js +1 -1
- package/dist/tools/sync-inbox.js.map +1 -1
- package/package.json +2 -2
- package/src/linked-api-tools.ts +10 -2
- package/src/tools/admin-delete-limits.ts +2 -2
- package/src/tools/admin-set-limits.ts +1 -1
- package/src/tools/endorse-person-skill.ts +39 -0
- package/src/tools/endorse-person-skills.ts +51 -0
- package/src/tools/get-conversation.ts +1 -1
- package/src/tools/get-inbox.ts +24 -7
- package/src/tools/nv-get-conversation.ts +1 -1
- package/src/tools/nv-sync-conversation.ts +3 -3
- package/src/tools/nv-sync-inbox.ts +1 -1
- package/src/tools/sync-conversation.ts +3 -3
- package/src/tools/sync-inbox.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linked-api-tools.d.ts","sourceRoot":"","sources":["../src/linked-api-tools.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"linked-api-tools.d.ts","sourceRoot":"","sources":["../src/linked-api-tools.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAsE1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,UAAU,wBAAwB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,IAAI,IAAI,CAAC;IAChB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACjC,OAAO,CAAC,OAAO,EAAE;QACf,SAAS,EAAE,SAAS,CAAC;QACrB,IAAI,EAAE,KAAK,CAAC;QACZ,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,UAAU,CAAC;KACxB,GAAG,OAAO,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;CAC5C;AAED,qBAAa,cAAc;IACzB,SAAgB,KAAK,EAAE,aAAa,CAAC,wBAAwB,CAAC,CAAC;IAC/D,SAAgB,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACvE,SAAgB,WAAW,EAAE,aAAa,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;;IAkFlE,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,wBAAwB,GAAG,SAAS;IAI9D,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,SAAS;IAItE,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,SAAS;CAGhF"}
|
package/dist/linked-api-tools.js
CHANGED
|
@@ -23,6 +23,8 @@ const check_connection_status_js_1 = require("./tools/check-connection-status.js
|
|
|
23
23
|
const comment_on_post_js_1 = require("./tools/comment-on-post.js");
|
|
24
24
|
const create_post_js_1 = require("./tools/create-post.js");
|
|
25
25
|
const create_repost_js_1 = require("./tools/create-repost.js");
|
|
26
|
+
const endorse_person_skill_js_1 = require("./tools/endorse-person-skill.js");
|
|
27
|
+
const endorse_person_skills_js_1 = require("./tools/endorse-person-skills.js");
|
|
26
28
|
const execute_custom_workflow_js_1 = require("./tools/execute-custom-workflow.js");
|
|
27
29
|
const fetch_company_js_1 = require("./tools/fetch-company.js");
|
|
28
30
|
const fetch_job_js_1 = require("./tools/fetch-job.js");
|
|
@@ -43,6 +45,7 @@ const nv_manage_conversation_js_1 = require("./tools/nv-manage-conversation.js")
|
|
|
43
45
|
const nv_search_companies_js_1 = require("./tools/nv-search-companies.js");
|
|
44
46
|
const nv_search_people_js_1 = require("./tools/nv-search-people.js");
|
|
45
47
|
const nv_send_message_js_1 = require("./tools/nv-send-message.js");
|
|
48
|
+
const nv_sync_conversation_js_1 = require("./tools/nv-sync-conversation.js");
|
|
46
49
|
const nv_sync_inbox_js_1 = require("./tools/nv-sync-inbox.js");
|
|
47
50
|
const react_to_comment_js_1 = require("./tools/react-to-comment.js");
|
|
48
51
|
const react_to_post_js_1 = require("./tools/react-to-post.js");
|
|
@@ -62,6 +65,7 @@ const search_posts_js_1 = require("./tools/search-posts.js");
|
|
|
62
65
|
const send_connection_request_js_1 = require("./tools/send-connection-request.js");
|
|
63
66
|
const send_feedback_js_1 = require("./tools/send-feedback.js");
|
|
64
67
|
const send_message_js_1 = require("./tools/send-message.js");
|
|
68
|
+
const sync_conversation_js_1 = require("./tools/sync-conversation.js");
|
|
65
69
|
const sync_inbox_js_1 = require("./tools/sync-inbox.js");
|
|
66
70
|
const sync_network_js_1 = require("./tools/sync-network.js");
|
|
67
71
|
const withdraw_connection_request_js_1 = require("./tools/withdraw-connection-request.js");
|
|
@@ -73,9 +77,10 @@ class LinkedApiTools {
|
|
|
73
77
|
this.tools = [
|
|
74
78
|
// Standard tools
|
|
75
79
|
new send_message_js_1.SendMessageTool(),
|
|
76
|
-
new get_conversation_js_1.GetConversationTool(),
|
|
77
80
|
new sync_inbox_js_1.SyncInboxTool(),
|
|
78
81
|
new get_inbox_js_1.GetInboxTool(),
|
|
82
|
+
new sync_conversation_js_1.SyncConversationTool(),
|
|
83
|
+
new get_conversation_js_1.GetConversationTool(),
|
|
79
84
|
new sync_network_js_1.SyncNetworkTool(),
|
|
80
85
|
new get_network_js_1.GetNetworkTool(),
|
|
81
86
|
new manage_conversation_js_1.ManageConversationTool(),
|
|
@@ -94,6 +99,8 @@ class LinkedApiTools {
|
|
|
94
99
|
new search_posts_js_1.SearchPostsTool(),
|
|
95
100
|
new fetch_company_js_1.FetchCompanyTool(),
|
|
96
101
|
new fetch_person_js_1.FetchPersonTool(),
|
|
102
|
+
new endorse_person_skill_js_1.EndorsePersonSkillTool(),
|
|
103
|
+
new endorse_person_skills_js_1.EndorsePersonSkillsTool(),
|
|
97
104
|
new fetch_post_js_1.FetchPostTool(),
|
|
98
105
|
new fetch_job_js_1.FetchJobTool(),
|
|
99
106
|
new react_to_post_js_1.ReactToPostTool(),
|
|
@@ -108,8 +115,9 @@ class LinkedApiTools {
|
|
|
108
115
|
new retrieve_performance_js_1.RetrievePerformanceTool(),
|
|
109
116
|
// Sales Navigator tools
|
|
110
117
|
new nv_send_message_js_1.NvSendMessageTool(),
|
|
111
|
-
new nv_get_conversation_js_1.NvGetConversationTool(),
|
|
112
118
|
new nv_sync_inbox_js_1.NvSyncInboxTool(),
|
|
119
|
+
new nv_sync_conversation_js_1.NvSyncConversationTool(),
|
|
120
|
+
new nv_get_conversation_js_1.NvGetConversationTool(),
|
|
113
121
|
new nv_manage_conversation_js_1.NvManageConversationTool(),
|
|
114
122
|
new nv_search_companies_js_1.NvSearchCompaniesTool(),
|
|
115
123
|
new nv_search_people_js_1.NvSearchPeopleTool(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linked-api-tools.js","sourceRoot":"","sources":["../src/linked-api-tools.ts"],"names":[],"mappings":";;;AAGA,uEAAoE;AACpE,mGAA8F;AAC9F,+EAA2E;AAC3E,uGAAkG;AAClG,2EAAuE;AACvE,qFAAiF;AACjF,yEAAqE;AACrE,6FAAwF;AACxF,uFAAkF;AAClF,iFAA4E;AAC5E,qEAAiE;AACjE,mEAA+D;AAC/D,+FAA0F;AAC1F,iFAA6E;AAC7E,yFAAoF;AACpF,yEAAqE;AACrE,qEAAiE;AACjE,mEAA+D;AAC/D,mFAA+E;AAC/E,mEAA+D;AAC/D,2DAAwD;AACxD,+DAA4D;AAC5D,mFAA+E;AAC/E,+DAA4D;AAC5D,uDAAoD;AACpD,6DAA0D;AAC1D,yDAAsD;AACtD,2EAAiE;AACjE,+DAA4D;AAC5D,qEAAkE;AAClE,uDAAoD;AACpD,2DAAwD;AACxD,2EAAuE;AACvE,uEAAoE;AACpE,2EAAwE;AACxE,qEAAiE;AACjE,mEAA+D;AAC/D,2EAAuE;AACvE,iFAA6E;AAC7E,2EAAuE;AACvE,qEAAiE;AACjE,mEAA+D;AAC/D,+DAA2D;AAC3D,qEAAiE;AACjE,+DAA2D;AAC3D,uEAAoE;AACpE,qEAAiE;AACjE,6EAA0E;AAC1E,+DAA4D;AAC5D,6EAA0E;AAC1E,uFAAmF;AACnF,6EAA0E;AAC1E,qFAAiF;AACjF,6DAA0D;AAC1D,qEAAkE;AAClE,2DAAwD;AACxD,+DAA4D;AAC5D,6DAA0D;AAC1D,mFAA+E;AAC/E,+DAA4D;AAC5D,6DAA0D;AAC1D,yDAAsD;AACtD,6DAA0D;AAC1D,2FAAuF;AAiBvF,MAAa,cAAc;IACT,KAAK,CAA0C;IAC/C,UAAU,CAA6C;IACvD,WAAW,CAA8C;IAEzE;QACE,IAAI,CAAC,KAAK,GAAG;YACX,iBAAiB;YACjB,IAAI,iCAAe,EAAE;YACrB,IAAI,
|
|
1
|
+
{"version":3,"file":"linked-api-tools.js","sourceRoot":"","sources":["../src/linked-api-tools.ts"],"names":[],"mappings":";;;AAGA,uEAAoE;AACpE,mGAA8F;AAC9F,+EAA2E;AAC3E,uGAAkG;AAClG,2EAAuE;AACvE,qFAAiF;AACjF,yEAAqE;AACrE,6FAAwF;AACxF,uFAAkF;AAClF,iFAA4E;AAC5E,qEAAiE;AACjE,mEAA+D;AAC/D,+FAA0F;AAC1F,iFAA6E;AAC7E,yFAAoF;AACpF,yEAAqE;AACrE,qEAAiE;AACjE,mEAA+D;AAC/D,mFAA+E;AAC/E,mEAA+D;AAC/D,2DAAwD;AACxD,+DAA4D;AAC5D,6EAAyE;AACzE,+EAA2E;AAC3E,mFAA+E;AAC/E,+DAA4D;AAC5D,uDAAoD;AACpD,6DAA0D;AAC1D,yDAAsD;AACtD,2EAAiE;AACjE,+DAA4D;AAC5D,qEAAkE;AAClE,uDAAoD;AACpD,2DAAwD;AACxD,2EAAuE;AACvE,uEAAoE;AACpE,2EAAwE;AACxE,qEAAiE;AACjE,mEAA+D;AAC/D,2EAAuE;AACvE,iFAA6E;AAC7E,2EAAuE;AACvE,qEAAiE;AACjE,mEAA+D;AAC/D,6EAAyE;AACzE,+DAA2D;AAC3D,qEAAiE;AACjE,+DAA2D;AAC3D,uEAAoE;AACpE,qEAAiE;AACjE,6EAA0E;AAC1E,+DAA4D;AAC5D,6EAA0E;AAC1E,uFAAmF;AACnF,6EAA0E;AAC1E,qFAAiF;AACjF,6DAA0D;AAC1D,qEAAkE;AAClE,2DAAwD;AACxD,+DAA4D;AAC5D,6DAA0D;AAC1D,mFAA+E;AAC/E,+DAA4D;AAC5D,6DAA0D;AAC1D,uEAAoE;AACpE,yDAAsD;AACtD,6DAA0D;AAC1D,2FAAuF;AAiBvF,MAAa,cAAc;IACT,KAAK,CAA0C;IAC/C,UAAU,CAA6C;IACvD,WAAW,CAA8C;IAEzE;QACE,IAAI,CAAC,KAAK,GAAG;YACX,iBAAiB;YACjB,IAAI,iCAAe,EAAE;YACrB,IAAI,6BAAa,EAAE;YACnB,IAAI,2BAAY,EAAE;YAClB,IAAI,2CAAoB,EAAE;YAC1B,IAAI,yCAAmB,EAAE;YACzB,IAAI,iCAAe,EAAE;YACrB,IAAI,+BAAc,EAAE;YACpB,IAAI,+CAAsB,EAAE;YAC5B,IAAI,sDAAyB,EAAE;YAC/B,IAAI,iDAAuB,EAAE;YAC7B,IAAI,sDAAyB,EAAE;YAC/B,IAAI,8DAA6B,EAAE;YACnC,IAAI,0DAA2B,EAAE;YACjC,IAAI,iDAAuB,EAAE;YAC7B,IAAI,2CAAoB,EAAE;YAC1B,IAAI,2CAAoB,EAAE;YAC1B,IAAI,2CAAoB,EAAE;YAC1B,IAAI,yCAAmB,EAAE;YACzB,IAAI,mCAAgB,EAAE;YACtB,IAAI,+BAAc,EAAE;YACpB,IAAI,iCAAe,EAAE;YACrB,IAAI,mCAAgB,EAAE;YACtB,IAAI,iCAAe,EAAE;YACrB,IAAI,gDAAsB,EAAE;YAC5B,IAAI,kDAAuB,EAAE;YAC7B,IAAI,6BAAa,EAAE;YACnB,IAAI,2BAAY,EAAE;YAClB,IAAI,kCAAe,EAAE;YACrB,IAAI,sCAAiB,EAAE;YACvB,IAAI,wCAAkB,EAAE;YACxB,IAAI,wCAAkB,EAAE;YACxB,IAAI,+BAAc,EAAE;YACpB,IAAI,mCAAgB,EAAE;YACtB,IAAI,mCAAgB,EAAE;YACtB,IAAI,wDAA0B,EAAE;YAChC,IAAI,iCAAe,EAAE;YACrB,IAAI,iDAAuB,EAAE;YAC7B,wBAAwB;YACxB,IAAI,sCAAiB,EAAE;YACvB,IAAI,kCAAe,EAAE;YACrB,IAAI,gDAAsB,EAAE;YAC5B,IAAI,8CAAqB,EAAE;YAC3B,IAAI,oDAAwB,EAAE;YAC9B,IAAI,8CAAqB,EAAE;YAC3B,IAAI,wCAAkB,EAAE;YACxB,IAAI,wCAAkB,EAAE;YACxB,IAAI,sCAAiB,EAAE;YACvB,cAAc;YACd,IAAI,sDAAyB,EAAE;YAC/B,IAAI,8CAAqB,EAAE;YAC3B,IAAI,wCAAe,EAAE;YACrB,IAAI,mCAAgB,EAAE;SACvB,CAAC;QAEF,IAAI,CAAC,UAAU,GAAG;YAChB,IAAI,iEAA8B,EAAE;YACpC,IAAI,sCAAiB,EAAE;YACvB,IAAI,sCAAiB,EAAE;YACvB,IAAI,4CAAoB,EAAE;YAC1B,IAAI,2DAA2B,EAAE;YACjC,IAAI,yEAAkC,EAAE;YACxC,IAAI,kDAAuB,EAAE;YAC7B,IAAI,+DAA6B,EAAE;YACnC,IAAI,qEAAgC,EAAE;YACtC,IAAI,wDAA0B,EAAE;YAChC,IAAI,oDAAwB,EAAE;YAC9B,IAAI,yDAA0B,EAAE;YAChC,IAAI,wCAAkB,EAAE;YACxB,IAAI,mDAAuB,EAAE;YAC7B,IAAI,wCAAkB,EAAE;YACxB,IAAI,8CAAqB,EAAE;YAC3B,IAAI,4CAAoB,EAAE;SAC3B,CAAC;QAEF,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,mCAAgB,EAAE,CAAC,CAAC;IAC9C,CAAC;IAEM,UAAU,CAAC,IAAY;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACvD,CAAC;IAEM,eAAe,CAAC,IAAY;QACjC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAC5D,CAAC;IAEM,gBAAgB,CAAC,IAAY;QAClC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAC7D,CAAC;CACF;AAhGD,wCAgGC"}
|
|
@@ -21,7 +21,7 @@ class AdminDeleteLimitsTool extends admin_tool_js_1.AdminTool {
|
|
|
21
21
|
getTool() {
|
|
22
22
|
return {
|
|
23
23
|
name: this.name,
|
|
24
|
-
description: 'Delete specific rate limits for an account.
|
|
24
|
+
description: 'Delete specific rate limits for an account. Each removed category/period has no limit until set again. Use admin_reset_limits to restore all default limits for the account.',
|
|
25
25
|
inputSchema: {
|
|
26
26
|
type: 'object',
|
|
27
27
|
properties: {
|
|
@@ -37,7 +37,7 @@ class AdminDeleteLimitsTool extends admin_tool_js_1.AdminTool {
|
|
|
37
37
|
properties: {
|
|
38
38
|
category: {
|
|
39
39
|
type: 'string',
|
|
40
|
-
description: 'Limit category',
|
|
40
|
+
description: 'Limit category, e.g. stEndorsements',
|
|
41
41
|
},
|
|
42
42
|
period: {
|
|
43
43
|
type: 'string',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-delete-limits.js","sourceRoot":"","sources":["../../src/tools/admin-delete-limits.ts"],"names":[],"mappings":";;;;;;AAEA,8CAAoB;AAEpB,0DAAmD;AAEnD,MAAa,qBAAsB,SAAQ,yBAAoC;IAC7D,IAAI,GAAG,qBAAqB,CAAC;IAC1B,MAAM,GAAG,aAAC,CAAC,MAAM,CAAC;QACnC,SAAS,EAAE,aAAC,CAAC,MAAM,EAAE;QACrB,MAAM,EAAE,aAAC,CAAC,KAAK,CACb,aAAC,CAAC,MAAM,CAAC;YACP,QAAQ,EAAE,aAAC,CAAC,MAAM,EAAE;YACpB,MAAM,EAAE,aAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;SAC/C,CAAC,CACH;KACF,CAAC,CAAC;IAEa,KAAK,CAAC,OAAO,CAAC,EAC5B,KAAK,EACL,IAAI,GAIL;QACC,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAEe,OAAO;QACrB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"admin-delete-limits.js","sourceRoot":"","sources":["../../src/tools/admin-delete-limits.ts"],"names":[],"mappings":";;;;;;AAEA,8CAAoB;AAEpB,0DAAmD;AAEnD,MAAa,qBAAsB,SAAQ,yBAAoC;IAC7D,IAAI,GAAG,qBAAqB,CAAC;IAC1B,MAAM,GAAG,aAAC,CAAC,MAAM,CAAC;QACnC,SAAS,EAAE,aAAC,CAAC,MAAM,EAAE;QACrB,MAAM,EAAE,aAAC,CAAC,KAAK,CACb,aAAC,CAAC,MAAM,CAAC;YACP,QAAQ,EAAE,aAAC,CAAC,MAAM,EAAE;YACpB,MAAM,EAAE,aAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;SAC/C,CAAC,CACH;KACF,CAAC,CAAC;IAEa,KAAK,CAAC,OAAO,CAAC,EAC5B,KAAK,EACL,IAAI,GAIL;QACC,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAEe,OAAO;QACrB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EACT,8KAA8K;YAChL,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,SAAS,EAAE;wBACT,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,cAAc;qBAC5B;oBACD,MAAM,EAAE;wBACN,IAAI,EAAE,OAAO;wBACb,WAAW,EAAE,+BAA+B;wBAC5C,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;4BACd,UAAU,EAAE;gCACV,QAAQ,EAAE;oCACR,IAAI,EAAE,QAAQ;oCACd,WAAW,EAAE,qCAAqC;iCACnD;gCACD,MAAM,EAAE;oCACN,IAAI,EAAE,QAAQ;oCACd,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC;oCACpC,WAAW,EAAE,cAAc;iCAC5B;6BACF;4BACD,QAAQ,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;yBACjC;qBACF;iBACF;gBACD,QAAQ,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC;aAClC;SACF,CAAC;IACJ,CAAC;CACF;AA1DD,sDA0DC"}
|
|
@@ -23,7 +23,7 @@ class AdminSetLimitsTool extends admin_tool_js_1.AdminTool {
|
|
|
23
23
|
getTool() {
|
|
24
24
|
return {
|
|
25
25
|
name: this.name,
|
|
26
|
-
description: 'Set rate limits for an account. Only specified limits are created or updated; other limits remain unchanged. Categories: stPersonProfileViews, stCompanyPageViews, stConnectionRequests, stMessages, stSearchQueries, stReactions, stComments, stPosts, nvPersonProfileViews, nvCompanyPageViews, nvMessages.',
|
|
26
|
+
description: 'Set rate limits for an account. Only specified limits are created or updated; other limits remain unchanged. Categories: stPersonProfileViews, stCompanyPageViews, stConnectionRequests, stMessages, stSearchQueries, stReactions, stComments, stPosts, stEndorsements, nvPersonProfileViews, nvCompanyPageViews, nvMessages.',
|
|
27
27
|
inputSchema: {
|
|
28
28
|
type: 'object',
|
|
29
29
|
properties: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-set-limits.js","sourceRoot":"","sources":["../../src/tools/admin-set-limits.ts"],"names":[],"mappings":";;;;;;AAEA,8CAAoB;AAEpB,0DAAmD;AAEnD,MAAa,kBAAmB,SAAQ,yBAAiC;IACvD,IAAI,GAAG,kBAAkB,CAAC;IACvB,MAAM,GAAG,aAAC,CAAC,MAAM,CAAC;QACnC,SAAS,EAAE,aAAC,CAAC,MAAM,EAAE;QACrB,MAAM,EAAE,aAAC,CAAC,KAAK,CACb,aAAC,CAAC,MAAM,CAAC;YACP,QAAQ,EAAE,aAAC,CAAC,MAAM,EAAE;YACpB,MAAM,EAAE,aAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC9C,QAAQ,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACjC,SAAS,EAAE,aAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;SAClC,CAAC,CACH;KACF,CAAC,CAAC;IAEa,KAAK,CAAC,OAAO,CAAC,EAC5B,KAAK,EACL,IAAI,GAIL;QACC,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAEe,OAAO;QACrB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EACT,+
|
|
1
|
+
{"version":3,"file":"admin-set-limits.js","sourceRoot":"","sources":["../../src/tools/admin-set-limits.ts"],"names":[],"mappings":";;;;;;AAEA,8CAAoB;AAEpB,0DAAmD;AAEnD,MAAa,kBAAmB,SAAQ,yBAAiC;IACvD,IAAI,GAAG,kBAAkB,CAAC;IACvB,MAAM,GAAG,aAAC,CAAC,MAAM,CAAC;QACnC,SAAS,EAAE,aAAC,CAAC,MAAM,EAAE;QACrB,MAAM,EAAE,aAAC,CAAC,KAAK,CACb,aAAC,CAAC,MAAM,CAAC;YACP,QAAQ,EAAE,aAAC,CAAC,MAAM,EAAE;YACpB,MAAM,EAAE,aAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC9C,QAAQ,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACjC,SAAS,EAAE,aAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;SAClC,CAAC,CACH;KACF,CAAC,CAAC;IAEa,KAAK,CAAC,OAAO,CAAC,EAC5B,KAAK,EACL,IAAI,GAIL;QACC,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAEe,OAAO;QACrB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EACT,+TAA+T;YACjU,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,SAAS,EAAE;wBACT,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,cAAc;qBAC5B;oBACD,MAAM,EAAE;wBACN,IAAI,EAAE,OAAO;wBACb,WAAW,EAAE,+BAA+B;wBAC5C,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;4BACd,UAAU,EAAE;gCACV,QAAQ,EAAE;oCACR,IAAI,EAAE,QAAQ;oCACd,WAAW,EAAE,gBAAgB;iCAC9B;gCACD,MAAM,EAAE;oCACN,IAAI,EAAE,QAAQ;oCACd,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC;oCACpC,WAAW,EAAE,cAAc;iCAC5B;gCACD,QAAQ,EAAE;oCACR,IAAI,EAAE,QAAQ;oCACd,WAAW,EAAE,gCAAgC;iCAC9C;gCACD,SAAS,EAAE;oCACT,IAAI,EAAE,SAAS;oCACf,WAAW,EAAE,gDAAgD;iCAC9D;6BACF;4BACD,QAAQ,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC;yBAC7C;qBACF;iBACF;gBACD,QAAQ,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC;aAClC;SACF,CAAC;IACJ,CAAC;CACF;AApED,gDAoEC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { TEndorsePersonSkillParams } from '@linkedapi/node';
|
|
2
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { OperationTool } from '../utils/linked-api-tool.js';
|
|
5
|
+
export declare class EndorsePersonSkillTool extends OperationTool<TEndorsePersonSkillParams, void> {
|
|
6
|
+
readonly name = "endorse_person_skill";
|
|
7
|
+
readonly operationName: "endorsePersonSkill";
|
|
8
|
+
protected readonly schema: z.ZodObject<{
|
|
9
|
+
personUrl: z.ZodString;
|
|
10
|
+
skillName: z.ZodString;
|
|
11
|
+
}, z.core.$strip>;
|
|
12
|
+
getTool(): Tool;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=endorse-person-skill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endorse-person-skill.d.ts","sourceRoot":"","sources":["../../src/tools/endorse-person-skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,qBAAa,sBAAuB,SAAQ,aAAa,CAAC,yBAAyB,EAAE,IAAI,CAAC;IACxF,SAAyB,IAAI,0BAA0B;IACvD,SAAyB,aAAa,uBAAqC;IAC3E,mBAA4B,MAAM;;;sBAG/B;IAEa,OAAO,IAAI,IAAI;CAwBhC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EndorsePersonSkillTool = void 0;
|
|
4
|
+
const node_1 = require("@linkedapi/node");
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const linked_api_tool_js_1 = require("../utils/linked-api-tool.js");
|
|
7
|
+
class EndorsePersonSkillTool extends linked_api_tool_js_1.OperationTool {
|
|
8
|
+
name = 'endorse_person_skill';
|
|
9
|
+
operationName = node_1.OPERATION_NAME.endorsePersonSkill;
|
|
10
|
+
schema = zod_1.z.object({
|
|
11
|
+
personUrl: zod_1.z.string(),
|
|
12
|
+
skillName: zod_1.z.string().min(1).max(200),
|
|
13
|
+
});
|
|
14
|
+
getTool() {
|
|
15
|
+
return {
|
|
16
|
+
name: this.name,
|
|
17
|
+
description: "Endorses one skill by name on a 1st-degree connection's profile. Skill names are in the profile owner's language, regardless of your LinkedIn language. An already-endorsed skill counts as success and is never removed. Every success, including an existing endorsement, counts toward the stEndorsements limit. Use endorse_person_skills to select skills with patterns or endorse all skills. If this workflow is still running, do not retry this tool; retrying can count the same skill toward the stEndorsements limit again.",
|
|
18
|
+
inputSchema: {
|
|
19
|
+
type: 'object',
|
|
20
|
+
properties: {
|
|
21
|
+
personUrl: {
|
|
22
|
+
type: 'string',
|
|
23
|
+
description: 'Public or hashed LinkedIn URL of your 1st-degree connection.',
|
|
24
|
+
},
|
|
25
|
+
skillName: {
|
|
26
|
+
type: 'string',
|
|
27
|
+
minLength: 1,
|
|
28
|
+
maxLength: 200,
|
|
29
|
+
description: "Exact skill name in the profile owner's language, up to 200 characters. Letter case and extra spaces are ignored. This is not a pattern.",
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
required: ['personUrl', 'skillName'],
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.EndorsePersonSkillTool = EndorsePersonSkillTool;
|
|
38
|
+
//# sourceMappingURL=endorse-person-skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endorse-person-skill.js","sourceRoot":"","sources":["../../src/tools/endorse-person-skill.ts"],"names":[],"mappings":";;;AAAA,0CAA4E;AAE5E,6BAAwB;AAExB,oEAA4D;AAE5D,MAAa,sBAAuB,SAAQ,kCAA8C;IAC/D,IAAI,GAAG,sBAAsB,CAAC;IAC9B,aAAa,GAAG,qBAAc,CAAC,kBAAkB,CAAC;IAC/C,MAAM,GAAG,OAAC,CAAC,MAAM,CAAC;QAC5C,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE;QACrB,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;KACtC,CAAC,CAAC;IAEa,OAAO;QACrB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EACT,ygBAAygB;YAC3gB,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,SAAS,EAAE;wBACT,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,8DAA8D;qBAC5E;oBACD,SAAS,EAAE;wBACT,IAAI,EAAE,QAAQ;wBACd,SAAS,EAAE,CAAC;wBACZ,SAAS,EAAE,GAAG;wBACd,WAAW,EACT,0IAA0I;qBAC7I;iBACF;gBACD,QAAQ,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC;aACrC;SACF,CAAC;IACJ,CAAC;CACF;AAhCD,wDAgCC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { TEndorsePersonSkillsParams, TPersonSkillEndorsement } from '@linkedapi/node';
|
|
2
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { OperationTool } from '../utils/linked-api-tool.js';
|
|
5
|
+
export declare class EndorsePersonSkillsTool extends OperationTool<TEndorsePersonSkillsParams, Array<TPersonSkillEndorsement>> {
|
|
6
|
+
readonly name = "endorse_person_skills";
|
|
7
|
+
readonly operationName: "endorsePersonSkills";
|
|
8
|
+
protected readonly schema: z.ZodObject<{
|
|
9
|
+
personUrl: z.ZodString;
|
|
10
|
+
skillNamePatterns: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
11
|
+
}, z.core.$strip>;
|
|
12
|
+
getTool(): Tool;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=endorse-person-skills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endorse-person-skills.d.ts","sourceRoot":"","sources":["../../src/tools/endorse-person-skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,0BAA0B,EAC1B,uBAAuB,EACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,qBAAa,uBAAwB,SAAQ,aAAa,CACxD,0BAA0B,EAC1B,KAAK,CAAC,uBAAuB,CAAC,CAC/B;IACC,SAAyB,IAAI,2BAA2B;IACxD,SAAyB,aAAa,wBAAsC;IAC5E,mBAA4B,MAAM;;;sBAG/B;IAEa,OAAO,IAAI,IAAI;CA6BhC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EndorsePersonSkillsTool = void 0;
|
|
4
|
+
const node_1 = require("@linkedapi/node");
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const linked_api_tool_js_1 = require("../utils/linked-api-tool.js");
|
|
7
|
+
class EndorsePersonSkillsTool extends linked_api_tool_js_1.OperationTool {
|
|
8
|
+
name = 'endorse_person_skills';
|
|
9
|
+
operationName = node_1.OPERATION_NAME.endorsePersonSkills;
|
|
10
|
+
schema = zod_1.z.object({
|
|
11
|
+
personUrl: zod_1.z.string(),
|
|
12
|
+
skillNamePatterns: zod_1.z.array(zod_1.z.string().min(1).max(200)).min(1).max(20).optional(),
|
|
13
|
+
});
|
|
14
|
+
getTool() {
|
|
15
|
+
return {
|
|
16
|
+
name: this.name,
|
|
17
|
+
description: "Endorses selected skills of a 1st-degree connection, returning each selected skill's name, success and error if it failed. Skill names are in the profile owner's language. Patterns use RE2, are case-insensitive and match anywhere; anchor with ^…$ to match a whole name. Omit skillNamePatterns to endorse all skills; never pass []. An already-endorsed skill counts as success and is never removed. Each success counts toward the stEndorsements limit, including existing endorsements. The limit is checked for each skill; a failure does not stop the others, so check every item's success. If this workflow is still running, do not retry this tool; retrying can count the same skills toward the stEndorsements limit again.",
|
|
18
|
+
inputSchema: {
|
|
19
|
+
type: 'object',
|
|
20
|
+
properties: {
|
|
21
|
+
personUrl: {
|
|
22
|
+
type: 'string',
|
|
23
|
+
description: 'Public or hashed LinkedIn URL of your 1st-degree connection.',
|
|
24
|
+
},
|
|
25
|
+
skillNamePatterns: {
|
|
26
|
+
type: 'array',
|
|
27
|
+
minItems: 1,
|
|
28
|
+
maxItems: 20,
|
|
29
|
+
items: {
|
|
30
|
+
type: 'string',
|
|
31
|
+
minLength: 1,
|
|
32
|
+
maxLength: 200,
|
|
33
|
+
},
|
|
34
|
+
description: "Optional. 1-20 RE2 patterns, each 1-200 characters, matching names in the profile owner's language. Any matching pattern selects the skill. Matching is case-insensitive and searches anywhere: manage matches Project Management; ^scrum$ matches only the whole name Scrum. Lookaround and backreferences are unsupported. Omit this parameter to endorse all skills; never pass an empty array.",
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
required: ['personUrl'],
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.EndorsePersonSkillsTool = EndorsePersonSkillsTool;
|
|
43
|
+
//# sourceMappingURL=endorse-person-skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endorse-person-skills.js","sourceRoot":"","sources":["../../src/tools/endorse-person-skills.ts"],"names":[],"mappings":";;;AAAA,0CAIyB;AAEzB,6BAAwB;AAExB,oEAA4D;AAE5D,MAAa,uBAAwB,SAAQ,kCAG5C;IAC0B,IAAI,GAAG,uBAAuB,CAAC;IAC/B,aAAa,GAAG,qBAAc,CAAC,mBAAmB,CAAC;IAChD,MAAM,GAAG,OAAC,CAAC,MAAM,CAAC;QAC5C,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE;QACrB,iBAAiB,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;KACjF,CAAC,CAAC;IAEa,OAAO;QACrB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EACT,itBAAitB;YACntB,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,SAAS,EAAE;wBACT,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,8DAA8D;qBAC5E;oBACD,iBAAiB,EAAE;wBACjB,IAAI,EAAE,OAAO;wBACb,QAAQ,EAAE,CAAC;wBACX,QAAQ,EAAE,EAAE;wBACZ,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;4BACd,SAAS,EAAE,CAAC;4BACZ,SAAS,EAAE,GAAG;yBACf;wBACD,WAAW,EACT,oYAAoY;qBACvY;iBACF;gBACD,QAAQ,EAAE,CAAC,WAAW,CAAC;aACxB;SACF,CAAC;IACJ,CAAC;CACF;AAxCD,0DAwCC"}
|
|
@@ -38,7 +38,7 @@ class GetConversationTool extends linked_api_tool_js_1.LinkedApiTool {
|
|
|
38
38
|
getTool() {
|
|
39
39
|
return {
|
|
40
40
|
name: this.name,
|
|
41
|
-
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. It also carries personUrn — the permanent LinkedIn member URN (urn:li:member:<id>) of the person, or null when LinkedIn does not expose it.',
|
|
41
|
+
description: 'Legacy. Prefer get_inbox with personUrl. 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.',
|
|
42
42
|
inputSchema: {
|
|
43
43
|
type: 'object',
|
|
44
44
|
properties: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-conversation.js","sourceRoot":"","sources":["../../src/tools/get-conversation.ts"],"names":[],"mappings":";;;;;;AAAA,0CAIyB;AAEzB,8CAAoB;AAGpB,oEAA4D;AAE5D,MAAa,mBAAoB,SAAQ,kCAGxC;IACiB,IAAI,GAAG,kBAAkB,CAAC;IACvB,MAAM,GAAG,aAAC,CAAC,MAAM,CAAC;QACnC,SAAS,EAAE,aAAC,CAAC,MAAM,EAAE;QACrB,KAAK,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC7B,CAAC,CAAC;IAEa,KAAK,CAAC,OAAO,CAAC,EAC5B,SAAS,EACT,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,GAI3B;QACC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC/E,IAAI,aAAa,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,OAAO,aAAa,CAAC;QACvB,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QACpE,OAAO,EAAE,GAAG,GAAG;YACnB,aAAa,EAAE,qBAAc,CAAC,gBAAgB,EAAE,CAAC;IAC/C,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,SAAoB,EACpB,SAAiB,EACjB,KAAc;QAEd,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,iBAAiB,CAAC;YACtD;gBACE,SAAS,EAAE,SAAS;gBACpB,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,KAAK;aACb;SACF,CAAC,CAAC;QACH,OAAO;YACL,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;YAC5D,MAAM,EAAE,aAAa,CAAC,MAAM;SAC7B,CAAC;IACJ,CAAC;IAEe,OAAO;QACrB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"get-conversation.js","sourceRoot":"","sources":["../../src/tools/get-conversation.ts"],"names":[],"mappings":";;;;;;AAAA,0CAIyB;AAEzB,8CAAoB;AAGpB,oEAA4D;AAE5D,MAAa,mBAAoB,SAAQ,kCAGxC;IACiB,IAAI,GAAG,kBAAkB,CAAC;IACvB,MAAM,GAAG,aAAC,CAAC,MAAM,CAAC;QACnC,SAAS,EAAE,aAAC,CAAC,MAAM,EAAE;QACrB,KAAK,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC7B,CAAC,CAAC;IAEa,KAAK,CAAC,OAAO,CAAC,EAC5B,SAAS,EACT,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,GAI3B;QACC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC/E,IAAI,aAAa,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,OAAO,aAAa,CAAC;QACvB,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QACpE,OAAO,EAAE,GAAG,GAAG;YACnB,aAAa,EAAE,qBAAc,CAAC,gBAAgB,EAAE,CAAC;IAC/C,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,SAAoB,EACpB,SAAiB,EACjB,KAAc;QAEd,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,iBAAiB,CAAC;YACtD;gBACE,SAAS,EAAE,SAAS;gBACpB,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,KAAK;aACb;SACF,CAAC,CAAC;QACH,OAAO;YACL,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;YAC5D,MAAM,EAAE,aAAa,CAAC,MAAM;SAC7B,CAAC;IACJ,CAAC;IAEe,OAAO;QACrB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EACT,42BAA42B;YAC92B,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,SAAS,EAAE;wBACT,IAAI,EAAE,QAAQ;wBACd,WAAW,EACT,mHAAmH;qBACtH;oBACD,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,WAAW,EACT,0KAA0K;qBAC7K;iBACF;gBACD,QAAQ,EAAE,CAAC,WAAW,CAAC;aACxB;SACF,CAAC;IACJ,CAAC;CACF;AAnED,kDAmEC"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import LinkedApi, { TInboxPollRequest, TInboxPollResult, TMappedResponse } from '@linkedapi/node';
|
|
1
|
+
import LinkedApi, { TInboxPersonPollResult, TInboxPollRequest, TInboxPollResult, TMappedResponse } from '@linkedapi/node';
|
|
2
2
|
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
3
3
|
import z from 'zod';
|
|
4
4
|
import { LinkedApiTool } from '../utils/linked-api-tool.js';
|
|
5
|
-
|
|
5
|
+
type TGetInboxArgs = TInboxPollRequest & {
|
|
6
|
+
personUrl?: string;
|
|
7
|
+
};
|
|
8
|
+
export declare class GetInboxTool extends LinkedApiTool<TGetInboxArgs, TInboxPollResult | TInboxPersonPollResult> {
|
|
6
9
|
readonly name = "get_inbox";
|
|
7
10
|
protected readonly schema: z.ZodObject<{
|
|
8
11
|
since: z.ZodOptional<z.ZodString>;
|
|
@@ -11,11 +14,13 @@ export declare class GetInboxTool extends LinkedApiTool<TInboxPollRequest, TInbo
|
|
|
11
14
|
nv: "nv";
|
|
12
15
|
}>>;
|
|
13
16
|
threadId: z.ZodOptional<z.ZodString>;
|
|
17
|
+
personUrl: z.ZodOptional<z.ZodString>;
|
|
14
18
|
}, z.core.$strip>;
|
|
15
|
-
execute({ linkedapi, args: { since, type, threadId }, }: {
|
|
19
|
+
execute({ linkedapi, args: { since, type, threadId, personUrl }, }: {
|
|
16
20
|
linkedapi: LinkedApi;
|
|
17
|
-
args:
|
|
18
|
-
}): Promise<TMappedResponse<TInboxPollResult>>;
|
|
21
|
+
args: TGetInboxArgs;
|
|
22
|
+
}): Promise<TMappedResponse<TInboxPollResult | TInboxPersonPollResult>>;
|
|
19
23
|
getTool(): Tool;
|
|
20
24
|
}
|
|
25
|
+
export {};
|
|
21
26
|
//# sourceMappingURL=get-inbox.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-inbox.d.ts","sourceRoot":"","sources":["../../src/tools/get-inbox.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"get-inbox.d.ts","sourceRoot":"","sources":["../../src/tools/get-inbox.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,EAAE,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,KAAK,aAAa,GAAG,iBAAiB,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhE,qBAAa,YAAa,SAAQ,aAAa,CAC7C,aAAa,EACb,gBAAgB,GAAG,sBAAsB,CAC1C;IACC,SAAgB,IAAI,eAAe;IACnC,SAAS,CAAC,QAAQ,CAAC,MAAM;;;;;;;;sBAKtB;IAEmB,OAAO,CAAC,EAC5B,SAAS,EACT,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAC3C,EAAE;QACD,SAAS,EAAE,SAAS,CAAC;QACrB,IAAI,EAAE,aAAa,CAAC;KACrB,GAAG,OAAO,CAAC,eAAe,CAAC,gBAAgB,GAAG,sBAAsB,CAAC,CAAC;IASvD,OAAO,IAAI,IAAI;CAkChC"}
|
package/dist/tools/get-inbox.js
CHANGED
|
@@ -12,24 +12,26 @@ class GetInboxTool extends linked_api_tool_js_1.LinkedApiTool {
|
|
|
12
12
|
since: zod_1.default.string().optional(),
|
|
13
13
|
type: zod_1.default.enum(['st', 'nv']).optional(),
|
|
14
14
|
threadId: zod_1.default.string().optional(),
|
|
15
|
+
personUrl: zod_1.default.string().optional(),
|
|
15
16
|
});
|
|
16
|
-
async execute({ linkedapi, args: { since, type, threadId }, }) {
|
|
17
|
+
async execute({ linkedapi, args: { since, type, threadId, personUrl }, }) {
|
|
17
18
|
return linkedapi.pollInbox({
|
|
18
19
|
since,
|
|
19
20
|
type,
|
|
20
21
|
threadId,
|
|
22
|
+
personUrl,
|
|
21
23
|
});
|
|
22
24
|
}
|
|
23
25
|
getTool() {
|
|
24
26
|
return {
|
|
25
27
|
name: this.name,
|
|
26
|
-
description: "
|
|
28
|
+
description: "Default way to read LinkedIn messages (standard and Sales Navigator), newest first. Without personUrl returns new messages across all conversations since inbox monitoring was enabled; requires sync_inbox (or nv_sync_inbox) once per account. With personUrl returns the whole known conversation with that person, including history loaded by sync_conversation, as { messages, threads }: each message also carries inboxMessageId (its id in the result without personUrl, or null) and threadId may be null; each thread carries historyFrom and historyComplete. Check threads[].historyComplete – if false and you need earlier messages, call sync_conversation once, then call get_inbox again. 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. personHashedUrl is LinkedIn's hashed profile URL and is always present; personPublicUrl is the public vanity URL when that person has been resolved, otherwise null.",
|
|
27
29
|
inputSchema: {
|
|
28
30
|
type: 'object',
|
|
29
31
|
properties: {
|
|
30
32
|
since: {
|
|
31
33
|
type: 'string',
|
|
32
|
-
description: "Optional ISO 8601 timestamp to only retrieve messages after this date (e.g., '2024-01-15T10:30:00Z'). If not provided, all captured messages are returned.",
|
|
34
|
+
description: "Optional ISO 8601 timestamp to only retrieve messages at or after this date (e.g., '2024-01-15T10:30:00Z'). If not provided, all captured messages are returned. Message times are whole minutes.",
|
|
33
35
|
},
|
|
34
36
|
type: {
|
|
35
37
|
type: 'string',
|
|
@@ -40,6 +42,10 @@ class GetInboxTool extends linked_api_tool_js_1.LinkedApiTool {
|
|
|
40
42
|
type: 'string',
|
|
41
43
|
description: 'Optional conversation thread identifier to restrict the result to a single thread.',
|
|
42
44
|
},
|
|
45
|
+
personUrl: {
|
|
46
|
+
type: 'string',
|
|
47
|
+
description: "Optional LinkedIn URL of one person to get the whole known conversation with them instead of the whole inbox (e.g., 'https://www.linkedin.com/in/john-doe'). A hashed URL (personHashedUrl from a message) always matches; a public URL matches only once Linked API knows that person's public URL, so prefer personHashedUrl when messages from this person show personPublicUrl: null.",
|
|
48
|
+
},
|
|
43
49
|
},
|
|
44
50
|
required: [],
|
|
45
51
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-inbox.js","sourceRoot":"","sources":["../../src/tools/get-inbox.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"get-inbox.js","sourceRoot":"","sources":["../../src/tools/get-inbox.ts"],"names":[],"mappings":";;;;;;AAOA,8CAAoB;AAEpB,oEAA4D;AAI5D,MAAa,YAAa,SAAQ,kCAGjC;IACiB,IAAI,GAAG,WAAW,CAAC;IAChB,MAAM,GAAG,aAAC,CAAC,MAAM,CAAC;QACnC,KAAK,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC5B,IAAI,EAAE,aAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE;QACrC,QAAQ,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC/B,SAAS,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACjC,CAAC,CAAC;IAEa,KAAK,CAAC,OAAO,CAAC,EAC5B,SAAS,EACT,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAI3C;QACC,OAAO,SAAS,CAAC,SAAS,CAAC;YACzB,KAAK;YACL,IAAI;YACJ,QAAQ;YACR,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IAEe,OAAO;QACrB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EACT,ogCAAogC;YACtgC,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,WAAW,EACT,mMAAmM;qBACtM;oBACD,IAAI,EAAE;wBACJ,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;wBAClB,WAAW,EACT,2HAA2H;qBAC9H;oBACD,QAAQ,EAAE;wBACR,IAAI,EAAE,QAAQ;wBACd,WAAW,EACT,oFAAoF;qBACvF;oBACD,SAAS,EAAE;wBACT,IAAI,EAAE,QAAQ;wBACd,WAAW,EACT,2XAA2X;qBAC9X;iBACF;gBACD,QAAQ,EAAE,EAAE;aACb;SACF,CAAC;IACJ,CAAC;CACF;AA7DD,oCA6DC"}
|
|
@@ -29,6 +29,8 @@ export declare class GetWorkflowResultTool extends LinkedApiTool<IGetWorkflowRes
|
|
|
29
29
|
ignoreInvitation: "ignoreInvitation";
|
|
30
30
|
retrieveConnections: "retrieveConnections";
|
|
31
31
|
removeConnection: "removeConnection";
|
|
32
|
+
endorsePersonSkill: "endorsePersonSkill";
|
|
33
|
+
endorsePersonSkills: "endorsePersonSkills";
|
|
32
34
|
searchCompanies: "searchCompanies";
|
|
33
35
|
searchPeople: "searchPeople";
|
|
34
36
|
searchJobs: "searchJobs";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-workflow-result.d.ts","sourceRoot":"","sources":["../../src/tools/get-workflow-result.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,EAAE,EAIhB,eAAe,EAGhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAE5E,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAK5D,UAAU,wBAAwB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,qBAAsB,SAAQ,aAAa,CAAC,wBAAwB,EAAE,OAAO,CAAC;IACzF,SAAgB,IAAI,yBAAyB;IAC7C,SAAS,CAAC,QAAQ,CAAC,MAAM
|
|
1
|
+
{"version":3,"file":"get-workflow-result.d.ts","sourceRoot":"","sources":["../../src/tools/get-workflow-result.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,EAAE,EAIhB,eAAe,EAGhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAE5E,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAK5D,UAAU,wBAAwB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,qBAAsB,SAAQ,aAAa,CAAC,wBAAwB,EAAE,OAAO,CAAC;IACzF,SAAgB,IAAI,yBAAyB;IAC7C,SAAS,CAAC,QAAQ,CAAC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAItB;IAEmB,OAAO,CAAC,EAC5B,SAAS,EACT,IAAI,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,EAChD,SAAS,GACV,EAAE;QACD,SAAS,EAAE,SAAS,CAAC;QACrB,IAAI,EAAE,wBAAwB,CAAC;QAC/B,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC;IAiCpC,OAAO,IAAI,IAAI;CA2BhC"}
|
|
@@ -38,7 +38,7 @@ class NvGetConversationTool extends linked_api_tool_js_1.LinkedApiTool {
|
|
|
38
38
|
getTool() {
|
|
39
39
|
return {
|
|
40
40
|
name: this.name,
|
|
41
|
-
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. The result carries personUrn — the permanent LinkedIn member URN (urn:li:member:<id>) of the person, or null when LinkedIn does not expose it.',
|
|
41
|
+
description: 'Legacy. Prefer get_inbox with personUrl. 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.',
|
|
42
42
|
inputSchema: {
|
|
43
43
|
type: 'object',
|
|
44
44
|
properties: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nv-get-conversation.js","sourceRoot":"","sources":["../../src/tools/nv-get-conversation.ts"],"names":[],"mappings":";;;;;;AAAA,0CAIyB;AAEzB,8CAAoB;AAGpB,oEAA4D;AAE5D,MAAa,qBAAsB,SAAQ,kCAG1C;IACiB,IAAI,GAAG,qBAAqB,CAAC;IAC1B,MAAM,GAAG,aAAC,CAAC,MAAM,CAAC;QACnC,SAAS,EAAE,aAAC,CAAC,MAAM,EAAE;QACrB,KAAK,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC7B,CAAC,CAAC;IAEa,KAAK,CAAC,OAAO,CAAC,EAC5B,SAAS,EACT,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,GAI3B;QACC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC/E,IAAI,aAAa,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,OAAO,aAAa,CAAC;QACvB,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QACtE,OAAO,EAAE,GAAG,GAAG;YACnB,aAAa,EAAE,qBAAc,CAAC,kBAAkB,EAAE,CAAC;IACjD,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,SAAoB,EACpB,SAAiB,EACjB,KAAc;QAEd,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,iBAAiB,CAAC;YACtD;gBACE,SAAS,EAAE,SAAS;gBACpB,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,KAAK;aACb;SACF,CAAC,CAAC;QACH,OAAO;YACL,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;YAC5D,MAAM,EAAE,aAAa,CAAC,MAAM;SAC7B,CAAC;IACJ,CAAC;IAEe,OAAO;QACrB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"nv-get-conversation.js","sourceRoot":"","sources":["../../src/tools/nv-get-conversation.ts"],"names":[],"mappings":";;;;;;AAAA,0CAIyB;AAEzB,8CAAoB;AAGpB,oEAA4D;AAE5D,MAAa,qBAAsB,SAAQ,kCAG1C;IACiB,IAAI,GAAG,qBAAqB,CAAC;IAC1B,MAAM,GAAG,aAAC,CAAC,MAAM,CAAC;QACnC,SAAS,EAAE,aAAC,CAAC,MAAM,EAAE;QACrB,KAAK,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC7B,CAAC,CAAC;IAEa,KAAK,CAAC,OAAO,CAAC,EAC5B,SAAS,EACT,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,GAI3B;QACC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC/E,IAAI,aAAa,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,OAAO,aAAa,CAAC;QACvB,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QACtE,OAAO,EAAE,GAAG,GAAG;YACnB,aAAa,EAAE,qBAAc,CAAC,kBAAkB,EAAE,CAAC;IACjD,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,SAAoB,EACpB,SAAiB,EACjB,KAAc;QAEd,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,iBAAiB,CAAC;YACtD;gBACE,SAAS,EAAE,SAAS;gBACpB,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,KAAK;aACb;SACF,CAAC,CAAC;QACH,OAAO;YACL,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;YAC5D,MAAM,EAAE,aAAa,CAAC,MAAM;SAC7B,CAAC;IACJ,CAAC;IAEe,OAAO;QACrB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EACT,qpBAAqpB;YACvpB,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,SAAS,EAAE;wBACT,IAAI,EAAE,QAAQ;wBACd,WAAW,EACT,mHAAmH;qBACtH;oBACD,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,WAAW,EACT,0KAA0K;qBAC7K;iBACF;gBACD,QAAQ,EAAE,CAAC,WAAW,CAAC;aACxB;SACF,CAAC;IACJ,CAAC;CACF;AAnED,sDAmEC"}
|
|
@@ -14,17 +14,17 @@ class NvSyncConversationTool extends linked_api_tool_js_1.OperationTool {
|
|
|
14
14
|
getTool() {
|
|
15
15
|
return {
|
|
16
16
|
name: this.name,
|
|
17
|
-
description: '
|
|
17
|
+
description: "Loads this person's earlier Sales Navigator message history (nv.syncConversation action). Call once per person. Do not call it to check for new messages – use get_inbox. After it completes, read the history with get_inbox and personUrl.",
|
|
18
18
|
inputSchema: {
|
|
19
19
|
type: 'object',
|
|
20
20
|
properties: {
|
|
21
21
|
personUrl: {
|
|
22
22
|
type: 'string',
|
|
23
|
-
description: "The LinkedIn URL of the person whose Sales Navigator
|
|
23
|
+
description: "The LinkedIn URL of the person whose Sales Navigator message history you want to load (e.g., 'https://www.linkedin.com/in/john-doe')",
|
|
24
24
|
},
|
|
25
25
|
days: {
|
|
26
26
|
type: 'number',
|
|
27
|
-
description: '
|
|
27
|
+
description: 'Syncing period, not the depth of history: how many days new messages keep being added to the loaded history, from 1 to 90. Defaults to 30. The whole conversation is read regardless. Counted from the moment the action starts running; a reply does not extend it. Syncing the same person again keeps the history already collected and never shortens the period.',
|
|
28
28
|
},
|
|
29
29
|
},
|
|
30
30
|
required: ['personUrl'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nv-sync-conversation.js","sourceRoot":"","sources":["../../src/tools/nv-sync-conversation.ts"],"names":[],"mappings":";;;AAAA,0CAA4E;AAE5E,6BAAwB;AAExB,oEAA4D;AAE5D,MAAa,sBAAuB,SAAQ,kCAAiD;IAClE,IAAI,GAAG,sBAAsB,CAAC;IAC9B,aAAa,GAAG,qBAAc,CAAC,kBAAkB,CAAC;IAC/C,MAAM,GAAG,OAAC,CAAC,MAAM,CAAC;QAC5C,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE;QACrB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;KACjD,CAAC,CAAC;IAEa,OAAO;QACrB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"nv-sync-conversation.js","sourceRoot":"","sources":["../../src/tools/nv-sync-conversation.ts"],"names":[],"mappings":";;;AAAA,0CAA4E;AAE5E,6BAAwB;AAExB,oEAA4D;AAE5D,MAAa,sBAAuB,SAAQ,kCAAiD;IAClE,IAAI,GAAG,sBAAsB,CAAC;IAC9B,aAAa,GAAG,qBAAc,CAAC,kBAAkB,CAAC;IAC/C,MAAM,GAAG,OAAC,CAAC,MAAM,CAAC;QAC5C,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE;QACrB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;KACjD,CAAC,CAAC;IAEa,OAAO;QACrB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EACT,8OAA8O;YAChP,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,SAAS,EAAE;wBACT,IAAI,EAAE,QAAQ;wBACd,WAAW,EACT,sIAAsI;qBACzI;oBACD,IAAI,EAAE;wBACJ,IAAI,EAAE,QAAQ;wBACd,WAAW,EACT,uWAAuW;qBAC1W;iBACF;gBACD,QAAQ,EAAE,CAAC,WAAW,CAAC;aACxB;SACF,CAAC;IACJ,CAAC;CACF;AA/BD,wDA+BC"}
|
|
@@ -11,7 +11,7 @@ class NvSyncInboxTool extends linked_api_tool_js_1.OperationTool {
|
|
|
11
11
|
getTool() {
|
|
12
12
|
return {
|
|
13
13
|
name: this.name,
|
|
14
|
-
description: 'Enable whole-inbox monitoring in Sales Navigator so every incoming conversation can be polled with get_inbox (nv.syncInbox action). Run once per account; only messages that arrive after it is enabled are captured.',
|
|
14
|
+
description: 'Recommended first step before reading Sales Navigator messages. Enable whole-inbox monitoring in Sales Navigator so every incoming conversation can be polled with get_inbox (nv.syncInbox action). Run once per account, before sending messages whose replies you want to read; only messages that arrive after it is enabled are captured.',
|
|
15
15
|
inputSchema: {
|
|
16
16
|
type: 'object',
|
|
17
17
|
properties: {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nv-sync-inbox.js","sourceRoot":"","sources":["../../src/tools/nv-sync-inbox.ts"],"names":[],"mappings":";;;AAAA,0CAAqE;AAErE,6BAAwB;AAExB,oEAA4D;AAE5D,MAAa,eAAgB,SAAQ,kCAA0C;IACpD,IAAI,GAAG,eAAe,CAAC;IACvB,aAAa,GAAG,qBAAc,CAAC,WAAW,CAAC;IACxC,MAAM,GAAG,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAElC,OAAO;QACrB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EACT
|
|
1
|
+
{"version":3,"file":"nv-sync-inbox.js","sourceRoot":"","sources":["../../src/tools/nv-sync-inbox.ts"],"names":[],"mappings":";;;AAAA,0CAAqE;AAErE,6BAAwB;AAExB,oEAA4D;AAE5D,MAAa,eAAgB,SAAQ,kCAA0C;IACpD,IAAI,GAAG,eAAe,CAAC;IACvB,aAAa,GAAG,qBAAc,CAAC,WAAW,CAAC;IACxC,MAAM,GAAG,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAElC,OAAO;QACrB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EACT,+UAA+U;YACjV,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;gBACd,QAAQ,EAAE,EAAE;aACb;SACF,CAAC;IACJ,CAAC;CACF;AAjBD,0CAiBC"}
|
|
@@ -14,17 +14,17 @@ class SyncConversationTool extends linked_api_tool_js_1.OperationTool {
|
|
|
14
14
|
getTool() {
|
|
15
15
|
return {
|
|
16
16
|
name: this.name,
|
|
17
|
-
description: '
|
|
17
|
+
description: "Loads this person's earlier message history (st.syncConversation action). Call once per person; repeating it within 24 hours returns quickly. Do not call it to check for new messages – use get_inbox. After it completes, read the history with get_inbox and personUrl.",
|
|
18
18
|
inputSchema: {
|
|
19
19
|
type: 'object',
|
|
20
20
|
properties: {
|
|
21
21
|
personUrl: {
|
|
22
22
|
type: 'string',
|
|
23
|
-
description: "The LinkedIn URL of the person whose
|
|
23
|
+
description: "The LinkedIn URL of the person whose message history you want to load (e.g., 'https://www.linkedin.com/in/john-doe')",
|
|
24
24
|
},
|
|
25
25
|
days: {
|
|
26
26
|
type: 'number',
|
|
27
|
-
description: '
|
|
27
|
+
description: 'Syncing period, not the depth of history: how many days new messages keep being added to the loaded history, from 1 to 90. Defaults to 30. The whole conversation is read regardless. Counted from the moment the action starts running; a reply does not extend it. Syncing the same person again keeps the history already collected and never shortens the period.',
|
|
28
28
|
},
|
|
29
29
|
},
|
|
30
30
|
required: ['personUrl'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-conversation.js","sourceRoot":"","sources":["../../src/tools/sync-conversation.ts"],"names":[],"mappings":";;;AAAA,0CAA0E;AAE1E,6BAAwB;AAExB,oEAA4D;AAE5D,MAAa,oBAAqB,SAAQ,kCAA+C;IAC9D,IAAI,GAAG,mBAAmB,CAAC;IAC3B,aAAa,GAAG,qBAAc,CAAC,gBAAgB,CAAC;IAC7C,MAAM,GAAG,OAAC,CAAC,MAAM,CAAC;QAC5C,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE;QACrB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;KACjD,CAAC,CAAC;IAEa,OAAO;QACrB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"sync-conversation.js","sourceRoot":"","sources":["../../src/tools/sync-conversation.ts"],"names":[],"mappings":";;;AAAA,0CAA0E;AAE1E,6BAAwB;AAExB,oEAA4D;AAE5D,MAAa,oBAAqB,SAAQ,kCAA+C;IAC9D,IAAI,GAAG,mBAAmB,CAAC;IAC3B,aAAa,GAAG,qBAAc,CAAC,gBAAgB,CAAC;IAC7C,MAAM,GAAG,OAAC,CAAC,MAAM,CAAC;QAC5C,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE;QACrB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;KACjD,CAAC,CAAC;IAEa,OAAO;QACrB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EACT,4QAA4Q;YAC9Q,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,SAAS,EAAE;wBACT,IAAI,EAAE,QAAQ;wBACd,WAAW,EACT,sHAAsH;qBACzH;oBACD,IAAI,EAAE;wBACJ,IAAI,EAAE,QAAQ;wBACd,WAAW,EACT,uWAAuW;qBAC1W;iBACF;gBACD,QAAQ,EAAE,CAAC,WAAW,CAAC;aACxB;SACF,CAAC;IACJ,CAAC;CACF;AA/BD,oDA+BC"}
|
package/dist/tools/sync-inbox.js
CHANGED
|
@@ -11,7 +11,7 @@ class SyncInboxTool extends linked_api_tool_js_1.OperationTool {
|
|
|
11
11
|
getTool() {
|
|
12
12
|
return {
|
|
13
13
|
name: this.name,
|
|
14
|
-
description: 'Enable whole-inbox monitoring so every incoming conversation can be polled with get_inbox (st.syncInbox action). Run once per account; only messages that arrive after it is enabled are captured.',
|
|
14
|
+
description: 'Recommended first step before reading messages. Enable whole-inbox monitoring so every incoming conversation can be polled with get_inbox (st.syncInbox action). Run once per account, before sending messages whose replies you want to read; only messages that arrive after it is enabled are captured.',
|
|
15
15
|
inputSchema: {
|
|
16
16
|
type: 'object',
|
|
17
17
|
properties: {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-inbox.js","sourceRoot":"","sources":["../../src/tools/sync-inbox.ts"],"names":[],"mappings":";;;AAAA,0CAAmE;AAEnE,6BAAwB;AAExB,oEAA4D;AAE5D,MAAa,aAAc,SAAQ,kCAAwC;IAChD,IAAI,GAAG,YAAY,CAAC;IACpB,aAAa,GAAG,qBAAc,CAAC,SAAS,CAAC;IACtC,MAAM,GAAG,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAElC,OAAO;QACrB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"sync-inbox.js","sourceRoot":"","sources":["../../src/tools/sync-inbox.ts"],"names":[],"mappings":";;;AAAA,0CAAmE;AAEnE,6BAAwB;AAExB,oEAA4D;AAE5D,MAAa,aAAc,SAAQ,kCAAwC;IAChD,IAAI,GAAG,YAAY,CAAC;IACpB,aAAa,GAAG,qBAAc,CAAC,SAAS,CAAC;IACtC,MAAM,GAAG,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAElC,OAAO;QACrB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EACT,4SAA4S;YAC9S,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;gBACd,QAAQ,EAAE,EAAE;aACb;SACF,CAAC;IACJ,CAAC;CACF;AAjBD,sCAiBC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@linkedapi/mcp",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.18",
|
|
4
4
|
"description": "MCP server that lets AI assistants control LinkedIn accounts and retrieve real-time data.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"author": "Linked API",
|
|
31
31
|
"license": "MIT",
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@linkedapi/node": "^2.3.
|
|
33
|
+
"@linkedapi/node": "^2.3.19",
|
|
34
34
|
"@modelcontextprotocol/sdk": "^1.17.4",
|
|
35
35
|
"zod": "^4.1.1"
|
|
36
36
|
},
|
package/src/linked-api-tools.ts
CHANGED
|
@@ -23,6 +23,8 @@ import { CheckConnectionStatusTool } from './tools/check-connection-status.js';
|
|
|
23
23
|
import { CommentOnPostTool } from './tools/comment-on-post.js';
|
|
24
24
|
import { CreatePostTool } from './tools/create-post.js';
|
|
25
25
|
import { CreateRepostTool } from './tools/create-repost.js';
|
|
26
|
+
import { EndorsePersonSkillTool } from './tools/endorse-person-skill.js';
|
|
27
|
+
import { EndorsePersonSkillsTool } from './tools/endorse-person-skills.js';
|
|
26
28
|
import { ExecuteCustomWorkflowTool } from './tools/execute-custom-workflow.js';
|
|
27
29
|
import { FetchCompanyTool } from './tools/fetch-company.js';
|
|
28
30
|
import { FetchJobTool } from './tools/fetch-job.js';
|
|
@@ -43,6 +45,7 @@ import { NvManageConversationTool } from './tools/nv-manage-conversation.js';
|
|
|
43
45
|
import { NvSearchCompaniesTool } from './tools/nv-search-companies.js';
|
|
44
46
|
import { NvSearchPeopleTool } from './tools/nv-search-people.js';
|
|
45
47
|
import { NvSendMessageTool } from './tools/nv-send-message.js';
|
|
48
|
+
import { NvSyncConversationTool } from './tools/nv-sync-conversation.js';
|
|
46
49
|
import { NvSyncInboxTool } from './tools/nv-sync-inbox.js';
|
|
47
50
|
import { ReactToCommentTool } from './tools/react-to-comment.js';
|
|
48
51
|
import { ReactToPostTool } from './tools/react-to-post.js';
|
|
@@ -62,6 +65,7 @@ import { SearchPostsTool } from './tools/search-posts.js';
|
|
|
62
65
|
import { SendConnectionRequestTool } from './tools/send-connection-request.js';
|
|
63
66
|
import { SendFeedbackTool } from './tools/send-feedback.js';
|
|
64
67
|
import { SendMessageTool } from './tools/send-message.js';
|
|
68
|
+
import { SyncConversationTool } from './tools/sync-conversation.js';
|
|
65
69
|
import { SyncInboxTool } from './tools/sync-inbox.js';
|
|
66
70
|
import { SyncNetworkTool } from './tools/sync-network.js';
|
|
67
71
|
import { WithdrawConnectionRequestTool } from './tools/withdraw-connection-request.js';
|
|
@@ -90,9 +94,10 @@ export class LinkedApiTools {
|
|
|
90
94
|
this.tools = [
|
|
91
95
|
// Standard tools
|
|
92
96
|
new SendMessageTool(),
|
|
93
|
-
new GetConversationTool(),
|
|
94
97
|
new SyncInboxTool(),
|
|
95
98
|
new GetInboxTool(),
|
|
99
|
+
new SyncConversationTool(),
|
|
100
|
+
new GetConversationTool(),
|
|
96
101
|
new SyncNetworkTool(),
|
|
97
102
|
new GetNetworkTool(),
|
|
98
103
|
new ManageConversationTool(),
|
|
@@ -111,6 +116,8 @@ export class LinkedApiTools {
|
|
|
111
116
|
new SearchPostsTool(),
|
|
112
117
|
new FetchCompanyTool(),
|
|
113
118
|
new FetchPersonTool(),
|
|
119
|
+
new EndorsePersonSkillTool(),
|
|
120
|
+
new EndorsePersonSkillsTool(),
|
|
114
121
|
new FetchPostTool(),
|
|
115
122
|
new FetchJobTool(),
|
|
116
123
|
new ReactToPostTool(),
|
|
@@ -125,8 +132,9 @@ export class LinkedApiTools {
|
|
|
125
132
|
new RetrievePerformanceTool(),
|
|
126
133
|
// Sales Navigator tools
|
|
127
134
|
new NvSendMessageTool(),
|
|
128
|
-
new NvGetConversationTool(),
|
|
129
135
|
new NvSyncInboxTool(),
|
|
136
|
+
new NvSyncConversationTool(),
|
|
137
|
+
new NvGetConversationTool(),
|
|
130
138
|
new NvManageConversationTool(),
|
|
131
139
|
new NvSearchCompaniesTool(),
|
|
132
140
|
new NvSearchPeopleTool(),
|
|
@@ -30,7 +30,7 @@ export class AdminDeleteLimitsTool extends AdminTool<TDeleteLimitsParams, void>
|
|
|
30
30
|
return {
|
|
31
31
|
name: this.name,
|
|
32
32
|
description:
|
|
33
|
-
'Delete specific rate limits for an account.
|
|
33
|
+
'Delete specific rate limits for an account. Each removed category/period has no limit until set again. Use admin_reset_limits to restore all default limits for the account.',
|
|
34
34
|
inputSchema: {
|
|
35
35
|
type: 'object',
|
|
36
36
|
properties: {
|
|
@@ -46,7 +46,7 @@ export class AdminDeleteLimitsTool extends AdminTool<TDeleteLimitsParams, void>
|
|
|
46
46
|
properties: {
|
|
47
47
|
category: {
|
|
48
48
|
type: 'string',
|
|
49
|
-
description: 'Limit category',
|
|
49
|
+
description: 'Limit category, e.g. stEndorsements',
|
|
50
50
|
},
|
|
51
51
|
period: {
|
|
52
52
|
type: 'string',
|
|
@@ -32,7 +32,7 @@ export class AdminSetLimitsTool extends AdminTool<TSetLimitsParams, void> {
|
|
|
32
32
|
return {
|
|
33
33
|
name: this.name,
|
|
34
34
|
description:
|
|
35
|
-
'Set rate limits for an account. Only specified limits are created or updated; other limits remain unchanged. Categories: stPersonProfileViews, stCompanyPageViews, stConnectionRequests, stMessages, stSearchQueries, stReactions, stComments, stPosts, nvPersonProfileViews, nvCompanyPageViews, nvMessages.',
|
|
35
|
+
'Set rate limits for an account. Only specified limits are created or updated; other limits remain unchanged. Categories: stPersonProfileViews, stCompanyPageViews, stConnectionRequests, stMessages, stSearchQueries, stReactions, stComments, stPosts, stEndorsements, nvPersonProfileViews, nvCompanyPageViews, nvMessages.',
|
|
36
36
|
inputSchema: {
|
|
37
37
|
type: 'object',
|
|
38
38
|
properties: {
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { OPERATION_NAME, TEndorsePersonSkillParams } from '@linkedapi/node';
|
|
2
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
|
|
5
|
+
import { OperationTool } from '../utils/linked-api-tool.js';
|
|
6
|
+
|
|
7
|
+
export class EndorsePersonSkillTool extends OperationTool<TEndorsePersonSkillParams, void> {
|
|
8
|
+
public override readonly name = 'endorse_person_skill';
|
|
9
|
+
public override readonly operationName = OPERATION_NAME.endorsePersonSkill;
|
|
10
|
+
protected override readonly schema = z.object({
|
|
11
|
+
personUrl: z.string(),
|
|
12
|
+
skillName: z.string().min(1).max(200),
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
public override getTool(): Tool {
|
|
16
|
+
return {
|
|
17
|
+
name: this.name,
|
|
18
|
+
description:
|
|
19
|
+
"Endorses one skill by name on a 1st-degree connection's profile. Skill names are in the profile owner's language, regardless of your LinkedIn language. An already-endorsed skill counts as success and is never removed. Every success, including an existing endorsement, counts toward the stEndorsements limit. Use endorse_person_skills to select skills with patterns or endorse all skills. If this workflow is still running, do not retry this tool; retrying can count the same skill toward the stEndorsements limit again.",
|
|
20
|
+
inputSchema: {
|
|
21
|
+
type: 'object',
|
|
22
|
+
properties: {
|
|
23
|
+
personUrl: {
|
|
24
|
+
type: 'string',
|
|
25
|
+
description: 'Public or hashed LinkedIn URL of your 1st-degree connection.',
|
|
26
|
+
},
|
|
27
|
+
skillName: {
|
|
28
|
+
type: 'string',
|
|
29
|
+
minLength: 1,
|
|
30
|
+
maxLength: 200,
|
|
31
|
+
description:
|
|
32
|
+
"Exact skill name in the profile owner's language, up to 200 characters. Letter case and extra spaces are ignored. This is not a pattern.",
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
required: ['personUrl', 'skillName'],
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import {
|
|
2
|
+
OPERATION_NAME,
|
|
3
|
+
TEndorsePersonSkillsParams,
|
|
4
|
+
TPersonSkillEndorsement,
|
|
5
|
+
} from '@linkedapi/node';
|
|
6
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
|
|
9
|
+
import { OperationTool } from '../utils/linked-api-tool.js';
|
|
10
|
+
|
|
11
|
+
export class EndorsePersonSkillsTool extends OperationTool<
|
|
12
|
+
TEndorsePersonSkillsParams,
|
|
13
|
+
Array<TPersonSkillEndorsement>
|
|
14
|
+
> {
|
|
15
|
+
public override readonly name = 'endorse_person_skills';
|
|
16
|
+
public override readonly operationName = OPERATION_NAME.endorsePersonSkills;
|
|
17
|
+
protected override readonly schema = z.object({
|
|
18
|
+
personUrl: z.string(),
|
|
19
|
+
skillNamePatterns: z.array(z.string().min(1).max(200)).min(1).max(20).optional(),
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
public override getTool(): Tool {
|
|
23
|
+
return {
|
|
24
|
+
name: this.name,
|
|
25
|
+
description:
|
|
26
|
+
"Endorses selected skills of a 1st-degree connection, returning each selected skill's name, success and error if it failed. Skill names are in the profile owner's language. Patterns use RE2, are case-insensitive and match anywhere; anchor with ^…$ to match a whole name. Omit skillNamePatterns to endorse all skills; never pass []. An already-endorsed skill counts as success and is never removed. Each success counts toward the stEndorsements limit, including existing endorsements. The limit is checked for each skill; a failure does not stop the others, so check every item's success. If this workflow is still running, do not retry this tool; retrying can count the same skills toward the stEndorsements limit again.",
|
|
27
|
+
inputSchema: {
|
|
28
|
+
type: 'object',
|
|
29
|
+
properties: {
|
|
30
|
+
personUrl: {
|
|
31
|
+
type: 'string',
|
|
32
|
+
description: 'Public or hashed LinkedIn URL of your 1st-degree connection.',
|
|
33
|
+
},
|
|
34
|
+
skillNamePatterns: {
|
|
35
|
+
type: 'array',
|
|
36
|
+
minItems: 1,
|
|
37
|
+
maxItems: 20,
|
|
38
|
+
items: {
|
|
39
|
+
type: 'string',
|
|
40
|
+
minLength: 1,
|
|
41
|
+
maxLength: 200,
|
|
42
|
+
},
|
|
43
|
+
description:
|
|
44
|
+
"Optional. 1-20 RE2 patterns, each 1-200 characters, matching names in the profile owner's language. Any matching pattern selects the skill. Matching is case-insensitive and searches anywhere: manage matches Project Management; ^scrum$ matches only the whole name Scrum. Lookaround and backreferences are unsupported. Omit this parameter to endorse all skills; never pass an empty array.",
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
required: ['personUrl'],
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -57,7 +57,7 @@ operationName: OPERATION_NAME.syncConversation };
|
|
|
57
57
|
return {
|
|
58
58
|
name: this.name,
|
|
59
59
|
description:
|
|
60
|
-
'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.',
|
|
60
|
+
'Legacy. Prefer get_inbox with personUrl. 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.',
|
|
61
61
|
inputSchema: {
|
|
62
62
|
type: 'object',
|
|
63
63
|
properties: {
|
package/src/tools/get-inbox.ts
CHANGED
|
@@ -1,28 +1,40 @@
|
|
|
1
|
-
import LinkedApi, {
|
|
1
|
+
import LinkedApi, {
|
|
2
|
+
TInboxPersonPollResult,
|
|
3
|
+
TInboxPollRequest,
|
|
4
|
+
TInboxPollResult,
|
|
5
|
+
TMappedResponse,
|
|
6
|
+
} from '@linkedapi/node';
|
|
2
7
|
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
3
8
|
import z from 'zod';
|
|
4
9
|
|
|
5
10
|
import { LinkedApiTool } from '../utils/linked-api-tool.js';
|
|
6
11
|
|
|
7
|
-
|
|
12
|
+
type TGetInboxArgs = TInboxPollRequest & { personUrl?: string };
|
|
13
|
+
|
|
14
|
+
export class GetInboxTool extends LinkedApiTool<
|
|
15
|
+
TGetInboxArgs,
|
|
16
|
+
TInboxPollResult | TInboxPersonPollResult
|
|
17
|
+
> {
|
|
8
18
|
public readonly name = 'get_inbox';
|
|
9
19
|
protected readonly schema = z.object({
|
|
10
20
|
since: z.string().optional(),
|
|
11
21
|
type: z.enum(['st', 'nv']).optional(),
|
|
12
22
|
threadId: z.string().optional(),
|
|
23
|
+
personUrl: z.string().optional(),
|
|
13
24
|
});
|
|
14
25
|
|
|
15
26
|
public override async execute({
|
|
16
27
|
linkedapi,
|
|
17
|
-
args: { since, type, threadId },
|
|
28
|
+
args: { since, type, threadId, personUrl },
|
|
18
29
|
}: {
|
|
19
30
|
linkedapi: LinkedApi;
|
|
20
|
-
args:
|
|
21
|
-
}): Promise<TMappedResponse<TInboxPollResult>> {
|
|
31
|
+
args: TGetInboxArgs;
|
|
32
|
+
}): Promise<TMappedResponse<TInboxPollResult | TInboxPersonPollResult>> {
|
|
22
33
|
return linkedapi.pollInbox({
|
|
23
34
|
since,
|
|
24
35
|
type,
|
|
25
36
|
threadId,
|
|
37
|
+
personUrl,
|
|
26
38
|
});
|
|
27
39
|
}
|
|
28
40
|
|
|
@@ -30,14 +42,14 @@ export class GetInboxTool extends LinkedApiTool<TInboxPollRequest, TInboxPollRes
|
|
|
30
42
|
return {
|
|
31
43
|
name: this.name,
|
|
32
44
|
description:
|
|
33
|
-
"
|
|
45
|
+
"Default way to read LinkedIn messages (standard and Sales Navigator), newest first. Without personUrl returns new messages across all conversations since inbox monitoring was enabled; requires sync_inbox (or nv_sync_inbox) once per account. With personUrl returns the whole known conversation with that person, including history loaded by sync_conversation, as { messages, threads }: each message also carries inboxMessageId (its id in the result without personUrl, or null) and threadId may be null; each thread carries historyFrom and historyComplete. Check threads[].historyComplete – if false and you need earlier messages, call sync_conversation once, then call get_inbox again. 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. personHashedUrl is LinkedIn's hashed profile URL and is always present; personPublicUrl is the public vanity URL when that person has been resolved, otherwise null.",
|
|
34
46
|
inputSchema: {
|
|
35
47
|
type: 'object',
|
|
36
48
|
properties: {
|
|
37
49
|
since: {
|
|
38
50
|
type: 'string',
|
|
39
51
|
description:
|
|
40
|
-
"Optional ISO 8601 timestamp to only retrieve messages after this date (e.g., '2024-01-15T10:30:00Z'). If not provided, all captured messages are returned.",
|
|
52
|
+
"Optional ISO 8601 timestamp to only retrieve messages at or after this date (e.g., '2024-01-15T10:30:00Z'). If not provided, all captured messages are returned. Message times are whole minutes.",
|
|
41
53
|
},
|
|
42
54
|
type: {
|
|
43
55
|
type: 'string',
|
|
@@ -50,6 +62,11 @@ export class GetInboxTool extends LinkedApiTool<TInboxPollRequest, TInboxPollRes
|
|
|
50
62
|
description:
|
|
51
63
|
'Optional conversation thread identifier to restrict the result to a single thread.',
|
|
52
64
|
},
|
|
65
|
+
personUrl: {
|
|
66
|
+
type: 'string',
|
|
67
|
+
description:
|
|
68
|
+
"Optional LinkedIn URL of one person to get the whole known conversation with them instead of the whole inbox (e.g., 'https://www.linkedin.com/in/john-doe'). A hashed URL (personHashedUrl from a message) always matches; a public URL matches only once Linked API knows that person's public URL, so prefer personHashedUrl when messages from this person show personPublicUrl: null.",
|
|
69
|
+
},
|
|
53
70
|
},
|
|
54
71
|
required: [],
|
|
55
72
|
},
|
|
@@ -57,7 +57,7 @@ operationName: OPERATION_NAME.nvSyncConversation };
|
|
|
57
57
|
return {
|
|
58
58
|
name: this.name,
|
|
59
59
|
description:
|
|
60
|
-
'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.',
|
|
60
|
+
'Legacy. Prefer get_inbox with personUrl. 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.',
|
|
61
61
|
inputSchema: {
|
|
62
62
|
type: 'object',
|
|
63
63
|
properties: {
|
|
@@ -16,19 +16,19 @@ export class NvSyncConversationTool extends OperationTool<TNvSyncConversationPar
|
|
|
16
16
|
return {
|
|
17
17
|
name: this.name,
|
|
18
18
|
description:
|
|
19
|
-
'
|
|
19
|
+
"Loads this person's earlier Sales Navigator message history (nv.syncConversation action). Call once per person. Do not call it to check for new messages – use get_inbox. After it completes, read the history with get_inbox and personUrl.",
|
|
20
20
|
inputSchema: {
|
|
21
21
|
type: 'object',
|
|
22
22
|
properties: {
|
|
23
23
|
personUrl: {
|
|
24
24
|
type: 'string',
|
|
25
25
|
description:
|
|
26
|
-
"The LinkedIn URL of the person whose Sales Navigator
|
|
26
|
+
"The LinkedIn URL of the person whose Sales Navigator message history you want to load (e.g., 'https://www.linkedin.com/in/john-doe')",
|
|
27
27
|
},
|
|
28
28
|
days: {
|
|
29
29
|
type: 'number',
|
|
30
30
|
description:
|
|
31
|
-
'
|
|
31
|
+
'Syncing period, not the depth of history: how many days new messages keep being added to the loaded history, from 1 to 90. Defaults to 30. The whole conversation is read regardless. Counted from the moment the action starts running; a reply does not extend it. Syncing the same person again keeps the history already collected and never shortens the period.',
|
|
32
32
|
},
|
|
33
33
|
},
|
|
34
34
|
required: ['personUrl'],
|
|
@@ -13,7 +13,7 @@ export class NvSyncInboxTool extends OperationTool<TNvSyncInboxParams, unknown>
|
|
|
13
13
|
return {
|
|
14
14
|
name: this.name,
|
|
15
15
|
description:
|
|
16
|
-
'Enable whole-inbox monitoring in Sales Navigator so every incoming conversation can be polled with get_inbox (nv.syncInbox action). Run once per account; only messages that arrive after it is enabled are captured.',
|
|
16
|
+
'Recommended first step before reading Sales Navigator messages. Enable whole-inbox monitoring in Sales Navigator so every incoming conversation can be polled with get_inbox (nv.syncInbox action). Run once per account, before sending messages whose replies you want to read; only messages that arrive after it is enabled are captured.',
|
|
17
17
|
inputSchema: {
|
|
18
18
|
type: 'object',
|
|
19
19
|
properties: {},
|
|
@@ -16,19 +16,19 @@ export class SyncConversationTool extends OperationTool<TSyncConversationParams,
|
|
|
16
16
|
return {
|
|
17
17
|
name: this.name,
|
|
18
18
|
description:
|
|
19
|
-
'
|
|
19
|
+
"Loads this person's earlier message history (st.syncConversation action). Call once per person; repeating it within 24 hours returns quickly. Do not call it to check for new messages – use get_inbox. After it completes, read the history with get_inbox and personUrl.",
|
|
20
20
|
inputSchema: {
|
|
21
21
|
type: 'object',
|
|
22
22
|
properties: {
|
|
23
23
|
personUrl: {
|
|
24
24
|
type: 'string',
|
|
25
25
|
description:
|
|
26
|
-
"The LinkedIn URL of the person whose
|
|
26
|
+
"The LinkedIn URL of the person whose message history you want to load (e.g., 'https://www.linkedin.com/in/john-doe')",
|
|
27
27
|
},
|
|
28
28
|
days: {
|
|
29
29
|
type: 'number',
|
|
30
30
|
description:
|
|
31
|
-
'
|
|
31
|
+
'Syncing period, not the depth of history: how many days new messages keep being added to the loaded history, from 1 to 90. Defaults to 30. The whole conversation is read regardless. Counted from the moment the action starts running; a reply does not extend it. Syncing the same person again keeps the history already collected and never shortens the period.',
|
|
32
32
|
},
|
|
33
33
|
},
|
|
34
34
|
required: ['personUrl'],
|
package/src/tools/sync-inbox.ts
CHANGED
|
@@ -13,7 +13,7 @@ export class SyncInboxTool extends OperationTool<TSyncInboxParams, unknown> {
|
|
|
13
13
|
return {
|
|
14
14
|
name: this.name,
|
|
15
15
|
description:
|
|
16
|
-
'Enable whole-inbox monitoring so every incoming conversation can be polled with get_inbox (st.syncInbox action). Run once per account; only messages that arrive after it is enabled are captured.',
|
|
16
|
+
'Recommended first step before reading messages. Enable whole-inbox monitoring so every incoming conversation can be polled with get_inbox (st.syncInbox action). Run once per account, before sending messages whose replies you want to read; only messages that arrive after it is enabled are captured.',
|
|
17
17
|
inputSchema: {
|
|
18
18
|
type: 'object',
|
|
19
19
|
properties: {},
|