תקציר ספרינט ליום שני
Every Monday at 9:00, list every Linear issue assigned to me that is still open, group them by project, and write me a short plan for the week naming the three I should finish first.
שרת MCP מאומת: Linear
רשימת הכלים למטה היא לכידה חיה מהשרת הרץ; קריאת כלי מאומתת עדיין ממתינה להרשאות.
התשובה הקצרה
אומת לאחרונה 2026-08-03
לשרת ה-MCP של Linear יש שתי צורות, והעמוד הזה בודק את שתיהן. ל-Linear יש שרת רשמי משלה: שרת מתארח בכתובת https://mcp.linear.app/mcp שאפליקציית ה-AI שלכם מתחברת אליו על גבי HTTP. פנינו אליו בלי אישורי גישה והוא ענה 401 שמבקש התחברות דרך OAuth, כפי שמודפס בהמשך, ולכן לא הייתה דרך הוגנת לספור את הכלים שלו בלי לחבר סביבת עבודה אמיתית. כדי לתת לכם רשימת כלים חיה בכל זאת, הרצנו במקום את החבילה הקהילתית המורדת ביותר, @tacticlaunch/mcp-linear, שעוטפת את אותו API של Linear כשרת stdio מקומי: הוא עלה, ספר 198 כלים, והחזיר שגיאת אימות אמיתית בקריאת הכלי היחידה שביצענו עם טוקן ממלא מקום. כל שם כלי וכל תיאור למטה הם הלכידה הזו, מילה במילה. מה שלא עשינו הוא להזדהות, ולכן שום נושא (issue) ב-Linear של אף אחד לא נקרא, נוצר או שונה. [1][3][6]
אימות
השיטה
הפעלנו את השרת עם npx על גבי stdio פעמיים. בלי שום אישור גישה הוא מסרב לעלות ומדפיס את הבאנר שלמטה, שמפרט את משתני הסביבה שהוא מקבל. עם טוקן ממלא מקום הוא עולה בשקט, השלים את לחיצת היד של MCP, וענה ל-tools/list עם 198 הכלים המופיעים בעמוד הזה, מילה במילה. אחר כך ביצענו קריאת tools/call אמיתית אחת, linear_getViewer, ו-Linear דחתה אותה: הקטע שלמטה הוא התשובה הזו, מילה במילה. קריאות מאומתות ממתינות לאישור גישה שאין לנו, כלומר מפתח API של Linear מסביבת עבודה אמיתית, ולכן שום דבר כאן לא טוען שקריאה מאומתת הצליחה. בנפרד שלחנו initialize ללא הזדהות לנקודת הקצה המתארחת של Linear בכתובת https://mcp.linear.app/mcp ותיעדנו את תשובת ה-401 שלה, שנמצאת בקטע פתרון התקלות למטה.
הודעת הפתיחה של השרת
API token not found in command line args or environment variables Error starting MCP Linear Error: Linear credentials not found. Provide an API token via --token, LINEAR_API_TOKEN, or LINEAR_API_KEY, or sign in with `mcp-linear auth login`.
קריאת כלי אמיתית אחת
tools/call linear_getViewer {}Error: Authentication required, not authenticated - You need to authenticate to access this operation.
שורות אמיתיות מהתוצאה שנלכדה: מספיק כדי להוכיח שהקריאה נענתה.
כלים
השרת ענה ל-tools/list עם 198 כלים בתאריך 2026-08-03. השמות, התיאורים והפרמטרים למטה הם המילים שלו עצמו, מועתקים מהתשובה הזו וללא עריכה.
| כלי | מה הוא עושה |
|---|---|
| linear_getViewer | Get information about the currently authenticated user |
| linear_getOrganization | Get information about the current Linear organization |
| linear_getUsers | Get a list of users in the Linear organization |
| linear_getLabels | Get a list of issue labels from Linear |
| linear_getTeams | Get a list of teams from Linear |
| linear_getWorkflowStatesteamId*includeArchived | Get workflow states for a team |
| linear_createWorkflowStatename*teamId*type*color*descriptionposition | Create a new workflow state |
| linear_updateWorkflowStateid*namecolordescriptionposition | Update a workflow state. Provide id plus at least one other field to change. |
| linear_updateTeamid*namekeydescriptioncoloricontimezoneparentIdprivatevisibility | Update team settings |
| linear_getTeamMembershipsteamId*limitincludeArchivedorderBy | Get team memberships |
| linear_createTeamname*keydescriptioncoloricontimezoneparentIdprivatevisibility | Create a new team |
| linear_archiveTeamid* | Archive a team |
| linear_addUserToTeamteamId*userId*ownersortOrder | Add a user to a team |
| linear_removeUserFromTeamteamId*userId*alsoLeaveParentTeams | Remove a user from a team |
| linear_updateTeamMembershipid*ownersortOrder | Update a user's role in a team. Provide id plus at least one other field to change. |
| linear_getTeamLabelsteamId*limitincludeArchivedorderBy | Get labels for a specific team |
| linear_createTeamLabelteamId*name*colordescriptionparentId | Create a new label for a team |
| linear_getProjects | Get a list of projects from Linear |
| linear_getProjectByIdid* | Get details for a specific Linear project by ID |
| linear_createProjectname*descriptioncontentteamIds*statestartDatetargetDateleadIdmemberIdssortOrdericoncolor | Create a new project in Linear |
| linear_updateProjectid*namedescriptioncontentstatestartDatetargetDateleadIdmemberIdssortOrdericoncolor | Update an existing project in Linear |
| linear_createProjectUpdateprojectId*body*healthisDiffHidden | Create a new project update for a Linear project |
| linear_updateProjectUpdateid*bodyhealthisDiffHidden | Update an existing project update in Linear |
| linear_getProjectUpdateByIdid* | Get a specific Linear project update by ID |
| linear_getProjectUpdatesprojectId*limit | Get all updates associated with a project |
| linear_archiveProjectUpdateid* | Archive a Linear project update |
| linear_unarchiveProjectUpdateid* | Restore an archived Linear project update |
| linear_deleteProjectUpdateid* | Delete a Linear project update |
| linear_archiveProjectprojectId* | Archive a project |
| linear_addIssueToProjectissueId*projectId* | Add an existing issue to a project |
| linear_removeIssueFromProjectissueId*projectId* | Remove an existing issue from a project |
| linear_getProjectIssuesprojectId*limitstatesassigneeIdlabelIdscycleIdprojectMilestoneIdincludeCompletedorderBy | Get issues associated with a project, with PM-friendly filters like state, assignee, labels, cycle, and milestone |
| linear_getProjectMembersprojectId*limitincludeArchivedincludeDisabledorderBy | Get members assigned to a project |
| linear_addProjectMemberprojectId*userId* | Add a member to a project |
| linear_removeProjectMemberprojectId*userId* | Remove a member from a project |
| linear_getRoadmapslimitincludeArchivedorderBy | Get a list of roadmaps from Linear |
| linear_getRoadmapByIdid* | Get details of a specific roadmap by ID |
| linear_createRoadmapname*descriptioncolorownerIdsortOrder | Create a new roadmap in Linear |
| linear_updateRoadmapid*namedescriptioncolorownerIdsortOrder | Update an existing roadmap |
| linear_archiveRoadmaproadmapId* | Archive a roadmap |
| linear_getReleasePipelineslimitincludeArchivedorderBy | Get release pipelines from Linear |
| linear_getReleasePipelineByIdid* | Get details of a specific release pipeline |
| linear_createReleasePipelinename*teamIds*typeslugIdisProductionincludePathPatterns | Create a new release pipeline |
| linear_updateReleasePipelineid*nameteamIdstypeslugIdisProductionincludePathPatterns | Update an existing release pipeline. Provide id plus at least one other field to change. |
| linear_archiveReleasePipelinepipelineId* | Archive a release pipeline |
| linear_unarchiveReleasePipelinepipelineId* | Unarchive a release pipeline |
| linear_deleteReleasePipelinepipelineId* | Delete a release pipeline |
| linear_getReleaseslimitincludeArchivedorderBypipelineIdstageId | Get releases from Linear with optional pipeline and stage filters |
| linear_getReleaseByIdid* | Get details of a specific release |
| linear_searchReleasestermlimitincludeArchivedpipelineIdstageId | Search releases by term, version, or pipeline name |
| linear_getReleaseStageslimitincludeArchivedorderBypipelineId | Get release stages from Linear |
| linear_createReleaseStagepipelineId*name*color*position*type*frozenid | Create a new release stage in a pipeline |
| linear_updateReleaseStageid*namecolorpositionfrozen | Update an existing release stage. Provide id plus at least one other field to change. |
| linear_archiveReleaseStagestageId* | Archive a release stage |
| linear_unarchiveReleaseStagestageId* | Unarchive a release stage |
| linear_getReleaseNoteslimitincludeArchivedorderBy | Get release notes from Linear |
| linear_getReleaseNoteByIdid* | Get details of a specific release note |
| linear_createReleasepipelineId*name*versiondescriptioncommitShastageIdstartDatetargetDatecreatedAtstartedAtcompletedAt | Create a new release in a release pipeline |
| linear_updateReleaseid*nameversiondescriptioncommitShapipelineIdstageIdstartDatetargetDatestartedAtcompletedAttrashed | Update an existing release. Provide id plus at least one other field to change. |
| linear_completeReleasepipelineId*version | Mark a release as completed within a pipeline. The target pipeline must already have a completed release stage configured. |
| linear_archiveReleasereleaseId* | Archive a release |
| linear_unarchiveReleasereleaseId* | Unarchive a release |
| linear_addIssueToReleaseissueId*releaseId* | Add an issue to a release |
| linear_removeIssueFromReleaseissueId*releaseId* | Remove an issue from a release |
| linear_createReleaseNotepipelineId*contentreleaseIdsrangeFromReleaseIdrangeToReleaseId | Create a release note using either explicit release IDs or a release range within a pipeline |
| linear_updateReleaseNoteid*contentreleaseIdsrangeFromReleaseIdrangeToReleaseId | Update a release note using either explicit release IDs or a release range. Provide id plus at least one other field to change. |
| linear_deleteReleaseNoteid* | Delete a release note |
| linear_getMilestonesincludeArchivedlimitprojectIdteamIdstatusorderBy | Get project milestones from Linear, with PM-friendly filters for project, team, and milestone status |
| linear_getMilestoneByIdid* | Get details of a specific project milestone by ID |
| linear_createMilestonename*projectId*descriptiontargetDatesortOrder | Create a new project milestone in Linear |
| linear_updateMilestoneid*nameprojectIddescriptiontargetDatesortOrder | Update an existing project milestone in Linear. Provide id plus at least one other field to change. |
| linear_archiveMilestoneid* | Archive a project milestone |
| linear_getDocumentslimitincludeArchivedorderByprojectIdinitiativeIdteamIdissueIdreleaseIdcycleIdtitle | Get workspace documents from Linear |
| linear_getDocumentByIdid* | Get details of a specific Linear document |
| linear_getProjectDocumentsprojectId*limitincludeArchivedorderBytitle | Get documents for a specific Linear project |
| linear_getInitiativeDocumentsinitiativeId*limitincludeArchivedorderBytitle | Get documents for a specific Linear initiative |
| linear_getTeamDocumentsteamId*limitincludeArchivedorderBytitle | Get documents associated with a specific Linear team |
| linear_getIssueDocumentsissueId*limitincludeArchivedorderBytitle | Get documents associated with a specific Linear issue |
| linear_getReleaseDocumentsreleaseId*limitincludeArchivedorderBytitle | Get documents associated with a specific Linear release |
| linear_getCycleDocumentscycleId*limitincludeArchivedorderBytitle | Get documents associated with a specific Linear cycle |
| linear_getTeamResourcesteamId* | Get team home resource sections and pinned documents or external links |
| linear_searchDocumentsterm*teamIdincludeCommentslimitincludeArchivedorderBysnippetSize | Search Linear documents by term |
| linear_getDocumentContentHistoryid* | Get content history entries for a Linear document content record |
| linear_createDocumenttitle*contenticoncolorprojectIdinitiativeIdteamIdissueIdreleaseIdcycleIdresourceFolderIdlastAppliedTemplateIdsortOrder | Create a new Linear document |
| linear_updateDocumentid*titlecontenticoncolorhiddenAtprojectIdinitiativeIdteamIdissueIdreleaseIdcycleIdresourceFolderIdlastAppliedTemplateIdsortOrdertrashed | Update an existing Linear document. Provide id plus at least one other field to change. |
| linear_archiveDocumentid* | Archive (trash) a Linear document |
| linear_unarchiveDocumentid* | Restore a previously archived Linear document |
| linear_getRateLimitStatus | Get the shared MCP-side Linear rate-limit cooldown and retry snapshot |
| linear_getServerStatus | Get MCP Linear server runtime status, counts, and current rate-limit snapshot |
| linear_generateOAuthApplicationSetupname*developer*developerUrldescriptionimageUrldistributionredirectUris*grantTypeswebhookEnabledwebhookUrlwebhookResourceTypes | Generate an official Linear OAuth application manifest and a human-confirmed setup URL. This does not create the application; an authorized workspace admin or owner must review and submit it in Linear. |
| linear_generateOAuthAuthorizationUrlclientId*redirectUri*scopes*actorstatepromptConsentcodeChallenge | Generate a Linear OAuth authorization URL. Scopes are requested during authorization; this tool does not create, grant, approve, persist, or modify scopes. Actor/scope rules: with actor: "app" the admin scope is rejected, and the agent-only scopes (app:assignable, app:mentionable, customer:read, customer:write, initiative:read, initiative:write) require actor: "app". |
| linear_createOAuthClientCredentialsTokenclientId*clientSecret*scopes*confirmSecretExposure*confirmScopeChangeRisk* | Issue a scoped Linear app-actor access token through the client_credentials grant for server-to-server pipelines. The token is returned once, has no refresh token, and is normally valid for 30 days. If the requested scope set differs from existing app-actor tokens, Linear revokes those existing tokens. |
| linear_getManagedOAuthApplications | List alpha child OAuth applications owned by the calling OAuth application. This is not a workspace-wide OAuth application admin listing and does not work as generic scope CRUD. |
| linear_getManagedOAuthApplicationByIdid* | Get an alpha child OAuth application owned by the calling OAuth application. It cannot retrieve an arbitrary workspace OAuth application. |
| linear_createManagedOAuthApplicationname*developer*developerUrldescriptionimageUrlredirectUris*grantTypesidempotencyKeywebhookUrlwebhookResourceTypesconfirmSecretExposure* | Create an alpha child OAuth application owned by the calling OAuth application. This is not the human setup flow and returns one-time client and optional webhook secrets in the MCP result. It cannot set distribution or pre-grant OAuth scopes. |
| linear_updateManagedOAuthApplicationid*namedeveloperdeveloperUrldescriptionimageUrlredirectUrisgrantTypeswebhookEnabledwebhookUrlwebhookResourceTypes | Update metadata, grant capabilities, or webhook configuration for an alpha child app owned by the calling OAuth application. This does not grant or approve token scopes. |
| linear_archiveManagedOAuthApplicationid* | Archive an alpha child OAuth application owned by the calling OAuth application. This does not revoke an unrelated authorized application. |
| linear_rotateManagedOAuthApplicationSecretid*confirmSecretExposure* | Rotate the client secret of an alpha child app owned by the calling OAuth application. The new one-time secret is exposed in the MCP result and existing client-credentials tokens may be invalidated. |
| linear_rotateManagedOAuthApplicationWebhookSecretid*confirmSecretExposure* | Rotate the webhook signing secret of an alpha child app owned by the calling OAuth application. The new one-time secret is exposed in the MCP result. |
| linear_getWebhookByIdid* | Get one ordinary workspace webhook by ID. |
| linear_getWebhooksteamIdlimitincludeArchivedorderBy | Get a list of webhooks |
| linear_createWebhookurl*resourceTypes*teamIdenabledlabelsecretallPublicTeams | Create a webhook for integration events |
| linear_updateWebhookid*urllabelenabledresourceTypessecret | Update an ordinary workspace webhook. |
| linear_rotateWebhookSecretid*confirmSecretExposure* | Rotate an ordinary workspace webhook signing secret. |
| linear_deleteWebhookid* | Delete a webhook |
| linear_getAttachmentsissueId*limitincludeArchivedorderBy | Get attachments for an issue |
| linear_addAttachmentissueId*title*url*subtitleiconUrlmetadatacommentBodygroupBySource | Add an attachment to an issue |
| linear_getNotificationslimitincludeArchivedorderBy | Get notifications for the current user |
| linear_markNotificationAsReadid* | Mark a notification as read |
| linear_getSubscriptionslimitincludeArchivedorderBy | Get subscriptions for the current user |
| linear_markAllNotificationsAsReadlimit | Mark all notifications as read |
| linear_getUnreadNotificationCountlimit | Get count of unread notifications |
| linear_getAuthenticationSessions | Get active authentication sessions |
| linear_logoutSessionsessionId* | Revoke a specific session |
| linear_logoutOtherSessions | Revoke all other sessions |
| linear_logoutAllSessions | Revoke all sessions |
| linear_getOrganizationAuditEventslimitincludeArchivedorderBy | Get audit events for the organization |
| linear_getUserAuditEventsuserId*limitincludeArchivedorderBy | Get audit events for a specific user |
| linear_getIntegrationslimitincludeArchivedorderBy | Get a list of active integrations |
| linear_getSavedViewslimitincludeArchivedorderBy | Get Linear saved views (API: CustomView) |
| linear_createSavedViewname*descriptionsharediconcolorteamIdprojectIdownerIdfiltersfilterDataprojectFilterData | Create a Linear saved view (API: createCustomView) |
| linear_updateSavedViewid*namedescriptionsharediconcolorteamIdprojectIdownerIdfiltersfilterDataprojectFilterData | Update a Linear saved view (API: updateCustomView). Provide id plus at least one other field to change. |
| linear_deleteSavedViewid* | Delete a Linear saved view (API: deleteCustomView) |
| linear_getFavoriteViewslimitincludeArchivedorderBy | Get favorite Linear views, including saved views and predefined views |
| linear_addToFavoritesentityId* | Add an entity to the current user's Linear favorites |
| linear_removeFromFavoritesfavoriteIdentityId | Remove an entity or favorite entry from the current user's Linear favorites. Provide either favoriteId or entityId. |
| linear_getCyclesteamIdlimit | Get a list of all cycles |
| linear_getCycleByIdid* | Get details of a specific cycle |
| linear_createCycleteamId*startsAt*endsAt*namedescriptioncompletedAt | Create a new cycle |
| linear_updateCycleid*startsAtendsAtnamedescriptioncompletedAt | Update an existing cycle. Provide id plus at least one other field to change. |
| linear_completeCycleid* | Mark a cycle as complete |
| linear_getCycleStatsid* | Get statistics for a cycle |
| linear_getActiveCycleteamId* | Get the currently active cycle for a team |
| linear_getCycleIssuescycleId*limitstatesassigneeIdlabelIdsincludeCompletedorderBy | Get issues in a cycle, with PM-friendly filters like state, assignee, labels, and completion status |
| linear_addIssueToCycleissueId*cycleId* | Add an issue to a cycle |
| linear_removeIssueFromCycleissueId*cycleId* | Remove an issue from a cycle |
| linear_getInitiativesincludeArchivedlimit | Get a list of all initiatives from Linear |
| linear_getInitiativeByIdinitiativeId*includeProjects | Get details of a specific initiative by ID |
| linear_createInitiativename*descriptioncontentownerIdtargetDatestatusiconcolor | Create a new initiative |
| linear_updateInitiativeinitiativeId*namedescriptioncontentownerIdtargetDatestatusiconcolor | Update an existing initiative |
| linear_archiveInitiativeinitiativeId* | Archive an initiative |
| linear_unarchiveInitiativeinitiativeId* | Unarchive an initiative |
| linear_deleteInitiativeinitiativeId* | Delete an initiative (move to trash) |
| linear_getInitiativeProjectsinitiativeId*includeArchived | Get all projects associated with an initiative |
| linear_getInitiativeUpdateByIdid* | Get a specific initiative update by ID |
| linear_getInitiativeUpdatesinitiativeId*limit | Get updates for an initiative |
| linear_createInitiativeUpdateinitiativeId*body*healthisDiffHidden | Create a new initiative update |
| linear_updateInitiativeUpdateid*bodyhealthisDiffHidden | Update an existing initiative update |
| linear_archiveInitiativeUpdateid* | Archive an initiative update |
| linear_unarchiveInitiativeUpdateid* | Restore an archived initiative update |
| linear_addProjectToInitiativeinitiativeId*projectId* | Add a project to an initiative |
| linear_removeProjectFromInitiativeinitiativeId*projectId* | Remove a project from an initiative |
| linear_getCustomerslimitincludeArchivedorderBynamedomainstatusIdtierIdownerId | Get customers from Linear |
| linear_getCustomerByIdid* | Get a customer by ID |
| linear_createCustomername*domainsexternalIdslogoUrlmainSourceIdownerIdrevenuesizeslackChannelIdstatusIdtierId | Create a customer |
| linear_updateCustomerid*namedomainsexternalIdslogoUrlmainSourceIdownerIdrevenuesizeslackChannelIdstatusIdtierId | Update a customer |
| linear_deleteCustomerid* | Delete a customer |
| linear_getCustomerNeedslimitincludeArchivedorderBycustomerIdissueIdprojectIdpriority | Get customer needs from Linear |
| linear_getCustomerNeedByIdid* | Get a customer need by ID |
| linear_createCustomerNeedattachmentIdattachmentUrlbodycommentIdcreatedAtcustomerExternalIdcustomerIdissueIdpriorityprojectId | Create a customer need linked to an issue or project |
| linear_createCustomerNeedFromAttachmentattachmentId*customerIdcustomerExternalIdpriority | Create or unarchive a customer need from an existing attachment |
| linear_updateCustomerNeedid*applyPriorityToRelatedNeedsattachmentUrlbodycustomerExternalIdcustomerIdissueIdpriorityprojectId | Update a customer need |
| linear_archiveCustomerNeedid* | Archive a customer need |
| linear_unarchiveCustomerNeedid* | Restore an archived customer need |
| linear_deleteCustomerNeedid* | Delete a customer need |
| linear_getCustomerStatuseslimitincludeArchivedorderBy | Get customer statuses from Linear |
| linear_getCustomerTierslimitincludeArchivedorderBy | Get customer tiers from Linear |
| linear_getIssueslimit | Get a list of recent issues from Linear |
| linear_getIssueByIdid* | Get a specific issue by ID or identifier (e.g., ABC-123) |
| linear_getCustomFields | Get the custom field definitions available in the authenticated Linear workspace |
| linear_getIssueCustomFieldsissueId* | Get the custom field values that are currently set on a specific issue |
| linear_searchIssuesqueryteamIdassigneeIdprojectIdstateslimit | Search for issues with various filters |
| linear_createIssuetitle*descriptionteamId*assigneeIdpriorityprojectIdprojectMilestoneIdcycleIdestimatedueDatelabelIdsparentIdsubscriberIdsstateIdtemplateIdsortOrder | Create a new issue in Linear |
| linear_updateIssueid*titledescriptionstateIdpriorityprojectIdprojectMilestoneIdassigneeIdcycleIdestimatedueDatelabelIdsaddedLabelIdsremovedLabelIdsparentIdsubscriberIdsteamIdsortOrder | Update an existing issue in Linear |
| linear_updateIssueCustomFieldissueId*customFieldId*value* | Set or clear a custom field value on an issue. Pass null as value to clear it. |
| linear_createCommentissueIdprojectIdinitiativeIdprojectUpdateIdinitiativeUpdateIddocumentContentIdpostIdbody*parentIdquotedTextsubscriberIds | Add a comment to an issue, project, initiative, update, document content, or as a threaded reply |
| linear_updateCommentid*bodyquotedTextresolvingCommentIdresolvingUserIdsubscriberIdsdoNotSubscribeToIssue | Update an existing comment |
| linear_deleteCommentid* | Delete a comment |
| linear_addIssueLabelissueId*labelId* | Add a label to an issue in Linear |
| linear_removeIssueLabelissueId*labelId* | Remove a label from an issue in Linear |
| linear_getIssueTemplateslimitincludeArchivedorderBy | Get a list of issue templates |
| linear_getIssueTemplateByIdid* | Get details of a specific issue template |
| linear_createIssueTemplatename*descriptionteamIdtemplateData*sortOrder | Create a new issue template |
| linear_updateIssueTemplateid*namedescriptionteamIdtemplateDatasortOrder | Update an existing issue template. Provide id plus at least one other field to change. |
| linear_createIssueFromTemplateteamId*templateId*titledescriptionpriorityprojectIdprojectMilestoneIdcycleId | Create a new issue from a template |
| linear_getTeamTemplatesteamId*limitincludeArchivedorderBy | Get templates for a specific team |
| linear_archiveTemplateid* | Archive an issue template |
| linear_assignIssueissueId*assigneeId* | Assign an issue to a user |
| linear_subscribeToIssueissueId* | Subscribe to issue updates |
| linear_convertIssueToSubtaskissueId*parentIssueId* | Convert an issue to a subtask |
| linear_createIssueRelationissueId*relatedIssueId*type* | Create relations between issues (blocks, is blocked by, etc.) |
| linear_deleteIssueRelationid* | Delete an issue relation by ID |
| linear_archiveIssueissueId* | Archive an issue |
| linear_setIssuePriorityissueId*priority* | Set the priority of an issue |
| linear_transferIssueissueId*teamId* | Transfer an issue to another team |
| linear_duplicateIssueissueId* | Duplicate an issue |
| linear_getIssueHistoryissueId*limit | Get the history of changes made to an issue |
| linear_getCommentsissueIdprojectIdinitiativeIdprojectUpdateIdinitiativeUpdateIddocumentContentIdpostIdlimitcursororderBy | Get comments for an issue, project, initiative, update, or document content |
פרמטרים המסומנים ב-* הם חובה.
התקנה
העתיקו את הבלוק של האפליקציה שלכם. כל אחד מהם הוא ההגדרה המדויקת שאיתה אימתנו את השרת.
פתחו את הקובץ ~/Library/Application Support/Claude/claude_desktop_config.json (בתוך Claude Desktop: Settings, אחר כך Developer, אחר כך Edit Config) והוסיפו:
{
"mcpServers": {
"linear": {
"command": "npx",
"args": [
"-y",
"@tacticlaunch/mcp-linear"
],
"env": {
"LINEAR_API_TOKEN": "your_linear_api_key"
}
}
}
}הדביקו את מפתח ה-API שלכם מ-Linear במקום your_linear_api_key, ואז סגרו ופתחו מחדש את Claude Desktop. אפשר גם בלי כל זה: Linear מתעדת הוספה של המחבר Linear מתוך Settings ואז Connectors ב-Claude Desktop, שמחבר אתכם בהתחברות במקום לבקש מפתח. [8][6]
פקודה אחת בטרמינל:
claude mcp add linear -e LINEAR_API_TOKEN=your_linear_api_key -- npx -y @tacticlaunch/mcp-linear
כל מה שאחרי המקף הכפול הוא הפקודה המדויקת ש-Claude Code יריץ, והדגל -e מגדיר את המפתח בסביבה של אותה פקודה. לשרת המתארח של Linear במקום זאת, Linear מתעדת את הפקודה claude mcp add --transport http linear-server https://mcp.linear.app/mcp, שפותחת התחברות OAuth במקום לקבל מפתח. [9][6]
הוסיפו ל-~/.cursor/mcp.json עבור כל הפרויקטים, או ל-.cursor/mcp.json בתוך פרויקט אחד:
{
"mcpServers": {
"linear": {
"command": "npx",
"args": [
"-y",
"@tacticlaunch/mcp-linear"
],
"env": {
"LINEAR_API_TOKEN": "your_linear_api_key"
}
}
}
}Cursor קורא את הקובץ מחדש אחרי הפעלה מחדש. Linear גם מציינת התקנה בלחיצה אחת של השרת המתארח שלה מתוך עמוד כלי ה-MCP של Cursor, שמשתמשת בהתחברות OAuth במקום במפתח. [10][6]
בלי קובץ JSON ובלי טרמינל. ב-Routines: Settings, אחר כך Assistant, אחר כך Connections, אחר כך Add MCP Server. העבירו את הטופס ל-Command (stdio) והזינו:
Name Linear Command npx Arguments -y @tacticlaunch/mcp-linear Environment LINEAR_API_TOKEN=your_linear_api_key
שימו את המפתח בשדה Environment Variables, לא ב-Arguments. לחצו קודם על Test Connection: הוא עונה עם מספר הכלים, 198 עבור השרת הזה. כדאי לדעת לפני שסומכים על המספר הזה: בריצה שלנו השרת הציג את כל 198 הכלים גם עם טוקן מזויף בכוונה, מפני שהוא בודק את המפתח רק כשכלי באמת רץ. בדיקה ירוקה אומרת שהשרת עלה, לא שהמפתח שלכם תקף. [11]
בלי טרמינל
אם מעולם לא פתחתם את הטרמינל ואין לכם כוונה להתחיל, זה המסלול שלכם. Routines היא אפליקציית Mac שמריצה שרתי MCP בשבילכם: ממלאים כמה שדות פעם אחת, והכלים של השרת זמינים ל-AI שלכם בצ׳אט ובשגרות מתוזמנות.
01
הורידו את האפליקציה מ-getroutines.ai/download, גררו אותה ל-Applications והתחברו.
02
לחצו על החשבון שלכם בתחתית סרגל הצד ובחרו Settings. פתחו את הקטע Assistant, אחר כך את הלשונית Connections, גללו אל MCP Servers ולחצו על Add MCP Server.
03
העבירו את הטופס ל-Command (stdio): השרת הזה הוא פקודה שה-Mac שלכם מריץ, לא כתובת אינטרנט. ל-Linear יש גם שרת משלה בכתובת אינטרנט, אבל הוא מחבר אתכם דרך הדפדפן במקום לקבל מפתח.
04
בלי מפתח השרת הזה בכלל לא עולה, כפי שהריצה שלנו הוכיחה. ב-Linear פתחו Settings, אחר כך Account, אחר כך Security & Access, והפיקו מפתח API חדש. העתיקו אותו מיד ושמרו אותו במקום בטוח: החבילה שהרצנו מזהירה שלא תוכלו לראות אותו שוב. הוא הופק תחת חשבון ה-Linear שלכם, לכן התייחסו אליו כמו לסיסמה.
05
Name: Linear. Command: npx. Arguments: -y @tacticlaunch/mcp-linear. בשדה Environment Variables הוסיפו את LINEAR_API_TOKEN והדביקו את המפתח כערך שלו. לחצו Test Connection: Routines מפעילה את השרת ומדווחת כמה כלים היא מצאה, 198 עבור השרת הזה. אחר כך לחצו Add Server.
06
הכלים עובדים בצ׳אט מיד. בקשו קודם את הנושאים הפתוחים שלכם: זו הדרך המהירה לוודא שהמפתח עצמו עובד, כי מפתח שגוי עדיין עובר את בדיקת החיבור ונכשל רק בשאלה האמיתית הראשונה. כדי לתת לשגרה מתוזמנת להשתמש בהם, פתחו את השגרה, מצאו את הכרטיס Tools & connections וסמנו את השרת תחת Apps.
רעיונות לשגרות
אחרי שהשרת מחובר, שגרה מתוזמנת יכולה להשתמש בכלים שלו גם כשאתם לא מול המסך. העתיקו פרומפט, הדביקו אותו ב-Routines ובחרו שעה. הפרומפטים כתובים באנגלית בכוונה, מדביקים אותם בדיוק כפי שהם.
Every Monday at 9:00, list every Linear issue assigned to me that is still open, group them by project, and write me a short plan for the week naming the three I should finish first.
Every Friday at 16:00, find the Linear issues on my team that have not moved in 14 days, and write a short list with the assignee, the current state, and the last update on each so I can chase them.
On the first of every month at 10:00, read the Linear issues my team completed since the last run and draft release notes grouped into fixes, improvements, and new features, in plain language a customer would understand.
פתרון תקלות
שגיאות אמיתיות שנלכדו בריצת האימות, מודפסות בדיוק כפי שהשרת החזיר אותן.
מה רואים
Error: Authentication required, not authenticated - You need to authenticate to access this operation.
הפתרון
השרת עלה, כלומר ההגדרה שלכם תקינה, אבל Linear דחתה את המפתח. זו בדיוק השגיאה שהריצה שלנו הפיקה בכוונה עם טוקן ממלא מקום. ודאו ש-LINEAR_API_TOKEN מכיל מפתח אמיתי שהופק ב-Linear תחת Settings, אחר כך Account, אחר כך Security & Access, שהעתקתם אותו במלואו, ושהמפתח לא בוטל. שימו לב שרשימת הכלים עובדת בכל מקרה: מפתח שגוי מתגלה רק בקריאה האמיתית הראשונה.
מה רואים
API token not found in command line args or environment variables Error starting MCP Linear Error: Linear credentials not found. Provide an API token via --token, LINEAR_API_TOKEN, or LINEAR_API_KEY, or sign in with `mcp-linear auth login`.
הפתרון
שום אישור גישה לא הגיע לשרת, ולכן הוא סירב לעלות. בקובץ JSON המפתח שייך לאובייקט "env", לא ל-"args"; ב-Routines הוא שייך ל-Environment Variables. ההודעה מפרטת כל משתנה שהשרת מקבל, כך ש-LINEAR_API_TOKEN או LINEAR_API_KEY שניהם מתאימים.
מה רואים
www-authenticate: Bearer realm="OAuth", resource_metadata="https://mcp.linear.app/.well-known/oauth-protected-resource/mcp", error="invalid_token", error_description="Missing or invalid access token"
{"error":"invalid_token","error_description":"Missing or invalid access token"}הפתרון
עובד כמתוכנן, וגרמנו לזה בכוונה: הכתובת https://mcp.linear.app/mcp מסרבת לפונים אנונימיים. זה לא שרת שמגדירים בהדבקת מפתח כברירת מחדל, הוא מצפה שהלקוח שלכם יעביר אתכם התחברות OAuth בדפדפן. השתמשו בלקוח שתומך בתהליך הזה, או השתמשו בשרת ה-stdio המקומי שבעמוד הזה עם מפתח API במקום.
מה רואים
Error: Invalid arguments for getWorkflowStates
הפתרון
חסר פרמטר חובה. הפקנו את השגיאה הזו בקריאה ל-linear_getWorkflowStates בלי teamId. טבלת הכלים למעלה מסמנת אילו פרמטרים נדרשים, לכן בקשו מהעוזר להביא קודם את אובייקט האב, למשל teams לפני workflow states, ולהעביר את המזהה שהוא מחזיר.
מה רואים
Error: Unknown tool: linear_deleteEverything
הפתרון
השרת דוחה כל שם שאינו בין 198 הכלים שפרסם, וזו התשובה שקיבלנו כשהמצאנו אחד. אם העוזר שלכם ממשיך לחפש כלי שאינו קיים, הפנו אותו לטבלת הכלים למעלה; ברשימה כה ארוכה, מודלים לפעמים מנחשים שם סביר במקום לקרוא את הרשימה.
הפתרון
הפקודה npx שייכת ל-Node.js. אם Node לא מותקן על ה-Mac, כל לקוח בעמוד הזה ייכשל בשלב ההפעלה עוד לפני שהשרת מספיק לומר משהו. התקינו Node מ-nodejs.org, הפעילו מחדש את לקוח ה-MCP ונסו שוב.
שאלות נפוצות
זהו גשר שמאפשר לעוזר AI לעבוד בתוך Linear: למצוא נושאים, ליצור ולעדכן אותם, לקרוא פרויקטים ומחזורים ולכתוב תגובות, הכל במילים שהייתם אומרים לעמית לעבודה. יש יותר מאחד. Linear מפעילה שרת רשמי מתארח שאפליקציית ה-AI שלכם מתחברת אליו, והקהילה מפרסמת חבילות שאתם מריצים על ה-Mac שלכם עם מפתח API. העמוד הזה סופר את הקהילתי ובודק את הרשמי. [6][5]
כן. Linear מתעדת ומארחת אחד בכתובת https://mcp.linear.app/mcp, עם Streamable HTTP והתחברות OAuth 2.1, ולצדו גרסת קריאה בלבד בכתובת https://mcp.linear.app/mcp/readonly. אימתנו ששתי הכתובות חיות: כל אחת ענתה לבקשה הלא מזוהה שלנו ב-401 שמפנה למטא-נתוני ה-OAuth שלה, ובמטא-נתונים האלה מופיעים read ו-write כהרשאות הזמינות. Linear גם מתעדת עמודי התקנה ל-Claude, Cursor, VS Code, Windsurf ו-Zed. [6][7]
אימתנו שהשרת עולה, מדבר בפרוטוקול MCP בגרסה 2025-06-18, מדווח על עצמו כ-linear 1.4.1 ומפרסם 198 כלים, ולכדנו את השגיאות המדויקות שהוא מחזיר כשאישור הגישה חסר, שגוי, או שהארגומנטים לא תקינים. לא אימתנו שום תוצאה מאומתת: קריאה או כתיבה של נושא אמיתי דורשת מפתח API של Linear מסביבת עבודה אמיתית, והרצנו הכל עם טוקן ממלא מקום. לכן התייחסו לרשימת הכלים כמוכחת, ולתוצאות של אותם כלים כלא נבדקות כאן.
החבילה שהרצנו מפרסמת 198, וזה הרבה עבור שרת MCP: נושאים, תגובות, פרויקטים ועדכוני פרויקט, צוותים וחברויות, מחזורים, יוזמות, מפות דרכים, אבני דרך, גרסאות והערות גרסה, מסמכים, תוויות, webhooks, וקבוצת כלים לניהול אפליקציות OAuth. הטבלה למעלה היא פלט ה-tools/list החי, מילה במילה. היא מתארת את החבילה הזו בלבד. לא הצלחנו לספור את הכלים של השרת המתארח של Linear בלי להתחבר, ולכן לגביו נוכל רק לחזור על התיאור של Linear עצמה: כלים למציאה, יצירה ועדכון של אובייקטים כמו נושאים, פרויקטים ותגובות, ועוד בדרך. [6]
ב-Linear פתחו Settings, אחר כך Account, אחר כך Security & Access, והפיקו מפתח API חדש. העתיקו אותו מיד ושמרו אותו במקום בטוח: החבילה שהרצנו מזהירה שלא תוכלו לראות אותו שוב. זהו מפתח אישי שהופק תחת חשבון ה-Linear שלכם, לכן התייחסו אליו כמו לסיסמה. אם שגרה צריכה רק לקרוא, ל-Linear יש אפשרויות מצומצמות יותר ממפתח אישי מלא: נקודת קצה מתארחת לקריאה בלבד, או טוקן OAuth שמבקש רק את הרשאת read. [6][5]
לא. ב-Routines ממלאים כמה שדות בהגדרות, מדביקים את המפתח בשדה Environment Variables ולוחצים Test Connection; המדריך למעלה מראה כל לחיצה. Claude Desktop דורש עריכה חד-פעמית של קובץ JSON קטן, או הוספה של המחבר של Linear מתוך ההגדרות שלו. רק Claude Code הוא כלי טרמינל מטבעו. [11][6]
עבור חבילת ה-stdio המקומית, כל לקוח MCP שמסוגל להפעיל פקודה: Claude Desktop, Claude Code, Cursor ו-Routines כולם יכולים, וההגדרה המדויקת לכל אחד נמצאת למעלה. עבור השרת המתארח של Linear נדרש לקוח שיודע לבצע את התחברות ה-OAuth, ו-Linear מתעדת בשמם את Claude, Claude Code, Cursor, Codex, VS Code, Windsurf ו-Zed. [8][9][10][11][6]
מקורות
כל מה שבעמוד הזה שלא ראינו בעצמנו בריצה מקושר כאן, עם התאריך שבו קראנו אותו. לגבי השאר, הריצה עצמה היא הקבלה.
[1]
Latest version 1.4.1, published 2026-07-28; first published 2025-03-23.
[2]
4,457 downloads for the week ending 2026-08-01. We checked the 20 Linear MCP packages the npm search returns; the runner-up had 1,236.
[3]
144 stars, 34 forks and a push dated 2026-07-28 at access time, per the GitHub API.
[4]
MIT License, confirmed by the GitHub license API.
[5]
Documents LINEAR_API_TOKEN in the env object and the --token flag.
[6]
Linear's own page: Streamable HTTP at mcp.linear.app/mcp, OAuth 2.1 with dynamic client registration, a /mcp/readonly variant, and per-client setup including the API-key path under Settings, Account, Security & Access.
[7]
Served 200 to an anonymous request: scopes_supported lists read and write, bearer_methods_supported lists header.
[8]
The claude_desktop_config.json shape and where the file lives.
[9]
The claude mcp add syntax, including -e for environment variables.
[10]
[11]
How Routines runs one-click OAuth connectors and any MCP server.
העמוד הזה מתאר את Linear כפי שהתנהג בריצה מתוארכת אחת על Mac אחד. גרסאות משתנות: אם משהו כאן כבר לא תואם למה שאתם רואים, תאריך הלכידה בראש העמוד אומר בן כמה הצילום.
מאחורי המדריך הזה
Routines, האפליקציה שמאחורי המדריך הזה, מריצה שרתי MCP כמו זה בלי טרמינל: כך עובדים המחברים. הפתקים שלכם נשארים קובצי markdown על ה-Mac שלכם, אין חשבון ענן לשלם, והיא עובדת גם בלי אינטרנט. להורדת Routines