toolhome 0.5.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 (214) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +295 -0
  3. package/README.zh.md +281 -0
  4. package/dist/server/app.d.ts +16 -0
  5. package/dist/server/app.d.ts.map +1 -0
  6. package/dist/server/app.js +166 -0
  7. package/dist/server/app.js.map +1 -0
  8. package/dist/server/cli/main.d.ts +3 -0
  9. package/dist/server/cli/main.d.ts.map +1 -0
  10. package/dist/server/cli/main.js +587 -0
  11. package/dist/server/cli/main.js.map +1 -0
  12. package/dist/server/cli-plane/allow-list.d.ts +18 -0
  13. package/dist/server/cli-plane/allow-list.d.ts.map +1 -0
  14. package/dist/server/cli-plane/allow-list.js +28 -0
  15. package/dist/server/cli-plane/allow-list.js.map +1 -0
  16. package/dist/server/cli-plane/cli-service.d.ts +41 -0
  17. package/dist/server/cli-plane/cli-service.d.ts.map +1 -0
  18. package/dist/server/cli-plane/cli-service.js +282 -0
  19. package/dist/server/cli-plane/cli-service.js.map +1 -0
  20. package/dist/server/cli-plane/frames.d.ts +26 -0
  21. package/dist/server/cli-plane/frames.d.ts.map +1 -0
  22. package/dist/server/cli-plane/frames.js +12 -0
  23. package/dist/server/cli-plane/frames.js.map +1 -0
  24. package/dist/server/cli-plane/models.d.ts +174 -0
  25. package/dist/server/cli-plane/models.d.ts.map +1 -0
  26. package/dist/server/cli-plane/models.js +169 -0
  27. package/dist/server/cli-plane/models.js.map +1 -0
  28. package/dist/server/cli-plane/routes.d.ts +32 -0
  29. package/dist/server/cli-plane/routes.d.ts.map +1 -0
  30. package/dist/server/cli-plane/routes.js +94 -0
  31. package/dist/server/cli-plane/routes.js.map +1 -0
  32. package/dist/server/cli-plane/runner.d.ts +41 -0
  33. package/dist/server/cli-plane/runner.d.ts.map +1 -0
  34. package/dist/server/cli-plane/runner.js +163 -0
  35. package/dist/server/cli-plane/runner.js.map +1 -0
  36. package/dist/server/cli-plane/status.d.ts +12 -0
  37. package/dist/server/cli-plane/status.d.ts.map +1 -0
  38. package/dist/server/cli-plane/status.js +24 -0
  39. package/dist/server/cli-plane/status.js.map +1 -0
  40. package/dist/server/config/harness-import.d.ts +44 -0
  41. package/dist/server/config/harness-import.d.ts.map +1 -0
  42. package/dist/server/config/harness-import.js +166 -0
  43. package/dist/server/config/harness-import.js.map +1 -0
  44. package/dist/server/config.d.ts +20 -0
  45. package/dist/server/config.d.ts.map +1 -0
  46. package/dist/server/config.js +80 -0
  47. package/dist/server/config.js.map +1 -0
  48. package/dist/server/control/client.d.ts +24 -0
  49. package/dist/server/control/client.d.ts.map +1 -0
  50. package/dist/server/control/client.js +115 -0
  51. package/dist/server/control/client.js.map +1 -0
  52. package/dist/server/control/control-api.d.ts +39 -0
  53. package/dist/server/control/control-api.d.ts.map +1 -0
  54. package/dist/server/control/control-api.js +291 -0
  55. package/dist/server/control/control-api.js.map +1 -0
  56. package/dist/server/control/control-service.d.ts +713 -0
  57. package/dist/server/control/control-service.d.ts.map +1 -0
  58. package/dist/server/control/control-service.js +693 -0
  59. package/dist/server/control/control-service.js.map +1 -0
  60. package/dist/server/control/openapi.d.ts +2 -0
  61. package/dist/server/control/openapi.d.ts.map +1 -0
  62. package/dist/server/control/openapi.js +370 -0
  63. package/dist/server/control/openapi.js.map +1 -0
  64. package/dist/server/data-plane/data-plane.d.ts +20 -0
  65. package/dist/server/data-plane/data-plane.d.ts.map +1 -0
  66. package/dist/server/data-plane/data-plane.js +335 -0
  67. package/dist/server/data-plane/data-plane.js.map +1 -0
  68. package/dist/server/data-plane/gateway-server.d.ts +13 -0
  69. package/dist/server/data-plane/gateway-server.d.ts.map +1 -0
  70. package/dist/server/data-plane/gateway-server.js +796 -0
  71. package/dist/server/data-plane/gateway-server.js.map +1 -0
  72. package/dist/server/data-plane/legacy-session.d.ts +18 -0
  73. package/dist/server/data-plane/legacy-session.d.ts.map +1 -0
  74. package/dist/server/data-plane/legacy-session.js +137 -0
  75. package/dist/server/data-plane/legacy-session.js.map +1 -0
  76. package/dist/server/data-plane/projection.d.ts +18 -0
  77. package/dist/server/data-plane/projection.d.ts.map +1 -0
  78. package/dist/server/data-plane/projection.js +44 -0
  79. package/dist/server/data-plane/projection.js.map +1 -0
  80. package/dist/server/data-plane/registry.d.ts +31 -0
  81. package/dist/server/data-plane/registry.d.ts.map +1 -0
  82. package/dist/server/data-plane/registry.js +129 -0
  83. package/dist/server/data-plane/registry.js.map +1 -0
  84. package/dist/server/data-plane/task-extension.d.ts +7 -0
  85. package/dist/server/data-plane/task-extension.d.ts.map +1 -0
  86. package/dist/server/data-plane/task-extension.js +33 -0
  87. package/dist/server/data-plane/task-extension.js.map +1 -0
  88. package/dist/server/data-plane/virtualization.d.ts +35 -0
  89. package/dist/server/data-plane/virtualization.d.ts.map +1 -0
  90. package/dist/server/data-plane/virtualization.js +228 -0
  91. package/dist/server/data-plane/virtualization.js.map +1 -0
  92. package/dist/server/domain/errors.d.ts +9 -0
  93. package/dist/server/domain/errors.d.ts.map +1 -0
  94. package/dist/server/domain/errors.js +19 -0
  95. package/dist/server/domain/errors.js.map +1 -0
  96. package/dist/server/domain/models.d.ts +720 -0
  97. package/dist/server/domain/models.d.ts.map +1 -0
  98. package/dist/server/domain/models.js +327 -0
  99. package/dist/server/domain/models.js.map +1 -0
  100. package/dist/server/main.d.ts +2 -0
  101. package/dist/server/main.d.ts.map +1 -0
  102. package/dist/server/main.js +37 -0
  103. package/dist/server/main.js.map +1 -0
  104. package/dist/server/manage/management-mcp.d.ts +27 -0
  105. package/dist/server/manage/management-mcp.d.ts.map +1 -0
  106. package/dist/server/manage/management-mcp.js +431 -0
  107. package/dist/server/manage/management-mcp.js.map +1 -0
  108. package/dist/server/market/catalog.d.ts +111 -0
  109. package/dist/server/market/catalog.d.ts.map +1 -0
  110. package/dist/server/market/catalog.js +784 -0
  111. package/dist/server/market/catalog.js.map +1 -0
  112. package/dist/server/market/installers.d.ts +64 -0
  113. package/dist/server/market/installers.d.ts.map +1 -0
  114. package/dist/server/market/installers.js +181 -0
  115. package/dist/server/market/installers.js.map +1 -0
  116. package/dist/server/market/market-service.d.ts +146 -0
  117. package/dist/server/market/market-service.d.ts.map +1 -0
  118. package/dist/server/market/market-service.js +930 -0
  119. package/dist/server/market/market-service.js.map +1 -0
  120. package/dist/server/observability/call-recorder.d.ts +22 -0
  121. package/dist/server/observability/call-recorder.d.ts.map +1 -0
  122. package/dist/server/observability/call-recorder.js +99 -0
  123. package/dist/server/observability/call-recorder.js.map +1 -0
  124. package/dist/server/observability/logger.d.ts +16 -0
  125. package/dist/server/observability/logger.d.ts.map +1 -0
  126. package/dist/server/observability/logger.js +25 -0
  127. package/dist/server/observability/logger.js.map +1 -0
  128. package/dist/server/security/api-keys.d.ts +15 -0
  129. package/dist/server/security/api-keys.d.ts.map +1 -0
  130. package/dist/server/security/api-keys.js +35 -0
  131. package/dist/server/security/api-keys.js.map +1 -0
  132. package/dist/server/security/auth-service.d.ts +26 -0
  133. package/dist/server/security/auth-service.d.ts.map +1 -0
  134. package/dist/server/security/auth-service.js +76 -0
  135. package/dist/server/security/auth-service.js.map +1 -0
  136. package/dist/server/security/control-session.d.ts +9 -0
  137. package/dist/server/security/control-session.d.ts.map +1 -0
  138. package/dist/server/security/control-session.js +51 -0
  139. package/dist/server/security/control-session.js.map +1 -0
  140. package/dist/server/security/credential-materializer.d.ts +20 -0
  141. package/dist/server/security/credential-materializer.d.ts.map +1 -0
  142. package/dist/server/security/credential-materializer.js +82 -0
  143. package/dist/server/security/credential-materializer.js.map +1 -0
  144. package/dist/server/security/cursor-codec.d.ts +13 -0
  145. package/dist/server/security/cursor-codec.d.ts.map +1 -0
  146. package/dist/server/security/cursor-codec.js +43 -0
  147. package/dist/server/security/cursor-codec.js.map +1 -0
  148. package/dist/server/security/oauth-routes.d.ts +21 -0
  149. package/dist/server/security/oauth-routes.d.ts.map +1 -0
  150. package/dist/server/security/oauth-routes.js +100 -0
  151. package/dist/server/security/oauth-routes.js.map +1 -0
  152. package/dist/server/security/oauth-server.d.ts +16 -0
  153. package/dist/server/security/oauth-server.d.ts.map +1 -0
  154. package/dist/server/security/oauth-server.js +544 -0
  155. package/dist/server/security/oauth-server.js.map +1 -0
  156. package/dist/server/security/secret-box.d.ts +7 -0
  157. package/dist/server/security/secret-box.d.ts.map +1 -0
  158. package/dist/server/security/secret-box.js +27 -0
  159. package/dist/server/security/secret-box.js.map +1 -0
  160. package/dist/server/security/secure-action.d.ts +21 -0
  161. package/dist/server/security/secure-action.d.ts.map +1 -0
  162. package/dist/server/security/secure-action.js +69 -0
  163. package/dist/server/security/secure-action.js.map +1 -0
  164. package/dist/server/storage/sqlite-store.d.ts +70 -0
  165. package/dist/server/storage/sqlite-store.d.ts.map +1 -0
  166. package/dist/server/storage/sqlite-store.js +1522 -0
  167. package/dist/server/storage/sqlite-store.js.map +1 -0
  168. package/dist/server/storage/store.d.ts +82 -0
  169. package/dist/server/storage/store.d.ts.map +1 -0
  170. package/dist/server/storage/store.js +2 -0
  171. package/dist/server/storage/store.js.map +1 -0
  172. package/dist/server/upstream/adapter.d.ts +52 -0
  173. package/dist/server/upstream/adapter.d.ts.map +1 -0
  174. package/dist/server/upstream/adapter.js +807 -0
  175. package/dist/server/upstream/adapter.js.map +1 -0
  176. package/dist/server/upstream/credential-resolver.d.ts +14 -0
  177. package/dist/server/upstream/credential-resolver.d.ts.map +1 -0
  178. package/dist/server/upstream/credential-resolver.js +56 -0
  179. package/dist/server/upstream/credential-resolver.js.map +1 -0
  180. package/dist/server/upstream/extension-transport.d.ts +17 -0
  181. package/dist/server/upstream/extension-transport.d.ts.map +1 -0
  182. package/dist/server/upstream/extension-transport.js +207 -0
  183. package/dist/server/upstream/extension-transport.js.map +1 -0
  184. package/dist/server/upstream/manager.d.ts +23 -0
  185. package/dist/server/upstream/manager.d.ts.map +1 -0
  186. package/dist/server/upstream/manager.js +324 -0
  187. package/dist/server/upstream/manager.js.map +1 -0
  188. package/dist/server/upstream/oauth-provider.d.ts +38 -0
  189. package/dist/server/upstream/oauth-provider.d.ts.map +1 -0
  190. package/dist/server/upstream/oauth-provider.js +225 -0
  191. package/dist/server/upstream/oauth-provider.js.map +1 -0
  192. package/dist/server/upstream/oauth-refresh.d.ts +65 -0
  193. package/dist/server/upstream/oauth-refresh.d.ts.map +1 -0
  194. package/dist/server/upstream/oauth-refresh.js +240 -0
  195. package/dist/server/upstream/oauth-refresh.js.map +1 -0
  196. package/dist/server/upstream/oauth-routes.d.ts +17 -0
  197. package/dist/server/upstream/oauth-routes.d.ts.map +1 -0
  198. package/dist/server/upstream/oauth-routes.js +87 -0
  199. package/dist/server/upstream/oauth-routes.js.map +1 -0
  200. package/dist/server/upstream/oauth-service.d.ts +143 -0
  201. package/dist/server/upstream/oauth-service.d.ts.map +1 -0
  202. package/dist/server/upstream/oauth-service.js +217 -0
  203. package/dist/server/upstream/oauth-service.js.map +1 -0
  204. package/dist/server/upstream/stable-json.d.ts +3 -0
  205. package/dist/server/upstream/stable-json.d.ts.map +1 -0
  206. package/dist/server/upstream/stable-json.js +17 -0
  207. package/dist/server/upstream/stable-json.js.map +1 -0
  208. package/package.json +69 -0
  209. package/skills/toolhome/SKILL.md +238 -0
  210. package/skills/toolhome/references/cli-reference.md +242 -0
  211. package/skills/toolhome/references/deployment.md +113 -0
  212. package/skills/toolhome/references/market-guide.md +128 -0
  213. package/skills/toolhome/references/oauth-guide.md +96 -0
  214. package/skills/toolhome/references/troubleshooting.md +133 -0
