@linkedapi/mcp 0.3.11 → 1.0.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/.github/workflows/merge-main.yaml +9 -9
- package/.github/workflows/pr-main.yaml +4 -4
- package/dist/linked-api-server.d.ts.map +1 -1
- package/dist/linked-api-server.js +27 -5
- package/dist/linked-api-server.js.map +1 -1
- package/dist/linked-api-tools.d.ts +3 -0
- package/dist/linked-api-tools.d.ts.map +1 -1
- package/dist/linked-api-tools.js +26 -0
- package/dist/linked-api-tools.js.map +1 -1
- package/dist/tools/admin-connect-account.d.ts +14 -0
- package/dist/tools/admin-connect-account.d.ts.map +1 -0
- package/dist/tools/admin-connect-account.js +27 -0
- package/dist/tools/admin-connect-account.js.map +1 -0
- package/dist/tools/admin-disconnect-account.d.ts +16 -0
- package/dist/tools/admin-disconnect-account.d.ts.map +1 -0
- package/dist/tools/admin-disconnect-account.js +35 -0
- package/dist/tools/admin-disconnect-account.js.map +1 -0
- package/dist/tools/admin-get-accounts.d.ts +14 -0
- package/dist/tools/admin-get-accounts.d.ts.map +1 -0
- package/dist/tools/admin-get-accounts.js +27 -0
- package/dist/tools/admin-get-accounts.js.map +1 -0
- package/dist/tools/admin-get-limits-usage.d.ts +20 -0
- package/dist/tools/admin-get-limits-usage.d.ts.map +1 -0
- package/dist/tools/admin-get-limits-usage.js +35 -0
- package/dist/tools/admin-get-limits-usage.js.map +1 -0
- package/dist/tools/admin-get-seats.d.ts +18 -0
- package/dist/tools/admin-get-seats.d.ts.map +1 -0
- package/dist/tools/admin-get-seats.js +27 -0
- package/dist/tools/admin-get-seats.js.map +1 -0
- package/dist/tools/admin-get-subscription-status.d.ts +14 -0
- package/dist/tools/admin-get-subscription-status.d.ts.map +1 -0
- package/dist/tools/admin-get-subscription-status.js +27 -0
- package/dist/tools/admin-get-subscription-status.js.map +1 -0
- package/dist/tools/admin-regenerate-token.d.ts +16 -0
- package/dist/tools/admin-regenerate-token.d.ts.map +1 -0
- package/dist/tools/admin-regenerate-token.js +35 -0
- package/dist/tools/admin-regenerate-token.js.map +1 -0
- package/dist/tools/admin-reset-limits.d.ts +16 -0
- package/dist/tools/admin-reset-limits.d.ts.map +1 -0
- package/dist/tools/admin-reset-limits.js +35 -0
- package/dist/tools/admin-reset-limits.js.map +1 -0
- package/dist/tools/admin-set-limits.d.ts +26 -0
- package/dist/tools/admin-set-limits.d.ts.map +1 -0
- package/dist/tools/admin-set-limits.js +68 -0
- package/dist/tools/admin-set-limits.js.map +1 -0
- package/dist/tools/admin-set-seats.d.ts +24 -0
- package/dist/tools/admin-set-seats.d.ts.map +1 -0
- package/dist/tools/admin-set-seats.js +47 -0
- package/dist/tools/admin-set-seats.js.map +1 -0
- package/dist/utils/admin-tool.d.ts +14 -0
- package/dist/utils/admin-tool.d.ts.map +1 -0
- package/dist/utils/admin-tool.js +10 -0
- package/dist/utils/admin-tool.js.map +1 -0
- package/package.json +2 -2
- package/src/linked-api-server.ts +35 -12
- package/src/linked-api-tools.ts +29 -0
- package/src/tools/admin-connect-account.ts +34 -0
- package/src/tools/admin-disconnect-account.ts +40 -0
- package/src/tools/admin-get-accounts.ts +30 -0
- package/src/tools/admin-get-limits-usage.ts +42 -0
- package/src/tools/admin-get-seats.ts +34 -0
- package/src/tools/admin-get-subscription-status.ts +33 -0
- package/src/tools/admin-regenerate-token.ts +43 -0
- package/src/tools/admin-reset-limits.ts +39 -0
- package/src/tools/admin-set-limits.ts +75 -0
- package/src/tools/admin-set-seats.ts +52 -0
- package/src/utils/admin-tool.ts +22 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.AdminRegenerateTokenTool = void 0;
|
|
7
|
+
const zod_1 = __importDefault(require("zod"));
|
|
8
|
+
const admin_tool_js_1 = require("../utils/admin-tool.js");
|
|
9
|
+
class AdminRegenerateTokenTool extends admin_tool_js_1.AdminTool {
|
|
10
|
+
name = 'admin_regenerate_token';
|
|
11
|
+
schema = zod_1.default.object({
|
|
12
|
+
accountId: zod_1.default.string(),
|
|
13
|
+
});
|
|
14
|
+
async execute({ admin, args, }) {
|
|
15
|
+
return await admin.accounts.regenerateIdentificationToken(args);
|
|
16
|
+
}
|
|
17
|
+
getTool() {
|
|
18
|
+
return {
|
|
19
|
+
name: this.name,
|
|
20
|
+
description: 'Regenerate identification token for an account. The old token becomes invalid immediately.',
|
|
21
|
+
inputSchema: {
|
|
22
|
+
type: 'object',
|
|
23
|
+
properties: {
|
|
24
|
+
accountId: {
|
|
25
|
+
type: 'string',
|
|
26
|
+
description: 'UUID of the account',
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
required: ['accountId'],
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.AdminRegenerateTokenTool = AdminRegenerateTokenTool;
|
|
35
|
+
//# sourceMappingURL=admin-regenerate-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-regenerate-token.js","sourceRoot":"","sources":["../../src/tools/admin-regenerate-token.ts"],"names":[],"mappings":";;;;;;AAEA,8CAAoB;AAEpB,0DAAmD;AAEnD,MAAa,wBAAyB,SAAQ,yBAG7C;IACiB,IAAI,GAAG,wBAAwB,CAAC;IAC7B,MAAM,GAAG,aAAC,CAAC,MAAM,CAAC;QACnC,SAAS,EAAE,aAAC,CAAC,MAAM,EAAE;KACtB,CAAC,CAAC;IAEa,KAAK,CAAC,OAAO,CAAC,EAC5B,KAAK,EACL,IAAI,GAIL;QACC,OAAO,MAAM,KAAK,CAAC,QAAQ,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC;IAEe,OAAO;QACrB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EACT,4FAA4F;YAC9F,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,SAAS,EAAE;wBACT,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,qBAAqB;qBACnC;iBACF;gBACD,QAAQ,EAAE,CAAC,WAAW,CAAC;aACxB;SACF,CAAC;IACJ,CAAC;CACF;AApCD,4DAoCC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { LinkedApiAdmin, TResetLimitsParams } from '@linkedapi/node';
|
|
2
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
import z from 'zod';
|
|
4
|
+
import { AdminTool } from '../utils/admin-tool.js';
|
|
5
|
+
export declare class AdminResetLimitsTool extends AdminTool<TResetLimitsParams, void> {
|
|
6
|
+
readonly name = "admin_reset_limits";
|
|
7
|
+
protected readonly schema: z.ZodObject<{
|
|
8
|
+
accountId: z.ZodString;
|
|
9
|
+
}, z.core.$strip>;
|
|
10
|
+
execute({ admin, args, }: {
|
|
11
|
+
admin: LinkedApiAdmin;
|
|
12
|
+
args: TResetLimitsParams;
|
|
13
|
+
}): Promise<void>;
|
|
14
|
+
getTool(): Tool;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=admin-reset-limits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-reset-limits.d.ts","sourceRoot":"","sources":["../../src/tools/admin-reset-limits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,qBAAa,oBAAqB,SAAQ,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC;IAC3E,SAAgB,IAAI,wBAAwB;IAC5C,SAAS,CAAC,QAAQ,CAAC,MAAM;;sBAEtB;IAEmB,OAAO,CAAC,EAC5B,KAAK,EACL,IAAI,GACL,EAAE;QACD,KAAK,EAAE,cAAc,CAAC;QACtB,IAAI,EAAE,kBAAkB,CAAC;KAC1B,GAAG,OAAO,CAAC,IAAI,CAAC;IAID,OAAO,IAAI,IAAI;CAgBhC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.AdminResetLimitsTool = void 0;
|
|
7
|
+
const zod_1 = __importDefault(require("zod"));
|
|
8
|
+
const admin_tool_js_1 = require("../utils/admin-tool.js");
|
|
9
|
+
class AdminResetLimitsTool extends admin_tool_js_1.AdminTool {
|
|
10
|
+
name = 'admin_reset_limits';
|
|
11
|
+
schema = zod_1.default.object({
|
|
12
|
+
accountId: zod_1.default.string(),
|
|
13
|
+
});
|
|
14
|
+
async execute({ admin, args, }) {
|
|
15
|
+
await admin.limits.resetToDefaults(args);
|
|
16
|
+
}
|
|
17
|
+
getTool() {
|
|
18
|
+
return {
|
|
19
|
+
name: this.name,
|
|
20
|
+
description: 'Reset all rate limits for an account to the system defaults.',
|
|
21
|
+
inputSchema: {
|
|
22
|
+
type: 'object',
|
|
23
|
+
properties: {
|
|
24
|
+
accountId: {
|
|
25
|
+
type: 'string',
|
|
26
|
+
description: 'Account UUID',
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
required: ['accountId'],
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.AdminResetLimitsTool = AdminResetLimitsTool;
|
|
35
|
+
//# sourceMappingURL=admin-reset-limits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-reset-limits.js","sourceRoot":"","sources":["../../src/tools/admin-reset-limits.ts"],"names":[],"mappings":";;;;;;AAEA,8CAAoB;AAEpB,0DAAmD;AAEnD,MAAa,oBAAqB,SAAQ,yBAAmC;IAC3D,IAAI,GAAG,oBAAoB,CAAC;IACzB,MAAM,GAAG,aAAC,CAAC,MAAM,CAAC;QACnC,SAAS,EAAE,aAAC,CAAC,MAAM,EAAE;KACtB,CAAC,CAAC;IAEa,KAAK,CAAC,OAAO,CAAC,EAC5B,KAAK,EACL,IAAI,GAIL;QACC,MAAM,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAEe,OAAO;QACrB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,8DAA8D;YAC3E,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,SAAS,EAAE;wBACT,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,cAAc;qBAC5B;iBACF;gBACD,QAAQ,EAAE,CAAC,WAAW,CAAC;aACxB;SACF,CAAC;IACJ,CAAC;CACF;AAhCD,oDAgCC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { LinkedApiAdmin, TSetLimitsParams } from '@linkedapi/node';
|
|
2
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
import z from 'zod';
|
|
4
|
+
import { AdminTool } from '../utils/admin-tool.js';
|
|
5
|
+
export declare class AdminSetLimitsTool extends AdminTool<TSetLimitsParams, void> {
|
|
6
|
+
readonly name = "admin_set_limits";
|
|
7
|
+
protected readonly schema: z.ZodObject<{
|
|
8
|
+
accountId: z.ZodString;
|
|
9
|
+
limits: z.ZodArray<z.ZodObject<{
|
|
10
|
+
category: z.ZodString;
|
|
11
|
+
period: z.ZodEnum<{
|
|
12
|
+
daily: "daily";
|
|
13
|
+
weekly: "weekly";
|
|
14
|
+
monthly: "monthly";
|
|
15
|
+
}>;
|
|
16
|
+
maxValue: z.ZodNumber;
|
|
17
|
+
isEnabled: z.ZodOptional<z.ZodBoolean>;
|
|
18
|
+
}, z.core.$strip>>;
|
|
19
|
+
}, z.core.$strip>;
|
|
20
|
+
execute({ admin, args, }: {
|
|
21
|
+
admin: LinkedApiAdmin;
|
|
22
|
+
args: TSetLimitsParams;
|
|
23
|
+
}): Promise<void>;
|
|
24
|
+
getTool(): Tool;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=admin-set-limits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-set-limits.d.ts","sourceRoot":"","sources":["../../src/tools/admin-set-limits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,qBAAa,kBAAmB,SAAQ,SAAS,CAAC,gBAAgB,EAAE,IAAI,CAAC;IACvE,SAAgB,IAAI,sBAAsB;IAC1C,SAAS,CAAC,QAAQ,CAAC,MAAM;;;;;;;;;;;;sBAUtB;IAEmB,OAAO,CAAC,EAC5B,KAAK,EACL,IAAI,GACL,EAAE;QACD,KAAK,EAAE,cAAc,CAAC;QACtB,IAAI,EAAE,gBAAgB,CAAC;KACxB,GAAG,OAAO,CAAC,IAAI,CAAC;IAID,OAAO,IAAI,IAAI;CA4ChC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.AdminSetLimitsTool = void 0;
|
|
7
|
+
const zod_1 = __importDefault(require("zod"));
|
|
8
|
+
const admin_tool_js_1 = require("../utils/admin-tool.js");
|
|
9
|
+
class AdminSetLimitsTool extends admin_tool_js_1.AdminTool {
|
|
10
|
+
name = 'admin_set_limits';
|
|
11
|
+
schema = zod_1.default.object({
|
|
12
|
+
accountId: zod_1.default.string(),
|
|
13
|
+
limits: zod_1.default.array(zod_1.default.object({
|
|
14
|
+
category: zod_1.default.string(),
|
|
15
|
+
period: zod_1.default.enum(['daily', 'weekly', 'monthly']),
|
|
16
|
+
maxValue: zod_1.default.number().int().min(0),
|
|
17
|
+
isEnabled: zod_1.default.boolean().optional(),
|
|
18
|
+
})),
|
|
19
|
+
});
|
|
20
|
+
async execute({ admin, args, }) {
|
|
21
|
+
await admin.limits.set(args);
|
|
22
|
+
}
|
|
23
|
+
getTool() {
|
|
24
|
+
return {
|
|
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.',
|
|
27
|
+
inputSchema: {
|
|
28
|
+
type: 'object',
|
|
29
|
+
properties: {
|
|
30
|
+
accountId: {
|
|
31
|
+
type: 'string',
|
|
32
|
+
description: 'Account UUID',
|
|
33
|
+
},
|
|
34
|
+
limits: {
|
|
35
|
+
type: 'array',
|
|
36
|
+
description: 'Array of limit configurations',
|
|
37
|
+
items: {
|
|
38
|
+
type: 'object',
|
|
39
|
+
properties: {
|
|
40
|
+
category: {
|
|
41
|
+
type: 'string',
|
|
42
|
+
description: 'Limit category',
|
|
43
|
+
},
|
|
44
|
+
period: {
|
|
45
|
+
type: 'string',
|
|
46
|
+
enum: ['daily', 'weekly', 'monthly'],
|
|
47
|
+
description: 'Limit period',
|
|
48
|
+
},
|
|
49
|
+
maxValue: {
|
|
50
|
+
type: 'number',
|
|
51
|
+
description: 'Maximum allowed actions (>= 0)',
|
|
52
|
+
},
|
|
53
|
+
isEnabled: {
|
|
54
|
+
type: 'boolean',
|
|
55
|
+
description: 'Whether this limit is enforced (default: true)',
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
required: ['category', 'period', 'maxValue'],
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
required: ['accountId', 'limits'],
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.AdminSetLimitsTool = AdminSetLimitsTool;
|
|
68
|
+
//# sourceMappingURL=admin-set-limits.js.map
|
|
@@ -0,0 +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,+SAA+S;YACjT,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,24 @@
|
|
|
1
|
+
import { LinkedApiAdmin, TSetSeatsParams, TSetSeatsResult } from '@linkedapi/node';
|
|
2
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
import z from 'zod';
|
|
4
|
+
import { AdminTool } from '../utils/admin-tool.js';
|
|
5
|
+
export declare class AdminSetSeatsTool extends AdminTool<TSetSeatsParams, TSetSeatsResult> {
|
|
6
|
+
readonly name = "admin_set_seats";
|
|
7
|
+
protected readonly schema: z.ZodObject<{
|
|
8
|
+
quantity: z.ZodNumber;
|
|
9
|
+
seatType: z.ZodEnum<{
|
|
10
|
+
core: "core";
|
|
11
|
+
plus: "plus";
|
|
12
|
+
}>;
|
|
13
|
+
billingPeriod: z.ZodEnum<{
|
|
14
|
+
month: "month";
|
|
15
|
+
year: "year";
|
|
16
|
+
}>;
|
|
17
|
+
}, z.core.$strip>;
|
|
18
|
+
execute({ admin, args, }: {
|
|
19
|
+
admin: LinkedApiAdmin;
|
|
20
|
+
args: TSetSeatsParams;
|
|
21
|
+
}): Promise<TSetSeatsResult>;
|
|
22
|
+
getTool(): Tool;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=admin-set-seats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-set-seats.d.ts","sourceRoot":"","sources":["../../src/tools/admin-set-seats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,qBAAa,iBAAkB,SAAQ,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAChF,SAAgB,IAAI,qBAAqB;IACzC,SAAS,CAAC,QAAQ,CAAC,MAAM;;;;;;;;;;sBAItB;IAEmB,OAAO,CAAC,EAC5B,KAAK,EACL,IAAI,GACL,EAAE;QACD,KAAK,EAAE,cAAc,CAAC;QACtB,IAAI,EAAE,eAAe,CAAC;KACvB,GAAG,OAAO,CAAC,eAAe,CAAC;IAIZ,OAAO,IAAI,IAAI;CA2BhC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.AdminSetSeatsTool = void 0;
|
|
7
|
+
const zod_1 = __importDefault(require("zod"));
|
|
8
|
+
const admin_tool_js_1 = require("../utils/admin-tool.js");
|
|
9
|
+
class AdminSetSeatsTool extends admin_tool_js_1.AdminTool {
|
|
10
|
+
name = 'admin_set_seats';
|
|
11
|
+
schema = zod_1.default.object({
|
|
12
|
+
quantity: zod_1.default.number().int().min(1).max(1000),
|
|
13
|
+
seatType: zod_1.default.enum(['core', 'plus']),
|
|
14
|
+
billingPeriod: zod_1.default.enum(['month', 'year']),
|
|
15
|
+
});
|
|
16
|
+
async execute({ admin, args, }) {
|
|
17
|
+
return await admin.subscription.setSeats(args);
|
|
18
|
+
}
|
|
19
|
+
getTool() {
|
|
20
|
+
return {
|
|
21
|
+
name: this.name,
|
|
22
|
+
description: 'Set number of subscription seats. Returns checkout link if no active subscription, otherwise updates immediately.',
|
|
23
|
+
inputSchema: {
|
|
24
|
+
type: 'object',
|
|
25
|
+
properties: {
|
|
26
|
+
quantity: {
|
|
27
|
+
type: 'number',
|
|
28
|
+
description: 'Number of seats (1-1000)',
|
|
29
|
+
},
|
|
30
|
+
seatType: {
|
|
31
|
+
type: 'string',
|
|
32
|
+
enum: ['core', 'plus'],
|
|
33
|
+
description: 'Seat type. "plus" unlocks Sales Navigator actions.',
|
|
34
|
+
},
|
|
35
|
+
billingPeriod: {
|
|
36
|
+
type: 'string',
|
|
37
|
+
enum: ['month', 'year'],
|
|
38
|
+
description: 'Billing period',
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
required: ['quantity', 'seatType', 'billingPeriod'],
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.AdminSetSeatsTool = AdminSetSeatsTool;
|
|
47
|
+
//# sourceMappingURL=admin-set-seats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-set-seats.js","sourceRoot":"","sources":["../../src/tools/admin-set-seats.ts"],"names":[],"mappings":";;;;;;AAEA,8CAAoB;AAEpB,0DAAmD;AAEnD,MAAa,iBAAkB,SAAQ,yBAA2C;IAChE,IAAI,GAAG,iBAAiB,CAAC;IACtB,MAAM,GAAG,aAAC,CAAC,MAAM,CAAC;QACnC,QAAQ,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;QAC3C,QAAQ,EAAE,aAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClC,aAAa,EAAE,aAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;KACzC,CAAC,CAAC;IAEa,KAAK,CAAC,OAAO,CAAC,EAC5B,KAAK,EACL,IAAI,GAIL;QACC,OAAO,MAAM,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAEe,OAAO;QACrB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EACT,mHAAmH;YACrH,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,QAAQ,EAAE;wBACR,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,0BAA0B;qBACxC;oBACD,QAAQ,EAAE;wBACR,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;wBACtB,WAAW,EAAE,oDAAoD;qBAClE;oBACD,aAAa,EAAE;wBACb,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;wBACvB,WAAW,EAAE,gBAAgB;qBAC9B;iBACF;gBACD,QAAQ,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,eAAe,CAAC;aACpD;SACF,CAAC;IACJ,CAAC;CACF;AA7CD,8CA6CC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { LinkedApiAdmin } from '@linkedapi/node';
|
|
2
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
import z from 'zod';
|
|
4
|
+
export declare abstract class AdminTool<TParams, TResult> {
|
|
5
|
+
abstract readonly name: string;
|
|
6
|
+
protected abstract readonly schema: z.ZodSchema;
|
|
7
|
+
abstract getTool(): Tool;
|
|
8
|
+
validate(args: unknown): TParams;
|
|
9
|
+
abstract execute({ admin, args, }: {
|
|
10
|
+
admin: LinkedApiAdmin;
|
|
11
|
+
args: TParams;
|
|
12
|
+
}): Promise<TResult>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=admin-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-tool.d.ts","sourceRoot":"","sources":["../../src/utils/admin-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,8BAAsB,SAAS,CAAC,OAAO,EAAE,OAAO;IAC9C,kBAAyB,IAAI,EAAE,MAAM,CAAC;IACtC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC;aAEhC,OAAO,IAAI,IAAI;IAExB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;aAIvB,OAAO,CAAC,EACtB,KAAK,EACL,IAAI,GACL,EAAE;QACD,KAAK,EAAE,cAAc,CAAC;QACtB,IAAI,EAAE,OAAO,CAAC;KACf,GAAG,OAAO,CAAC,OAAO,CAAC;CACrB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AdminTool = void 0;
|
|
4
|
+
class AdminTool {
|
|
5
|
+
validate(args) {
|
|
6
|
+
return this.schema.parse(args);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
exports.AdminTool = AdminTool;
|
|
10
|
+
//# sourceMappingURL=admin-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-tool.js","sourceRoot":"","sources":["../../src/utils/admin-tool.ts"],"names":[],"mappings":";;;AAIA,MAAsB,SAAS;IAMtB,QAAQ,CAAC,IAAa;QAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;IAC5C,CAAC;CASF;AAjBD,8BAiBC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@linkedapi/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
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,8 +30,8 @@
|
|
|
30
30
|
"author": "Linked API",
|
|
31
31
|
"license": "MIT",
|
|
32
32
|
"dependencies": {
|
|
33
|
+
"@linkedapi/node": "^1.2.18",
|
|
33
34
|
"@modelcontextprotocol/sdk": "^1.17.4",
|
|
34
|
-
"@linkedapi/node": "^1.2.15",
|
|
35
35
|
"zod": "^4.1.1"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
package/src/linked-api-server.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LinkedApi, LinkedApiError, TLinkedApiConfig } from '@linkedapi/node';
|
|
1
|
+
import { LinkedApi, LinkedApiAdmin, LinkedApiError, TLinkedApiConfig } from '@linkedapi/node';
|
|
2
2
|
import { buildLinkedApiHttpClient } from '@linkedapi/node/dist/core';
|
|
3
3
|
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
4
4
|
|
|
@@ -20,7 +20,9 @@ export class LinkedApiMCPServer {
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
public getTools(): Tool[] {
|
|
23
|
-
|
|
23
|
+
const linkedApiTools = this.tools.tools.map((tool) => tool.getTool());
|
|
24
|
+
const adminTools = this.tools.adminTools.map((tool) => tool.getTool());
|
|
25
|
+
return [...linkedApiTools, ...adminTools];
|
|
24
26
|
}
|
|
25
27
|
|
|
26
28
|
public async executeWithTokens(
|
|
@@ -37,21 +39,42 @@ export class LinkedApiMCPServer {
|
|
|
37
39
|
},
|
|
38
40
|
'Tool execution started',
|
|
39
41
|
);
|
|
40
|
-
const linkedapi = new LinkedApi(
|
|
41
|
-
buildLinkedApiHttpClient(
|
|
42
|
-
{
|
|
43
|
-
linkedApiToken: linkedApiToken,
|
|
44
|
-
identificationToken: identificationToken,
|
|
45
|
-
},
|
|
46
|
-
'mcp',
|
|
47
|
-
),
|
|
48
|
-
);
|
|
49
|
-
|
|
50
42
|
const { name: toolName, arguments: args, _meta } = request;
|
|
51
43
|
const progressToken = _meta?.progressToken;
|
|
52
44
|
|
|
53
45
|
const startTime = Date.now();
|
|
54
46
|
try {
|
|
47
|
+
const adminTool = this.tools.adminToolByName(toolName);
|
|
48
|
+
if (adminTool) {
|
|
49
|
+
const admin = new LinkedApiAdmin({ linkedApiToken,
|
|
50
|
+
client: 'mcp' });
|
|
51
|
+
const params = adminTool.validate(args);
|
|
52
|
+
const result = await adminTool.execute({ admin,
|
|
53
|
+
args: params });
|
|
54
|
+
const duration = this.calculateDuration(startTime);
|
|
55
|
+
logger.info({ toolName,
|
|
56
|
+
duration,
|
|
57
|
+
data: result }, 'Tool execution successful');
|
|
58
|
+
if (result === undefined) {
|
|
59
|
+
return { content: [{ type: 'text' as const,
|
|
60
|
+
text: 'Completed' }] };
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
content: [{ type: 'text' as const,
|
|
64
|
+
text: JSON.stringify(result, null, 2) }],
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const linkedapi = new LinkedApi(
|
|
69
|
+
buildLinkedApiHttpClient(
|
|
70
|
+
{
|
|
71
|
+
linkedApiToken: linkedApiToken,
|
|
72
|
+
identificationToken: identificationToken,
|
|
73
|
+
},
|
|
74
|
+
'mcp',
|
|
75
|
+
),
|
|
76
|
+
);
|
|
77
|
+
|
|
55
78
|
const tool = this.tools.toolByName(toolName);
|
|
56
79
|
if (!tool) {
|
|
57
80
|
throw new Error(`Unknown tool: ${toolName}`);
|
package/src/linked-api-tools.ts
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
import { AdminConnectAccountTool } from './tools/admin-connect-account.js';
|
|
2
|
+
import { AdminDisconnectAccountTool } from './tools/admin-disconnect-account.js';
|
|
3
|
+
import { AdminGetAccountsTool } from './tools/admin-get-accounts.js';
|
|
4
|
+
import { AdminGetLimitsUsageTool } from './tools/admin-get-limits-usage.js';
|
|
5
|
+
import { AdminGetSeatsTool } from './tools/admin-get-seats.js';
|
|
6
|
+
import { AdminGetSubscriptionStatusTool } from './tools/admin-get-subscription-status.js';
|
|
7
|
+
import { AdminRegenerateTokenTool } from './tools/admin-regenerate-token.js';
|
|
8
|
+
import { AdminResetLimitsTool } from './tools/admin-reset-limits.js';
|
|
9
|
+
import { AdminSetLimitsTool } from './tools/admin-set-limits.js';
|
|
10
|
+
import { AdminSetSeatsTool } from './tools/admin-set-seats.js';
|
|
1
11
|
import { CheckConnectionStatusTool } from './tools/check-connection-status.js';
|
|
2
12
|
import { CommentOnPostTool } from './tools/comment-on-post.js';
|
|
3
13
|
import { CreatePostTool } from './tools/create-post.js';
|
|
@@ -25,11 +35,13 @@ import { SearchPeopleTool } from './tools/search-people.js';
|
|
|
25
35
|
import { SendConnectionRequestTool } from './tools/send-connection-request.js';
|
|
26
36
|
import { SendMessageTool } from './tools/send-message.js';
|
|
27
37
|
import { WithdrawConnectionRequestTool } from './tools/withdraw-connection-request.js';
|
|
38
|
+
import { AdminTool } from './utils/admin-tool.js';
|
|
28
39
|
import { LinkedApiTool } from './utils/linked-api-tool.js';
|
|
29
40
|
import { LinkedApiProgressNotification } from './utils/types.js';
|
|
30
41
|
|
|
31
42
|
export class LinkedApiTools {
|
|
32
43
|
public readonly tools: ReadonlyArray<LinkedApiTool<unknown, unknown>>;
|
|
44
|
+
public readonly adminTools: ReadonlyArray<AdminTool<unknown, unknown>>;
|
|
33
45
|
|
|
34
46
|
constructor(progressCallback: (progress: LinkedApiProgressNotification) => void) {
|
|
35
47
|
this.tools = [
|
|
@@ -64,9 +76,26 @@ export class LinkedApiTools {
|
|
|
64
76
|
new GetWorkflowResultTool(progressCallback),
|
|
65
77
|
new GetApiUsageTool(progressCallback),
|
|
66
78
|
];
|
|
79
|
+
|
|
80
|
+
this.adminTools = [
|
|
81
|
+
new AdminGetSubscriptionStatusTool(),
|
|
82
|
+
new AdminGetSeatsTool(),
|
|
83
|
+
new AdminSetSeatsTool(),
|
|
84
|
+
new AdminGetAccountsTool(),
|
|
85
|
+
new AdminConnectAccountTool(),
|
|
86
|
+
new AdminDisconnectAccountTool(),
|
|
87
|
+
new AdminRegenerateTokenTool(),
|
|
88
|
+
new AdminGetLimitsUsageTool(),
|
|
89
|
+
new AdminSetLimitsTool(),
|
|
90
|
+
new AdminResetLimitsTool(),
|
|
91
|
+
];
|
|
67
92
|
}
|
|
68
93
|
|
|
69
94
|
public toolByName(name: string): LinkedApiTool<unknown, unknown> | undefined {
|
|
70
95
|
return this.tools.find((tool) => tool.name === name);
|
|
71
96
|
}
|
|
97
|
+
|
|
98
|
+
public adminToolByName(name: string): AdminTool<unknown, unknown> | undefined {
|
|
99
|
+
return this.adminTools.find((tool) => tool.name === name);
|
|
100
|
+
}
|
|
72
101
|
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { LinkedApiAdmin, TCreateConnectionSessionResult } from '@linkedapi/node';
|
|
2
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
import z from 'zod';
|
|
4
|
+
|
|
5
|
+
import { AdminTool } from '../utils/admin-tool.js';
|
|
6
|
+
|
|
7
|
+
export class AdminConnectAccountTool extends AdminTool<
|
|
8
|
+
Record<string, never>,
|
|
9
|
+
TCreateConnectionSessionResult
|
|
10
|
+
> {
|
|
11
|
+
public readonly name = 'admin_connect_account';
|
|
12
|
+
protected readonly schema = z.object({});
|
|
13
|
+
|
|
14
|
+
public override async execute({
|
|
15
|
+
admin,
|
|
16
|
+
}: {
|
|
17
|
+
admin: LinkedApiAdmin;
|
|
18
|
+
args: Record<string, never>;
|
|
19
|
+
}): Promise<TCreateConnectionSessionResult> {
|
|
20
|
+
return await admin.accounts.createConnectionSession();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
public override getTool(): Tool {
|
|
24
|
+
return {
|
|
25
|
+
name: this.name,
|
|
26
|
+
description:
|
|
27
|
+
'Create a connection session to connect a new LinkedIn account. Returns a sessionId and connectionLink that must be opened in a browser.',
|
|
28
|
+
inputSchema: {
|
|
29
|
+
type: 'object',
|
|
30
|
+
properties: {},
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { LinkedApiAdmin, TDisconnectParams } from '@linkedapi/node';
|
|
2
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
import z from 'zod';
|
|
4
|
+
|
|
5
|
+
import { AdminTool } from '../utils/admin-tool.js';
|
|
6
|
+
|
|
7
|
+
export class AdminDisconnectAccountTool extends AdminTool<TDisconnectParams, void> {
|
|
8
|
+
public readonly name = 'admin_disconnect_account';
|
|
9
|
+
protected readonly schema = z.object({
|
|
10
|
+
accountId: z.string(),
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
public override async execute({
|
|
14
|
+
admin,
|
|
15
|
+
args,
|
|
16
|
+
}: {
|
|
17
|
+
admin: LinkedApiAdmin;
|
|
18
|
+
args: TDisconnectParams;
|
|
19
|
+
}): Promise<void> {
|
|
20
|
+
await admin.accounts.disconnect(args);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
public override getTool(): Tool {
|
|
24
|
+
return {
|
|
25
|
+
name: this.name,
|
|
26
|
+
description:
|
|
27
|
+
'Disconnect a LinkedIn account. This action is irreversible — the account must be reconnected from scratch.',
|
|
28
|
+
inputSchema: {
|
|
29
|
+
type: 'object',
|
|
30
|
+
properties: {
|
|
31
|
+
accountId: {
|
|
32
|
+
type: 'string',
|
|
33
|
+
description: 'UUID of the account to disconnect',
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
required: ['accountId'],
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { LinkedApiAdmin, TAccountsResult } from '@linkedapi/node';
|
|
2
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
import z from 'zod';
|
|
4
|
+
|
|
5
|
+
import { AdminTool } from '../utils/admin-tool.js';
|
|
6
|
+
|
|
7
|
+
export class AdminGetAccountsTool extends AdminTool<Record<string, never>, TAccountsResult> {
|
|
8
|
+
public readonly name = 'admin_get_accounts';
|
|
9
|
+
protected readonly schema = z.object({});
|
|
10
|
+
|
|
11
|
+
public override async execute({
|
|
12
|
+
admin,
|
|
13
|
+
}: {
|
|
14
|
+
admin: LinkedApiAdmin;
|
|
15
|
+
args: Record<string, never>;
|
|
16
|
+
}): Promise<TAccountsResult> {
|
|
17
|
+
return await admin.accounts.getAll();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
public override getTool(): Tool {
|
|
21
|
+
return {
|
|
22
|
+
name: this.name,
|
|
23
|
+
description: 'Get all connected LinkedIn accounts and pending connection sessions.',
|
|
24
|
+
inputSchema: {
|
|
25
|
+
type: 'object',
|
|
26
|
+
properties: {},
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { LinkedApiAdmin, TGetLimitsUsageParams, TLimitUsage } from '@linkedapi/node';
|
|
2
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
import z from 'zod';
|
|
4
|
+
|
|
5
|
+
import { AdminTool } from '../utils/admin-tool.js';
|
|
6
|
+
|
|
7
|
+
export class AdminGetLimitsUsageTool extends AdminTool<
|
|
8
|
+
TGetLimitsUsageParams,
|
|
9
|
+
{ usage: Array<TLimitUsage> }
|
|
10
|
+
> {
|
|
11
|
+
public readonly name = 'admin_get_limits_usage';
|
|
12
|
+
protected readonly schema = z.object({
|
|
13
|
+
accountId: z.string(),
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
public override async execute({
|
|
17
|
+
admin,
|
|
18
|
+
args,
|
|
19
|
+
}: {
|
|
20
|
+
admin: LinkedApiAdmin;
|
|
21
|
+
args: TGetLimitsUsageParams;
|
|
22
|
+
}): Promise<{ usage: Array<TLimitUsage> }> {
|
|
23
|
+
return await admin.limits.getUsage(args);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
public override getTool(): Tool {
|
|
27
|
+
return {
|
|
28
|
+
name: this.name,
|
|
29
|
+
description: 'Get current usage against configured rate limits for an account.',
|
|
30
|
+
inputSchema: {
|
|
31
|
+
type: 'object',
|
|
32
|
+
properties: {
|
|
33
|
+
accountId: {
|
|
34
|
+
type: 'string',
|
|
35
|
+
description: 'Account UUID',
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
required: ['accountId'],
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { LinkedApiAdmin, TSubscriptionSeat } from '@linkedapi/node';
|
|
2
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
import z from 'zod';
|
|
4
|
+
|
|
5
|
+
import { AdminTool } from '../utils/admin-tool.js';
|
|
6
|
+
|
|
7
|
+
export class AdminGetSeatsTool extends AdminTool<
|
|
8
|
+
Record<string, never>,
|
|
9
|
+
{ seats: Array<TSubscriptionSeat> }
|
|
10
|
+
> {
|
|
11
|
+
public readonly name = 'admin_get_seats';
|
|
12
|
+
protected readonly schema = z.object({});
|
|
13
|
+
|
|
14
|
+
public override async execute({
|
|
15
|
+
admin,
|
|
16
|
+
}: {
|
|
17
|
+
admin: LinkedApiAdmin;
|
|
18
|
+
args: Record<string, never>;
|
|
19
|
+
}): Promise<{ seats: Array<TSubscriptionSeat> }> {
|
|
20
|
+
return await admin.subscription.getSeats();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
public override getTool(): Tool {
|
|
24
|
+
return {
|
|
25
|
+
name: this.name,
|
|
26
|
+
description:
|
|
27
|
+
'Get active subscription seats. Each seat allows one connected LinkedIn account. Seat types: core (standard) and plus (includes Sales Navigator).',
|
|
28
|
+
inputSchema: {
|
|
29
|
+
type: 'object',
|
|
30
|
+
properties: {},
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|