Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@linkedapi/mcp",
"version": "2.3.15",
"version": "2.3.16",
"description": "MCP server that lets AI assistants control LinkedIn accounts and retrieve real-time data.",
"main": "dist/index.js",
"bin": {
Expand Down
2 changes: 1 addition & 1 deletion src/tools/fetch-post.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ export class FetchPostTool extends OperationTool<TFetchPostParams, unknown> {
return {
name: this.name,
description:
'Open a LinkedIn post and retrieve its data, with optional comments and reactions. (st.openPost action). The author and reposter carry urn — a member URN (urn:li:member:<id>) for a person actor and an organization URN (urn:li:organization:<id>) for a company actor — and retrieved reactions carry engagerUrn for the same identity; each is null when LinkedIn does not expose the identifier. This action reads identifiers from the post page itself, so it resolves actor URNs that post listings such as retrieve_feed cannot. Comment authors carry no URN.',
'Open a LinkedIn post and retrieve its data, with optional comments and reactions. (st.openPost action). The author and reposter carry urn — a member URN (urn:li:member:<id>) for a person actor and an organization URN (urn:li:organization:<id>) for a company actor — and each retrieved reaction carries an actor object (type, name, urn, profileUrl or companyUrl, headline, and viewerState.connectionDegree for a person) with the same urn identity; each urn is null when LinkedIn does not expose the identifier. This action reads identifiers from the post page itself, so it resolves actor URNs that post listings such as retrieve_feed cannot. Comment authors carry no URN.',
inputSchema: {
type: 'object',
properties: {
Expand Down
28 changes: 12 additions & 16 deletions src/tools/search-posts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ const PERSON_FILTER_ENTRY_SCHEMA = z.union([
z.string().min(1).max(100),
z.object({
name: z.string().min(1).max(100),
id: z.string().optional(),
urn: z.string().optional(),
personHashedUrl: z.string().optional(),
}),
Expand All @@ -17,6 +18,7 @@ const COMPANY_FILTER_ENTRY_SCHEMA = z.union([
z.string().min(1).max(100),
z.object({
name: z.string().min(1).max(100),
id: z.string().optional(),
urn: z.string().optional(),
companyHashedUrl: z.string().optional(),
}),
Expand All @@ -37,15 +39,12 @@ const PERSON_FILTER_ENTRY_JSON_SCHEMA = {
type: 'string',
minLength: 1,
maxLength: 100,
description: 'Required. Name to type into the LinkedIn filter panel.',
description: 'Required. Name of the person.',
},
urn: {
id: {
type: 'string',
description: 'Optional. Member URN of the person, urn:li:member:<id>.',
},
personHashedUrl: {
type: 'string',
description: 'Optional. Hashed LinkedIn URL of the person.',
description:
'Optional. Any identifier of the person: URN, or public or hashed LinkedIn URL. Pins the filter to exactly that person.',
},
},
required: ['name'],
Expand All @@ -68,15 +67,12 @@ const COMPANY_FILTER_ENTRY_JSON_SCHEMA = {
type: 'string',
minLength: 1,
maxLength: 100,
description: 'Required. Name to type into the LinkedIn filter panel.',
},
urn: {
type: 'string',
description: 'Optional. Organization URN of the company, urn:li:organization:<id>.',
description: 'Required. Name of the company.',
},
companyHashedUrl: {
id: {
type: 'string',
description: 'Optional. Hashed LinkedIn URL of the company.',
description:
'Optional. Any identifier of the company: URN, public or hashed LinkedIn URL, or numeric ID. Pins the filter to exactly that company.',
},
},
required: ['name'],
Expand Down Expand Up @@ -165,13 +161,13 @@ export class SearchPostsTool extends OperationTool<TSearchPostsParams, unknown>
fromMembers: {
type: 'array',
description:
'Optional. Array of people whose posts to keep. Each entry is a plain name string, or an object with name plus an optional urn or personHashedUrl that pins the exact person; both forms can be mixed in one array. With a name alone LinkedIn takes whichever suggestion it ranked first, which may be a namesake. An identifier no suggestion resolves to fails the action with filterNotApplied rather than filtering by a namesake.',
'Optional. Array of people whose posts to keep. Each entry is a name, or { name, id }; both forms can be mixed in one array. A name alone may match a namesake; id pins the exact person. When an entry cannot be applied, the action fails with filterNotApplied rather than filtering by somebody else.',
items: PERSON_FILTER_ENTRY_JSON_SCHEMA,
},
fromCompanies: {
type: 'array',
description:
'Optional. Array of companies whose posts to keep. Same entry shape as fromMembers, with companyHashedUrl in place of personHashedUrl.',
'Optional. Array of companies whose posts to keep. Same entry shape as fromMembers.',
items: COMPANY_FILTER_ENTRY_JSON_SCHEMA,
},
mentioningMembers: {
Expand Down
Loading