linkedin-toolkit-mcp 2.0.2 → 2.1.0
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/bridge.d.ts +1 -1
- package/dist/bridge.js +1 -1
- package/dist/cli.d.ts +44 -0
- package/dist/cli.js +300 -7
- package/dist/cli.js.map +1 -1
- package/dist/contract.d.ts +38 -9
- package/dist/contract.js +53 -8
- package/dist/contract.js.map +1 -1
- package/dist/endpoints.d.ts +49 -0
- package/dist/endpoints.js +160 -0
- package/dist/endpoints.js.map +1 -0
- package/dist/fake-data.d.ts +8 -0
- package/dist/fake-data.js +37 -2
- package/dist/fake-data.js.map +1 -1
- package/dist/prompts.js +1 -1
- package/dist/prompts.js.map +1 -1
- package/dist/server.d.ts +11 -0
- package/dist/server.js +18 -1
- package/dist/server.js.map +1 -1
- package/dist/setup.d.ts +248 -0
- package/dist/setup.js +584 -0
- package/dist/setup.js.map +1 -0
- package/dist/tools.d.ts +1 -1
- package/dist/tools.js +1 -1
- package/openapi.json +290 -8
- package/package.json +1 -1
- package/tools.json +5 -4
package/openapi.json
CHANGED
|
@@ -2670,7 +2670,22 @@
|
|
|
2670
2670
|
"application/json": {
|
|
2671
2671
|
"schema": {
|
|
2672
2672
|
"type": "object",
|
|
2673
|
-
"properties": {
|
|
2673
|
+
"properties": {
|
|
2674
|
+
"mode": {
|
|
2675
|
+
"type": "string",
|
|
2676
|
+
"enum": [
|
|
2677
|
+
"api",
|
|
2678
|
+
"dom"
|
|
2679
|
+
]
|
|
2680
|
+
},
|
|
2681
|
+
"scope": {
|
|
2682
|
+
"type": "string",
|
|
2683
|
+
"enum": [
|
|
2684
|
+
"following",
|
|
2685
|
+
"everyone"
|
|
2686
|
+
]
|
|
2687
|
+
}
|
|
2688
|
+
},
|
|
2674
2689
|
"additionalProperties": false
|
|
2675
2690
|
}
|
|
2676
2691
|
}
|
|
@@ -2702,6 +2717,28 @@
|
|
|
2702
2717
|
"properties": {
|
|
2703
2718
|
"count": {
|
|
2704
2719
|
"type": "number"
|
|
2720
|
+
},
|
|
2721
|
+
"sample": {
|
|
2722
|
+
"type": "array",
|
|
2723
|
+
"items": {
|
|
2724
|
+
"type": "string"
|
|
2725
|
+
}
|
|
2726
|
+
},
|
|
2727
|
+
"followers": {
|
|
2728
|
+
"type": "object",
|
|
2729
|
+
"properties": {
|
|
2730
|
+
"total": {
|
|
2731
|
+
"type": "number"
|
|
2732
|
+
},
|
|
2733
|
+
"stillFollowing": {
|
|
2734
|
+
"type": "number"
|
|
2735
|
+
}
|
|
2736
|
+
},
|
|
2737
|
+
"required": [
|
|
2738
|
+
"total",
|
|
2739
|
+
"stillFollowing"
|
|
2740
|
+
],
|
|
2741
|
+
"additionalProperties": false
|
|
2705
2742
|
}
|
|
2706
2743
|
},
|
|
2707
2744
|
"required": [
|
|
@@ -2754,7 +2791,37 @@
|
|
|
2754
2791
|
"application/json": {
|
|
2755
2792
|
"schema": {
|
|
2756
2793
|
"type": "object",
|
|
2757
|
-
"properties": {
|
|
2794
|
+
"properties": {
|
|
2795
|
+
"limit": {
|
|
2796
|
+
"type": "integer",
|
|
2797
|
+
"minimum": 1,
|
|
2798
|
+
"maximum": 5000
|
|
2799
|
+
},
|
|
2800
|
+
"dryRun": {
|
|
2801
|
+
"type": "boolean"
|
|
2802
|
+
},
|
|
2803
|
+
"mode": {
|
|
2804
|
+
"type": "string",
|
|
2805
|
+
"enum": [
|
|
2806
|
+
"api",
|
|
2807
|
+
"dom"
|
|
2808
|
+
]
|
|
2809
|
+
},
|
|
2810
|
+
"scope": {
|
|
2811
|
+
"type": "string",
|
|
2812
|
+
"enum": [
|
|
2813
|
+
"following",
|
|
2814
|
+
"everyone"
|
|
2815
|
+
]
|
|
2816
|
+
},
|
|
2817
|
+
"speed": {
|
|
2818
|
+
"type": "string",
|
|
2819
|
+
"enum": [
|
|
2820
|
+
"careful",
|
|
2821
|
+
"fast"
|
|
2822
|
+
]
|
|
2823
|
+
}
|
|
2824
|
+
},
|
|
2758
2825
|
"additionalProperties": false
|
|
2759
2826
|
}
|
|
2760
2827
|
}
|
|
@@ -2786,10 +2853,223 @@
|
|
|
2786
2853
|
"properties": {
|
|
2787
2854
|
"unfollowed": {
|
|
2788
2855
|
"type": "number"
|
|
2856
|
+
},
|
|
2857
|
+
"attempted": {
|
|
2858
|
+
"type": "number"
|
|
2859
|
+
},
|
|
2860
|
+
"names": {
|
|
2861
|
+
"type": "array",
|
|
2862
|
+
"items": {
|
|
2863
|
+
"type": "string"
|
|
2864
|
+
}
|
|
2865
|
+
},
|
|
2866
|
+
"stopped": {
|
|
2867
|
+
"type": "string",
|
|
2868
|
+
"enum": [
|
|
2869
|
+
"limit",
|
|
2870
|
+
"end",
|
|
2871
|
+
"error",
|
|
2872
|
+
"cancelled"
|
|
2873
|
+
]
|
|
2874
|
+
},
|
|
2875
|
+
"error": {
|
|
2876
|
+
"type": "string"
|
|
2877
|
+
}
|
|
2878
|
+
},
|
|
2879
|
+
"required": [
|
|
2880
|
+
"unfollowed",
|
|
2881
|
+
"attempted",
|
|
2882
|
+
"names"
|
|
2883
|
+
],
|
|
2884
|
+
"additionalProperties": false
|
|
2885
|
+
},
|
|
2886
|
+
"rateLimit": {
|
|
2887
|
+
"$ref": "#/components/schemas/RateLimit"
|
|
2888
|
+
}
|
|
2889
|
+
}
|
|
2890
|
+
},
|
|
2891
|
+
{
|
|
2892
|
+
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
2893
|
+
}
|
|
2894
|
+
]
|
|
2895
|
+
}
|
|
2896
|
+
}
|
|
2897
|
+
}
|
|
2898
|
+
},
|
|
2899
|
+
"401": {
|
|
2900
|
+
"description": "Missing or wrong bearer token.",
|
|
2901
|
+
"content": {
|
|
2902
|
+
"application/json": {
|
|
2903
|
+
"schema": {
|
|
2904
|
+
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
2905
|
+
}
|
|
2906
|
+
}
|
|
2907
|
+
}
|
|
2908
|
+
}
|
|
2909
|
+
}
|
|
2910
|
+
}
|
|
2911
|
+
},
|
|
2912
|
+
"/actions/network.unfollowStop": {
|
|
2913
|
+
"post": {
|
|
2914
|
+
"operationId": "action_network_unfollowStop",
|
|
2915
|
+
"summary": "network.unfollowStop",
|
|
2916
|
+
"description": "Run the `network.unfollowStop` action on the connected extension.",
|
|
2917
|
+
"tags": [
|
|
2918
|
+
"network"
|
|
2919
|
+
],
|
|
2920
|
+
"security": [
|
|
2921
|
+
{
|
|
2922
|
+
"bearerAuth": []
|
|
2923
|
+
}
|
|
2924
|
+
],
|
|
2925
|
+
"requestBody": {
|
|
2926
|
+
"required": true,
|
|
2927
|
+
"content": {
|
|
2928
|
+
"application/json": {
|
|
2929
|
+
"schema": {
|
|
2930
|
+
"type": "object",
|
|
2931
|
+
"properties": {},
|
|
2932
|
+
"additionalProperties": false
|
|
2933
|
+
}
|
|
2934
|
+
}
|
|
2935
|
+
}
|
|
2936
|
+
},
|
|
2937
|
+
"responses": {
|
|
2938
|
+
"200": {
|
|
2939
|
+
"description": "Action envelope.",
|
|
2940
|
+
"content": {
|
|
2941
|
+
"application/json": {
|
|
2942
|
+
"schema": {
|
|
2943
|
+
"oneOf": [
|
|
2944
|
+
{
|
|
2945
|
+
"type": "object",
|
|
2946
|
+
"required": [
|
|
2947
|
+
"id",
|
|
2948
|
+
"ok",
|
|
2949
|
+
"data"
|
|
2950
|
+
],
|
|
2951
|
+
"properties": {
|
|
2952
|
+
"id": {
|
|
2953
|
+
"type": "string"
|
|
2954
|
+
},
|
|
2955
|
+
"ok": {
|
|
2956
|
+
"const": true
|
|
2957
|
+
},
|
|
2958
|
+
"data": {
|
|
2959
|
+
"type": "object",
|
|
2960
|
+
"properties": {
|
|
2961
|
+
"stopping": {
|
|
2962
|
+
"type": "boolean"
|
|
2963
|
+
}
|
|
2964
|
+
},
|
|
2965
|
+
"required": [
|
|
2966
|
+
"stopping"
|
|
2967
|
+
],
|
|
2968
|
+
"additionalProperties": false
|
|
2969
|
+
},
|
|
2970
|
+
"rateLimit": {
|
|
2971
|
+
"$ref": "#/components/schemas/RateLimit"
|
|
2972
|
+
}
|
|
2973
|
+
}
|
|
2974
|
+
},
|
|
2975
|
+
{
|
|
2976
|
+
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
2977
|
+
}
|
|
2978
|
+
]
|
|
2979
|
+
}
|
|
2980
|
+
}
|
|
2981
|
+
}
|
|
2982
|
+
},
|
|
2983
|
+
"401": {
|
|
2984
|
+
"description": "Missing or wrong bearer token.",
|
|
2985
|
+
"content": {
|
|
2986
|
+
"application/json": {
|
|
2987
|
+
"schema": {
|
|
2988
|
+
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
2989
|
+
}
|
|
2990
|
+
}
|
|
2991
|
+
}
|
|
2992
|
+
}
|
|
2993
|
+
}
|
|
2994
|
+
}
|
|
2995
|
+
},
|
|
2996
|
+
"/actions/network.unfollowStatus": {
|
|
2997
|
+
"post": {
|
|
2998
|
+
"operationId": "action_network_unfollowStatus",
|
|
2999
|
+
"summary": "network.unfollowStatus",
|
|
3000
|
+
"description": "Run the `network.unfollowStatus` action on the connected extension.",
|
|
3001
|
+
"tags": [
|
|
3002
|
+
"network"
|
|
3003
|
+
],
|
|
3004
|
+
"security": [
|
|
3005
|
+
{
|
|
3006
|
+
"bearerAuth": []
|
|
3007
|
+
}
|
|
3008
|
+
],
|
|
3009
|
+
"requestBody": {
|
|
3010
|
+
"required": true,
|
|
3011
|
+
"content": {
|
|
3012
|
+
"application/json": {
|
|
3013
|
+
"schema": {
|
|
3014
|
+
"type": "object",
|
|
3015
|
+
"properties": {},
|
|
3016
|
+
"additionalProperties": false
|
|
3017
|
+
}
|
|
3018
|
+
}
|
|
3019
|
+
}
|
|
3020
|
+
},
|
|
3021
|
+
"responses": {
|
|
3022
|
+
"200": {
|
|
3023
|
+
"description": "Action envelope.",
|
|
3024
|
+
"content": {
|
|
3025
|
+
"application/json": {
|
|
3026
|
+
"schema": {
|
|
3027
|
+
"oneOf": [
|
|
3028
|
+
{
|
|
3029
|
+
"type": "object",
|
|
3030
|
+
"required": [
|
|
3031
|
+
"id",
|
|
3032
|
+
"ok",
|
|
3033
|
+
"data"
|
|
3034
|
+
],
|
|
3035
|
+
"properties": {
|
|
3036
|
+
"id": {
|
|
3037
|
+
"type": "string"
|
|
3038
|
+
},
|
|
3039
|
+
"ok": {
|
|
3040
|
+
"const": true
|
|
3041
|
+
},
|
|
3042
|
+
"data": {
|
|
3043
|
+
"type": "object",
|
|
3044
|
+
"properties": {
|
|
3045
|
+
"running": {
|
|
3046
|
+
"type": "boolean"
|
|
3047
|
+
},
|
|
3048
|
+
"done": {
|
|
3049
|
+
"type": "number"
|
|
3050
|
+
},
|
|
3051
|
+
"total": {
|
|
3052
|
+
"type": "number"
|
|
3053
|
+
},
|
|
3054
|
+
"lastName": {
|
|
3055
|
+
"type": "string"
|
|
3056
|
+
},
|
|
3057
|
+
"phase": {
|
|
3058
|
+
"type": "string",
|
|
3059
|
+
"const": "scanning"
|
|
3060
|
+
},
|
|
3061
|
+
"scanned": {
|
|
3062
|
+
"type": "number"
|
|
3063
|
+
},
|
|
3064
|
+
"scannedTotal": {
|
|
3065
|
+
"type": "number"
|
|
2789
3066
|
}
|
|
2790
3067
|
},
|
|
2791
3068
|
"required": [
|
|
2792
|
-
"
|
|
3069
|
+
"running",
|
|
3070
|
+
"done",
|
|
3071
|
+
"total",
|
|
3072
|
+
"lastName"
|
|
2793
3073
|
],
|
|
2794
3074
|
"additionalProperties": false
|
|
2795
3075
|
},
|
|
@@ -5209,7 +5489,8 @@
|
|
|
5209
5489
|
"pending",
|
|
5210
5490
|
"approved",
|
|
5211
5491
|
"rejected",
|
|
5212
|
-
"sent"
|
|
5492
|
+
"sent",
|
|
5493
|
+
"failed"
|
|
5213
5494
|
]
|
|
5214
5495
|
}
|
|
5215
5496
|
},
|
|
@@ -7248,7 +7529,7 @@
|
|
|
7248
7529
|
"post": {
|
|
7249
7530
|
"operationId": "tool_linkedin_send_invite",
|
|
7250
7531
|
"summary": "linkedin_send_invite",
|
|
7251
|
-
"description": "Send a connection invite, optionally with a note. Check linkedin_get_connection_status first. Hard cap 100 invites/day; in Copilot mode (the default) the invite is queued for human approval and the result status is \"queued\" rather than \"sent\". Pass dry_run to preview the exact payload.",
|
|
7532
|
+
"description": "Send a connection invite, optionally with a note of at most 200 characters (LinkedIn's own limit; a longer note is refused with INVALID_PARAMS, so aim for 180 or fewer). Check linkedin_get_connection_status first. Hard cap 100 invites/day; in Copilot mode (the default) the invite is queued for human approval and the result status is \"queued\" rather than \"sent\". Note that on a free account LinkedIn allows only a few personalised (with-note) invitations a month, so prefer a note where it will count. Pass dry_run to preview the exact payload.",
|
|
7252
7533
|
"tags": [
|
|
7253
7534
|
"tools"
|
|
7254
7535
|
],
|
|
@@ -7828,7 +8109,7 @@
|
|
|
7828
8109
|
"post": {
|
|
7829
8110
|
"operationId": "tool_linkedin_queue_list",
|
|
7830
8111
|
"summary": "linkedin_queue_list",
|
|
7831
|
-
"description": "List items in the human-approval queue, optionally filtered by status. In Copilot mode every agent-originated write lands here first, so call this to show the user what is waiting. Returns queue items with their action, params and target profile.",
|
|
8112
|
+
"description": "List items in the human-approval queue, optionally filtered by status (\"pending\", \"approved\", \"rejected\", \"sent\" or \"failed\"). In Copilot mode every agent-originated write lands here first, so call this to show the user what is waiting, and poll it after linkedin_queue_approve to see what actually sent. Returns queue items with their action, params and target profile; a failed item carries result.error.",
|
|
7832
8113
|
"tags": [
|
|
7833
8114
|
"tools"
|
|
7834
8115
|
],
|
|
@@ -7850,7 +8131,8 @@
|
|
|
7850
8131
|
"pending",
|
|
7851
8132
|
"approved",
|
|
7852
8133
|
"rejected",
|
|
7853
|
-
"sent"
|
|
8134
|
+
"sent",
|
|
8135
|
+
"failed"
|
|
7854
8136
|
]
|
|
7855
8137
|
}
|
|
7856
8138
|
},
|
|
@@ -7877,7 +8159,7 @@
|
|
|
7877
8159
|
"post": {
|
|
7878
8160
|
"operationId": "tool_linkedin_queue_approve",
|
|
7879
8161
|
"summary": "linkedin_queue_approve",
|
|
7880
|
-
"description": "Approve queued writes by id so the extension sends them, optionally editing the note or body first. This works only when the user has turned Autopilot on: in the default Copilot mode approval is a human action and the extension answers UNAUTHORIZED, so show the queue with linkedin_queue_list and ask the user to approve in the popup. Returns {approved}.",
|
|
8162
|
+
"description": "Approve queued writes by id so the extension sends them, optionally editing the note or body first. This works only when the user has turned Autopilot on: in the default Copilot mode approval is a human action and the extension answers UNAUTHORIZED, so show the queue with linkedin_queue_list and ask the user to approve in the popup. Returns {approved} immediately — the count marked approved, not sent. The extension then sends them one at a time at human pace, which takes seconds to minutes, so watch queue_item_sent events or poll linkedin_queue_list (status \"sent\" or \"failed\") rather than assuming the writes have landed when this returns. An edited note longer than 200 characters is refused here with INVALID_PARAMS and nothing is approved.",
|
|
7881
8163
|
"tags": [
|
|
7882
8164
|
"tools"
|
|
7883
8165
|
],
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "linkedin-toolkit-mcp",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"mcpName": "io.github.FormatixAI/linkedin-toolkit",
|
|
5
5
|
"description": "MCP server, localhost bridge, HTTP action API, SQLite mirror and lit CLI for LinkedIn Toolkit.",
|
|
6
6
|
"license": "MIT",
|
package/tools.json
CHANGED
|
@@ -629,7 +629,7 @@
|
|
|
629
629
|
{
|
|
630
630
|
"name": "linkedin_send_invite",
|
|
631
631
|
"action": "outreach.invite",
|
|
632
|
-
"description": "Send a connection invite, optionally with a note. Check linkedin_get_connection_status first. Hard cap 100 invites/day; in Copilot mode (the default) the invite is queued for human approval and the result status is \"queued\" rather than \"sent\". Pass dry_run to preview the exact payload.",
|
|
632
|
+
"description": "Send a connection invite, optionally with a note of at most 200 characters (LinkedIn's own limit; a longer note is refused with INVALID_PARAMS, so aim for 180 or fewer). Check linkedin_get_connection_status first. Hard cap 100 invites/day; in Copilot mode (the default) the invite is queued for human approval and the result status is \"queued\" rather than \"sent\". Note that on a free account LinkedIn allows only a few personalised (with-note) invitations a month, so prefer a note where it will count. Pass dry_run to preview the exact payload.",
|
|
633
633
|
"write": true,
|
|
634
634
|
"inputSchema": {
|
|
635
635
|
"type": "object",
|
|
@@ -969,7 +969,7 @@
|
|
|
969
969
|
{
|
|
970
970
|
"name": "linkedin_queue_list",
|
|
971
971
|
"action": "queue.list",
|
|
972
|
-
"description": "List items in the human-approval queue, optionally filtered by status. In Copilot mode every agent-originated write lands here first, so call this to show the user what is waiting. Returns queue items with their action, params and target profile.",
|
|
972
|
+
"description": "List items in the human-approval queue, optionally filtered by status (\"pending\", \"approved\", \"rejected\", \"sent\" or \"failed\"). In Copilot mode every agent-originated write lands here first, so call this to show the user what is waiting, and poll it after linkedin_queue_approve to see what actually sent. Returns queue items with their action, params and target profile; a failed item carries result.error.",
|
|
973
973
|
"write": false,
|
|
974
974
|
"inputSchema": {
|
|
975
975
|
"type": "object",
|
|
@@ -980,7 +980,8 @@
|
|
|
980
980
|
"pending",
|
|
981
981
|
"approved",
|
|
982
982
|
"rejected",
|
|
983
|
-
"sent"
|
|
983
|
+
"sent",
|
|
984
|
+
"failed"
|
|
984
985
|
]
|
|
985
986
|
}
|
|
986
987
|
},
|
|
@@ -990,7 +991,7 @@
|
|
|
990
991
|
{
|
|
991
992
|
"name": "linkedin_queue_approve",
|
|
992
993
|
"action": "queue.approve",
|
|
993
|
-
"description": "Approve queued writes by id so the extension sends them, optionally editing the note or body first. This works only when the user has turned Autopilot on: in the default Copilot mode approval is a human action and the extension answers UNAUTHORIZED, so show the queue with linkedin_queue_list and ask the user to approve in the popup. Returns {approved}.",
|
|
994
|
+
"description": "Approve queued writes by id so the extension sends them, optionally editing the note or body first. This works only when the user has turned Autopilot on: in the default Copilot mode approval is a human action and the extension answers UNAUTHORIZED, so show the queue with linkedin_queue_list and ask the user to approve in the popup. Returns {approved} immediately — the count marked approved, not sent. The extension then sends them one at a time at human pace, which takes seconds to minutes, so watch queue_item_sent events or poll linkedin_queue_list (status \"sent\" or \"failed\") rather than assuming the writes have landed when this returns. An edited note longer than 200 characters is refused here with INVALID_PARAMS and nothing is approved.",
|
|
994
995
|
"write": true,
|
|
995
996
|
"inputSchema": {
|
|
996
997
|
"type": "object",
|