מבט ליום שני על השבוע
Every Monday at 8:00, list my open Asana tasks due this week grouped by project, call out anything already overdue, and write the whole plan to week-ahead.md.
שרת MCP מאומת: Asana
רשימת הכלים למטה היא לכידה חיה מהשרת הרץ; קריאת כלי מאומתת עדיין ממתינה להרשאות.
התשובה הקצרה
אומת לאחרונה 2026-08-03
שרת ה-MCP של Asana שבעמוד הזה הוא @roychri/mcp-server-asana, חבילה קהילתית שכתב מפתח עצמאי ולא Asana עצמה. מחובר לעוזר AI, הוא יכול לחפש פרויקטים ומשימות, ליצור ולעדכן אותם, להוסיף תת-משימות, תגובות, תוויות, מקטעים, תלויות ועדכוני סטטוס לפרויקט בתוך סביבת העבודה שלכם ב-Asana. הוא דורש אישור גישה אחד, אסימון גישה אישי של Asana במשתנה סביבה בשם ASANA_ACCESS_TOKEN. הנה בדיוק מה אימתנו ומה לא. הרצנו את החבילה על Mac עם ערך ממלא מקום במשתנה הזה: השרת עלה, השלים את לחיצת היד של MCP והחזיר ב-tools/list 41 כלים, שהם הטבלה למטה, מילה במילה. קריאת הכלי האמיתית האחת שביצענו הגיעה ל-API של Asana עצמה וחזרה עם שגיאת אימות 401, המודפסת בהמשך, כי ממלא מקום איננו אסימון. קריאה מאומתת עדיין ממתינה לאסימון שלכם. במקביל Asana מפעילה נקודת קצה מתארחת משלה ל-MCP בכתובת mcp.asana.com, שחסומה מאחורי התחברות OAuth: אישרנו שהיא עונה ומסרבת לבקשות לא מאומתות, אבל לא יכולנו לספור את הכלים שלה בלי התחברות בדפדפן, ולכן שום דבר בעמוד הזה אינו מתאר אותה. [1][3][4][5]
אימות
השיטה
הפעלנו את השרת עם npx על גבי stdio כאשר ASANA_ACCESS_TOKEN מכיל ערך ממלא מקום, השלמנו את לחיצת היד של MCP וקראנו ל-tools/list: השרת ענה עם 41 כלים, והטבלה למטה היא התשובה הזו, מילה במילה. ביקשנו את גרסת הפרוטוקול 2025-06-18 והשרת החזיר במשא ומתן את 2024-11-05, וזו הגרסה הרשומה כאן. באותה ריצה עצמה ביצענו לאחר מכן קריאת כלי אמיתית אחת, asana_list_workspaces בלי ארגומנטים. היא הגיעה אל https://app.asana.com/api/1.0/workspaces על גבי HTTPS ו-Asana ענתה HTTP 401, שאותה השרת החזיר כקטע שמופיע למטה. כלומר טבלת הכלים נספרה בריצה חיה והכישלון הוא שגיאת אימות אמיתית מ-Asana עצמה, בעוד שקריאה מאומתת עדיין ממתינה לאסימון גישה אישי אמיתי של Asana באותו משתנה.
הודעת הפתיחה של השרת
Starting Asana MCP Server... Connecting server to transport... Asana MCP Server running on stdio
קריאת כלי אמיתית אחת
tools/call asana_list_workspaces {}{"error":"Unauthorized"}שורות אמיתיות מהתוצאה שנלכדה: מספיק כדי להוכיח שהקריאה נענתה.
כלים
השרת ענה ל-tools/list עם 41 כלים בתאריך 2026-08-03. השמות, התיאורים והפרמטרים למטה הם המילים שלו עצמו, מועתקים מהתשובה הזו וללא עריכה.
| כלי | מה הוא עושה |
|---|---|
| asana_list_workspacesopt_fields | List all available workspaces in Asana |
| asana_search_projectsworkspace*name_pattern*archivedopt_fields | Search for projects in Asana using name pattern matching |
| asana_get_my_tasksworkspace*opt_fieldscompleted_since | Get tasks from the authenticated user's 'My Tasks' list in a workspace. Returns the user's personal task list including sections like Inbox, Today, This Week, etc. |
| asana_search_tasksworkspace*textresource_subtypeportfolios_anyassignee_anyassignee_notprojects_anyprojects_notprojects_allsections_anysections_notsections_alltags_anytags_nottags_allteams_anyfollowers_notcreated_by_anycreated_by_notassigned_by_anyassigned_by_notliked_by_notcommented_on_by_notdue_ondue_on_beforedue_on_afterdue_at_beforedue_at_afterstart_onstart_on_beforestart_on_aftercreated_oncreated_on_beforecreated_on_aftercreated_at_beforecreated_at_aftercompleted_oncompleted_on_beforecompleted_on_aftercompleted_at_beforecompleted_at_aftermodified_onmodified_on_beforemodified_on_aftermodified_at_beforemodified_at_aftercompletedis_subtaskhas_attachmentis_blockedis_blockingsort_bysort_ascendingopt_fieldscustom_fields | Search tasks in a workspace with advanced filtering options |
| asana_get_tasktask_id*opt_fields | Get detailed information about a specific task |
| asana_create_taskproject_id*name*noteshtml_notesdue_onassigneefollowersparentprojectsresource_subtypecustom_fields | Create a new task in a project |
| asana_get_task_storiestask_id*opt_fields | Get comments and stories for a specific task |
| asana_update_tasktask_id*namenoteshtml_notesdue_onassigneefollowersparentcompletedresource_subtypecustom_fields | Update an existing task's details |
| asana_get_projectproject_id*opt_fields | Get detailed information about a specific project |
| asana_get_project_task_countsproject_id*opt_fields | Get the number of tasks in a project |
| asana_get_project_sectionsproject_id*opt_fields | Get sections in a project |
| asana_get_tasks_for_projectproject_id*opt_fieldslimitoffset | Get all tasks in a project. Use this instead of search_tasks when you need to list tasks in a specific project. Supports pagination and optional field selection. |
| asana_create_projectworkspace*name*teamnotescolorprivacy_settingdefault_viewopt_fields | Create a new project in a workspace or team |
| asana_create_task_storytask_id*texthtml_textopt_fields | Create a comment or story on a task. Either text or html_text is required. |
| asana_add_task_dependenciestask_id*dependencies* | Set dependencies for a task |
| asana_add_task_dependentstask_id*dependents* | Set dependents for a task (tasks that depend on this task) |
| asana_create_subtaskparent_task_id*name*noteshtml_notesdue_onassigneeopt_fields | Create a new subtask for an existing task |
| asana_get_subtaskstask_gid*opt_fields | Get all subtasks of a given task. Returns a compact representation of each subtask. |
| asana_get_multiple_tasks_by_gidtask_ids*opt_fields | Get detailed information about multiple tasks by their GIDs (maximum 25 tasks) |
| asana_get_project_statusproject_status_gid*opt_fields | Get a project status update |
| asana_get_project_statusesproject_gid*limitoffsetopt_fields | Get all status updates for a project |
| asana_create_project_statusproject_gid*text*colortitlehtml_textopt_fields | Create a new status update for a project |
| asana_delete_project_statusproject_status_gid* | Delete a project status update |
| asana_set_parent_for_taskdata*task_id*opts | Set the parent of a task and position the subtask within the other subtasks of that parent |
| asana_get_tagtag_gid*opt_fields | Get detailed information about a specific tag |
| asana_get_tags_for_tasktask_gid*limitoffsetopt_fields | Get a task's tags |
| asana_get_tags_for_workspaceworkspace_gid*limitoffsetopt_fields | Get tags in a workspace |
| asana_update_tagtag_gid*namecolornotesopt_fields | Update an existing tag |
| asana_delete_tagtag_gid* | Delete a tag |
| asana_get_tasks_for_tagtag_gid*opt_fieldsopt_prettylimitoffset | Get tasks for a specific tag |
| asana_create_tag_for_workspaceworkspace_gid*name*followerscolornotesopt_fields | Create a new tag in a workspace |
| asana_add_tag_to_tasktask_gid*tag_gid* | Add a tag to a task |
| asana_remove_tag_from_tasktask_gid*tag_gid* | Remove a tag from a task |
| asana_add_project_to_tasktask_id*project_id*sectioninsert_afterinsert_before | Add an existing task to a project. If no positioning arguments are given, the task will be added to the end of the project. |
| asana_remove_project_from_tasktask_id*project_id* | Remove a task from a project. The task will still exist in the system, but it will not be in the project anymore. |
| asana_delete_tasktask_id* | Delete a task. This permanently removes the task and cannot be undone. |
| asana_create_sectionproject_id*name*opt_fields | Create a new section in a project |
| asana_update_sectionsection_id*name*opt_fields | Update a section (rename it) |
| asana_delete_sectionsection_id* | Delete a section from a project |
| asana_add_task_to_sectionsection_id*task_id*insert_beforeinsert_after | Move a task to a section within its project |
| asana_update_projectproject_id*namenoteshtml_notescolorprivacy_settingopt_fields | Update a project's details (name, description, etc.) |
פרמטרים המסומנים ב-* הם חובה.
התקנה
העתיקו את הבלוק של האפליקציה שלכם. כל אחד מהם הוא ההגדרה המדויקת שאיתה אימתנו את השרת.
פתחו את הקובץ ~/Library/Application Support/Claude/claude_desktop_config.json (בתוך Claude Desktop: Settings, אחר כך Developer, אחר כך Edit Config) והוסיפו:
{
"mcpServers": {
"asana": {
"command": "npx",
"args": [
"-y",
"@roychri/mcp-server-asana"
],
"env": {
"ASANA_ACCESS_TOKEN": "your-asana-token-here"
}
}
}
}החליפו את your-asana-token-here באסימון הגישה האישי שלכם מ-Asana, ואז סגרו ופתחו מחדש את Claude Desktop. ל-Asana יש גם נקודת קצה מתארחת משלה ל-MCP בכתובת https://mcp.asana.com/v2/mcp, שמוסיפים כמחבר מרוחק ומאשרים בדפדפן במקום להדביק אסימון; זהו שרת אחר מהחבילה שמוגדרת כאן, ואת הכלים שלו לא ספרנו. [4][6][5]
פקודה אחת בטרמינל:
claude mcp add asana -e ASANA_ACCESS_TOKEN=your-asana-token-here -- npx -y @roychri/mcp-server-asana
כל מה שאחרי המקף הכפול הוא הפקודה המדויקת ש-Claude Code יריץ, ו--e קובע את משתנה הסביבה שאיתו היא רצה. אישרנו את הדגל על ה-Mac הזה עם claude mcp add --help: הדגל -e מקבל זוג KEY=value אחד וניתן לחזור עליו, ו-stdio הוא תעבורת ברירת המחדל. [7]
הוסיפו ל-~/.cursor/mcp.json עבור כל הפרויקטים, או ל-.cursor/mcp.json בתוך פרויקט אחד:
{
"mcpServers": {
"asana": {
"command": "npx",
"args": [
"-y",
"@roychri/mcp-server-asana"
],
"env": {
"ASANA_ACCESS_TOKEN": "your-asana-token-here"
}
}
}
}Cursor קורא את הקובץ מחדש אחרי הפעלה מחדש. שמרו את האסימון מחוץ לקובץ פרויקט שנכנס ל-git: הקובץ הגלובלי ~/.cursor/mcp.json הוא הבית הבטוח יותר עבורו. [8]
בלי קובץ JSON ובלי טרמינל. ב-Routines: Settings, אחר כך Assistant, אחר כך Connections, אחר כך Add MCP Server. העבירו את הטופס ל-Command (stdio) והזינו:
Name Asana Command npx Arguments -y @roychri/mcp-server-asana Environment Variables ASANA_ACCESS_TOKEN=your-asana-token-here
האסימון נכנס לשדה Environment Variables כשורת KEY=value אחת, כך שהוא לעולם לא יושב בשורת ה-Arguments. לחצו קודם על Test Connection: שרת תקין עונה עם מספר הכלים שלו. [9][4]
בלי טרמינל
אם מעולם לא פתחתם את הטרמינל ואין לכם כוונה להתחיל, זה המסלול שלכם. Routines היא אפליקציית Mac שמריצה שרתי MCP בשבילכם: ממלאים ארבעה שדות פעם אחת, והכלים של השרת זמינים ל-AI שלכם בצ׳אט ובשגרות מתוזמנות.
01
הורידו את האפליקציה מ-getroutines.ai/download, גררו אותה ל-Applications והתחברו.
02
לחצו על החשבון שלכם בתחתית סרגל הצד ובחרו Settings. פתחו את הקטע Assistant, אחר כך את הלשונית Connections, גללו אל MCP Servers ולחצו על Add MCP Server.
03
העבירו את הטופס ל-Command (stdio): השרת הזה הוא פקודה, לא כתובת אינטרנט. קראו לו Asana. Command: npx. Arguments: -y @roychri/mcp-server-asana, בדיוק כפי שכתוב, עם רווח אחד בין החלקים.
04
ב-Asana לחצו על תמונת הפרופיל שלכם, אחר כך My Settings, אחר כך הלשונית Apps, אחר כך Manage Developer Apps, או גשו ישירות ל-app.asana.com/0/my-apps. צרו אסימון גישה אישי והעתיקו אותו: Asana מציגה את הערך המלא פעם אחת בלבד. התייחסו אליו כמו לסיסמה, כי מי שמחזיק בו יכול לקרוא, לשנות ולמחוק כל דבר שאתם מגיעים אליו ב-Asana.
05
בשדה Environment Variables הוסיפו שורה אחת: ASANA_ACCESS_TOKEN=your-asana-token-here, עם האסימון שלכם אחרי סימן השווה ובלי רווחים סביבו. לחצו Test Connection: Routines מפעילה את השרת ומדווחת כמה כלים היא מצאה, ארבעים ואחד עבור השרת הזה. אחר כך לחצו Add Server.
06
הכלים עובדים בצ׳אט מיד. כדי לתת לשגרה מתוזמנת להשתמש בהם, פתחו את השגרה, מצאו את הכרטיס Tools & connections וסמנו את השרת תחת Apps.
רעיונות לשגרות
אחרי שהשרת מחובר, שגרה מתוזמנת יכולה להשתמש בכלים שלו גם כשאתם לא מול המסך. העתיקו פרומפט, הדביקו אותו ב-Routines ובחרו שעה. הפרומפטים כתובים באנגלית בכוונה, מדביקים אותם בדיוק כפי שהם.
Every Monday at 8:00, list my open Asana tasks due this week grouped by project, call out anything already overdue, and write the whole plan to week-ahead.md.
Every Friday at 16:00, gather the Asana tasks completed this week in my main project plus anything still blocked, then post a short status update on that project summarizing both.
Every weekday at 17:30, find the Asana tasks assigned to me that were due before today and are still open, and write them to overdue.md with a one-line note on what each one is waiting for.
פתרון תקלות
שגיאות אמיתיות שנלכדו בריצת האימות, מודפסות בדיוק כפי שהשרת החזיר אותן.
מה רואים
Please set ASANA_ACCESS_TOKEN environment variable
הפתרון
המשתנה חסר לגמרי, ולכן השרת מסרב לעלות: הוא מדפיס את השורה הזו ל-stderr, יוצא בלי לכתוב דבר ל-stdout, והלקוח שלכם מדווח שהחיבור נכשל. הוסיפו את ASANA_ACCESS_TOKEN בבלוק ה-env בקובץ ה-JSON, אחרי -e בפקודת Claude Code, או בשדה Environment Variables ב-Routines, ואז הפעילו את הלקוח מחדש.
מה רואים
{"error":"Unauthorized"}הפתרון
Asana דחתה את האסימון. זו התשובה המדויקת שהריצה שלנו הפיקה, כי הפעלנו את השרת בכוונה עם ערך ממלא מקום: הבקשה הגיעה אל https://app.asana.com/api/1.0/workspaces ו-Asana ענתה HTTP 401. בדקו ש-ASANA_ACCESS_TOKEN מכיל את אסימון הגישה האישי האמיתי שלכם, שהעתקתם אותו במלואו בלי רווח בסוף, ושהפעלתם מחדש את הלקוח אחרי השינוי, כי הערך נקרא כשהשרת עולה ולא בזמן קריאת הכלי.
מה רואים
{"error":"Unauthorized"}הפתרון
שתי בדיקות שלנו חשפו את המלכודת הזו. קריאה תקינה במבנה שלה עם מזהה פרויקט שאינו קיים, וקריאת חיפוש שבה completed קיבל את הטקסט not-a-boolean במקום true או false, שתיהן חזרו עם אותה שגיאת אימות: השרת מעביר את הארגומנטים ל-Asana, ו-Asana בודקת את אישור הגישה לפני שהיא שופטת את הבקשה. לכן כל עוד האסימון שגוי, Unauthorized היא השגיאה היחידה שתראו, והיא מסתירה כל דבר אחר. תקנו קודם את האסימון ואז קראו את השגיאה שוב: עם אסימון אמיתי מזהה שגוי מחזיר את הודעת ״לא נמצא״ של Asana במקום זאת.
מה רואים
{"error":"Missing the required parameter 'task_gid' when calling getTask"}הפתרון
גרמנו לזה בקריאה ל-asana_get_task בלי ארגומנטים. הכלי מצהיר על הארגומנט הנדרש שלו בשם task_id, אבל מתחת לפני השטח הוא משתמש בספרייה הרשמית של Asana ל-Node, שקוראת לאותו ערך task_gid, וההודעה של הספרייה היא זו שמגיעה אליכם. מדובר באותו דבר בדיוק: המזהה המספרי שמופיע בסוף כתובת המשימה ב-Asana. שלחו אותו בתור task_id והקריאה תעבור.
מה רואים
{"error":"Unknown tool: asana_get_taks"}הפתרון
שגיאת הקלדה בשם הכלי, שלנו ובכוונה. השרת לא מנחש ולא מתקן: הוא עונה עם השם שקיבל. כל שם שהוא מקבל נמצא בטבלה למעלה, כל 41 הכלים, וכולם מתחילים ב-asana_. אם העוזר שלכם ממשיך לנסות כלי שאינו קיים, הדביקו לו את הרשימה בשיחה כדי שיעבוד עם השמות האמיתיים.
מה רואים
{"error":"invalid_request","error_description":"Authorization header is required for MCP V2 access"}הפתרון
זו אינה החבילה שבעמוד הזה. Asana מפעילה שרת MCP משלה בכתובת https://mcp.asana.com/v2/mcp, ואנחנו שלחנו בדיוק לכתובת הזו בקשה חשופה בלי אישור גישה: היא ענתה 401 עם כותרת אתגר OAuth שמציינת את התחום Asana MCP ומפנה למטא-נתונים של oauth-protected-resource. זו נקודת קצה שעובדת כמתוכנן. מדובר בהתחברות בדפדפן ולא באסימון שמדביקים, ולכן לקוח שלא פותח את חלון האישור יישאר תקוע על השגיאה הזו. אם אתם רוצים את מסלול האסימון בלי OAuth, השתמשו בפקודת npx שבעמוד הזה.
הפתרון
הפקודה npx שייכת ל-Node.js. אם Node לא מותקן על ה-Mac, כל לקוח בעמוד הזה ייכשל בשלב ההפעלה עוד לפני שהשרת מספיק לומר משהו. התקינו Node מ-nodejs.org, הפעילו מחדש את לקוח ה-MCP ונסו שוב.
שאלות נפוצות
זו תוכנה קטנה שנותנת לעוזר AI גישה לחשבון ה-Asana שלכם דרך ה-Model Context Protocol. זה שבעמוד הזה, @roychri/mcp-server-asana, הוא חבילה קהילתית של מפתח עצמאי בשם Christian Roy, והוא רץ כפקודה מקומית על ה-Mac שלכם שמדברת עם אפליקציית ה-AI על גבי stdio. אחרי החיבור, עוזר כמו Claude יכול לחפש את הפרויקטים והמשימות שלכם, ליצור ולעדכן אותם, להגיב, לתייג, להעביר משימות בין מקטעים ולפרסם עדכוני סטטוס לפרויקט. [1][3][4]
כן, והוא דבר אחר מהחבילה שבעמוד הזה. Asana מתעדת שרת MCP מתארח בכתובת https://mcp.asana.com/v2/mcp, שמוסיפים ללקוח כמחבר מרוחק ומאשרים עם חשבון ה-Asana שלכם בדפדפן, בלי חבילת npm ובלי אסימון להעתיק. אישרנו שנקודת הקצה הזו פעילה בתאריך 2026-08-03: בקשה בלי אישור גישה חוזרת עם 401 ואתגר OAuth תקני. לא יכולנו לספור את הכלים שלה, כי לשם כך צריך התחברות בדפדפן שלא ביצענו, ולכן כל מספר בעמוד הזה שייך לחבילה הקהילתית שכן הרצנו. [5]
השרת הרץ חושף 41 כלים. סביבות עבודה ופרויקטים: asana_list_workspaces, asana_search_projects, asana_get_project, asana_create_project, asana_update_project, asana_get_project_task_counts, asana_get_project_sections, asana_get_tasks_for_project. משימות: asana_get_my_tasks, asana_search_tasks, asana_get_task, asana_get_multiple_tasks_by_gid, asana_create_task, asana_update_task, asana_delete_task, asana_add_project_to_task, asana_remove_project_from_task. תת-משימות ותלויות: asana_create_subtask, asana_get_subtasks, asana_set_parent_for_task, asana_add_task_dependencies, asana_add_task_dependents. תגובות: asana_get_task_stories, asana_create_task_story. מקטעים: asana_create_section, asana_update_section, asana_delete_section, asana_add_task_to_section. תוויות: asana_get_tag, asana_get_tags_for_task, asana_get_tags_for_workspace, asana_create_tag_for_workspace, asana_update_tag, asana_delete_tag, asana_get_tasks_for_tag, asana_add_tag_to_task, asana_remove_tag_from_task. עדכוני סטטוס: asana_get_project_status, asana_get_project_statuses, asana_create_project_status, asana_delete_project_status. הטבלה למעלה היא פלט ה-tools/list החי, מילה במילה.
כי רשימת הכלים שבטקסט ה-README נשארה מאחור ביחס לקוד. לא ספרנו את ה-README: שאלנו את השרת הרץ, והוא ענה ב-tools/list עם 41 כלים, שכמה מהם אינם מוזכרים ב-README כלל, ובהם asana_get_tags_for_workspace, asana_create_project_status, asana_set_parent_for_task ו-asana_get_multiple_tasks_by_gid. התשובה החיה היא הקובעת, כי היא מה שלקוח ה-AI שלכם באמת רואה כשהוא מתחבר. [4]
כדאי להסתכל על היקף הגישה בעיניים פקוחות. אסימון גישה אישי פועל בשמכם, ולכן השרת הזה מגיע לכל סביבת עבודה, פרויקט ומשימה שחשבון ה-Asana שלכם מגיע אליהם, ורשימת הכלים כוללת את asana_delete_task, שלפי התיאור שלו עצמו מוחק את המשימה לצמיתות בלי אפשרות לשחזר, ולצדו asana_delete_section, asana_delete_tag ו-asana_delete_project_status. שום דבר לא מצמצם את זה לפרויקט אחד. ה-README מתעד משתנה סביבה אופציונלי, READ_ONLY_MODE=true, שמכבה את כלי הכתיבה; לא הפעלנו אותו בריצה הזו, ולכן התייחסו אליו כאל מתועד ולא כאל מאומת. ההרגלים הנכונים: שמרו את האסימון בשדה משתני הסביבה שהלקוח שלכם מחזיק באופן פרטי, בקשו מהעוזר להראות לכם מה הוא עומד לשנות לפני שהוא משנה, ומחקו את האסימון ב-Asana ברגע שהפסקתם להשתמש בחיבור. [4]
מקורות
כל מה שבעמוד הזה שלא ראינו בעצמנו בריצה מקושר כאן, עם התאריך שבו קראנו אותו. לגבי השאר, הריצה עצמה היא הקבלה.
[1]
Latest version 1.8.0, published 2026-03-29; license MIT; author Christian Roy; npm maintainer roychri; package first published 2024-12-04; ships the mcp-server-asana binary that runs over stdio.
[2]
3,466 downloads for the week 2026-07-27 to 2026-08-02.
[3]
145 stars, licensed MIT, not archived, and a push dated 2026-05-10 at access time, per the GitHub API.
[4]
Names the ASANA_ACCESS_TOKEN variable and where in Asana to create the token, documents the optional READ_ONLY_MODE=true variable, and lists about 20 tools in prose against the 41 the running server reports.
[5]
Tells clients to connect to https://mcp.asana.com/v2/mcp over Streamable HTTP and to authenticate with an Asana account when prompted. That hosted endpoint is not the package on this page and its tool list is not enumerated here.
[6]
The Claude Desktop config file location and the editing flow.
[7]
The claude mcp add syntax for local stdio servers, including the -e flag for environment variables.
[8]
[9]
How Routines runs one-click OAuth connectors and any MCP server.
העמוד הזה מתאר את Asana כפי שהתנהג בריצה מתוארכת אחת על Mac אחד. גרסאות משתנות: אם משהו כאן כבר לא תואם למה שאתם רואים, תאריך הלכידה בראש העמוד אומר בן כמה הצילום.
מאחורי המדריך הזה
Routines, האפליקציה שמאחורי המדריך הזה, מריצה שרתי MCP כמו זה בלי טרמינל: כך עובדים המחברים. הפתקים שלכם נשארים קובצי markdown על ה-Mac שלכם, אין חשבון ענן לשלם, והיא עובדת גם בלי אינטרנט. להורדת Routines