myaiforone 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) hide show
  1. package/README.md +113 -0
  2. package/agents/_template/CLAUDE.md +18 -0
  3. package/agents/_template/agent.json +7 -0
  4. package/agents/platform/agentcreator/CLAUDE.md +300 -0
  5. package/agents/platform/appcreator/CLAUDE.md +158 -0
  6. package/agents/platform/gym/CLAUDE.md +486 -0
  7. package/agents/platform/gym/agent.json +40 -0
  8. package/agents/platform/gym/programs/agent-building/program.json +160 -0
  9. package/agents/platform/gym/programs/automations-mastery/program.json +129 -0
  10. package/agents/platform/gym/programs/getting-started/program.json +124 -0
  11. package/agents/platform/gym/programs/mcp-integrations/program.json +116 -0
  12. package/agents/platform/gym/programs/multi-model-strategy/program.json +115 -0
  13. package/agents/platform/gym/programs/prompt-engineering/program.json +136 -0
  14. package/agents/platform/gym/souls/alex.md +12 -0
  15. package/agents/platform/gym/souls/jordan.md +12 -0
  16. package/agents/platform/gym/souls/morgan.md +12 -0
  17. package/agents/platform/gym/souls/riley.md +12 -0
  18. package/agents/platform/gym/souls/sam.md +12 -0
  19. package/agents/platform/hub/CLAUDE.md +372 -0
  20. package/agents/platform/promptcreator/CLAUDE.md +130 -0
  21. package/agents/platform/skillcreator/CLAUDE.md +163 -0
  22. package/bin/cli.js +566 -0
  23. package/config.example.json +310 -0
  24. package/dist/agent-registry.d.ts +32 -0
  25. package/dist/agent-registry.d.ts.map +1 -0
  26. package/dist/agent-registry.js +144 -0
  27. package/dist/agent-registry.js.map +1 -0
  28. package/dist/channels/discord.d.ts +17 -0
  29. package/dist/channels/discord.d.ts.map +1 -0
  30. package/dist/channels/discord.js +114 -0
  31. package/dist/channels/discord.js.map +1 -0
  32. package/dist/channels/imessage.d.ts +23 -0
  33. package/dist/channels/imessage.d.ts.map +1 -0
  34. package/dist/channels/imessage.js +214 -0
  35. package/dist/channels/imessage.js.map +1 -0
  36. package/dist/channels/slack.d.ts +19 -0
  37. package/dist/channels/slack.d.ts.map +1 -0
  38. package/dist/channels/slack.js +167 -0
  39. package/dist/channels/slack.js.map +1 -0
  40. package/dist/channels/telegram.d.ts +19 -0
  41. package/dist/channels/telegram.d.ts.map +1 -0
  42. package/dist/channels/telegram.js +274 -0
  43. package/dist/channels/telegram.js.map +1 -0
  44. package/dist/channels/types.d.ts +44 -0
  45. package/dist/channels/types.d.ts.map +1 -0
  46. package/dist/channels/types.js +18 -0
  47. package/dist/channels/types.js.map +1 -0
  48. package/dist/channels/whatsapp.d.ts +23 -0
  49. package/dist/channels/whatsapp.d.ts.map +1 -0
  50. package/dist/channels/whatsapp.js +189 -0
  51. package/dist/channels/whatsapp.js.map +1 -0
  52. package/dist/config.d.ts +134 -0
  53. package/dist/config.d.ts.map +1 -0
  54. package/dist/config.js +127 -0
  55. package/dist/config.js.map +1 -0
  56. package/dist/cron.d.ts +8 -0
  57. package/dist/cron.d.ts.map +1 -0
  58. package/dist/cron.js +35 -0
  59. package/dist/cron.js.map +1 -0
  60. package/dist/decrypt-keys.d.ts +7 -0
  61. package/dist/decrypt-keys.d.ts.map +1 -0
  62. package/dist/decrypt-keys.js +53 -0
  63. package/dist/decrypt-keys.js.map +1 -0
  64. package/dist/encrypt-keys.d.ts +8 -0
  65. package/dist/encrypt-keys.d.ts.map +1 -0
  66. package/dist/encrypt-keys.js +62 -0
  67. package/dist/encrypt-keys.js.map +1 -0
  68. package/dist/executor.d.ts +31 -0
  69. package/dist/executor.d.ts.map +1 -0
  70. package/dist/executor.js +2009 -0
  71. package/dist/executor.js.map +1 -0
  72. package/dist/gemini-executor.d.ts +27 -0
  73. package/dist/gemini-executor.d.ts.map +1 -0
  74. package/dist/gemini-executor.js +160 -0
  75. package/dist/gemini-executor.js.map +1 -0
  76. package/dist/goals.d.ts +24 -0
  77. package/dist/goals.d.ts.map +1 -0
  78. package/dist/goals.js +189 -0
  79. package/dist/goals.js.map +1 -0
  80. package/dist/gym/activity-digest.d.ts +30 -0
  81. package/dist/gym/activity-digest.d.ts.map +1 -0
  82. package/dist/gym/activity-digest.js +506 -0
  83. package/dist/gym/activity-digest.js.map +1 -0
  84. package/dist/gym/dimension-scorer.d.ts +76 -0
  85. package/dist/gym/dimension-scorer.d.ts.map +1 -0
  86. package/dist/gym/dimension-scorer.js +236 -0
  87. package/dist/gym/dimension-scorer.js.map +1 -0
  88. package/dist/gym/gym-router.d.ts +7 -0
  89. package/dist/gym/gym-router.d.ts.map +1 -0
  90. package/dist/gym/gym-router.js +718 -0
  91. package/dist/gym/gym-router.js.map +1 -0
  92. package/dist/gym/index.d.ts +11 -0
  93. package/dist/gym/index.d.ts.map +1 -0
  94. package/dist/gym/index.js +11 -0
  95. package/dist/gym/index.js.map +1 -0
  96. package/dist/heartbeat.d.ts +21 -0
  97. package/dist/heartbeat.d.ts.map +1 -0
  98. package/dist/heartbeat.js +163 -0
  99. package/dist/heartbeat.js.map +1 -0
  100. package/dist/index.d.ts +2 -0
  101. package/dist/index.d.ts.map +1 -0
  102. package/dist/index.js +254 -0
  103. package/dist/index.js.map +1 -0
  104. package/dist/keystore.d.ts +22 -0
  105. package/dist/keystore.d.ts.map +1 -0
  106. package/dist/keystore.js +178 -0
  107. package/dist/keystore.js.map +1 -0
  108. package/dist/logger.d.ts +9 -0
  109. package/dist/logger.d.ts.map +1 -0
  110. package/dist/logger.js +45 -0
  111. package/dist/logger.js.map +1 -0
  112. package/dist/memory/daily.d.ts +22 -0
  113. package/dist/memory/daily.d.ts.map +1 -0
  114. package/dist/memory/daily.js +82 -0
  115. package/dist/memory/daily.js.map +1 -0
  116. package/dist/memory/embeddings.d.ts +15 -0
  117. package/dist/memory/embeddings.d.ts.map +1 -0
  118. package/dist/memory/embeddings.js +154 -0
  119. package/dist/memory/embeddings.js.map +1 -0
  120. package/dist/memory/index.d.ts +32 -0
  121. package/dist/memory/index.d.ts.map +1 -0
  122. package/dist/memory/index.js +159 -0
  123. package/dist/memory/index.js.map +1 -0
  124. package/dist/memory/search.d.ts +21 -0
  125. package/dist/memory/search.d.ts.map +1 -0
  126. package/dist/memory/search.js +77 -0
  127. package/dist/memory/search.js.map +1 -0
  128. package/dist/memory/store.d.ts +23 -0
  129. package/dist/memory/store.d.ts.map +1 -0
  130. package/dist/memory/store.js +144 -0
  131. package/dist/memory/store.js.map +1 -0
  132. package/dist/ollama-executor.d.ts +17 -0
  133. package/dist/ollama-executor.d.ts.map +1 -0
  134. package/dist/ollama-executor.js +112 -0
  135. package/dist/ollama-executor.js.map +1 -0
  136. package/dist/openai-executor.d.ts +38 -0
  137. package/dist/openai-executor.d.ts.map +1 -0
  138. package/dist/openai-executor.js +197 -0
  139. package/dist/openai-executor.js.map +1 -0
  140. package/dist/router.d.ts +11 -0
  141. package/dist/router.d.ts.map +1 -0
  142. package/dist/router.js +185 -0
  143. package/dist/router.js.map +1 -0
  144. package/dist/test-message.d.ts +2 -0
  145. package/dist/test-message.d.ts.map +1 -0
  146. package/dist/test-message.js +60 -0
  147. package/dist/test-message.js.map +1 -0
  148. package/dist/utils/imsg-db-reader.d.ts +24 -0
  149. package/dist/utils/imsg-db-reader.d.ts.map +1 -0
  150. package/dist/utils/imsg-db-reader.js +92 -0
  151. package/dist/utils/imsg-db-reader.js.map +1 -0
  152. package/dist/utils/imsg-rpc.d.ts +25 -0
  153. package/dist/utils/imsg-rpc.d.ts.map +1 -0
  154. package/dist/utils/imsg-rpc.js +149 -0
  155. package/dist/utils/imsg-rpc.js.map +1 -0
  156. package/dist/utils/message-formatter.d.ts +3 -0
  157. package/dist/utils/message-formatter.d.ts.map +1 -0
  158. package/dist/utils/message-formatter.js +69 -0
  159. package/dist/utils/message-formatter.js.map +1 -0
  160. package/dist/web-ui.d.ts +12 -0
  161. package/dist/web-ui.d.ts.map +1 -0
  162. package/dist/web-ui.js +5784 -0
  163. package/dist/web-ui.js.map +1 -0
  164. package/dist/whatsapp-chats.d.ts +2 -0
  165. package/dist/whatsapp-chats.d.ts.map +1 -0
  166. package/dist/whatsapp-chats.js +76 -0
  167. package/dist/whatsapp-chats.js.map +1 -0
  168. package/dist/whatsapp-login.d.ts +2 -0
  169. package/dist/whatsapp-login.d.ts.map +1 -0
  170. package/dist/whatsapp-login.js +90 -0
  171. package/dist/whatsapp-login.js.map +1 -0
  172. package/dist/wiki-sync.d.ts +21 -0
  173. package/dist/wiki-sync.d.ts.map +1 -0
  174. package/dist/wiki-sync.js +147 -0
  175. package/dist/wiki-sync.js.map +1 -0
  176. package/docs/AddNewAgentGuide.md +100 -0
  177. package/docs/AddNewMcpGuide.md +72 -0
  178. package/docs/Architecture.md +795 -0
  179. package/docs/CLAUDE-AI-SETUP.md +166 -0
  180. package/docs/Setup.md +297 -0
  181. package/docs/ai-gym-architecture.md +1040 -0
  182. package/docs/ai-gym-build-plan.md +343 -0
  183. package/docs/ai-gym-onboarding.md +122 -0
  184. package/docs/appcreator_plan.md +348 -0
  185. package/docs/platform-mcp-audit.md +320 -0
  186. package/docs/server-deployment-plan.md +503 -0
  187. package/docs/superpowers/plans/2026-03-25-marketplace.md +1281 -0
  188. package/docs/superpowers/specs/2026-03-25-marketplace-design.md +287 -0
  189. package/docs/user-guide.md +2016 -0
  190. package/mcp-catalog.json +628 -0
  191. package/package.json +63 -0
  192. package/public/MyAIforOne-logomark-512.svg +16 -0
  193. package/public/MyAIforOne-logomark-transparent.svg +15 -0
  194. package/public/activity.html +314 -0
  195. package/public/admin.html +1674 -0
  196. package/public/agent-dashboard.html +670 -0
  197. package/public/api-docs.html +1106 -0
  198. package/public/automations.html +722 -0
  199. package/public/canvas.css +223 -0
  200. package/public/canvas.js +588 -0
  201. package/public/changelog.html +231 -0
  202. package/public/gym.html +2766 -0
  203. package/public/home.html +1930 -0
  204. package/public/index.html +2809 -0
  205. package/public/lab.html +1643 -0
  206. package/public/library.html +1442 -0
  207. package/public/marketplace.html +1101 -0
  208. package/public/mcp-docs.html +441 -0
  209. package/public/mini.html +390 -0
  210. package/public/monitor.html +584 -0
  211. package/public/org.html +4304 -0
  212. package/public/projects.html +734 -0
  213. package/public/settings.html +645 -0
  214. package/public/tasks.html +932 -0
  215. package/public/trainers/alex.svg +12 -0
  216. package/public/trainers/jordan.svg +12 -0
  217. package/public/trainers/morgan.svg +12 -0
  218. package/public/trainers/riley.svg +12 -0
  219. package/public/trainers/sam.svg +12 -0
  220. package/public/user-guide.html +218 -0
  221. package/registry/agents.json +3 -0
  222. package/registry/apps.json +20 -0
  223. package/registry/installed-drafts.json +3 -0
  224. package/registry/mcps.json +1084 -0
  225. package/registry/prompts/personal/mcp-test-prompt.md +6 -0
  226. package/registry/prompts/personal/memory-recall.md +6 -0
  227. package/registry/prompts/platform/brainstorm.md +15 -0
  228. package/registry/prompts/platform/code-review.md +16 -0
  229. package/registry/prompts/platform/explain.md +16 -0
  230. package/registry/prompts.json +58 -0
  231. package/registry/skills/external/brainstorming.md +5 -0
  232. package/registry/skills/external/code-review.md +40 -0
  233. package/registry/skills/external/frontend-patterns.md +642 -0
  234. package/registry/skills/external/frontend-slides.md +184 -0
  235. package/registry/skills/external/systematic-debugging.md +5 -0
  236. package/registry/skills/external/tdd.md +328 -0
  237. package/registry/skills/external/verification-before-completion.md +5 -0
  238. package/registry/skills/external/writing-plans.md +5 -0
  239. package/registry/skills/platform/ai41_app_build.md +930 -0
  240. package/registry/skills/platform/ai41_app_deploy.md +168 -0
  241. package/registry/skills/platform/ai41_app_orchestrator.md +239 -0
  242. package/registry/skills/platform/ai41_app_patterns.md +359 -0
  243. package/registry/skills/platform/ai41_app_register.md +85 -0
  244. package/registry/skills/platform/ai41_app_scaffold.md +421 -0
  245. package/registry/skills/platform/ai41_app_verify.md +107 -0
  246. package/registry/skills/platform/opProjectCreate.md +239 -0
  247. package/registry/skills/platform/op_devbrowser.md +136 -0
  248. package/registry/skills/platform/sop_brandguidelines.md +103 -0
  249. package/registry/skills/platform/sop_docx.md +117 -0
  250. package/registry/skills/platform/sop_frontenddesign.md +44 -0
  251. package/registry/skills/platform/sop_frontenddesign_v2.md +659 -0
  252. package/registry/skills/platform/sop_mcpbuilder.md +133 -0
  253. package/registry/skills/platform/sop_pdf.md +172 -0
  254. package/registry/skills/platform/sop_pptx.md +133 -0
  255. package/registry/skills/platform/sop_skillcreator.md +104 -0
  256. package/registry/skills/platform/sop_themefactory.md +128 -0
  257. package/registry/skills/platform/sop_webapptesting.md +75 -0
  258. package/registry/skills/platform/sop_webartifactsbuilder.md +97 -0
  259. package/registry/skills/platform/sop_xlsx.md +134 -0
  260. package/registry/skills.json +1055 -0
  261. package/scripts/discover-chats.sh +11 -0
  262. package/scripts/install-service-windows.ps1 +87 -0
  263. package/scripts/install-service.sh +52 -0
  264. package/scripts/seed-registry.ts +195 -0
  265. package/scripts/test-send.sh +5 -0
  266. package/scripts/tray-indicator.ps1 +35 -0
  267. package/scripts/uninstall-service-windows.ps1 +23 -0
  268. package/scripts/uninstall-service.sh +15 -0
  269. package/scripts/xbar-myagent.5s.sh +32 -0
  270. package/server/mcp-server/dist/index.d.ts +11 -0
  271. package/server/mcp-server/dist/index.js +1332 -0
  272. package/server/mcp-server/dist/lib/api-client.d.ts +165 -0
  273. package/server/mcp-server/dist/lib/api-client.js +241 -0
  274. package/server/mcp-server/index.ts +1545 -0
  275. package/server/mcp-server/lib/api-client.ts +366 -0
  276. package/server/mcp-server/tsconfig.json +14 -0
  277. package/src/agent-registry.ts +180 -0
  278. package/src/channels/discord.ts +129 -0
  279. package/src/channels/imessage.ts +261 -0
  280. package/src/channels/slack.ts +208 -0
  281. package/src/channels/telegram.ts +307 -0
  282. package/src/channels/types.ts +62 -0
  283. package/src/channels/whatsapp.ts +227 -0
  284. package/src/config.ts +281 -0
  285. package/src/cron.ts +43 -0
  286. package/src/decrypt-keys.ts +60 -0
  287. package/src/encrypt-keys.ts +70 -0
  288. package/src/executor.ts +2190 -0
  289. package/src/gemini-executor.ts +212 -0
  290. package/src/goals.ts +240 -0
  291. package/src/gym/activity-digest.ts +546 -0
  292. package/src/gym/dimension-scorer.ts +297 -0
  293. package/src/gym/gym-router.ts +801 -0
  294. package/src/gym/index.ts +19 -0
  295. package/src/heartbeat.ts +220 -0
  296. package/src/index.ts +275 -0
  297. package/src/keystore.ts +190 -0
  298. package/src/logger.ts +51 -0
  299. package/src/memory/daily.ts +101 -0
  300. package/src/memory/embeddings.ts +185 -0
  301. package/src/memory/index.ts +218 -0
  302. package/src/memory/search.ts +124 -0
  303. package/src/memory/store.ts +189 -0
  304. package/src/ollama-executor.ts +126 -0
  305. package/src/openai-executor.ts +259 -0
  306. package/src/router.ts +230 -0
  307. package/src/test-message.ts +72 -0
  308. package/src/utils/imsg-db-reader.ts +109 -0
  309. package/src/utils/imsg-rpc.ts +178 -0
  310. package/src/utils/message-formatter.ts +90 -0
  311. package/src/web-ui.ts +5778 -0
  312. package/src/whatsapp-chats.ts +91 -0
  313. package/src/whatsapp-login.ts +110 -0
  314. package/src/wiki-sync.ts +199 -0
  315. package/tsconfig.json +19 -0
