[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F8Q8GTXW7P2F655TY0FZ8A":3,"skill-same:01M6F8Q8GTXW7P2F655TY0FZ8A":78},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":55,"commitSha":56,"skillDirectory":57,"forksCount":58,"repositoryHtmlUrl":59,"repositoryHomepageUrl":60,"ownerHtmlUrl":61,"ownerBlogUrl":6,"ownerDescription":62,"updatedAt":63,"install":64,"resources":77},"01M6F8Q8GTXW7P2F655TY0FZ8A","clickup-reference-architecture",null,"Production architecture for ClickUp API v2 integrations with layered design,\ncustom fields, time tracking, goals, and two-way sync patterns.\nTrigger: \"clickup architecture\", \"clickup design\", \"clickup project structure\",\n\"clickup custom fields\", \"clickup time tracking\", \"clickup goals API\".","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fclickup-reference-architecture\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"reference","clickup reference architecture","clickup","architecture","goals","project structure","layered design","with","trigger","io","project","time","structure","code","design","read","integrations","api","saas","productivity","2026-11-10 10:12:30",false,"---\nname: clickup-reference-architecture\ndescription: |\n  Production architecture for ClickUp API v2 integrations with layered design,\n  custom fields, time tracking, goals, and two-way sync patterns.\n  Trigger: \"clickup architecture\", \"clickup design\", \"clickup project structure\",\n  \"clickup custom fields\", \"clickup time tracking\", \"clickup goals API\".\nallowed-tools: Read, Grep\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\ntags: [saas, productivity, clickup]\ncompatible-with: claude-code\n---\n\n# ClickUp Reference Architecture\n\n## Overview\n\nProduction-ready architecture for ClickUp API v2 integrations covering custom fields, time tracking, goals, and two-way sync with external systems.\n\n## Architecture Layers\n\n```\n┌──────────────────────────────────────────┐\n│          Application Layer               │\n│   (Routes, Controllers, Webhooks)        │\n├──────────────────────────────────────────┤\n│          Service Layer                   │\n│   (Business Logic, Orchestration)        │\n├──────────────────────────────────────────┤\n│          ClickUp Client Layer            │\n│   (API Wrapper, Types, Cache, Retry)     │\n├──────────────────────────────────────────┤\n│          Infrastructure                  │\n│   (Queue, Cache, Monitoring, Secrets)    │\n└──────────────────────────────────────────┘\n          │\n          ▼\n  api.clickup.com\u002Fapi\u002Fv2\u002F\n```\n\n## Custom Fields API\n\nCustom fields let you extend tasks beyond built-in fields. Each field has a UUID and a type.\n\n```\nGET  \u002Fapi\u002Fv2\u002Flist\u002F{list_id}\u002Ffield          Get accessible custom fields\nPOST \u002Fapi\u002Fv2\u002Ftask\u002F{task_id}\u002Ffield\u002F{field_id}  Set custom field value\nDELETE \u002Fapi\u002Fv2\u002Ftask\u002F{task_id}\u002Ffield\u002F{field_id}  Remove custom field value\n```\n\n### Custom Field Types and Value Formats\n\n| Type | `value` Format | Example |\n|------|---------------|---------|\n| `text` | string | `\"Release v2.1\"` |\n| `number` | number | `42` |\n| `money` \u002F `currency` | number (in smallest unit) | `9999` (= $99.99) |\n| `date` | Unix ms timestamp | `1695000000000` |\n| `drop_down` | option UUID from `type_config.options` | `\"opt_uuid_123\"` |\n| `labels` | array of label UUIDs | `[\"lbl_uuid_1\", \"lbl_uuid_2\"]` |\n| `checkbox` | boolean | `true` |\n| `email` | string | `\"user@example.com\"` |\n| `phone` | string | `\"+1-555-0100\"` |\n| `url` | string | `\"https:\u002F\u002Fexample.com\"` |\n| `rating` | number (0-5) | `4` |\n| `location` | object | `{ \"lat\": 33.749, \"lng\": -84.388 }` |\n\n```typescript\n\u002F\u002F Get custom fields for a list\nconst fields = await clickupRequest(`\u002Flist\u002F${listId}\u002Ffield`);\n\u002F\u002F Response: { fields: [{ id: \"uuid\", name: \"Sprint\", type: \"drop_down\", type_config: { options: [...] } }] }\n\n\u002F\u002F Set a dropdown custom field\nconst sprintField = fields.fields.find((f: any) => f.name === 'Sprint');\nconst nextSprint = sprintField.type_config.options.find((o: any) => o.name === 'Sprint 24');\n\nawait clickupRequest(`\u002Ftask\u002F${taskId}\u002Ffield\u002F${sprintField.id}`, {\n  method: 'POST',\n  body: JSON.stringify({ value: nextSprint.orderindex }),\n});\n\n\u002F\u002F Set a date custom field\nawait clickupRequest(`\u002Ftask\u002F${taskId}\u002Ffield\u002F${dateFieldId}`, {\n  method: 'POST',\n  body: JSON.stringify({ value: Date.now() + 604800000 }), \u002F\u002F 1 week from now\n});\n```\n\n## Time Tracking API\n\n```\nPOST   \u002Fapi\u002Fv2\u002Fteam\u002F{team_id}\u002Ftime_entries     Create time entry\nGET    \u002Fapi\u002Fv2\u002Fteam\u002F{team_id}\u002Ftime_entries     Get time entries (date range)\nGET    \u002Fapi\u002Fv2\u002Fteam\u002F{team_id}\u002Ftime_entries\u002Fcurrent  Get running timer\nGET    \u002Fapi\u002Fv2\u002Ftask\u002F{task_id}\u002Ftime             Get tracked time on task\nPUT    \u002Fapi\u002Fv2\u002Fteam\u002F{team_id}\u002Ftime_entries\u002F{timer_id}  Update entry\nDELETE \u002Fapi\u002Fv2\u002Fteam\u002F{team_id}\u002Ftime_entries\u002F{timer_id}  Delete entry\n```\n\n```typescript\n\u002F\u002F Create a time entry (logged time)\nawait clickupRequest(`\u002Fteam\u002F${teamId}\u002Ftime_entries`, {\n  method: 'POST',\n  body: JSON.stringify({\n    task_id: 'abc123',\n    description: 'Worked on auth module',\n    start: Date.now() - 3600000, \u002F\u002F 1 hour ago\n    duration: 3600000,           \u002F\u002F 1 hour in ms\n    assignee: 183,               \u002F\u002F user ID\n    billable: true,\n  }),\n});\n\n\u002F\u002F Get entries for a date range (default: last 30 days)\nconst entries = await clickupRequest(\n  `\u002Fteam\u002F${teamId}\u002Ftime_entries?start_date=${startMs}&end_date=${endMs}`\n);\n\u002F\u002F Note: negative duration means timer is currently running\n```\n\n## Goals API\n\n```\nPOST   \u002Fapi\u002Fv2\u002Fteam\u002F{team_id}\u002Fgoal         Create goal\nGET    \u002Fapi\u002Fv2\u002Fteam\u002F{team_id}\u002Fgoal         Get goals\nGET    \u002Fapi\u002Fv2\u002Fgoal\u002F{goal_id}              Get goal\nPUT    \u002Fapi\u002Fv2\u002Fgoal\u002F{goal_id}              Update goal\nDELETE \u002Fapi\u002Fv2\u002Fgoal\u002F{goal_id}              Delete goal\nPOST   \u002Fapi\u002Fv2\u002Fgoal\u002F{goal_id}\u002Fkey_result   Create key result\nPUT    \u002Fapi\u002Fv2\u002Fkey_result\u002F{key_result_id}  Update key result\nDELETE \u002Fapi\u002Fv2\u002Fkey_result\u002F{key_result_id}  Delete key result\n```\n\n```typescript\n\u002F\u002F Create a goal with key results\nconst goal = await clickupRequest(`\u002Fteam\u002F${teamId}\u002Fgoal`, {\n  method: 'POST',\n  body: JSON.stringify({\n    name: 'Q1 2026 Engineering OKRs',\n    due_date: 1711929600000,\n    description: 'Engineering team quarterly objectives',\n    multiple_owners: true,\n    owners: [183, 456],\n    color: '#05a1f5',\n  }),\n});\n\n\u002F\u002F Add a key result (target)\nawait clickupRequest(`\u002Fgoal\u002F${goal.goal.id}\u002Fkey_result`, {\n  method: 'POST',\n  body: JSON.stringify({\n    name: 'Reduce P95 latency to \u003C200ms',\n    type: 'number',\n    steps_start: 500,\n    steps_end: 200,\n    unit: 'ms',\n    owners: [183],\n  }),\n});\n```\n\n## Two-Way Sync Pattern\n\n```typescript\n\u002F\u002F Sync ClickUp tasks to external system and vice versa\nclass ClickUpSyncService {\n  async syncToExternal(listId: string) {\n    const { tasks } = await clickupRequest(`\u002Flist\u002F${listId}\u002Ftask?archived=false`);\n\n    for (const task of tasks) {\n      await externalSystem.upsert({\n        externalId: task.id,\n        title: task.name,\n        status: this.mapStatus(task.status.status),\n        assignee: task.assignees[0]?.email,\n        updatedAt: parseInt(task.date_updated),\n      });\n    }\n  }\n\n  async syncFromExternal(externalItem: ExternalItem) {\n    if (externalItem.clickupTaskId) {\n      await clickupRequest(`\u002Ftask\u002F${externalItem.clickupTaskId}`, {\n        method: 'PUT',\n        body: JSON.stringify({\n          name: externalItem.title,\n          status: this.reverseMapStatus(externalItem.status),\n        }),\n      });\n    }\n  }\n\n  private mapStatus(clickupStatus: string): string {\n    const map: Record\u003Cstring, string> = {\n      'to do': 'backlog', 'in progress': 'active',\n      'review': 'in_review', 'complete': 'done',\n    };\n    return map[clickupStatus] ?? 'backlog';\n  }\n}\n```\n\n## Error Handling\n\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| Custom field UUID not found | Field removed or renamed | Re-fetch fields via `\u002Flist\u002F{id}\u002Ffield` |\n| Time entry negative duration | Timer still running | Stop timer before reading duration |\n| Goal permission denied | User not goal owner | Add user to goal owners |\n| Sync conflict | Both sides updated | Last-write-wins or manual merge |\n\n## Resources\n\n- [Custom Fields Docs](https:\u002F\u002Fdeveloper.clickup.com\u002Fdocs\u002Fcustomfields)\n- [Set Custom Field Value](https:\u002F\u002Fdeveloper.clickup.com\u002Freference\u002Fsetcustomfieldvalue)\n- [Time Tracking Endpoints](https:\u002F\u002Fdeveloper.clickup.com\u002Freference\u002Fcreateatimeentry)\n- [ClickUp Developer Portal](https:\u002F\u002Fdeveloper.clickup.com\u002F)\n\n## Next Steps\n\nFor multi-environment setup, see `clickup-multi-env-setup`.\n\n","# ClickUp Reference Architecture\n\n## Overview\n\nProduction-ready architecture for ClickUp API v2 integrations covering custom fields, time tracking, goals, and two-way sync with external systems.\n\n## Architecture Layers\n\n```\n┌──────────────────────────────────────────┐\n│          Application Layer               │\n│   (Routes, Controllers, Webhooks)        │\n├──────────────────────────────────────────┤\n│          Service Layer                   │\n│   (Business Logic, Orchestration)        │\n├──────────────────────────────────────────┤\n│          ClickUp Client Layer            │\n│   (API Wrapper, Types, Cache, Retry)     │\n├──────────────────────────────────────────┤\n│          Infrastructure                  │\n│   (Queue, Cache, Monitoring, Secrets)    │\n└──────────────────────────────────────────┘\n          │\n          ▼\n  api.clickup.com\u002Fapi\u002Fv2\u002F\n```\n\n## Custom Fields API\n\nCustom fields let you extend tasks beyond built-in fields. Each field has a UUID and a type.\n\n```\nGET  \u002Fapi\u002Fv2\u002Flist\u002F{list_id}\u002Ffield          Get accessible custom fields\nPOST \u002Fapi\u002Fv2\u002Ftask\u002F{task_id}\u002Ffield\u002F{field_id}  Set custom field value\nDELETE \u002Fapi\u002Fv2\u002Ftask\u002F{task_id}\u002Ffield\u002F{field_id}  Remove custom field value\n```\n\n### Custom Field Types and Value Formats\n\n| Type | `value` Format | Example |\n|------|---------------|---------|\n| `text` | string | `\"Release v2.1\"` |\n| `number` | number | `42` |\n| `money` \u002F `currency` | number (in smallest unit) | `9999` (= $99.99) |\n| `date` | Unix ms timestamp | `1695000000000` |\n| `drop_down` | option UUID from `type_config.options` | `\"opt_uuid_123\"` |\n| `labels` | array of label UUIDs | `[\"lbl_uuid_1\", \"lbl_uuid_2\"]` |\n| `checkbox` | boolean | `true` |\n| `email` | string | `\"user@example.com\"` |\n| `phone` | string | `\"+1-555-0100\"` |\n| `url` | string | `\"https:\u002F\u002Fexample.com\"` |\n| `rating` | number (0-5) | `4` |\n| `location` | object | `{ \"lat\": 33.749, \"lng\": -84.388 }` |\n\n```typescript\n\u002F\u002F Get custom fields for a list\nconst fields = await clickupRequest(`\u002Flist\u002F${listId}\u002Ffield`);\n\u002F\u002F Response: { fields: [{ id: \"uuid\", name: \"Sprint\", type: \"drop_down\", type_config: { options: [...] } }] }\n\n\u002F\u002F Set a dropdown custom field\nconst sprintField = fields.fields.find((f: any) => f.name === 'Sprint');\nconst nextSprint = sprintField.type_config.options.find((o: any) => o.name === 'Sprint 24');\n\nawait clickupRequest(`\u002Ftask\u002F${taskId}\u002Ffield\u002F${sprintField.id}`, {\n  method: 'POST',\n  body: JSON.stringify({ value: nextSprint.orderindex }),\n});\n\n\u002F\u002F Set a date custom field\nawait clickupRequest(`\u002Ftask\u002F${taskId}\u002Ffield\u002F${dateFieldId}`, {\n  method: 'POST',\n  body: JSON.stringify({ value: Date.now() + 604800000 }), \u002F\u002F 1 week from now\n});\n```\n\n## Time Tracking API\n\n```\nPOST   \u002Fapi\u002Fv2\u002Fteam\u002F{team_id}\u002Ftime_entries     Create time entry\nGET    \u002Fapi\u002Fv2\u002Fteam\u002F{team_id}\u002Ftime_entries     Get time entries (date range)\nGET    \u002Fapi\u002Fv2\u002Fteam\u002F{team_id}\u002Ftime_entries\u002Fcurrent  Get running timer\nGET    \u002Fapi\u002Fv2\u002Ftask\u002F{task_id}\u002Ftime             Get tracked time on task\nPUT    \u002Fapi\u002Fv2\u002Fteam\u002F{team_id}\u002Ftime_entries\u002F{timer_id}  Update entry\nDELETE \u002Fapi\u002Fv2\u002Fteam\u002F{team_id}\u002Ftime_entries\u002F{timer_id}  Delete entry\n```\n\n```typescript\n\u002F\u002F Create a time entry (logged time)\nawait clickupRequest(`\u002Fteam\u002F${teamId}\u002Ftime_entries`, {\n  method: 'POST',\n  body: JSON.stringify({\n    task_id: 'abc123',\n    description: 'Worked on auth module',\n    start: Date.now() - 3600000, \u002F\u002F 1 hour ago\n    duration: 3600000,           \u002F\u002F 1 hour in ms\n    assignee: 183,               \u002F\u002F user ID\n    billable: true,\n  }),\n});\n\n\u002F\u002F Get entries for a date range (default: last 30 days)\nconst entries = await clickupRequest(\n  `\u002Fteam\u002F${teamId}\u002Ftime_entries?start_date=${startMs}&end_date=${endMs}`\n);\n\u002F\u002F Note: negative duration means timer is currently running\n```\n\n## Goals API\n\n```\nPOST   \u002Fapi\u002Fv2\u002Fteam\u002F{team_id}\u002Fgoal         Create goal\nGET    \u002Fapi\u002Fv2\u002Fteam\u002F{team_id}\u002Fgoal         Get goals\nGET    \u002Fapi\u002Fv2\u002Fgoal\u002F{goal_id}              Get goal\nPUT    \u002Fapi\u002Fv2\u002Fgoal\u002F{goal_id}              Update goal\nDELETE \u002Fapi\u002Fv2\u002Fgoal\u002F{goal_id}              Delete goal\nPOST   \u002Fapi\u002Fv2\u002Fgoal\u002F{goal_id}\u002Fkey_result   Create key result\nPUT    \u002Fapi\u002Fv2\u002Fkey_result\u002F{key_result_id}  Update key result\nDELETE \u002Fapi\u002Fv2\u002Fkey_result\u002F{key_result_id}  Delete key result\n```\n\n```typescript\n\u002F\u002F Create a goal with key results\nconst goal = await clickupRequest(`\u002Fteam\u002F${teamId}\u002Fgoal`, {\n  method: 'POST',\n  body: JSON.stringify({\n    name: 'Q1 2026 Engineering OKRs',\n    due_date: 1711929600000,\n    description: 'Engineering team quarterly objectives',\n    multiple_owners: true,\n    owners: [183, 456],\n    color: '#05a1f5',\n  }),\n});\n\n\u002F\u002F Add a key result (target)\nawait clickupRequest(`\u002Fgoal\u002F${goal.goal.id}\u002Fkey_result`, {\n  method: 'POST',\n  body: JSON.stringify({\n    name: 'Reduce P95 latency to \u003C200ms',\n    type: 'number',\n    steps_start: 500,\n    steps_end: 200,\n    unit: 'ms',\n    owners: [183],\n  }),\n});\n```\n\n## Two-Way Sync Pattern\n\n```typescript\n\u002F\u002F Sync ClickUp tasks to external system and vice versa\nclass ClickUpSyncService {\n  async syncToExternal(listId: string) {\n    const { tasks } = await clickupRequest(`\u002Flist\u002F${listId}\u002Ftask?archived=false`);\n\n    for (const task of tasks) {\n      await externalSystem.upsert({\n        externalId: task.id,\n        title: task.name,\n        status: this.mapStatus(task.status.status),\n        assignee: task.assignees[0]?.email,\n        updatedAt: parseInt(task.date_updated),\n      });\n    }\n  }\n\n  async syncFromExternal(externalItem: ExternalItem) {\n    if (externalItem.clickupTaskId) {\n      await clickupRequest(`\u002Ftask\u002F${externalItem.clickupTaskId}`, {\n        method: 'PUT',\n        body: JSON.stringify({\n          name: externalItem.title,\n          status: this.reverseMapStatus(externalItem.status),\n        }),\n      });\n    }\n  }\n\n  private mapStatus(clickupStatus: string): string {\n    const map: Record\u003Cstring, string> = {\n      'to do': 'backlog', 'in progress': 'active',\n      'review': 'in_review', 'complete': 'done',\n    };\n    return map[clickupStatus] ?? 'backlog';\n  }\n}\n```\n\n## Error Handling\n\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| Custom field UUID not found | Field removed or renamed | Re-fetch fields via `\u002Flist\u002F{id}\u002Ffield` |\n| Time entry negative duration | Timer still running | Stop timer before reading duration |\n| Goal permission denied | User not goal owner | Add user to goal owners |\n| Sync conflict | Both sides updated | Last-write-wins or manual merge |\n\n## Resources\n\n- [Custom Fields Docs](https:\u002F\u002Fdeveloper.clickup.com\u002Fdocs\u002Fcustomfields)\n- [Set Custom Field Value](https:\u002F\u002Fdeveloper.clickup.com\u002Freference\u002Fsetcustomfieldvalue)\n- [Time Tracking Endpoints](https:\u002F\u002Fdeveloper.clickup.com\u002Freference\u002Fcreateatimeentry)\n- [ClickUp Developer Portal](https:\u002F\u002Fdeveloper.clickup.com\u002F)\n\n## Next Steps\n\nFor multi-environment setup, see `clickup-multi-env-setup`.\n\n",{"name":5,"tags":49,"author":50,"license":15,"version":51,"description":52,"allowed-tools":53,"compatible-with":54},[42,43,26],"Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Production architecture for ClickUp API v2 integrations with layered design,\ncustom fields, time tracking, goals, and two-way sync patterns.\nTrigger: \"clickup architecture\", \"clickup design\", \"clickup project structure\",\n\"clickup custom fields\", \"clickup time tracking\", \"clickup goals API\".\n","Read, Grep","claude-code","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fclickup-reference-architecture",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":65,"prompt":75,"zipAvailable":76},[66,69,72],{"tool":67,"command":68},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill clickup-reference-architecture",{"tool":70,"command":71},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill clickup-reference-architecture",{"tool":73,"command":74},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill clickup-reference-architecture","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fclickup-reference-architecture\u002FSKILL.md",true,[],[79,93,103,112,118,125],{"skillNo":80,"name":81,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":89,"publishedAt":44},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[84],{"categoryNo":85,"categoryName":86,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[90,91,92],"model","model hierarchy","model hierarchy skill",{"skillNo":94,"name":95,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":99,"publishedAt":44},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[98],{"categoryNo":85,"categoryName":86,"taxonomyType":87,"taxonomyTypeDesc":88},[100,101,102],"MCP","zoom","zoom mcp",{"skillNo":104,"name":105,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":108,"publishedAt":44},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[109,110,111,101],"sdk","zoom apps sdk","apps",{"skillNo":113,"name":114,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":117,"publishedAt":44},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[114],{"skillNo":119,"name":120,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":121,"categories":122,"keywords":124,"publishedAt":44},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[123],{"categoryNo":85,"categoryName":86,"taxonomyType":87,"taxonomyTypeDesc":88},[120],{"skillNo":126,"name":127,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":128,"categories":129,"keywords":130,"publishedAt":44},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[127]]