@cesteral/linkedin-mcp 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/LICENSE.md +201 -0
- package/README.md +304 -0
- package/dist/auth/index.d.ts +3 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +3 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/linkedin-auth-adapter.d.ts +38 -0
- package/dist/auth/linkedin-auth-adapter.d.ts.map +1 -0
- package/dist/auth/linkedin-auth-adapter.js +110 -0
- package/dist/auth/linkedin-auth-adapter.js.map +1 -0
- package/dist/auth/linkedin-auth-strategy.d.ts +14 -0
- package/dist/auth/linkedin-auth-strategy.d.ts.map +1 -0
- package/dist/auth/linkedin-auth-strategy.js +50 -0
- package/dist/auth/linkedin-auth-strategy.js.map +1 -0
- package/dist/config/index.d.ts +100 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +37 -0
- package/dist/config/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/analytics-reporting-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/analytics-reporting-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/analytics-reporting-workflow.prompt.js +108 -0
- package/dist/mcp-server/prompts/definitions/analytics-reporting-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.js +177 -0
- package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.js +171 -0
- package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/creative-upload-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/creative-upload-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/creative-upload-workflow.prompt.js +109 -0
- package/dist/mcp-server/prompts/definitions/creative-upload-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.js +299 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.js +170 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.js +213 -0
- package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.js +151 -0
- package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/targeting-discovery-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/targeting-discovery-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/targeting-discovery-workflow.prompt.js +217 -0
- package/dist/mcp-server/prompts/definitions/targeting-discovery-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.js +98 -0
- package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/troubleshoot-entity.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/troubleshoot-entity.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/troubleshoot-entity.prompt.js +91 -0
- package/dist/mcp-server/prompts/definitions/troubleshoot-entity.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/index.d.ts +9 -0
- package/dist/mcp-server/prompts/index.d.ts.map +1 -0
- package/dist/mcp-server/prompts/index.js +97 -0
- package/dist/mcp-server/prompts/index.js.map +1 -0
- package/dist/mcp-server/resources/definitions/analytics-reference.resource.d.ts +3 -0
- package/dist/mcp-server/resources/definitions/analytics-reference.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/analytics-reference.resource.js +162 -0
- package/dist/mcp-server/resources/definitions/analytics-reference.resource.js.map +1 -0
- package/dist/mcp-server/resources/definitions/entity-examples.resource.d.ts +4 -0
- package/dist/mcp-server/resources/definitions/entity-examples.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/entity-examples.resource.js +164 -0
- package/dist/mcp-server/resources/definitions/entity-examples.resource.js.map +1 -0
- package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.d.ts +3 -0
- package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.js +144 -0
- package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.js.map +1 -0
- package/dist/mcp-server/resources/definitions/entity-schemas.resource.d.ts +4 -0
- package/dist/mcp-server/resources/definitions/entity-schemas.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/entity-schemas.resource.js +127 -0
- package/dist/mcp-server/resources/definitions/entity-schemas.resource.js.map +1 -0
- package/dist/mcp-server/resources/definitions/index.d.ts +8 -0
- package/dist/mcp-server/resources/definitions/index.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/index.js +54 -0
- package/dist/mcp-server/resources/definitions/index.js.map +1 -0
- package/dist/mcp-server/resources/definitions/targeting-reference.resource.d.ts +3 -0
- package/dist/mcp-server/resources/definitions/targeting-reference.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/targeting-reference.resource.js +122 -0
- package/dist/mcp-server/resources/definitions/targeting-reference.resource.js.map +1 -0
- package/dist/mcp-server/resources/index.d.ts +3 -0
- package/dist/mcp-server/resources/index.d.ts.map +1 -0
- package/dist/mcp-server/resources/index.js +2 -0
- package/dist/mcp-server/resources/index.js.map +1 -0
- package/dist/mcp-server/resources/types.d.ts +8 -0
- package/dist/mcp-server/resources/types.d.ts.map +1 -0
- package/dist/mcp-server/resources/types.js +2 -0
- package/dist/mcp-server/resources/types.js.map +1 -0
- package/dist/mcp-server/server.d.ts +5 -0
- package/dist/mcp-server/server.d.ts.map +1 -0
- package/dist/mcp-server/server.js +128 -0
- package/dist/mcp-server/server.js.map +1 -0
- package/dist/mcp-server/tools/definitions/adjust-bids.tool.d.ts +213 -0
- package/dist/mcp-server/tools/definitions/adjust-bids.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/adjust-bids.tool.js +174 -0
- package/dist/mcp-server/tools/definitions/adjust-bids.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.d.ts +128 -0
- package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.js +95 -0
- package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/bulk-update-entities.tool.d.ts +183 -0
- package/dist/mcp-server/tools/definitions/bulk-update-entities.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/bulk-update-entities.tool.js +122 -0
- package/dist/mcp-server/tools/definitions/bulk-update-entities.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/bulk-update-status.tool.d.ts +140 -0
- package/dist/mcp-server/tools/definitions/bulk-update-status.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/bulk-update-status.tool.js +109 -0
- package/dist/mcp-server/tools/definitions/bulk-update-status.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/create-entity.tool.d.ts +117 -0
- package/dist/mcp-server/tools/definitions/create-entity.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/create-entity.tool.js +98 -0
- package/dist/mcp-server/tools/definitions/create-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/delete-entity.tool.d.ts +93 -0
- package/dist/mcp-server/tools/definitions/delete-entity.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/delete-entity.tool.js +100 -0
- package/dist/mcp-server/tools/definitions/delete-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/duplicate-entity.tool.d.ts +95 -0
- package/dist/mcp-server/tools/definitions/duplicate-entity.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/duplicate-entity.tool.js +89 -0
- package/dist/mcp-server/tools/definitions/duplicate-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-ad-preview.tool.d.ts +75 -0
- package/dist/mcp-server/tools/definitions/get-ad-preview.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-ad-preview.tool.js +68 -0
- package/dist/mcp-server/tools/definitions/get-ad-preview.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-ad-previews.tool.d.ts +75 -0
- package/dist/mcp-server/tools/definitions/get-ad-previews.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-ad-previews.tool.js +71 -0
- package/dist/mcp-server/tools/definitions/get-ad-previews.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-analytics-breakdowns.tool.d.ts +223 -0
- package/dist/mcp-server/tools/definitions/get-analytics-breakdowns.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-analytics-breakdowns.tool.js +152 -0
- package/dist/mcp-server/tools/definitions/get-analytics-breakdowns.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-analytics.tool.d.ts +325 -0
- package/dist/mcp-server/tools/definitions/get-analytics.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-analytics.tool.js +154 -0
- package/dist/mcp-server/tools/definitions/get-analytics.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-delivery-forecast.tool.d.ts +95 -0
- package/dist/mcp-server/tools/definitions/get-delivery-forecast.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-delivery-forecast.tool.js +90 -0
- package/dist/mcp-server/tools/definitions/get-delivery-forecast.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-entity.tool.d.ts +75 -0
- package/dist/mcp-server/tools/definitions/get-entity.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-entity.tool.js +75 -0
- package/dist/mcp-server/tools/definitions/get-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-targeting-options.tool.d.ts +81 -0
- package/dist/mcp-server/tools/definitions/get-targeting-options.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-targeting-options.tool.js +76 -0
- package/dist/mcp-server/tools/definitions/get-targeting-options.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/index.d.ts +23 -0
- package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/index.js +69 -0
- package/dist/mcp-server/tools/definitions/index.js.map +1 -0
- package/dist/mcp-server/tools/definitions/list-ad-accounts.tool.d.ts +141 -0
- package/dist/mcp-server/tools/definitions/list-ad-accounts.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/list-ad-accounts.tool.js +84 -0
- package/dist/mcp-server/tools/definitions/list-ad-accounts.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/list-entities.tool.d.ts +165 -0
- package/dist/mcp-server/tools/definitions/list-entities.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/list-entities.tool.js +112 -0
- package/dist/mcp-server/tools/definitions/list-entities.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/search-targeting.tool.d.ts +102 -0
- package/dist/mcp-server/tools/definitions/search-targeting.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/search-targeting.tool.js +98 -0
- package/dist/mcp-server/tools/definitions/search-targeting.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/update-entity.tool.d.ts +104 -0
- package/dist/mcp-server/tools/definitions/update-entity.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/update-entity.tool.js +88 -0
- package/dist/mcp-server/tools/definitions/update-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/upload-image.tool.d.ts +75 -0
- package/dist/mcp-server/tools/definitions/upload-image.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/upload-image.tool.js +99 -0
- package/dist/mcp-server/tools/definitions/upload-image.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/upload-video.tool.d.ts +69 -0
- package/dist/mcp-server/tools/definitions/upload-video.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/upload-video.tool.js +98 -0
- package/dist/mcp-server/tools/definitions/upload-video.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/validate-entity.tool.d.ts +168 -0
- package/dist/mcp-server/tools/definitions/validate-entity.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/validate-entity.tool.js +200 -0
- package/dist/mcp-server/tools/definitions/validate-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/index.d.ts +2 -0
- package/dist/mcp-server/tools/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/index.js +2 -0
- package/dist/mcp-server/tools/index.js.map +1 -0
- package/dist/mcp-server/tools/utils/entity-mapping.d.ts +13 -0
- package/dist/mcp-server/tools/utils/entity-mapping.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/entity-mapping.js +68 -0
- package/dist/mcp-server/tools/utils/entity-mapping.js.map +1 -0
- package/dist/mcp-server/tools/utils/media-types.d.ts +12 -0
- package/dist/mcp-server/tools/utils/media-types.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/media-types.js +2 -0
- package/dist/mcp-server/tools/utils/media-types.js.map +1 -0
- package/dist/mcp-server/tools/utils/resolve-session.d.ts +4 -0
- package/dist/mcp-server/tools/utils/resolve-session.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/resolve-session.js +6 -0
- package/dist/mcp-server/tools/utils/resolve-session.js.map +1 -0
- package/dist/mcp-server/transports/streamable-http-transport.d.ts +49 -0
- package/dist/mcp-server/transports/streamable-http-transport.d.ts.map +1 -0
- package/dist/mcp-server/transports/streamable-http-transport.js +91 -0
- package/dist/mcp-server/transports/streamable-http-transport.js.map +1 -0
- package/dist/services/linkedin/linkedin-http-client.d.ts +20 -0
- package/dist/services/linkedin/linkedin-http-client.d.ts.map +1 -0
- package/dist/services/linkedin/linkedin-http-client.js +147 -0
- package/dist/services/linkedin/linkedin-http-client.js.map +1 -0
- package/dist/services/linkedin/linkedin-reporting-service.d.ts +26 -0
- package/dist/services/linkedin/linkedin-reporting-service.d.ts.map +1 -0
- package/dist/services/linkedin/linkedin-reporting-service.js +69 -0
- package/dist/services/linkedin/linkedin-reporting-service.js.map +1 -0
- package/dist/services/linkedin/linkedin-service.d.ts +84 -0
- package/dist/services/linkedin/linkedin-service.d.ts.map +1 -0
- package/dist/services/linkedin/linkedin-service.js +195 -0
- package/dist/services/linkedin/linkedin-service.js.map +1 -0
- package/dist/services/linkedin/types.d.ts +166 -0
- package/dist/services/linkedin/types.d.ts.map +1 -0
- package/dist/services/linkedin/types.js +31 -0
- package/dist/services/linkedin/types.js.map +1 -0
- package/dist/services/session-services.d.ts +18 -0
- package/dist/services/session-services.d.ts.map +1 -0
- package/dist/services/session-services.js +16 -0
- package/dist/services/session-services.js.map +1 -0
- package/dist/types-global/mcp.d.ts +2 -0
- package/dist/types-global/mcp.d.ts.map +1 -0
- package/dist/types-global/mcp.js +2 -0
- package/dist/types-global/mcp.js.map +1 -0
- package/dist/utils/errors/index.d.ts +2 -0
- package/dist/utils/errors/index.d.ts.map +1 -0
- package/dist/utils/errors/index.js +2 -0
- package/dist/utils/errors/index.js.map +1 -0
- package/dist/utils/platform.d.ts +3 -0
- package/dist/utils/platform.d.ts.map +1 -0
- package/dist/utils/platform.js +5 -0
- package/dist/utils/platform.js.map +1 -0
- package/dist/utils/security/rate-limiter.d.ts +3 -0
- package/dist/utils/security/rate-limiter.d.ts.map +1 -0
- package/dist/utils/security/rate-limiter.js +5 -0
- package/dist/utils/security/rate-limiter.js.map +1 -0
- package/dist/utils/telemetry/index.d.ts +2 -0
- package/dist/utils/telemetry/index.d.ts.map +1 -0
- package/dist/utils/telemetry/index.js +2 -0
- package/dist/utils/telemetry/index.js.map +1 -0
- package/dist/utils/telemetry/tracing.d.ts +3 -0
- package/dist/utils/telemetry/tracing.d.ts.map +1 -0
- package/dist/utils/telemetry/tracing.js +4 -0
- package/dist/utils/telemetry/tracing.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linkedin-auth-adapter.js","sourceRoot":"","sources":["../../src/auth/linkedin-auth-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Logger } from "pino";
|
|
2
|
+
import { BearerAuthStrategyBase, type BearerAdapterResult } from "@cesteral/shared";
|
|
3
|
+
export declare class LinkedInBearerAuthStrategy extends BearerAuthStrategyBase {
|
|
4
|
+
private readonly baseUrl;
|
|
5
|
+
private readonly apiVersion;
|
|
6
|
+
protected readonly authType = "linkedin-bearer";
|
|
7
|
+
protected readonly platformName = "LinkedIn";
|
|
8
|
+
constructor(baseUrl: string, apiVersion: string, logger?: Logger);
|
|
9
|
+
protected resolveRefreshBranch(headers: Record<string, string | string[] | undefined>): Promise<BearerAdapterResult | null>;
|
|
10
|
+
protected resolveAccessBranch(headers: Record<string, string | string[] | undefined>): Promise<BearerAdapterResult>;
|
|
11
|
+
protected getRefreshFingerprint(headers: Record<string, string | string[] | undefined>): string | undefined;
|
|
12
|
+
protected getTokenFingerprint(headers: Record<string, string | string[] | undefined>): string;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=linkedin-auth-strategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linkedin-auth-strategy.d.ts","sourceRoot":"","sources":["../../src/auth/linkedin-auth-strategy.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,EAAE,sBAAsB,EAAE,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AASpF,qBAAa,0BAA2B,SAAQ,sBAAsB;IAKlE,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAL7B,SAAS,CAAC,QAAQ,CAAC,QAAQ,qBAAqB;IAChD,SAAS,CAAC,QAAQ,CAAC,YAAY,cAAc;gBAG1B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EACnC,MAAM,CAAC,EAAE,MAAM;cAKD,oBAAoB,CAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GACrD,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;cAiBtB,mBAAmB,CACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GACrD,OAAO,CAAC,mBAAmB,CAAC;IAc/B,SAAS,CAAC,qBAAqB,CAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GACrD,MAAM,GAAG,SAAS;IAMrB,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,MAAM;CAI9F"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { BearerAuthStrategyBase } from "@cesteral/shared";
|
|
2
|
+
import { LinkedInAccessTokenAdapter, LinkedInRefreshTokenAdapter, parseLinkedInTokenFromHeaders, parseLinkedInRefreshCredentialsFromHeaders, getLinkedInCredentialFingerprint, } from "./linkedin-auth-adapter.js";
|
|
3
|
+
export class LinkedInBearerAuthStrategy extends BearerAuthStrategyBase {
|
|
4
|
+
baseUrl;
|
|
5
|
+
apiVersion;
|
|
6
|
+
authType = "linkedin-bearer";
|
|
7
|
+
platformName = "LinkedIn";
|
|
8
|
+
constructor(baseUrl, apiVersion, logger) {
|
|
9
|
+
super(logger);
|
|
10
|
+
this.baseUrl = baseUrl;
|
|
11
|
+
this.apiVersion = apiVersion;
|
|
12
|
+
}
|
|
13
|
+
async resolveRefreshBranch(headers) {
|
|
14
|
+
const refreshCreds = parseLinkedInRefreshCredentialsFromHeaders(headers);
|
|
15
|
+
if (!refreshCreds)
|
|
16
|
+
return null;
|
|
17
|
+
const adapter = new LinkedInRefreshTokenAdapter(refreshCreds, this.baseUrl, this.apiVersion);
|
|
18
|
+
await adapter.validate();
|
|
19
|
+
return {
|
|
20
|
+
adapter,
|
|
21
|
+
fingerprint: getLinkedInCredentialFingerprint(refreshCreds.clientId),
|
|
22
|
+
userId: adapter.personId,
|
|
23
|
+
authFlow: "refresh-token",
|
|
24
|
+
logContext: { personId: adapter.personId },
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
async resolveAccessBranch(headers) {
|
|
28
|
+
const token = parseLinkedInTokenFromHeaders(headers);
|
|
29
|
+
const adapter = new LinkedInAccessTokenAdapter(token, this.baseUrl, this.apiVersion);
|
|
30
|
+
await adapter.validate();
|
|
31
|
+
return {
|
|
32
|
+
adapter,
|
|
33
|
+
fingerprint: getLinkedInCredentialFingerprint(token),
|
|
34
|
+
userId: adapter.personId,
|
|
35
|
+
authFlow: "static-token",
|
|
36
|
+
logContext: { personId: adapter.personId },
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
getRefreshFingerprint(headers) {
|
|
40
|
+
const refreshCreds = parseLinkedInRefreshCredentialsFromHeaders(headers);
|
|
41
|
+
if (!refreshCreds)
|
|
42
|
+
return undefined;
|
|
43
|
+
return getLinkedInCredentialFingerprint(refreshCreds.clientId);
|
|
44
|
+
}
|
|
45
|
+
getTokenFingerprint(headers) {
|
|
46
|
+
const token = parseLinkedInTokenFromHeaders(headers);
|
|
47
|
+
return getLinkedInCredentialFingerprint(token);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=linkedin-auth-strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linkedin-auth-strategy.js","sourceRoot":"","sources":["../../src/auth/linkedin-auth-strategy.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,sBAAsB,EAA4B,MAAM,kBAAkB,CAAC;AACpF,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,6BAA6B,EAC7B,0CAA0C,EAC1C,gCAAgC,GACjC,MAAM,4BAA4B,CAAC;AAEpC,MAAM,OAAO,0BAA2B,SAAQ,sBAAsB;IAKjD;IACA;IALA,QAAQ,GAAG,iBAAiB,CAAC;IAC7B,YAAY,GAAG,UAAU,CAAC;IAE7C,YACmB,OAAe,EACf,UAAkB,EACnC,MAAe;QAEf,KAAK,CAAC,MAAM,CAAC,CAAC;QAJG,YAAO,GAAP,OAAO,CAAQ;QACf,eAAU,GAAV,UAAU,CAAQ;IAIrC,CAAC;IAES,KAAK,CAAC,oBAAoB,CAClC,OAAsD;QAEtD,MAAM,YAAY,GAAG,0CAA0C,CAAC,OAAO,CAAC,CAAC;QACzE,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC;QAE/B,MAAM,OAAO,GAAG,IAAI,2BAA2B,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7F,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;QAEzB,OAAO;YACL,OAAO;YAEP,WAAW,EAAE,gCAAgC,CAAC,YAAY,CAAC,QAAQ,CAAC;YACpE,MAAM,EAAE,OAAO,CAAC,QAAQ;YACxB,QAAQ,EAAE,eAAe;YACzB,UAAU,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE;SAC3C,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,mBAAmB,CACjC,OAAsD;QAEtD,MAAM,KAAK,GAAG,6BAA6B,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,IAAI,0BAA0B,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACrF,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;QAEzB,OAAO;YACL,OAAO;YACP,WAAW,EAAE,gCAAgC,CAAC,KAAK,CAAC;YACpD,MAAM,EAAE,OAAO,CAAC,QAAQ;YACxB,QAAQ,EAAE,cAAc;YACxB,UAAU,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE;SAC3C,CAAC;IACJ,CAAC;IAES,qBAAqB,CAC7B,OAAsD;QAEtD,MAAM,YAAY,GAAG,0CAA0C,CAAC,OAAO,CAAC,CAAC;QACzE,IAAI,CAAC,YAAY;YAAE,OAAO,SAAS,CAAC;QACpC,OAAO,gCAAgC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACjE,CAAC;IAES,mBAAmB,CAAC,OAAsD;QAClF,MAAM,KAAK,GAAG,6BAA6B,CAAC,OAAO,CAAC,CAAC;QACrD,OAAO,gCAAgC,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;CACF"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
declare const ConfigSchema: z.ZodObject<{
|
|
3
|
+
host: z.ZodDefault<z.ZodString>;
|
|
4
|
+
nodeEnv: z.ZodDefault<z.ZodEnum<["development", "production", "test"]>>;
|
|
5
|
+
mcpStatefulSessionTimeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
6
|
+
mcpAuthSecretKey: z.ZodOptional<z.ZodString>;
|
|
7
|
+
mcpAllowedOrigins: z.ZodOptional<z.ZodString>;
|
|
8
|
+
logLevel: z.ZodDefault<z.ZodEnum<["debug", "info", "notice", "warning", "error"]>>;
|
|
9
|
+
mcpLogLevel: z.ZodDefault<z.ZodEnum<["debug", "info", "notice", "warning", "error"]>>;
|
|
10
|
+
otelEnabled: z.ZodDefault<z.ZodBoolean>;
|
|
11
|
+
otelExporterOtlpTracesEndpoint: z.ZodOptional<z.ZodString>;
|
|
12
|
+
otelExporterOtlpMetricsEndpoint: z.ZodOptional<z.ZodString>;
|
|
13
|
+
gcsBucketName: z.ZodOptional<z.ZodString>;
|
|
14
|
+
} & {
|
|
15
|
+
serviceName: z.ZodDefault<z.ZodString>;
|
|
16
|
+
port: z.ZodDefault<z.ZodNumber>;
|
|
17
|
+
otelServiceName: z.ZodDefault<z.ZodString>;
|
|
18
|
+
mcpAuthMode: z.ZodDefault<z.ZodEnum<["linkedin-bearer", "jwt", "none"]>>;
|
|
19
|
+
linkedinApiBaseUrl: z.ZodDefault<z.ZodString>;
|
|
20
|
+
linkedinApiVersion: z.ZodDefault<z.ZodString>;
|
|
21
|
+
linkedinRateLimitPerMinute: z.ZodDefault<z.ZodNumber>;
|
|
22
|
+
linkedinAccessToken: z.ZodOptional<z.ZodString>;
|
|
23
|
+
linkedinClientId: z.ZodOptional<z.ZodString>;
|
|
24
|
+
linkedinClientSecret: z.ZodOptional<z.ZodString>;
|
|
25
|
+
linkedinRefreshToken: z.ZodOptional<z.ZodString>;
|
|
26
|
+
}, "strip", z.ZodTypeAny, {
|
|
27
|
+
serviceName: string;
|
|
28
|
+
port: number;
|
|
29
|
+
otelServiceName: string;
|
|
30
|
+
mcpAuthMode: "linkedin-bearer" | "jwt" | "none";
|
|
31
|
+
linkedinApiBaseUrl: string;
|
|
32
|
+
linkedinApiVersion: string;
|
|
33
|
+
linkedinRateLimitPerMinute: number;
|
|
34
|
+
host: string;
|
|
35
|
+
nodeEnv: "development" | "production" | "test";
|
|
36
|
+
mcpStatefulSessionTimeoutMs: number;
|
|
37
|
+
logLevel: "debug" | "info" | "notice" | "warning" | "error";
|
|
38
|
+
mcpLogLevel: "debug" | "info" | "notice" | "warning" | "error";
|
|
39
|
+
otelEnabled: boolean;
|
|
40
|
+
linkedinAccessToken?: string | undefined;
|
|
41
|
+
linkedinClientId?: string | undefined;
|
|
42
|
+
linkedinClientSecret?: string | undefined;
|
|
43
|
+
linkedinRefreshToken?: string | undefined;
|
|
44
|
+
mcpAuthSecretKey?: string | undefined;
|
|
45
|
+
mcpAllowedOrigins?: string | undefined;
|
|
46
|
+
otelExporterOtlpTracesEndpoint?: string | undefined;
|
|
47
|
+
otelExporterOtlpMetricsEndpoint?: string | undefined;
|
|
48
|
+
gcsBucketName?: string | undefined;
|
|
49
|
+
}, {
|
|
50
|
+
serviceName?: string | undefined;
|
|
51
|
+
port?: number | undefined;
|
|
52
|
+
otelServiceName?: string | undefined;
|
|
53
|
+
mcpAuthMode?: "linkedin-bearer" | "jwt" | "none" | undefined;
|
|
54
|
+
linkedinApiBaseUrl?: string | undefined;
|
|
55
|
+
linkedinApiVersion?: string | undefined;
|
|
56
|
+
linkedinRateLimitPerMinute?: number | undefined;
|
|
57
|
+
linkedinAccessToken?: string | undefined;
|
|
58
|
+
linkedinClientId?: string | undefined;
|
|
59
|
+
linkedinClientSecret?: string | undefined;
|
|
60
|
+
linkedinRefreshToken?: string | undefined;
|
|
61
|
+
host?: string | undefined;
|
|
62
|
+
nodeEnv?: "development" | "production" | "test" | undefined;
|
|
63
|
+
mcpStatefulSessionTimeoutMs?: number | undefined;
|
|
64
|
+
mcpAuthSecretKey?: string | undefined;
|
|
65
|
+
mcpAllowedOrigins?: string | undefined;
|
|
66
|
+
logLevel?: "debug" | "info" | "notice" | "warning" | "error" | undefined;
|
|
67
|
+
mcpLogLevel?: "debug" | "info" | "notice" | "warning" | "error" | undefined;
|
|
68
|
+
otelEnabled?: boolean | undefined;
|
|
69
|
+
otelExporterOtlpTracesEndpoint?: string | undefined;
|
|
70
|
+
otelExporterOtlpMetricsEndpoint?: string | undefined;
|
|
71
|
+
gcsBucketName?: string | undefined;
|
|
72
|
+
}>;
|
|
73
|
+
export type AppConfig = z.infer<typeof ConfigSchema>;
|
|
74
|
+
export declare function parseConfig(): AppConfig;
|
|
75
|
+
export declare const mcpConfig: {
|
|
76
|
+
serviceName: string;
|
|
77
|
+
port: number;
|
|
78
|
+
otelServiceName: string;
|
|
79
|
+
mcpAuthMode: "linkedin-bearer" | "jwt" | "none";
|
|
80
|
+
linkedinApiBaseUrl: string;
|
|
81
|
+
linkedinApiVersion: string;
|
|
82
|
+
linkedinRateLimitPerMinute: number;
|
|
83
|
+
host: string;
|
|
84
|
+
nodeEnv: "development" | "production" | "test";
|
|
85
|
+
mcpStatefulSessionTimeoutMs: number;
|
|
86
|
+
logLevel: "debug" | "info" | "notice" | "warning" | "error";
|
|
87
|
+
mcpLogLevel: "debug" | "info" | "notice" | "warning" | "error";
|
|
88
|
+
otelEnabled: boolean;
|
|
89
|
+
linkedinAccessToken?: string | undefined;
|
|
90
|
+
linkedinClientId?: string | undefined;
|
|
91
|
+
linkedinClientSecret?: string | undefined;
|
|
92
|
+
linkedinRefreshToken?: string | undefined;
|
|
93
|
+
mcpAuthSecretKey?: string | undefined;
|
|
94
|
+
mcpAllowedOrigins?: string | undefined;
|
|
95
|
+
otelExporterOtlpTracesEndpoint?: string | undefined;
|
|
96
|
+
otelExporterOtlpMetricsEndpoint?: string | undefined;
|
|
97
|
+
gcsBucketName?: string | undefined;
|
|
98
|
+
};
|
|
99
|
+
export {};
|
|
100
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAYxB,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwBhB,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAErD,wBAAgB,WAAW,IAAI,SAAS,CA4BvC;AAED,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;CAAgB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { loadDotEnv, BaseConfigSchema, getBaseEnvConfig, parseConfigWithSchema, getDefaultHost, } from "@cesteral/shared";
|
|
3
|
+
loadDotEnv();
|
|
4
|
+
const ConfigSchema = BaseConfigSchema.extend({
|
|
5
|
+
serviceName: z.string().default("linkedin-mcp"),
|
|
6
|
+
port: z.number().int().min(1).max(65535).default(3006),
|
|
7
|
+
otelServiceName: z.string().default("linkedin-mcp"),
|
|
8
|
+
mcpAuthMode: z.enum(["linkedin-bearer", "jwt", "none"]).default("linkedin-bearer"),
|
|
9
|
+
linkedinApiBaseUrl: z.string().url().default("https://api.linkedin.com"),
|
|
10
|
+
linkedinApiVersion: z.string().default("202409"),
|
|
11
|
+
linkedinRateLimitPerMinute: z.number().default(10),
|
|
12
|
+
linkedinAccessToken: z.string().optional(),
|
|
13
|
+
linkedinClientId: z.string().optional(),
|
|
14
|
+
linkedinClientSecret: z.string().optional(),
|
|
15
|
+
linkedinRefreshToken: z.string().optional(),
|
|
16
|
+
});
|
|
17
|
+
export function parseConfig() {
|
|
18
|
+
const defaultHost = getDefaultHost();
|
|
19
|
+
const rawConfig = {
|
|
20
|
+
...getBaseEnvConfig(defaultHost),
|
|
21
|
+
serviceName: process.env.SERVICE_NAME,
|
|
22
|
+
...(process.env.LINKEDIN_MCP_PORT ? { port: Number(process.env.LINKEDIN_MCP_PORT) } : {}),
|
|
23
|
+
host: process.env.LINKEDIN_MCP_HOST || defaultHost,
|
|
24
|
+
linkedinApiBaseUrl: process.env.LINKEDIN_API_BASE_URL,
|
|
25
|
+
linkedinApiVersion: process.env.LINKEDIN_API_VERSION,
|
|
26
|
+
linkedinRateLimitPerMinute: process.env.LINKEDIN_RATE_LIMIT_PER_MINUTE
|
|
27
|
+
? Number(process.env.LINKEDIN_RATE_LIMIT_PER_MINUTE)
|
|
28
|
+
: undefined,
|
|
29
|
+
linkedinAccessToken: process.env.LINKEDIN_ACCESS_TOKEN,
|
|
30
|
+
linkedinClientId: process.env.LINKEDIN_CLIENT_ID,
|
|
31
|
+
linkedinClientSecret: process.env.LINKEDIN_CLIENT_SECRET,
|
|
32
|
+
linkedinRefreshToken: process.env.LINKEDIN_REFRESH_TOKEN,
|
|
33
|
+
};
|
|
34
|
+
return parseConfigWithSchema(ConfigSchema, rawConfig);
|
|
35
|
+
}
|
|
36
|
+
export const mcpConfig = parseConfig();
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAG1B,UAAU,EAAE,CAAC;AAEb,MAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAC;IAE3C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC;IAC/C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IACtD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC;IAGnD,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC;IAGlF,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,0BAA0B,CAAC;IACxE,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;IAIhD,0BAA0B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAGlD,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAG1C,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACvC,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3C,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5C,CAAC,CAAC;AAIH,MAAM,UAAU,WAAW;IACzB,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,MAAM,SAAS,GAA4B;QACzC,GAAG,gBAAgB,CAAC,WAAW,CAAC;QAGhC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACrC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzF,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,WAAW;QAGlD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;QACrD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;QACpD,0BAA0B,EAAE,OAAO,CAAC,GAAG,CAAC,8BAA8B;YACpE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC;YACpD,CAAC,CAAC,SAAS;QAGb,mBAAmB,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;QAGtD,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAChD,oBAAoB,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB;QACxD,oBAAoB,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB;KACzD,CAAC;IAEF,OAAO,qBAAqB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,EAAE,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { mcpConfig } from "./config/index.js";
|
|
3
|
+
import { createMcpServer, runStdioServer } from "./mcp-server/server.js";
|
|
4
|
+
import { startHttpServer } from "./mcp-server/transports/streamable-http-transport.js";
|
|
5
|
+
import { initializeOpenTelemetry, otelLogMixin } from "@cesteral/shared";
|
|
6
|
+
import { LinkedInAccessTokenAdapter } from "./auth/linkedin-auth-adapter.js";
|
|
7
|
+
import { detectTransportMode, createServerLogger, bootstrapMcpServer } from "@cesteral/shared";
|
|
8
|
+
import { createSessionServices, sessionServiceStore } from "./services/session-services.js";
|
|
9
|
+
import { rateLimiter } from "./utils/platform.js";
|
|
10
|
+
const transportMode = detectTransportMode();
|
|
11
|
+
const logger = createServerLogger("linkedin-mcp", transportMode, otelLogMixin());
|
|
12
|
+
async function setupStdioCredentials(sessionId) {
|
|
13
|
+
const accessToken = mcpConfig.linkedinAccessToken;
|
|
14
|
+
if (!accessToken) {
|
|
15
|
+
logger.warn("No LinkedIn credentials found in env vars. " + "Set LINKEDIN_ACCESS_TOKEN for stdio mode.");
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
const authAdapter = new LinkedInAccessTokenAdapter(accessToken, mcpConfig.linkedinApiBaseUrl, mcpConfig.linkedinApiVersion);
|
|
19
|
+
await authAdapter.validate();
|
|
20
|
+
const services = createSessionServices(authAdapter, { baseUrl: mcpConfig.linkedinApiBaseUrl, apiVersion: mcpConfig.linkedinApiVersion }, logger, rateLimiter);
|
|
21
|
+
sessionServiceStore.set(sessionId, services);
|
|
22
|
+
logger.info("Stdio session services created successfully");
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
bootstrapMcpServer({
|
|
26
|
+
serviceName: "linkedin-mcp",
|
|
27
|
+
config: mcpConfig,
|
|
28
|
+
logger,
|
|
29
|
+
transportMode,
|
|
30
|
+
initOtel: initializeOpenTelemetry,
|
|
31
|
+
setupStdioSession: setupStdioCredentials,
|
|
32
|
+
createMcpServer,
|
|
33
|
+
runStdio: runStdioServer,
|
|
34
|
+
startHttp: startHttpServer,
|
|
35
|
+
onShutdown: () => rateLimiter.destroy(),
|
|
36
|
+
}).catch((err) => {
|
|
37
|
+
logger.fatal({ err }, "Failed to start linkedin-mcp");
|
|
38
|
+
process.exit(1);
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,sDAAsD,CAAC;AACvF,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC5F,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,aAAa,GAAG,mBAAmB,EAAE,CAAC;AAC5C,MAAM,MAAM,GAAG,kBAAkB,CAAC,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC;AAMjF,KAAK,UAAU,qBAAqB,CAAC,SAAiB;IACpD,MAAM,WAAW,GAAG,SAAS,CAAC,mBAAmB,CAAC;IAElD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CACT,6CAA6C,GAAG,2CAA2C,CAC5F,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,0BAA0B,CAChD,WAAW,EACX,SAAS,CAAC,kBAAkB,EAC5B,SAAS,CAAC,kBAAkB,CAC7B,CAAC;IAGF,MAAM,WAAW,CAAC,QAAQ,EAAE,CAAC;IAE7B,MAAM,QAAQ,GAAG,qBAAqB,CACpC,WAAW,EACX,EAAE,OAAO,EAAE,SAAS,CAAC,kBAAkB,EAAE,UAAU,EAAE,SAAS,CAAC,kBAAkB,EAAE,EACnF,MAAM,EACN,WAAW,CACZ,CAAC;IAEF,mBAAmB,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC7C,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC3D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kBAAkB,CAAC;IACjB,WAAW,EAAE,cAAc;IAC3B,MAAM,EAAE,SAAS;IACjB,MAAM;IACN,aAAa;IACb,QAAQ,EAAE,uBAAuB;IACjC,iBAAiB,EAAE,qBAAqB;IACxC,eAAe;IACf,QAAQ,EAAE,cAAc;IACxB,SAAS,EAAE,eAAe;IAC1B,UAAU,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE;CACxC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACf,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,8BAA8B,CAAC,CAAC;IACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Prompt } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
export declare const linkedInAnalyticsReportingWorkflowPrompt: Prompt;
|
|
3
|
+
export declare function getLinkedInAnalyticsReportingWorkflowMessage(args?: Record<string, string>): string;
|
|
4
|
+
//# sourceMappingURL=analytics-reporting-workflow.prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics-reporting-workflow.prompt.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/analytics-reporting-workflow.prompt.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAEjE,eAAO,MAAM,wCAAwC,EAAE,MAiBtD,CAAC;AAEF,wBAAgB,4CAA4C,CAC1D,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,MAAM,CA2FR"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
export const linkedInAnalyticsReportingWorkflowPrompt = {
|
|
2
|
+
name: "linkedin_analytics_reporting_workflow",
|
|
3
|
+
description: "Guide for querying LinkedIn Ads analytics with pivots, time granularities, and breakdowns",
|
|
4
|
+
arguments: [
|
|
5
|
+
{
|
|
6
|
+
name: "adAccountUrn",
|
|
7
|
+
description: "LinkedIn Ad Account URN (e.g., urn:li:sponsoredAccount:123)",
|
|
8
|
+
required: true,
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
name: "pivot",
|
|
12
|
+
description: "Reporting pivot: CAMPAIGN, CAMPAIGN_GROUP, CREATIVE, CONVERSION (default: CAMPAIGN)",
|
|
13
|
+
required: false,
|
|
14
|
+
},
|
|
15
|
+
],
|
|
16
|
+
};
|
|
17
|
+
export function getLinkedInAnalyticsReportingWorkflowMessage(args) {
|
|
18
|
+
const adAccountUrn = args?.adAccountUrn || "{adAccountUrn}";
|
|
19
|
+
const pivot = args?.pivot || "CAMPAIGN";
|
|
20
|
+
return `# LinkedIn Analytics Reporting Workflow
|
|
21
|
+
|
|
22
|
+
Ad Account: \`${adAccountUrn}\`
|
|
23
|
+
Pivot: \`${pivot}\`
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Step 1: Basic Performance Query
|
|
28
|
+
|
|
29
|
+
\`\`\`json
|
|
30
|
+
linkedin_get_analytics({
|
|
31
|
+
"adAccountUrn": "${adAccountUrn}",
|
|
32
|
+
"startDate": "2026-02-01",
|
|
33
|
+
"endDate": "2026-03-07",
|
|
34
|
+
"metrics": ["impressions", "clicks", "costInUsd", "conversions", "costPerConversion"],
|
|
35
|
+
"pivot": "${pivot}",
|
|
36
|
+
"timeGranularity": "ALL"
|
|
37
|
+
})
|
|
38
|
+
\`\`\`
|
|
39
|
+
|
|
40
|
+
## Step 2: Daily Trend Analysis
|
|
41
|
+
|
|
42
|
+
\`\`\`json
|
|
43
|
+
linkedin_get_analytics({
|
|
44
|
+
"adAccountUrn": "${adAccountUrn}",
|
|
45
|
+
"startDate": "2026-02-01",
|
|
46
|
+
"endDate": "2026-03-07",
|
|
47
|
+
"metrics": ["impressions", "clicks", "costInUsd"],
|
|
48
|
+
"pivot": "${pivot}",
|
|
49
|
+
"timeGranularity": "DAILY"
|
|
50
|
+
})
|
|
51
|
+
\`\`\`
|
|
52
|
+
|
|
53
|
+
## Step 3: Add Breakdowns
|
|
54
|
+
|
|
55
|
+
\`\`\`json
|
|
56
|
+
linkedin_get_analytics_breakdowns({
|
|
57
|
+
"adAccountUrn": "${adAccountUrn}",
|
|
58
|
+
"startDate": "2026-02-01",
|
|
59
|
+
"endDate": "2026-03-07",
|
|
60
|
+
"pivots": ["MEMBER_COMPANY_SIZE", "MEMBER_SENIORITY"]
|
|
61
|
+
})
|
|
62
|
+
\`\`\`
|
|
63
|
+
|
|
64
|
+
## Step 4: Conversion Performance
|
|
65
|
+
|
|
66
|
+
\`\`\`json
|
|
67
|
+
linkedin_get_analytics({
|
|
68
|
+
"adAccountUrn": "${adAccountUrn}",
|
|
69
|
+
"startDate": "2026-02-01",
|
|
70
|
+
"endDate": "2026-03-07",
|
|
71
|
+
"metrics": ["conversions", "costPerConversion", "conversionValueInLocalCurrency"],
|
|
72
|
+
"pivot": "${pivot}",
|
|
73
|
+
"timeGranularity": "MONTHLY"
|
|
74
|
+
})
|
|
75
|
+
\`\`\`
|
|
76
|
+
|
|
77
|
+
## Resource References
|
|
78
|
+
|
|
79
|
+
- Fetch \`analytics-reference://linkedin\` for full metrics and pivot list
|
|
80
|
+
- Fetch \`entity-hierarchy://linkedin/all\` for entity relationships
|
|
81
|
+
|
|
82
|
+
## Available Pivots
|
|
83
|
+
|
|
84
|
+
| Pivot | Description |
|
|
85
|
+
|-------|-------------|
|
|
86
|
+
| \`CAMPAIGN\` | Per campaign |
|
|
87
|
+
| \`CAMPAIGN_GROUP\` | Per campaign group |
|
|
88
|
+
| \`CREATIVE\` | Per creative |
|
|
89
|
+
| \`CONVERSION\` | Per conversion rule |
|
|
90
|
+
| \`MEMBER_COMPANY_SIZE\` | By company size |
|
|
91
|
+
| \`MEMBER_SENIORITY\` | By seniority level |
|
|
92
|
+
| \`MEMBER_INDUSTRY\` | By industry |
|
|
93
|
+
| \`MEMBER_GEO_COUNTRY\` | By country |
|
|
94
|
+
|
|
95
|
+
## Available Time Granularities
|
|
96
|
+
|
|
97
|
+
\`ALL\` (totals), \`DAILY\`, \`MONTHLY\`, \`YEARLY\`
|
|
98
|
+
|
|
99
|
+
## Tips
|
|
100
|
+
|
|
101
|
+
- Data may lag up to **24-48 hours**
|
|
102
|
+
- Maximum date range is **365 days**
|
|
103
|
+
- Use \`timeGranularity: "DAILY"\` for trend analysis
|
|
104
|
+
- Combine pivots with breakdowns for deeper insight
|
|
105
|
+
- \`costInUsd\` is always in USD regardless of account currency
|
|
106
|
+
`;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=analytics-reporting-workflow.prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics-reporting-workflow.prompt.js","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/analytics-reporting-workflow.prompt.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,wCAAwC,GAAW;IAC9D,IAAI,EAAE,uCAAuC;IAC7C,WAAW,EACT,2FAA2F;IAC7F,SAAS,EAAE;QACT;YACE,IAAI,EAAE,cAAc;YACpB,WAAW,EAAE,6DAA6D;YAC1E,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,OAAO;YACb,WAAW,EACT,qFAAqF;YACvF,QAAQ,EAAE,KAAK;SAChB;KACF;CACF,CAAC;AAEF,MAAM,UAAU,4CAA4C,CAC1D,IAA6B;IAE7B,MAAM,YAAY,GAAG,IAAI,EAAE,YAAY,IAAI,gBAAgB,CAAC;IAC5D,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,UAAU,CAAC;IAExC,OAAO;;gBAEO,YAAY;WACjB,KAAK;;;;;;;;qBAQK,YAAY;;;;cAInB,KAAK;;;;;;;;;qBASE,YAAY;;;;cAInB,KAAK;;;;;;;;;qBASE,YAAY;;;;;;;;;;;qBAWZ,YAAY;;;;cAInB,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkClB,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Prompt } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
export declare const linkedInBulkOperationsWorkflowPrompt: Prompt;
|
|
3
|
+
export declare function getLinkedInBulkOperationsWorkflowMessage(args?: Record<string, string>): string;
|
|
4
|
+
//# sourceMappingURL=bulk-operations-workflow.prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulk-operations-workflow.prompt.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAEjE,eAAO,MAAM,oCAAoC,EAAE,MAgBlD,CAAC;AAEF,wBAAgB,wCAAwC,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAkK9F"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
export const linkedInBulkOperationsWorkflowPrompt = {
|
|
2
|
+
name: "linkedin_bulk_operations_workflow",
|
|
3
|
+
description: "Guide for performing bulk create, update, and status operations on LinkedIn Ads entities",
|
|
4
|
+
arguments: [
|
|
5
|
+
{
|
|
6
|
+
name: "adAccountUrn",
|
|
7
|
+
description: "LinkedIn Ad Account URN (e.g., urn:li:sponsoredAccount:123456789)",
|
|
8
|
+
required: true,
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
name: "operation",
|
|
12
|
+
description: "Operation type: create, update, or status (default: update)",
|
|
13
|
+
required: false,
|
|
14
|
+
},
|
|
15
|
+
],
|
|
16
|
+
};
|
|
17
|
+
export function getLinkedInBulkOperationsWorkflowMessage(args) {
|
|
18
|
+
const adAccountUrn = args?.adAccountUrn || "{adAccountUrn}";
|
|
19
|
+
const operation = args?.operation ?? "update";
|
|
20
|
+
return `# LinkedIn Bulk Operations Workflow
|
|
21
|
+
|
|
22
|
+
## Ad Account: \`${adAccountUrn}\`
|
|
23
|
+
|
|
24
|
+
## Overview
|
|
25
|
+
|
|
26
|
+
| Tool | Max Items | Description |
|
|
27
|
+
|------|-----------|-------------|
|
|
28
|
+
| \`linkedin_bulk_create_entities\` | 50 | Create multiple entities at once |
|
|
29
|
+
| \`linkedin_bulk_update_entities\` | 50 | Update multiple entities with custom data |
|
|
30
|
+
| \`linkedin_bulk_update_status\` | 50 | Change status for multiple entities |
|
|
31
|
+
| \`linkedin_adjust_bids\` | 50 | Batch adjust campaign bid amounts |
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
${operation === "create"
|
|
35
|
+
? `
|
|
36
|
+
## Bulk Create Workflow
|
|
37
|
+
|
|
38
|
+
### Step 1: Validate a single entity first
|
|
39
|
+
\`\`\`json
|
|
40
|
+
linkedin_validate_entity({
|
|
41
|
+
"entityType": "campaign",
|
|
42
|
+
"mode": "create",
|
|
43
|
+
"data": {
|
|
44
|
+
"name": "Campaign Template",
|
|
45
|
+
"campaignGroup": "urn:li:sponsoredCampaignGroup:987654321",
|
|
46
|
+
"account": "${adAccountUrn}",
|
|
47
|
+
"type": "SPONSORED_UPDATES",
|
|
48
|
+
"objectiveType": "BRAND_AWARENESS",
|
|
49
|
+
"status": "DRAFT"
|
|
50
|
+
}
|
|
51
|
+
})
|
|
52
|
+
\`\`\`
|
|
53
|
+
|
|
54
|
+
### Step 2: Create multiple campaigns
|
|
55
|
+
\`\`\`json
|
|
56
|
+
linkedin_bulk_create_entities({
|
|
57
|
+
"entityType": "campaign",
|
|
58
|
+
"items": [
|
|
59
|
+
{
|
|
60
|
+
"name": "Campaign A - US Market",
|
|
61
|
+
"campaignGroup": "urn:li:sponsoredCampaignGroup:987654321",
|
|
62
|
+
"account": "${adAccountUrn}",
|
|
63
|
+
"type": "SPONSORED_UPDATES",
|
|
64
|
+
"objectiveType": "BRAND_AWARENESS",
|
|
65
|
+
"status": "DRAFT",
|
|
66
|
+
"dailyBudget": { "amount": "100.00", "currencyCode": "USD" }
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"name": "Campaign B - UK Market",
|
|
70
|
+
"campaignGroup": "urn:li:sponsoredCampaignGroup:987654321",
|
|
71
|
+
"account": "${adAccountUrn}",
|
|
72
|
+
"type": "SPONSORED_UPDATES",
|
|
73
|
+
"objectiveType": "WEBSITE_TRAFFIC",
|
|
74
|
+
"status": "DRAFT",
|
|
75
|
+
"dailyBudget": { "amount": "75.00", "currencyCode": "GBP" }
|
|
76
|
+
}
|
|
77
|
+
]
|
|
78
|
+
})
|
|
79
|
+
\`\`\`
|
|
80
|
+
|
|
81
|
+
### Step 3: Verify created entities
|
|
82
|
+
\`\`\`json
|
|
83
|
+
linkedin_list_entities({
|
|
84
|
+
"entityType": "campaign",
|
|
85
|
+
"adAccountUrn": "${adAccountUrn}",
|
|
86
|
+
"count": 50
|
|
87
|
+
})
|
|
88
|
+
\`\`\`
|
|
89
|
+
`
|
|
90
|
+
: `
|
|
91
|
+
## Bulk Update Workflow
|
|
92
|
+
|
|
93
|
+
### Step 1: List entities to update
|
|
94
|
+
\`\`\`json
|
|
95
|
+
linkedin_list_entities({
|
|
96
|
+
"entityType": "campaign",
|
|
97
|
+
"adAccountUrn": "${adAccountUrn}",
|
|
98
|
+
"count": 50
|
|
99
|
+
})
|
|
100
|
+
\`\`\`
|
|
101
|
+
|
|
102
|
+
### Step 2: Bulk update budgets
|
|
103
|
+
\`\`\`json
|
|
104
|
+
linkedin_bulk_update_entities({
|
|
105
|
+
"entityType": "campaign",
|
|
106
|
+
"items": [
|
|
107
|
+
{
|
|
108
|
+
"entityUrn": "urn:li:sponsoredCampaign:111111111",
|
|
109
|
+
"data": { "dailyBudget": { "amount": "150.00", "currencyCode": "USD" } }
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"entityUrn": "urn:li:sponsoredCampaign:222222222",
|
|
113
|
+
"data": { "dailyBudget": { "amount": "200.00", "currencyCode": "USD" } }
|
|
114
|
+
}
|
|
115
|
+
]
|
|
116
|
+
})
|
|
117
|
+
\`\`\`
|
|
118
|
+
|
|
119
|
+
### Step 3: Bulk pause campaigns
|
|
120
|
+
\`\`\`json
|
|
121
|
+
linkedin_bulk_update_status({
|
|
122
|
+
"entityType": "campaign",
|
|
123
|
+
"entityUrns": [
|
|
124
|
+
"urn:li:sponsoredCampaign:111111111",
|
|
125
|
+
"urn:li:sponsoredCampaign:222222222"
|
|
126
|
+
],
|
|
127
|
+
"status": "PAUSED"
|
|
128
|
+
})
|
|
129
|
+
\`\`\`
|
|
130
|
+
`}
|
|
131
|
+
|
|
132
|
+
## Bulk Bid Adjustment
|
|
133
|
+
|
|
134
|
+
\`\`\`json
|
|
135
|
+
linkedin_adjust_bids({
|
|
136
|
+
"adjustments": [
|
|
137
|
+
{
|
|
138
|
+
"campaignUrn": "urn:li:sponsoredCampaign:111111111",
|
|
139
|
+
"amount": "15.00",
|
|
140
|
+
"currencyCode": "USD"
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"campaignUrn": "urn:li:sponsoredCampaign:222222222",
|
|
144
|
+
"amount": "10.00",
|
|
145
|
+
"currencyCode": "USD"
|
|
146
|
+
}
|
|
147
|
+
],
|
|
148
|
+
"reason": "Optimize bids based on performance analysis"
|
|
149
|
+
})
|
|
150
|
+
\`\`\`
|
|
151
|
+
|
|
152
|
+
## Error Handling
|
|
153
|
+
|
|
154
|
+
Bulk operations use partial success — always check the results array:
|
|
155
|
+
|
|
156
|
+
\`\`\`
|
|
157
|
+
{
|
|
158
|
+
"results": [
|
|
159
|
+
{ "entityUrn": "urn:li:...:111", "success": true },
|
|
160
|
+
{ "entityUrn": "urn:li:...:222", "success": false, "error": "Entity not found" }
|
|
161
|
+
],
|
|
162
|
+
"successCount": 1,
|
|
163
|
+
"failureCount": 1
|
|
164
|
+
}
|
|
165
|
+
\`\`\`
|
|
166
|
+
|
|
167
|
+
For failed items, you can retry individually using the single-entity tools.
|
|
168
|
+
|
|
169
|
+
## Rate Limits
|
|
170
|
+
|
|
171
|
+
- Read operations: 1 token per request
|
|
172
|
+
- Write operations: 3 tokens per request
|
|
173
|
+
- Rate limit: 100 requests/minute per API key
|
|
174
|
+
- Bulk operations use concurrency of 5 to stay within limits
|
|
175
|
+
`;
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=bulk-operations-workflow.prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulk-operations-workflow.prompt.js","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,oCAAoC,GAAW;IAC1D,IAAI,EAAE,mCAAmC;IACzC,WAAW,EACT,0FAA0F;IAC5F,SAAS,EAAE;QACT;YACE,IAAI,EAAE,cAAc;YACpB,WAAW,EAAE,mEAAmE;YAChF,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,6DAA6D;YAC1E,QAAQ,EAAE,KAAK;SAChB;KACF;CACF,CAAC;AAEF,MAAM,UAAU,wCAAwC,CAAC,IAA6B;IACpF,MAAM,YAAY,GAAG,IAAI,EAAE,YAAY,IAAI,gBAAgB,CAAC;IAC5D,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,QAAQ,CAAC;IAE9C,OAAO;;mBAEU,YAAY;;;;;;;;;;;;EAa7B,SAAS,KAAK,QAAQ;QACpB,CAAC,CAAC;;;;;;;;;;;kBAWY,YAAY;;;;;;;;;;;;;;;;oBAgBV,YAAY;;;;;;;;;oBASZ,YAAY;;;;;;;;;;;;;;qBAcX,YAAY;;;;CAIhC;QACG,CAAC,CAAC;;;;;;;qBAOe,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6CC,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Prompt } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
export declare const linkedInCampaignSetupWorkflowPrompt: Prompt;
|
|
3
|
+
export declare function getLinkedInCampaignSetupWorkflowMessage(args?: Record<string, string>): string;
|
|
4
|
+
//# sourceMappingURL=campaign-setup-workflow.prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaign-setup-workflow.prompt.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAEjE,eAAO,MAAM,mCAAmC,EAAE,MAgBjD,CAAC;AAEF,wBAAgB,uCAAuC,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CA4J7F"}
|