@dobbyai/mcp-external 1.0.4 → 1.2.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.
- package/README.md +44 -14
- package/dist/__tests__/agent-mail-tools.test.d.ts +8 -0
- package/dist/__tests__/agent-mail-tools.test.d.ts.map +1 -0
- package/dist/__tests__/agent-mail-tools.test.js +255 -0
- package/dist/__tests__/agent-mail-tools.test.js.map +1 -0
- package/dist/__tests__/annotations.test.d.ts +8 -0
- package/dist/__tests__/annotations.test.d.ts.map +1 -0
- package/dist/__tests__/annotations.test.js +108 -0
- package/dist/__tests__/annotations.test.js.map +1 -0
- package/dist/__tests__/auth.test.d.ts +7 -0
- package/dist/__tests__/auth.test.d.ts.map +1 -0
- package/dist/__tests__/auth.test.js +161 -0
- package/dist/__tests__/auth.test.js.map +1 -0
- package/dist/__tests__/doctor.test.d.ts +16 -0
- package/dist/__tests__/doctor.test.d.ts.map +1 -0
- package/dist/__tests__/doctor.test.js +258 -0
- package/dist/__tests__/doctor.test.js.map +1 -0
- package/dist/__tests__/external-agents-tools.test.d.ts +11 -0
- package/dist/__tests__/external-agents-tools.test.d.ts.map +1 -0
- package/dist/__tests__/external-agents-tools.test.js +619 -0
- package/dist/__tests__/external-agents-tools.test.js.map +1 -0
- package/dist/__tests__/gateway-bearer.test.d.ts +12 -0
- package/dist/__tests__/gateway-bearer.test.d.ts.map +1 -0
- package/dist/__tests__/gateway-bearer.test.js +112 -0
- package/dist/__tests__/gateway-bearer.test.js.map +1 -0
- package/dist/__tests__/gateway-key-resolver.test.d.ts +10 -0
- package/dist/__tests__/gateway-key-resolver.test.d.ts.map +1 -0
- package/dist/__tests__/gateway-key-resolver.test.js +125 -0
- package/dist/__tests__/gateway-key-resolver.test.js.map +1 -0
- package/dist/__tests__/http-concurrency.test.d.ts +20 -0
- package/dist/__tests__/http-concurrency.test.d.ts.map +1 -0
- package/dist/__tests__/http-concurrency.test.js +254 -0
- package/dist/__tests__/http-concurrency.test.js.map +1 -0
- package/dist/__tests__/integration/protocol.test.d.ts +8 -0
- package/dist/__tests__/integration/protocol.test.d.ts.map +1 -0
- package/dist/__tests__/integration/protocol.test.js +110 -0
- package/dist/__tests__/integration/protocol.test.js.map +1 -0
- package/dist/__tests__/mcp-integrations.test.d.ts +8 -0
- package/dist/__tests__/mcp-integrations.test.d.ts.map +1 -0
- package/dist/__tests__/mcp-integrations.test.js +365 -0
- package/dist/__tests__/mcp-integrations.test.js.map +1 -0
- package/dist/__tests__/memory-graph-tools.test.d.ts +8 -0
- package/dist/__tests__/memory-graph-tools.test.d.ts.map +1 -0
- package/dist/__tests__/memory-graph-tools.test.js +254 -0
- package/dist/__tests__/memory-graph-tools.test.js.map +1 -0
- package/dist/__tests__/registry-dispatch.test.d.ts +11 -0
- package/dist/__tests__/registry-dispatch.test.d.ts.map +1 -0
- package/dist/__tests__/registry-dispatch.test.js +30 -0
- package/dist/__tests__/registry-dispatch.test.js.map +1 -0
- package/dist/__tests__/registry-listing-parity.test.d.ts +2 -0
- package/dist/__tests__/registry-listing-parity.test.d.ts.map +1 -0
- package/dist/__tests__/registry-listing-parity.test.js +89 -0
- package/dist/__tests__/registry-listing-parity.test.js.map +1 -0
- package/dist/__tests__/role-cap.test.d.ts +2 -0
- package/dist/__tests__/role-cap.test.d.ts.map +1 -0
- package/dist/__tests__/role-cap.test.js +113 -0
- package/dist/__tests__/role-cap.test.js.map +1 -0
- package/dist/__tests__/schedule-tools.test.d.ts +8 -0
- package/dist/__tests__/schedule-tools.test.d.ts.map +1 -0
- package/dist/__tests__/schedule-tools.test.js +285 -0
- package/dist/__tests__/schedule-tools.test.js.map +1 -0
- package/dist/__tests__/server-gateway-key.test.d.ts +18 -0
- package/dist/__tests__/server-gateway-key.test.d.ts.map +1 -0
- package/dist/__tests__/server-gateway-key.test.js +148 -0
- package/dist/__tests__/server-gateway-key.test.js.map +1 -0
- package/dist/__tests__/server-user-scoped.test.d.ts +34 -0
- package/dist/__tests__/server-user-scoped.test.d.ts.map +1 -0
- package/dist/__tests__/server-user-scoped.test.js +577 -0
- package/dist/__tests__/server-user-scoped.test.js.map +1 -0
- package/dist/__tests__/task-id-pattern.test.d.ts +12 -0
- package/dist/__tests__/task-id-pattern.test.d.ts.map +1 -0
- package/dist/__tests__/task-id-pattern.test.js +43 -0
- package/dist/__tests__/task-id-pattern.test.js.map +1 -0
- package/dist/__tests__/tiers.test.d.ts +7 -0
- package/dist/__tests__/tiers.test.d.ts.map +1 -0
- package/dist/__tests__/tiers.test.js +199 -0
- package/dist/__tests__/tiers.test.js.map +1 -0
- package/dist/__tests__/tools/hosted-agents.test.d.ts +9 -0
- package/dist/__tests__/tools/hosted-agents.test.d.ts.map +1 -0
- package/dist/__tests__/tools/hosted-agents.test.js +301 -0
- package/dist/__tests__/tools/hosted-agents.test.js.map +1 -0
- package/dist/__tests__/tools/llm-providers.test.d.ts +10 -0
- package/dist/__tests__/tools/llm-providers.test.d.ts.map +1 -0
- package/dist/__tests__/tools/llm-providers.test.js +105 -0
- package/dist/__tests__/tools/llm-providers.test.js.map +1 -0
- package/dist/__tests__/tools/services.test.js +139 -98
- package/dist/__tests__/tools/services.test.js.map +1 -1
- package/dist/__tests__/tools.test.d.ts +7 -0
- package/dist/__tests__/tools.test.d.ts.map +1 -0
- package/dist/__tests__/tools.test.js +152 -0
- package/dist/__tests__/tools.test.js.map +1 -0
- package/dist/__tests__/transport.test.d.ts +7 -0
- package/dist/__tests__/transport.test.d.ts.map +1 -0
- package/dist/__tests__/transport.test.js +397 -0
- package/dist/__tests__/transport.test.js.map +1 -0
- package/dist/__tests__/validate-credentials.test.d.ts +9 -0
- package/dist/__tests__/validate-credentials.test.d.ts.map +1 -0
- package/dist/__tests__/validate-credentials.test.js +172 -0
- package/dist/__tests__/validate-credentials.test.js.map +1 -0
- package/dist/__tests__/web-eval-tools.test.d.ts +8 -0
- package/dist/__tests__/web-eval-tools.test.d.ts.map +1 -0
- package/dist/__tests__/web-eval-tools.test.js +241 -0
- package/dist/__tests__/web-eval-tools.test.js.map +1 -0
- package/dist/__tests__/whoami.test.d.ts +11 -0
- package/dist/__tests__/whoami.test.d.ts.map +1 -0
- package/dist/__tests__/whoami.test.js +194 -0
- package/dist/__tests__/whoami.test.js.map +1 -0
- package/dist/__tests__/workflow-tools.test.d.ts +8 -0
- package/dist/__tests__/workflow-tools.test.d.ts.map +1 -0
- package/dist/__tests__/workflow-tools.test.js +261 -0
- package/dist/__tests__/workflow-tools.test.js.map +1 -0
- package/dist/__tests__/workloads.test.d.ts +9 -0
- package/dist/__tests__/workloads.test.d.ts.map +1 -0
- package/dist/__tests__/workloads.test.js +169 -0
- package/dist/__tests__/workloads.test.js.map +1 -0
- package/dist/auth/oauth-provider.d.ts +34 -0
- package/dist/auth/oauth-provider.d.ts.map +1 -0
- package/dist/auth/oauth-provider.js +75 -0
- package/dist/auth/oauth-provider.js.map +1 -0
- package/dist/auth/token-verifier.d.ts +45 -0
- package/dist/auth/token-verifier.d.ts.map +1 -0
- package/dist/auth/token-verifier.js +160 -0
- package/dist/auth/token-verifier.js.map +1 -0
- package/dist/connectors/claude-desktop.d.ts.map +1 -1
- package/dist/connectors/claude-desktop.js +3 -2
- package/dist/connectors/claude-desktop.js.map +1 -1
- package/dist/connectors/cursor.d.ts.map +1 -1
- package/dist/connectors/cursor.js +3 -2
- package/dist/connectors/cursor.js.map +1 -1
- package/dist/connectors/setup.d.ts.map +1 -1
- package/dist/connectors/setup.js +2 -1
- package/dist/connectors/setup.js.map +1 -1
- package/dist/connectors/vscode.d.ts.map +1 -1
- package/dist/connectors/vscode.js +3 -2
- package/dist/connectors/vscode.js.map +1 -1
- package/dist/connectors/windsurf.d.ts.map +1 -1
- package/dist/connectors/windsurf.js +3 -2
- package/dist/connectors/windsurf.js.map +1 -1
- package/dist/doctor.d.ts +34 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +134 -0
- package/dist/doctor.js.map +1 -0
- package/dist/http-server.d.ts +56 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +455 -0
- package/dist/http-server.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +96 -171
- package/dist/index.js.map +1 -1
- package/dist/lib/consts.d.ts +21 -0
- package/dist/lib/consts.d.ts.map +1 -0
- package/dist/lib/consts.js +30 -0
- package/dist/lib/consts.js.map +1 -0
- package/dist/lib/dobby-client.d.ts +60 -3
- package/dist/lib/dobby-client.d.ts.map +1 -1
- package/dist/lib/dobby-client.js +145 -44
- package/dist/lib/dobby-client.js.map +1 -1
- package/dist/lib/gateway-key-resolver.d.ts +38 -0
- package/dist/lib/gateway-key-resolver.d.ts.map +1 -0
- package/dist/lib/gateway-key-resolver.js +59 -0
- package/dist/lib/gateway-key-resolver.js.map +1 -0
- package/dist/lib/log.d.ts +25 -0
- package/dist/lib/log.d.ts.map +1 -0
- package/dist/lib/log.js +36 -0
- package/dist/lib/log.js.map +1 -0
- package/dist/server.d.ts +175 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +1017 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/agent-mail.d.ts +112 -0
- package/dist/tools/agent-mail.d.ts.map +1 -0
- package/dist/tools/agent-mail.js +118 -0
- package/dist/tools/agent-mail.js.map +1 -0
- package/dist/tools/agent-versions.d.ts +93 -0
- package/dist/tools/agent-versions.d.ts.map +1 -0
- package/dist/tools/agent-versions.js +99 -0
- package/dist/tools/agent-versions.js.map +1 -0
- package/dist/tools/approvals.d.ts +24 -34
- package/dist/tools/approvals.d.ts.map +1 -1
- package/dist/tools/approvals.js +24 -81
- package/dist/tools/approvals.js.map +1 -1
- package/dist/tools/claude-code-sync.d.ts +40 -0
- package/dist/tools/claude-code-sync.d.ts.map +1 -0
- package/dist/tools/claude-code-sync.js +52 -0
- package/dist/tools/claude-code-sync.js.map +1 -0
- package/dist/tools/control-plane.d.ts +118 -0
- package/dist/tools/control-plane.d.ts.map +1 -0
- package/dist/tools/control-plane.js +135 -0
- package/dist/tools/control-plane.js.map +1 -0
- package/dist/tools/crew-builder.d.ts +24 -66
- package/dist/tools/crew-builder.d.ts.map +1 -1
- package/dist/tools/crew-builder.js +24 -185
- package/dist/tools/crew-builder.js.map +1 -1
- package/dist/tools/crewai.d.ts +24 -63
- package/dist/tools/crewai.d.ts.map +1 -1
- package/dist/tools/crewai.js +24 -145
- package/dist/tools/crewai.js.map +1 -1
- package/dist/tools/exa.d.ts +126 -0
- package/dist/tools/exa.d.ts.map +1 -0
- package/dist/tools/exa.js +125 -0
- package/dist/tools/exa.js.map +1 -0
- package/dist/tools/external-agents.d.ts +440 -0
- package/dist/tools/external-agents.d.ts.map +1 -0
- package/dist/tools/external-agents.js +386 -0
- package/dist/tools/external-agents.js.map +1 -0
- package/dist/tools/github-mcp.d.ts +228 -0
- package/dist/tools/github-mcp.d.ts.map +1 -0
- package/dist/tools/github-mcp.js +235 -0
- package/dist/tools/github-mcp.js.map +1 -0
- package/dist/tools/governance.d.ts +273 -0
- package/dist/tools/governance.d.ts.map +1 -0
- package/dist/tools/governance.js +286 -0
- package/dist/tools/governance.js.map +1 -0
- package/dist/tools/hosted-agents.d.ts +216 -0
- package/dist/tools/hosted-agents.d.ts.map +1 -0
- package/dist/tools/hosted-agents.js +214 -0
- package/dist/tools/hosted-agents.js.map +1 -0
- package/dist/tools/index.d.ts +6335 -191
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +441 -172
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/jira.d.ts +60 -176
- package/dist/tools/jira.d.ts.map +1 -1
- package/dist/tools/jira.js +60 -365
- package/dist/tools/jira.js.map +1 -1
- package/dist/tools/llm-providers.d.ts +50 -0
- package/dist/tools/llm-providers.d.ts.map +1 -0
- package/dist/tools/llm-providers.js +41 -0
- package/dist/tools/llm-providers.js.map +1 -0
- package/dist/tools/mcp-metrics.d.ts +47 -0
- package/dist/tools/mcp-metrics.d.ts.map +1 -0
- package/dist/tools/mcp-metrics.js +53 -0
- package/dist/tools/mcp-metrics.js.map +1 -0
- package/dist/tools/mcp-tools.d.ts +12 -29
- package/dist/tools/mcp-tools.d.ts.map +1 -1
- package/dist/tools/mcp-tools.js +12 -131
- package/dist/tools/mcp-tools.js.map +1 -1
- package/dist/tools/mem0.d.ts +127 -0
- package/dist/tools/mem0.d.ts.map +1 -0
- package/dist/tools/mem0.js +155 -0
- package/dist/tools/mem0.js.map +1 -0
- package/dist/tools/memory-graph.d.ts +151 -0
- package/dist/tools/memory-graph.d.ts.map +1 -0
- package/dist/tools/memory-graph.js +159 -0
- package/dist/tools/memory-graph.js.map +1 -0
- package/dist/tools/memory-stores.d.ts +141 -0
- package/dist/tools/memory-stores.d.ts.map +1 -0
- package/dist/tools/memory-stores.js +147 -0
- package/dist/tools/memory-stores.js.map +1 -0
- package/dist/tools/messages.d.ts +12 -20
- package/dist/tools/messages.d.ts.map +1 -1
- package/dist/tools/messages.js +12 -49
- package/dist/tools/messages.js.map +1 -1
- package/dist/tools/moltbook.d.ts +328 -0
- package/dist/tools/moltbook.d.ts.map +1 -0
- package/dist/tools/moltbook.js +334 -0
- package/dist/tools/moltbook.js.map +1 -0
- package/dist/tools/monitoring-attribution.d.ts +71 -0
- package/dist/tools/monitoring-attribution.d.ts.map +1 -0
- package/dist/tools/monitoring-attribution.js +74 -0
- package/dist/tools/monitoring-attribution.js.map +1 -0
- package/dist/tools/ops.d.ts +139 -0
- package/dist/tools/ops.d.ts.map +1 -0
- package/dist/tools/ops.js +151 -0
- package/dist/tools/ops.js.map +1 -0
- package/dist/tools/orchestrations.d.ts +109 -0
- package/dist/tools/orchestrations.d.ts.map +1 -0
- package/dist/tools/orchestrations.js +115 -0
- package/dist/tools/orchestrations.js.map +1 -0
- package/dist/tools/outcomes.d.ts +138 -0
- package/dist/tools/outcomes.d.ts.map +1 -0
- package/dist/tools/outcomes.js +136 -0
- package/dist/tools/outcomes.js.map +1 -0
- package/dist/tools/schedules.d.ts +149 -0
- package/dist/tools/schedules.d.ts.map +1 -0
- package/dist/tools/schedules.js +155 -0
- package/dist/tools/schedules.js.map +1 -0
- package/dist/tools/services.d.ts +6 -16
- package/dist/tools/services.d.ts.map +1 -1
- package/dist/tools/services.js +6 -135
- package/dist/tools/services.js.map +1 -1
- package/dist/tools/sessions.d.ts +124 -0
- package/dist/tools/sessions.d.ts.map +1 -0
- package/dist/tools/sessions.js +130 -0
- package/dist/tools/sessions.js.map +1 -0
- package/dist/tools/setup-status.d.ts +29 -0
- package/dist/tools/setup-status.d.ts.map +1 -0
- package/dist/tools/setup-status.js +35 -0
- package/dist/tools/setup-status.js.map +1 -0
- package/dist/tools/tasks.d.ts +44 -56
- package/dist/tools/tasks.d.ts.map +1 -1
- package/dist/tools/tasks.js +48 -212
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/tiers.d.ts +55 -0
- package/dist/tools/tiers.d.ts.map +1 -0
- package/dist/tools/tiers.js +239 -0
- package/dist/tools/tiers.js.map +1 -0
- package/dist/tools/unified-agents.d.ts +43 -0
- package/dist/tools/unified-agents.d.ts.map +1 -0
- package/dist/tools/unified-agents.js +46 -0
- package/dist/tools/unified-agents.js.map +1 -0
- package/dist/tools/web-eval.d.ts +129 -0
- package/dist/tools/web-eval.d.ts.map +1 -0
- package/dist/tools/web-eval.js +136 -0
- package/dist/tools/web-eval.js.map +1 -0
- package/dist/tools/workflow.d.ts +105 -0
- package/dist/tools/workflow.d.ts.map +1 -0
- package/dist/tools/workflow.js +111 -0
- package/dist/tools/workflow.js.map +1 -0
- package/dist/tools/workloads.d.ts +81 -0
- package/dist/tools/workloads.d.ts.map +1 -0
- package/dist/tools/workloads.js +81 -0
- package/dist/tools/workloads.js.map +1 -0
- package/package.json +13 -7
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@ This will guide you through connecting Dobby to your preferred AI tools.
|
|
|
14
14
|
|
|
15
15
|
### Option 2: Manual Setup
|
|
16
16
|
|
|
17
|
-
1. Get your API credentials from [Dobby Dashboard](https://
|
|
17
|
+
1. Get your API credentials from [Dobby Dashboard](https://dobby-ai.com/settings/api)
|
|
18
18
|
2. Add to your MCP client config:
|
|
19
19
|
|
|
20
20
|
```json
|
|
@@ -24,8 +24,8 @@ This will guide you through connecting Dobby to your preferred AI tools.
|
|
|
24
24
|
"command": "npx",
|
|
25
25
|
"args": ["-y", "@dobbyai/mcp-external"],
|
|
26
26
|
"env": {
|
|
27
|
-
"DOBBY_API_URL": "https://
|
|
28
|
-
"DOBBY_API_KEY": "
|
|
27
|
+
"DOBBY_API_URL": "https://dobby-ai.com",
|
|
28
|
+
"DOBBY_API_KEY": "gk_user_your_key_here",
|
|
29
29
|
"DOBBY_TENANT_ID": "your-tenant-id"
|
|
30
30
|
}
|
|
31
31
|
}
|
|
@@ -255,8 +255,8 @@ approvals://pending # Pending approvals
|
|
|
255
255
|
"command": "npx",
|
|
256
256
|
"args": ["-y", "@dobbyai/mcp-external"],
|
|
257
257
|
"env": {
|
|
258
|
-
"DOBBY_API_URL": "https://
|
|
259
|
-
"DOBBY_API_KEY": "
|
|
258
|
+
"DOBBY_API_URL": "https://dobby-ai.com",
|
|
259
|
+
"DOBBY_API_KEY": "gk_user_your_key_here",
|
|
260
260
|
"DOBBY_TENANT_ID": "your-tenant-id"
|
|
261
261
|
}
|
|
262
262
|
}
|
|
@@ -274,8 +274,8 @@ Settings → MCP → Add Server:
|
|
|
274
274
|
"command": "npx",
|
|
275
275
|
"args": ["-y", "@dobbyai/mcp-external"],
|
|
276
276
|
"env": {
|
|
277
|
-
"DOBBY_API_URL": "https://
|
|
278
|
-
"DOBBY_API_KEY": "
|
|
277
|
+
"DOBBY_API_URL": "https://dobby-ai.com",
|
|
278
|
+
"DOBBY_API_KEY": "gk_user_your_key_here",
|
|
279
279
|
"DOBBY_TENANT_ID": "your-tenant-id"
|
|
280
280
|
}
|
|
281
281
|
}
|
|
@@ -293,8 +293,8 @@ File: `~/.codeium/windsurf/mcp_config.json`
|
|
|
293
293
|
"command": "npx",
|
|
294
294
|
"args": ["-y", "@dobbyai/mcp-external"],
|
|
295
295
|
"env": {
|
|
296
|
-
"DOBBY_API_URL": "https://
|
|
297
|
-
"DOBBY_API_KEY": "
|
|
296
|
+
"DOBBY_API_URL": "https://dobby-ai.com",
|
|
297
|
+
"DOBBY_API_KEY": "gk_user_your_key_here",
|
|
298
298
|
"DOBBY_TENANT_ID": "your-tenant-id"
|
|
299
299
|
}
|
|
300
300
|
}
|
|
@@ -313,8 +313,8 @@ Command Palette → "Cline: Open MCP Settings" → Add:
|
|
|
313
313
|
"command": "npx",
|
|
314
314
|
"args": ["-y", "@dobbyai/mcp-external"],
|
|
315
315
|
"env": {
|
|
316
|
-
"DOBBY_API_URL": "https://
|
|
317
|
-
"DOBBY_API_KEY": "
|
|
316
|
+
"DOBBY_API_URL": "https://dobby-ai.com",
|
|
317
|
+
"DOBBY_API_KEY": "gk_user_your_key_here",
|
|
318
318
|
"DOBBY_TENANT_ID": "your-tenant-id"
|
|
319
319
|
}
|
|
320
320
|
}
|
|
@@ -328,11 +328,41 @@ Command Palette → "Cline: Open MCP Settings" → Add:
|
|
|
328
328
|
|
|
329
329
|
| Variable | Required | Description |
|
|
330
330
|
|----------|----------|-------------|
|
|
331
|
-
| `DOBBY_API_URL` | Yes | Dobby API URL (default: https://
|
|
332
|
-
| `DOBBY_API_KEY` | Yes | Your Dobby
|
|
331
|
+
| `DOBBY_API_URL` | Yes | Dobby API URL (default: https://dobby-ai.com) |
|
|
332
|
+
| `DOBBY_API_KEY` | Yes | Your Dobby key: a `gk_user_`/`gk_svc_` gateway key, an `sk_live_` tenant key, or (remote HTTP transport only) a `dobby_pat_` Personal Access Token. See **Credentials & Transports** below. |
|
|
333
333
|
| `DOBBY_TENANT_ID` | Yes | Your workspace/tenant ID |
|
|
334
|
+
| `DOBBY_ORGANIZATION_ID` | No | Organization ID for org-scoped tools (memory stores, rubrics, orchestration configs). The variable name is `DOBBY_ORGANIZATION_ID` — a `DOBBY_ORG_ID` variable is **not** read and is silently ignored. |
|
|
334
335
|
| `DOBBY_USER_ID` | No | User ID for messages |
|
|
335
336
|
| `DOBBY_USER_NAME` | No | Display name for messages |
|
|
337
|
+
| `DOBBY_GATEWAY_KEY` | No | Optional — auto-detected if DOBBY_API_KEY starts with gk_; set explicitly to override. |
|
|
338
|
+
| `DOBBY_GATEWAY_URL` | No | Optional — defaults to DOBBY_API_URL. |
|
|
339
|
+
| `DOBBY_REGION` | No | Optional — data-residency region hint. |
|
|
340
|
+
|
|
341
|
+
> **Not sure what your key can do or which org/tenant you're on?** Run `npx @dobbyai/mcp-external --doctor` before connecting, or — once connected — call the **`whoami`** tool. Both report your transport, key type, resolved org/tenant, whether a PAT is present, and exactly what (if anything) is missing.
|
|
342
|
+
|
|
343
|
+
---
|
|
344
|
+
|
|
345
|
+
## 🔑 Credentials & Transports
|
|
346
|
+
|
|
347
|
+
Dobby MCP runs in two transports, and which credential you need depends on which one you use. Run `npx @dobbyai/mcp-external --doctor` at any time to check your setup — it prints exactly what your credentials can and cannot do.
|
|
348
|
+
|
|
349
|
+
### Local (STDIO)
|
|
350
|
+
|
|
351
|
+
The default (`npx @dobbyai/mcp-external`), used by Claude Desktop, Cursor, Windsurf, etc. Configured with env vars:
|
|
352
|
+
|
|
353
|
+
| `DOBBY_API_KEY` value | Read / tenant tools | Gateway / execute tools |
|
|
354
|
+
|-----------------------|:-------------------:|:-----------------------:|
|
|
355
|
+
| `gk_user_…` / `gk_svc_…` (gateway key) | ✅ | ✅ — auto-enabled; a `gk_` key doubles as the gateway key |
|
|
356
|
+
| `sk_live_…` (tenant key) | ✅ | ❌ — also set a `gk_` key in `DOBBY_GATEWAY_KEY` |
|
|
357
|
+
| `dobby_pat_…` (Personal Access Token) | ✅ | ❌ — **not available in STDIO** (see below) |
|
|
358
|
+
|
|
359
|
+
**Gateway/execute tools in STDIO need a `gk_` key** — either as `DOBBY_API_KEY` or as `DOBBY_GATEWAY_KEY`. A Personal Access Token (`dobby_pat_`) **cannot** drive gateway tools locally: minting the short-lived gateway key it would need requires an internal secret that only exists on Dobby-operated servers, never on a customer machine — by design.
|
|
360
|
+
|
|
361
|
+
### Remote (HTTP / OAuth)
|
|
362
|
+
|
|
363
|
+
Point an MCP client at `https://mcp.dobby-ai.com` and authenticate with OAuth or a Personal Access Token (`dobby_pat_`). Here a **single PAT covers everything** — read, tenant, org, and gateway tools — because the server mints a per-request, tenant-scoped `gk_tmp_` from your session on your behalf. No separate gateway key to manage.
|
|
364
|
+
|
|
365
|
+
> **Rule of thumb:** local STDIO → use a `gk_user_` key (works for both read and execute). Remote → use a PAT (one credential, gateway included).
|
|
336
366
|
|
|
337
367
|
---
|
|
338
368
|
|
|
@@ -534,7 +564,7 @@ npm test
|
|
|
534
564
|
```bash
|
|
535
565
|
# Set environment variables
|
|
536
566
|
export DOBBY_API_URL=http://localhost:3000
|
|
537
|
-
export DOBBY_API_KEY=dev
|
|
567
|
+
export DOBBY_API_KEY=gk_user_your_key_here # local dev server only (auth bypassed)
|
|
538
568
|
export DOBBY_TENANT_ID=your-tenant-id
|
|
539
569
|
|
|
540
570
|
# Run the server
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentMail MCP Tools Tests — Phase 5 + Session 3 updates
|
|
3
|
+
*
|
|
4
|
+
* Tests for agent notification system, inbox retrieval,
|
|
5
|
+
* digital identity management, dynamic registry, and markdown responses.
|
|
6
|
+
*/
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=agent-mail-tools.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-mail-tools.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/agent-mail-tools.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentMail MCP Tools Tests — Phase 5 + Session 3 updates
|
|
3
|
+
*
|
|
4
|
+
* Tests for agent notification system, inbox retrieval,
|
|
5
|
+
* digital identity management, dynamic registry, and markdown responses.
|
|
6
|
+
*/
|
|
7
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
8
|
+
import { createRegistry, toMcpResult } from '@dobbyai/capability-core';
|
|
9
|
+
// Mock global fetch
|
|
10
|
+
const mockFetch = vi.fn();
|
|
11
|
+
vi.stubGlobal('fetch', mockFetch);
|
|
12
|
+
// Mock DobbyClient with request method and tenantId
|
|
13
|
+
const mockClient = {
|
|
14
|
+
apiUrl: 'http://localhost:3000',
|
|
15
|
+
apiKey: 'test-api-key',
|
|
16
|
+
tenantId: 'tenant_test123',
|
|
17
|
+
request: vi.fn(),
|
|
18
|
+
};
|
|
19
|
+
// ADR-019: the legacy handle* functions are gone — dispatch goes through the
|
|
20
|
+
// capability registry (handlers are verbatim copies; MCP output byte-identical).
|
|
21
|
+
const registry = createRegistry();
|
|
22
|
+
const callCap = async (id, client, args) => toMcpResult(await registry.get(id).handler({ client: client }, args));
|
|
23
|
+
// ============================================
|
|
24
|
+
// Send Notification
|
|
25
|
+
// ============================================
|
|
26
|
+
describe('AgentMail: Send Notification', () => {
|
|
27
|
+
beforeEach(() => {
|
|
28
|
+
vi.resetAllMocks();
|
|
29
|
+
// Default: API unavailable for request (dynamic registry fallback)
|
|
30
|
+
mockClient.request.mockRejectedValue(new Error('Connection refused'));
|
|
31
|
+
});
|
|
32
|
+
it('sends notification and returns markdown response', async () => {
|
|
33
|
+
// API unavailable — local-only storage
|
|
34
|
+
mockFetch.mockRejectedValueOnce(new Error('Connection refused'));
|
|
35
|
+
const result = await callCap('agentmail_send_notification', mockClient, {
|
|
36
|
+
to: 'dobby-backend-agent',
|
|
37
|
+
subject: 'Task completed',
|
|
38
|
+
body: 'The API endpoint has been implemented successfully.',
|
|
39
|
+
});
|
|
40
|
+
const text = result.content[0].text;
|
|
41
|
+
expect(text).toContain('## Notification Sent');
|
|
42
|
+
expect(text).toContain('**To:** dobby-backend-agent');
|
|
43
|
+
expect(text).toContain('**Type:** info');
|
|
44
|
+
expect(text).toContain('**Priority:** normal');
|
|
45
|
+
expect(text).toContain('**API Delivered:** No');
|
|
46
|
+
});
|
|
47
|
+
it('sends with custom type and priority', async () => {
|
|
48
|
+
mockFetch.mockRejectedValueOnce(new Error('Connection refused'));
|
|
49
|
+
const result = await callCap('agentmail_send_notification', mockClient, {
|
|
50
|
+
to: 'team',
|
|
51
|
+
subject: 'Urgent: Security Vulnerability',
|
|
52
|
+
body: 'Critical security issue found in auth module.',
|
|
53
|
+
notification_type: 'alert',
|
|
54
|
+
priority: 'urgent',
|
|
55
|
+
task_id: 'task_abc123',
|
|
56
|
+
});
|
|
57
|
+
const text = result.content[0].text;
|
|
58
|
+
expect(text).toContain('**Type:** alert');
|
|
59
|
+
expect(text).toContain('**Priority:** urgent');
|
|
60
|
+
expect(text).toContain('**Task:** task_abc123');
|
|
61
|
+
});
|
|
62
|
+
it('delivers via API when available', async () => {
|
|
63
|
+
mockFetch.mockResolvedValueOnce({
|
|
64
|
+
ok: true,
|
|
65
|
+
json: () => Promise.resolve({ id: 'api_notif_123', delivered: true }),
|
|
66
|
+
});
|
|
67
|
+
const result = await callCap('agentmail_send_notification', mockClient, {
|
|
68
|
+
to: 'dobby-frontend-agent',
|
|
69
|
+
subject: 'PR Ready for Review',
|
|
70
|
+
body: 'Please review the frontend changes.',
|
|
71
|
+
notification_type: 'approval_request',
|
|
72
|
+
});
|
|
73
|
+
const text = result.content[0].text;
|
|
74
|
+
expect(text).toContain('**API Delivered:** Yes');
|
|
75
|
+
// Verify API was called with correct endpoint
|
|
76
|
+
expect(mockFetch).toHaveBeenCalledWith('http://localhost:3000/api/v1/notifications', expect.objectContaining({
|
|
77
|
+
method: 'POST',
|
|
78
|
+
headers: expect.objectContaining({
|
|
79
|
+
'X-API-Key': 'test-api-key',
|
|
80
|
+
}),
|
|
81
|
+
}));
|
|
82
|
+
});
|
|
83
|
+
it('includes email_requested flag', async () => {
|
|
84
|
+
mockFetch.mockRejectedValueOnce(new Error('Connection refused'));
|
|
85
|
+
const result = await callCap('agentmail_send_notification', mockClient, {
|
|
86
|
+
to: 'user@example.com',
|
|
87
|
+
subject: 'Status Report',
|
|
88
|
+
body: 'Weekly status update.',
|
|
89
|
+
deliver_email: true,
|
|
90
|
+
});
|
|
91
|
+
const text = result.content[0].text;
|
|
92
|
+
expect(text).toContain('**Email Requested:** Yes');
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
// ============================================
|
|
96
|
+
// Get Inbox
|
|
97
|
+
// ============================================
|
|
98
|
+
describe('AgentMail: Get Inbox', () => {
|
|
99
|
+
beforeEach(() => {
|
|
100
|
+
vi.resetAllMocks();
|
|
101
|
+
mockClient.request.mockRejectedValue(new Error('Connection refused'));
|
|
102
|
+
});
|
|
103
|
+
it('returns inbox from API when available', async () => {
|
|
104
|
+
mockFetch.mockResolvedValueOnce({
|
|
105
|
+
ok: true,
|
|
106
|
+
json: () => Promise.resolve({
|
|
107
|
+
notifications: [
|
|
108
|
+
{ id: 'notif_1', subject: 'Test', read: false },
|
|
109
|
+
],
|
|
110
|
+
total: 1,
|
|
111
|
+
}),
|
|
112
|
+
});
|
|
113
|
+
const result = await callCap('agentmail_get_inbox', mockClient, {});
|
|
114
|
+
const data = JSON.parse(result.content[0].text);
|
|
115
|
+
expect(data.notifications).toBeDefined();
|
|
116
|
+
});
|
|
117
|
+
it('falls back to local store with markdown format when API unavailable', async () => {
|
|
118
|
+
// Both fetch (inbox API) and request (registry) fail
|
|
119
|
+
mockFetch.mockRejectedValueOnce(new Error('Connection refused'));
|
|
120
|
+
const result = await callCap('agentmail_get_inbox', mockClient, {
|
|
121
|
+
agent_id: 'dobby-backend-agent',
|
|
122
|
+
});
|
|
123
|
+
const text = result.content[0].text;
|
|
124
|
+
expect(text).toContain('## Inbox for');
|
|
125
|
+
expect(text).toContain('**Agent:** dobby-backend-agent');
|
|
126
|
+
expect(text).toContain('**Source:** local store');
|
|
127
|
+
});
|
|
128
|
+
it('respects limit parameter', async () => {
|
|
129
|
+
mockFetch.mockRejectedValueOnce(new Error('Connection refused'));
|
|
130
|
+
const result = await callCap('agentmail_get_inbox', mockClient, {
|
|
131
|
+
limit: 5,
|
|
132
|
+
});
|
|
133
|
+
// Should not error
|
|
134
|
+
expect(result.content[0].text).toContain('## Inbox for');
|
|
135
|
+
});
|
|
136
|
+
it('includes team notifications in inbox', async () => {
|
|
137
|
+
// Send a team notification first
|
|
138
|
+
mockFetch.mockRejectedValue(new Error('Connection refused'));
|
|
139
|
+
await callCap('agentmail_send_notification', mockClient, {
|
|
140
|
+
to: 'team',
|
|
141
|
+
subject: 'Team Update',
|
|
142
|
+
body: 'Important team update.',
|
|
143
|
+
notification_type: 'status_report',
|
|
144
|
+
});
|
|
145
|
+
// Check inbox for team — should see team notifications
|
|
146
|
+
const result = await callCap('agentmail_get_inbox', mockClient, {
|
|
147
|
+
agent_id: 'team',
|
|
148
|
+
unread_only: false,
|
|
149
|
+
});
|
|
150
|
+
const text = result.content[0].text;
|
|
151
|
+
expect(text).toContain('Team Update');
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
// ============================================
|
|
155
|
+
// Get Identity — Dynamic Registry
|
|
156
|
+
// ============================================
|
|
157
|
+
describe('AgentMail: Get Identity (Dynamic Registry)', () => {
|
|
158
|
+
beforeEach(() => {
|
|
159
|
+
vi.resetAllMocks();
|
|
160
|
+
});
|
|
161
|
+
it('returns identity from API when available', async () => {
|
|
162
|
+
mockClient.request.mockResolvedValueOnce({
|
|
163
|
+
data: {
|
|
164
|
+
agents: [
|
|
165
|
+
{
|
|
166
|
+
agent_id: 'dobby-backend-agent',
|
|
167
|
+
display_name: 'Backend Pro',
|
|
168
|
+
role: 'Senior Backend Dev',
|
|
169
|
+
group: 'dev',
|
|
170
|
+
capabilities: ['code', 'api'],
|
|
171
|
+
},
|
|
172
|
+
],
|
|
173
|
+
},
|
|
174
|
+
});
|
|
175
|
+
const result = await callCap('agentmail_get_identity', mockClient, {
|
|
176
|
+
agent_id: 'dobby-backend-agent',
|
|
177
|
+
});
|
|
178
|
+
const text = result.content[0].text;
|
|
179
|
+
expect(text).toContain('## Agent Identity: Backend Pro');
|
|
180
|
+
expect(text).toContain('**Agent ID:** dobby-backend-agent');
|
|
181
|
+
expect(text).toContain('**Role:** Senior Backend Dev');
|
|
182
|
+
expect(text).toContain('### Capabilities');
|
|
183
|
+
});
|
|
184
|
+
it('falls back to hardcoded defaults when API unavailable', async () => {
|
|
185
|
+
// Force cache miss by using a fresh mock that always rejects
|
|
186
|
+
mockClient.request.mockRejectedValue(new Error('Connection refused'));
|
|
187
|
+
const result = await callCap('agentmail_get_identity', mockClient, {
|
|
188
|
+
agent_id: 'dobby-backend-agent',
|
|
189
|
+
});
|
|
190
|
+
expect(result.isError).toBeUndefined();
|
|
191
|
+
const text = result.content[0].text;
|
|
192
|
+
// May use cached API data or fallback — either way should have agent info
|
|
193
|
+
expect(text).toContain('**Agent ID:** dobby-backend-agent');
|
|
194
|
+
expect(text).toContain('### Capabilities');
|
|
195
|
+
});
|
|
196
|
+
it('returns error for unknown agent', async () => {
|
|
197
|
+
mockClient.request.mockRejectedValueOnce(new Error('Connection refused'));
|
|
198
|
+
const result = await callCap('agentmail_get_identity', mockClient, {
|
|
199
|
+
agent_id: 'nonexistent-agent',
|
|
200
|
+
});
|
|
201
|
+
expect(result.isError).toBe(true);
|
|
202
|
+
const data = JSON.parse(result.content[0].text);
|
|
203
|
+
expect(data.error).toContain('Unknown agent');
|
|
204
|
+
expect(data.available_agents).toBeDefined();
|
|
205
|
+
expect(data.available_agents).toContain('dobby-backend-agent');
|
|
206
|
+
});
|
|
207
|
+
it('caches API results for 5 minutes', async () => {
|
|
208
|
+
const apiResponse = {
|
|
209
|
+
data: {
|
|
210
|
+
agents: [
|
|
211
|
+
{ agent_id: 'dobby-chief-agent', display_name: 'Chief Cached', role: 'Cached Role', group: 'chief' },
|
|
212
|
+
],
|
|
213
|
+
},
|
|
214
|
+
};
|
|
215
|
+
mockClient.request.mockResolvedValue(apiResponse);
|
|
216
|
+
// First call — fetches from API
|
|
217
|
+
await callCap('agentmail_get_identity', mockClient, { agent_id: 'dobby-chief-agent' });
|
|
218
|
+
// Second call — should use cache (request not called again for registry)
|
|
219
|
+
const callCountAfterFirst = mockClient.request.mock.calls.length;
|
|
220
|
+
await callCap('agentmail_get_identity', mockClient, { agent_id: 'dobby-chief-agent' });
|
|
221
|
+
// Should NOT have made another request (cached)
|
|
222
|
+
expect(mockClient.request.mock.calls.length).toBe(callCountAfterFirst);
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
// ============================================
|
|
226
|
+
// Tool Registration
|
|
227
|
+
// ============================================
|
|
228
|
+
describe('AgentMail: Tool Registration', () => {
|
|
229
|
+
it('all agentmail tools are in allTools', async () => {
|
|
230
|
+
const { allTools } = await import('../tools/index.js');
|
|
231
|
+
expect(allTools.agentmail_send_notification).toBeDefined();
|
|
232
|
+
expect(allTools.agentmail_get_inbox).toBeDefined();
|
|
233
|
+
expect(allTools.agentmail_get_identity).toBeDefined();
|
|
234
|
+
});
|
|
235
|
+
it('agentmail tools have correct schemas', async () => {
|
|
236
|
+
const { agentMailTools } = await import('../tools/agent-mail.js');
|
|
237
|
+
for (const [name, tool] of Object.entries(agentMailTools)) {
|
|
238
|
+
expect(tool.name).toBe(name);
|
|
239
|
+
expect(tool.description).toBeTruthy();
|
|
240
|
+
expect(tool.inputSchema.type).toBe('object');
|
|
241
|
+
expect(tool.inputSchema.properties).toBeDefined();
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
it('agent_id field has pattern validation', async () => {
|
|
245
|
+
const { agentMailTools } = await import('../tools/agent-mail.js');
|
|
246
|
+
const identitySchema = agentMailTools.agentmail_get_identity.inputSchema;
|
|
247
|
+
expect(identitySchema.properties.agent_id.pattern).toBe('^[a-zA-Z0-9_-]+$');
|
|
248
|
+
});
|
|
249
|
+
it('total tool count includes phase 3-5 tools', async () => {
|
|
250
|
+
const { allTools } = await import('../tools/index.js');
|
|
251
|
+
const toolCount = Object.keys(allTools).length;
|
|
252
|
+
expect(toolCount).toBeGreaterThanOrEqual(65);
|
|
253
|
+
});
|
|
254
|
+
});
|
|
255
|
+
//# sourceMappingURL=agent-mail-tools.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-mail-tools.test.js","sourceRoot":"","sources":["../../src/__tests__/agent-mail-tools.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"annotations.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/annotations.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Annotations Tests
|
|
3
|
+
*
|
|
4
|
+
* Verifies that all tools have proper MCP annotations
|
|
5
|
+
* (readOnlyHint, destructiveHint, openWorldHint).
|
|
6
|
+
*/
|
|
7
|
+
import { describe, it, expect } from 'vitest';
|
|
8
|
+
import { allTools } from '../tools/index.js';
|
|
9
|
+
describe('Tool Annotations', () => {
|
|
10
|
+
const tools = Object.values(allTools);
|
|
11
|
+
it('all tools have annotations object', () => {
|
|
12
|
+
for (const tool of tools) {
|
|
13
|
+
expect(tool.annotations, `Tool "${tool.name}" missing annotations`).toBeDefined();
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
it('all annotations have required fields', () => {
|
|
17
|
+
for (const tool of tools) {
|
|
18
|
+
const ann = tool.annotations;
|
|
19
|
+
expect(ann.title, `Tool "${tool.name}" missing title`).toBeDefined();
|
|
20
|
+
expect(typeof ann.readOnlyHint, `Tool "${tool.name}" readOnlyHint not boolean`).toBe('boolean');
|
|
21
|
+
expect(typeof ann.destructiveHint, `Tool "${tool.name}" destructiveHint not boolean`).toBe('boolean');
|
|
22
|
+
expect(typeof ann.openWorldHint, `Tool "${tool.name}" openWorldHint not boolean`).toBe('boolean');
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
it('no tool is both readOnly and destructive', () => {
|
|
26
|
+
for (const tool of tools) {
|
|
27
|
+
const ann = tool.annotations;
|
|
28
|
+
if (ann.readOnlyHint && ann.destructiveHint) {
|
|
29
|
+
throw new Error(`Tool "${tool.name}" cannot be both readOnly and destructive`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
it('read-only tools are correctly classified', () => {
|
|
34
|
+
const expectedReadOnly = [
|
|
35
|
+
'list_tasks', 'get_task', 'get_task_timeline',
|
|
36
|
+
'get_messages',
|
|
37
|
+
'get_pending_approvals',
|
|
38
|
+
'list_services',
|
|
39
|
+
'crewai_health', 'crewai_inputs', 'crewai_status',
|
|
40
|
+
'crew_validate', 'crew_status', 'crew_list',
|
|
41
|
+
'mcp_discover_tools',
|
|
42
|
+
'jira_search_issues', 'jira_get_issue', 'jira_get_comments',
|
|
43
|
+
'jira_get_transitions', 'jira_list_projects',
|
|
44
|
+
'get_ops_health_summary', 'get_service_status', 'get_active_issues', 'get_ops_audit_log',
|
|
45
|
+
'github_search_code', 'github_get_file', 'github_list_prs',
|
|
46
|
+
'github_list_issues', 'github_get_workflow_runs',
|
|
47
|
+
'mem0_search', 'mem0_list',
|
|
48
|
+
'mcp_health_check', 'mcp_connection_info',
|
|
49
|
+
'workflow_classify_task', 'workflow_agent_workload', 'workflow_assignment_rules',
|
|
50
|
+
'webeval_run_tests', 'webeval_check_health', 'webeval_test_api_endpoint', 'webeval_coverage_report',
|
|
51
|
+
'memory_graph_query', 'memory_graph_timeline', 'memory_graph_context',
|
|
52
|
+
'agentmail_get_inbox', 'agentmail_get_identity',
|
|
53
|
+
'list_schedules',
|
|
54
|
+
'moltbook_get_profile', 'moltbook_get_home_feed', 'moltbook_get_posts',
|
|
55
|
+
'moltbook_get_post', 'moltbook_get_comments', 'moltbook_search', 'moltbook_get_notifications',
|
|
56
|
+
'list_all_agents',
|
|
57
|
+
'export_policies', 'validate_policies',
|
|
58
|
+
];
|
|
59
|
+
for (const name of expectedReadOnly) {
|
|
60
|
+
const tool = allTools[name];
|
|
61
|
+
expect(tool, `Tool "${name}" not found`).toBeDefined();
|
|
62
|
+
expect(tool.annotations?.readOnlyHint, `Tool "${name}" should be readOnly`).toBe(true);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
it('destructive tools are correctly classified', () => {
|
|
66
|
+
const expectedDestructive = [
|
|
67
|
+
'create_task', 'update_task', 'cancel_task',
|
|
68
|
+
'send_message',
|
|
69
|
+
'approve_task', 'reject_task', 'request_changes',
|
|
70
|
+
'crewai_kickoff',
|
|
71
|
+
'crew_kickoff',
|
|
72
|
+
'jira_create_issue', 'jira_update_issue', 'jira_add_comment',
|
|
73
|
+
'jira_transition_issue', 'jira_assign_issue',
|
|
74
|
+
'acknowledge_ops_issue',
|
|
75
|
+
'github_create_pr', 'github_create_issue',
|
|
76
|
+
'mem0_store', 'mem0_delete',
|
|
77
|
+
'workflow_auto_assign',
|
|
78
|
+
'memory_graph_store',
|
|
79
|
+
'agentmail_send_notification',
|
|
80
|
+
'create_schedule', 'pause_schedule', 'delete_schedule',
|
|
81
|
+
'moltbook_update_profile', 'moltbook_create_post', 'moltbook_create_comment',
|
|
82
|
+
'moltbook_upvote_post', 'moltbook_downvote_post',
|
|
83
|
+
'import_policies', 'apply_guardrail',
|
|
84
|
+
];
|
|
85
|
+
for (const name of expectedDestructive) {
|
|
86
|
+
const tool = allTools[name];
|
|
87
|
+
expect(tool, `Tool "${name}" not found`).toBeDefined();
|
|
88
|
+
expect(tool.annotations?.destructiveHint, `Tool "${name}" should be destructive`).toBe(true);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
it('openWorldHint is true only for external API tools', () => {
|
|
92
|
+
const expectedOpenWorld = [
|
|
93
|
+
'exa_web_search', 'exa_find_similar', 'exa_get_contents',
|
|
94
|
+
'mcp_call_tool',
|
|
95
|
+
];
|
|
96
|
+
const openWorldSet = new Set(expectedOpenWorld);
|
|
97
|
+
for (const tool of tools) {
|
|
98
|
+
const ann = tool.annotations;
|
|
99
|
+
if (openWorldSet.has(tool.name)) {
|
|
100
|
+
expect(ann.openWorldHint, `Tool "${tool.name}" should have openWorldHint=true`).toBe(true);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
expect(ann.openWorldHint, `Tool "${tool.name}" should have openWorldHint=false`).toBe(false);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
//# sourceMappingURL=annotations.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"annotations.test.js","sourceRoot":"","sources":["../../src/__tests__/annotations.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/auth.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|