@integrity-labs/agt-cli 0.28.1130 → 0.28.1132

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/dist/mcp/index.js CHANGED
@@ -25624,6 +25624,61 @@ var OAUTH_PROVIDERS = {
25624
25624
  // tools/list after a real consent (runbook Step 3).
25625
25625
  toolAllowlist: ["otter_get_user_info", "otter_search", "otter_fetch"]
25626
25626
  },
25627
+ "plaud": {
25628
+ // ENG-11543 (CS-2134): Plaud's hosted MCP - remote streamable-HTTP at
25629
+ // https://mcp.plaud.ai/mcp. Same Granola/Kajabi/Otter shape: OAuth 2.0
25630
+ // authorization-code with PKCE (S256) and a public client
25631
+ // (token_endpoint_auth_method 'none') issued via Dynamic Client
25632
+ // Registration (RFC 7591). NOT the stdio `npx @plaud-ai/mcp` package,
25633
+ // which runs its own local browser sign-in and token file. Values below
25634
+ // are taken verbatim from the metadata (re-read 2026-10-16), not inferred:
25635
+ // - https://mcp.plaud.ai/.well-known/oauth-protected-resource (and the
25636
+ // path-suffixed /.well-known/oauth-protected-resource/mcp the server's
25637
+ // 401 points at) give resource https://mcp.plaud.ai/mcp, AS
25638
+ // https://mcp.plaud.ai/, bearer in the header;
25639
+ // - https://mcp.plaud.ai/.well-known/oauth-authorization-server (and
25640
+ // the identical openid-configuration) give authorize /authorize, token
25641
+ // /token, register /register, PKCE S256 only, `none` among the token
25642
+ // auth methods, and the authorization_code + refresh_token grants.
25643
+ // NOT advertised: `scopes_supported` (so defaultScopes is empty, the
25644
+ // notion-cli precedent, and the authorize URL carries `scope=`) and
25645
+ // `revocation_endpoint` (so there is no revokeUrl: disconnecting here
25646
+ // deletes our copy of the token but cannot revoke Plaud's grant; the user
25647
+ // revokes it in their Plaud account).
25648
+ //
25649
+ // DCR (operator step, NOT done as of this commit): POST the registration
25650
+ // body by hand to https://mcp.plaud.ai/register with client_name
25651
+ // `Ninjafy`, token_endpoint_auth_method `none`, grant_types
25652
+ // authorization_code + refresh_token, and BOTH API callbacks in
25653
+ // redirect_uris (https://api.augmented.team/integrations/oauth/callback
25654
+ // and https://api.ninjafy.com/integrations/oauth/callback). Do not use
25655
+ // scripts/dcr-register.ts: it takes a single --redirect-uri. Store the
25656
+ // returned client id as OAUTH_PLAUD_CLIENT_ID; unset, Connect soft-fails
25657
+ // "not configured". Full procedure: docs/runbooks/plaud-dogfood.md.
25658
+ definitionId: "plaud",
25659
+ authorizeUrl: "https://mcp.plaud.ai/authorize",
25660
+ tokenUrl: "https://mcp.plaud.ai/token",
25661
+ defaultScopes: [],
25662
+ supportsRefresh: true,
25663
+ extraAuthorizeParams: {},
25664
+ clientAuthMethod: "body",
25665
+ pkce: "S256",
25666
+ publicClient: true,
25667
+ mcpUrl: "https://mcp.plaud.ai/mcp",
25668
+ // Curated surface (matches the catalog seed's defined_scopes[].tools).
25669
+ // Plaud advertises NO scopes, so the token is not scope-limited: the
25670
+ // read-only property of this integration rests ENTIRELY on this
25671
+ // allowlist, which the remote-oauth-proxy enforces on tools/list and
25672
+ // tools/call. The five names are Plaud's documented read tools
25673
+ // (https://docs.plaud.ai/plaud-mcp-cli/mcp). `login` and `logout` are
25674
+ // deliberately excluded: sign-in is our OAuth broker's job, and `logout`
25675
+ // revokes the user's authorization, which an agent must never do. The
25676
+ // names come from the docs, not from an authenticated tools/list (that
25677
+ // needs a consented token), and the proxy SKIPS an allowlisted name the
25678
+ // server does not serve, so confirm against the first live tools/list
25679
+ // (runbook Step 3, a gate before customer use).
25680
+ toolAllowlist: ["get_current_user", "list_files", "get_file", "get_note", "get_transcript"]
25681
+ },
25627
25682
  "notion-cli": {
25628
25683
  // Notion's public OAuth app. Tokens are workspace-scoped and long-lived —
25629
25684
  // Notion does not issue refresh_tokens, so `supportsRefresh: false` and
@@ -26080,6 +26135,36 @@ var INTEGRATION_REGISTRY = [
26080
26135
  docs_url: "https://help.otter.ai/hc/en-us/articles/35287607569687-Otter-MCP-Server",
26081
26136
  beta: true
26082
26137
  },
26138
+ {
26139
+ id: "plaud",
26140
+ name: "Plaud",
26141
+ category: "knowledge",
26142
+ description: "Read Plaud recordings: list and search recordings by name or date, and read their AI notes (summary, action items, key topics) and full speaker-labelled transcripts.",
26143
+ // ENG-11543 (CS-2134): same remote streamable-HTTP MCP + OAuth pattern as
26144
+ // Granola/Kajabi/Otter, against Plaud's HOSTED server (https://mcp.plaud.ai/mcp),
26145
+ // not the stdio `npx @plaud-ai/mcp` package. Discovery chain: RFC 9728
26146
+ // protected-resource metadata at mcp.plaud.ai -> RFC 8414 AS metadata on the
26147
+ // same host -> RFC 7591 registration at /register. Auth is OAuth 2.0
26148
+ // authorization-code with PKCE (S256) and a public client registered once by
26149
+ // an operator (docs/runbooks/plaud-dogfood.md -> OAUTH_PLAUD_CLIENT_ID).
26150
+ // Consent is brokered through the shared /integrations/oauth/authorize ->
26151
+ // /callback path, and the token reaches the host via the generic
26152
+ // remote-oauth-proxy (OAUTH_PROVIDERS.plaud.mcpUrl).
26153
+ //
26154
+ // READ-ONLY RESTS ENTIRELY ON THE TOOL ALLOWLIST. Unlike Otter, Plaud
26155
+ // advertises NO scopes_supported, so there is no read scope to request and
26156
+ // the granted token is not scope-limited. What keeps this integration
26157
+ // read-only is OAUTH_PROVIDERS.plaud.toolAllowlist (the five documented
26158
+ // reads), which the proxy enforces on tools/list and tools/call. `login` and
26159
+ // `logout` are excluded; `logout` would revoke the user's authorization.
26160
+ // Anything that widens the allowlist widens what the token can do.
26161
+ supported_auth_types: ["oauth2"],
26162
+ capabilities: [
26163
+ { id: "plaud:read", name: "Read Recordings & Transcripts", description: "List and search recordings by name or date, and read their details, AI notes (summary, action items, key topics) and full transcripts with speaker labels (get_current_user, list_files, get_file, get_note, get_transcript)", access: "read" }
26164
+ ],
26165
+ docs_url: "https://docs.plaud.ai/plaud-mcp-cli/mcp",
26166
+ beta: true
26167
+ },
26083
26168
  {
26084
26169
  id: "anchor-browser",
26085
26170
  name: "Anchor Browser",
@@ -39756,6 +39756,61 @@ var OAUTH_PROVIDERS = {
39756
39756
  // tools/list after a real consent (runbook Step 3).
39757
39757
  toolAllowlist: ["otter_get_user_info", "otter_search", "otter_fetch"]
39758
39758
  },
39759
+ "plaud": {
39760
+ // ENG-11543 (CS-2134): Plaud's hosted MCP - remote streamable-HTTP at
39761
+ // https://mcp.plaud.ai/mcp. Same Granola/Kajabi/Otter shape: OAuth 2.0
39762
+ // authorization-code with PKCE (S256) and a public client
39763
+ // (token_endpoint_auth_method 'none') issued via Dynamic Client
39764
+ // Registration (RFC 7591). NOT the stdio `npx @plaud-ai/mcp` package,
39765
+ // which runs its own local browser sign-in and token file. Values below
39766
+ // are taken verbatim from the metadata (re-read 2026-10-16), not inferred:
39767
+ // - https://mcp.plaud.ai/.well-known/oauth-protected-resource (and the
39768
+ // path-suffixed /.well-known/oauth-protected-resource/mcp the server's
39769
+ // 401 points at) give resource https://mcp.plaud.ai/mcp, AS
39770
+ // https://mcp.plaud.ai/, bearer in the header;
39771
+ // - https://mcp.plaud.ai/.well-known/oauth-authorization-server (and
39772
+ // the identical openid-configuration) give authorize /authorize, token
39773
+ // /token, register /register, PKCE S256 only, `none` among the token
39774
+ // auth methods, and the authorization_code + refresh_token grants.
39775
+ // NOT advertised: `scopes_supported` (so defaultScopes is empty, the
39776
+ // notion-cli precedent, and the authorize URL carries `scope=`) and
39777
+ // `revocation_endpoint` (so there is no revokeUrl: disconnecting here
39778
+ // deletes our copy of the token but cannot revoke Plaud's grant; the user
39779
+ // revokes it in their Plaud account).
39780
+ //
39781
+ // DCR (operator step, NOT done as of this commit): POST the registration
39782
+ // body by hand to https://mcp.plaud.ai/register with client_name
39783
+ // `Ninjafy`, token_endpoint_auth_method `none`, grant_types
39784
+ // authorization_code + refresh_token, and BOTH API callbacks in
39785
+ // redirect_uris (https://api.augmented.team/integrations/oauth/callback
39786
+ // and https://api.ninjafy.com/integrations/oauth/callback). Do not use
39787
+ // scripts/dcr-register.ts: it takes a single --redirect-uri. Store the
39788
+ // returned client id as OAUTH_PLAUD_CLIENT_ID; unset, Connect soft-fails
39789
+ // "not configured". Full procedure: docs/runbooks/plaud-dogfood.md.
39790
+ definitionId: "plaud",
39791
+ authorizeUrl: "https://mcp.plaud.ai/authorize",
39792
+ tokenUrl: "https://mcp.plaud.ai/token",
39793
+ defaultScopes: [],
39794
+ supportsRefresh: true,
39795
+ extraAuthorizeParams: {},
39796
+ clientAuthMethod: "body",
39797
+ pkce: "S256",
39798
+ publicClient: true,
39799
+ mcpUrl: "https://mcp.plaud.ai/mcp",
39800
+ // Curated surface (matches the catalog seed's defined_scopes[].tools).
39801
+ // Plaud advertises NO scopes, so the token is not scope-limited: the
39802
+ // read-only property of this integration rests ENTIRELY on this
39803
+ // allowlist, which the remote-oauth-proxy enforces on tools/list and
39804
+ // tools/call. The five names are Plaud's documented read tools
39805
+ // (https://docs.plaud.ai/plaud-mcp-cli/mcp). `login` and `logout` are
39806
+ // deliberately excluded: sign-in is our OAuth broker's job, and `logout`
39807
+ // revokes the user's authorization, which an agent must never do. The
39808
+ // names come from the docs, not from an authenticated tools/list (that
39809
+ // needs a consented token), and the proxy SKIPS an allowlisted name the
39810
+ // server does not serve, so confirm against the first live tools/list
39811
+ // (runbook Step 3, a gate before customer use).
39812
+ toolAllowlist: ["get_current_user", "list_files", "get_file", "get_note", "get_transcript"]
39813
+ },
39759
39814
  "notion-cli": {
39760
39815
  // Notion's public OAuth app. Tokens are workspace-scoped and long-lived —
39761
39816
  // Notion does not issue refresh_tokens, so `supportsRefresh: false` and
@@ -40212,6 +40267,36 @@ var INTEGRATION_REGISTRY = [
40212
40267
  docs_url: "https://help.otter.ai/hc/en-us/articles/35287607569687-Otter-MCP-Server",
40213
40268
  beta: true
40214
40269
  },
40270
+ {
40271
+ id: "plaud",
40272
+ name: "Plaud",
40273
+ category: "knowledge",
40274
+ description: "Read Plaud recordings: list and search recordings by name or date, and read their AI notes (summary, action items, key topics) and full speaker-labelled transcripts.",
40275
+ // ENG-11543 (CS-2134): same remote streamable-HTTP MCP + OAuth pattern as
40276
+ // Granola/Kajabi/Otter, against Plaud's HOSTED server (https://mcp.plaud.ai/mcp),
40277
+ // not the stdio `npx @plaud-ai/mcp` package. Discovery chain: RFC 9728
40278
+ // protected-resource metadata at mcp.plaud.ai -> RFC 8414 AS metadata on the
40279
+ // same host -> RFC 7591 registration at /register. Auth is OAuth 2.0
40280
+ // authorization-code with PKCE (S256) and a public client registered once by
40281
+ // an operator (docs/runbooks/plaud-dogfood.md -> OAUTH_PLAUD_CLIENT_ID).
40282
+ // Consent is brokered through the shared /integrations/oauth/authorize ->
40283
+ // /callback path, and the token reaches the host via the generic
40284
+ // remote-oauth-proxy (OAUTH_PROVIDERS.plaud.mcpUrl).
40285
+ //
40286
+ // READ-ONLY RESTS ENTIRELY ON THE TOOL ALLOWLIST. Unlike Otter, Plaud
40287
+ // advertises NO scopes_supported, so there is no read scope to request and
40288
+ // the granted token is not scope-limited. What keeps this integration
40289
+ // read-only is OAUTH_PROVIDERS.plaud.toolAllowlist (the five documented
40290
+ // reads), which the proxy enforces on tools/list and tools/call. `login` and
40291
+ // `logout` are excluded; `logout` would revoke the user's authorization.
40292
+ // Anything that widens the allowlist widens what the token can do.
40293
+ supported_auth_types: ["oauth2"],
40294
+ capabilities: [
40295
+ { id: "plaud:read", name: "Read Recordings & Transcripts", description: "List and search recordings by name or date, and read their details, AI notes (summary, action items, key topics) and full transcripts with speaker labels (get_current_user, list_files, get_file, get_note, get_transcript)", access: "read" }
40296
+ ],
40297
+ docs_url: "https://docs.plaud.ai/plaud-mcp-cli/mcp",
40298
+ beta: true
40299
+ },
40215
40300
  {
40216
40301
  id: "anchor-browser",
40217
40302
  name: "Anchor Browser",
@@ -34143,6 +34143,61 @@ var OAUTH_PROVIDERS = {
34143
34143
  // tools/list after a real consent (runbook Step 3).
34144
34144
  toolAllowlist: ["otter_get_user_info", "otter_search", "otter_fetch"]
34145
34145
  },
34146
+ "plaud": {
34147
+ // ENG-11543 (CS-2134): Plaud's hosted MCP - remote streamable-HTTP at
34148
+ // https://mcp.plaud.ai/mcp. Same Granola/Kajabi/Otter shape: OAuth 2.0
34149
+ // authorization-code with PKCE (S256) and a public client
34150
+ // (token_endpoint_auth_method 'none') issued via Dynamic Client
34151
+ // Registration (RFC 7591). NOT the stdio `npx @plaud-ai/mcp` package,
34152
+ // which runs its own local browser sign-in and token file. Values below
34153
+ // are taken verbatim from the metadata (re-read 2026-10-16), not inferred:
34154
+ // - https://mcp.plaud.ai/.well-known/oauth-protected-resource (and the
34155
+ // path-suffixed /.well-known/oauth-protected-resource/mcp the server's
34156
+ // 401 points at) give resource https://mcp.plaud.ai/mcp, AS
34157
+ // https://mcp.plaud.ai/, bearer in the header;
34158
+ // - https://mcp.plaud.ai/.well-known/oauth-authorization-server (and
34159
+ // the identical openid-configuration) give authorize /authorize, token
34160
+ // /token, register /register, PKCE S256 only, `none` among the token
34161
+ // auth methods, and the authorization_code + refresh_token grants.
34162
+ // NOT advertised: `scopes_supported` (so defaultScopes is empty, the
34163
+ // notion-cli precedent, and the authorize URL carries `scope=`) and
34164
+ // `revocation_endpoint` (so there is no revokeUrl: disconnecting here
34165
+ // deletes our copy of the token but cannot revoke Plaud's grant; the user
34166
+ // revokes it in their Plaud account).
34167
+ //
34168
+ // DCR (operator step, NOT done as of this commit): POST the registration
34169
+ // body by hand to https://mcp.plaud.ai/register with client_name
34170
+ // `Ninjafy`, token_endpoint_auth_method `none`, grant_types
34171
+ // authorization_code + refresh_token, and BOTH API callbacks in
34172
+ // redirect_uris (https://api.augmented.team/integrations/oauth/callback
34173
+ // and https://api.ninjafy.com/integrations/oauth/callback). Do not use
34174
+ // scripts/dcr-register.ts: it takes a single --redirect-uri. Store the
34175
+ // returned client id as OAUTH_PLAUD_CLIENT_ID; unset, Connect soft-fails
34176
+ // "not configured". Full procedure: docs/runbooks/plaud-dogfood.md.
34177
+ definitionId: "plaud",
34178
+ authorizeUrl: "https://mcp.plaud.ai/authorize",
34179
+ tokenUrl: "https://mcp.plaud.ai/token",
34180
+ defaultScopes: [],
34181
+ supportsRefresh: true,
34182
+ extraAuthorizeParams: {},
34183
+ clientAuthMethod: "body",
34184
+ pkce: "S256",
34185
+ publicClient: true,
34186
+ mcpUrl: "https://mcp.plaud.ai/mcp",
34187
+ // Curated surface (matches the catalog seed's defined_scopes[].tools).
34188
+ // Plaud advertises NO scopes, so the token is not scope-limited: the
34189
+ // read-only property of this integration rests ENTIRELY on this
34190
+ // allowlist, which the remote-oauth-proxy enforces on tools/list and
34191
+ // tools/call. The five names are Plaud's documented read tools
34192
+ // (https://docs.plaud.ai/plaud-mcp-cli/mcp). `login` and `logout` are
34193
+ // deliberately excluded: sign-in is our OAuth broker's job, and `logout`
34194
+ // revokes the user's authorization, which an agent must never do. The
34195
+ // names come from the docs, not from an authenticated tools/list (that
34196
+ // needs a consented token), and the proxy SKIPS an allowlisted name the
34197
+ // server does not serve, so confirm against the first live tools/list
34198
+ // (runbook Step 3, a gate before customer use).
34199
+ toolAllowlist: ["get_current_user", "list_files", "get_file", "get_note", "get_transcript"]
34200
+ },
34146
34201
  "notion-cli": {
34147
34202
  // Notion's public OAuth app. Tokens are workspace-scoped and long-lived —
34148
34203
  // Notion does not issue refresh_tokens, so `supportsRefresh: false` and
@@ -34599,6 +34654,36 @@ var INTEGRATION_REGISTRY = [
34599
34654
  docs_url: "https://help.otter.ai/hc/en-us/articles/35287607569687-Otter-MCP-Server",
34600
34655
  beta: true
34601
34656
  },
34657
+ {
34658
+ id: "plaud",
34659
+ name: "Plaud",
34660
+ category: "knowledge",
34661
+ description: "Read Plaud recordings: list and search recordings by name or date, and read their AI notes (summary, action items, key topics) and full speaker-labelled transcripts.",
34662
+ // ENG-11543 (CS-2134): same remote streamable-HTTP MCP + OAuth pattern as
34663
+ // Granola/Kajabi/Otter, against Plaud's HOSTED server (https://mcp.plaud.ai/mcp),
34664
+ // not the stdio `npx @plaud-ai/mcp` package. Discovery chain: RFC 9728
34665
+ // protected-resource metadata at mcp.plaud.ai -> RFC 8414 AS metadata on the
34666
+ // same host -> RFC 7591 registration at /register. Auth is OAuth 2.0
34667
+ // authorization-code with PKCE (S256) and a public client registered once by
34668
+ // an operator (docs/runbooks/plaud-dogfood.md -> OAUTH_PLAUD_CLIENT_ID).
34669
+ // Consent is brokered through the shared /integrations/oauth/authorize ->
34670
+ // /callback path, and the token reaches the host via the generic
34671
+ // remote-oauth-proxy (OAUTH_PROVIDERS.plaud.mcpUrl).
34672
+ //
34673
+ // READ-ONLY RESTS ENTIRELY ON THE TOOL ALLOWLIST. Unlike Otter, Plaud
34674
+ // advertises NO scopes_supported, so there is no read scope to request and
34675
+ // the granted token is not scope-limited. What keeps this integration
34676
+ // read-only is OAUTH_PROVIDERS.plaud.toolAllowlist (the five documented
34677
+ // reads), which the proxy enforces on tools/list and tools/call. `login` and
34678
+ // `logout` are excluded; `logout` would revoke the user's authorization.
34679
+ // Anything that widens the allowlist widens what the token can do.
34680
+ supported_auth_types: ["oauth2"],
34681
+ capabilities: [
34682
+ { id: "plaud:read", name: "Read Recordings & Transcripts", description: "List and search recordings by name or date, and read their details, AI notes (summary, action items, key topics) and full transcripts with speaker labels (get_current_user, list_files, get_file, get_note, get_transcript)", access: "read" }
34683
+ ],
34684
+ docs_url: "https://docs.plaud.ai/plaud-mcp-cli/mcp",
34685
+ beta: true
34686
+ },
34602
34687
  {
34603
34688
  id: "anchor-browser",
34604
34689
  name: "Anchor Browser",
@@ -34377,6 +34377,61 @@ var OAUTH_PROVIDERS = {
34377
34377
  // tools/list after a real consent (runbook Step 3).
34378
34378
  toolAllowlist: ["otter_get_user_info", "otter_search", "otter_fetch"]
34379
34379
  },
34380
+ "plaud": {
34381
+ // ENG-11543 (CS-2134): Plaud's hosted MCP - remote streamable-HTTP at
34382
+ // https://mcp.plaud.ai/mcp. Same Granola/Kajabi/Otter shape: OAuth 2.0
34383
+ // authorization-code with PKCE (S256) and a public client
34384
+ // (token_endpoint_auth_method 'none') issued via Dynamic Client
34385
+ // Registration (RFC 7591). NOT the stdio `npx @plaud-ai/mcp` package,
34386
+ // which runs its own local browser sign-in and token file. Values below
34387
+ // are taken verbatim from the metadata (re-read 2026-10-16), not inferred:
34388
+ // - https://mcp.plaud.ai/.well-known/oauth-protected-resource (and the
34389
+ // path-suffixed /.well-known/oauth-protected-resource/mcp the server's
34390
+ // 401 points at) give resource https://mcp.plaud.ai/mcp, AS
34391
+ // https://mcp.plaud.ai/, bearer in the header;
34392
+ // - https://mcp.plaud.ai/.well-known/oauth-authorization-server (and
34393
+ // the identical openid-configuration) give authorize /authorize, token
34394
+ // /token, register /register, PKCE S256 only, `none` among the token
34395
+ // auth methods, and the authorization_code + refresh_token grants.
34396
+ // NOT advertised: `scopes_supported` (so defaultScopes is empty, the
34397
+ // notion-cli precedent, and the authorize URL carries `scope=`) and
34398
+ // `revocation_endpoint` (so there is no revokeUrl: disconnecting here
34399
+ // deletes our copy of the token but cannot revoke Plaud's grant; the user
34400
+ // revokes it in their Plaud account).
34401
+ //
34402
+ // DCR (operator step, NOT done as of this commit): POST the registration
34403
+ // body by hand to https://mcp.plaud.ai/register with client_name
34404
+ // `Ninjafy`, token_endpoint_auth_method `none`, grant_types
34405
+ // authorization_code + refresh_token, and BOTH API callbacks in
34406
+ // redirect_uris (https://api.augmented.team/integrations/oauth/callback
34407
+ // and https://api.ninjafy.com/integrations/oauth/callback). Do not use
34408
+ // scripts/dcr-register.ts: it takes a single --redirect-uri. Store the
34409
+ // returned client id as OAUTH_PLAUD_CLIENT_ID; unset, Connect soft-fails
34410
+ // "not configured". Full procedure: docs/runbooks/plaud-dogfood.md.
34411
+ definitionId: "plaud",
34412
+ authorizeUrl: "https://mcp.plaud.ai/authorize",
34413
+ tokenUrl: "https://mcp.plaud.ai/token",
34414
+ defaultScopes: [],
34415
+ supportsRefresh: true,
34416
+ extraAuthorizeParams: {},
34417
+ clientAuthMethod: "body",
34418
+ pkce: "S256",
34419
+ publicClient: true,
34420
+ mcpUrl: "https://mcp.plaud.ai/mcp",
34421
+ // Curated surface (matches the catalog seed's defined_scopes[].tools).
34422
+ // Plaud advertises NO scopes, so the token is not scope-limited: the
34423
+ // read-only property of this integration rests ENTIRELY on this
34424
+ // allowlist, which the remote-oauth-proxy enforces on tools/list and
34425
+ // tools/call. The five names are Plaud's documented read tools
34426
+ // (https://docs.plaud.ai/plaud-mcp-cli/mcp). `login` and `logout` are
34427
+ // deliberately excluded: sign-in is our OAuth broker's job, and `logout`
34428
+ // revokes the user's authorization, which an agent must never do. The
34429
+ // names come from the docs, not from an authenticated tools/list (that
34430
+ // needs a consented token), and the proxy SKIPS an allowlisted name the
34431
+ // server does not serve, so confirm against the first live tools/list
34432
+ // (runbook Step 3, a gate before customer use).
34433
+ toolAllowlist: ["get_current_user", "list_files", "get_file", "get_note", "get_transcript"]
34434
+ },
34380
34435
  "notion-cli": {
34381
34436
  // Notion's public OAuth app. Tokens are workspace-scoped and long-lived —
34382
34437
  // Notion does not issue refresh_tokens, so `supportsRefresh: false` and
@@ -34833,6 +34888,36 @@ var INTEGRATION_REGISTRY = [
34833
34888
  docs_url: "https://help.otter.ai/hc/en-us/articles/35287607569687-Otter-MCP-Server",
34834
34889
  beta: true
34835
34890
  },
34891
+ {
34892
+ id: "plaud",
34893
+ name: "Plaud",
34894
+ category: "knowledge",
34895
+ description: "Read Plaud recordings: list and search recordings by name or date, and read their AI notes (summary, action items, key topics) and full speaker-labelled transcripts.",
34896
+ // ENG-11543 (CS-2134): same remote streamable-HTTP MCP + OAuth pattern as
34897
+ // Granola/Kajabi/Otter, against Plaud's HOSTED server (https://mcp.plaud.ai/mcp),
34898
+ // not the stdio `npx @plaud-ai/mcp` package. Discovery chain: RFC 9728
34899
+ // protected-resource metadata at mcp.plaud.ai -> RFC 8414 AS metadata on the
34900
+ // same host -> RFC 7591 registration at /register. Auth is OAuth 2.0
34901
+ // authorization-code with PKCE (S256) and a public client registered once by
34902
+ // an operator (docs/runbooks/plaud-dogfood.md -> OAUTH_PLAUD_CLIENT_ID).
34903
+ // Consent is brokered through the shared /integrations/oauth/authorize ->
34904
+ // /callback path, and the token reaches the host via the generic
34905
+ // remote-oauth-proxy (OAUTH_PROVIDERS.plaud.mcpUrl).
34906
+ //
34907
+ // READ-ONLY RESTS ENTIRELY ON THE TOOL ALLOWLIST. Unlike Otter, Plaud
34908
+ // advertises NO scopes_supported, so there is no read scope to request and
34909
+ // the granted token is not scope-limited. What keeps this integration
34910
+ // read-only is OAUTH_PROVIDERS.plaud.toolAllowlist (the five documented
34911
+ // reads), which the proxy enforces on tools/list and tools/call. `login` and
34912
+ // `logout` are excluded; `logout` would revoke the user's authorization.
34913
+ // Anything that widens the allowlist widens what the token can do.
34914
+ supported_auth_types: ["oauth2"],
34915
+ capabilities: [
34916
+ { id: "plaud:read", name: "Read Recordings & Transcripts", description: "List and search recordings by name or date, and read their details, AI notes (summary, action items, key topics) and full transcripts with speaker labels (get_current_user, list_files, get_file, get_note, get_transcript)", access: "read" }
34917
+ ],
34918
+ docs_url: "https://docs.plaud.ai/plaud-mcp-cli/mcp",
34919
+ beta: true
34920
+ },
34836
34921
  {
34837
34922
  id: "anchor-browser",
34838
34923
  name: "Anchor Browser",
@@ -68,8 +68,8 @@ import {
68
68
  writeDirectChatSessionState,
69
69
  writeEgressAllowlist,
70
70
  writePersistentClaudeWrapper
71
- } from "./chunk-TRZ4SG77.js";
72
- import "./chunk-KN4GAY5Z.js";
71
+ } from "./chunk-LIWZ3QER.js";
72
+ import "./chunk-CA4OFLW4.js";
73
73
  import "./chunk-B6UYVEMD.js";
74
74
  import "./chunk-XWVM4KPK.js";
75
75
  import "./chunk-EL5MWGGH.js";
@@ -145,4 +145,4 @@ export {
145
145
  writeEgressAllowlist,
146
146
  writePersistentClaudeWrapper
147
147
  };
148
- //# sourceMappingURL=persistent-session-YDKIHRCX.js.map
148
+ //# sourceMappingURL=persistent-session-WE42P4HU.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  paneLogPath
3
- } from "./chunk-TRZ4SG77.js";
4
- import "./chunk-KN4GAY5Z.js";
3
+ } from "./chunk-LIWZ3QER.js";
4
+ import "./chunk-CA4OFLW4.js";
5
5
  import "./chunk-B6UYVEMD.js";
6
6
  import "./chunk-XWVM4KPK.js";
7
7
  import "./chunk-EL5MWGGH.js";
@@ -802,4 +802,4 @@ export {
802
802
  readAndResetSlackReplyBindingClassifications,
803
803
  readAndResetSlackReplyTargetClassifications
804
804
  };
805
- //# sourceMappingURL=responsiveness-probe-5LEQ4ZFE.js.map
805
+ //# sourceMappingURL=responsiveness-probe-6AG6PYW7.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  sessionTranscriptDir
3
- } from "./chunk-KN4GAY5Z.js";
3
+ } from "./chunk-CA4OFLW4.js";
4
4
  import "./chunk-DGUM43GV.js";
5
5
 
6
6
  // src/lib/session-auth-dead.ts
@@ -204,4 +204,4 @@ export {
204
204
  decideSessionAuthState,
205
205
  probeSessionAuth
206
206
  };
207
- //# sourceMappingURL=session-auth-dead-C3GYATAO.js.map
207
+ //# sourceMappingURL=session-auth-dead-H7UDGEIS.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integrity-labs/agt-cli",
3
- "version": "0.28.1130",
3
+ "version": "0.28.1132",
4
4
  "description": "Augmented Team CLI — agent provisioning and management",
5
5
  "type": "module",
6
6
  "engines": {