@agent-native/core 0.98.5 → 0.98.7
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/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +18 -0
- package/corpus/core/docs/content/external-agents.mdx +66 -7
- package/corpus/core/docs/content/locales/ar-SA/external-agents.mdx +40 -7
- package/corpus/core/docs/content/locales/de-DE/external-agents.mdx +41 -7
- package/corpus/core/docs/content/locales/es-ES/external-agents.mdx +41 -7
- package/corpus/core/docs/content/locales/fr-FR/external-agents.mdx +41 -7
- package/corpus/core/docs/content/locales/hi-IN/external-agents.mdx +40 -7
- package/corpus/core/docs/content/locales/ja-JP/external-agents.mdx +40 -7
- package/corpus/core/docs/content/locales/ko-KR/external-agents.mdx +40 -7
- package/corpus/core/docs/content/locales/pt-BR/external-agents.mdx +41 -7
- package/corpus/core/docs/content/locales/zh-CN/external-agents.mdx +39 -7
- package/corpus/core/docs/content/locales/zh-TW/external-agents.mdx +39 -7
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/a2a/handlers.ts +101 -26
- package/corpus/core/src/a2a/task-store.ts +128 -3
- package/corpus/core/src/client/session-replay.ts +67 -5
- package/corpus/core/src/integrations/adapters/slack.ts +207 -17
- package/corpus/core/src/integrations/identity-links-store.ts +210 -0
- package/corpus/core/src/integrations/identity.ts +196 -0
- package/corpus/core/src/integrations/index.ts +6 -0
- package/corpus/core/src/integrations/plugin.ts +130 -1
- package/corpus/core/src/integrations/types.ts +37 -0
- package/corpus/core/src/integrations/webhook-handler.ts +1 -0
- package/corpus/core/src/mcp/build-server.ts +127 -22
- package/corpus/core/src/mcp/builtin-tools.ts +5 -2
- package/corpus/core/src/mcp/external-agent-policy.ts +18 -0
- package/corpus/core/src/mcp/index.ts +1 -0
- package/corpus/core/src/server/agent-chat/plugin-options.ts +12 -1
- package/corpus/core/src/server/agent-chat/script-entries.ts +20 -3
- package/corpus/core/src/server/agent-chat-plugin.ts +3 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +34 -5
- package/corpus/templates/analytics/.agents/skills/session-replay/SKILL.md +4 -1
- package/corpus/templates/analytics/AGENTS.md +20 -5
- package/corpus/templates/analytics/actions/create-session-replay-agent-link.ts +0 -1
- package/corpus/templates/analytics/actions/get-session-replay-events.ts +0 -1
- package/corpus/templates/analytics/actions/get-session-replay-timeline.ts +40 -0
- package/corpus/templates/analytics/actions/list-error-issues.ts +12 -0
- package/corpus/templates/analytics/actions/query-agent-native-analytics.ts +4 -1
- package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +48 -17
- package/corpus/templates/analytics/changelog/2026-07-12-analytics-uses-the-full-in-app-agent-for-multi-step-incident.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-12-connected-external-agents-can-now-look-up-sessions-error-iss.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-12-session-identities-stay-visible-when-demo-mode-is-off.md +6 -0
- package/corpus/templates/analytics/server/handlers/session-replay.ts +15 -9
- package/corpus/templates/analytics/server/lib/analytics-connector-catalog.ts +2 -2
- package/corpus/templates/analytics/server/lib/error-capture.ts +47 -5
- package/corpus/templates/analytics/server/lib/session-replay-agent-context.ts +72 -22
- package/corpus/templates/analytics/server/lib/session-replay.ts +41 -11
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +7 -0
- package/corpus/templates/analytics/server/plugins/db.ts +15 -0
- package/corpus/templates/analytics/server/routes/api/session-replay/agent-diagnostics.json.get.ts +8 -5
- package/corpus/templates/analytics/server/routes/api/session-replay/agent-events.json.get.ts +8 -3
- package/corpus/templates/calendar/app/components/calendar/DeleteEventDialog.tsx +12 -2
- package/corpus/templates/forms/app/global.css +54 -8
- package/corpus/templates/forms/app/pages/AskPage.tsx +35 -13
- package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +11 -17
- package/corpus/templates/forms/app/pages/ResponsesPage.tsx +8 -5
- package/corpus/templates/forms/changelog/2026-07-12-ask-forms-suggestions-now-sit-beneath-the-composer-for-a-tig.md +6 -0
- package/corpus/templates/forms/changelog/2026-07-12-builder-response-tables-now-fill-the-view-without-a-redundan.md +6 -0
- package/corpus/templates/forms/changelog/2026-07-12-response-tables-now-fill-the-available-pane-with-a-flexible-.md +6 -0
- package/corpus/templates/mail/AGENTS.md +3 -1
- package/corpus/templates/mail/server/lib/mail-integrations.ts +3 -0
- package/dist/a2a/handlers.d.ts.map +1 -1
- package/dist/a2a/handlers.js +89 -20
- package/dist/a2a/handlers.js.map +1 -1
- package/dist/a2a/task-store.d.ts +32 -1
- package/dist/a2a/task-store.d.ts.map +1 -1
- package/dist/a2a/task-store.js +111 -4
- package/dist/a2a/task-store.js.map +1 -1
- package/dist/client/session-replay.d.ts.map +1 -1
- package/dist/client/session-replay.js +53 -8
- package/dist/client/session-replay.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/integrations/adapters/slack.d.ts.map +1 -1
- package/dist/integrations/adapters/slack.js +176 -17
- package/dist/integrations/adapters/slack.js.map +1 -1
- package/dist/integrations/identity-links-store.d.ts +23 -0
- package/dist/integrations/identity-links-store.d.ts.map +1 -0
- package/dist/integrations/identity-links-store.js +158 -0
- package/dist/integrations/identity-links-store.js.map +1 -0
- package/dist/integrations/identity.d.ts +28 -0
- package/dist/integrations/identity.d.ts.map +1 -0
- package/dist/integrations/identity.js +142 -0
- package/dist/integrations/identity.js.map +1 -0
- package/dist/integrations/index.d.ts +2 -0
- package/dist/integrations/index.d.ts.map +1 -1
- package/dist/integrations/index.js +2 -0
- package/dist/integrations/index.js.map +1 -1
- package/dist/integrations/plugin.d.ts.map +1 -1
- package/dist/integrations/plugin.js +93 -1
- package/dist/integrations/plugin.js.map +1 -1
- package/dist/integrations/types.d.ts +31 -0
- package/dist/integrations/types.d.ts.map +1 -1
- package/dist/integrations/types.js.map +1 -1
- package/dist/integrations/webhook-handler.js +1 -0
- package/dist/integrations/webhook-handler.js.map +1 -1
- package/dist/mcp/build-server.d.ts +9 -2
- package/dist/mcp/build-server.d.ts.map +1 -1
- package/dist/mcp/build-server.js +97 -20
- package/dist/mcp/build-server.js.map +1 -1
- package/dist/mcp/builtin-tools.d.ts.map +1 -1
- package/dist/mcp/builtin-tools.js +5 -2
- package/dist/mcp/builtin-tools.js.map +1 -1
- package/dist/mcp/external-agent-policy.d.ts +19 -0
- package/dist/mcp/external-agent-policy.d.ts.map +1 -0
- package/dist/mcp/external-agent-policy.js +2 -0
- package/dist/mcp/external-agent-policy.js.map +1 -0
- package/dist/mcp/index.d.ts +1 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js.map +1 -1
- package/dist/notifications/routes.d.ts +1 -1
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/server/agent-chat/plugin-options.d.ts +11 -1
- package/dist/server/agent-chat/plugin-options.d.ts.map +1 -1
- package/dist/server/agent-chat/plugin-options.js.map +1 -1
- package/dist/server/agent-chat/script-entries.d.ts.map +1 -1
- package/dist/server/agent-chat/script-entries.js +16 -2
- package/dist/server/agent-chat/script-entries.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +3 -0
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +34 -5
- package/docs/content/external-agents.mdx +66 -7
- package/docs/content/locales/ar-SA/external-agents.mdx +40 -7
- package/docs/content/locales/de-DE/external-agents.mdx +41 -7
- package/docs/content/locales/es-ES/external-agents.mdx +41 -7
- package/docs/content/locales/fr-FR/external-agents.mdx +41 -7
- package/docs/content/locales/hi-IN/external-agents.mdx +40 -7
- package/docs/content/locales/ja-JP/external-agents.mdx +40 -7
- package/docs/content/locales/ko-KR/external-agents.mdx +40 -7
- package/docs/content/locales/pt-BR/external-agents.mdx +41 -7
- package/docs/content/locales/zh-CN/external-agents.mdx +39 -7
- package/docs/content/locales/zh-TW/external-agents.mdx +39 -7
- package/package.json +1 -1
- package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +34 -5
package/corpus/README.md
CHANGED
package/corpus/core/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @agent-native/core
|
|
2
2
|
|
|
3
|
+
## 0.98.7
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- b94940e: Keep replay recording recoverable across transient upload failures and tab races, preserve object resources, and prevent late A2A workers from overwriting terminal task states.
|
|
8
|
+
|
|
9
|
+
## 0.98.6
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- c4bb9ee: Add an opt-in authenticated-read MCP policy that automatically exposes explicitly safe GET actions while keeping external writes behind `ask_app`. Generic SQL stays out of that automatic surface.
|
|
14
|
+
|
|
15
|
+
The `authenticatedReads: "auto"` derivation now also applies a hard, name-based exclusion for generic database (`db-query`/`db-schema`/`db-exec`/`db-patch`), template `seed-*`, extension-management, browser-session, and Context X-Ray actions, so they can never be auto-exposed even if one is mis-annotated with the full authenticated-read flag set — only an explicit `connectorCatalog` entry can expose them.
|
|
16
|
+
|
|
17
|
+
- c4bb9ee: Bound queued and processing A2A task lifetimes, preserve asynchronous dispatch semantics, and fail unrecoverable handoffs deterministically.
|
|
18
|
+
- c4bb9ee: Slack identity lookups no longer cache a failed users.info result for the full 10-minute TTL. Transient Slack API failures now use a short 30-second negative cache, so a brief blip cannot fail-close a sender's identity (and their DMs) for 10 minutes.
|
|
19
|
+
- c4bb9ee: Run verified Slack direct messages with the linked Agent Native user's organization-scoped identity while keeping shared-channel messages service-scoped and rejecting unverified, guest, external, or cross-organization identities.
|
|
20
|
+
|
|
3
21
|
## 0.98.5
|
|
4
22
|
|
|
5
23
|
### Patch Changes
|
|
@@ -325,8 +325,9 @@ The MCP server serves a **compact catalog by default to every caller** — hoste
|
|
|
325
325
|
</div>
|
|
326
326
|
</div>
|
|
327
327
|
<p class="diagram-muted note">
|
|
328
|
-
<code>tool-search</code>
|
|
329
|
-
|
|
328
|
+
<code>tool-search</code> discovers full-tier tools on demand; the connector
|
|
329
|
+
catalog or authenticated-read policy must still permit execution unless the
|
|
330
|
+
caller explicitly opts into the full tier.
|
|
330
331
|
</p>
|
|
331
332
|
```
|
|
332
333
|
|
|
@@ -364,15 +365,73 @@ The MCP server serves a **compact catalog by default to every caller** — hoste
|
|
|
364
365
|
|
|
365
366
|
### Compact / connector tier (default) {#connector-tier}
|
|
366
367
|
|
|
367
|
-
By default every connected agent sees a small, curated catalog (~20–30 tools vs. ~105 in the full surface):
|
|
368
|
+
By default every connected agent sees a small, curated catalog (~20–30 tools vs. ~105 in the full surface). Apps can either maintain an explicit `connectorCatalog`, or opt into the authenticated-read policy:
|
|
368
369
|
|
|
369
370
|
- **Template-declared app actions** — the safe app-level allow-list. For Plan that is `create-visual-plan`, `get-visual-plan`, `share-resource`, `navigate`, `tool-search`, and similar.
|
|
370
371
|
- **Builtin cross-app tools** — `list_apps`, `open_app`, `ask_app`, `create_embed_session`.
|
|
371
|
-
- **`tool-search`** is always present,
|
|
372
|
+
- **`tool-search`** is always present for discovery. A discovered action still needs to be in the connector catalog, included by the authenticated-read policy, or reached through the explicit full-catalog opt-in before `tools/call` can execute it.
|
|
372
373
|
|
|
373
|
-
Tools outside the list — for example `db-exec`, `seed-*`, the extension suite, browser-session tools, and context-xray tools — are not advertised, and calls to them are rejected with "Unknown tool" unless the caller has opted into the full catalog. This keeps each connected agent's context window small and removes footguns that are only safe for single-tenant local development.
|
|
374
|
+
Tools outside the list — for example `db-exec`, `seed-*`, the extension suite, browser-session tools, and context-xray tools — are not advertised, and calls to them are rejected with "Unknown tool" unless the caller has opted into the full catalog. This keeps each connected agent's context window small and removes footguns that are only safe for single-tenant local development.
|
|
374
375
|
|
|
375
|
-
`tool-search` works two ways: call it with **no query** for the full menu of tool names plus one-line descriptions (cheap, no schemas), or with a query for ranked matches with parameter summaries.
|
|
376
|
+
`tool-search` works two ways: call it with **no query** for the full menu of tool names plus one-line descriptions (cheap, no schemas), or with a query for ranked matches with parameter summaries. It helps a compacted client discover capabilities; use `ask_app` for anything that requires the app agent's broader reasoning or a write.
|
|
377
|
+
|
|
378
|
+
#### Authenticated reads by default
|
|
379
|
+
|
|
380
|
+
Apps that want direct tools to "just work" without maintaining a long allow-list can opt into automatic authenticated reads:
|
|
381
|
+
|
|
382
|
+
```ts
|
|
383
|
+
export default createAgentChatPlugin({
|
|
384
|
+
appId: "analytics",
|
|
385
|
+
externalAgents: {
|
|
386
|
+
authenticatedReads: "auto",
|
|
387
|
+
writes: "ask_app_only",
|
|
388
|
+
// Optional defense-in-depth veto for especially sensitive reads.
|
|
389
|
+
denyActions: ["get-sensitive-export"],
|
|
390
|
+
},
|
|
391
|
+
});
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
`authenticatedReads: "auto"` adds only actions that explicitly declare all of the following:
|
|
395
|
+
|
|
396
|
+
- `http: { method: "GET" }`
|
|
397
|
+
- `readOnly: true`
|
|
398
|
+
- `publicAgent: { expose: true, readOnly: true, requiresAuth: true }`
|
|
399
|
+
|
|
400
|
+
The policy combines those actions with any explicit `connectorCatalog` entries, then applies `denyActions`. With `writes: "ask_app_only"` (the default when automatic reads are enabled), mutating tools are not directly callable; route multi-step work and mutations through `ask_app`. `writes: "allowlisted"` exists only for apps that intentionally maintain an explicit write allow-list.
|
|
401
|
+
|
|
402
|
+
The policy is authenticated, not anonymous. MCP OAuth/connect identity is still carried through `runWithRequestContext`, so action-level access checks, owner/org scoping, and OAuth read scopes remain in force. Public/unauthenticated actions are not included by automatic reads.
|
|
403
|
+
|
|
404
|
+
Generic core `db-schema` and `db-query` are intentionally **not** automatic external reads. They remain available to the in-app agent through the normal scoped SQL path, but broad schema/SQL access is too powerful to infer from read-only metadata alone. If an app needs direct external querying, expose an app-owned GET action with its own access checks and bounded query contract, or add an explicit app-level table/column allow-list with row, byte, timeout, and audit limits. `db-exec` and `db-patch` remain outside the automatic surface.
|
|
405
|
+
|
|
406
|
+
This is a hard, name-based exclusion, not just a metadata omission: generic database/seed/browser-session/extension/Context X-Ray tools are never auto-exposed even if a future change accidentally annotates one with the full authenticated-read flag set — they always require an explicit `connectorCatalog` entry.
|
|
407
|
+
|
|
408
|
+
#### Identity and authorization
|
|
409
|
+
|
|
410
|
+
Authentication and authorization are separate gates. A verified MCP OAuth or
|
|
411
|
+
connect token identifies the caller and organization; `publicAgent` only opts
|
|
412
|
+
an action into the external protocol surface. It does not grant access to a
|
|
413
|
+
record. Actions must still use the normal `accessFilter`, `resolveAccess`, or
|
|
414
|
+
`assertAccess` helpers, so private documents and dashboards remain private,
|
|
415
|
+
shared resources follow their share/org rules, and cross-organization reads are
|
|
416
|
+
rejected.
|
|
417
|
+
|
|
418
|
+
The default Slack integration follows the same rule. A verified Slack DM is
|
|
419
|
+
matched to an existing Agent Native organization member and persisted as a
|
|
420
|
+
workspace/user identity link before the agent runs, and the resulting user/org
|
|
421
|
+
context loads that user's resources, instructions, and skills. Hydrated
|
|
422
|
+
workspace members whose email is missing or not yet an organization member run
|
|
423
|
+
as an anonymous org-scoped service principal instead — the same
|
|
424
|
+
org-wide-visibility tier shared channels get — with an agent-visible note and
|
|
425
|
+
a one-time Slack heads-up explaining how to gain personal access. Hydration
|
|
426
|
+
failures, guests and external (Slack Connect) members, and workspaces not
|
|
427
|
+
connected to an organization receive a polite decline reply instead of a
|
|
428
|
+
silent drop. Shared Slack channels use a service principal instead of
|
|
429
|
+
borrowing one participant's private permissions. Managed Slack OAuth requests
|
|
430
|
+
the `users:read.email` bot scope, and the generated Slack app manifest
|
|
431
|
+
requests it too. Existing Slack installs must be reconnected/reinstalled to
|
|
432
|
+
grant a newly added scope; legacy bot-token installs must add the scope in
|
|
433
|
+
Slack manually. Without it, DMs run in the anonymous org-scoped tier rather
|
|
434
|
+
than with personal access.
|
|
376
435
|
|
|
377
436
|
### Full tier (explicit opt-in only) {#full-tier}
|
|
378
437
|
|
|
@@ -469,7 +528,7 @@ On top of the per-action tools the MCP server exposes a stable verb set, so an e
|
|
|
469
528
|
|
|
470
529
|
`create_workspace_app` rejects any non-allow-listed template — the public template allow-list in `packages/shared-app-config/templates.ts` is authoritative and CI-guarded; an external agent cannot widen it. A same-named template action overrides a builtin (template-over-core precedence). Disable the whole set with `MCPConfig.builtinCrossAppTools: false`.
|
|
471
530
|
|
|
472
|
-
The tool and resource catalogs for app hosts are compact by default — see [Catalog tiers](#catalog-tiers). `publicAgent.expose` remains the opt-in for safe read/ingest tools outside that compact catalog; set `mcpApp.compactCatalog: true` only as a rare exception for actions that must appear in chat-host discovery.
|
|
531
|
+
The tool and resource catalogs for app hosts are compact by default — see [Catalog tiers](#catalog-tiers). `publicAgent.expose` remains the action-level opt-in for safe read/ingest tools outside that compact catalog; apps may set `externalAgents.authenticatedReads: "auto"` to advertise those authenticated reads without a hand-written catalog. Set `mcpApp.compactCatalog: true` only as a rare exception for actions that must appear in chat-host discovery.
|
|
473
532
|
|
|
474
533
|
For fast ChatGPT/Claude handoffs, the ideal path is direct: call the action that creates or opens the artifact, then let the MCP App launch the route. A Mail request should call `manage_draft` and render the real compose route. A dashboard request should call `open_app({ path, embed: true })` or a dashboard action with `mcpApp` and render the full Analytics route. Calendar, Forms, Content, Slides, Design, and Clips should follow the same pattern with their draft/create/search actions. `list_apps` is useful when the model must choose among granted apps; broad `resources/list`, full-catalog discovery, or `ask_app` delegation should not be the normal route for an obvious UI handoff.
|
|
475
534
|
|
|
@@ -324,8 +324,9 @@ https://dispatch.agent-native.com/_agent-native/mcp
|
|
|
324
324
|
</div>
|
|
325
325
|
</div>
|
|
326
326
|
<p class="diagram-muted note">
|
|
327
|
-
<code>tool-search</code>
|
|
328
|
-
|
|
327
|
+
يكتشف <code>tool-search</code> أدوات الطبقة الكاملة عند الطلب؛ ويجب أن يسمح
|
|
328
|
+
كتالوج الموصل أو سياسة القراءة المصادق عليها بالتنفيذ، ما لم يشترك المتصل
|
|
329
|
+
صراحةً في الطبقة الكاملة.
|
|
329
330
|
</p>
|
|
330
331
|
```
|
|
331
332
|
|
|
@@ -363,15 +364,47 @@ https://dispatch.agent-native.com/_agent-native/mcp
|
|
|
363
364
|
|
|
364
365
|
### الطبقة المدمجة / الموصل (افتراضي) {#connector-tier}
|
|
365
366
|
|
|
366
|
-
افتراضيًا، يرى كل وكيل متصل كتالوجًا صغيرًا ومنظمًا (~20–30 أداة مقابل ~105 أدوات في السطح الكامل)
|
|
367
|
+
افتراضيًا، يرى كل وكيل متصل كتالوجًا صغيرًا ومنظمًا (~20–30 أداة مقابل ~105 أدوات في السطح الكامل). يمكن للتطبيقات إما إدارة `connectorCatalog` صريح، أو الاشتراك في سياسة القراءة المصادق عليها:
|
|
367
368
|
|
|
368
369
|
- **التطبيق المُعلن عن القالب actions** — القائمة المسموح بها الآمنة على مستوى التطبيق. بالنسبة للخطة `create-visual-plan`، و`get-visual-plan`، و`share-resource`، و`navigate`، و`tool-search`، وما شابه ذلك.
|
|
369
370
|
- **إنشاء أدوات مشتركة بين التطبيقات** — `list_apps`، `open_app`، `ask_app`، `create_embed_session`.
|
|
370
|
-
- **`tool-search`** موجود
|
|
371
|
+
- **`tool-search`** موجود دائمًا للاكتشاف. لا يزال الإجراء المكتشف بحاجة إلى أن يكون في كتالوج الموصل، أو مشمولًا بسياسة القراءة المصادق عليها، أو متاحًا عبر الاشتراك الصريح في الكتالوج الكامل قبل أن يتمكن `tools/call` من تنفيذه.
|
|
371
372
|
|
|
372
|
-
لا يتم الإعلان عن الأدوات الموجودة خارج القائمة — على سبيل المثال `db-exec`، و`seed-*`، ومجموعة الامتدادات، وأدوات جلسة المتصفح، وأدوات سياق الأشعة السينية —، ويتم رفض الاستدعاءات إليها باستخدام "أداة غير معروفة" ما لم يشترك المتصل في الكتالوج الكامل. يؤدي هذا إلى إبقاء نافذة سياق كل وكيل متصل صغيرة وإزالة الأدوات الآمنة فقط للتطوير المحلي للمستأجر الواحد.
|
|
373
|
+
لا يتم الإعلان عن الأدوات الموجودة خارج القائمة — على سبيل المثال `db-exec`، و`seed-*`، ومجموعة الامتدادات، وأدوات جلسة المتصفح، وأدوات سياق الأشعة السينية —، ويتم رفض الاستدعاءات إليها باستخدام "أداة غير معروفة" ما لم يشترك المتصل في الكتالوج الكامل. يؤدي هذا إلى إبقاء نافذة سياق كل وكيل متصل صغيرة وإزالة الأدوات الآمنة فقط للتطوير المحلي للمستأجر الواحد.
|
|
373
374
|
|
|
374
|
-
يعمل `tool-search` بطريقتين: يمكنك استدعاؤه باستخدام **بدون استعلام** للقائمة الكاملة لأسماء الأدوات بالإضافة إلى أوصاف من سطر واحد (رخيص، بدون مخططات)، أو باستخدام استعلام للمطابقات المرتبة مع ملخصات المعلمات.
|
|
375
|
+
يعمل `tool-search` بطريقتين: يمكنك استدعاؤه باستخدام **بدون استعلام** للقائمة الكاملة لأسماء الأدوات بالإضافة إلى أوصاف من سطر واحد (رخيص، بدون مخططات)، أو باستخدام استعلام للمطابقات المرتبة مع ملخصات المعلمات. يساعد العميل المضغوط على اكتشاف الإمكانات؛ استخدم `ask_app` لأي شيء يتطلب استدلال وكيل التطبيق الأوسع أو عملية كتابة.
|
|
376
|
+
|
|
377
|
+
#### عمليات القراءة المصادق عليها افتراضيًا
|
|
378
|
+
|
|
379
|
+
يمكن للتطبيقات التي تريد أن تعمل أدوات القراءة المباشرة دون إدارة قائمة سماح طويلة الاشتراك في عمليات القراءة المصادق عليها تلقائيًا:
|
|
380
|
+
|
|
381
|
+
```ts
|
|
382
|
+
export default createAgentChatPlugin({
|
|
383
|
+
appId: "analytics",
|
|
384
|
+
externalAgents: {
|
|
385
|
+
authenticatedReads: "auto",
|
|
386
|
+
writes: "ask_app_only",
|
|
387
|
+
// حظر اختياري للدفاع المتعمق عن عمليات القراءة شديدة الحساسية.
|
|
388
|
+
denyActions: ["get-sensitive-export"],
|
|
389
|
+
},
|
|
390
|
+
});
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
يضيف `authenticatedReads: "auto"` فقط الإجراءات التي تعلن صراحةً كل ما يلي:
|
|
394
|
+
|
|
395
|
+
- `http: { method: "GET" }`
|
|
396
|
+
- `readOnly: true`
|
|
397
|
+
- `publicAgent: { expose: true, readOnly: true, requiresAuth: true }`
|
|
398
|
+
|
|
399
|
+
تجمع السياسة هذه الإجراءات مع أي إدخالات صريحة في `connectorCatalog`، ثم تطبق `denyActions`. مع `writes: "ask_app_only"` (الإعداد الافتراضي عند تمكين القراءة التلقائية)، لا يمكن استدعاء أدوات التغيير مباشرةً؛ وجّه العمل متعدد الخطوات وعمليات التغيير عبر `ask_app`. لا تستخدم `writes: "allowlisted"` إلا للتطبيقات التي تدير عمدًا قائمة سماح صريحة للكتابة.
|
|
400
|
+
|
|
401
|
+
هذه السياسة مصادق عليها وليست مجهولة. تستمر هوية MCP OAuth/connect عبر `runWithRequestContext`، لذلك تظل فحوصات الوصول على مستوى الإجراء ونطاق المالك/المؤسسة ونطاقات قراءة OAuth سارية. لا تتضمن القراءة التلقائية الإجراءات العامة أو غير المصادق عليها.
|
|
402
|
+
|
|
403
|
+
لا يتم تضمين `db-schema` و`db-query` الأساسيين تلقائيًا في القراءات الخارجية. يظلان متاحين لوكيل التطبيق داخل التطبيق عبر مسار SQL المقيّد المعتاد، لكن الوصول العام إلى المخطط وSQL واسع جدًا لاستنتاجه من بيانات القراءة فقط. إذا احتاج التطبيق إلى استعلام خارجي مباشر، فعليه إضافة action مملوك للتطبيق بحدود وصول واضحة أو قائمة سماح صريحة للجداول والأعمدة مع حدود للصفوف والبايت والمهلة والتدقيق. يبقى `db-exec` و`db-patch` خارج السطح التلقائي.
|
|
404
|
+
|
|
405
|
+
هذا استبعاد صارم يعتمد على الاسم، وليس مجرد إغفال في البيانات الوصفية: أدوات قاعدة البيانات وseed وجلسة المتصفح والامتدادات وسياق الأشعة السينية العامة لا يُكشف عنها تلقائيًا أبدًا، حتى لو وسم تغيير مستقبلي إحداها عن طريق الخطأ بمجموعة أعلام القراءة المصادق عليها الكاملة — فهي تتطلب دائمًا إدخالًا صريحًا في `connectorCatalog`.
|
|
406
|
+
|
|
407
|
+
تطابق رسائل Slack الخاصة التي تم التحقق منها عضوًا موجودًا في مؤسسة Agent Native، وتحفظ رابط هوية مساحة العمل/المستخدم قبل تشغيل الوكيل؛ ثم يحمّل سياق المستخدم/المؤسسة الناتج موارد ذلك المستخدم وتعليماته ومهاراته. أما أعضاء مساحة العمل الذين نجحت عملية جلب بياناتهم لكن بريدهم الإلكتروني مفقود أو لم ينضموا بعد إلى المؤسسة، فيعملون بهوية خدمة مجهولة ضمن نطاق المؤسسة — وهي طبقة الرؤية نفسها على مستوى المؤسسة التي تستخدمها القنوات المشتركة — مع ملاحظة يراها الوكيل وتنبيه لمرة واحدة في Slack يشرح كيفية الحصول على وصول شخصي. تتلقى حالات فشل جلب البيانات والضيوف والأعضاء الخارجيون (Slack Connect) ومساحات العمل غير المرتبطة بمؤسسة ردًا مهذبًا بالرفض بدل إسقاط الرسالة بصمت. تستخدم قنوات Slack المشتركة هوية خدمة ولا تستعير الأذونات الخاصة لأي مشارك. يطلب OAuth المُدار والنموذج المُنشأ لتطبيق Slack نطاق البوت `users:read.email`. يجب إعادة ربط/تثبيت عمليات التثبيت الحالية لمنح نطاق أُضيف حديثًا، بينما يجب أن تضيف عمليات التثبيت القديمة التي تستخدم رمز بوت النطاق يدويًا في Slack. من دونه، تعمل الرسائل الخاصة ضمن الطبقة المجهولة ذات نطاق المؤسسة بدل الوصول الشخصي.
|
|
375
408
|
|
|
376
409
|
### الطبقة الكاملة (الاشتراك الصريح فقط) {#full-tier}
|
|
377
410
|
|
|
@@ -473,7 +506,7 @@ Claude Code calls: manage-draft(to: "john@example.com", subject: "Q3 Report", bo
|
|
|
473
506
|
|
|
474
507
|
يرفض `create_workspace_app` أي قالب غير مدرج في القائمة المسموح بها - القائمة المسموح بها للقالب العام في `packages/shared-app-config/templates.ts` موثوقة ومحمية بواسطة CI؛ ولا يمكن لعامل خارجي توسيعه. يتجاوز إجراء القالب الذي يحمل نفس الاسم الإجراء المدمج (أسبقية القالب على المركز الأساسي). قم بتعطيل المجموعة بأكملها باستخدام `MCPConfig.builtinCrossAppTools: false`.
|
|
475
508
|
|
|
476
|
-
يتم ضغط كتالوجات الأدوات والموارد لمضيفي التطبيقات بشكل افتراضي - راجع [Catalog tiers](#catalog-tiers). يظل `publicAgent.expose` خيار الاشتراك
|
|
509
|
+
يتم ضغط كتالوجات الأدوات والموارد لمضيفي التطبيقات بشكل افتراضي - راجع [Catalog tiers](#catalog-tiers). يظل `publicAgent.expose` خيار الاشتراك على مستوى الإجراء لأدوات القراءة/التناول الآمن خارج هذا الكتالوج المدمج؛ ويمكن للتطبيقات تعيين `externalAgents.authenticatedReads: "auto"` للإعلان عن عمليات القراءة المصادق عليها دون كتالوج مكتوب يدويًا. قم بتعيين `mcpApp.compactCatalog: true` فقط كاستثناء نادر لـ actions التي يجب أن تظهر في اكتشاف مضيف الدردشة.
|
|
477
510
|
|
|
478
511
|
بالنسبة لعمليات التسليم السريعة لـ ChatGPT/Claude، يكون المسار المثالي مباشرًا: اتصل بالإجراء الذي ينشئ القطعة الأثرية أو يفتحها، ثم اسمح لتطبيق MCP بتشغيل المسار. يجب أن يستدعي طلب البريد `manage_draft` ويقدم مسار الإنشاء الحقيقي. يجب أن يستدعي طلب لوحة المعلومات `open_app({ path, embed: true })` أو إجراء لوحة المعلومات باستخدام `mcpApp` ويقدم مسار Analytics الكامل. يجب أن يتبع التقويم والنماذج والمحتوى والشرائح والتصميم والمقاطع نفس النمط مع المسودة/الإنشاء/البحث في actions. يكون `list_apps` مفيدًا عندما يتعين على النموذج الاختيار من بين التطبيقات الممنوحة؛ لا ينبغي أن يكون `resources/list` واسع النطاق، أو اكتشاف الكتالوج الكامل، أو تفويض `ask_app` هو المسار الطبيعي لعملية تسليم UI الواضحة.
|
|
479
512
|
|
|
@@ -325,8 +325,10 @@ Der MCP-Server stellt jedem Aufrufer standardmäßig einen kompakten Katalog ber
|
|
|
325
325
|
</div>
|
|
326
326
|
</div>
|
|
327
327
|
<p class="diagram-muted note">
|
|
328
|
-
<code>tool-search</code>
|
|
329
|
-
|
|
328
|
+
<code>tool-search</code> entdeckt Tools der vollständigen Stufe bei Bedarf;
|
|
329
|
+
der Connector-Katalog oder die Richtlinie für authentifizierte Lesezugriffe
|
|
330
|
+
muss die Ausführung weiterhin erlauben, sofern der Aufrufer nicht ausdrücklich
|
|
331
|
+
die vollständige Stufe gewählt hat.
|
|
330
332
|
</p>
|
|
331
333
|
```
|
|
332
334
|
|
|
@@ -364,15 +366,47 @@ Der MCP-Server stellt jedem Aufrufer standardmäßig einen kompakten Katalog ber
|
|
|
364
366
|
|
|
365
367
|
### Kompakt-/Connector-Stufe (Standard) {#connector-tier}
|
|
366
368
|
|
|
367
|
-
Standardmäßig sieht jeder verbundene Agent einen kleinen, kuratierten Katalog (ca. 20–30 Tools gegenüber ca. 105 in der gesamten Oberfläche):
|
|
369
|
+
Standardmäßig sieht jeder verbundene Agent einen kleinen, kuratierten Katalog (ca. 20–30 Tools gegenüber ca. 105 in der gesamten Oberfläche). Apps können entweder einen expliziten `connectorCatalog` pflegen oder die Richtlinie für authentifizierte Lesezugriffe aktivieren:
|
|
368
370
|
|
|
369
371
|
- **Von der Vorlage deklarierte App actions** – die sichere Zulassungsliste auf App-Ebene. Für den Plan sind das `create-visual-plan`, `get-visual-plan`, `share-resource`, `navigate`, `tool-search` und ähnliche.
|
|
370
372
|
- **Integrierte App-übergreifende Tools** – `list_apps`, `open_app`, `ask_app`, `create_embed_session`.
|
|
371
|
-
- **`tool-search`** ist immer vorhanden
|
|
373
|
+
- **`tool-search`** ist für die Erkennung immer vorhanden. Eine gefundene Action muss weiterhin im Connector-Katalog stehen, von der Richtlinie für authentifizierte Lesezugriffe erfasst oder über das explizite Opt-in für den vollständigen Katalog aktiviert sein, bevor `tools/call` sie ausführen kann.
|
|
372
374
|
|
|
373
|
-
Tools außerhalb der Liste – zum Beispiel `db-exec`, `seed-*`, die Erweiterungssuite, Browser-Sitzungstools und Kontext-Röntgentools – werden nicht angekündigt und Aufrufe an sie werden mit „Unbekanntes Tool“ abgelehnt, es sei denn, der Aufrufer hat sich für den vollständigen Katalog entschieden. Dies hält das Kontextfenster jedes verbundenen Agenten klein und entfernt Fußfeuerwaffen, die nur für die lokale Entwicklung mit einem Mandanten sicher sind.
|
|
375
|
+
Tools außerhalb der Liste – zum Beispiel `db-exec`, `seed-*`, die Erweiterungssuite, Browser-Sitzungstools und Kontext-Röntgentools – werden nicht angekündigt und Aufrufe an sie werden mit „Unbekanntes Tool“ abgelehnt, es sei denn, der Aufrufer hat sich für den vollständigen Katalog entschieden. Dies hält das Kontextfenster jedes verbundenen Agenten klein und entfernt Fußfeuerwaffen, die nur für die lokale Entwicklung mit einem Mandanten sicher sind.
|
|
374
376
|
|
|
375
|
-
`tool-search` funktioniert auf zwei Arten: Aufruf mit **
|
|
377
|
+
`tool-search` funktioniert auf zwei Arten: Aufruf mit **keiner Abfrage** für das vollständige Menü der Tool-Namen plus einzeilige Beschreibungen (günstig, keine Schemata) oder mit einer Abfrage für sortierte Treffer mit Parameterzusammenfassungen. Es hilft kompakten Clients, Funktionen zu entdecken; verwenden Sie `ask_app` für Aufgaben, die das umfassendere Schlussfolgern des App-Agenten oder einen Schreibvorgang benötigen.
|
|
378
|
+
|
|
379
|
+
#### Authentifizierte Lesezugriffe als Standard
|
|
380
|
+
|
|
381
|
+
Apps, deren direkte Lesetools ohne lange Zulassungsliste funktionieren sollen, können automatische authentifizierte Lesezugriffe aktivieren:
|
|
382
|
+
|
|
383
|
+
```ts
|
|
384
|
+
export default createAgentChatPlugin({
|
|
385
|
+
appId: "analytics",
|
|
386
|
+
externalAgents: {
|
|
387
|
+
authenticatedReads: "auto",
|
|
388
|
+
writes: "ask_app_only",
|
|
389
|
+
// Optionale zusätzliche Sperre für besonders sensible Lesezugriffe.
|
|
390
|
+
denyActions: ["get-sensitive-export"],
|
|
391
|
+
},
|
|
392
|
+
});
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
`authenticatedReads: "auto"` fügt nur Actions hinzu, die ausdrücklich alle folgenden Merkmale deklarieren:
|
|
396
|
+
|
|
397
|
+
- `http: { method: "GET" }`
|
|
398
|
+
- `readOnly: true`
|
|
399
|
+
- `publicAgent: { expose: true, readOnly: true, requiresAuth: true }`
|
|
400
|
+
|
|
401
|
+
Die Richtlinie kombiniert diese Actions mit expliziten `connectorCatalog`-Einträgen und wendet anschließend `denyActions` an. Mit `writes: "ask_app_only"` (dem Standard bei aktivierten automatischen Lesezugriffen) sind mutierende Tools nicht direkt aufrufbar; leiten Sie mehrstufige Arbeit und Mutationen über `ask_app`. `writes: "allowlisted"` ist nur für Apps vorgesehen, die bewusst eine explizite Schreib-Zulassungsliste pflegen.
|
|
402
|
+
|
|
403
|
+
Die Richtlinie ist authentifiziert, nicht anonym. Die MCP-OAuth-/Connect-Identität wird über `runWithRequestContext` weitergegeben, sodass Action-Zugriffsprüfungen, Eigentümer-/Organisationsbereiche und OAuth-Leseberechtigungen wirksam bleiben. Öffentliche oder nicht authentifizierte Actions werden nicht automatisch aufgenommen.
|
|
404
|
+
|
|
405
|
+
Core-`db-schema` und `db-query` werden nicht automatisch als externe Lesezugriffe veröffentlicht. Sie bleiben für den internen App-Agenten über den normalen, abgegrenzten SQL-Pfad verfügbar, aber ein breiter Schema-/SQL-Zugriff ist zu mächtig, um ihn allein aus Read-only-Metadaten abzuleiten. Benötigt eine App direkte externe Abfragen, muss sie eine eigene GET-Action mit Zugriffsprüfungen und festen Grenzen oder eine explizite Tabellen-/Spalten-Allowlist mit Zeilen-, Byte-, Zeit- und Audit-Limits bereitstellen. `db-exec` und `db-patch` bleiben außerhalb der automatischen Oberfläche.
|
|
406
|
+
|
|
407
|
+
Dies ist ein harter, namensbasierter Ausschluss und keine bloße Auslassung in den Metadaten: generische Datenbank-, Seed-, Browser-Sitzungs-, Erweiterungs- und Kontext-Röntgen-Tools werden niemals automatisch freigegeben, selbst wenn eine zukünftige Änderung eines davon versehentlich mit dem vollständigen Satz an Flags für authentifizierte Lesezugriffe versieht — sie benötigen immer einen expliziten `connectorCatalog`-Eintrag.
|
|
408
|
+
|
|
409
|
+
Eine verifizierte Slack-DM wird vor dem Start des Agenten einem bestehenden Mitglied der Agent-Native-Organisation zugeordnet und als Identitätsverknüpfung zwischen Workspace und Benutzer gespeichert. Der daraus entstehende Benutzer-/Organisationskontext lädt die Ressourcen, Anweisungen und Skills dieses Benutzers. Erfolgreich geladene Workspace-Mitglieder, deren E-Mail-Adresse fehlt oder die noch kein Organisationsmitglied sind, werden stattdessen als anonymer, auf die Organisation begrenzter Service-Principal ausgeführt — mit derselben organisationsweiten Sichtbarkeit wie gemeinsame Kanäle. Der Agent erhält dazu einen sichtbaren Hinweis, und Slack erklärt einmalig, wie persönlicher Zugriff erlangt werden kann. Bei fehlgeschlagener Profilladung, Gästen und externen Mitgliedern (Slack Connect) sowie Workspaces ohne Organisationsverknüpfung wird höflich abgelehnt, statt die Nachricht stillschweigend zu verwerfen. Gemeinsame Slack-Kanäle verwenden einen Service-Principal und übernehmen keine privaten Berechtigungen eines Teilnehmers. Managed OAuth und das generierte Slack-App-Manifest fordern den Bot-Scope `users:read.email`. Bestehende Installationen müssen erneut verbunden/installiert werden, um einen neu hinzugefügten Scope zu gewähren; ältere Bot-Token-Installationen müssen ihn in Slack manuell hinzufügen. Ohne diesen Scope werden DMs in der anonymen, organisationsbegrenzten Stufe statt mit persönlichem Zugriff ausgeführt.
|
|
376
410
|
|
|
377
411
|
### Vollständige Stufe (nur explizites Opt-in) {#full-tier}
|
|
378
412
|
|
|
@@ -474,7 +508,7 @@ Zusätzlich zu den Tools pro Aktion stellt der MCP-Server einen stabilen Verbsat
|
|
|
474
508
|
|
|
475
509
|
`create_workspace_app` lehnt alle nicht auf der Zulassungsliste aufgeführten Vorlagen ab – die öffentliche Zulassungsliste für Vorlagen in `packages/shared-app-config/templates.ts` ist maßgeblich und CI-geschützt; ein externer Agent kann es nicht erweitern. Eine gleichnamige Vorlagenaktion überschreibt eine integrierte Aktion (Vorrang der Vorlage vor dem Kern). Deaktivieren Sie das gesamte Set mit `MCPConfig.builtinCrossAppTools: false`.
|
|
476
510
|
|
|
477
|
-
Die Tool- und Ressourcenkataloge für App-Hosts sind standardmäßig kompakt – siehe [Catalog tiers](#catalog-tiers). `publicAgent.expose` bleibt
|
|
511
|
+
Die Tool- und Ressourcenkataloge für App-Hosts sind standardmäßig kompakt – siehe [Catalog tiers](#catalog-tiers). `publicAgent.expose` bleibt das Opt-in auf Action-Ebene für sichere Lese-/Ingest-Tools außerhalb dieses kompakten Katalogs; Apps können mit `externalAgents.authenticatedReads: "auto"` solche authentifizierten Lesezugriffe ohne handgeschriebenen Katalog veröffentlichen. Legen Sie `mcpApp.compactCatalog: true` nur als seltene Ausnahme für Actions fest, die in der Chat-Host-Erkennung erscheinen müssen.
|
|
478
512
|
|
|
479
513
|
Für schnelle ChatGPT/Claude-Übergaben ist der ideale Pfad direkt: Rufen Sie die Aktion auf, die das Artefakt erstellt oder öffnet, und lassen Sie dann die MCP-App die Route starten. Eine Mail-Anfrage sollte `manage_draft` aufrufen und die tatsächliche Verfassen-Route rendern. Eine Dashboard-Anfrage sollte `open_app({ path, embed: true })` oder eine Dashboard-Aktion mit `mcpApp` aufrufen und die vollständige Analytics-Route rendern. Kalender, Formulare, Inhalte, Folien, Design und Clips sollten beim Entwerfen/Erstellen/Suchen dem gleichen Muster folgen actions. `list_apps` ist nützlich, wenn das Modell zwischen verfügbaren Apps wählen muss; Breites `resources/list`, vollständige Katalogerkennung oder `ask_app`-Delegierung sollten nicht der normale Weg für eine offensichtliche UI-Übergabe sein.
|
|
480
514
|
|
|
@@ -325,8 +325,10 @@ El servidor MCP ofrece un **catálogo compacto de forma predeterminada para cada
|
|
|
325
325
|
</div>
|
|
326
326
|
</div>
|
|
327
327
|
<p class="diagram-muted note">
|
|
328
|
-
<code>tool-search</code>
|
|
329
|
-
|
|
328
|
+
<code>tool-search</code> descubre herramientas del nivel completo bajo
|
|
329
|
+
demanda; el catálogo del conector o la política de lecturas autenticadas
|
|
330
|
+
todavía debe permitir la ejecución, salvo que el cliente opte explícitamente
|
|
331
|
+
por el nivel completo.
|
|
330
332
|
</p>
|
|
331
333
|
```
|
|
332
334
|
|
|
@@ -364,15 +366,47 @@ El servidor MCP ofrece un **catálogo compacto de forma predeterminada para cada
|
|
|
364
366
|
|
|
365
367
|
### Nivel compacto/conector (predeterminado) {#connector-tier}
|
|
366
368
|
|
|
367
|
-
De forma predeterminada, cada agente conectado ve un catálogo pequeño y seleccionado (entre 20 y 30 herramientas frente a 105 en la superficie completa):
|
|
369
|
+
De forma predeterminada, cada agente conectado ve un catálogo pequeño y seleccionado (entre 20 y 30 herramientas frente a 105 en la superficie completa). Las aplicaciones pueden mantener un `connectorCatalog` explícito u optar por la política de lecturas autenticadas:
|
|
368
370
|
|
|
369
371
|
- **Aplicación declarada por plantilla actions**: la lista de aplicaciones seguras permitidas a nivel. Para Plan que es `create-visual-plan`, `get-visual-plan`, `share-resource`, `navigate`, `tool-search` y similares.
|
|
370
372
|
- **Herramientas integradas entre aplicaciones**: `list_apps`, `open_app`, `ask_app`, `create_embed_session`.
|
|
371
|
-
- **`tool-search`** siempre está presente, por
|
|
373
|
+
- **`tool-search`** siempre está presente para el descubrimiento. Una action descubierta aún debe estar en el catálogo del conector, incluida por la política de lecturas autenticadas o habilitada mediante la opción explícita de catálogo completo antes de que `tools/call` pueda ejecutarla.
|
|
372
374
|
|
|
373
|
-
Las herramientas fuera de la lista (por ejemplo, `db-exec`, `seed-*`, el conjunto de extensiones, las herramientas de sesión del navegador y las herramientas de rayos X de contexto) no se anuncian y las llamadas a ellas se rechazan con "Herramienta desconocida" a menos que la persona que llama haya optado por el catálogo completo. Esto mantiene pequeña la ventana de contexto de cada agente conectado y elimina las barreras que solo son seguras para el desarrollo local de un solo inquilino.
|
|
375
|
+
Las herramientas fuera de la lista (por ejemplo, `db-exec`, `seed-*`, el conjunto de extensiones, las herramientas de sesión del navegador y las herramientas de rayos X de contexto) no se anuncian y las llamadas a ellas se rechazan con "Herramienta desconocida" a menos que la persona que llama haya optado por el catálogo completo. Esto mantiene pequeña la ventana de contexto de cada agente conectado y elimina las barreras que solo son seguras para el desarrollo local de un solo inquilino.
|
|
374
376
|
|
|
375
|
-
`tool-search` funciona de dos maneras: llámelo
|
|
377
|
+
`tool-search` funciona de dos maneras: llámelo **sin consulta** para ver el menú completo de nombres de herramientas más descripciones de una línea (barato, sin esquemas), o con una consulta para obtener coincidencias clasificadas con resúmenes de parámetros. Ayuda a un cliente compacto a descubrir capacidades; use `ask_app` para cualquier tarea que requiera el razonamiento más amplio del agente de la aplicación o una escritura.
|
|
378
|
+
|
|
379
|
+
#### Lecturas autenticadas de forma predeterminada
|
|
380
|
+
|
|
381
|
+
Las aplicaciones que quieran que las herramientas de lectura directas funcionen sin mantener una lista larga pueden optar por lecturas autenticadas automáticas:
|
|
382
|
+
|
|
383
|
+
```ts
|
|
384
|
+
export default createAgentChatPlugin({
|
|
385
|
+
appId: "analytics",
|
|
386
|
+
externalAgents: {
|
|
387
|
+
authenticatedReads: "auto",
|
|
388
|
+
writes: "ask_app_only",
|
|
389
|
+
// Veto opcional de defensa en profundidad para lecturas especialmente sensibles.
|
|
390
|
+
denyActions: ["get-sensitive-export"],
|
|
391
|
+
},
|
|
392
|
+
});
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
`authenticatedReads: "auto"` añade solo las actions que declaran explícitamente todo lo siguiente:
|
|
396
|
+
|
|
397
|
+
- `http: { method: "GET" }`
|
|
398
|
+
- `readOnly: true`
|
|
399
|
+
- `publicAgent: { expose: true, readOnly: true, requiresAuth: true }`
|
|
400
|
+
|
|
401
|
+
La política combina esas actions con las entradas explícitas de `connectorCatalog` y luego aplica `denyActions`. Con `writes: "ask_app_only"` (el valor predeterminado al habilitar lecturas automáticas), las herramientas que mutan datos no pueden invocarse directamente; dirija el trabajo de varios pasos y las mutaciones mediante `ask_app`. `writes: "allowlisted"` existe solo para aplicaciones que mantienen intencionadamente una lista explícita de escrituras.
|
|
402
|
+
|
|
403
|
+
La política es autenticada, no anónima. La identidad de MCP OAuth/connect se conserva mediante `runWithRequestContext`, por lo que siguen vigentes las comprobaciones de acceso de cada action, el ámbito de propietario/organización y los ámbitos de lectura de OAuth. Las actions públicas o no autenticadas no se incluyen automáticamente.
|
|
404
|
+
|
|
405
|
+
`db-schema` y `db-query` de Core no se exponen automáticamente como lecturas externas. Siguen disponibles para el agente interno de la aplicación mediante el flujo SQL con ámbito habitual, pero el acceso amplio al esquema/SQL es demasiado potente para inferirlo solo de metadatos de lectura. Si una aplicación necesita consultas externas directas, debe exponer una action GET propia con controles y límites de acceso, o una lista explícita de tablas/columnas con límites de filas, bytes, tiempo y auditoría. `db-exec` y `db-patch` quedan fuera de la superficie automática.
|
|
406
|
+
|
|
407
|
+
Se trata de una exclusión estricta basada en el nombre, no solo de una omisión de metadatos: las herramientas genéricas de base de datos, seed, sesión del navegador, extensiones y rayos X de contexto nunca se exponen automáticamente, aunque un cambio futuro anote alguna de ellas por error con el conjunto completo de indicadores de lectura autenticada — siempre requieren una entrada explícita en `connectorCatalog`.
|
|
408
|
+
|
|
409
|
+
Antes de ejecutar el agente, un mensaje directo verificado de Slack se asocia a un miembro existente de la organización de Agent Native y se guarda el vínculo de identidad entre el espacio de trabajo y el usuario. El contexto resultante del usuario y la organización carga los recursos, las instrucciones y las habilidades de ese usuario. Los miembros del espacio de trabajo cuyo perfil se ha obtenido correctamente, pero que no tienen correo electrónico o aún no pertenecen a la organización, se ejecutan como un principal de servicio anónimo limitado a la organización: el mismo nivel de visibilidad para toda la organización que usan los canales compartidos. El agente recibe una nota visible y Slack muestra una sola vez cómo obtener acceso personal. Si falla la obtención del perfil, si se trata de invitados o miembros externos (Slack Connect), o si el espacio de trabajo no está conectado a una organización, se envía una respuesta cortés de rechazo en vez de descartar el mensaje en silencio. Los canales compartidos de Slack usan un principal de servicio y no heredan los permisos privados de ningún participante. OAuth administrado y el manifiesto generado de la aplicación de Slack solicitan el ámbito de bot `users:read.email`. Las instalaciones existentes deben volver a conectarse o instalarse para conceder un ámbito recién añadido; las instalaciones antiguas con token de bot deben añadirlo manualmente en Slack. Sin él, los mensajes directos se ejecutan en el nivel anónimo limitado a la organización, no con acceso personal.
|
|
376
410
|
|
|
377
411
|
### Nivel completo (solo suscripción explícita) {#full-tier}
|
|
378
412
|
|
|
@@ -474,7 +508,7 @@ Además de las herramientas por acción, el servidor MCP expone un conjunto de v
|
|
|
474
508
|
|
|
475
509
|
`create_workspace_app` rechaza cualquier plantilla no incluida en la lista de permitidos: la lista de plantillas públicas permitidas en `packages/shared-app-config/templates.ts` tiene autoridad y está protegida por CI; un agente externo no puede ampliarlo. Una acción de plantilla con el mismo nombre anula una acción incorporada (precedencia de plantilla sobre núcleo). Desactive todo el conjunto con `MCPConfig.builtinCrossAppTools: false`.
|
|
476
510
|
|
|
477
|
-
Los catálogos de herramientas y recursos para hosts de aplicaciones son compactos de forma predeterminada; consulte [Catalog tiers](#catalog-tiers). `publicAgent.expose` sigue siendo la opción para herramientas de lectura/ingesta seguras fuera de ese catálogo compacto;
|
|
511
|
+
Los catálogos de herramientas y recursos para hosts de aplicaciones son compactos de forma predeterminada; consulte [Catalog tiers](#catalog-tiers). `publicAgent.expose` sigue siendo la opción a nivel de action para herramientas de lectura/ingesta seguras fuera de ese catálogo compacto; las aplicaciones pueden configurar `externalAgents.authenticatedReads: "auto"` para anunciar esas lecturas autenticadas sin un catálogo escrito a mano. Configure `mcpApp.compactCatalog: true` solo como una rara excepción para actions que deban aparecer en el descubrimiento del host de chat.
|
|
478
512
|
|
|
479
513
|
Para transferencias rápidas de ChatGPT/Claude, la ruta ideal es directa: llame a la acción que crea o abre el artefacto, luego deje que la aplicación MCP inicie la ruta. Una solicitud de correo debe llamar a `manage_draft` y representar la ruta de redacción real. Una solicitud de panel debe llamar a `open_app({ path, embed: true })` o una acción de panel con `mcpApp` y representar la ruta de análisis completa. Calendario, formularios, contenido, diapositivas, diseño y clips deben seguir el mismo patrón con su borrador/creación/búsqueda actions. `list_apps` es útil cuando el modelo debe elegir entre las aplicaciones otorgadas; `resources/list` amplio, descubrimiento de catálogo completo o delegación de `ask_app` no deberían ser la ruta normal para una transferencia obvia de UI.
|
|
480
514
|
|
|
@@ -325,8 +325,10 @@ Le serveur MCP propose par défaut un **catalogue compact à chaque appelant**
|
|
|
325
325
|
</div>
|
|
326
326
|
</div>
|
|
327
327
|
<p class="diagram-muted note">
|
|
328
|
-
<code>tool-search</code>
|
|
329
|
-
|
|
328
|
+
<code>tool-search</code> découvre les outils du niveau complet à la demande ;
|
|
329
|
+
le catalogue du connecteur ou la politique de lectures authentifiées doit
|
|
330
|
+
encore autoriser l'exécution, sauf si l'appelant choisit explicitement le
|
|
331
|
+
niveau complet.
|
|
330
332
|
</p>
|
|
331
333
|
```
|
|
332
334
|
|
|
@@ -364,15 +366,47 @@ Le serveur MCP propose par défaut un **catalogue compact à chaque appelant**
|
|
|
364
366
|
|
|
365
367
|
### Niveau Compact/Connecteur (par défaut) {#connector-tier}
|
|
366
368
|
|
|
367
|
-
Par défaut, chaque agent connecté voit un petit catalogue organisé (environ 20 à 30 outils contre environ 105 dans la surface complète) :
|
|
369
|
+
Par défaut, chaque agent connecté voit un petit catalogue organisé (environ 20 à 30 outils contre environ 105 dans la surface complète). Les applications peuvent maintenir un `connectorCatalog` explicite ou choisir la politique de lectures authentifiées :
|
|
368
370
|
|
|
369
371
|
- **Application déclarée par modèle actions** — la liste verte sécurisée au niveau de l'application. Pour les plans `create-visual-plan`, `get-visual-plan`, `share-resource`, `navigate`, `tool-search` et similaires.
|
|
370
372
|
- **Outils multi-applications intégrés** : `list_apps`, `open_app`, `ask_app`, `create_embed_session`.
|
|
371
|
-
- **`tool-search`** est toujours présent
|
|
373
|
+
- **`tool-search`** est toujours présent pour la découverte. Une action découverte doit encore figurer dans le catalogue du connecteur, être incluse par la politique de lectures authentifiées ou être activée par l'option explicite de catalogue complet avant que `tools/call` puisse l'exécuter.
|
|
372
374
|
|
|
373
|
-
Les outils en dehors de la liste (par exemple `db-exec`, `seed-*`, la suite d'extensions, les outils de session de navigateur et les outils de radiographie contextuelle) ne sont pas annoncés et les appels vers ces outils sont rejetés avec « Outil inconnu », sauf si l'appelant a choisi d'accéder au catalogue complet. Cela permet de garder la fenêtre contextuelle de chaque agent connecté petite et de supprimer les armes à pied qui ne sont sûres que pour le développement local à locataire unique.
|
|
375
|
+
Les outils en dehors de la liste (par exemple `db-exec`, `seed-*`, la suite d'extensions, les outils de session de navigateur et les outils de radiographie contextuelle) ne sont pas annoncés et les appels vers ces outils sont rejetés avec « Outil inconnu », sauf si l'appelant a choisi d'accéder au catalogue complet. Cela permet de garder la fenêtre contextuelle de chaque agent connecté petite et de supprimer les armes à pied qui ne sont sûres que pour le développement local à locataire unique.
|
|
374
376
|
|
|
375
|
-
`tool-search` fonctionne de deux manières : appelez-le
|
|
377
|
+
`tool-search` fonctionne de deux manières : appelez-le **sans requête** pour obtenir le menu complet des noms d'outils et des descriptions sur une ligne (peu coûteux, sans schémas), ou avec une requête pour obtenir des correspondances classées et des résumés de paramètres. Il aide un client compact à découvrir les capacités ; utilisez `ask_app` pour tout ce qui nécessite le raisonnement plus large de l'agent de l'application ou une écriture.
|
|
378
|
+
|
|
379
|
+
#### Lectures authentifiées par défaut
|
|
380
|
+
|
|
381
|
+
Les applications qui souhaitent que les outils de lecture directe fonctionnent sans maintenir une longue liste d'autorisation peuvent activer les lectures authentifiées automatiques :
|
|
382
|
+
|
|
383
|
+
```ts
|
|
384
|
+
export default createAgentChatPlugin({
|
|
385
|
+
appId: "analytics",
|
|
386
|
+
externalAgents: {
|
|
387
|
+
authenticatedReads: "auto",
|
|
388
|
+
writes: "ask_app_only",
|
|
389
|
+
// Veto facultatif de défense en profondeur pour les lectures particulièrement sensibles.
|
|
390
|
+
denyActions: ["get-sensitive-export"],
|
|
391
|
+
},
|
|
392
|
+
});
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
`authenticatedReads: "auto"` ajoute uniquement les actions qui déclarent explicitement tous les éléments suivants :
|
|
396
|
+
|
|
397
|
+
- `http: { method: "GET" }`
|
|
398
|
+
- `readOnly: true`
|
|
399
|
+
- `publicAgent: { expose: true, readOnly: true, requiresAuth: true }`
|
|
400
|
+
|
|
401
|
+
La politique combine ces actions avec les entrées explicites de `connectorCatalog`, puis applique `denyActions`. Avec `writes: "ask_app_only"` (la valeur par défaut quand les lectures automatiques sont activées), les outils qui modifient des données ne sont pas directement appelables ; acheminez le travail en plusieurs étapes et les mutations via `ask_app`. `writes: "allowlisted"` est réservé aux applications qui maintiennent volontairement une liste explicite d'écritures autorisées.
|
|
402
|
+
|
|
403
|
+
La politique est authentifiée, et non anonyme. L'identité MCP OAuth/connect est transmise via `runWithRequestContext`, de sorte que les contrôles d'accès des actions, les périmètres propriétaire/organisation et les portées de lecture OAuth restent appliqués. Les actions publiques ou non authentifiées ne sont pas incluses automatiquement.
|
|
404
|
+
|
|
405
|
+
Les outils Core `db-schema` et `db-query` ne sont pas automatiquement exposés comme lectures externes. Ils restent disponibles pour l'agent interne de l'application via le chemin SQL habituellement délimité, mais un accès large au schéma/SQL est trop puissant pour être déduit de simples métadonnées de lecture. Si une application a besoin de requêtes externes directes, elle doit exposer une action GET propre avec des contrôles d'accès et des limites, ou une liste explicite de tables/colonnes avec des limites de lignes, d'octets, de durée et d'audit. `db-exec` et `db-patch` restent hors de la surface automatique.
|
|
406
|
+
|
|
407
|
+
Il s'agit d'une exclusion stricte basée sur le nom, et non d'une simple omission de métadonnées : les outils génériques de base de données, de seed, de session de navigateur, d'extensions et de radiographie contextuelle ne sont jamais exposés automatiquement, même si une modification future annote accidentellement l'un d'eux avec l'ensemble complet des indicateurs de lecture authentifiée — ils nécessitent toujours une entrée explicite dans `connectorCatalog`.
|
|
408
|
+
|
|
409
|
+
Avant l'exécution de l'agent, un message direct Slack vérifié est associé à un membre existant de l'organisation Agent Native et le lien d'identité entre l'espace de travail et l'utilisateur est enregistré. Le contexte utilisateur/organisation qui en résulte charge les ressources, les instructions et les compétences de cet utilisateur. Les membres de l'espace de travail dont le profil a bien été chargé, mais dont l'adresse e-mail est absente ou qui ne sont pas encore membres de l'organisation, sont exécutés comme principal de service anonyme limité à l'organisation : le même niveau de visibilité à l'échelle de l'organisation que celui des canaux partagés. L'agent reçoit une note visible et Slack explique une fois comment obtenir un accès personnel. En cas d'échec du chargement du profil, pour les invités et membres externes (Slack Connect), ou pour les espaces de travail non connectés à une organisation, une réponse de refus polie est envoyée au lieu d'ignorer silencieusement le message. Les canaux Slack partagés utilisent un principal de service et n'empruntent pas les autorisations privées d'un participant. OAuth géré et le manifeste d'application Slack généré demandent la portée de bot `users:read.email`. Les installations existantes doivent être reconnectées ou réinstallées pour accorder une portée nouvellement ajoutée ; les anciennes installations par jeton de bot doivent l'ajouter manuellement dans Slack. Sans cette portée, les messages directs s'exécutent dans le niveau anonyme limité à l'organisation plutôt qu'avec un accès personnel.
|
|
376
410
|
|
|
377
411
|
### Niveau complet (adhésion explicite uniquement) {#full-tier}
|
|
378
412
|
|
|
@@ -474,7 +508,7 @@ En plus des outils par action, le serveur MCP expose un ensemble de verbes stabl
|
|
|
474
508
|
|
|
475
509
|
`create_workspace_app` rejette tout modèle non autorisé : la liste verte de modèles publics dans `packages/shared-app-config/templates.ts` fait autorité et est protégée par CI ; un agent extérieur ne peut pas l’élargir. Une action de modèle du même nom remplace une action intégrée (précédence du modèle sur le noyau). Désactivez l'ensemble avec `MCPConfig.builtinCrossAppTools: false`.
|
|
476
510
|
|
|
477
|
-
Les catalogues d'outils et de ressources pour les hôtes d'applications sont compacts par défaut – voir [Catalog tiers](#catalog-tiers). `publicAgent.expose` reste l'option
|
|
511
|
+
Les catalogues d'outils et de ressources pour les hôtes d'applications sont compacts par défaut – voir [Catalog tiers](#catalog-tiers). `publicAgent.expose` reste l'option au niveau de l'action pour les outils de lecture/ingestion sécurisés en dehors de ce catalogue compact ; les applications peuvent définir `externalAgents.authenticatedReads: "auto"` pour annoncer ces lectures authentifiées sans catalogue rédigé à la main. Définissez `mcpApp.compactCatalog: true` uniquement comme une exception rare pour les actions qui doivent apparaître dans la découverte de l'hôte de discussion.
|
|
478
512
|
|
|
479
513
|
Pour des transferts rapides ChatGPT/Claude, le chemin idéal est direct : appelez l'action qui crée ou ouvre l'artefact, puis laissez l'application MCP lancer l'itinéraire. Une requête Mail doit appeler `manage_draft` et afficher la véritable route de composition. Une demande de tableau de bord doit appeler `open_app({ path, embed: true })` ou une action de tableau de bord avec `mcpApp` et afficher l'itinéraire Analytics complet. Le calendrier, les formulaires, le contenu, les diapositives, la conception et les clips doivent suivre le même modèle avec leur brouillon/création/recherche actions. `list_apps` est utile lorsque le modèle doit choisir parmi les applications accordées ; Une large `resources/list`, une découverte de catalogue complet ou une délégation `ask_app` ne devraient pas être la voie normale pour un transfert évident de UI.
|
|
480
514
|
|
|
@@ -324,8 +324,9 @@ MCP सर्वर प्रत्येक कॉलर को डिफ़ॉ
|
|
|
324
324
|
</div>
|
|
325
325
|
</div>
|
|
326
326
|
<p class="diagram-muted note">
|
|
327
|
-
<code>tool-search</code>
|
|
328
|
-
|
|
327
|
+
<code>tool-search</code> मांग पर पूर्ण-स्तरीय टूल खोजता है; निष्पादन के लिए
|
|
328
|
+
कनेक्टर कैटलॉग या प्रमाणित-पठन नीति की अनुमति अब भी आवश्यक है, जब तक कॉलर
|
|
329
|
+
स्पष्ट रूप से पूर्ण स्तर नहीं चुनता।
|
|
329
330
|
</p>
|
|
330
331
|
```
|
|
331
332
|
|
|
@@ -363,15 +364,47 @@ MCP सर्वर प्रत्येक कॉलर को डिफ़ॉ
|
|
|
363
364
|
|
|
364
365
|
### कॉम्पैक्ट / कनेक्टर टियर (डिफ़ॉल्ट) {#connector-tier}
|
|
365
366
|
|
|
366
|
-
डिफ़ॉल्ट रूप से प्रत्येक कनेक्टेड एजेंट एक छोटा, क्यूरेटेड कैटलॉग देखता है (~20-30 टूल बनाम पूर्ण सतह में ~105)
|
|
367
|
+
डिफ़ॉल्ट रूप से प्रत्येक कनेक्टेड एजेंट एक छोटा, क्यूरेटेड कैटलॉग देखता है (~20-30 टूल बनाम पूर्ण सतह में ~105)। ऐप या तो स्पष्ट `connectorCatalog` बनाए रख सकते हैं, या प्रमाणित-पठन नीति चुन सकते हैं:
|
|
367
368
|
|
|
368
369
|
- **टेम्पलेट-घोषित ऐप actions** — सुरक्षित ऐप-स्तरीय अनुमति-सूची। योजना के लिए जो `create-visual-plan`, `get-visual-plan`, `share-resource`, `navigate`, `tool-search`, और समान है।
|
|
369
370
|
- **अंतर्निहित क्रॉस-ऐप टूल** - `list_apps`, `open_app`, `ask_app`, `create_embed_session`।
|
|
370
|
-
- **`tool-search`** हमेशा मौजूद रहता
|
|
371
|
+
- **`tool-search`** खोज के लिए हमेशा मौजूद रहता है। खोजे गए action को `tools/call` से चलाने से पहले कनेक्टर कैटलॉग में होना, प्रमाणित-पठन नीति में शामिल होना, या स्पष्ट पूर्ण-कैटलॉग ऑप्ट-इन से सक्षम होना आवश्यक है।
|
|
371
372
|
|
|
372
|
-
सूची से बाहर के उपकरण - उदाहरण के लिए `db-exec`, `seed-*`, एक्सटेंशन सूट, ब्राउज़र-सत्र उपकरण और संदर्भ-एक्सरे उपकरण - विज्ञापित नहीं किए जाते हैं, और जब तक कॉल करने वाले ने पूरी सूची में शामिल नहीं किया है, तब तक उन पर कॉल को "अज्ञात टूल" के साथ अस्वीकार कर दिया जाता है। यह प्रत्येक कनेक्टेड एजेंट की संदर्भ विंडो को छोटा रखता है और फ़ुटगन को हटा देता है जो केवल एकल-किरायेदार स्थानीय विकास के लिए सुरक्षित हैं।
|
|
373
|
+
सूची से बाहर के उपकरण - उदाहरण के लिए `db-exec`, `seed-*`, एक्सटेंशन सूट, ब्राउज़र-सत्र उपकरण और संदर्भ-एक्सरे उपकरण - विज्ञापित नहीं किए जाते हैं, और जब तक कॉल करने वाले ने पूरी सूची में शामिल नहीं किया है, तब तक उन पर कॉल को "अज्ञात टूल" के साथ अस्वीकार कर दिया जाता है। यह प्रत्येक कनेक्टेड एजेंट की संदर्भ विंडो को छोटा रखता है और फ़ुटगन को हटा देता है जो केवल एकल-किरायेदार स्थानीय विकास के लिए सुरक्षित हैं।
|
|
373
374
|
|
|
374
|
-
`tool-search` दो तरीकों से काम करता है: इसे टूल नामों के पूर्ण मेनू और एक-पंक्ति विवरण (सस्ता, कोई स्कीमा नहीं) के लिए **कोई क्वेरी नहीं** के साथ कॉल करें, या पैरामीटर सारांश के साथ रैंक किए गए मिलान के लिए एक क्वेरी के साथ।
|
|
375
|
+
`tool-search` दो तरीकों से काम करता है: इसे टूल नामों के पूर्ण मेनू और एक-पंक्ति विवरण (सस्ता, कोई स्कीमा नहीं) के लिए **कोई क्वेरी नहीं** के साथ कॉल करें, या पैरामीटर सारांश के साथ रैंक किए गए मिलान के लिए एक क्वेरी के साथ। यह कॉम्पैक्ट क्लाइंट को क्षमताएँ खोजने में मदद करता है; ऐप एजेंट के व्यापक तर्क या किसी लिखने की क्रिया के लिए `ask_app` का उपयोग करें।
|
|
376
|
+
|
|
377
|
+
#### डिफ़ॉल्ट रूप से प्रमाणित पठन
|
|
378
|
+
|
|
379
|
+
जो ऐप लंबी अनुमति-सूची बनाए बिना सीधे पठन टूल चलाना चाहते हैं, वे स्वचालित प्रमाणित पठन चुन सकते हैं:
|
|
380
|
+
|
|
381
|
+
```ts
|
|
382
|
+
export default createAgentChatPlugin({
|
|
383
|
+
appId: "analytics",
|
|
384
|
+
externalAgents: {
|
|
385
|
+
authenticatedReads: "auto",
|
|
386
|
+
writes: "ask_app_only",
|
|
387
|
+
// विशेष रूप से संवेदनशील पठन के लिए वैकल्पिक रक्षा-गहन निषेध।
|
|
388
|
+
denyActions: ["get-sensitive-export"],
|
|
389
|
+
},
|
|
390
|
+
});
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
`authenticatedReads: "auto"` केवल उन actions को जोड़ता है जो स्पष्ट रूप से ये सभी घोषित करते हैं:
|
|
394
|
+
|
|
395
|
+
- `http: { method: "GET" }`
|
|
396
|
+
- `readOnly: true`
|
|
397
|
+
- `publicAgent: { expose: true, readOnly: true, requiresAuth: true }`
|
|
398
|
+
|
|
399
|
+
नीति इन actions को स्पष्ट `connectorCatalog` प्रविष्टियों के साथ जोड़ती है, फिर `denyActions` लागू करती है। `writes: "ask_app_only"` (स्वचालित पठन चालू होने पर डिफ़ॉल्ट) के साथ बदलने वाले टूल सीधे कॉल नहीं किए जा सकते; बहु-चरणीय काम और बदलाव `ask_app` के माध्यम से भेजें। `writes: "allowlisted"` केवल उन ऐप के लिए है जो जानबूझकर स्पष्ट लिखने की अनुमति-सूची रखते हैं।
|
|
400
|
+
|
|
401
|
+
यह नीति प्रमाणित है, अनाम नहीं। MCP OAuth/connect पहचान `runWithRequestContext` से आगे जाती है, इसलिए action-स्तरीय पहुँच जाँच, मालिक/संगठन स्कोप और OAuth पठन स्कोप लागू रहते हैं। सार्वजनिक या अप्रमाणित actions स्वचालित पठन में शामिल नहीं होते।
|
|
402
|
+
|
|
403
|
+
Core के `db-schema` और `db-query` को स्वचालित बाहरी रीड के रूप में प्रकाशित नहीं किया जाता। वे सामान्य स्कोप किए गए SQL पथ के माध्यम से ऐप एजेंट के लिए उपलब्ध रहते हैं, लेकिन व्यापक स्कीमा/SQL पहुँच केवल read-only मेटाडेटा से अनुमान लगाने के लिए बहुत शक्तिशाली है। सीधे बाहरी क्वेरी की आवश्यकता होने पर ऐप को अपने access checks और सीमाओं वाला GET action, या rows, bytes, timeout और audit limits वाली स्पष्ट table/column allow-list देनी चाहिए। `db-exec` और `db-patch` स्वचालित सतह से बाहर रहते हैं।
|
|
404
|
+
|
|
405
|
+
यह नाम-आधारित सख्त बहिष्करण है, केवल मेटाडेटा की चूक नहीं: सामान्य डेटाबेस/seed/ब्राउज़र-सत्र/एक्सटेंशन/संदर्भ-एक्सरे टूल कभी भी स्वचालित रूप से उजागर नहीं होते, भले ही भविष्य का कोई बदलाव गलती से इनमें से किसी एक को पूर्ण authenticated-read फ़्लैग सेट के साथ चिह्नित कर दे — उन्हें हमेशा एक स्पष्ट `connectorCatalog` प्रविष्टि की आवश्यकता होती है।
|
|
406
|
+
|
|
407
|
+
एजेंट चलने से पहले सत्यापित Slack DM को Agent Native संगठन के किसी मौजूदा सदस्य से मिलाया जाता है और workspace/user पहचान लिंक सहेजा जाता है। इससे बने user/org संदर्भ में उस उपयोगकर्ता के संसाधन, निर्देश और skills लोड होते हैं। जिन workspace सदस्यों का प्रोफ़ाइल सफलतापूर्वक मिला है लेकिन ईमेल उपलब्ध नहीं है या वे अभी संगठन के सदस्य नहीं हैं, वे इसके बजाय संगठन-स्कोप वाले अनाम service principal के रूप में चलते हैं — साझा चैनलों वाली संगठन-व्यापी दृश्यता के उसी स्तर पर — साथ में एजेंट को दिखाई देने वाला नोट और व्यक्तिगत पहुँच पाने का तरीका बताने वाली एक बार की Slack सूचना। प्रोफ़ाइल लोड न होने, मेहमान या बाहरी (Slack Connect) सदस्य होने, या workspace के किसी संगठन से न जुड़े होने पर संदेश को चुपचाप छोड़ने के बजाय विनम्र अस्वीकृति भेजी जाती है। साझा Slack चैनल service principal का उपयोग करते हैं और किसी प्रतिभागी की निजी permissions नहीं लेते। Managed OAuth और generated Slack app manifest दोनों bot scope `users:read.email` मांगते हैं। नया scope देने के लिए मौजूदा installations को reconnect/reinstall करना होगा; पुराने bot-token installations को इसे Slack में manually जोड़ना होगा। इसके बिना DM व्यक्तिगत पहुँच के बजाय संगठन-स्कोप वाले अनाम स्तर में चलते हैं।
|
|
375
408
|
|
|
376
409
|
### पूर्ण स्तरीय (केवल स्पष्ट ऑप्ट-इन) {#full-tier}
|
|
377
410
|
|
|
@@ -473,7 +506,7 @@ ChatGPT/Claude-शैली OAuth ऐप होस्ट के लिए, ख
|
|
|
473
506
|
|
|
474
507
|
`create_workspace_app` किसी भी गैर-अनुमति-सूचीबद्ध टेम्पलेट को अस्वीकार करता है - `packages/shared-app-config/templates.ts` में सार्वजनिक टेम्पलेट अनुमति-सूची आधिकारिक और सीआई-संरक्षित है; कोई बाहरी एजेंट इसे चौड़ा नहीं कर सकता. एक समान-नामित टेम्पलेट क्रिया एक बिल्टिन (टेम्पलेट-ओवर-कोर प्राथमिकता) को ओवरराइड करती है। `MCPConfig.builtinCrossAppTools: false` के साथ पूरे सेट को अक्षम करें।
|
|
475
508
|
|
|
476
|
-
ऐप होस्ट के लिए टूल और संसाधन कैटलॉग डिफ़ॉल्ट रूप से कॉम्पैक्ट होते हैं - [Catalog tiers](#catalog-tiers) देखें। `publicAgent.expose` उस कॉम्पैक्ट कैटलॉग के बाहर सुरक्षित पढ़ने/निगलने वाले टूल के लिए ऑप्ट-इन बना
|
|
509
|
+
ऐप होस्ट के लिए टूल और संसाधन कैटलॉग डिफ़ॉल्ट रूप से कॉम्पैक्ट होते हैं - [Catalog tiers](#catalog-tiers) देखें। `publicAgent.expose` उस कॉम्पैक्ट कैटलॉग के बाहर सुरक्षित पढ़ने/निगलने वाले टूल के लिए action-स्तरीय ऑप्ट-इन बना रहता है; ऐप हाथ से लिखे कैटलॉग के बिना प्रमाणित पठन विज्ञापित करने के लिए `externalAgents.authenticatedReads: "auto"` सेट कर सकते हैं। `mcpApp.compactCatalog: true` को केवल actions के लिए दुर्लभ अपवाद के रूप में सेट करें जिन्हें चैट-होस्ट डिस्कवरी में प्रदर्शित होना चाहिए।
|
|
477
510
|
|
|
478
511
|
तेज़ ChatGPT/Claude हैंडऑफ़ के लिए, आदर्श पथ सीधा है: उस क्रिया को कॉल करें जो आर्टिफैक्ट बनाता है या खोलता है, फिर MCP ऐप को रूट लॉन्च करने दें। एक मेल अनुरोध को `manage_draft` पर कॉल करना चाहिए और वास्तविक कंपोज़ रूट प्रस्तुत करना चाहिए। डैशबोर्ड अनुरोध को `open_app({ path, embed: true })` या `mcpApp` के साथ डैशबोर्ड कार्रवाई को कॉल करना चाहिए और संपूर्ण एनालिटिक्स रूट प्रस्तुत करना चाहिए। कैलेंडर, फॉर्म, सामग्री, स्लाइड, डिज़ाइन और क्लिप्स को अपने ड्राफ्ट/निर्माण/खोज actions के साथ समान पैटर्न का पालन करना चाहिए। `list_apps` तब उपयोगी होता है जब मॉडल को स्वीकृत ऐप्स में से चयन करना होता है; व्यापक `resources/list`, पूर्ण-कैटलॉग खोज, या `ask_app` प्रतिनिधिमंडल स्पष्ट UI हैंडऑफ़ के लिए सामान्य मार्ग नहीं होना चाहिए।
|
|
479
512
|
|