@@ -0,0 +1,784 @@
1
+ export function entryPlane(entry) {
2
+ return entry.plane ?? 'mcp';
3
+ }
4
+ export const marketCatalog = [
5
+ {
6
+ id: 'github',
7
+ name: 'GitHub',
8
+ description: 'Repos, issues, pull requests, code search, and Actions workflows',
9
+ category: 'devtools',
10
+ kind: 'remote',
11
+ url: 'https://api.githubcopilot.com/mcp/',
12
+ credential: { type: 'bearer', tokenKey: 'GITHUB_PERSONAL_ACCESS_TOKEN' },
13
+ requires: [
14
+ {
15
+ name: 'GITHUB_PERSONAL_ACCESS_TOKEN',
16
+ description: 'GitHub PAT (github.com/settings/personal-access-tokens)',
17
+ secret: true,
18
+ required: true,
19
+ },
20
+ ],
21
+ docs: 'https://github.com/github/github-mcp-server',
22
+ },
23
+ {
24
+ id: 'linear',
25
+ name: 'Linear',
26
+ description: 'Issues, projects, cycles, and team tracking',
27
+ category: 'productivity',
28
+ kind: 'remote',
29
+ url: 'https://mcp.linear.app/mcp',
30
+ credential: { type: 'oauth' },
31
+ requires: [],
32
+ docs: 'https://linear.app/docs/mcp',
33
+ },
34
+ {
35
+ id: 'slack',
36
+ name: 'Slack',
37
+ description: 'Channels, messages, users, and workspace search',
38
+ category: 'comms',
39
+ kind: 'remote',
40
+ url: 'https://mcp.slack.com/mcp',
41
+ credential: { type: 'oauth' },
42
+ requires: [],
43
+ docs: 'https://api.slack.com/mcp',
44
+ },
45
+ {
46
+ id: 'stripe',
47
+ name: 'Stripe',
48
+ description: 'Payments, customers, invoices, and subscriptions',
49
+ category: 'finance',
50
+ kind: 'remote',
51
+ url: 'https://mcp.stripe.com',
52
+ credential: { type: 'oauth' },
53
+ requires: [],
54
+ docs: 'https://stripe.com/docs/mcp',
55
+ },
56
+ {
57
+ id: 'figma',
58
+ name: 'Figma',
59
+ description: 'Design files, components, comments, and FigJam',
60
+ category: 'design',
61
+ kind: 'remote',
62
+ url: 'https://mcp.figma.com/mcp',
63
+ credential: { type: 'oauth' },
64
+ requires: [],
65
+ docs: 'https://www.figma.com/mcp',
66
+ },
67
+ {
68
+ id: 'sentry',
69
+ name: 'Sentry',
70
+ description: 'Error tracking, issues, releases, and performance',
71
+ category: 'devtools',
72
+ kind: 'remote',
73
+ url: 'https://mcp.sentry.dev/mcp',
74
+ credential: { type: 'oauth' },
75
+ requires: [],
76
+ docs: 'https://docs.sentry.io/integrations/mcp/',
77
+ },
78
+ {
79
+ id: 'supabase',
80
+ name: 'Supabase',
81
+ description: 'Databases, auth, storage, edge functions, and SQL',
82
+ category: 'data',
83
+ kind: 'remote',
84
+ url: 'https://mcp.supabase.com/mcp',
85
+ credential: { type: 'oauth' },
86
+ requires: [],
87
+ docs: 'https://supabase.com/docs/guides/getting-started/mcp',
88
+ },
89
+ {
90
+ id: 'notion',
91
+ name: 'Notion',
92
+ description: 'Pages, databases, comments, and workspace search',
93
+ category: 'productivity',
94
+ kind: 'remote',
95
+ url: 'https://mcp.notion.com/mcp',
96
+ credential: { type: 'oauth' },
97
+ requires: [],
98
+ docs: 'https://developers.notion.com/reference/mcp',
99
+ },
100
+ {
101
+ id: 'cloudflare',
102
+ name: 'Cloudflare',
103
+ description: 'Workers, KV, R2, D1, and DNS management',
104
+ category: 'infra',
105
+ kind: 'remote',
106
+ url: 'https://mcp.cloudflare.com/mcp',
107
+ credential: { type: 'oauth' },
108
+ requires: [],
109
+ docs: 'https://developers.cloudflare.com/agents/mcp/',
110
+ },
111
+ {
112
+ id: 'context7',
113
+ name: 'Context7',
114
+ description: 'Up-to-date, version-specific library documentation',
115
+ category: 'devtools',
116
+ kind: 'remote',
117
+ url: 'https://mcp.context7.com/mcp',
118
+ credential: { type: 'bearer', tokenKey: 'CONTEXT7_API_KEY' },
119
+ requires: [
120
+ { name: 'CONTEXT7_API_KEY', description: 'Context7 API key (optional)', secret: true },
121
+ ],
122
+ docs: 'https://github.com/upstash/context7-mcp',
123
+ },
124
+ {
125
+ id: 'exa',
126
+ name: 'Exa',
127
+ description: 'AI-powered semantic web search for agents',
128
+ category: 'search',
129
+ kind: 'remote',
130
+ url: 'https://mcp.exa.ai/mcp',
131
+ credential: { type: 'bearer', tokenKey: 'EXA_API_KEY' },
132
+ requires: [{ name: 'EXA_API_KEY', description: 'Exa API key', secret: true, required: true }],
133
+ docs: 'https://github.com/exa-labs/exa-mcp-server',
134
+ },
135
+ {
136
+ id: 'tavily',
137
+ name: 'Tavily',
138
+ description: 'Real-time web search and research retrieval',
139
+ category: 'search',
140
+ kind: 'remote',
141
+ url: 'https://mcp.tavily.com/mcp',
142
+ credential: { type: 'bearer', tokenKey: 'TAVILY_API_KEY' },
143
+ requires: [
144
+ { name: 'TAVILY_API_KEY', description: 'Tavily API key', secret: true, required: true },
145
+ ],
146
+ docs: 'https://docs.tavily.com/documentation/mcp',
147
+ },
148
+ {
149
+ id: 'deepwiki',
150
+ name: 'DeepWiki',
151
+ description: 'AI-powered codebase context and answers (no auth)',
152
+ category: 'devtools',
153
+ kind: 'remote',
154
+ url: 'https://mcp.deepwiki.com/mcp',
155
+ credential: { type: 'oauth' },
156
+ requires: [],
157
+ docs: 'https://docs.devin.ai/work-with-devin/deepwiki-mcp',
158
+ },
159
+ {
160
+ id: 'firecrawl',
161
+ name: 'Firecrawl',
162
+ description: 'Web scraping, crawling, and site mapping',
163
+ category: 'search',
164
+ kind: 'remote',
165
+ url: 'https://mcp.firecrawl.dev/v2/mcp',
166
+ credential: { type: 'bearer', tokenKey: 'FIRECRAWL_API_KEY' },
167
+ requires: [
168
+ {
169
+ name: 'FIRECRAWL_API_KEY',
170
+ description: 'Firecrawl API key',
171
+ secret: true,
172
+ required: true,
173
+ },
174
+ ],
175
+ docs: 'https://docs.firecrawl.dev/mcp',
176
+ },
177
+ {
178
+ id: 'openrouter',
179
+ name: 'OpenRouter',
180
+ description: 'Unified access to hundreds of LLM models',
181
+ category: 'ai',
182
+ kind: 'remote',
183
+ url: 'https://mcp.openrouter.ai/mcp',
184
+ credential: { type: 'bearer', tokenKey: 'OPENROUTER_API_KEY' },
185
+ requires: [
186
+ {
187
+ name: 'OPENROUTER_API_KEY',
188
+ description: 'OpenRouter API key',
189
+ secret: true,
190
+ required: true,
191
+ },
192
+ ],
193
+ docs: 'https://openrouter.ai/docs',
194
+ },
195
+ {
196
+ id: 'apifox',
197
+ name: 'Apifox',
198
+ description: 'API design, debugging, and documentation workspace',
199
+ category: 'devtools',
200
+ kind: 'remote',
201
+ url: 'https://api.apifox.com/mcp',
202
+ credential: {
203
+ type: 'headers',
204
+ headers: [
205
+ { name: 'Authorization', valueKey: 'APIFOX_TOKEN' },
206
+ { name: 'X-Apifox-Api-Version', value: '2025-09-01' },
207
+ ],
208
+ },
209
+ requires: [
210
+ { name: 'APIFOX_TOKEN', description: 'Apifox access token', secret: true, required: true },
211
+ ],
212
+ docs: 'https://apifox.com/help/ai/agent/',
213
+ },
214
+ {
215
+ id: 'resend',
216
+ name: 'Resend',
217
+ description: 'Send transactional email and manage audiences',
218
+ category: 'email',
219
+ kind: 'home-stdio',
220
+ package: 'resend-mcp',
221
+ version: '2.12.0',
222
+ bin: 'resend-mcp',
223
+ credential: { type: 'env' },
224
+ requires: [
225
+ { name: 'RESEND_API_KEY', description: 'Resend API key', secret: true, required: true },
226
+ ],
227
+ docs: 'https://resend.com/docs',
228
+ },
229
+ {
230
+ id: 'tailscale',
231
+ name: 'Tailscale',
232
+ description: 'Manage your tailnet, nodes, ACLs, and devices',
233
+ category: 'infra',
234
+ kind: 'home-stdio',
235
+ package: '@hexsleeves/tailscale-mcp-server',
236
+ version: '1.3.4',
237
+ bin: 'tailscale-mcp-server',
238
+ credential: { type: 'env' },
239
+ requires: [
240
+ { name: 'TAILSCALE_API_KEY', description: 'Tailscale API key', secret: true, required: true },
241
+ {
242
+ name: 'TAILSCALE_TAILNET',
243
+ description: 'Tailnet name (e.g. example.ts.net)',
244
+ required: true,
245
+ },
246
+ ],
247
+ docs: 'https://github.com/hexsleeves/tailscale-mcp-server',
248
+ },
249
+ {
250
+ id: 'playwright',
251
+ name: 'Playwright',
252
+ description: 'Browser automation, page inspection, and screenshots',
253
+ category: 'browser',
254
+ kind: 'home-stdio',
255
+ package: '@playwright/mcp',
256
+ version: '0.0.79',
257
+ bin: 'playwright-mcp',
258
+ credential: { type: 'env' },
259
+ requires: [],
260
+ docs: 'https://github.com/microsoft/playwright-mcp',
261
+ },
262
+ {
263
+ id: 'postgres',
264
+ name: 'PostgreSQL',
265
+ description: 'Read-only schema inspection and query execution',
266
+ category: 'data',
267
+ kind: 'home-stdio',
268
+ package: '@modelcontextprotocol/server-postgres',
269
+ version: '0.6.2',
270
+ bin: 'mcp-server-postgres',
271
+ credential: { type: 'env' },
272
+ requires: [
273
+ {
274
+ name: 'POSTGRES_CONNECTION_STRING',
275
+ description: 'Read-only connection string (postgresql://...)',
276
+ secret: true,
277
+ required: true,
278
+ },
279
+ ],
280
+ argsTemplate: ['${POSTGRES_CONNECTION_STRING}'],
281
+ docs: 'https://github.com/modelcontextprotocol/servers/tree/main/src/postgres',
282
+ },
283
+ {
284
+ id: 'sqlite',
285
+ name: 'SQLite',
286
+ description: 'Query local SQLite databases',
287
+ category: 'data',
288
+ kind: 'uvx',
289
+ package: 'mcp-server-sqlite',
290
+ version: '2025.4.25',
291
+ bin: 'mcp-server-sqlite',
292
+ credential: { type: 'env' },
293
+ requires: [
294
+ { name: 'DB_PATH', description: 'Path to the SQLite database file', required: true },
295
+ ],
296
+ argsTemplate: ['--db', '${DB_PATH}'],
297
+ docs: 'https://github.com/modelcontextprotocol/servers/tree/main/src/sqlite',
298
+ },
299
+ {
300
+ id: 'memory',
301
+ name: 'Memory',
302
+ description: 'Persistent knowledge graph across conversations',
303
+ category: 'ai',
304
+ kind: 'home-stdio',
305
+ package: '@modelcontextprotocol/server-memory',
306
+ version: '2026.7.4',
307
+ bin: 'mcp-server-memory',
308
+ credential: { type: 'env' },
309
+ requires: [],
310
+ docs: 'https://github.com/modelcontextprotocol/servers/tree/main/src/memory',
311
+ },
312
+ {
313
+ id: 'sequential-thinking',
314
+ name: 'Sequential Thinking',
315
+ description: 'Structured multi-step reasoning and planning',
316
+ category: 'ai',
317
+ kind: 'home-stdio',
318
+ package: '@modelcontextprotocol/server-sequential-thinking',
319
+ version: '2026.7.4',
320
+ bin: 'mcp-server-sequential-thinking',
321
+ credential: { type: 'env' },
322
+ requires: [],
323
+ docs: 'https://github.com/modelcontextprotocol/servers/tree/main/src/sequentialthinking',
324
+ },
325
+ {
326
+ id: 'fetch',
327
+ name: 'Fetch',
328
+ description: 'Fetch web pages and convert to markdown',
329
+ category: 'search',
330
+ kind: 'uvx',
331
+ package: 'mcp-server-fetch',
332
+ version: '2026.7.10',
333
+ bin: 'mcp-server-fetch',
334
+ // mcp-server-fetch 2026.7.10 imports McpError which was renamed in mcp>=2.0
335
+ uvWith: ['mcp<2'],
336
+ credential: { type: 'env' },
337
+ requires: [],
338
+ docs: 'https://github.com/modelcontextprotocol/servers/tree/main/src/fetch',
339
+ },
340
+ {
341
+ id: 'markitdown',
342
+ name: 'MarkItDown',
343
+ description: 'Convert files and URLs (PDF, Office, images, audio) to Markdown',
344
+ category: 'data',
345
+ kind: 'docker',
346
+ image: 'markitdown-mcp:latest',
347
+ // onnxruntime (a hard dep) publishes no musl wheels, so the uvx runtime in
348
+ // the Alpine gateway image cannot install it — run the official glibc image
349
+ // as a sibling container via the mounted docker socket instead.
350
+ dockerfile: `FROM python:3.13-slim
351
+ ENV DEBIAN_FRONTEND=noninteractive
352
+ ENV EXIFTOOL_PATH=/usr/bin/exiftool
353
+ ENV FFMPEG_PATH=/usr/bin/ffmpeg
354
+ ENV MARKITDOWN_ENABLE_PLUGINS=True
355
+ RUN sed -i -e 's#http://deb.debian.org/debian#http://mirrors.tuna.tsinghua.edu.cn/debian#g' -e 's#http://security.debian.org/debian-security#http://mirrors.tuna.tsinghua.edu.cn/debian-security#g' /etc/apt/sources.list.d/debian.sources && apt-get update && apt-get install -y --no-install-recommends ffmpeg exiftool && rm -rf /var/lib/apt/lists/*
356
+ RUN pip --no-cache-dir install -i https://pypi.tuna.tsinghua.edu.cn/simple 'markitdown-mcp==0.0.1a4'
357
+ WORKDIR /workdir
358
+ ENTRYPOINT ["markitdown-mcp"]`,
359
+ credential: { type: 'env' },
360
+ requires: [],
361
+ docs: 'https://github.com/microsoft/markitdown/tree/main/packages/markitdown-mcp',
362
+ },
363
+ {
364
+ id: 'mosaic',
365
+ name: 'Mosaic',
366
+ description: 'Query memos, diaries, AI bots, memory and stats from Mosaic',
367
+ category: 'productivity',
368
+ kind: 'home-stdio',
369
+ package: 'mosaic-mcp',
370
+ version: '0.2.0',
371
+ bin: 'mosaic-mcp',
372
+ credential: { type: 'env' },
373
+ requires: [
374
+ { name: 'MOSAIC_SERVER_URL', description: 'Mosaic backend URL', required: true },
375
+ {
376
+ name: 'MOSAIC_USERNAME',
377
+ description: 'Username (paired with MOSAIC_PASSWORD)',
378
+ secret: true,
379
+ required: true,
380
+ },
381
+ { name: 'MOSAIC_PASSWORD', description: 'Password', secret: true, required: true },
382
+ {
383
+ name: 'MOSAIC_TOKEN',
384
+ description: 'JWT access token (alternative to username/password)',
385
+ secret: true,
386
+ },
387
+ ],
388
+ docs: 'https://github.com/crayonlu/Mosaic/tree/main/packages/mcp-server',
389
+ },
390
+ // ── CLI plane: hosted platform CLIs, parallel to MCP entries ───────────
391
+ {
392
+ id: 'azure-cli',
393
+ name: 'Azure CLI (az)',
394
+ description: 'Manage Azure subscriptions, resources, and deployments through Azure APIs',
395
+ category: 'infra',
396
+ plane: 'cli',
397
+ platform: 'azure',
398
+ kind: 'cli-image',
399
+ version: '2.89.0',
400
+ installer: {
401
+ type: 'docker',
402
+ image: 'mcr.microsoft.com/azure-cli:2.89.0',
403
+ entrypoint: 'az',
404
+ },
405
+ image: 'mcr.microsoft.com/azure-cli:2.89.0',
406
+ entrypoint: 'az',
407
+ credential: { type: 'env' },
408
+ credentialBindings: {
409
+ AZURE_CLIENT_ID: 'env:AZURE_CLIENT_ID',
410
+ AZURE_CLIENT_SECRET: 'env:AZURE_CLIENT_SECRET',
411
+ AZURE_TENANT_ID: 'env:AZURE_TENANT_ID',
412
+ },
413
+ cliRuntime: {
414
+ authStrategy: 'azure-service-principal',
415
+ containerVolumes: [{ source: 'toolhome-azure-cli-state', target: '/root/.azure' }],
416
+ },
417
+ requires: [
418
+ {
419
+ name: 'AZURE_CLIENT_ID',
420
+ description: 'Microsoft Entra application client ID',
421
+ secret: false,
422
+ required: true,
423
+ },
424
+ {
425
+ name: 'AZURE_CLIENT_SECRET',
426
+ description: 'Microsoft Entra service principal secret',
427
+ secret: true,
428
+ required: true,
429
+ },
430
+ {
431
+ name: 'AZURE_TENANT_ID',
432
+ description: 'Microsoft Entra tenant ID',
433
+ secret: false,
434
+ required: true,
435
+ },
436
+ ],
437
+ allowList: {
438
+ allow: [['account', 'show'], ['group', 'list'], ['resource', 'list'], ['version']],
439
+ deny: [['login'], ['account', 'clear']],
440
+ },
441
+ probe: { command: 'az', args: ['version', '--output', 'tsv', '--query', '"azure-cli"'] },
442
+ docs: 'https://learn.microsoft.com/cli/azure/',
443
+ },
444
+ {
445
+ id: 'gh-cli',
446
+ name: 'GitHub CLI (gh)',
447
+ description: 'Operate GitHub repositories, issues, pull requests, and Actions centrally',
448
+ category: 'devtools',
449
+ plane: 'cli',
450
+ platform: 'github',
451
+ kind: 'cli-image',
452
+ version: '2.97.0',
453
+ installer: {
454
+ type: 'docker',
455
+ // gh ships no official image; CI builds toolhome/gh-cli from the release
456
+ // tarball and preloads it onto the server (ghcr/docker Hub are blocked
457
+ // from the deployment network).
458
+ image: 'toolhome/gh-cli:2.97.0',
459
+ entrypoint: 'gh',
460
+ // Fresh self-hosted instances can build the same pinned CLI without
461
+ // depending on the deployment-specific image preload or GitHub relay.
462
+ dockerfile: `FROM alpine:3.20
463
+ RUN apk add --no-cache ca-certificates curl git \\
464
+ && case "$(uname -m)" in x86_64) arch=amd64 ;; aarch64) arch=arm64 ;; *) exit 1 ;; esac \\
465
+ && curl -fsSL "https://github.com/cli/cli/releases/download/v2.97.0/gh_2.97.0_linux_\${arch}.tar.gz" -o /tmp/gh.tgz \\
466
+ && tar -xzf /tmp/gh.tgz -C /tmp \\
467
+ && install -m 0755 "/tmp/gh_2.97.0_linux_\${arch}/bin/gh" /usr/local/bin/gh \\
468
+ && rm -rf /tmp/gh.tgz "/tmp/gh_2.97.0_linux_\${arch}"
469
+ ENTRYPOINT ["gh"]
470
+ `,
471
+ },
472
+ image: 'toolhome/gh-cli:2.97.0',
473
+ entrypoint: 'gh',
474
+ // Installs without credentials; authenticate afterwards via the device-flow
475
+ // login persisted in the toolhome-gh-cli-state volume.
476
+ credential: { type: 'env' },
477
+ credentialBindings: {},
478
+ requires: [],
479
+ cliRuntime: {
480
+ containerVolumes: [{ source: 'toolhome-gh-cli-state', target: '/root/.config/gh' }],
481
+ },
482
+ allowList: {
483
+ allow: [
484
+ ['--version'],
485
+ ['auth', 'login'],
486
+ ['auth', 'login', '*'],
487
+ ['auth', 'status'],
488
+ ['auth', 'status', '*'],
489
+ ['repo', 'view', '*'],
490
+ ['issue', 'list'],
491
+ ['pr', 'list'],
492
+ ],
493
+ deny: [['auth', 'token']],
494
+ },
495
+ execTimeoutMs: 600_000,
496
+ probe: { command: 'gh', args: ['--version'] },
497
+ docs: 'https://cli.github.com/',
498
+ },
499
+ {
500
+ id: 'tailscale-cli',
501
+ name: 'Tailscale CLI',
502
+ description: 'Inspect and manage a Tailscale network from the hosted control plane',
503
+ category: 'infra',
504
+ plane: 'cli',
505
+ platform: 'tailscale',
506
+ kind: 'cli-image',
507
+ version: '1.102.3',
508
+ installer: {
509
+ type: 'docker',
510
+ image: 'tailscale/tailscale:v1.102.3',
511
+ entrypoint: 'tailscale',
512
+ },
513
+ image: 'tailscale/tailscale:v1.102.3',
514
+ entrypoint: 'tailscale',
515
+ credential: { type: 'env' },
516
+ credentialBindings: { TS_AUTHKEY: 'env:TS_AUTHKEY' },
517
+ cliRuntime: {
518
+ authStrategy: 'tailscale-auth-key',
519
+ containerVolumes: [{ source: 'toolhome-tailscale-state', target: '/var/lib/tailscale' }],
520
+ },
521
+ requires: [
522
+ {
523
+ name: 'TS_AUTHKEY',
524
+ description: 'Tailscale auth key for the hosted node',
525
+ secret: true,
526
+ required: true,
527
+ },
528
+ ],
529
+ allowList: {
530
+ allow: [['version'], ['status'], ['netcheck']],
531
+ deny: [['up'], ['logout'], ['down']],
532
+ },
533
+ probe: { command: 'tailscale', args: ['version'] },
534
+ docs: 'https://tailscale.com/kb/1080/cli/',
535
+ },
536
+ {
537
+ id: 'lark-cli',
538
+ name: 'Lark CLI (lark-cli)',
539
+ description: 'Drive Lark/Feishu mail, calendar, docs, base, IM, and more through the official CLI (device-flow login on first use)',
540
+ category: 'productivity',
541
+ plane: 'cli',
542
+ platform: 'lark',
543
+ kind: 'cli-binary',
544
+ version: '1.0.92',
545
+ // The npm package is a launcher: the platform binary downloads on first
546
+ // execution and caches inside the persistent market volume.
547
+ installer: { type: 'npm', package: '@larksuite/cli', bin: 'lark-cli', version: '1.0.92' },
548
+ bin: 'lark-cli',
549
+ credential: { type: 'env' },
550
+ credentialBindings: {},
551
+ requires: [],
552
+ allowList: {
553
+ allow: [
554
+ ['--version'],
555
+ ['auth', 'login'],
556
+ ['auth', 'login', '*'],
557
+ ['auth', 'status'],
558
+ ['auth', 'list'],
559
+ ['auth', 'scopes'],
560
+ ['auth', 'check', '*'],
561
+ ['auth', 'qrcode', '*'],
562
+ ['auth', 'logout'],
563
+ ['config', 'init'],
564
+ ['config', 'init', '*'],
565
+ ['schema', '*'],
566
+ ['api', '*', '*'],
567
+ ['application', '*'],
568
+ ['approval', '*'],
569
+ ['apps', '*'],
570
+ ['attendance', '*'],
571
+ ['base', '*'],
572
+ ['calendar', '*'],
573
+ ['contact', '*'],
574
+ ['docs', '*'],
575
+ ['drive', '*'],
576
+ ['event', '*'],
577
+ ['im', '*'],
578
+ ['mail', '*'],
579
+ ['markdown', '*'],
580
+ ['mindnotes', '*'],
581
+ ['minutes', '*'],
582
+ ['note', '*'],
583
+ ['okr', '*'],
584
+ ['sheets', '*'],
585
+ ['slides', '*'],
586
+ ['task', '*'],
587
+ ['vc', '*'],
588
+ ['wiki', '*'],
589
+ ],
590
+ deny: [],
591
+ },
592
+ // config init blocks until the browser setup completes; give it room.
593
+ execTimeoutMs: 600_000,
594
+ docs: 'https://www.npmjs.com/package/@larksuite/cli',
595
+ },
596
+ {
597
+ id: 'firecrawl-cli',
598
+ name: 'Firecrawl CLI (firecrawl)',
599
+ description: 'Scrape, crawl, map, and search the web through the Firecrawl API',
600
+ category: 'devtools',
601
+ plane: 'cli',
602
+ platform: 'firecrawl',
603
+ kind: 'cli-binary',
604
+ version: '1.23.3',
605
+ installer: { type: 'npm', package: 'firecrawl-cli', bin: 'firecrawl', version: '1.23.3' },
606
+ bin: 'firecrawl',
607
+ credential: { type: 'bearer', tokenKey: 'FIRECRAWL_API_KEY' },
608
+ credentialBindings: { FIRECRAWL_API_KEY: 'token' },
609
+ requires: [
610
+ {
611
+ name: 'FIRECRAWL_API_KEY',
612
+ description: 'Firecrawl API key (firecrawl.dev)',
613
+ secret: true,
614
+ required: true,
615
+ },
616
+ ],
617
+ allowList: {
618
+ allow: [
619
+ ['--version'],
620
+ ['--status'],
621
+ ['scrape', '*'],
622
+ ['crawl', '*'],
623
+ ['map', '*'],
624
+ ['search', '*'],
625
+ ['parse', '*'],
626
+ ],
627
+ deny: [['config']],
628
+ },
629
+ docs: 'https://www.npmjs.com/package/firecrawl-cli',
630
+ },
631
+ {
632
+ id: 'wrangler-cli',
633
+ name: 'Cloudflare Wrangler (wrangler)',
634
+ description: 'Manage Cloudflare Workers, KV, R2, D1, and Pages from the hosted control plane',
635
+ category: 'infra',
636
+ plane: 'cli',
637
+ platform: 'cloudflare',
638
+ kind: 'cli-binary',
639
+ version: '4.127.0',
640
+ installer: { type: 'npm', package: 'wrangler', bin: 'wrangler', version: '4.127.0' },
641
+ bin: 'wrangler',
642
+ credential: { type: 'bearer', tokenKey: 'CLOUDFLARE_API_TOKEN' },
643
+ credentialBindings: { CLOUDFLARE_API_TOKEN: 'token' },
644
+ requires: [
645
+ {
646
+ name: 'CLOUDFLARE_API_TOKEN',
647
+ description: 'Cloudflare API token with Workers/KV/R2 permissions',
648
+ secret: true,
649
+ required: true,
650
+ },
651
+ ],
652
+ allowList: {
653
+ allow: [
654
+ ['--version'],
655
+ ['whoami'],
656
+ ['deployments', 'list'],
657
+ ['kv', 'namespace', 'list'],
658
+ ['kv', 'key', 'list', '*'],
659
+ ['r2', 'bucket', 'list'],
660
+ ['pages', 'project', 'list'],
661
+ ['d1', 'list'],
662
+ ['queues', 'list'],
663
+ ['vectorize', 'list'],
664
+ ],
665
+ deny: [['login'], ['logout']],
666
+ },
667
+ docs: 'https://developers.cloudflare.com/workers/wrangler/',
668
+ },
669
+ {
670
+ id: 'vercel-cli',
671
+ name: 'Vercel CLI (vercel)',
672
+ description: 'Inspect Vercel projects, deployments, logs, and environment variables',
673
+ category: 'devtools',
674
+ plane: 'cli',
675
+ platform: 'vercel',
676
+ kind: 'cli-binary',
677
+ version: '59.9.1',
678
+ installer: { type: 'npm', package: 'vercel', bin: 'vercel', version: '59.9.1' },
679
+ bin: 'vercel',
680
+ credential: { type: 'bearer', tokenKey: 'VERCEL_TOKEN' },
681
+ credentialBindings: { VERCEL_TOKEN: 'token' },
682
+ requires: [
683
+ {
684
+ name: 'VERCEL_TOKEN',
685
+ description: 'Vercel access token (vercel.com/account/tokens)',
686
+ secret: true,
687
+ required: true,
688
+ },
689
+ ],
690
+ allowList: {
691
+ allow: [
692
+ ['--version'],
693
+ ['whoami'],
694
+ ['projects', 'ls'],
695
+ ['projects', 'ls', '*'],
696
+ ['deployments', 'ls'],
697
+ ['deployments', 'ls', '*'],
698
+ ['env', 'ls'],
699
+ ['env', 'ls', '*'],
700
+ ['logs', '*'],
701
+ ['teams', 'ls'],
702
+ ['domains', 'ls'],
703
+ ],
704
+ deny: [['login'], ['logout']],
705
+ },
706
+ docs: 'https://vercel.com/docs/cli',
707
+ },
708
+ {
709
+ id: 'aliyun-cli',
710
+ name: 'Alibaba Cloud CLI (aliyun)',
711
+ description: 'Manage Alibaba Cloud ECS, OSS, DNS, and other OpenAPI products',
712
+ category: 'infra',
713
+ plane: 'cli',
714
+ platform: 'aliyun',
715
+ kind: 'cli-binary',
716
+ version: '3.4.11',
717
+ // The release asset is pinned to linux-amd64, matching the deployed gateway.
718
+ installer: {
719
+ type: 'github-release',
720
+ repository: 'aliyun/aliyun-cli',
721
+ tag: 'v3.4.11',
722
+ asset: 'aliyun-cli-linux-3.4.11-amd64.tgz',
723
+ url: 'https://github.com/aliyun/aliyun-cli/releases/download/v3.4.11/aliyun-cli-linux-3.4.11-amd64.tgz',
724
+ bin: 'aliyun',
725
+ archive: 'tar.gz',
726
+ },
727
+ bin: 'aliyun',
728
+ credential: { type: 'env' },
729
+ credentialBindings: {
730
+ ALIBABA_CLOUD_ACCESS_KEY_ID: 'env:ALIBABA_CLOUD_ACCESS_KEY_ID',
731
+ ALIBABA_CLOUD_ACCESS_KEY_SECRET: 'env:ALIBABA_CLOUD_ACCESS_KEY_SECRET',
732
+ ALIBABA_CLOUD_REGION_ID: 'env:ALIBABA_CLOUD_REGION_ID',
733
+ },
734
+ requires: [
735
+ {
736
+ name: 'ALIBABA_CLOUD_ACCESS_KEY_ID',
737
+ description: 'Alibaba Cloud AccessKey ID',
738
+ secret: false,
739
+ required: true,
740
+ },
741
+ {
742
+ name: 'ALIBABA_CLOUD_ACCESS_KEY_SECRET',
743
+ description: 'Alibaba Cloud AccessKey secret',
744
+ secret: true,
745
+ required: true,
746
+ },
747
+ {
748
+ name: 'ALIBABA_CLOUD_REGION_ID',
749
+ description: 'Default region ID (e.g. cn-hangzhou)',
750
+ secret: false,
751
+ required: true,
752
+ },
753
+ ],
754
+ allowList: {
755
+ allow: [
756
+ ['version'],
757
+ ['configure', 'list'],
758
+ ['ecs', 'DescribeInstances', '*'],
759
+ ['ecs', 'DescribeRegions', '*'],
760
+ ['oss', 'ls', '*'],
761
+ ],
762
+ deny: [
763
+ ['configure', 'set'],
764
+ ['configure', 'delete'],
765
+ ],
766
+ },
767
+ probe: { command: 'aliyun', args: ['version'] },
768
+ docs: 'https://help.aliyun.com/en/cli/',
769
+ },
770
+ {
771
+ id: 'host-shell',
772
+ name: 'Host Shell (sh)',
773
+ description: 'Run trusted commands with the host shell binary (explicit opt-in)',
774
+ category: 'infra',
775
+ plane: 'cli',
776
+ kind: 'cli-binary',
777
+ bin: '/bin/sh',
778
+ allowList: { allow: [['-c', '*']], deny: [] },
779
+ credential: { type: 'env' },
780
+ requires: [],
781
+ docs: 'https://docs.toolhome.dev/cli-plane',
782
+ },
783
+ ];
784
+ //# sourceMappingURL=catalog.js.map