[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CMDRTM6DKWD571PY87K3CC":3,"skill-same:01M6CMDRTM6DKWD571PY87K3CC":81},{"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":26,"publishedAt":47,"linkOnly":48,"markdownContent":49,"markdownBody":50,"frontMatter":51,"refName":52,"commitSha":53,"skillDirectory":54,"forksCount":55,"repositoryHtmlUrl":56,"repositoryHomepageUrl":57,"ownerHtmlUrl":58,"ownerBlogUrl":59,"ownerDescription":6,"updatedAt":60,"install":61,"resources":74},"01M6CMDRTM6DKWD571PY87K3CC","agents-sdk",null,"Build AI agents on Cloudflare Workers using the Agents SDK. Load when creating stateful agents, durable workflows, real-time WebSocket apps, scheduled tasks, MCP servers, or chat applications. Covers Agent class, state management, callable RPC, Workflows integration, and React hooks.","openteams-lab\u002Fopenteams","openteams-lab","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F260174438?v=4","01M6CJ3RQG7RNB6WD3MZHXA49K","Open Teams","01M6CJ3RVFC9PN20ARS8AP0S0R",588,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fopenteams-lab\u002Fopenteams\u002Fblob\u002Fmain\u002Fopenteams-cli\u002Fpackages\u002Fopenteams-cli\u002Ftest\u002Ffixture\u002Fskills\u002Fagents-sdk\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],"agents sdk","sdk","build","MCP","workers","cloudflare workers","hooks","applications","real-time","websocket","integration","rpc","cloudflare","mcp servers","state","state management","tasks","react","workflows","ai agents","2026-11-10 10:12:30",false,"---\nname: agents-sdk\ndescription: Build AI agents on Cloudflare Workers using the Agents SDK. Load when creating stateful agents, durable workflows, real-time WebSocket apps, scheduled tasks, MCP servers, or chat applications. Covers Agent class, state management, callable RPC, Workflows integration, and React hooks.\n---\n\n# Cloudflare Agents SDK\n\n**STOP.** Your knowledge of the Agents SDK may be outdated. Prefer retrieval over pre-training for any Agents SDK task.\n\n## Documentation\n\nFetch current docs from `https:\u002F\u002Fgithub.com\u002Fcloudflare\u002Fagents\u002Ftree\u002Fmain\u002Fdocs` before implementing.\n\n| Topic               | Doc                           | Use for                                        |\n| ------------------- | ----------------------------- | ---------------------------------------------- |\n| Getting started     | `docs\u002Fgetting-started.md`     | First agent, project setup                     |\n| State               | `docs\u002Fstate.md`               | `setState`, `validateStateChange`, persistence |\n| Routing             | `docs\u002Frouting.md`             | URL patterns, `routeAgentRequest`, `basePath`  |\n| Callable methods    | `docs\u002Fcallable-methods.md`    | `@callable`, RPC, streaming, timeouts          |\n| Scheduling          | `docs\u002Fscheduling.md`          | `schedule()`, `scheduleEvery()`, cron          |\n| Workflows           | `docs\u002Fworkflows.md`           | `AgentWorkflow`, durable multi-step tasks      |\n| HTTP\u002FWebSockets     | `docs\u002Fhttp-websockets.md`     | Lifecycle hooks, hibernation                   |\n| Email               | `docs\u002Femail.md`               | Email routing, secure reply resolver           |\n| MCP client          | `docs\u002Fmcp-client.md`          | Connecting to MCP servers                      |\n| MCP server          | `docs\u002Fmcp-servers.md`         | Building MCP servers with `McpAgent`           |\n| Client SDK          | `docs\u002Fclient-sdk.md`          | `useAgent`, `useAgentChat`, React hooks        |\n| Human-in-the-loop   | `docs\u002Fhuman-in-the-loop.md`   | Approval flows, pausing workflows              |\n| Resumable streaming | `docs\u002Fresumable-streaming.md` | Stream recovery on disconnect                  |\n\nCloudflare docs: https:\u002F\u002Fdevelopers.cloudflare.com\u002Fagents\u002F\n\n## Capabilities\n\nThe Agents SDK provides:\n\n- **Persistent state** - SQLite-backed, auto-synced to clients\n- **Callable RPC** - `@callable()` methods invoked over WebSocket\n- **Scheduling** - One-time, recurring (`scheduleEvery`), and cron tasks\n- **Workflows** - Durable multi-step background processing via `AgentWorkflow`\n- **MCP integration** - Connect to MCP servers or build your own with `McpAgent`\n- **Email handling** - Receive and reply to emails with secure routing\n- **Streaming chat** - `AIChatAgent` with resumable streams\n- **React hooks** - `useAgent`, `useAgentChat` for client apps\n\n## FIRST: Verify Installation\n\n```bash\nnpm ls agents  # Should show agents package\n```\n\nIf not installed:\n\n```bash\nnpm install agents\n```\n\n## Wrangler Configuration\n\n```jsonc\n{\n  \"durable_objects\": {\n    \"bindings\": [{ \"name\": \"MyAgent\", \"class_name\": \"MyAgent\" }],\n  },\n  \"migrations\": [{ \"tag\": \"v1\", \"new_sqlite_classes\": [\"MyAgent\"] }],\n}\n```\n\n## Agent Class\n\n```typescript\nimport { Agent, routeAgentRequest, callable } from \"agents\"\n\ntype State = { count: number }\n\nexport class Counter extends Agent\u003CEnv, State> {\n  initialState = { count: 0 }\n\n  \u002F\u002F Validation hook - runs before state persists (sync, throwing rejects the update)\n  validateStateChange(nextState: State, source: Connection | \"server\") {\n    if (nextState.count \u003C 0) throw new Error(\"Count cannot be negative\")\n  }\n\n  \u002F\u002F Notification hook - runs after state persists (async, non-blocking)\n  onStateUpdate(state: State, source: Connection | \"server\") {\n    console.log(\"State updated:\", state)\n  }\n\n  @callable()\n  increment() {\n    this.setState({ count: this.state.count + 1 })\n    return this.state.count\n  }\n}\n\nexport default {\n  fetch: (req, env) => routeAgentRequest(req, env) ?? new Response(\"Not found\", { status: 404 }),\n}\n```\n\n## Routing\n\nRequests route to `\u002Fagents\u002F{agent-name}\u002F{instance-name}`:\n\n| Class      | URL                        |\n| ---------- | -------------------------- |\n| `Counter`  | `\u002Fagents\u002Fcounter\u002Fuser-123` |\n| `ChatRoom` | `\u002Fagents\u002Fchat-room\u002Flobby`  |\n\nClient: `useAgent({ agent: \"Counter\", name: \"user-123\" })`\n\n## Core APIs\n\n| Task                | API                                                    |\n| ------------------- | ------------------------------------------------------ |\n| Read state          | `this.state.count`                                     |\n| Write state         | `this.setState({ count: 1 })`                          |\n| SQL query           | `` this.sql`SELECT * FROM users WHERE id = ${id}` ``   |\n| Schedule (delay)    | `await this.schedule(60, \"task\", payload)`             |\n| Schedule (cron)     | `await this.schedule(\"0 * * * *\", \"task\", payload)`    |\n| Schedule (interval) | `await this.scheduleEvery(30, \"poll\")`                 |\n| RPC method          | `@callable() myMethod() { ... }`                       |\n| Streaming RPC       | `@callable({ streaming: true }) stream(res) { ... }`   |\n| Start workflow      | `await this.runWorkflow(\"ProcessingWorkflow\", params)` |\n\n## React Client\n\n```tsx\nimport { useAgent } from \"agents\u002Freact\"\n\nfunction App() {\n  const [state, setLocalState] = useState({ count: 0 })\n\n  const agent = useAgent({\n    agent: \"Counter\",\n    name: \"my-instance\",\n    onStateUpdate: (newState) => setLocalState(newState),\n    onIdentity: (name, agentType) => console.log(`Connected to ${name}`),\n  })\n\n  return \u003Cbutton onClick={() => agent.setState({ count: state.count + 1 })}>Count: {state.count}\u003C\u002Fbutton>\n}\n```\n\n## References\n\n- **[references\u002Fworkflows.md](references\u002Fworkflows.md)** - Durable Workflows integration\n- **[references\u002Fcallable.md](references\u002Fcallable.md)** - RPC methods, streaming, timeouts\n- **[references\u002Fstate-scheduling.md](references\u002Fstate-scheduling.md)** - State persistence, scheduling\n- **[references\u002Fstreaming-chat.md](references\u002Fstreaming-chat.md)** - AIChatAgent, resumable streams\n- **[references\u002Fmcp.md](references\u002Fmcp.md)** - MCP server integration\n- **[references\u002Femail.md](references\u002Femail.md)** - Email routing and handling\n- **[references\u002Fcodemode.md](references\u002Fcodemode.md)** - Code Mode (experimental)\n","# Cloudflare Agents SDK\n\n**STOP.** Your knowledge of the Agents SDK may be outdated. Prefer retrieval over pre-training for any Agents SDK task.\n\n## Documentation\n\nFetch current docs from `https:\u002F\u002Fgithub.com\u002Fcloudflare\u002Fagents\u002Ftree\u002Fmain\u002Fdocs` before implementing.\n\n| Topic               | Doc                           | Use for                                        |\n| ------------------- | ----------------------------- | ---------------------------------------------- |\n| Getting started     | `docs\u002Fgetting-started.md`     | First agent, project setup                     |\n| State               | `docs\u002Fstate.md`               | `setState`, `validateStateChange`, persistence |\n| Routing             | `docs\u002Frouting.md`             | URL patterns, `routeAgentRequest`, `basePath`  |\n| Callable methods    | `docs\u002Fcallable-methods.md`    | `@callable`, RPC, streaming, timeouts          |\n| Scheduling          | `docs\u002Fscheduling.md`          | `schedule()`, `scheduleEvery()`, cron          |\n| Workflows           | `docs\u002Fworkflows.md`           | `AgentWorkflow`, durable multi-step tasks      |\n| HTTP\u002FWebSockets     | `docs\u002Fhttp-websockets.md`     | Lifecycle hooks, hibernation                   |\n| Email               | `docs\u002Femail.md`               | Email routing, secure reply resolver           |\n| MCP client          | `docs\u002Fmcp-client.md`          | Connecting to MCP servers                      |\n| MCP server          | `docs\u002Fmcp-servers.md`         | Building MCP servers with `McpAgent`           |\n| Client SDK          | `docs\u002Fclient-sdk.md`          | `useAgent`, `useAgentChat`, React hooks        |\n| Human-in-the-loop   | `docs\u002Fhuman-in-the-loop.md`   | Approval flows, pausing workflows              |\n| Resumable streaming | `docs\u002Fresumable-streaming.md` | Stream recovery on disconnect                  |\n\nCloudflare docs: https:\u002F\u002Fdevelopers.cloudflare.com\u002Fagents\u002F\n\n## Capabilities\n\nThe Agents SDK provides:\n\n- **Persistent state** - SQLite-backed, auto-synced to clients\n- **Callable RPC** - `@callable()` methods invoked over WebSocket\n- **Scheduling** - One-time, recurring (`scheduleEvery`), and cron tasks\n- **Workflows** - Durable multi-step background processing via `AgentWorkflow`\n- **MCP integration** - Connect to MCP servers or build your own with `McpAgent`\n- **Email handling** - Receive and reply to emails with secure routing\n- **Streaming chat** - `AIChatAgent` with resumable streams\n- **React hooks** - `useAgent`, `useAgentChat` for client apps\n\n## FIRST: Verify Installation\n\n```bash\nnpm ls agents  # Should show agents package\n```\n\nIf not installed:\n\n```bash\nnpm install agents\n```\n\n## Wrangler Configuration\n\n```jsonc\n{\n  \"durable_objects\": {\n    \"bindings\": [{ \"name\": \"MyAgent\", \"class_name\": \"MyAgent\" }],\n  },\n  \"migrations\": [{ \"tag\": \"v1\", \"new_sqlite_classes\": [\"MyAgent\"] }],\n}\n```\n\n## Agent Class\n\n```typescript\nimport { Agent, routeAgentRequest, callable } from \"agents\"\n\ntype State = { count: number }\n\nexport class Counter extends Agent\u003CEnv, State> {\n  initialState = { count: 0 }\n\n  \u002F\u002F Validation hook - runs before state persists (sync, throwing rejects the update)\n  validateStateChange(nextState: State, source: Connection | \"server\") {\n    if (nextState.count \u003C 0) throw new Error(\"Count cannot be negative\")\n  }\n\n  \u002F\u002F Notification hook - runs after state persists (async, non-blocking)\n  onStateUpdate(state: State, source: Connection | \"server\") {\n    console.log(\"State updated:\", state)\n  }\n\n  @callable()\n  increment() {\n    this.setState({ count: this.state.count + 1 })\n    return this.state.count\n  }\n}\n\nexport default {\n  fetch: (req, env) => routeAgentRequest(req, env) ?? new Response(\"Not found\", { status: 404 }),\n}\n```\n\n## Routing\n\nRequests route to `\u002Fagents\u002F{agent-name}\u002F{instance-name}`:\n\n| Class      | URL                        |\n| ---------- | -------------------------- |\n| `Counter`  | `\u002Fagents\u002Fcounter\u002Fuser-123` |\n| `ChatRoom` | `\u002Fagents\u002Fchat-room\u002Flobby`  |\n\nClient: `useAgent({ agent: \"Counter\", name: \"user-123\" })`\n\n## Core APIs\n\n| Task                | API                                                    |\n| ------------------- | ------------------------------------------------------ |\n| Read state          | `this.state.count`                                     |\n| Write state         | `this.setState({ count: 1 })`                          |\n| SQL query           | `` this.sql`SELECT * FROM users WHERE id = ${id}` ``   |\n| Schedule (delay)    | `await this.schedule(60, \"task\", payload)`             |\n| Schedule (cron)     | `await this.schedule(\"0 * * * *\", \"task\", payload)`    |\n| Schedule (interval) | `await this.scheduleEvery(30, \"poll\")`                 |\n| RPC method          | `@callable() myMethod() { ... }`                       |\n| Streaming RPC       | `@callable({ streaming: true }) stream(res) { ... }`   |\n| Start workflow      | `await this.runWorkflow(\"ProcessingWorkflow\", params)` |\n\n## React Client\n\n```tsx\nimport { useAgent } from \"agents\u002Freact\"\n\nfunction App() {\n  const [state, setLocalState] = useState({ count: 0 })\n\n  const agent = useAgent({\n    agent: \"Counter\",\n    name: \"my-instance\",\n    onStateUpdate: (newState) => setLocalState(newState),\n    onIdentity: (name, agentType) => console.log(`Connected to ${name}`),\n  })\n\n  return \u003Cbutton onClick={() => agent.setState({ count: state.count + 1 })}>Count: {state.count}\u003C\u002Fbutton>\n}\n```\n\n## References\n\n- **[references\u002Fworkflows.md](references\u002Fworkflows.md)** - Durable Workflows integration\n- **[references\u002Fcallable.md](references\u002Fcallable.md)** - RPC methods, streaming, timeouts\n- **[references\u002Fstate-scheduling.md](references\u002Fstate-scheduling.md)** - State persistence, scheduling\n- **[references\u002Fstreaming-chat.md](references\u002Fstreaming-chat.md)** - AIChatAgent, resumable streams\n- **[references\u002Fmcp.md](references\u002Fmcp.md)** - MCP server integration\n- **[references\u002Femail.md](references\u002Femail.md)** - Email routing and handling\n- **[references\u002Fcodemode.md](references\u002Fcodemode.md)** - Code Mode (experimental)\n",{"name":5,"description":7},"main","4180cbf3e82c49da08cab01820d0c559313b3761","openteams-cli\u002Fpackages\u002Fopenteams-cli\u002Ftest\u002Ffixture\u002Fskills\u002Fagents-sdk",76,"https:\u002F\u002Fgithub.com\u002Fopenteams-lab\u002Fopenteams","https:\u002F\u002Fopenteams-lab.com","https:\u002F\u002Fgithub.com\u002Fopenteams-lab","https:\u002F\u002Fopenteams-lab.com\u002F","2026-11-10 13:48:49",{"source":8,"skillName":5,"commands":62,"prompt":72,"zipAvailable":73},[63,66,69],{"tool":64,"command":65},"npx","npx skills add openteams-lab\u002Fopenteams --skill agents-sdk",{"tool":67,"command":68},"bunx","bunx skills add openteams-lab\u002Fopenteams --skill agents-sdk",{"tool":70,"command":71},"pnpm","pnpm dlx skills add openteams-lab\u002Fopenteams --skill agents-sdk","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fopenteams-lab\u002Fopenteams\u002Fblob\u002Fmain\u002Fopenteams-cli\u002Fpackages\u002Fopenteams-cli\u002Ftest\u002Ffixture\u002Fskills\u002Fagents-sdk\u002FSKILL.md",true,[75],{"path":76,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":79,"sourceHtmlUrl":80},"references\u002Fcallable.md","REFERENCE","参考文档",2283,"https:\u002F\u002Fgithub.com\u002Fopenteams-lab\u002Fopenteams\u002Fblob\u002Fmain\u002Fopenteams-cli\u002Fpackages\u002Fopenteams-cli\u002Ftest\u002Ffixture\u002Fskills\u002Fagents-sdk\u002Freferences\u002Fcallable.md",[82,107,126,135,144,156],{"skillNo":83,"name":39,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":93,"publishedAt":47},"01M6CMDVAZMAZMCWBGC2G37B4J","Comprehensive Cloudflare platform skill covering Workers, Pages, storage (KV, D1, R2), AI (Workers AI, Vectorize, Agents SDK), networking (Tunnel, Spectrum), security (WAF, DDoS), and infrastructure-as-code (Terraform, Pulumi). Use for any Cloudflare development task.","https:\u002F\u002Fgithub.com\u002Fopenteams-lab\u002Fopenteams\u002Fblob\u002Fmain\u002Fopenteams-cli\u002Fpackages\u002Fopenteams-cli\u002Ftest\u002Ffixture\u002Fskills\u002Fcloudflare\u002FSKILL.md",[87,88],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":89,"categoryName":90,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[39,94,95,31,96,97,27,98,28,99,100,101,102,103,104,105,106],"objects","task","use","ddos","infrastructure-as-code","waf","security","storage","infrastructure","development","code","networking","terraform",{"skillNo":108,"name":109,"nameZh":6,"description":110,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":118,"publishedAt":47},"01M6CMDP9NZPGWFJ1Q678D6RXK","zyte-api-automation","Automate Zyte API tasks via Rube MCP (Composio). Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002Fopenteams-lab\u002Fopenteams\u002Fblob\u002Fmain\u002Fassets\u002Fskills\u002Fzyte-api-automation\u002FSKILL.md",[113,116,117],{"categoryNo":114,"categoryName":115,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":89,"categoryName":90,"taxonomyType":91,"taxonomyTypeDesc":92},[119,120,121,30,43,122,123,124,125],"automation","api","zyte api automation","search","Tools","first","automate",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":133,"publishedAt":47},"01M6CMDKGPNWJG6SRCNQJMPY9D","zylvie-automation","Automate Zylvie tasks via Rube MCP (Composio). Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002Fopenteams-lab\u002Fopenteams\u002Fblob\u002Fmain\u002Fassets\u002Fskills\u002Fzylvie-automation\u002FSKILL.md",[132],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[134,119,125,30,43,122,123,124],"zylvie automation",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":142,"publishedAt":47},"01M6CMDGPT353ZHSBGKWSEAR2W","zoominfo-automation","Automate Zoominfo tasks via Rube MCP (Composio). Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002Fopenteams-lab\u002Fopenteams\u002Fblob\u002Fmain\u002Fassets\u002Fskills\u002Fzoominfo-automation\u002FSKILL.md",[141],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[143,119,30,43,122,123,124,125],"zoominfo automation",{"skillNo":145,"name":146,"nameZh":6,"description":147,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":148,"categories":149,"keywords":151,"publishedAt":47},"01M6CMDDV7FSVNANZ090ZWR612","zoho_mail-automation","Automate Zoho Mail tasks via Rube MCP (Composio): email sending, folders, labels, and mailbox management. Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002Fopenteams-lab\u002Fopenteams\u002Fblob\u002Fmain\u002Fassets\u002Fskills\u002Fzoho_mail-automation\u002FSKILL.md",[150],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[152,153,119,125,30,43,122,154,123,124,155],"zoho mail automation","zoho","email","management",{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":160,"categories":161,"keywords":166,"publishedAt":47},"01M6CMDBE6TSWJ81RJJTFG7PRH","zoho_invoice-automation","Automate Zoho Invoice tasks via Rube MCP (Composio): invoices, estimates, expenses, clients, and payment tracking. Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002Fopenteams-lab\u002Fopenteams\u002Fblob\u002Fmain\u002Fassets\u002Fskills\u002Fzoho_invoice-automation\u002FSKILL.md",[162,163],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":164,"categoryName":165,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000040","财务",[119,167,153,30,43,122,123,124,125,168,169],"zoho invoice automation","tracking","payment"]