@@ -0,0 +1,441 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>MyAIforOne — MCP Tools Documentation</title>
7
+ <link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500;600&family=Syne:wght@600;700;800&display=swap" rel="stylesheet">
8
+ <style>
9
+ *,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
10
+ :root{
11
+ --bg:#060a13;--surface:rgba(12,18,33,0.95);--card:rgba(16,22,40,0.85);
12
+ --input:rgba(0,0,0,0.35);--border:rgba(56,189,248,0.08);--border-glow:rgba(56,189,248,0.18);
13
+ --text:#e2e8f0;--text-dim:#94a3b8;--text-muted:rgba(148,163,184,0.5);
14
+ --accent:#22d3ee;--accent-bg:rgba(6,182,212,0.12);
15
+ --green:#4ade80;--green-bg:rgba(74,222,128,0.1);
16
+ --purple:#a78bfa;--purple-bg:rgba(167,139,250,0.1);
17
+ --amber:#fbbf24;--amber-bg:rgba(251,191,36,0.1);
18
+ --font:'DM Sans',system-ui,sans-serif;--mono:'IBM Plex Mono',monospace;--display:'Syne',sans-serif;
19
+ }
20
+ [data-theme="light"]{
21
+ --bg:#f4f6f9;--surface:rgba(255,255,255,0.95);--card:rgba(255,255,255,0.9);
22
+ --input:rgba(0,0,0,0.04);--border:rgba(0,0,0,0.08);--border-glow:rgba(14,116,144,0.18);
23
+ --text:#0f172a;--text-dim:#475569;--text-muted:rgba(100,116,139,0.5);
24
+ --accent:#0891b2;--accent-bg:rgba(14,116,144,0.08);
25
+ --green:#16a34a;--green-bg:rgba(22,163,74,0.08);
26
+ --purple:#7c3aed;--purple-bg:rgba(124,58,237,0.08);
27
+ --amber:#d97706;--amber-bg:rgba(217,119,6,0.08);
28
+ }
29
+ html,body{width:100%;height:100%;overflow:hidden;background:var(--bg);font-family:var(--font);color:var(--text)}
30
+ .layout{display:flex;height:100vh}
31
+ .sidebar{width:260px;flex-shrink:0;background:var(--surface);border-right:1px solid var(--border);display:flex;flex-direction:column;overflow:hidden}
32
+ .main{flex:1;overflow-y:auto;padding:24px 32px}
33
+ .sidebar-header{padding:16px 16px 12px;border-bottom:1px solid var(--border)}
34
+ .sidebar-title{font-family:var(--display);font-size:14px;font-weight:800;color:var(--purple);margin-bottom:2px}
35
+ .sidebar-sub{font-size:10px;color:var(--text-muted)}
36
+ .sidebar-search{width:100%;padding:6px 10px;border-radius:7px;border:1px solid var(--border);background:var(--input);color:var(--text);font-family:var(--font);font-size:12px;outline:none;margin-top:8px}
37
+ .sidebar-search:focus{border-color:var(--border-glow)}
38
+ .sidebar-search::placeholder{color:var(--text-muted)}
39
+ .sidebar-body{flex:1;overflow-y:auto;padding:8px 0}
40
+ .sidebar-body::-webkit-scrollbar{width:3px}
41
+ .sidebar-body::-webkit-scrollbar-thumb{background:rgba(139,92,246,0.3);border-radius:2px}
42
+ .cat-header{display:flex;align-items:center;gap:6px;padding:6px 16px;cursor:pointer;font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--text-dim)}
43
+ .cat-header:hover{color:var(--purple)}
44
+ .cat-header .count{margin-left:auto;font-size:9px;color:var(--text-muted)}
45
+ .cat-header .arrow{font-size:8px;transition:transform .2s}
46
+ .cat-header.open .arrow{transform:rotate(90deg)}
47
+ .cat-items{display:none;padding:0 8px 4px}
48
+ .cat-header.open + .cat-items{display:block}
49
+ .tool-item{padding:5px 8px;border-radius:6px;cursor:pointer;font-size:11px;font-family:var(--mono);color:var(--text-dim);transition:background .15s;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
50
+ .tool-item:hover{background:var(--purple-bg);color:var(--text)}
51
+ .tool-item.active{background:var(--purple-bg);color:var(--purple);border-left:2px solid var(--purple)}
52
+ .sidebar-nav{padding:8px 16px;border-top:1px solid var(--border);display:flex;gap:6px;flex-shrink:0}
53
+ .sidebar-nav a{font-size:10px;color:var(--text-muted);text-decoration:none;padding:3px 8px;border-radius:5px;border:1px solid var(--border);transition:all .2s}
54
+ .sidebar-nav a:hover{border-color:var(--border-glow);color:var(--text-dim)}
55
+ .sidebar-nav a.active{border-color:var(--purple);color:var(--purple);background:var(--purple-bg)}
56
+
57
+ /* Main */
58
+ .overview h1{font-family:var(--display);font-size:26px;font-weight:800;margin-bottom:4px}
59
+ .overview .sub{color:var(--text-dim);font-size:13px;margin-bottom:20px}
60
+ .stat-row{display:flex;gap:10px;margin-bottom:20px;flex-wrap:wrap}
61
+ .stat{padding:12px 16px;border-radius:10px;border:1px solid var(--border);background:var(--card);min-width:100px}
62
+ .stat-val{font-family:var(--display);font-size:20px;font-weight:800;color:var(--purple)}
63
+ .stat-label{font-size:10px;color:var(--text-muted)}
64
+ .cat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:8px}
65
+ .cat-card{padding:10px 14px;border-radius:10px;border:1px solid var(--border);background:var(--card);cursor:pointer;transition:all .2s}
66
+ .cat-card:hover{border-color:var(--border-glow)}
67
+ .cat-card-name{font-family:var(--display);font-size:12px;font-weight:700;color:var(--purple)}
68
+ .cat-card-count{font-size:10px;color:var(--text-muted)}
69
+
70
+ /* Tool detail */
71
+ .tool-detail{max-width:800px}
72
+ .tool-name{font-family:var(--mono);font-size:18px;font-weight:700;color:var(--purple);margin-bottom:4px}
73
+ .tool-desc{color:var(--text-dim);font-size:13px;margin-bottom:16px}
74
+ .tool-cat-badge{font-size:9px;font-weight:700;padding:2px 8px;border-radius:4px;background:var(--purple-bg);color:var(--purple);margin-bottom:12px;display:inline-block}
75
+ .section{background:var(--card);border:1px solid var(--border);border-radius:10px;margin-bottom:14px;overflow:hidden}
76
+ .section-title{padding:10px 14px;font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--text-dim);border-bottom:1px solid var(--border)}
77
+ .section-body{padding:14px}
78
+ .param-row{display:flex;align-items:baseline;gap:8px;padding:6px 0;border-bottom:1px solid var(--border);font-size:12px}
79
+ .param-row:last-child{border-bottom:none}
80
+ .param-name{font-family:var(--mono);font-weight:600;color:var(--accent);min-width:120px}
81
+ .param-type{font-family:var(--mono);font-size:10px;color:var(--text-muted);min-width:60px}
82
+ .param-req{font-size:9px;font-weight:700;color:var(--amber);min-width:55px}
83
+ .param-desc{color:var(--text-dim);flex:1}
84
+ .example-box{background:#0d1117;border-radius:8px;padding:12px;font-family:var(--mono);font-size:11px;line-height:1.6;color:#e6edf3;position:relative;white-space:pre-wrap;border:1px solid rgba(255,255,255,0.05)}
85
+ .copy-btn{position:absolute;top:6px;right:6px;padding:2px 7px;border-radius:4px;border:1px solid rgba(255,255,255,0.1);background:rgba(255,255,255,0.05);color:var(--text-dim);font-size:9px;cursor:pointer}
86
+ .copy-btn:hover{background:rgba(255,255,255,0.1);color:var(--text)}
87
+ .connect-box{padding:14px;border-radius:10px;border:1px solid var(--border);background:var(--card);margin-top:16px}
88
+ .connect-title{font-size:11px;font-weight:700;color:var(--text-dim);margin-bottom:6px}
89
+ .theme-btn{position:fixed;top:12px;right:12px;z-index:10;width:30px;height:30px;border-radius:7px;border:1px solid var(--border);background:var(--surface);color:var(--text-dim);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:13px}
90
+ </style>
91
+ </head>
92
+ <body>
93
+ <button class="theme-btn" onclick="toggleTheme()">&#9728;</button>
94
+ <div class="layout">
95
+ <div class="sidebar">
96
+ <div class="sidebar-header">
97
+ <div class="sidebar-title">MCP Tools</div>
98
+ <div class="sidebar-sub">MyAIforOne Agent Gateway</div>
99
+ <input class="sidebar-search" id="search" placeholder="Search tools..." oninput="filterTools()">
100
+ </div>
101
+ <div class="sidebar-body" id="sidebarBody"></div>
102
+ <div class="sidebar-nav">
103
+ <a href="#" class="active" id="navOverview" onclick="showOverview();return false">Overview</a>
104
+ <a href="/api-docs" target="_blank">REST API</a>
105
+ <a href="/" target="_blank">Home</a>
106
+ </div>
107
+ </div>
108
+ <div class="main" id="main"></div>
109
+ </div>
110
+
111
+ <script>
112
+ // ═══ TOOL CATALOG ════════════════════════════════════════════════════
113
+ const TOOLS = [
114
+ // Dashboard
115
+ {cat:"Dashboard",name:"health_check",desc:"Check if the MyAgent gateway is running",params:[]},
116
+ {cat:"Dashboard",name:"get_dashboard",desc:"Get full dashboard: all agents, channels, accounts, uptime",params:[]},
117
+
118
+ // Agents
119
+ {cat:"Agents",name:"list_agents",desc:"List all agents, optionally filtered by organization",params:[{n:"org",t:"string",r:false,d:"Filter by organization name"}]},
120
+ {cat:"Agents",name:"get_agent",desc:"Get detailed info about a specific agent",params:[{n:"agentId",t:"string",r:true}]},
121
+ {cat:"Agents",name:"get_agent_instructions",desc:"Get an agent's CLAUDE.md system prompt",params:[{n:"agentId",t:"string",r:true}]},
122
+ {cat:"Agents",name:"create_agent",desc:"Create a new agent with full configuration",params:[{n:"agentId",t:"string",r:true,d:"Unique ID (lowercase, hyphens)"},{n:"name",t:"string",r:true},{n:"alias",t:"string",r:true,d:"e.g. @myagent"},{n:"description",t:"string",r:false},{n:"workspace",t:"string",r:false},{n:"organization",t:"string",r:false},{n:"function",t:"string",r:false},{n:"title",t:"string",r:false},{n:"persistent",t:"boolean",r:false},{n:"streaming",t:"boolean",r:false},{n:"advancedMemory",t:"boolean",r:false},{n:"autonomousCapable",t:"boolean",r:false},{n:"tools",t:"string[]",r:false},{n:"skills",t:"string[]",r:false},{n:"mcps",t:"string[]",r:false},{n:"prompts",t:"string[]",r:false},{n:"subAgents",t:"string[]|'*'",r:false,d:"Sub-agents for group agent"},{n:"claudeAccount",t:"string",r:false},{n:"timeout",t:"number",r:false,d:"Timeout in ms (default 14400000)"},{n:"heartbeatInstructions",t:"string",r:false,d:"Custom heartbeat instructions (saved to heartbeat.md)"},{n:"agentClass",t:"enum",r:false,d:"standard | platform | builder"},{n:"executor",t:"string",r:false,d:"Executor override: 'claude' (default) or 'ollama:<model>' (e.g. 'ollama:gemma2')"},{n:"wiki",t:"boolean",r:false,d:"Enable wiki learning (agent saves learned facts to learned.md)"},{n:"wikiSync",t:"object",r:false,d:"{enabled: boolean, schedule: string} — scheduled sync of learned.md → context.md"}]},
123
+ {cat:"Agents",name:"update_agent",desc:"Update an existing agent's configuration",params:[{n:"agentId",t:"string",r:true},{n:"name",t:"string",r:false},{n:"alias",t:"string",r:false},{n:"description",t:"string",r:false},{n:"workspace",t:"string",r:false},{n:"organization",t:"string",r:false,d:"Organization name"},{n:"function",t:"string",r:false,d:"Org function/department"},{n:"title",t:"string",r:false,d:"Org title/role"},{n:"reportsTo",t:"string",r:false,d:"Alias of reporting agent"},{n:"persistent",t:"boolean",r:false},{n:"streaming",t:"boolean",r:false},{n:"advancedMemory",t:"boolean",r:false},{n:"autonomousCapable",t:"boolean",r:false},{n:"tools",t:"string[]",r:false},{n:"skills",t:"string[]",r:false},{n:"mcps",t:"string[]",r:false},{n:"prompts",t:"string[]",r:false},{n:"subAgents",t:"string[]|'*'",r:false,d:"Sub-agents for group agent"},{n:"claudeAccount",t:"string",r:false},{n:"instructions",t:"string",r:false,d:"Update CLAUDE.md content"},{n:"timeout",t:"number",r:false},{n:"heartbeatInstructions",t:"string",r:false,d:"Custom heartbeat instructions (saved to heartbeat.md)"},{n:"agentClass",t:"enum",r:false,d:"standard | platform | builder"},{n:"executor",t:"string",r:false,d:"Executor override: 'claude' (default) or 'ollama:<model>'"},{n:"wiki",t:"boolean",r:false,d:"Enable wiki learning"},{n:"wikiSync",t:"object",r:false,d:"{enabled: boolean, schedule: string}"}]},
124
+ {cat:"Agents",name:"delete_agent",desc:"Delete an agent",params:[{n:"agentId",t:"string",r:true}]},
125
+ {cat:"Agents",name:"recover_agent",desc:"Recover agent from session corruption",params:[{n:"agentId",t:"string",r:true}]},
126
+
127
+ // Chat
128
+ {cat:"Chat",name:"send_message",desc:"Send a message to an agent and get the response",params:[{n:"agentId",t:"string",r:true},{n:"text",t:"string",r:true},{n:"accountOverride",t:"string",r:false,d:"Use a different Claude account"}]},
129
+ {cat:"Chat",name:"delegate_message",desc:"Send a message between agents (inter-agent delegation)",params:[{n:"agentId",t:"string",r:true,d:"Target agent ID"},{n:"text",t:"string",r:true}]},
130
+
131
+ // Sessions
132
+ {cat:"Sessions",name:"list_sessions",desc:"List active conversation sessions for an agent",params:[{n:"agentId",t:"string",r:true}]},
133
+ {cat:"Sessions",name:"reset_session",desc:"Reset an agent's conversation session",params:[{n:"agentId",t:"string",r:true},{n:"senderId",t:"string",r:false,d:"Specific sender to reset"}]},
134
+ {cat:"Sessions",name:"delete_session",desc:"Delete a specific sender's session",params:[{n:"agentId",t:"string",r:true},{n:"senderId",t:"string",r:true}]},
135
+
136
+ // Model
137
+ {cat:"Model",name:"get_model",desc:"Get the current model override for an agent",params:[{n:"agentId",t:"string",r:true}]},
138
+ {cat:"Model",name:"set_model",desc:"Set a model override (opus, sonnet, haiku, or full ID)",params:[{n:"agentId",t:"string",r:true},{n:"model",t:"string",r:true,d:"opus | sonnet | haiku | full model ID"}]},
139
+ {cat:"Model",name:"clear_model",desc:"Clear model override, use agent default",params:[{n:"agentId",t:"string",r:true}]},
140
+
141
+ // Cost
142
+ {cat:"Cost",name:"get_agent_cost",desc:"Cost breakdown: today, week, all-time, by-day",params:[{n:"agentId",t:"string",r:true}]},
143
+ {cat:"Cost",name:"get_all_costs",desc:"Cost summary across ALL agents",params:[]},
144
+
145
+ // Skills
146
+ {cat:"Skills",name:"get_agent_skills",desc:"List all skills available to an agent (shared + org + agent)",params:[{n:"agentId",t:"string",r:true}]},
147
+ {cat:"Skills",name:"get_org_skills",desc:"List all skills in an organization",params:[{n:"orgName",t:"string",r:true}]},
148
+ {cat:"Skills",name:"create_skill",desc:"Create a skill file and register it in skills.json",params:[{n:"id",t:"string",r:true},{n:"name",t:"string",r:true},{n:"description",t:"string",r:true},{n:"content",t:"string",r:true},{n:"scope",t:"enum",r:true,d:"global | personal | org | agent"},{n:"orgName",t:"string",r:false,d:"Required if scope is org"},{n:"agentId",t:"string",r:false,d:"Required if scope is agent"}]},
149
+
150
+ // Tasks
151
+ {cat:"Tasks",name:"list_tasks",desc:"List tasks assigned to an agent",params:[{n:"agentId",t:"string",r:true}]},
152
+ {cat:"Tasks",name:"get_task_stats",desc:"Task statistics (counts by status)",params:[{n:"agentId",t:"string",r:true}]},
153
+ {cat:"Tasks",name:"create_task",desc:"Create a task for an agent",params:[{n:"agentId",t:"string",r:true},{n:"title",t:"string",r:true},{n:"description",t:"string",r:false},{n:"priority",t:"enum",r:false,d:"low | medium | high | critical"},{n:"project",t:"string",r:false}]},
154
+ {cat:"Tasks",name:"update_task",desc:"Update a task status or details",params:[{n:"agentId",t:"string",r:true},{n:"taskId",t:"string",r:true},{n:"status",t:"string",r:false},{n:"title",t:"string",r:false}]},
155
+ {cat:"Tasks",name:"delete_task",desc:"Delete a task",params:[{n:"agentId",t:"string",r:true},{n:"taskId",t:"string",r:true}]},
156
+ {cat:"Tasks",name:"get_all_tasks",desc:"Get all tasks across all agents",params:[]},
157
+ {cat:"Tasks",name:"create_project",desc:"Create a project for organizing tasks",params:[{n:"agentId",t:"string",r:true},{n:"name",t:"string",r:true}]},
158
+
159
+ // Projects
160
+ {cat:"Projects",name:"list_projects",desc:"List all projects (cross-agent initiatives)",params:[]},
161
+ {cat:"Projects",name:"get_project",desc:"Get a project's full details and task rollup",params:[{n:"projectId",t:"string",r:true}]},
162
+ {cat:"Projects",name:"create_initiative",desc:"Create a new cross-agent project/initiative",params:[{n:"name",t:"string",r:true},{n:"description",t:"string",r:false},{n:"owner",t:"string",r:false},{n:"teamMembers",t:"string[]",r:false},{n:"plan",t:"string",r:false},{n:"notes",t:"string",r:false}]},
163
+ {cat:"Projects",name:"update_project",desc:"Update a project's details, plan, status, or notes",params:[{n:"projectId",t:"string",r:true},{n:"name",t:"string",r:false},{n:"description",t:"string",r:false},{n:"status",t:"enum",r:false,d:"active | paused | completed | archived"},{n:"owner",t:"string",r:false},{n:"teamMembers",t:"string[]",r:false},{n:"plan",t:"string",r:false},{n:"notes",t:"string",r:false}]},
164
+ {cat:"Projects",name:"delete_project",desc:"Delete a project",params:[{n:"projectId",t:"string",r:true}]},
165
+ {cat:"Projects",name:"link_to_project",desc:"Link an entity (task, agent, org, app, artifact) to a project",params:[{n:"projectId",t:"string",r:true},{n:"type",t:"enum",r:true,d:"task | agent | org | app | artifact"},{n:"value",t:"any",r:true,d:"For task: {agentId, taskId}; for agent/org/app: string ID; for artifact: {name, path?, url?, type?}"}]},
166
+ {cat:"Projects",name:"unlink_from_project",desc:"Remove a linked entity from a project",params:[{n:"projectId",t:"string",r:true},{n:"type",t:"enum",r:true,d:"task | agent | org | app | artifact"},{n:"value",t:"any",r:true,d:"For task: {agentId, taskId}; for agent/org/app: string ID; for artifact: {name, path?, url?, type?}"}]},
167
+ {cat:"Projects",name:"get_project_status",desc:"Get a formatted status report for a project with progress and task details",params:[{n:"projectId",t:"string",r:true}]},
168
+ {cat:"Projects",name:"execute_project",desc:"Start autonomous execution of a project — creates a scheduled goal that works through tasks",params:[{n:"projectId",t:"string",r:true},{n:"schedule",t:"string",r:false,d:"Cron expression for check frequency (default every 15 min)"},{n:"reportTo",t:"string",r:false,d:"channel:chatId for notifications"}]},
169
+ {cat:"Projects",name:"pause_project",desc:"Pause autonomous execution of a project",params:[{n:"projectId",t:"string",r:true}]},
170
+
171
+ // Automations
172
+ {cat:"Automations",name:"list_automations",desc:"List all goals and crons across all agents",params:[]},
173
+ {cat:"Automations",name:"create_goal",desc:"Create an autonomous goal for an agent",params:[{n:"agentId",t:"string",r:true},{n:"id",t:"string",r:true},{n:"description",t:"string",r:true},{n:"heartbeat",t:"string",r:true,d:"Cron expression"},{n:"successCriteria",t:"string",r:false},{n:"instructions",t:"string",r:false}]},
174
+ {cat:"Automations",name:"toggle_goal",desc:"Enable or disable a goal",params:[{n:"agentId",t:"string",r:true},{n:"goalId",t:"string",r:true}]},
175
+ {cat:"Automations",name:"trigger_goal",desc:"Manually trigger a goal run",params:[{n:"agentId",t:"string",r:true},{n:"goalId",t:"string",r:true}]},
176
+ {cat:"Automations",name:"get_goal_history",desc:"Get run history for a goal",params:[{n:"agentId",t:"string",r:true},{n:"goalId",t:"string",r:true}]},
177
+ {cat:"Automations",name:"delete_goal",desc:"Delete a goal",params:[{n:"agentId",t:"string",r:true},{n:"goalId",t:"string",r:true}]},
178
+ {cat:"Automations",name:"create_cron",desc:"Create a scheduled cron job",params:[{n:"agentId",t:"string",r:true},{n:"schedule",t:"string",r:true,d:"Cron expression"},{n:"message",t:"string",r:true},{n:"channel",t:"string",r:true},{n:"chatId",t:"string",r:true},{n:"enabled",t:"boolean",r:false}]},
179
+ {cat:"Automations",name:"toggle_cron",desc:"Enable or disable a cron job",params:[{n:"agentId",t:"string",r:true},{n:"index",t:"number",r:true}]},
180
+ {cat:"Automations",name:"trigger_cron",desc:"Manually trigger a cron run",params:[{n:"agentId",t:"string",r:true},{n:"index",t:"number",r:true}]},
181
+ {cat:"Automations",name:"get_cron_history",desc:"Get run history for a cron",params:[{n:"agentId",t:"string",r:true},{n:"index",t:"number",r:true}]},
182
+ {cat:"Automations",name:"delete_cron",desc:"Delete a cron job",params:[{n:"agentId",t:"string",r:true},{n:"index",t:"number",r:true}]},
183
+
184
+ // MCPs
185
+ {cat:"MCPs",name:"list_mcps",desc:"List registered MCP servers",params:[]},
186
+ {cat:"MCPs",name:"get_mcp_catalog",desc:"Get the pre-hosted MCP catalog",params:[]},
187
+ {cat:"MCPs",name:"list_mcp_keys",desc:"List MCP API keys for an agent",params:[{n:"agentId",t:"string",r:true}]},
188
+ {cat:"MCPs",name:"save_mcp_key",desc:"Save an MCP API key",params:[{n:"agentId",t:"string",r:true},{n:"mcpName",t:"string",r:true},{n:"envVar",t:"string",r:true,d:"Environment variable name (e.g. GMAIL_ACCESS_TOKEN)"},{n:"value",t:"string",r:true,d:"Secret value"}]},
189
+ {cat:"MCPs",name:"delete_mcp_key",desc:"Delete an MCP API key",params:[{n:"agentId",t:"string",r:true},{n:"mcpName",t:"string",r:true}]},
190
+ {cat:"MCPs",name:"list_mcp_connections",desc:"List MCP connections for an agent",params:[{n:"agentId",t:"string",r:true}]},
191
+ {cat:"MCPs",name:"create_mcp_connection",desc:"Create an MCP connection instance (instanceName auto-generated)",params:[{n:"agentId",t:"string",r:true},{n:"baseMcp",t:"string",r:true,d:"Base MCP server name from registry"},{n:"label",t:"string",r:true,d:"Human-readable label"},{n:"envVar",t:"string",r:true,d:"Environment variable name"},{n:"value",t:"string",r:true,d:"Secret value"},{n:"description",t:"string",r:false}]},
192
+ {cat:"MCPs",name:"delete_mcp_connection",desc:"Delete an MCP connection",params:[{n:"agentId",t:"string",r:true},{n:"instanceName",t:"string",r:true}]},
193
+
194
+ // Channels
195
+ {cat:"Channels",name:"list_channels",desc:"List all messaging channels with config and routes",params:[]},
196
+ {cat:"Channels",name:"update_channel",desc:"Update channel settings (sticky routing, enabled)",params:[{n:"channelName",t:"string",r:true},{n:"enabled",t:"boolean",r:false},{n:"stickyRouting",t:"enum",r:false,d:"none | sticky | prefix"},{n:"stickyPrefix",t:"string",r:false},{n:"stickyTimeoutMs",t:"number",r:false}]},
197
+ {cat:"Channels",name:"add_agent_route",desc:"Add an agent route to a channel",params:[{n:"channelName",t:"string",r:true},{n:"agentId",t:"string",r:true},{n:"chatId",t:"string",r:true},{n:"requireMention",t:"boolean",r:false},{n:"allowFrom",t:"string[]",r:false}]},
198
+ {cat:"Channels",name:"remove_agent_route",desc:"Remove an agent's route from a channel",params:[{n:"channelName",t:"string",r:true},{n:"agentId",t:"string",r:true}]},
199
+ {cat:"Channels",name:"add_monitored_chat",desc:"Add a monitored chat ID",params:[{n:"channelName",t:"string",r:true},{n:"chatId",t:"string",r:true}]},
200
+ {cat:"Channels",name:"remove_monitored_chat",desc:"Remove a monitored chat",params:[{n:"channelName",t:"string",r:true},{n:"chatId",t:"string",r:true}]},
201
+ {cat:"Channels",name:"get_sticky_routing",desc:"Get sticky routing config for all channels",params:[]},
202
+
203
+ // Activity & Logs
204
+ {cat:"Activity",name:"get_activity",desc:"Get recent activity feed across all agents",params:[{n:"limit",t:"number",r:false}]},
205
+ {cat:"Activity",name:"get_agent_logs",desc:"Paginated conversation logs with search",params:[{n:"agentId",t:"string",r:true},{n:"limit",t:"number",r:false},{n:"offset",t:"number",r:false},{n:"search",t:"string",r:false,d:"Keyword filter"}]},
206
+
207
+ // Memory
208
+ {cat:"Memory",name:"get_agent_memory",desc:"List memory entries (context.md + daily files)",params:[{n:"agentId",t:"string",r:true},{n:"limit",t:"number",r:false}]},
209
+ {cat:"Memory",name:"search_memory",desc:"Search an agent's memory by keyword",params:[{n:"agentId",t:"string",r:true},{n:"query",t:"string",r:true}]},
210
+ {cat:"Memory",name:"clear_memory_context",desc:"Clear an agent's context.md",params:[{n:"agentId",t:"string",r:true}]},
211
+
212
+ // Pairing
213
+ {cat:"Pairing",name:"list_paired_senders",desc:"List paired/authorized senders",params:[]},
214
+ {cat:"Pairing",name:"pair_sender",desc:"Manually authorize a sender",params:[{n:"senderKey",t:"string",r:true,d:"Format: channel:senderId"}]},
215
+ {cat:"Pairing",name:"unpair_sender",desc:"Remove an authorized sender",params:[{n:"senderKey",t:"string",r:true}]},
216
+
217
+ // Config
218
+ {cat:"Config",name:"list_accounts",desc:"List Claude accounts (name -> config dir)",params:[]},
219
+ {cat:"Config",name:"add_account",desc:"Add a Claude account",params:[{n:"name",t:"string",r:true},{n:"path",t:"string",r:true,d:"Config dir (e.g. ~/.claude)"}]},
220
+ {cat:"Config",name:"delete_account",desc:"Remove a Claude account",params:[{n:"name",t:"string",r:true}]},
221
+ {cat:"Config",name:"check_account_status",desc:"Check if account is authenticated",params:[{n:"name",t:"string",r:true}]},
222
+ {cat:"Config",name:"start_account_login",desc:"Start OAuth login — returns URL",params:[{n:"name",t:"string",r:true},{n:"path",t:"string",r:true}]},
223
+ {cat:"Config",name:"get_service_config",desc:"Get service settings (personalAgentsDir, personalRegistryDir, port, logLevel)",params:[]},
224
+ {cat:"Config",name:"update_service_config",desc:"Update service settings (restart required)",params:[{n:"personalAgentsDir",t:"string",r:false},{n:"personalRegistryDir",t:"string",r:false},{n:"webUIPort",t:"number",r:false},{n:"logLevel",t:"string",r:false},{n:"logFile",t:"string",r:false},{n:"pairingCode",t:"string",r:false},{n:"webhookSecret",t:"string",r:false}]},
225
+
226
+ // Apps
227
+ {cat:"Apps",name:"list_apps",desc:"List all registered apps",params:[]},
228
+ {cat:"Apps",name:"create_app",desc:"Register a new app",params:[{n:"name",t:"string",r:true},{n:"url",t:"string",r:false},{n:"provider",t:"string",r:false},{n:"category",t:"string",r:false},{n:"githubRepo",t:"string",r:false}]},
229
+ {cat:"Apps",name:"update_app",desc:"Update an existing app",params:[{n:"id",t:"string",r:true},{n:"name",t:"string",r:false},{n:"url",t:"string",r:false}]},
230
+ {cat:"Apps",name:"delete_app",desc:"Delete an app",params:[{n:"id",t:"string",r:true}]},
231
+ {cat:"Apps",name:"check_app_health",desc:"Check app health/status",params:[{n:"id",t:"string",r:true}]},
232
+
233
+ // Files
234
+ {cat:"Files",name:"list_agent_files",desc:"List files in an agent's FileStorage",params:[{n:"agentId",t:"string",r:true}]},
235
+ {cat:"Files",name:"download_agent_file",desc:"Download a file from an agent's file storage",params:[{n:"agentId",t:"string",r:true},{n:"path",t:"string",r:true,d:"File path within agent storage"}]},
236
+
237
+ // Registry
238
+ {cat:"Registry",name:"browse_registry",desc:"Browse marketplace by type",params:[{n:"type",t:"enum",r:true,d:"skills | agents | mcps | prompts | apps"}]},
239
+ {cat:"Registry",name:"install_registry_item",desc:"Install a skill/MCP/agent from registry",params:[{n:"id",t:"string",r:true},{n:"type",t:"string",r:true}]},
240
+ {cat:"Registry",name:"assign_to_agent",desc:"Assign a skill or MCP to an agent",params:[{n:"agentId",t:"string",r:true},{n:"itemId",t:"string",r:true},{n:"type",t:"string",r:true,d:"skill or mcp"}]},
241
+ {cat:"Registry",name:"scan_skills",desc:"Scan directory for unregistered skills",params:[{n:"dir",t:"string",r:false}]},
242
+ {cat:"Registry",name:"create_prompt",desc:"Create a prompt template",params:[{n:"id",t:"string",r:true},{n:"name",t:"string",r:true},{n:"content",t:"string",r:true}]},
243
+ {cat:"Registry",name:"add_mcp_to_registry",desc:"Add MCP server to registry",params:[{n:"id",t:"string",r:true},{n:"name",t:"string",r:true},{n:"type",t:"string",r:true},{n:"url",t:"string",r:false}]},
244
+
245
+ // Registry (continued)
246
+ {cat:"Registry",name:"set_platform_default",desc:"Set a marketplace item as the platform default",params:[{n:"type",t:"string",r:true,d:"Item type (skill, mcp, prompt)"},{n:"id",t:"string",r:true,d:"Item ID"}]},
247
+ {cat:"Registry",name:"import_skills",desc:"Import scanned skills into an agent",params:[{n:"agentId",t:"string",r:true},{n:"skills",t:"string[]",r:true,d:"Skill names to import"}]},
248
+ {cat:"Registry",name:"get_prompt_trigger",desc:"Get the current prompt trigger character",params:[]},
249
+ {cat:"Registry",name:"set_prompt_trigger",desc:"Set the prompt trigger character",params:[{n:"trigger",t:"string",r:true,d:"Trigger character (e.g. / or !)"}]},
250
+
251
+ // Config (continued)
252
+ {cat:"Config",name:"submit_login_code",desc:"Submit authentication code for account login",params:[{n:"accountName",t:"string",r:true},{n:"code",t:"string",r:true,d:"Auth code from OAuth flow"}]},
253
+
254
+ // Chat (continued)
255
+ {cat:"Chat",name:"get_chat_job_raw",desc:"Get raw output lines from a streaming chat job",params:[{n:"jobId",t:"string",r:true,d:"Job ID from startStream"},{n:"after",t:"number",r:false,d:"Line index to start from"}]},
256
+
257
+ // Dashboard (continued)
258
+ {cat:"Dashboard",name:"get_agent_registry",desc:"Get the agent registry with delegation keywords",params:[]},
259
+
260
+ // Lab
261
+ {cat:"Lab",name:"get_platform_agents",desc:"List platform-managed creator agents (used by Lab)",params:[]},
262
+ {cat:"Lab",name:"browse_dirs",desc:"Browse subdirectories of a given path (for Lab directory picker)",params:[{n:"path",t:"string",r:false,d:"Directory path (defaults to home dir, supports ~ prefix)"}]},
263
+
264
+ // Heartbeat
265
+ {cat:"Agents",name:"trigger_heartbeat",desc:"Trigger a heartbeat check for an agent (runs async, returns immediately)",params:[{n:"agentId",t:"string",r:true},{n:"triggeredBy",t:"string",r:false,d:"Label for trigger source (default: manual)"}]},
266
+ {cat:"Agents",name:"get_heartbeat_history",desc:"Get recent heartbeat run history for an agent",params:[{n:"agentId",t:"string",r:true},{n:"limit",t:"number",r:false,d:"Max entries (default 20)"}]},
267
+
268
+ // Wiki Sync
269
+ {cat:"Agents",name:"trigger_wiki_sync",desc:"Trigger wiki sync for an agent — merges learned.md into context.md (runs async, returns immediately)",params:[{n:"agentId",t:"string",r:true}]},
270
+ {cat:"Agents",name:"get_wiki_sync_history",desc:"Get recent wiki sync run history for an agent",params:[{n:"agentId",t:"string",r:true},{n:"limit",t:"number",r:false,d:"Max entries (default 20)"}]},
271
+
272
+ // Whoami
273
+ {cat:"Agents",name:"whoami",desc:"Get Claude auth status for the account an agent uses",params:[{n:"agentId",t:"string",r:true}]},
274
+
275
+ // Changelog
276
+ {cat:"Dashboard",name:"get_changelog",desc:"Get recent changelog parsed from git history (grouped by date)",params:[]},
277
+
278
+ // SaaS Publishing
279
+ {cat:"SaaS",name:"get_saas_config",desc:"Get SaaS connection config (baseUrl, connected, hasKey)",params:[]},
280
+ {cat:"SaaS",name:"update_saas_config",desc:"Save SaaS connection settings (baseUrl + apiKey)",params:[{n:"baseUrl",t:"string",r:true,d:"Base URL of the SaaS instance (e.g. https://app.myai41.com)"},{n:"apiKey",t:"string",r:true,d:"SaaS API key (mak_...)"}]},
281
+ {cat:"SaaS",name:"test_saas_connection",desc:"Test connection to SaaS instance — pass values to test before saving",params:[{n:"baseUrl",t:"string",r:false,d:"Override saved base URL"},{n:"apiKey",t:"string",r:false,d:"Override saved API key"}]},
282
+ {cat:"SaaS",name:"publish_to_saas",desc:"Publish a skill, prompt, or app to the connected SaaS platform",params:[{n:"type",t:"enum",r:true,d:"skill | prompt | app"},{n:"id",t:"string",r:true,d:"Local registry ID of the item"},{n:"destination",t:"enum",r:true,d:"library (company-private) | marketplace (public)"}]},
283
+
284
+ // xbar
285
+ {cat:"Config",name:"install_xbar",desc:"Install xbar status bar plugin (macOS only)",params:[]},
286
+
287
+ // Chat Streaming
288
+ {cat:"Chat",name:"start_stream",desc:"Start a streaming chat — returns jobId to poll with get_chat_job_raw",params:[{n:"agentId",t:"string",r:true},{n:"text",t:"string",r:true},{n:"accountOverride",t:"string",r:false,d:"Use a different Claude account"}]},
289
+ {cat:"Chat",name:"stop_chat_job",desc:"Stop a running chat job",params:[{n:"jobId",t:"string",r:true,d:"Job ID from start_stream"}]},
290
+
291
+ // Webhook
292
+ {cat:"Chat",name:"send_webhook",desc:"Send a message to an agent via webhook (external trigger)",params:[{n:"agentId",t:"string",r:true},{n:"text",t:"string",r:true},{n:"secret",t:"string",r:false,d:"Webhook secret (x-webhook-secret header)"},{n:"channel",t:"string",r:false,d:"Override reply channel"},{n:"chatId",t:"string",r:false,d:"Override reply chat ID"}]},
293
+
294
+ // AI Gym — Learner Profile
295
+ {cat:"AI Gym",name:"get_learner_profile",desc:"Get the learner's AI Gym profile including dimensions, streak, trainer selection, and programs",params:[]},
296
+ {cat:"AI Gym",name:"update_learner_profile",desc:"Update fields in the learner profile",params:[{n:"data",t:"object",r:true,d:"Fields to merge into the learner profile"}]},
297
+
298
+ // AI Gym — Plan
299
+ {cat:"AI Gym",name:"get_plan",desc:"Get the learner's training plan (on-the-job + platform-driven buckets)",params:[]},
300
+ {cat:"AI Gym",name:"update_plan",desc:"Write an updated training plan",params:[{n:"data",t:"object",r:true,d:"Full plan to write"}]},
301
+
302
+ // AI Gym — Progress
303
+ {cat:"AI Gym",name:"get_gym_progress",desc:"Get program completion progress for all programs",params:[]},
304
+ {cat:"AI Gym",name:"update_gym_progress",desc:"Update program progress",params:[{n:"data",t:"object",r:true,d:"Progress keyed by program slug"}]},
305
+
306
+ // AI Gym — Cards
307
+ {cat:"AI Gym",name:"list_gym_cards",desc:"List all active gym cards (recommendations, tips, nudges)",params:[]},
308
+ {cat:"AI Gym",name:"create_gym_card",desc:"Create a gym card with a recommendation or tip",params:[{n:"title",t:"string",r:true},{n:"description",t:"string",r:true},{n:"type",t:"string",r:true},{n:"cta",t:"string",r:false,d:"Call-to-action text"},{n:"ctaAction",t:"string",r:false,d:"Action identifier for the CTA"}]},
309
+ {cat:"AI Gym",name:"dismiss_gym_card",desc:"Remove a gym card",params:[{n:"id",t:"string",r:true,d:"Card ID"}]},
310
+
311
+ // AI Gym — Dimensions
312
+ {cat:"AI Gym",name:"snapshot_dimensions",desc:"Save a weekly dimension score snapshot",params:[{n:"date",t:"string",r:false,d:"Snapshot date (defaults to today)"},{n:"dimensions",t:"object",r:true,d:"Object with score per dimension"}]},
313
+ {cat:"AI Gym",name:"get_dimension_history",desc:"Get all weekly dimension score snapshots",params:[]},
314
+
315
+ // AI Gym — Programs
316
+ {cat:"AI Gym",name:"list_gym_programs",desc:"List all available training programs",params:[]},
317
+ {cat:"AI Gym",name:"get_gym_program",desc:"Get a program with full modules and steps",params:[{n:"slug",t:"string",r:true}]},
318
+ {cat:"AI Gym",name:"import_program",desc:"Import a program from markdown (H1=program, H2=module, H3=step)",params:[{n:"markdown",t:"string",r:true}]},
319
+ {cat:"AI Gym",name:"update_gym_program",desc:"Update a program's metadata",params:[{n:"slug",t:"string",r:true},{n:"body",t:"object",r:true,d:"Fields to update"}]},
320
+ {cat:"AI Gym",name:"delete_gym_program",desc:"Delete a training program",params:[{n:"slug",t:"string",r:true}]},
321
+
322
+ // AI Gym — Agent Activity
323
+ {cat:"AI Gym",name:"get_agent_logs",desc:"Get paginated conversation logs for an agent",params:[{n:"agentId",t:"string",r:true},{n:"limit",t:"number",r:false},{n:"offset",t:"number",r:false}]},
324
+ {cat:"AI Gym",name:"get_agent_activity_summary",desc:"Get aggregated activity stats for an agent",params:[{n:"agentId",t:"string",r:true}]},
325
+ {cat:"AI Gym",name:"search_agent_logs",desc:"Full-text search across agent conversation logs",params:[{n:"q",t:"string",r:true},{n:"agentIds",t:"string",r:false,d:"Comma-separated agent IDs"}]},
326
+
327
+ // AI Gym — Digest
328
+ {cat:"AI Gym",name:"run_gym_digest",desc:"Manually trigger the activity digest (analyzes all activity, scores dimensions, generates cards)",params:[]},
329
+
330
+ // AI Gym — Feed & Config
331
+ {cat:"AI Gym",name:"get_gym_feed",desc:"Get the aggregated gym feed — tips/nudges from gym cards, platform updates from changelog, and AI briefing",params:[]},
332
+ {cat:"AI Gym",name:"get_gym_config",desc:"Get public gym configuration flags (gymEnabled, gymOnlyMode, aibriefingEnabled)",params:[]},
333
+ {cat:"AI Gym",name:"list_gym_guides",desc:"List all coach-created guides (programs with source=coach)",params:[]},
334
+ {cat:"AI Gym",name:"create_gym_guide",desc:"Create a coach-generated guide from a training session. Saved as a program with source=coach, visible in the Guides tab.",params:[{n:"title",t:"string",r:true},{n:"description",t:"string",r:false},{n:"difficulty",t:"string",r:false,d:"beginner/intermediate/advanced"},{n:"dimensions",t:"array",r:false},{n:"estimatedTime",t:"string",r:false},{n:"modules",t:"array",r:false},{n:"content",t:"string",r:false,d:"Raw markdown alternative to modules"}]},
335
+
336
+ // Session Tabs
337
+ {cat:"Sessions",name:"create_session_tab",desc:"Create a named session tab on an agent's chat page, optionally routing to a different agent",params:[{n:"agentId",t:"string",r:true,d:"Agent whose chat page hosts the tab"},{n:"tabId",t:"string",r:true,d:"Unique tab slug (e.g. 'project-alpha')"},{n:"label",t:"string",r:true,d:"Human-readable tab label"},{n:"targetAgentId",t:"string",r:false,d:"Route messages to this agent instead"}]},
338
+ {cat:"Sessions",name:"list_session_tabs",desc:"List all named session tabs (includes closed sessions with last message preview)",params:[{n:"agentId",t:"string",r:true}]},
339
+ {cat:"Sessions",name:"get_session_tab_history",desc:"Get full conversation history for a specific session tab",params:[{n:"agentId",t:"string",r:true},{n:"tabId",t:"string",r:true}]},
340
+ {cat:"Sessions",name:"rename_session_tab",desc:"Rename a session tab",params:[{n:"agentId",t:"string",r:true},{n:"tabId",t:"string",r:true},{n:"label",t:"string",r:true,d:"New name"}]},
341
+ {cat:"Sessions",name:"delete_session_tab",desc:"Permanently delete a session tab and its Claude session state",params:[{n:"agentId",t:"string",r:true},{n:"tabId",t:"string",r:true}]},
342
+
343
+ // Profile
344
+ {cat:"Profile",name:"get_profile",desc:"Get the user's profile (name, role, industry, AI experience, interests)",params:[]},
345
+ {cat:"Profile",name:"update_profile",desc:"Update the user's profile",params:[{n:"name",t:"string",r:false},{n:"role",t:"string",r:false},{n:"industry",t:"string",r:false},{n:"aiExperience",t:"enum",r:false,d:"beginner | intermediate | advanced"},{n:"interests",t:"string[]",r:false}]},
346
+
347
+ // Memory (continued)
348
+ {cat:"Memory",name:"write_memory",desc:"Write content to an agent's memory (context.md or daily journal)",params:[{n:"agentId",t:"string",r:true},{n:"content",t:"string",r:true},{n:"target",t:"enum",r:false,d:"context | daily | overwrite (default: overwrite)"}]},
349
+
350
+ // Skills (continued)
351
+ {cat:"Skills",name:"get_skill_content",desc:"Read the full content of a skill markdown file",params:[{n:"path",t:"string",r:true,d:"Absolute path to the skill .md file"}]},
352
+
353
+ // Files (continued)
354
+ {cat:"Files",name:"upload_file",desc:"Upload a file to an agent's FileStorage (base64-encoded)",params:[{n:"agentId",t:"string",r:true},{n:"fileName",t:"string",r:true},{n:"base64Content",t:"string",r:true},{n:"mode",t:"enum",r:false,d:"temp | permanent (default: temp)"}]},
355
+
356
+ // Automations (continued)
357
+ {cat:"Automations",name:"update_goal",desc:"Update an existing goal's configuration",params:[{n:"agentId",t:"string",r:true},{n:"goalId",t:"string",r:true},{n:"description",t:"string",r:false},{n:"successMetric",t:"string",r:false},{n:"enabled",t:"boolean",r:false},{n:"budget",t:"number",r:false,d:"Max daily USD"},{n:"heartbeat",t:"any",r:false,d:"Updated schedule config"},{n:"reportTargets",t:"any",r:false}]},
358
+ {cat:"Automations",name:"update_cron",desc:"Update an existing cron job's schedule, message, or channel",params:[{n:"agentId",t:"string",r:true},{n:"index",t:"number",r:true},{n:"schedule",t:"string",r:false},{n:"message",t:"string",r:false},{n:"channel",t:"string",r:false},{n:"chatId",t:"string",r:false},{n:"enabled",t:"boolean",r:false}]},
359
+
360
+ // Config (continued)
361
+ {cat:"Config",name:"test_provider",desc:"Test an API key for a cloud provider (OpenAI, Grok, Gemini, Groq, Together, Mistral)",params:[{n:"provider",t:"string",r:true,d:"openai | grok | gemini | groq | together | mistral"}]},
362
+ {cat:"Config",name:"restart_service",desc:"Restart the MyAgent gateway service",params:[]},
363
+
364
+ // Discovery
365
+ {cat:"Discovery",name:"list_capabilities",desc:"Get a structured summary of all platform capabilities grouped by category",params:[]},
366
+ {cat:"Discovery",name:"get_user_guide",desc:"Get the full platform user guide — every page, button, API, and MCP tool documented",params:[]},
367
+
368
+ // Drive
369
+ {cat:"Drive",name:"browse_drive",desc:"Browse files and folders in the PersonalAgents data drive",params:[{n:"path",t:"string",r:false,d:"Path to browse (default: drive root)"}]},
370
+ {cat:"Drive",name:"read_drive_file",desc:"Read a file from the PersonalAgents data drive (max 1MB)",params:[{n:"path",t:"string",r:true,d:"Absolute path to the file"}]},
371
+ {cat:"Drive",name:"search_drive",desc:"Full-text search across the PersonalAgents data drive",params:[{n:"q",t:"string",r:true,d:"Search query"},{n:"path",t:"string",r:false,d:"Scope to subdirectory"},{n:"limit",t:"number",r:false,d:"Max results (default 50)"},{n:"types",t:"string",r:false,d:"Comma-separated extensions (default: .md,.json,.jsonl,.txt)"}]},
372
+ ];
373
+
374
+ // ═══ STATE ═══════════════════════════════════════════════════════════
375
+ let selected = null;
376
+
377
+ // ═══ THEME ═══════════════════════════════════════════════════════════
378
+ function applyTheme(t){document.documentElement.setAttribute('data-theme',t);localStorage.setItem('mcp-docs-theme',t)}
379
+ function toggleTheme(){applyTheme(document.documentElement.getAttribute('data-theme')==='dark'?'light':'dark')}
380
+ applyTheme(localStorage.getItem('mcp-docs-theme')||'dark');
381
+
382
+ // ═══ SIDEBAR ═════════════════════════════════════════════════════════
383
+ function getCats(){const c={};TOOLS.forEach(t=>{if(!c[t.cat])c[t.cat]=[];c[t.cat].push(t)});return c}
384
+ function renderSidebar(q=''){
385
+ const cats=getCats();const s=q.toLowerCase();let h='';
386
+ for(const[cat,tools]of Object.entries(cats)){
387
+ const f=s?tools.filter(t=>t.name.includes(s)||t.desc.toLowerCase().includes(s)):tools;
388
+ if(!f.length)continue;
389
+ const open=s||(selected&&selected.cat===cat);
390
+ h+=`<div class="cat-header${open?' open':''}" onclick="this.classList.toggle('open')"><span class="arrow">&#9656;</span>${esc(cat)}<span class="count">${f.length}</span></div><div class="cat-items">${f.map(t=>`<div class="tool-item${selected===t?' active':''}" onclick="selectTool('${t.name}')">${t.name}</div>`).join('')}</div>`;
391
+ }
392
+ document.getElementById('sidebarBody').innerHTML=h;
393
+ }
394
+ function filterTools(){renderSidebar(document.getElementById('search').value)}
395
+
396
+ // ═══ OVERVIEW ════════════════════════════════════════════════════════
397
+ function showOverview(){
398
+ selected=null;renderSidebar();
399
+ const cats=getCats();const cn=Object.keys(cats);
400
+ document.getElementById('main').innerHTML=`<div class="overview"><h1>MCP Tools</h1><div class="sub">MyAIforOne Agent Gateway — ${TOOLS.length} tools across ${cn.length} categories</div>
401
+ <div class="stat-row"><div class="stat"><div class="stat-val">${TOOLS.length}</div><div class="stat-label">Tools</div></div><div class="stat"><div class="stat-val">${cn.length}</div><div class="stat-label">Categories</div></div><div class="stat"><div class="stat-val">stdio</div><div class="stat-label">Transport</div></div></div>
402
+ <div style="font-size:11px;font-weight:700;color:var(--text-dim);margin-bottom:8px">CATEGORIES</div>
403
+ <div class="cat-grid">${cn.map(c=>`<div class="cat-card" onclick="jumpCat('${c}')"><div class="cat-card-name">${c}</div><div class="cat-card-count">${cats[c].length} tools</div></div>`).join('')}</div>
404
+ <div class="connect-box"><div class="connect-title">Connect to this MCP</div><div class="example-box"><button class="copy-btn" onclick="copyText(this.nextElementSibling.textContent)">Copy</button><code>// Claude Code: add to .mcp.json
405
+ {
406
+ "mcpServers": {
407
+ "myaiforone": {
408
+ "command": "node",
409
+ "args": ["server/mcp-server/dist/index.js"],
410
+ "cwd": "/path/to/channelToAgentToClaude"
411
+ }
412
+ }
413
+ }</code></div></div></div>`;
414
+ }
415
+
416
+ function jumpCat(c){const t=TOOLS.find(t=>t.cat===c);if(t)selectTool(t.name)}
417
+
418
+ // ═══ TOOL DETAIL ═════════════════════════════════════════════════════
419
+ function selectTool(name){
420
+ selected=TOOLS.find(t=>t.name===name);if(!selected)return;
421
+ renderSidebar(document.getElementById('search').value);
422
+ const t=selected;const hasParams=t.params.length>0;
423
+ const example={};t.params.forEach(p=>{if(p.r)example[p.n]=p.t==='number'?0:p.t==='boolean'?true:`<${p.n}>`});
424
+
425
+ let h=`<div class="tool-detail"><div class="tool-cat-badge">${esc(t.cat)}</div><div class="tool-name">${t.name}</div><div class="tool-desc">${esc(t.desc)}</div>`;
426
+ if(hasParams){
427
+ h+=`<div class="section"><div class="section-title">Parameters</div><div class="section-body">${t.params.map(p=>`<div class="param-row"><span class="param-name">${p.n}</span><span class="param-type">${esc(p.t)}</span><span class="param-req">${p.r?'required':''}</span><span class="param-desc">${esc(p.d||'')}</span></div>`).join('')}</div></div>`;
428
+ }
429
+ h+=`<div class="section"><div class="section-title">Example Call</div><div class="section-body"><div class="example-box"><button class="copy-btn" onclick="copyText(this.nextElementSibling.textContent)">Copy</button><code>${esc(JSON.stringify({tool:t.name,arguments:hasParams?example:undefined},null,2))}</code></div></div></div>`;
430
+ h+=`</div>`;
431
+ document.getElementById('main').innerHTML=h;
432
+ }
433
+
434
+ // ═══ UTILS ═══════════════════════════════════════════════════════════
435
+ function esc(s){return String(s||'').replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;')}
436
+ function copyText(t){navigator.clipboard.writeText(t).catch(()=>{})}
437
+
438
+ showOverview();
439
+ </script>
440
+ </body>
441
+ </html>