@mcp-s/connectors 0.0.20261022190708 → 0.0.20261024071613
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/public/connectors/asana.json +1 -1
- package/dist/public/connectors/azure-devops.json +1 -1
- package/dist/public/connectors/bitbucket-datacenter.json +1 -1
- package/dist/public/connectors/bitbucket.json +1 -1
- package/dist/public/connectors/github.json +1 -1
- package/dist/public/connectors/gmail.json +1 -1
- package/dist/public/connectors/google-calendar.json +1 -1
- package/dist/public/connectors/google-workspace-admin.json +1 -1
- package/dist/public/connectors/google-workspace.json +1 -1
- package/dist/public/connectors/jira-server.json +1 -1
- package/dist/public/connectors/jira.json +1 -1
- package/dist/public/connectors/linear.json +1 -1
- package/dist/public/connectors/linkedin.json +1 -1
- package/dist/public/connectors/monday.json +1 -1
- package/dist/public/connectors/okta.json +1 -1
- package/dist/public/connectors/onedrive.json +1 -1
- package/dist/public/connectors/outlook-calendar.json +1 -1
- package/dist/public/connectors/outlook-mail.json +1 -1
- package/dist/public/connectors/salesforce.json +1 -1
- package/dist/public/connectors/sharepoint.json +1 -1
- package/dist/public/connectors/slack.json +1 -1
- package/dist/public/connectors/zendesk.json +1 -1
- package/dist/public/connectors/zoom.json +1 -1
- package/dist/public/index.json +24 -24
- package/dist/schema/auth.d.ts +27 -0
- package/dist/schema/auth.js +15 -0
- package/dist/schema/catalog.d.ts +12 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"linear","status":"active","internal_status":"tool-works","applications":["linear"],"definition":{"display":{"name":"Linear","description":"Linear is a modern issue tracking and project management tool designed for software teams to streamline workflows and ship faster.","icon":"linear.svg","website":"https://linear.app","category":"project-management-issue-tracking","docs_url":"https://docs.withwillow.ai/docs/mcp-servers/built-in/linear"},"api":{"base_url":"https://api.linear.app"},"auth":{"methods":{"oauth":{"authUrl":"https://linear.app/oauth/authorize","tokenUrl":"https://api.linear.app/oauth/token","scopes":["read","write","issues:create","comments:create","timeSchedule:write","admin"],"defaultScopes":["read","write"],"pkce":true,"codeExchangeConfig":{"isForm":true,"modelCredentialsMapping":"{\n \"access_token\": access_token,\n \"expires_at\": $fromMillis($millis() + expires_in * 1000),\n \"refresh_token\": refresh_token,\n \"refresh_token_expires_at\": null,\n \"scope\": scope,\n \"token_type\": token_type\n }"}},"apiKey":{"headerName":"Authorization","authorizationMapping":"\"Bearer \" & token"}}},"tools":[{"name":"List Issues","description":"Query issues with optional filters such as team, assignee, state, priority, and labels. Returns a paginated list of issues with their details. Use this to get an overview of issues in a team or across the workspace.","slug":"list_issues","ai_risk":{"level":"low","score":1,"reasoning":"This tool fetches a list of issues with various filters, making it read-only and low risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"teamId":{"type":"string","description":"Filter issues by team ID. Use list-teams to get available team IDs."},"assigneeId":{"type":"string","description":"Filter issues by assignee user ID."},"stateId":{"type":"string","description":"Filter issues by workflow state ID."},"priority":{"type":"number","description":"Filter by priority (0=None, 1=Urgent, 2=High, 3=Medium, 4=Low)","enum":[0,1,2,3,4]},"first":{"type":"number","description":"Number of issues to return (default: 50, max: 250)","default":50},"after":{"type":"string","description":"Cursor for pagination - use to get next page of results"}},"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query Issues($first: Int, $after: String, $teamId: ID, $assigneeId: ID, $stateId: ID, $priority: Float) { issues(first: $first, after: $after, filter: { team: { id: { eq: $teamId } }, assignee: { id: { eq: $assigneeId } }, state: { id: { eq: $stateId } }, priority: { eq: $priority } }) { nodes { id identifier title description priority priorityLabel state { id name type } assignee { id name email } team { id name } labels { nodes { id name color } } createdAt updatedAt url } pageInfo { hasNextPage endCursor } } }\",\n \"variables\": $sift({\n \"first\": arguments.first,\n \"after\": arguments.after,\n \"teamId\": arguments.teamId,\n \"assigneeId\": arguments.assigneeId,\n \"stateId\": arguments.stateId,\n \"priority\": arguments.priority\n }, function($v) { $v != null })\n}","response":"response.data.issues"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"requiredScopes":["read"]},{"name":"Search Issues","description":"Search for issues using full-text search across titles and descriptions. Returns issues matching the search term. This is useful when you know part of the issue title or description but not the exact ID.","slug":"search_issues","ai_risk":{"level":"low","score":1,"reasoning":"This tool performs a read-only search for issues based on a query, posing minimal risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search term to find in issue titles and descriptions"},"first":{"type":"number","description":"Number of results to return (default: 50)","default":50}},"required":["query"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query SearchIssues($query: String!, $first: Int) { issues(first: $first, filter: { title: { containsIgnoreCase: $query } }) { nodes { id identifier title description priority priorityLabel state { name } assignee { name } team { name } createdAt url } } }\",\n \"variables\": {\n \"query\": arguments.query,\n \"first\": arguments.first\n }\n}","response":"response.data.issues.nodes"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"requiredScopes":["read"]},{"name":"Get Issue","description":"Retrieve full details of a specific issue by its ID or identifier (e.g., 'ENG-123'). Returns comprehensive information including description, state, assignee, labels, and related data.","slug":"get_issue","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves details of a specific issue, making it read-only and low risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Issue ID (UUID) or identifier (e.g., 'ENG-123'). Use identifier for human-readable issue keys."}},"required":["id"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query GetIssue($id: String!) { issue(id: $id) { id identifier title description priority priorityLabel estimate state { id name type } assignee { id name email } team { id name key } labels { nodes { id name color } } project { id name } cycle { id name number } parent { id identifier title } children { nodes { id identifier title } } comments { nodes { id body createdAt user { name } } } createdAt updatedAt url } }\",\n \"variables\": {\n \"id\": arguments.id\n }\n}","response":"response.data.issue"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["read"]},{"name":"Create Issue","description":"Create a new issue in Linear. At minimum, you must specify a title and teamId. You can also set description, assignee, priority, state, labels, project, and other properties. Returns the created issue with its ID and URL.","slug":"create_issue","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates new issues, which is a standard write operation on business data, thus medium risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"title":{"type":"string","description":"Issue title (required)"},"teamId":{"type":"string","description":"Team ID where the issue will be created (required). Use list-teams to get team IDs."},"description":{"type":"string","description":"Issue description in markdown format. Supports full markdown syntax."},"assigneeId":{"type":"string","description":"User ID to assign the issue to"},"priority":{"type":"number","description":"Priority: 0=None, 1=Urgent, 2=High, 3=Medium, 4=Low","enum":[0,1,2,3,4]},"stateId":{"type":"string","description":"Workflow state ID. Use list-workflow-states to get IDs."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Array of label IDs to apply to the issue"},"projectId":{"type":"string","description":"Project ID to add the issue to"},"cycleId":{"type":"string","description":"Cycle ID to add the issue to"},"estimate":{"type":"number","description":"Estimate points for the issue"},"parentId":{"type":"string","description":"Parent issue ID to create this as a sub-issue"}},"required":["title","teamId"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"mutation CreateIssue($title: String!, $teamId: String!, $description: String, $assigneeId: String, $priority: Int, $stateId: String, $labelIds: [String!], $projectId: String, $cycleId: String, $estimate: Int, $parentId: String) { issueCreate(input: { title: $title, teamId: $teamId, description: $description, assigneeId: $assigneeId, priority: $priority, stateId: $stateId, labelIds: $labelIds, projectId: $projectId, cycleId: $cycleId, estimate: $estimate, parentId: $parentId }) { success issue { id identifier title state { name } assignee { name } url } } }\",\n \"variables\": $sift({\n \"title\": arguments.title,\n \"teamId\": arguments.teamId,\n \"description\": arguments.description,\n \"assigneeId\": arguments.assigneeId,\n \"priority\": arguments.priority,\n \"stateId\": arguments.stateId,\n \"labelIds\": arguments.labelIds,\n \"projectId\": arguments.projectId,\n \"cycleId\": arguments.cycleId,\n \"estimate\": arguments.estimate,\n \"parentId\": arguments.parentId\n }, function($v) { $v != null })\n}","response":"response.data.issueCreate.issue"}},"annotations":{"destructiveHint":true},"requiredScopes":["issues:create"]},{"name":"Update Issue","description":"Update an existing issue's properties including title, description, assignee, state, priority, labels, and more. Only provide the fields you want to change. Returns the updated issue.","slug":"update_issue","ai_risk":{"level":"medium","score":5,"reasoning":"This tool updates existing issues, representing a standard write operation on business data, hence medium risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Issue ID to update (required)"},"title":{"type":"string","description":"New issue title"},"description":{"type":"string","description":"New issue description in markdown"},"assigneeId":{"type":"string","description":"New assignee user ID (use null to unassign)"},"priority":{"type":"number","description":"New priority: 0=None, 1=Urgent, 2=High, 3=Medium, 4=Low","enum":[0,1,2,3,4]},"stateId":{"type":"string","description":"New workflow state ID"},"labelIds":{"type":"array","items":{"type":"string"},"description":"New array of label IDs (replaces existing labels)"},"projectId":{"type":"string","description":"Project ID to move the issue to"},"cycleId":{"type":"string","description":"Cycle ID to move the issue to"},"estimate":{"type":"number","description":"New estimate points"}},"required":["id"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"mutation UpdateIssue($id: String!, $title: String, $description: String, $assigneeId: String, $priority: Int, $stateId: String, $labelIds: [String!], $projectId: String, $cycleId: String, $estimate: Int) { issueUpdate(id: $id, input: { title: $title, description: $description, assigneeId: $assigneeId, priority: $priority, stateId: $stateId, labelIds: $labelIds, projectId: $projectId, cycleId: $cycleId, estimate: $estimate }) { success issue { id identifier title state { name } assignee { name } priority url } } }\",\n \"variables\": $sift({\n \"id\": arguments.id,\n \"title\": arguments.title,\n \"description\": arguments.description,\n \"assigneeId\": arguments.assigneeId,\n \"priority\": arguments.priority,\n \"stateId\": arguments.stateId,\n \"labelIds\": arguments.labelIds,\n \"projectId\": arguments.projectId,\n \"cycleId\": arguments.cycleId,\n \"estimate\": arguments.estimate\n }, function($v) { $v != null })\n}","response":"response.data.issueUpdate.issue"}},"annotations":{"destructiveHint":true},"requiredScopes":["write"]},{"name":"Archive Issue","description":"Archive an issue to hide it from active views. Archived issues can be restored later. Use this instead of deleting issues to preserve history.","slug":"archive_issue","ai_risk":{"level":"low","score":4,"reasoning":"This tool archives issues, which is a destructive action but allows for restoration, making it medium risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Issue ID to archive"}},"required":["id"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"mutation ArchiveIssue($id: String!) { issueArchive(id: $id) { success } }\",\n \"variables\": {\n \"id\": arguments.id\n }\n}","response":"response.data.issueArchive"}},"annotations":{"destructiveHint":true},"requiredScopes":["write"]},{"name":"Unarchive Issue","description":"Restore an archived issue back to active status. The issue will become visible in normal views again.","slug":"unarchive_issue","ai_risk":{"level":"low","score":4,"reasoning":"This tool restores archived issues, which is a destructive action but reversible, thus medium risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Issue ID to unarchive"}},"required":["id"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"mutation UnarchiveIssue($id: String!) { issueUnarchive(id: $id) { success } }\",\n \"variables\": {\n \"id\": arguments.id\n }\n}","response":"response.data.issueUnarchive"}},"annotations":{"destructiveHint":true},"requiredScopes":["write"]},{"name":"List Issue Labels","description":"Get all labels available in the workspace or for a specific team. Labels are used to categorize issues. Returns label IDs, names, and colors that can be used when creating or updating issues.","slug":"list_labels","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves a list of labels, making it read-only and low risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"teamId":{"type":"string","description":"Filter labels by team ID"},"first":{"type":"number","description":"Number of labels to return (default: 100)","default":100}},"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query ListLabels($first: Int, $teamId: ID) { issueLabels(first: $first, filter: { team: { id: { eq: $teamId } } }) { nodes { id name description color team { id name } } } }\",\n \"variables\": $sift({\n \"first\": arguments.first,\n \"teamId\": arguments.teamId\n }, function($v) { $v != null })\n}","response":"response.data.issueLabels.nodes"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"requiredScopes":["read"]},{"name":"Create Issue Label","description":"Create a new label for categorizing issues. Labels can be workspace-wide or team-specific. Returns the created label with its ID.","slug":"create_label","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates new labels for categorizing issues, representing a standard write operation, hence medium risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Label name (required)"},"teamId":{"type":"string","description":"Team ID to create team-specific label. Omit for workspace-wide label."},"color":{"type":"string","description":"Label color in hex format (e.g., '#FF0000') or color name"},"description":{"type":"string","description":"Label description"}},"required":["name"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"mutation CreateLabel($name: String!, $teamId: String, $color: String, $description: String) { issueLabelCreate(input: { name: $name, teamId: $teamId, color: $color, description: $description }) { success issueLabel { id name color } } }\",\n \"variables\": $sift({\n \"name\": arguments.name,\n \"teamId\": arguments.teamId,\n \"color\": arguments.color,\n \"description\": arguments.description\n }, function($v) { $v != null })\n}","response":"response.data.issueLabelCreate.issueLabel"}},"annotations":{"destructiveHint":true},"requiredScopes":["write"]},{"name":"Create Comment","description":"Add a comment to an issue. Comments support markdown formatting and are useful for discussions, updates, and collaboration on issues.","slug":"create_comment","ai_risk":{"level":"low","score":4,"reasoning":"This tool adds comments to issues, which is a destructive action but typically low impact, thus medium risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"issueId":{"type":"string","description":"Issue ID to add the comment to (required)"},"body":{"type":"string","description":"Comment text in markdown format (required). Supports full markdown syntax including code blocks, lists, and links."}},"required":["issueId","body"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"mutation CreateComment($issueId: String!, $body: String!) { commentCreate(input: { issueId: $issueId, body: $body }) { success comment { id body createdAt user { name email } } } }\",\n \"variables\": {\n \"issueId\": arguments.issueId,\n \"body\": arguments.body\n }\n}","response":"response.data.commentCreate.comment"}},"annotations":{"destructiveHint":true},"requiredScopes":["comments:create"]},{"name":"List Comments","description":"Get all comments for a specific issue. Returns comments with their content, author, and timestamps in chronological order.","slug":"list_comments","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves comments for a specific issue, making it read-only and low risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"issueId":{"type":"string","description":"Issue ID to get comments for"},"first":{"type":"number","description":"Number of comments to return (default: 50)","default":50}},"required":["issueId"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query ListComments($issueId: ID!, $first: Int) { comments(first: $first, filter: { issue: { id: { eq: $issueId } } }) { nodes { id body createdAt updatedAt user { id name email } } } }\",\n \"variables\": {\n \"issueId\": arguments.issueId,\n \"first\": arguments.first\n }\n}","response":"response.data.comments.nodes"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["read"]},{"name":"List Projects","description":"List all projects in the workspace with optional filters. Projects are used to organize and track groups of related issues. Returns project details including status, progress, and metadata.","slug":"list_projects","ai_risk":{"level":"low","score":1,"reasoning":"This tool fetches a list of projects, making it read-only and low risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"teamId":{"type":"string","description":"Filter projects by team ID"},"first":{"type":"number","description":"Number of projects to return (default: 50)","default":50},"after":{"type":"string","description":"Cursor for pagination"},"includeArchived":{"type":"boolean","description":"Include archived projects in results (default: false)","default":false}},"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query ListProjects($first: Int, $after: String, $includeArchived: Boolean) { projects(first: $first, after: $after, includeArchived: $includeArchived) { nodes { id name description state icon color progress targetDate startDate lead { name } teams { nodes { name } } url } pageInfo { hasNextPage endCursor } } }\",\n \"variables\": $sift({\n \"first\": arguments.first,\n \"after\": arguments.after,\n \"includeArchived\": arguments.includeArchived\n }, function($v) { $v != null })\n}","response":"response.data.projects"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"requiredScopes":["read"]},{"name":"Get Project","description":"Get detailed information about a specific project including its issues, milestones, progress, and team members.","slug":"get_project","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves detailed information about a specific project, making it read-only and low risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Project ID"}},"required":["id"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query GetProject($id: String!) { project(id: $id) { id name description state icon color progress targetDate startDate lead { id name email } teams { nodes { id name } } members { nodes { id name } } url createdAt updatedAt } }\",\n \"variables\": {\n \"id\": arguments.id\n }\n}","response":"response.data.project"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["read"]},{"name":"Create Project","description":"Create a new project to organize related issues. Projects help track progress towards goals and organize work across teams.","slug":"create_project","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates new projects, which is a standard write operation on business data, thus medium risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Project name (required)"},"teamIds":{"type":"array","items":{"type":"string"},"description":"Array of team IDs associated with this project (required)"},"description":{"type":"string","description":"Project description in markdown"},"state":{"type":"string","description":"Project state: 'planned', 'started', 'paused', 'completed', 'canceled'","enum":["planned","started","paused","completed","canceled"]},"leadId":{"type":"string","description":"User ID of the project lead"},"targetDate":{"type":"string","description":"Target completion date in ISO 8601 format (YYYY-MM-DD)"},"startDate":{"type":"string","description":"Project start date in ISO 8601 format (YYYY-MM-DD)"},"color":{"type":"string","description":"Project color in hex format (e.g., '#FF0000')"}},"required":["name","teamIds"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"mutation CreateProject($name: String!, $teamIds: [String!]!, $description: String, $state: String, $leadId: String, $targetDate: TimelessDate, $startDate: TimelessDate, $color: String) { projectCreate(input: { name: $name, teamIds: $teamIds, description: $description, state: $state, leadId: $leadId, targetDate: $targetDate, startDate: $startDate, color: $color }) { success project { id name state url } } }\",\n \"variables\": $sift({\n \"name\": arguments.name,\n \"teamIds\": arguments.teamIds,\n \"description\": arguments.description,\n \"state\": arguments.state,\n \"leadId\": arguments.leadId,\n \"targetDate\": arguments.targetDate,\n \"startDate\": arguments.startDate,\n \"color\": arguments.color\n }, function($v) { $v != null })\n}","response":"response.data.projectCreate.project"}},"annotations":{"destructiveHint":true},"requiredScopes":["write"]},{"name":"Update Project","description":"Update an existing project's properties including name, description, state, dates, and team assignments.","slug":"update_project","ai_risk":{"level":"medium","score":5,"reasoning":"This tool updates existing project properties, representing a standard write operation, hence medium risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Project ID to update (required)"},"name":{"type":"string","description":"New project name"},"description":{"type":"string","description":"New project description"},"state":{"type":"string","description":"New project state","enum":["planned","started","paused","completed","canceled"]},"leadId":{"type":"string","description":"New project lead user ID"},"targetDate":{"type":"string","description":"New target date (YYYY-MM-DD)"},"startDate":{"type":"string","description":"New start date (YYYY-MM-DD)"},"color":{"type":"string","description":"New project color"}},"required":["id"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"mutation UpdateProject($id: String!, $name: String, $description: String, $state: String, $leadId: String, $targetDate: TimelessDate, $startDate: TimelessDate, $color: String) { projectUpdate(id: $id, input: { name: $name, description: $description, state: $state, leadId: $leadId, targetDate: $targetDate, startDate: $startDate, color: $color }) { success project { id name state url } } }\",\n \"variables\": $sift({\n \"id\": arguments.id,\n \"name\": arguments.name,\n \"description\": arguments.description,\n \"state\": arguments.state,\n \"leadId\": arguments.leadId,\n \"targetDate\": arguments.targetDate,\n \"startDate\": arguments.startDate,\n \"color\": arguments.color\n }, function($v) { $v != null })\n}","response":"response.data.projectUpdate.project"}},"annotations":{"destructiveHint":true},"requiredScopes":["write"]},{"name":"List Teams","description":"List all teams you have access to in the Linear workspace. Teams are the primary organizational unit in Linear. Returns team details including keys, names, and settings.","slug":"list_teams","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves a list of teams, making it read-only and low risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"first":{"type":"number","description":"Number of teams to return (default: 50)","default":50}},"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query ListTeams($first: Int) { teams(first: $first) { nodes { id name key description icon color private archivedAt } } }\",\n \"variables\": {\n \"first\": arguments.first\n }\n}","response":"response.data.teams.nodes"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"requiredScopes":["read"]},{"name":"Get Team","description":"Get detailed information about a specific team including members, workflow states, and settings. Use this to understand team structure and configuration.","slug":"get_team","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves detailed information about a specific team, making it read-only and low risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Team ID"}},"required":["id"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query GetTeam($id: String!) { team(id: $id) { id name key description icon color private archivedAt members { nodes { id name email } } states { nodes { id name type description color position } } } }\",\n \"variables\": {\n \"id\": arguments.id\n }\n}","response":"response.data.team"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["read"]},{"name":"List Cycles","description":"List cycles (sprints) for a team. Cycles are time-boxed periods used for planning and tracking work. Returns cycle details including dates, progress, and associated issues.","slug":"list_cycles","ai_risk":{"level":"low","score":1,"reasoning":"This tool fetches a list of cycles, making it read-only and low risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"teamId":{"type":"string","description":"Filter cycles by team ID"},"first":{"type":"number","description":"Number of cycles to return (default: 50)","default":50},"includeArchived":{"type":"boolean","description":"Include archived cycles (default: false)","default":false}},"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query ListCycles($first: Int, $teamId: ID, $includeArchived: Boolean) { cycles(first: $first, filter: { team: { id: { eq: $teamId } } }, includeArchived: $includeArchived) { nodes { id number name description startsAt endsAt progress completedAt team { name } } } }\",\n \"variables\": $sift({\n \"first\": arguments.first,\n \"teamId\": arguments.teamId,\n \"includeArchived\": arguments.includeArchived\n }, function($v) { $v != null })\n}","response":"response.data.cycles.nodes"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"requiredScopes":["read"]},{"name":"Get Cycle","description":"Get detailed information about a specific cycle including its issues, progress, and completion status.","slug":"get_cycle","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves detailed information about a specific cycle, making it read-only and low risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Cycle ID"}},"required":["id"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query GetCycle($id: String!) { cycle(id: $id) { id number name description startsAt endsAt progress completedAt team { id name } issues { nodes { id identifier title state { name } } } }\",\n \"variables\": {\n \"id\": arguments.id\n }\n}","response":"response.data.cycle"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["read"]},{"name":"Create Cycle","description":"Create a new cycle (sprint) for a team. Cycles help organize work into time-boxed iterations.","slug":"create_cycle","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates a new cycle, which is a standard write operation on business data, thus medium risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team ID for the cycle (required)"},"name":{"type":"string","description":"Cycle name"},"description":{"type":"string","description":"Cycle description"},"startsAt":{"type":"string","description":"Start date in ISO 8601 format (YYYY-MM-DDTHH:MM:SSZ)"},"endsAt":{"type":"string","description":"End date in ISO 8601 format (YYYY-MM-DDTHH:MM:SSZ)"}},"required":["teamId","startsAt","endsAt"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"mutation CreateCycle($teamId: String!, $name: String, $description: String, $startsAt: DateTime!, $endsAt: DateTime!) { cycleCreate(input: { teamId: $teamId, name: $name, description: $description, startsAt: $startsAt, endsAt: $endsAt }) { success cycle { id number name startsAt endsAt } } }\",\n \"variables\": $sift({\n \"teamId\": arguments.teamId,\n \"name\": arguments.name,\n \"description\": arguments.description,\n \"startsAt\": arguments.startsAt,\n \"endsAt\": arguments.endsAt\n }, function($v) { $v != null })\n}","response":"response.data.cycleCreate.cycle"}},"annotations":{"destructiveHint":true},"requiredScopes":["write"]},{"name":"Update Cycle","description":"Update an existing cycle's properties including name, description, and dates.","slug":"update_cycle","ai_risk":{"level":"medium","score":5,"reasoning":"This tool updates existing cycle properties, representing a standard write operation, hence medium risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Cycle ID to update (required)"},"name":{"type":"string","description":"New cycle name"},"description":{"type":"string","description":"New cycle description"},"startsAt":{"type":"string","description":"New start date (YYYY-MM-DDTHH:MM:SSZ)"},"endsAt":{"type":"string","description":"New end date (YYYY-MM-DDTHH:MM:SSZ)"},"completedAt":{"type":"string","description":"Completion date (YYYY-MM-DDTHH:MM:SSZ) to mark cycle as completed"}},"required":["id"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"mutation UpdateCycle($id: String!, $name: String, $description: String, $startsAt: DateTime, $endsAt: DateTime, $completedAt: DateTime) { cycleUpdate(id: $id, input: { name: $name, description: $description, startsAt: $startsAt, endsAt: $endsAt, completedAt: $completedAt }) { success cycle { id number name startsAt endsAt } } }\",\n \"variables\": $sift({\n \"id\": arguments.id,\n \"name\": arguments.name,\n \"description\": arguments.description,\n \"startsAt\": arguments.startsAt,\n \"endsAt\": arguments.endsAt,\n \"completedAt\": arguments.completedAt\n }, function($v) { $v != null })\n}","response":"response.data.cycleUpdate.cycle"}},"annotations":{"destructiveHint":true},"requiredScopes":["write"]},{"name":"Get Viewer","description":"Get information about the currently authenticated user. Returns user profile including name, email, and team memberships. Useful for understanding the current user's context.","slug":"get_viewer","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves information about the authenticated user, making it read-only and low risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query GetViewer { viewer { id name email displayName avatarUrl admin active createdAt organization { id name urlKey } teamMemberships { nodes { team { id name key } } } } }\"\n}","response":"response.data.viewer"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["read"]},{"name":"List Users","description":"List all users in the workspace. Returns user information including names, emails, and activity status. Use this to get user IDs for assigning issues.","slug":"list_users","ai_risk":{"level":"low","score":1,"reasoning":"This tool fetches a list of users, making it read-only and low risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"first":{"type":"number","description":"Number of users to return (default: 50)","default":50},"includeDisabled":{"type":"boolean","description":"Include disabled users (default: false)","default":false}},"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query ListUsers($first: Int, $includeDisabled: Boolean) { users(first: $first, includeDisabled: $includeDisabled) { nodes { id name email displayName avatarUrl admin active createdAt } } }\",\n \"variables\": {\n \"first\": arguments.first,\n \"includeDisabled\": arguments.includeDisabled\n }\n}","response":"response.data.users.nodes"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"requiredScopes":["read"]},{"name":"List Workflow States","description":"Get all workflow states for a team. Workflow states represent the different stages an issue can be in (e.g., Todo, In Progress, Done). Returns state IDs, names, types, and colors that can be used when creating or updating issues.","slug":"list_workflow_states","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves all workflow states for a team, making it read-only and low risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team ID to get workflow states for (required)"}},"required":["teamId"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query ListWorkflowStates($teamId: ID!) { workflowStates(filter: { team: { id: { eq: $teamId } } }) { nodes { id name type description color position } } }\",\n \"variables\": {\n \"teamId\": arguments.teamId\n }\n}","response":"response.data.workflowStates.nodes"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["read"]}]}}
|
|
1
|
+
{"id":"linear","status":"active","internal_status":"tool-works","applications":["linear"],"definition":{"display":{"name":"Linear","description":"Linear is a modern issue tracking and project management tool designed for software teams to streamline workflows and ship faster.","icon":"linear.svg","website":"https://linear.app","category":"project-management-issue-tracking","docs_url":"https://docs.withwillow.ai/docs/mcp-servers/built-in/linear"},"api":{"base_url":"https://api.linear.app"},"auth":{"methods":{"oauth":{"authUrl":"https://linear.app/oauth/authorize","tokenUrl":"https://api.linear.app/oauth/token","scopes":["read","write","issues:create","comments:create","timeSchedule:write","admin"],"defaultScopes":["read","write"],"scopeTemplates":[{"id":"read-only","name":"Read-only","description":"Read issues, comments, projects, cycles, teams, labels, workflow states and users. Can't create or change anything.","scopes":["read"]},{"id":"create-only","name":"Create issues and comments","description":"Read everything and file new issues and comments, but not edit, archive or delete existing ones.","scopes":["read","issues:create","comments:create"]},{"id":"full-access","name":"Full access","description":"Read and write everything, including time schedules and workspace admin endpoints.","scopes":["read","write","issues:create","comments:create","timeSchedule:write","admin"]}],"pkce":true,"codeExchangeConfig":{"isForm":true,"modelCredentialsMapping":"{\n \"access_token\": access_token,\n \"expires_at\": $fromMillis($millis() + expires_in * 1000),\n \"refresh_token\": refresh_token,\n \"refresh_token_expires_at\": null,\n \"scope\": scope,\n \"token_type\": token_type\n }"}},"apiKey":{"headerName":"Authorization","authorizationMapping":"\"Bearer \" & token"}}},"tools":[{"name":"List Issues","description":"Query issues with optional filters such as team, assignee, state, priority, and labels. Returns a paginated list of issues with their details. Use this to get an overview of issues in a team or across the workspace.","slug":"list_issues","ai_risk":{"level":"low","score":1,"reasoning":"This tool fetches a list of issues with various filters, making it read-only and low risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"teamId":{"type":"string","description":"Filter issues by team ID. Use list-teams to get available team IDs."},"assigneeId":{"type":"string","description":"Filter issues by assignee user ID."},"stateId":{"type":"string","description":"Filter issues by workflow state ID."},"priority":{"type":"number","description":"Filter by priority (0=None, 1=Urgent, 2=High, 3=Medium, 4=Low)","enum":[0,1,2,3,4]},"first":{"type":"number","description":"Number of issues to return (default: 50, max: 250)","default":50},"after":{"type":"string","description":"Cursor for pagination - use to get next page of results"}},"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query Issues($first: Int, $after: String, $teamId: ID, $assigneeId: ID, $stateId: ID, $priority: Float) { issues(first: $first, after: $after, filter: { team: { id: { eq: $teamId } }, assignee: { id: { eq: $assigneeId } }, state: { id: { eq: $stateId } }, priority: { eq: $priority } }) { nodes { id identifier title description priority priorityLabel state { id name type } assignee { id name email } team { id name } labels { nodes { id name color } } createdAt updatedAt url } pageInfo { hasNextPage endCursor } } }\",\n \"variables\": $sift({\n \"first\": arguments.first,\n \"after\": arguments.after,\n \"teamId\": arguments.teamId,\n \"assigneeId\": arguments.assigneeId,\n \"stateId\": arguments.stateId,\n \"priority\": arguments.priority\n }, function($v) { $v != null })\n}","response":"response.data.issues"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"requiredScopes":["read"]},{"name":"Search Issues","description":"Search for issues using full-text search across titles and descriptions. Returns issues matching the search term. This is useful when you know part of the issue title or description but not the exact ID.","slug":"search_issues","ai_risk":{"level":"low","score":1,"reasoning":"This tool performs a read-only search for issues based on a query, posing minimal risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search term to find in issue titles and descriptions"},"first":{"type":"number","description":"Number of results to return (default: 50)","default":50}},"required":["query"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query SearchIssues($query: String!, $first: Int) { issues(first: $first, filter: { title: { containsIgnoreCase: $query } }) { nodes { id identifier title description priority priorityLabel state { name } assignee { name } team { name } createdAt url } } }\",\n \"variables\": {\n \"query\": arguments.query,\n \"first\": arguments.first\n }\n}","response":"response.data.issues.nodes"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"requiredScopes":["read"]},{"name":"Get Issue","description":"Retrieve full details of a specific issue by its ID or identifier (e.g., 'ENG-123'). Returns comprehensive information including description, state, assignee, labels, and related data.","slug":"get_issue","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves details of a specific issue, making it read-only and low risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Issue ID (UUID) or identifier (e.g., 'ENG-123'). Use identifier for human-readable issue keys."}},"required":["id"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query GetIssue($id: String!) { issue(id: $id) { id identifier title description priority priorityLabel estimate state { id name type } assignee { id name email } team { id name key } labels { nodes { id name color } } project { id name } cycle { id name number } parent { id identifier title } children { nodes { id identifier title } } comments { nodes { id body createdAt user { name } } } createdAt updatedAt url } }\",\n \"variables\": {\n \"id\": arguments.id\n }\n}","response":"response.data.issue"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["read"]},{"name":"Create Issue","description":"Create a new issue in Linear. At minimum, you must specify a title and teamId. You can also set description, assignee, priority, state, labels, project, and other properties. Returns the created issue with its ID and URL.","slug":"create_issue","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates new issues, which is a standard write operation on business data, thus medium risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"title":{"type":"string","description":"Issue title (required)"},"teamId":{"type":"string","description":"Team ID where the issue will be created (required). Use list-teams to get team IDs."},"description":{"type":"string","description":"Issue description in markdown format. Supports full markdown syntax."},"assigneeId":{"type":"string","description":"User ID to assign the issue to"},"priority":{"type":"number","description":"Priority: 0=None, 1=Urgent, 2=High, 3=Medium, 4=Low","enum":[0,1,2,3,4]},"stateId":{"type":"string","description":"Workflow state ID. Use list-workflow-states to get IDs."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Array of label IDs to apply to the issue"},"projectId":{"type":"string","description":"Project ID to add the issue to"},"cycleId":{"type":"string","description":"Cycle ID to add the issue to"},"estimate":{"type":"number","description":"Estimate points for the issue"},"parentId":{"type":"string","description":"Parent issue ID to create this as a sub-issue"}},"required":["title","teamId"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"mutation CreateIssue($title: String!, $teamId: String!, $description: String, $assigneeId: String, $priority: Int, $stateId: String, $labelIds: [String!], $projectId: String, $cycleId: String, $estimate: Int, $parentId: String) { issueCreate(input: { title: $title, teamId: $teamId, description: $description, assigneeId: $assigneeId, priority: $priority, stateId: $stateId, labelIds: $labelIds, projectId: $projectId, cycleId: $cycleId, estimate: $estimate, parentId: $parentId }) { success issue { id identifier title state { name } assignee { name } url } } }\",\n \"variables\": $sift({\n \"title\": arguments.title,\n \"teamId\": arguments.teamId,\n \"description\": arguments.description,\n \"assigneeId\": arguments.assigneeId,\n \"priority\": arguments.priority,\n \"stateId\": arguments.stateId,\n \"labelIds\": arguments.labelIds,\n \"projectId\": arguments.projectId,\n \"cycleId\": arguments.cycleId,\n \"estimate\": arguments.estimate,\n \"parentId\": arguments.parentId\n }, function($v) { $v != null })\n}","response":"response.data.issueCreate.issue"}},"annotations":{"destructiveHint":true},"requiredScopes":["issues:create"]},{"name":"Update Issue","description":"Update an existing issue's properties including title, description, assignee, state, priority, labels, and more. Only provide the fields you want to change. Returns the updated issue.","slug":"update_issue","ai_risk":{"level":"medium","score":5,"reasoning":"This tool updates existing issues, representing a standard write operation on business data, hence medium risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Issue ID to update (required)"},"title":{"type":"string","description":"New issue title"},"description":{"type":"string","description":"New issue description in markdown"},"assigneeId":{"type":"string","description":"New assignee user ID (use null to unassign)"},"priority":{"type":"number","description":"New priority: 0=None, 1=Urgent, 2=High, 3=Medium, 4=Low","enum":[0,1,2,3,4]},"stateId":{"type":"string","description":"New workflow state ID"},"labelIds":{"type":"array","items":{"type":"string"},"description":"New array of label IDs (replaces existing labels)"},"projectId":{"type":"string","description":"Project ID to move the issue to"},"cycleId":{"type":"string","description":"Cycle ID to move the issue to"},"estimate":{"type":"number","description":"New estimate points"}},"required":["id"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"mutation UpdateIssue($id: String!, $title: String, $description: String, $assigneeId: String, $priority: Int, $stateId: String, $labelIds: [String!], $projectId: String, $cycleId: String, $estimate: Int) { issueUpdate(id: $id, input: { title: $title, description: $description, assigneeId: $assigneeId, priority: $priority, stateId: $stateId, labelIds: $labelIds, projectId: $projectId, cycleId: $cycleId, estimate: $estimate }) { success issue { id identifier title state { name } assignee { name } priority url } } }\",\n \"variables\": $sift({\n \"id\": arguments.id,\n \"title\": arguments.title,\n \"description\": arguments.description,\n \"assigneeId\": arguments.assigneeId,\n \"priority\": arguments.priority,\n \"stateId\": arguments.stateId,\n \"labelIds\": arguments.labelIds,\n \"projectId\": arguments.projectId,\n \"cycleId\": arguments.cycleId,\n \"estimate\": arguments.estimate\n }, function($v) { $v != null })\n}","response":"response.data.issueUpdate.issue"}},"annotations":{"destructiveHint":true},"requiredScopes":["write"]},{"name":"Archive Issue","description":"Archive an issue to hide it from active views. Archived issues can be restored later. Use this instead of deleting issues to preserve history.","slug":"archive_issue","ai_risk":{"level":"low","score":4,"reasoning":"This tool archives issues, which is a destructive action but allows for restoration, making it medium risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Issue ID to archive"}},"required":["id"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"mutation ArchiveIssue($id: String!) { issueArchive(id: $id) { success } }\",\n \"variables\": {\n \"id\": arguments.id\n }\n}","response":"response.data.issueArchive"}},"annotations":{"destructiveHint":true},"requiredScopes":["write"]},{"name":"Unarchive Issue","description":"Restore an archived issue back to active status. The issue will become visible in normal views again.","slug":"unarchive_issue","ai_risk":{"level":"low","score":4,"reasoning":"This tool restores archived issues, which is a destructive action but reversible, thus medium risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Issue ID to unarchive"}},"required":["id"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"mutation UnarchiveIssue($id: String!) { issueUnarchive(id: $id) { success } }\",\n \"variables\": {\n \"id\": arguments.id\n }\n}","response":"response.data.issueUnarchive"}},"annotations":{"destructiveHint":true},"requiredScopes":["write"]},{"name":"List Issue Labels","description":"Get all labels available in the workspace or for a specific team. Labels are used to categorize issues. Returns label IDs, names, and colors that can be used when creating or updating issues.","slug":"list_labels","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves a list of labels, making it read-only and low risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"teamId":{"type":"string","description":"Filter labels by team ID"},"first":{"type":"number","description":"Number of labels to return (default: 100)","default":100}},"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query ListLabels($first: Int, $teamId: ID) { issueLabels(first: $first, filter: { team: { id: { eq: $teamId } } }) { nodes { id name description color team { id name } } } }\",\n \"variables\": $sift({\n \"first\": arguments.first,\n \"teamId\": arguments.teamId\n }, function($v) { $v != null })\n}","response":"response.data.issueLabels.nodes"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"requiredScopes":["read"]},{"name":"Create Issue Label","description":"Create a new label for categorizing issues. Labels can be workspace-wide or team-specific. Returns the created label with its ID.","slug":"create_label","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates new labels for categorizing issues, representing a standard write operation, hence medium risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Label name (required)"},"teamId":{"type":"string","description":"Team ID to create team-specific label. Omit for workspace-wide label."},"color":{"type":"string","description":"Label color in hex format (e.g., '#FF0000') or color name"},"description":{"type":"string","description":"Label description"}},"required":["name"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"mutation CreateLabel($name: String!, $teamId: String, $color: String, $description: String) { issueLabelCreate(input: { name: $name, teamId: $teamId, color: $color, description: $description }) { success issueLabel { id name color } } }\",\n \"variables\": $sift({\n \"name\": arguments.name,\n \"teamId\": arguments.teamId,\n \"color\": arguments.color,\n \"description\": arguments.description\n }, function($v) { $v != null })\n}","response":"response.data.issueLabelCreate.issueLabel"}},"annotations":{"destructiveHint":true},"requiredScopes":["write"]},{"name":"Create Comment","description":"Add a comment to an issue. Comments support markdown formatting and are useful for discussions, updates, and collaboration on issues.","slug":"create_comment","ai_risk":{"level":"low","score":4,"reasoning":"This tool adds comments to issues, which is a destructive action but typically low impact, thus medium risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"issueId":{"type":"string","description":"Issue ID to add the comment to (required)"},"body":{"type":"string","description":"Comment text in markdown format (required). Supports full markdown syntax including code blocks, lists, and links."}},"required":["issueId","body"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"mutation CreateComment($issueId: String!, $body: String!) { commentCreate(input: { issueId: $issueId, body: $body }) { success comment { id body createdAt user { name email } } } }\",\n \"variables\": {\n \"issueId\": arguments.issueId,\n \"body\": arguments.body\n }\n}","response":"response.data.commentCreate.comment"}},"annotations":{"destructiveHint":true},"requiredScopes":["comments:create"]},{"name":"List Comments","description":"Get all comments for a specific issue. Returns comments with their content, author, and timestamps in chronological order.","slug":"list_comments","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves comments for a specific issue, making it read-only and low risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"issueId":{"type":"string","description":"Issue ID to get comments for"},"first":{"type":"number","description":"Number of comments to return (default: 50)","default":50}},"required":["issueId"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query ListComments($issueId: ID!, $first: Int) { comments(first: $first, filter: { issue: { id: { eq: $issueId } } }) { nodes { id body createdAt updatedAt user { id name email } } } }\",\n \"variables\": {\n \"issueId\": arguments.issueId,\n \"first\": arguments.first\n }\n}","response":"response.data.comments.nodes"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["read"]},{"name":"List Projects","description":"List all projects in the workspace with optional filters. Projects are used to organize and track groups of related issues. Returns project details including status, progress, and metadata.","slug":"list_projects","ai_risk":{"level":"low","score":1,"reasoning":"This tool fetches a list of projects, making it read-only and low risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"teamId":{"type":"string","description":"Filter projects by team ID"},"first":{"type":"number","description":"Number of projects to return (default: 50)","default":50},"after":{"type":"string","description":"Cursor for pagination"},"includeArchived":{"type":"boolean","description":"Include archived projects in results (default: false)","default":false}},"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query ListProjects($first: Int, $after: String, $includeArchived: Boolean) { projects(first: $first, after: $after, includeArchived: $includeArchived) { nodes { id name description state icon color progress targetDate startDate lead { name } teams { nodes { name } } url } pageInfo { hasNextPage endCursor } } }\",\n \"variables\": $sift({\n \"first\": arguments.first,\n \"after\": arguments.after,\n \"includeArchived\": arguments.includeArchived\n }, function($v) { $v != null })\n}","response":"response.data.projects"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"requiredScopes":["read"]},{"name":"Get Project","description":"Get detailed information about a specific project including its issues, milestones, progress, and team members.","slug":"get_project","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves detailed information about a specific project, making it read-only and low risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Project ID"}},"required":["id"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query GetProject($id: String!) { project(id: $id) { id name description state icon color progress targetDate startDate lead { id name email } teams { nodes { id name } } members { nodes { id name } } url createdAt updatedAt } }\",\n \"variables\": {\n \"id\": arguments.id\n }\n}","response":"response.data.project"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["read"]},{"name":"Create Project","description":"Create a new project to organize related issues. Projects help track progress towards goals and organize work across teams.","slug":"create_project","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates new projects, which is a standard write operation on business data, thus medium risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Project name (required)"},"teamIds":{"type":"array","items":{"type":"string"},"description":"Array of team IDs associated with this project (required)"},"description":{"type":"string","description":"Project description in markdown"},"state":{"type":"string","description":"Project state: 'planned', 'started', 'paused', 'completed', 'canceled'","enum":["planned","started","paused","completed","canceled"]},"leadId":{"type":"string","description":"User ID of the project lead"},"targetDate":{"type":"string","description":"Target completion date in ISO 8601 format (YYYY-MM-DD)"},"startDate":{"type":"string","description":"Project start date in ISO 8601 format (YYYY-MM-DD)"},"color":{"type":"string","description":"Project color in hex format (e.g., '#FF0000')"}},"required":["name","teamIds"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"mutation CreateProject($name: String!, $teamIds: [String!]!, $description: String, $state: String, $leadId: String, $targetDate: TimelessDate, $startDate: TimelessDate, $color: String) { projectCreate(input: { name: $name, teamIds: $teamIds, description: $description, state: $state, leadId: $leadId, targetDate: $targetDate, startDate: $startDate, color: $color }) { success project { id name state url } } }\",\n \"variables\": $sift({\n \"name\": arguments.name,\n \"teamIds\": arguments.teamIds,\n \"description\": arguments.description,\n \"state\": arguments.state,\n \"leadId\": arguments.leadId,\n \"targetDate\": arguments.targetDate,\n \"startDate\": arguments.startDate,\n \"color\": arguments.color\n }, function($v) { $v != null })\n}","response":"response.data.projectCreate.project"}},"annotations":{"destructiveHint":true},"requiredScopes":["write"]},{"name":"Update Project","description":"Update an existing project's properties including name, description, state, dates, and team assignments.","slug":"update_project","ai_risk":{"level":"medium","score":5,"reasoning":"This tool updates existing project properties, representing a standard write operation, hence medium risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Project ID to update (required)"},"name":{"type":"string","description":"New project name"},"description":{"type":"string","description":"New project description"},"state":{"type":"string","description":"New project state","enum":["planned","started","paused","completed","canceled"]},"leadId":{"type":"string","description":"New project lead user ID"},"targetDate":{"type":"string","description":"New target date (YYYY-MM-DD)"},"startDate":{"type":"string","description":"New start date (YYYY-MM-DD)"},"color":{"type":"string","description":"New project color"}},"required":["id"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"mutation UpdateProject($id: String!, $name: String, $description: String, $state: String, $leadId: String, $targetDate: TimelessDate, $startDate: TimelessDate, $color: String) { projectUpdate(id: $id, input: { name: $name, description: $description, state: $state, leadId: $leadId, targetDate: $targetDate, startDate: $startDate, color: $color }) { success project { id name state url } } }\",\n \"variables\": $sift({\n \"id\": arguments.id,\n \"name\": arguments.name,\n \"description\": arguments.description,\n \"state\": arguments.state,\n \"leadId\": arguments.leadId,\n \"targetDate\": arguments.targetDate,\n \"startDate\": arguments.startDate,\n \"color\": arguments.color\n }, function($v) { $v != null })\n}","response":"response.data.projectUpdate.project"}},"annotations":{"destructiveHint":true},"requiredScopes":["write"]},{"name":"List Teams","description":"List all teams you have access to in the Linear workspace. Teams are the primary organizational unit in Linear. Returns team details including keys, names, and settings.","slug":"list_teams","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves a list of teams, making it read-only and low risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"first":{"type":"number","description":"Number of teams to return (default: 50)","default":50}},"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query ListTeams($first: Int) { teams(first: $first) { nodes { id name key description icon color private archivedAt } } }\",\n \"variables\": {\n \"first\": arguments.first\n }\n}","response":"response.data.teams.nodes"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"requiredScopes":["read"]},{"name":"Get Team","description":"Get detailed information about a specific team including members, workflow states, and settings. Use this to understand team structure and configuration.","slug":"get_team","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves detailed information about a specific team, making it read-only and low risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Team ID"}},"required":["id"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query GetTeam($id: String!) { team(id: $id) { id name key description icon color private archivedAt members { nodes { id name email } } states { nodes { id name type description color position } } } }\",\n \"variables\": {\n \"id\": arguments.id\n }\n}","response":"response.data.team"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["read"]},{"name":"List Cycles","description":"List cycles (sprints) for a team. Cycles are time-boxed periods used for planning and tracking work. Returns cycle details including dates, progress, and associated issues.","slug":"list_cycles","ai_risk":{"level":"low","score":1,"reasoning":"This tool fetches a list of cycles, making it read-only and low risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"teamId":{"type":"string","description":"Filter cycles by team ID"},"first":{"type":"number","description":"Number of cycles to return (default: 50)","default":50},"includeArchived":{"type":"boolean","description":"Include archived cycles (default: false)","default":false}},"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query ListCycles($first: Int, $teamId: ID, $includeArchived: Boolean) { cycles(first: $first, filter: { team: { id: { eq: $teamId } } }, includeArchived: $includeArchived) { nodes { id number name description startsAt endsAt progress completedAt team { name } } } }\",\n \"variables\": $sift({\n \"first\": arguments.first,\n \"teamId\": arguments.teamId,\n \"includeArchived\": arguments.includeArchived\n }, function($v) { $v != null })\n}","response":"response.data.cycles.nodes"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"requiredScopes":["read"]},{"name":"Get Cycle","description":"Get detailed information about a specific cycle including its issues, progress, and completion status.","slug":"get_cycle","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves detailed information about a specific cycle, making it read-only and low risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Cycle ID"}},"required":["id"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query GetCycle($id: String!) { cycle(id: $id) { id number name description startsAt endsAt progress completedAt team { id name } issues { nodes { id identifier title state { name } } } }\",\n \"variables\": {\n \"id\": arguments.id\n }\n}","response":"response.data.cycle"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["read"]},{"name":"Create Cycle","description":"Create a new cycle (sprint) for a team. Cycles help organize work into time-boxed iterations.","slug":"create_cycle","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates a new cycle, which is a standard write operation on business data, thus medium risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team ID for the cycle (required)"},"name":{"type":"string","description":"Cycle name"},"description":{"type":"string","description":"Cycle description"},"startsAt":{"type":"string","description":"Start date in ISO 8601 format (YYYY-MM-DDTHH:MM:SSZ)"},"endsAt":{"type":"string","description":"End date in ISO 8601 format (YYYY-MM-DDTHH:MM:SSZ)"}},"required":["teamId","startsAt","endsAt"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"mutation CreateCycle($teamId: String!, $name: String, $description: String, $startsAt: DateTime!, $endsAt: DateTime!) { cycleCreate(input: { teamId: $teamId, name: $name, description: $description, startsAt: $startsAt, endsAt: $endsAt }) { success cycle { id number name startsAt endsAt } } }\",\n \"variables\": $sift({\n \"teamId\": arguments.teamId,\n \"name\": arguments.name,\n \"description\": arguments.description,\n \"startsAt\": arguments.startsAt,\n \"endsAt\": arguments.endsAt\n }, function($v) { $v != null })\n}","response":"response.data.cycleCreate.cycle"}},"annotations":{"destructiveHint":true},"requiredScopes":["write"]},{"name":"Update Cycle","description":"Update an existing cycle's properties including name, description, and dates.","slug":"update_cycle","ai_risk":{"level":"medium","score":5,"reasoning":"This tool updates existing cycle properties, representing a standard write operation, hence medium risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Cycle ID to update (required)"},"name":{"type":"string","description":"New cycle name"},"description":{"type":"string","description":"New cycle description"},"startsAt":{"type":"string","description":"New start date (YYYY-MM-DDTHH:MM:SSZ)"},"endsAt":{"type":"string","description":"New end date (YYYY-MM-DDTHH:MM:SSZ)"},"completedAt":{"type":"string","description":"Completion date (YYYY-MM-DDTHH:MM:SSZ) to mark cycle as completed"}},"required":["id"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"mutation UpdateCycle($id: String!, $name: String, $description: String, $startsAt: DateTime, $endsAt: DateTime, $completedAt: DateTime) { cycleUpdate(id: $id, input: { name: $name, description: $description, startsAt: $startsAt, endsAt: $endsAt, completedAt: $completedAt }) { success cycle { id number name startsAt endsAt } } }\",\n \"variables\": $sift({\n \"id\": arguments.id,\n \"name\": arguments.name,\n \"description\": arguments.description,\n \"startsAt\": arguments.startsAt,\n \"endsAt\": arguments.endsAt,\n \"completedAt\": arguments.completedAt\n }, function($v) { $v != null })\n}","response":"response.data.cycleUpdate.cycle"}},"annotations":{"destructiveHint":true},"requiredScopes":["write"]},{"name":"Get Viewer","description":"Get information about the currently authenticated user. Returns user profile including name, email, and team memberships. Useful for understanding the current user's context.","slug":"get_viewer","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves information about the authenticated user, making it read-only and low risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query GetViewer { viewer { id name email displayName avatarUrl admin active createdAt organization { id name urlKey } teamMemberships { nodes { team { id name key } } } } }\"\n}","response":"response.data.viewer"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["read"]},{"name":"List Users","description":"List all users in the workspace. Returns user information including names, emails, and activity status. Use this to get user IDs for assigning issues.","slug":"list_users","ai_risk":{"level":"low","score":1,"reasoning":"This tool fetches a list of users, making it read-only and low risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"first":{"type":"number","description":"Number of users to return (default: 50)","default":50},"includeDisabled":{"type":"boolean","description":"Include disabled users (default: false)","default":false}},"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query ListUsers($first: Int, $includeDisabled: Boolean) { users(first: $first, includeDisabled: $includeDisabled) { nodes { id name email displayName avatarUrl admin active createdAt } } }\",\n \"variables\": {\n \"first\": arguments.first,\n \"includeDisabled\": arguments.includeDisabled\n }\n}","response":"response.data.users.nodes"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"requiredScopes":["read"]},{"name":"List Workflow States","description":"Get all workflow states for a team. Workflow states represent the different stages an issue can be in (e.g., Todo, In Progress, Done). Returns state IDs, names, types, and colors that can be used when creating or updating issues.","slug":"list_workflow_states","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves all workflow states for a team, making it read-only and low risk.","calculated_at":"2026-05-22T20:30:48.289Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team ID to get workflow states for (required)"}},"required":["teamId"],"additionalProperties":false},"action":{"path":"/graphql","method":"POST","mapping":{"body":"{\n \"query\": \"query ListWorkflowStates($teamId: ID!) { workflowStates(filter: { team: { id: { eq: $teamId } } }) { nodes { id name type description color position } } }\",\n \"variables\": {\n \"teamId\": arguments.teamId\n }\n}","response":"response.data.workflowStates.nodes"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["read"]}]}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"linkedin","status":"active","applications":["linkedin"],"definition":{"display":{"name":"LinkedIn","description":"LinkedIn is a professional network. Publish and manage posts, comments and reactions as a member or Company Page, and look up organizations.","icon":"linkedin.svg","website":"https://www.linkedin.com","category":"marketing-growth","docs_url":"https://docs.withwillow.ai/docs/mcp-servers/built-in/linkedin"},"api":{"base_url":"https://api.linkedin.com","headers":{"Linkedin-Version":"202610","X-Restli-Protocol-Version":"2.0.0"}},"auth":{"methods":{"oauth":{"authUrl":"https://www.linkedin.com/oauth/v2/authorization","tokenUrl":"https://www.linkedin.com/oauth/v2/accessToken","scopes":["openid","profile","email","w_member_social","r_member_social","w_organization_social","r_organization_social","r_organization_admin"],"defaultScopes":["openid","profile","email","w_member_social"],"codeExchangeConfig":{"isForm":true,"modelCredentialsMapping":"{\n \"access_token\": access_token,\n \"expires_at\": $fromMillis($millis() + expires_in * 1000),\n \"refresh_token\": refresh_token,\n \"refresh_token_expires_at\": refresh_token_expires_in ? $fromMillis($millis() + refresh_token_expires_in * 1000) : null,\n \"scope\": scope\n }"}}},"default":"oauth"},"tools":[{"name":"Get My Profile","description":"Returns the authenticated member's name, profile picture URL, locale and (if granted) email. The `sub` value is the member id: the person URN is `urn:li:person:{sub}`, which other tools need as an author or actor.","slug":"get_my_profile","enabled":true,"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"action":{"path":"/v2/userinfo","method":"GET","mapping":{"response":"{\n \"sub\": response.sub,\n \"person_urn\": \"urn:li:person:\" & response.sub,\n \"name\": response.name,\n \"given_name\": response.given_name,\n \"family_name\": response.family_name,\n \"picture\": response.picture,\n \"locale\": response.locale,\n \"email\": response.email,\n \"email_verified\": response.email_verified\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["openid","profile"]},{"name":"Create Post","description":"Publishes a post as a member or a Company Page. Text only by default; pass article_url and article_title to attach a link, or reshare_parent to reshare an existing post. LinkedIn returns the new post URN only in the x-restli-id response header, which this tool cannot show, so use List Posts by Author to find it afterwards.","slug":"create_post","enabled":true,"inputSchema":{"type":"object","properties":{"author":{"type":"string","description":"Who posts: `urn:li:person:{id}` (see Get My Profile) or `urn:li:organization:{id}` for a Company Page the member administers."},"commentary":{"type":"string","description":"The post text. Supports hashtags like #coding and mentions like @[Name](urn:li:organization:123)."},"visibility":{"type":"string","description":"Who can see the post. Defaults to PUBLIC."},"article_url":{"type":"string","description":"URL to attach as an article card. Needs article_title."},"article_title":{"type":"string","description":"Title shown on the article card."},"article_description":{"type":"string","description":"Description shown on the article card."},"article_thumbnail":{"type":"string","description":"Optional image URN (`urn:li:image:{id}`) for the card thumbnail."},"reshare_parent":{"type":"string","description":"Post URN (`urn:li:share:{id}` or `urn:li:ugcPost:{id}`) to reshare. Commentary is shown above it."},"is_reshare_disabled":{"type":"boolean","description":"Set true to stop others resharing this post."}},"required":["author","commentary"],"additionalProperties":false},"action":{"path":"/rest/posts","method":"POST","mapping":{"body":"$merge([\n {\n \"author\": arguments.author,\n \"commentary\": arguments.commentary,\n \"visibility\": arguments.visibility ? arguments.visibility : \"PUBLIC\",\n \"distribution\": {\n \"feedDistribution\": \"MAIN_FEED\",\n \"targetEntities\": [],\n \"thirdPartyDistributionChannels\": []\n },\n \"lifecycleState\": \"PUBLISHED\",\n \"isReshareDisabledByAuthor\": arguments.is_reshare_disabled = true\n },\n arguments.article_url ? {\n \"content\": {\n \"article\": $sift({\n \"source\": arguments.article_url,\n \"title\": arguments.article_title,\n \"description\": arguments.article_description,\n \"thumbnail\": arguments.article_thumbnail\n }, function($v) { $v != null })\n }\n } : {},\n arguments.reshare_parent ? {\n \"reshareContext\": { \"parent\": arguments.reshare_parent }\n } : {}\n ])"}},"annotations":{"openWorldHint":true},"risk":"high","requiredScopes":[{"oneOf":["w_member_social","w_organization_social","w_member_social_feed","w_organization_social_feed"]}]},{"name":"Get Post","description":"Gets one post by URN: text, author, visibility, lifecycle state and attached content.","slug":"get_post","enabled":true,"inputSchema":{"type":"object","properties":{"post_urn":{"type":"string","description":"`urn:li:share:{id}` or `urn:li:ugcPost:{id}`."},"view_context":{"type":"string","enum":["READER","AUTHOR"],"description":"READER (default) returns the published version. AUTHOR returns the latest version, including drafts."}},"required":["post_urn"],"additionalProperties":false},"action":{"path":"/rest/posts/{post_urn}","method":"GET","mapping":{"params":"{ \"post_urn\": $encodeUrlComponent(arguments.post_urn) }","query":"$sift({ \"viewContext\": arguments.view_context }, function($v) { $v != null })","response":"response.{\n \"id\": id,\n \"author\": author,\n \"commentary\": commentary,\n \"visibility\": visibility,\n \"lifecycleState\": lifecycleState,\n \"content\": content,\n \"reshareContext\": reshareContext,\n \"isReshareDisabledByAuthor\": isReshareDisabledByAuthor,\n \"createdAt\": createdAt,\n \"publishedAt\": publishedAt,\n \"lastModifiedAt\": lastModifiedAt\n}"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":[{"oneOf":["r_member_social","r_organization_social"]}]},{"name":"List Posts by Author","description":"Lists posts written by a member or Company Page, newest first. Listing a member's posts needs r_member_social and a Page's needs r_organization_social, both granted only to approved apps.","slug":"list_posts_by_author","enabled":true,"inputSchema":{"type":"object","properties":{"author":{"type":"string","description":"`urn:li:person:{id}` or `urn:li:organization:{id}` whose posts to list."},"count":{"type":"number","description":"Posts per page, 1-100. Defaults to 10."},"start":{"type":"number","description":"Index of the first post to return. Defaults to 0."},"sort_by":{"type":"string","enum":["LAST_MODIFIED","CREATED"],"description":"Sort order, descending. Defaults to LAST_MODIFIED."},"view_context":{"type":"string","enum":["READER","AUTHOR"],"description":"READER (default) returns published versions. AUTHOR includes drafts and posts still processing."}},"required":["author"],"additionalProperties":false},"action":{"path":"/rest/posts","method":"GET","mapping":{"query":"$sift({\n \"q\": \"author\",\n \"author\": arguments.author,\n \"count\": arguments.count ? $string(arguments.count) : undefined,\n \"start\": $exists(arguments.start) ? $string(arguments.start) : undefined,\n \"sortBy\": arguments.sort_by,\n \"viewContext\": arguments.view_context\n }, function($v) { $v != null })","response":"{\n \"posts\": response.elements.{\n \"id\": id,\n \"author\": author,\n \"commentary\": commentary,\n \"visibility\": visibility,\n \"lifecycleState\": lifecycleState,\n \"content\": content,\n \"reshareContext\": reshareContext,\n \"isReshareDisabledByAuthor\": isReshareDisabledByAuthor,\n \"createdAt\": createdAt,\n \"publishedAt\": publishedAt,\n \"lastModifiedAt\": lastModifiedAt\n},\n \"paging\": { \"start\": response.paging.start, \"count\": response.paging.count, \"total\": response.paging.total }\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"requiredScopes":[{"oneOf":["r_member_social","r_organization_social"]}]},{"name":"Update Post","description":"Edits the text of an existing post. Only the commentary (and an optional call-to-action) can be changed after publishing.","slug":"update_post","enabled":true,"inputSchema":{"type":"object","properties":{"post_urn":{"type":"string","description":"`urn:li:share:{id}` or `urn:li:ugcPost:{id}`."},"commentary":{"type":"string","description":"The new post text, replacing the old text."}},"required":["post_urn","commentary"],"additionalProperties":false},"action":{"path":"/rest/posts/{post_urn}","method":"POST","mapping":{"params":"{ \"post_urn\": $encodeUrlComponent(arguments.post_urn) }","headers":"{ \"X-RestLi-Method\": \"PARTIAL_UPDATE\" }","body":"{ \"patch\": { \"$set\": { \"commentary\": arguments.commentary } } }"}},"annotations":{"openWorldHint":true},"requiredScopes":[{"oneOf":["w_member_social","w_organization_social","w_member_social_feed","w_organization_social_feed"]}]},{"name":"Delete Post","description":"Deletes a post. Deleting an already deleted post still succeeds.","slug":"delete_post","enabled":true,"inputSchema":{"type":"object","properties":{"post_urn":{"type":"string","description":"`urn:li:share:{id}` or `urn:li:ugcPost:{id}`."}},"required":["post_urn"],"additionalProperties":false},"action":{"path":"/rest/posts/{post_urn}","method":"DELETE","mapping":{"params":"{ \"post_urn\": $encodeUrlComponent(arguments.post_urn) }"}},"annotations":{"destructiveHint":true,"idempotentHint":true},"requiredScopes":[{"oneOf":["w_member_social","w_organization_social","w_member_social_feed","w_organization_social_feed"]}]},{"name":"List Comments","description":"Lists the comments on a post, or the replies to a comment when given a comment URN.","slug":"list_comments","enabled":true,"inputSchema":{"type":"object","properties":{"target_urn":{"type":"string","description":"Post URN (`urn:li:share:{id}` or `urn:li:ugcPost:{id}`), or a comment URN `urn:li:comment:(urn:li:activity:{id},{commentId})` to list its replies."}},"required":["target_urn"],"additionalProperties":false},"action":{"path":"/rest/socialActions/{target_urn}/comments","method":"GET","mapping":{"params":"{ \"target_urn\": $encodeUrlComponent(arguments.target_urn) }","response":"{ \"comments\": response.elements.{\n \"id\": id,\n \"commentUrn\": commentUrn,\n \"actor\": actor,\n \"object\": object,\n \"parentComment\": parentComment,\n \"text\": message.text,\n \"createdAt\": created.time,\n \"totalLikes\": likesSummary.totalLikes\n} }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":[{"oneOf":["r_member_social","r_organization_social","r_member_social_feed","r_organization_social_feed"]}]},{"name":"Get Comment","description":"Gets one comment by its id on a post or on a parent comment.","slug":"get_comment","enabled":true,"inputSchema":{"type":"object","properties":{"target_urn":{"type":"string","description":"Post URN (`urn:li:share:{id}` or `urn:li:ugcPost:{id}`) or parent comment URN the comment sits on."},"comment_id":{"type":"string","description":"The comment id (the `id` field of a comment)."}},"required":["target_urn","comment_id"],"additionalProperties":false},"action":{"path":"/rest/socialActions/{target_urn}/comments/{comment_id}","method":"GET","mapping":{"params":"{ \"target_urn\": $encodeUrlComponent(arguments.target_urn), \"comment_id\": arguments.comment_id }","response":"response.{\n \"id\": id,\n \"commentUrn\": commentUrn,\n \"actor\": actor,\n \"object\": object,\n \"parentComment\": parentComment,\n \"text\": message.text,\n \"createdAt\": created.time,\n \"totalLikes\": likesSummary.totalLikes\n}"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":[{"oneOf":["r_member_social","r_organization_social","r_member_social_feed","r_organization_social_feed"]}]},{"name":"Create Comment","description":"Comments on a post as a member or Company Page. Pass parent_comment to reply to an existing comment. The new comment id is returned only in the x-restli-id response header, so use List Comments to find it.","slug":"create_comment","enabled":true,"inputSchema":{"type":"object","properties":{"post_urn":{"type":"string","description":"`urn:li:share:{id}` or `urn:li:ugcPost:{id}` to comment on."},"actor":{"type":"string","description":"Who comments: `urn:li:person:{id}` or `urn:li:organization:{id}`."},"text":{"type":"string","description":"The comment text."},"parent_comment":{"type":"string","description":"Comment URN `urn:li:comment:(urn:li:activity:{id},{commentId})` to reply to. Omit for a top-level comment."}},"required":["post_urn","actor","text"],"additionalProperties":false},"action":{"path":"/rest/socialActions/{post_urn}/comments","method":"POST","mapping":{"params":"{ \"post_urn\": $encodeUrlComponent(arguments.post_urn) }","body":"$sift({\n \"actor\": arguments.actor,\n \"object\": arguments.post_urn,\n \"message\": { \"text\": arguments.text },\n \"parentComment\": arguments.parent_comment\n }, function($v) { $v != null })"}},"annotations":{"openWorldHint":true},"risk":"high","requiredScopes":[{"oneOf":["w_member_social","w_organization_social","w_member_social_feed","w_organization_social_feed"]}]},{"name":"Edit Comment","description":"Changes the text of a comment. Pass actor only when editing as a Company Page.","slug":"edit_comment","enabled":true,"inputSchema":{"type":"object","properties":{"post_urn":{"type":"string","description":"`urn:li:share:{id}` or `urn:li:ugcPost:{id}` the comment is on."},"comment_id":{"type":"string","description":"The comment id."},"text":{"type":"string","description":"The new comment text."},"actor":{"type":"string","description":"`urn:li:organization:{id}`, only when editing as a Company Page."}},"required":["post_urn","comment_id","text"],"additionalProperties":false},"action":{"path":"/rest/socialActions/{post_urn}/comments/{comment_id}","method":"POST","mapping":{"params":"{ \"post_urn\": $encodeUrlComponent(arguments.post_urn), \"comment_id\": arguments.comment_id }","query":"$sift({ \"actor\": arguments.actor }, function($v) { $v != null })","headers":"{ \"X-RestLi-Method\": \"PARTIAL_UPDATE\" }","body":"{ \"patch\": { \"message\": { \"$set\": { \"text\": arguments.text } } } }","response":"response.{\n \"id\": id,\n \"commentUrn\": commentUrn,\n \"actor\": actor,\n \"object\": object,\n \"parentComment\": parentComment,\n \"text\": message.text,\n \"createdAt\": created.time,\n \"totalLikes\": likesSummary.totalLikes\n}"}},"annotations":{"openWorldHint":true},"requiredScopes":[{"oneOf":["w_member_social","w_organization_social","w_member_social_feed","w_organization_social_feed"]}]},{"name":"Delete Comment","description":"Deletes a comment. Pass actor only when deleting as a Company Page.","slug":"delete_comment","enabled":true,"inputSchema":{"type":"object","properties":{"post_urn":{"type":"string","description":"`urn:li:share:{id}` or `urn:li:ugcPost:{id}` the comment is on."},"comment_id":{"type":"string","description":"The comment id."},"actor":{"type":"string","description":"`urn:li:organization:{id}`, only when deleting as a Company Page."}},"required":["post_urn","comment_id"],"additionalProperties":false},"action":{"path":"/rest/socialActions/{post_urn}/comments/{comment_id}","method":"DELETE","mapping":{"params":"{ \"post_urn\": $encodeUrlComponent(arguments.post_urn), \"comment_id\": arguments.comment_id }","query":"$sift({ \"actor\": arguments.actor }, function($v) { $v != null })"}},"annotations":{"destructiveHint":true,"idempotentHint":true},"requiredScopes":[{"oneOf":["w_member_social","w_organization_social","w_member_social_feed","w_organization_social_feed"]}]},{"name":"List Reactions","description":"Counts and lists reactions (like, celebrate, love, insightful, support, funny) on a post or comment, newest first. Returns `count` and `by_type` for this page; LinkedIn's own paging total is unreliable, so use these to answer how many reactions a post has. When `has_more` is true, call again with `start` advanced by `count`. Set include_reactions to also get each reaction and who reacted.","slug":"list_reactions","enabled":true,"inputSchema":{"type":"object","properties":{"entity_urn":{"type":"string","description":"Post URN (`urn:li:share:{id}`, `urn:li:ugcPost:{id}` or `urn:li:activity:{id}` from the post URL) or comment URN to list reactions on."},"start":{"type":"integer","minimum":0,"description":"Index of the first reaction to return. Default 0."},"count":{"type":"integer","minimum":1,"description":"Reactions per page. Default 100."},"include_reactions":{"type":"boolean","description":"Also return each reaction (type, actor URN, time). Default false, which returns only the counts."}},"required":["entity_urn"],"additionalProperties":false},"action":{"path":"/rest/reactions/(entity:{entity_urn})","method":"GET","mapping":{"params":"{ \"entity_urn\": $encodeUrlComponent(arguments.entity_urn) }","query":"{\n \"q\": \"entity\",\n \"start\": $exists(arguments.start) ? $string(arguments.start) : undefined,\n \"count\": $exists(arguments.count) ? $string(arguments.count) : \"100\"\n }","response":"(\n $page := $exists(arguments.count) ? arguments.count : 100;\n $elements := response.elements[];\n {\n \"count\": $count($elements),\n \"by_type\": $count($elements) > 0 ? $elements{ reactionType: $count(reactionType) } : {},\n \"start\": $exists(arguments.start) ? arguments.start : 0,\n \"has_more\": $count($elements) >= $page,\n \"reactions\": arguments.include_reactions = true ? $elements.{\n \"id\": id,\n \"reactionType\": reactionType,\n \"root\": root,\n \"actor\": created.actor,\n \"createdAt\": created.time\n} : undefined\n }\n )"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":[{"oneOf":["w_member_social","w_organization_social","w_member_social_feed","w_organization_social_feed","r_member_social","r_organization_social","r_member_social_feed","r_organization_social_feed"]}]},{"name":"Create Reaction","description":"Reacts to a post or comment as a member or Company Page. LIKE is the thumbs-up; PRAISE is Celebrate, EMPATHY is Love, INTEREST is Insightful, APPRECIATION is Support, ENTERTAINMENT is Funny.","slug":"create_reaction","enabled":true,"inputSchema":{"type":"object","properties":{"actor":{"type":"string","description":"Who reacts: `urn:li:person:{id}` or `urn:li:organization:{id}`."},"entity_urn":{"type":"string","description":"Post URN (`urn:li:share:{id}` or `urn:li:ugcPost:{id}`) or comment URN to react to."},"reaction_type":{"type":"string","enum":["LIKE","PRAISE","EMPATHY","INTEREST","APPRECIATION","ENTERTAINMENT"],"description":"The reaction to add."}},"required":["actor","entity_urn","reaction_type"],"additionalProperties":false},"action":{"path":"/rest/reactions","method":"POST","mapping":{"query":"{ \"actor\": arguments.actor }","body":"{ \"root\": arguments.entity_urn, \"reactionType\": arguments.reaction_type }","response":"response.{\n \"id\": id,\n \"reactionType\": reactionType,\n \"root\": root,\n \"actor\": created.actor,\n \"createdAt\": created.time\n}"}},"annotations":{"openWorldHint":true},"requiredScopes":[{"oneOf":["w_member_social","w_organization_social","w_member_social_feed","w_organization_social_feed"]}]},{"name":"Delete Reaction","description":"Removes the actor's reaction from a post or comment.","slug":"delete_reaction","enabled":true,"inputSchema":{"type":"object","properties":{"actor":{"type":"string","description":"Who reacted: `urn:li:person:{id}` or `urn:li:organization:{id}`."},"entity_urn":{"type":"string","description":"Post URN (`urn:li:share:{id}` or `urn:li:ugcPost:{id}`) or comment URN the reaction is on."}},"required":["actor","entity_urn"],"additionalProperties":false},"action":{"path":"/rest/reactions/(actor:{actor},entity:{entity_urn})","method":"DELETE","mapping":{"params":"{\n \"actor\": $encodeUrlComponent(arguments.actor),\n \"entity_urn\": $encodeUrlComponent(arguments.entity_urn)\n }"}},"annotations":{"destructiveHint":true,"idempotentHint":true},"requiredScopes":[{"oneOf":["w_member_social","w_organization_social","w_member_social_feed","w_organization_social_feed"]}]},{"name":"Get Social Metadata","description":"Gets engagement totals for a post or comment: reaction counts by type, comment counts, and whether comments are open or closed.","slug":"get_social_metadata","enabled":true,"inputSchema":{"type":"object","properties":{"entity_urn":{"type":"string","description":"Post URN (`urn:li:share:{id}` or `urn:li:ugcPost:{id}`) or comment URN."}},"required":["entity_urn"],"additionalProperties":false},"action":{"path":"/rest/socialMetadata/{entity_urn}","method":"GET","mapping":{"params":"{ \"entity_urn\": $encodeUrlComponent(arguments.entity_urn) }","response":"{\n \"entity\": response.entity,\n \"commentsState\": response.commentsState,\n \"commentSummary\": response.commentSummary,\n \"reactionSummaries\": response.reactionSummaries\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":[{"oneOf":["r_member_social","r_organization_social","r_member_social_feed","r_organization_social_feed"]}]},{"name":"Set Comments State","description":"Opens or closes comments on a post. Closing comments deletes all existing comments on it; reactions are kept.","slug":"set_comments_state","enabled":true,"inputSchema":{"type":"object","properties":{"post_urn":{"type":"string","description":"`urn:li:share:{id}` or `urn:li:ugcPost:{id}`."},"actor":{"type":"string","description":"Who changes it: `urn:li:person:{id}` or `urn:li:organization:{id}`."},"comments_state":{"type":"string","enum":["OPEN","CLOSED"],"description":"CLOSED turns comments off and deletes existing ones."}},"required":["post_urn","actor","comments_state"],"additionalProperties":false},"action":{"path":"/rest/socialMetadata/{post_urn}","method":"POST","mapping":{"params":"{ \"post_urn\": $encodeUrlComponent(arguments.post_urn) }","query":"{ \"actor\": arguments.actor }","body":"{ \"patch\": { \"$set\": { \"commentsState\": arguments.comments_state } } }"}},"annotations":{"destructiveHint":true,"idempotentHint":true},"requiredScopes":[{"oneOf":["w_member_social","w_organization_social","w_member_social_feed","w_organization_social_feed"]}]},{"name":"List My Organization Roles","description":"Lists the Company Pages the authenticated member has a role on, with the role and its state. Use it to find organization URNs to post as.","slug":"list_my_organization_roles","enabled":true,"inputSchema":{"type":"object","properties":{"role":{"type":"string","description":"Only this role, e.g. ADMINISTRATOR or DIRECT_SPONSORED_CONTENT_POSTER."},"state":{"type":"string","description":"Only this role state, e.g. APPROVED or REQUESTED."},"count":{"type":"number","description":"Results per page. Defaults to 10."},"start":{"type":"number","description":"Index of the first result. Defaults to 0."}},"additionalProperties":false},"action":{"path":"/rest/organizationAcls","method":"GET","mapping":{"query":"$sift({\n \"q\": \"roleAssignee\",\n \"role\": arguments.role,\n \"state\": arguments.state,\n \"count\": arguments.count ? $string(arguments.count) : undefined,\n \"start\": $exists(arguments.start) ? $string(arguments.start) : undefined\n }, function($v) { $v != null })","response":"{\n \"roles\": response.elements.{\n \"organization\": organization ? organization : organizationTarget,\n \"role\": role,\n \"state\": state,\n \"roleAssignee\": roleAssignee\n },\n \"paging\": { \"start\": response.paging.start, \"count\": response.paging.count }\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":[{"oneOf":["r_organization_admin","rw_organization_admin"]}]},{"name":"List Organization Roles","description":"Lists who has which role on a Company Page, such as its administrators.","slug":"list_organization_roles","enabled":true,"inputSchema":{"type":"object","properties":{"organization":{"type":"string","description":"Organization URN, `urn:li:organization:{id}`."},"role":{"type":"string","description":"Only this role, e.g. ADMINISTRATOR."},"state":{"type":"string","description":"Only this role state, e.g. APPROVED."},"count":{"type":"number","description":"Results per page. Defaults to 10."},"start":{"type":"number","description":"Index of the first result. Defaults to 0."}},"required":["organization"],"additionalProperties":false},"action":{"path":"/rest/organizationAcls","method":"GET","mapping":{"query":"$sift({\n \"q\": \"organization\",\n \"organization\": arguments.organization,\n \"role\": arguments.role,\n \"state\": arguments.state,\n \"count\": arguments.count ? $string(arguments.count) : undefined,\n \"start\": $exists(arguments.start) ? $string(arguments.start) : undefined\n }, function($v) { $v != null })","response":"{\n \"roles\": response.elements.{\n \"organization\": organization ? organization : organizationTarget,\n \"role\": role,\n \"state\": state,\n \"roleAssignee\": roleAssignee\n },\n \"paging\": { \"start\": response.paging.start, \"count\": response.paging.count }\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":[{"oneOf":["r_organization_admin","rw_organization_admin"]}]},{"name":"Get Organization","description":"Gets a Company Page by numeric id. Full details need the member to be an ADMINISTRATOR of that page; otherwise LinkedIn answers 403 and Find Organization by Vanity Name returns the public fields.","slug":"get_organization","enabled":true,"inputSchema":{"type":"object","properties":{"organization_id":{"type":"string","description":"Numeric organization id, e.g. 2414183."}},"required":["organization_id"],"additionalProperties":false},"action":{"path":"/rest/organizations/{organization_id}","method":"GET","mapping":{"params":"{ \"organization_id\": arguments.organization_id }","response":"{\n \"id\": response.id,\n \"urn\": \"urn:li:organization:\" & $string(response.id),\n \"name\": response.localizedName,\n \"vanityName\": response.vanityName,\n \"website\": response.localizedWebsite,\n \"description\": response.localizedDescription,\n \"staffCountRange\": response.staffCountRange,\n \"industries\": response.industries,\n \"organizationType\": response.organizationType,\n \"primaryOrganizationType\": response.primaryOrganizationType,\n \"specialties\": response.localizedSpecialties\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Find Organization by Vanity Name","description":"Finds a Company Page or school by the vanity name in its URL (linkedin.com/company/{vanityName}). Returns public fields and the numeric id used to build `urn:li:organization:{id}`.","slug":"find_organization_by_vanity_name","enabled":true,"inputSchema":{"type":"object","properties":{"vanity_name":{"type":"string","description":"The vanity name, e.g. `linkedin` or `boisestate`."}},"required":["vanity_name"],"additionalProperties":false},"action":{"path":"/rest/organizations","method":"GET","mapping":{"query":"{ \"q\": \"vanityName\", \"vanityName\": arguments.vanity_name }","response":"{\n \"organizations\": response.elements.{\n \"id\": id,\n \"urn\": \"urn:li:organization:\" & $string(id),\n \"name\": localizedName,\n \"vanityName\": vanityName,\n \"website\": localizedWebsite,\n \"primaryOrganizationType\": primaryOrganizationType\n }\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true}},{"name":"Get Organization Follower Count","description":"Gets how many members follow a Company Page.","slug":"get_organization_follower_count","enabled":true,"inputSchema":{"type":"object","properties":{"organization":{"type":"string","description":"Organization URN, `urn:li:organization:{id}`."}},"required":["organization"],"additionalProperties":false},"action":{"path":"/rest/networkSizes/{organization}","method":"GET","mapping":{"params":"{ \"organization\": $encodeUrlComponent(arguments.organization) }","query":"{ \"edgeType\": \"COMPANY_FOLLOWED_BY_MEMBER\" }","response":"{ \"followers\": response.firstDegreeSize }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}}]}}
|
|
1
|
+
{"id":"linkedin","status":"active","applications":["linkedin"],"definition":{"display":{"name":"LinkedIn","description":"LinkedIn is a professional network. Publish and manage posts, comments and reactions as a member or Company Page, and look up organizations.","icon":"linkedin.svg","website":"https://www.linkedin.com","category":"marketing-growth","docs_url":"https://docs.withwillow.ai/docs/mcp-servers/built-in/linkedin"},"api":{"base_url":"https://api.linkedin.com","headers":{"Linkedin-Version":"202610","X-Restli-Protocol-Version":"2.0.0"}},"auth":{"methods":{"oauth":{"authUrl":"https://www.linkedin.com/oauth/v2/authorization","tokenUrl":"https://www.linkedin.com/oauth/v2/accessToken","scopes":["openid","profile","email","w_member_social","r_member_social","w_organization_social","r_organization_social","r_organization_admin"],"defaultScopes":["openid","profile","email","w_member_social"],"scopeTemplates":[{"id":"read-only","name":"Profile only","description":"Sign in and read the member's profile and email. Can't post, comment or react.","scopes":["openid","profile","email"]},{"id":"member-posting","name":"Post as the member","description":"Read the member's profile and create, edit and delete their posts, comments and reactions. Works on every LinkedIn app.","scopes":["openid","profile","email","w_member_social"]},{"id":"full-access","name":"Full access","description":"Also read posts and comments, post as a Company Page and manage organizations. Needs LinkedIn to approve the Community Management API on your app first.","scopes":["openid","profile","email","w_member_social","r_member_social","w_organization_social","r_organization_social","r_organization_admin"]}],"codeExchangeConfig":{"isForm":true,"modelCredentialsMapping":"{\n \"access_token\": access_token,\n \"expires_at\": $fromMillis($millis() + expires_in * 1000),\n \"refresh_token\": refresh_token,\n \"refresh_token_expires_at\": refresh_token_expires_in ? $fromMillis($millis() + refresh_token_expires_in * 1000) : null,\n \"scope\": scope\n }"}}},"default":"oauth"},"tools":[{"name":"Get My Profile","description":"Returns the authenticated member's name, profile picture URL, locale and (if granted) email. The `sub` value is the member id: the person URN is `urn:li:person:{sub}`, which other tools need as an author or actor.","slug":"get_my_profile","enabled":true,"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"action":{"path":"/v2/userinfo","method":"GET","mapping":{"response":"{\n \"sub\": response.sub,\n \"person_urn\": \"urn:li:person:\" & response.sub,\n \"name\": response.name,\n \"given_name\": response.given_name,\n \"family_name\": response.family_name,\n \"picture\": response.picture,\n \"locale\": response.locale,\n \"email\": response.email,\n \"email_verified\": response.email_verified\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["openid","profile"]},{"name":"Create Post","description":"Publishes a post as a member or a Company Page. Text only by default; pass article_url and article_title to attach a link, or reshare_parent to reshare an existing post. LinkedIn returns the new post URN only in the x-restli-id response header, which this tool cannot show, so use List Posts by Author to find it afterwards.","slug":"create_post","enabled":true,"inputSchema":{"type":"object","properties":{"author":{"type":"string","description":"Who posts: `urn:li:person:{id}` (see Get My Profile) or `urn:li:organization:{id}` for a Company Page the member administers."},"commentary":{"type":"string","description":"The post text. Supports hashtags like #coding and mentions like @[Name](urn:li:organization:123)."},"visibility":{"type":"string","description":"Who can see the post. Defaults to PUBLIC."},"article_url":{"type":"string","description":"URL to attach as an article card. Needs article_title."},"article_title":{"type":"string","description":"Title shown on the article card."},"article_description":{"type":"string","description":"Description shown on the article card."},"article_thumbnail":{"type":"string","description":"Optional image URN (`urn:li:image:{id}`) for the card thumbnail."},"reshare_parent":{"type":"string","description":"Post URN (`urn:li:share:{id}` or `urn:li:ugcPost:{id}`) to reshare. Commentary is shown above it."},"is_reshare_disabled":{"type":"boolean","description":"Set true to stop others resharing this post."}},"required":["author","commentary"],"additionalProperties":false},"action":{"path":"/rest/posts","method":"POST","mapping":{"body":"$merge([\n {\n \"author\": arguments.author,\n \"commentary\": arguments.commentary,\n \"visibility\": arguments.visibility ? arguments.visibility : \"PUBLIC\",\n \"distribution\": {\n \"feedDistribution\": \"MAIN_FEED\",\n \"targetEntities\": [],\n \"thirdPartyDistributionChannels\": []\n },\n \"lifecycleState\": \"PUBLISHED\",\n \"isReshareDisabledByAuthor\": arguments.is_reshare_disabled = true\n },\n arguments.article_url ? {\n \"content\": {\n \"article\": $sift({\n \"source\": arguments.article_url,\n \"title\": arguments.article_title,\n \"description\": arguments.article_description,\n \"thumbnail\": arguments.article_thumbnail\n }, function($v) { $v != null })\n }\n } : {},\n arguments.reshare_parent ? {\n \"reshareContext\": { \"parent\": arguments.reshare_parent }\n } : {}\n ])"}},"annotations":{"openWorldHint":true},"risk":"high","requiredScopes":[{"oneOf":["w_member_social","w_organization_social","w_member_social_feed","w_organization_social_feed"]}]},{"name":"Get Post","description":"Gets one post by URN: text, author, visibility, lifecycle state and attached content. Requires the Community Management API product on the LinkedIn app.","slug":"get_post","enabled":false,"inputSchema":{"type":"object","properties":{"post_urn":{"type":"string","description":"`urn:li:share:{id}` or `urn:li:ugcPost:{id}`."},"view_context":{"type":"string","enum":["READER","AUTHOR"],"description":"READER (default) returns the published version. AUTHOR returns the latest version, including drafts."}},"required":["post_urn"],"additionalProperties":false},"action":{"path":"/rest/posts/{post_urn}","method":"GET","mapping":{"params":"{ \"post_urn\": $encodeUrlComponent(arguments.post_urn) }","query":"$sift({ \"viewContext\": arguments.view_context }, function($v) { $v != null })","response":"response.{\n \"id\": id,\n \"author\": author,\n \"commentary\": commentary,\n \"visibility\": visibility,\n \"lifecycleState\": lifecycleState,\n \"content\": content,\n \"reshareContext\": reshareContext,\n \"isReshareDisabledByAuthor\": isReshareDisabledByAuthor,\n \"createdAt\": createdAt,\n \"publishedAt\": publishedAt,\n \"lastModifiedAt\": lastModifiedAt\n}"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":[{"oneOf":["r_member_social","r_organization_social"]}]},{"name":"List Posts by Author","description":"Lists posts written by a member or Company Page, newest first. Listing a member's posts needs r_member_social and a Page's needs r_organization_social, both granted only to approved apps. Requires the Community Management API product on the LinkedIn app.","slug":"list_posts_by_author","enabled":false,"inputSchema":{"type":"object","properties":{"author":{"type":"string","description":"`urn:li:person:{id}` or `urn:li:organization:{id}` whose posts to list."},"count":{"type":"number","description":"Posts per page, 1-100. Defaults to 10."},"start":{"type":"number","description":"Index of the first post to return. Defaults to 0."},"sort_by":{"type":"string","enum":["LAST_MODIFIED","CREATED"],"description":"Sort order, descending. Defaults to LAST_MODIFIED."},"view_context":{"type":"string","enum":["READER","AUTHOR"],"description":"READER (default) returns published versions. AUTHOR includes drafts and posts still processing."}},"required":["author"],"additionalProperties":false},"action":{"path":"/rest/posts","method":"GET","mapping":{"query":"$sift({\n \"q\": \"author\",\n \"author\": arguments.author,\n \"count\": arguments.count ? $string(arguments.count) : undefined,\n \"start\": $exists(arguments.start) ? $string(arguments.start) : undefined,\n \"sortBy\": arguments.sort_by,\n \"viewContext\": arguments.view_context\n }, function($v) { $v != null })","response":"{\n \"posts\": response.elements.{\n \"id\": id,\n \"author\": author,\n \"commentary\": commentary,\n \"visibility\": visibility,\n \"lifecycleState\": lifecycleState,\n \"content\": content,\n \"reshareContext\": reshareContext,\n \"isReshareDisabledByAuthor\": isReshareDisabledByAuthor,\n \"createdAt\": createdAt,\n \"publishedAt\": publishedAt,\n \"lastModifiedAt\": lastModifiedAt\n},\n \"paging\": { \"start\": response.paging.start, \"count\": response.paging.count, \"total\": response.paging.total }\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"requiredScopes":[{"oneOf":["r_member_social","r_organization_social"]}]},{"name":"Update Post","description":"Edits the text of an existing post. Only the commentary (and an optional call-to-action) can be changed after publishing.","slug":"update_post","enabled":true,"inputSchema":{"type":"object","properties":{"post_urn":{"type":"string","description":"`urn:li:share:{id}` or `urn:li:ugcPost:{id}`."},"commentary":{"type":"string","description":"The new post text, replacing the old text."}},"required":["post_urn","commentary"],"additionalProperties":false},"action":{"path":"/rest/posts/{post_urn}","method":"POST","mapping":{"params":"{ \"post_urn\": $encodeUrlComponent(arguments.post_urn) }","headers":"{ \"X-RestLi-Method\": \"PARTIAL_UPDATE\" }","body":"{ \"patch\": { \"$set\": { \"commentary\": arguments.commentary } } }"}},"annotations":{"openWorldHint":true},"requiredScopes":[{"oneOf":["w_member_social","w_organization_social","w_member_social_feed","w_organization_social_feed"]}]},{"name":"Delete Post","description":"Deletes a post. Deleting an already deleted post still succeeds.","slug":"delete_post","enabled":true,"inputSchema":{"type":"object","properties":{"post_urn":{"type":"string","description":"`urn:li:share:{id}` or `urn:li:ugcPost:{id}`."}},"required":["post_urn"],"additionalProperties":false},"action":{"path":"/rest/posts/{post_urn}","method":"DELETE","mapping":{"params":"{ \"post_urn\": $encodeUrlComponent(arguments.post_urn) }"}},"annotations":{"destructiveHint":true,"idempotentHint":true},"requiredScopes":[{"oneOf":["w_member_social","w_organization_social","w_member_social_feed","w_organization_social_feed"]}]},{"name":"List Comments","description":"Lists the comments on a post, or the replies to a comment when given a comment URN. Requires the Community Management API product on the LinkedIn app.","slug":"list_comments","enabled":false,"inputSchema":{"type":"object","properties":{"target_urn":{"type":"string","description":"Post URN (`urn:li:share:{id}` or `urn:li:ugcPost:{id}`), or a comment URN `urn:li:comment:(urn:li:activity:{id},{commentId})` to list its replies."}},"required":["target_urn"],"additionalProperties":false},"action":{"path":"/rest/socialActions/{target_urn}/comments","method":"GET","mapping":{"params":"{ \"target_urn\": $encodeUrlComponent(arguments.target_urn) }","response":"{ \"comments\": response.elements.{\n \"id\": id,\n \"commentUrn\": commentUrn,\n \"actor\": actor,\n \"object\": object,\n \"parentComment\": parentComment,\n \"text\": message.text,\n \"createdAt\": created.time,\n \"totalLikes\": likesSummary.totalLikes\n} }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":[{"oneOf":["r_member_social","r_organization_social","r_member_social_feed","r_organization_social_feed"]}]},{"name":"Get Comment","description":"Gets one comment by its id on a post or on a parent comment. Requires the Community Management API product on the LinkedIn app.","slug":"get_comment","enabled":false,"inputSchema":{"type":"object","properties":{"target_urn":{"type":"string","description":"Post URN (`urn:li:share:{id}` or `urn:li:ugcPost:{id}`) or parent comment URN the comment sits on."},"comment_id":{"type":"string","description":"The comment id (the `id` field of a comment)."}},"required":["target_urn","comment_id"],"additionalProperties":false},"action":{"path":"/rest/socialActions/{target_urn}/comments/{comment_id}","method":"GET","mapping":{"params":"{ \"target_urn\": $encodeUrlComponent(arguments.target_urn), \"comment_id\": arguments.comment_id }","response":"response.{\n \"id\": id,\n \"commentUrn\": commentUrn,\n \"actor\": actor,\n \"object\": object,\n \"parentComment\": parentComment,\n \"text\": message.text,\n \"createdAt\": created.time,\n \"totalLikes\": likesSummary.totalLikes\n}"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":[{"oneOf":["r_member_social","r_organization_social","r_member_social_feed","r_organization_social_feed"]}]},{"name":"Create Comment","description":"Comments on a post as a member or Company Page. Pass parent_comment to reply to an existing comment. The new comment id is returned only in the x-restli-id response header, so use List Comments to find it.","slug":"create_comment","enabled":true,"inputSchema":{"type":"object","properties":{"post_urn":{"type":"string","description":"`urn:li:share:{id}` or `urn:li:ugcPost:{id}` to comment on."},"actor":{"type":"string","description":"Who comments: `urn:li:person:{id}` or `urn:li:organization:{id}`."},"text":{"type":"string","description":"The comment text."},"parent_comment":{"type":"string","description":"Comment URN `urn:li:comment:(urn:li:activity:{id},{commentId})` to reply to. Omit for a top-level comment."}},"required":["post_urn","actor","text"],"additionalProperties":false},"action":{"path":"/rest/socialActions/{post_urn}/comments","method":"POST","mapping":{"params":"{ \"post_urn\": $encodeUrlComponent(arguments.post_urn) }","body":"$sift({\n \"actor\": arguments.actor,\n \"object\": arguments.post_urn,\n \"message\": { \"text\": arguments.text },\n \"parentComment\": arguments.parent_comment\n }, function($v) { $v != null })"}},"annotations":{"openWorldHint":true},"risk":"high","requiredScopes":[{"oneOf":["w_member_social","w_organization_social","w_member_social_feed","w_organization_social_feed"]}]},{"name":"Edit Comment","description":"Changes the text of a comment. Pass actor only when editing as a Company Page.","slug":"edit_comment","enabled":true,"inputSchema":{"type":"object","properties":{"post_urn":{"type":"string","description":"`urn:li:share:{id}` or `urn:li:ugcPost:{id}` the comment is on."},"comment_id":{"type":"string","description":"The comment id."},"text":{"type":"string","description":"The new comment text."},"actor":{"type":"string","description":"`urn:li:organization:{id}`, only when editing as a Company Page."}},"required":["post_urn","comment_id","text"],"additionalProperties":false},"action":{"path":"/rest/socialActions/{post_urn}/comments/{comment_id}","method":"POST","mapping":{"params":"{ \"post_urn\": $encodeUrlComponent(arguments.post_urn), \"comment_id\": arguments.comment_id }","query":"$sift({ \"actor\": arguments.actor }, function($v) { $v != null })","headers":"{ \"X-RestLi-Method\": \"PARTIAL_UPDATE\" }","body":"{ \"patch\": { \"message\": { \"$set\": { \"text\": arguments.text } } } }","response":"response.{\n \"id\": id,\n \"commentUrn\": commentUrn,\n \"actor\": actor,\n \"object\": object,\n \"parentComment\": parentComment,\n \"text\": message.text,\n \"createdAt\": created.time,\n \"totalLikes\": likesSummary.totalLikes\n}"}},"annotations":{"openWorldHint":true},"requiredScopes":[{"oneOf":["w_member_social","w_organization_social","w_member_social_feed","w_organization_social_feed"]}]},{"name":"Delete Comment","description":"Deletes a comment. Pass actor only when deleting as a Company Page.","slug":"delete_comment","enabled":true,"inputSchema":{"type":"object","properties":{"post_urn":{"type":"string","description":"`urn:li:share:{id}` or `urn:li:ugcPost:{id}` the comment is on."},"comment_id":{"type":"string","description":"The comment id."},"actor":{"type":"string","description":"`urn:li:organization:{id}`, only when deleting as a Company Page."}},"required":["post_urn","comment_id"],"additionalProperties":false},"action":{"path":"/rest/socialActions/{post_urn}/comments/{comment_id}","method":"DELETE","mapping":{"params":"{ \"post_urn\": $encodeUrlComponent(arguments.post_urn), \"comment_id\": arguments.comment_id }","query":"$sift({ \"actor\": arguments.actor }, function($v) { $v != null })"}},"annotations":{"destructiveHint":true,"idempotentHint":true},"requiredScopes":[{"oneOf":["w_member_social","w_organization_social","w_member_social_feed","w_organization_social_feed"]}]},{"name":"List Reactions","description":"Counts and lists reactions (like, celebrate, love, insightful, support, funny) on a post or comment, newest first. Returns `count` and `by_type` for this page; LinkedIn's own paging total is unreliable, so use these to answer how many reactions a post has. When `has_more` is true, call again with `start` advanced by `count`. Set include_reactions to also get each reaction and who reacted.","slug":"list_reactions","enabled":true,"inputSchema":{"type":"object","properties":{"entity_urn":{"type":"string","description":"Post URN (`urn:li:share:{id}`, `urn:li:ugcPost:{id}` or `urn:li:activity:{id}` from the post URL) or comment URN to list reactions on."},"start":{"type":"integer","minimum":0,"description":"Index of the first reaction to return. Default 0."},"count":{"type":"integer","minimum":1,"description":"Reactions per page. Default 100."},"include_reactions":{"type":"boolean","description":"Also return each reaction (type, actor URN, time). Default false, which returns only the counts."}},"required":["entity_urn"],"additionalProperties":false},"action":{"path":"/rest/reactions/(entity:{entity_urn})","method":"GET","mapping":{"params":"{ \"entity_urn\": $encodeUrlComponent(arguments.entity_urn) }","query":"{\n \"q\": \"entity\",\n \"start\": $exists(arguments.start) ? $string(arguments.start) : undefined,\n \"count\": $exists(arguments.count) ? $string(arguments.count) : \"100\"\n }","response":"(\n $page := $exists(arguments.count) ? arguments.count : 100;\n $elements := response.elements[];\n {\n \"count\": $count($elements),\n \"by_type\": $count($elements) > 0 ? $elements{ reactionType: $count(reactionType) } : {},\n \"start\": $exists(arguments.start) ? arguments.start : 0,\n \"has_more\": $count($elements) >= $page,\n \"reactions\": arguments.include_reactions = true ? $elements.{\n \"id\": id,\n \"reactionType\": reactionType,\n \"root\": root,\n \"actor\": created.actor,\n \"createdAt\": created.time\n} : undefined\n }\n )"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":[{"oneOf":["w_member_social","w_organization_social","w_member_social_feed","w_organization_social_feed","r_member_social","r_organization_social","r_member_social_feed","r_organization_social_feed"]}]},{"name":"Create Reaction","description":"Reacts to a post or comment as a member or Company Page. LIKE is the thumbs-up; PRAISE is Celebrate, EMPATHY is Love, INTEREST is Insightful, APPRECIATION is Support, ENTERTAINMENT is Funny.","slug":"create_reaction","enabled":true,"inputSchema":{"type":"object","properties":{"actor":{"type":"string","description":"Who reacts: `urn:li:person:{id}` or `urn:li:organization:{id}`."},"entity_urn":{"type":"string","description":"Post URN (`urn:li:share:{id}` or `urn:li:ugcPost:{id}`) or comment URN to react to."},"reaction_type":{"type":"string","enum":["LIKE","PRAISE","EMPATHY","INTEREST","APPRECIATION","ENTERTAINMENT"],"description":"The reaction to add."}},"required":["actor","entity_urn","reaction_type"],"additionalProperties":false},"action":{"path":"/rest/reactions","method":"POST","mapping":{"query":"{ \"actor\": arguments.actor }","body":"{ \"root\": arguments.entity_urn, \"reactionType\": arguments.reaction_type }","response":"response.{\n \"id\": id,\n \"reactionType\": reactionType,\n \"root\": root,\n \"actor\": created.actor,\n \"createdAt\": created.time\n}"}},"annotations":{"openWorldHint":true},"requiredScopes":[{"oneOf":["w_member_social","w_organization_social","w_member_social_feed","w_organization_social_feed"]}]},{"name":"Delete Reaction","description":"Removes the actor's reaction from a post or comment.","slug":"delete_reaction","enabled":true,"inputSchema":{"type":"object","properties":{"actor":{"type":"string","description":"Who reacted: `urn:li:person:{id}` or `urn:li:organization:{id}`."},"entity_urn":{"type":"string","description":"Post URN (`urn:li:share:{id}` or `urn:li:ugcPost:{id}`) or comment URN the reaction is on."}},"required":["actor","entity_urn"],"additionalProperties":false},"action":{"path":"/rest/reactions/(actor:{actor},entity:{entity_urn})","method":"DELETE","mapping":{"params":"{\n \"actor\": $encodeUrlComponent(arguments.actor),\n \"entity_urn\": $encodeUrlComponent(arguments.entity_urn)\n }"}},"annotations":{"destructiveHint":true,"idempotentHint":true},"requiredScopes":[{"oneOf":["w_member_social","w_organization_social","w_member_social_feed","w_organization_social_feed"]}]},{"name":"Get Social Metadata","description":"Gets engagement totals for a post or comment: reaction counts by type, comment counts, and whether comments are open or closed. Requires the Community Management API product on the LinkedIn app.","slug":"get_social_metadata","enabled":false,"inputSchema":{"type":"object","properties":{"entity_urn":{"type":"string","description":"Post URN (`urn:li:share:{id}` or `urn:li:ugcPost:{id}`) or comment URN."}},"required":["entity_urn"],"additionalProperties":false},"action":{"path":"/rest/socialMetadata/{entity_urn}","method":"GET","mapping":{"params":"{ \"entity_urn\": $encodeUrlComponent(arguments.entity_urn) }","response":"{\n \"entity\": response.entity,\n \"commentsState\": response.commentsState,\n \"commentSummary\": response.commentSummary,\n \"reactionSummaries\": response.reactionSummaries\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":[{"oneOf":["r_member_social","r_organization_social","r_member_social_feed","r_organization_social_feed"]}]},{"name":"Set Comments State","description":"Opens or closes comments on a post. Closing comments deletes all existing comments on it; reactions are kept.","slug":"set_comments_state","enabled":true,"inputSchema":{"type":"object","properties":{"post_urn":{"type":"string","description":"`urn:li:share:{id}` or `urn:li:ugcPost:{id}`."},"actor":{"type":"string","description":"Who changes it: `urn:li:person:{id}` or `urn:li:organization:{id}`."},"comments_state":{"type":"string","enum":["OPEN","CLOSED"],"description":"CLOSED turns comments off and deletes existing ones."}},"required":["post_urn","actor","comments_state"],"additionalProperties":false},"action":{"path":"/rest/socialMetadata/{post_urn}","method":"POST","mapping":{"params":"{ \"post_urn\": $encodeUrlComponent(arguments.post_urn) }","query":"{ \"actor\": arguments.actor }","body":"{ \"patch\": { \"$set\": { \"commentsState\": arguments.comments_state } } }"}},"annotations":{"destructiveHint":true,"idempotentHint":true},"requiredScopes":[{"oneOf":["w_member_social","w_organization_social","w_member_social_feed","w_organization_social_feed"]}]},{"name":"List My Organization Roles","description":"Lists the Company Pages the authenticated member has a role on, with the role and its state. Use it to find organization URNs to post as. Requires the Community Management API product on the LinkedIn app.","slug":"list_my_organization_roles","enabled":false,"inputSchema":{"type":"object","properties":{"role":{"type":"string","description":"Only this role, e.g. ADMINISTRATOR or DIRECT_SPONSORED_CONTENT_POSTER."},"state":{"type":"string","description":"Only this role state, e.g. APPROVED or REQUESTED."},"count":{"type":"number","description":"Results per page. Defaults to 10."},"start":{"type":"number","description":"Index of the first result. Defaults to 0."}},"additionalProperties":false},"action":{"path":"/rest/organizationAcls","method":"GET","mapping":{"query":"$sift({\n \"q\": \"roleAssignee\",\n \"role\": arguments.role,\n \"state\": arguments.state,\n \"count\": arguments.count ? $string(arguments.count) : undefined,\n \"start\": $exists(arguments.start) ? $string(arguments.start) : undefined\n }, function($v) { $v != null })","response":"{\n \"roles\": response.elements.{\n \"organization\": organization ? organization : organizationTarget,\n \"role\": role,\n \"state\": state,\n \"roleAssignee\": roleAssignee\n },\n \"paging\": { \"start\": response.paging.start, \"count\": response.paging.count }\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":[{"oneOf":["r_organization_admin","rw_organization_admin"]}]},{"name":"List Organization Roles","description":"Lists who has which role on a Company Page, such as its administrators. Requires the Community Management API product on the LinkedIn app.","slug":"list_organization_roles","enabled":false,"inputSchema":{"type":"object","properties":{"organization":{"type":"string","description":"Organization URN, `urn:li:organization:{id}`."},"role":{"type":"string","description":"Only this role, e.g. ADMINISTRATOR."},"state":{"type":"string","description":"Only this role state, e.g. APPROVED."},"count":{"type":"number","description":"Results per page. Defaults to 10."},"start":{"type":"number","description":"Index of the first result. Defaults to 0."}},"required":["organization"],"additionalProperties":false},"action":{"path":"/rest/organizationAcls","method":"GET","mapping":{"query":"$sift({\n \"q\": \"organization\",\n \"organization\": arguments.organization,\n \"role\": arguments.role,\n \"state\": arguments.state,\n \"count\": arguments.count ? $string(arguments.count) : undefined,\n \"start\": $exists(arguments.start) ? $string(arguments.start) : undefined\n }, function($v) { $v != null })","response":"{\n \"roles\": response.elements.{\n \"organization\": organization ? organization : organizationTarget,\n \"role\": role,\n \"state\": state,\n \"roleAssignee\": roleAssignee\n },\n \"paging\": { \"start\": response.paging.start, \"count\": response.paging.count }\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":[{"oneOf":["r_organization_admin","rw_organization_admin"]}]},{"name":"Get Organization","description":"Gets a Company Page by numeric id. Full details need the member to be an ADMINISTRATOR of that page; otherwise LinkedIn answers 403 and Find Organization by Vanity Name returns the public fields. Requires the Community Management API product on the LinkedIn app.","slug":"get_organization","enabled":false,"inputSchema":{"type":"object","properties":{"organization_id":{"type":"string","description":"Numeric organization id, e.g. 2414183."}},"required":["organization_id"],"additionalProperties":false},"action":{"path":"/rest/organizations/{organization_id}","method":"GET","mapping":{"params":"{ \"organization_id\": arguments.organization_id }","response":"{\n \"id\": response.id,\n \"urn\": \"urn:li:organization:\" & $string(response.id),\n \"name\": response.localizedName,\n \"vanityName\": response.vanityName,\n \"website\": response.localizedWebsite,\n \"description\": response.localizedDescription,\n \"staffCountRange\": response.staffCountRange,\n \"industries\": response.industries,\n \"organizationType\": response.organizationType,\n \"primaryOrganizationType\": response.primaryOrganizationType,\n \"specialties\": response.localizedSpecialties\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Find Organization by Vanity Name","description":"Finds a Company Page or school by the vanity name in its URL (linkedin.com/company/{vanityName}). Returns public fields and the numeric id used to build `urn:li:organization:{id}`. Requires the Community Management API product on the LinkedIn app.","slug":"find_organization_by_vanity_name","enabled":false,"inputSchema":{"type":"object","properties":{"vanity_name":{"type":"string","description":"The vanity name, e.g. `linkedin` or `boisestate`."}},"required":["vanity_name"],"additionalProperties":false},"action":{"path":"/rest/organizations","method":"GET","mapping":{"query":"{ \"q\": \"vanityName\", \"vanityName\": arguments.vanity_name }","response":"{\n \"organizations\": response.elements.{\n \"id\": id,\n \"urn\": \"urn:li:organization:\" & $string(id),\n \"name\": localizedName,\n \"vanityName\": vanityName,\n \"website\": localizedWebsite,\n \"primaryOrganizationType\": primaryOrganizationType\n }\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true}},{"name":"Get Organization Follower Count","description":"Gets how many members follow a Company Page. Requires the Community Management API product on the LinkedIn app.","slug":"get_organization_follower_count","enabled":false,"inputSchema":{"type":"object","properties":{"organization":{"type":"string","description":"Organization URN, `urn:li:organization:{id}`."}},"required":["organization"],"additionalProperties":false},"action":{"path":"/rest/networkSizes/{organization}","method":"GET","mapping":{"params":"{ \"organization\": $encodeUrlComponent(arguments.organization) }","query":"{ \"edgeType\": \"COMPANY_FOLLOWED_BY_MEMBER\" }","response":"{ \"followers\": response.firstDegreeSize }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}}]}}
|