@alfe.ai/microsoft-mcp 0.1.11 → 0.1.12

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/server.d.cts CHANGED
@@ -667,6 +667,168 @@ declare class VoiceApi extends ApiBase {
667
667
  }
668
668
  //# sourceMappingURL=voice.d.ts.map
669
669
  //#endregion
670
+ //#region src/domains/identity.d.ts
671
+ type IdentityStatus = "anonymous" | "partial" | "identified" | "verified";
672
+ interface IdentityDirectoryEntry {
673
+ identityId: string;
674
+ status: IdentityStatus;
675
+ displayName: string;
676
+ name?: string;
677
+ avatarUrl?: string;
678
+ lastSeenAt: string;
679
+ lastSeenProvider?: string;
680
+ messageable: boolean;
681
+ }
682
+ declare class IdentityApi extends ApiBase {
683
+ /**
684
+ * Returns the calling agent's own identity context — `{ agentId, tenantId }`
685
+ * decoded server-side from the agent API token. Used by the
686
+ * `@alfe.ai/openclaw-identity` plugin to bootstrap context when the
687
+ * OpenClaw daemon doesn't plumb `ctx.agentId` through to plugin hooks.
688
+ * Plugins should cache this for the daemon's lifetime (single-agent-per-
689
+ * process invariant). One HTTP round-trip per process activate; not for
690
+ * per-call use.
691
+ */
692
+ whoami(): Promise<{
693
+ agentId: string;
694
+ tenantId: string;
695
+ }>;
696
+ resolveIdentity(args: {
697
+ provider: string;
698
+ platformId: string;
699
+ kind?: "user" | "agent" | "service" | "bot" | "workspace";
700
+ displayName?: string;
701
+ }): Promise<{
702
+ identityId: string | null;
703
+ status: string;
704
+ created?: boolean;
705
+ reason?: string;
706
+ /**
707
+ * Flattened auriclabs permission strings for the resolved identity
708
+ * (scope-prefixed where applicable). Empty array on miss / org service
709
+ * outage — the runtime gate fails closed in that case.
710
+ */
711
+ permissions: string[];
712
+ }>;
713
+ searchIdentities(args?: {
714
+ q?: string;
715
+ status?: string;
716
+ limit?: number;
717
+ }): Promise<{
718
+ identities: unknown[];
719
+ }>;
720
+ listIdentities(args?: {
721
+ status?: IdentityStatus;
722
+ limit?: number;
723
+ cursor?: string;
724
+ }): Promise<{
725
+ identities: IdentityDirectoryEntry[];
726
+ cursor: string | null;
727
+ }>;
728
+ getIdentityContext(identityId: string): Promise<{
729
+ context: unknown;
730
+ }>;
731
+ mergeIdentities(survivorId: string, args: {
732
+ mergedId: string;
733
+ }): Promise<{
734
+ ok: boolean;
735
+ error?: string;
736
+ }>;
737
+ unmergeIdentity(identityId: string): Promise<{
738
+ ok: boolean;
739
+ error?: string;
740
+ }>;
741
+ addIdentityNote(identityId: string, args: {
742
+ content: string;
743
+ category?: string;
744
+ }): Promise<{
745
+ noteId: string | null;
746
+ }>;
747
+ tagIdentity(identityId: string, args: {
748
+ tag: string;
749
+ action: "add" | "remove";
750
+ }): Promise<{
751
+ ok: boolean;
752
+ }>;
753
+ getIdentityChangelog(identityId: string, args?: {
754
+ limit?: number;
755
+ cursor?: string;
756
+ }): Promise<{
757
+ entries: unknown[];
758
+ cursor: string | null;
759
+ }>;
760
+ rollbackIdentity(identityId: string, args: {
761
+ targetVersion: number;
762
+ }): Promise<{
763
+ ok: boolean;
764
+ entry?: unknown;
765
+ }>;
766
+ requestIdentityVerification(args: {
767
+ claimedIdentityId: string;
768
+ requestingIdentityId: string;
769
+ requestingProvider: string;
770
+ requestingPlatformId: string;
771
+ preferredChannel?: "mobile" | "email";
772
+ /**
773
+ * Phase 2: agent-supplied contact endpoint. When provided, the top-level
774
+ * `preferredChannel` is ignored — the contact's channel wins.
775
+ */
776
+ contact?: {
777
+ channel: "email" | "mobile";
778
+ value: string;
779
+ };
780
+ }): Promise<{
781
+ verificationId: string;
782
+ channel: string;
783
+ deliveredTo: string;
784
+ expiresAt: string;
785
+ availableChannels: {
786
+ channel: string;
787
+ deliveredTo: string;
788
+ }[];
789
+ } | {
790
+ error: string;
791
+ }>;
792
+ confirmIdentityVerification(args: {
793
+ claimedIdentityId: string;
794
+ verificationId: string;
795
+ phrase: string;
796
+ }): Promise<{
797
+ verified: boolean;
798
+ identityId?: string;
799
+ /** Phase 2: how the confirm resolved — Scenario A vs B. */
800
+ action?: "merged" | "contact_verified" | "already_confirmed";
801
+ error?: string;
802
+ }>;
803
+ /**
804
+ * Update display-shape fields on an Identity. Body excludes `email` /
805
+ * `phone` / `title` / `company` / `metadata` per Section D4 — contacts go
806
+ * via the verify flow, title/company live on OrgMembership, metadata is
807
+ * not agent-writable.
808
+ */
809
+ updateIdentity(identityId: string, args: {
810
+ name?: string;
811
+ avatarUrl?: string;
812
+ timezone?: string;
813
+ locale?: string;
814
+ }): Promise<{
815
+ ok: boolean;
816
+ }>;
817
+ /**
818
+ * Phase 2 (Section H): server-side verification of a Google Chat sender via
819
+ * the agent's existing Google OAuth credentials. Returns the resolved
820
+ * identity (created or matched via Scenario-B email enrichment).
821
+ */
822
+ resolveGoogleChatSender(args: {
823
+ senderUserId: string;
824
+ spaceId?: string;
825
+ }): Promise<{
826
+ identityId: string | null;
827
+ status: string;
828
+ }>;
829
+ }
830
+ //# sourceMappingURL=identity.d.ts.map
831
+ //#endregion
670
832
  //#region src/domains/search.d.ts
671
833
  /**
672
834
  * The broad-news providers behind the metered `services/news` Lambda. The
@@ -778,6 +940,14 @@ declare class WebhooksApi extends ApiBase {
778
940
  //#endregion
779
941
  //#region src/domains/chat.d.ts
780
942
  declare class ChatApi extends ApiBase {
943
+ ensureDirectConversation(identityId: string): Promise<{
944
+ conversationId: string;
945
+ identityId: string;
946
+ tenantId: string;
947
+ userId: string;
948
+ displayName: string;
949
+ created: boolean;
950
+ }>;
781
951
  presignAttachments(files: {
782
952
  filename: string;
783
953
  mimeType: string;
@@ -1430,149 +1600,6 @@ declare class DatabaseApi extends ApiBase {
1430
1600
  }
1431
1601
  //# sourceMappingURL=database.d.ts.map
1432
1602
  //#endregion
1433
- //#region src/domains/identity.d.ts
1434
- declare class IdentityApi extends ApiBase {
1435
- /**
1436
- * Returns the calling agent's own identity context — `{ agentId, tenantId }`
1437
- * decoded server-side from the agent API token. Used by the
1438
- * `@alfe.ai/openclaw-identity` plugin to bootstrap context when the
1439
- * OpenClaw daemon doesn't plumb `ctx.agentId` through to plugin hooks.
1440
- * Plugins should cache this for the daemon's lifetime (single-agent-per-
1441
- * process invariant). One HTTP round-trip per process activate; not for
1442
- * per-call use.
1443
- */
1444
- whoami(): Promise<{
1445
- agentId: string;
1446
- tenantId: string;
1447
- }>;
1448
- resolveIdentity(args: {
1449
- provider: string;
1450
- platformId: string;
1451
- kind?: "user" | "agent" | "service" | "bot" | "workspace";
1452
- displayName?: string;
1453
- }): Promise<{
1454
- identityId: string | null;
1455
- status: string;
1456
- created?: boolean;
1457
- reason?: string;
1458
- /**
1459
- * Flattened auriclabs permission strings for the resolved identity
1460
- * (scope-prefixed where applicable). Empty array on miss / org service
1461
- * outage — the runtime gate fails closed in that case.
1462
- */
1463
- permissions: string[];
1464
- }>;
1465
- searchIdentities(args?: {
1466
- q?: string;
1467
- status?: string;
1468
- limit?: number;
1469
- }): Promise<{
1470
- identities: unknown[];
1471
- }>;
1472
- getIdentityContext(identityId: string): Promise<{
1473
- context: unknown;
1474
- }>;
1475
- mergeIdentities(survivorId: string, args: {
1476
- mergedId: string;
1477
- }): Promise<{
1478
- ok: boolean;
1479
- error?: string;
1480
- }>;
1481
- unmergeIdentity(identityId: string): Promise<{
1482
- ok: boolean;
1483
- error?: string;
1484
- }>;
1485
- addIdentityNote(identityId: string, args: {
1486
- content: string;
1487
- category?: string;
1488
- }): Promise<{
1489
- noteId: string | null;
1490
- }>;
1491
- tagIdentity(identityId: string, args: {
1492
- tag: string;
1493
- action: "add" | "remove";
1494
- }): Promise<{
1495
- ok: boolean;
1496
- }>;
1497
- getIdentityChangelog(identityId: string, args?: {
1498
- limit?: number;
1499
- cursor?: string;
1500
- }): Promise<{
1501
- entries: unknown[];
1502
- cursor: string | null;
1503
- }>;
1504
- rollbackIdentity(identityId: string, args: {
1505
- targetVersion: number;
1506
- }): Promise<{
1507
- ok: boolean;
1508
- entry?: unknown;
1509
- }>;
1510
- requestIdentityVerification(args: {
1511
- claimedIdentityId: string;
1512
- requestingIdentityId: string;
1513
- requestingProvider: string;
1514
- requestingPlatformId: string;
1515
- preferredChannel?: "mobile" | "email";
1516
- /**
1517
- * Phase 2: agent-supplied contact endpoint. When provided, the top-level
1518
- * `preferredChannel` is ignored — the contact's channel wins.
1519
- */
1520
- contact?: {
1521
- channel: "email" | "mobile";
1522
- value: string;
1523
- };
1524
- }): Promise<{
1525
- verificationId: string;
1526
- channel: string;
1527
- deliveredTo: string;
1528
- expiresAt: string;
1529
- availableChannels: {
1530
- channel: string;
1531
- deliveredTo: string;
1532
- }[];
1533
- } | {
1534
- error: string;
1535
- }>;
1536
- confirmIdentityVerification(args: {
1537
- claimedIdentityId: string;
1538
- verificationId: string;
1539
- phrase: string;
1540
- }): Promise<{
1541
- verified: boolean;
1542
- identityId?: string;
1543
- /** Phase 2: how the confirm resolved — Scenario A vs B. */
1544
- action?: "merged" | "contact_verified" | "already_confirmed";
1545
- error?: string;
1546
- }>;
1547
- /**
1548
- * Update display-shape fields on an Identity. Body excludes `email` /
1549
- * `phone` / `title` / `company` / `metadata` per Section D4 — contacts go
1550
- * via the verify flow, title/company live on OrgMembership, metadata is
1551
- * not agent-writable.
1552
- */
1553
- updateIdentity(identityId: string, args: {
1554
- name?: string;
1555
- avatarUrl?: string;
1556
- timezone?: string;
1557
- locale?: string;
1558
- }): Promise<{
1559
- ok: boolean;
1560
- }>;
1561
- /**
1562
- * Phase 2 (Section H): server-side verification of a Google Chat sender via
1563
- * the agent's existing Google OAuth credentials. Returns the resolved
1564
- * identity (created or matched via Scenario-B email enrichment).
1565
- */
1566
- resolveGoogleChatSender(args: {
1567
- senderUserId: string;
1568
- spaceId?: string;
1569
- }): Promise<{
1570
- identityId: string | null;
1571
- status: string;
1572
- }>;
1573
- }
1574
- //# sourceMappingURL=identity.d.ts.map
1575
- //#endregion
1576
1603
  //#region src/domains/images.d.ts
1577
1604
  declare class ImagesApi extends ApiBase {
1578
1605
  /**
package/dist/server.d.ts CHANGED
@@ -667,6 +667,168 @@ declare class VoiceApi extends ApiBase {
667
667
  }
668
668
  //# sourceMappingURL=voice.d.ts.map
669
669
  //#endregion
670
+ //#region src/domains/identity.d.ts
671
+ type IdentityStatus = "anonymous" | "partial" | "identified" | "verified";
672
+ interface IdentityDirectoryEntry {
673
+ identityId: string;
674
+ status: IdentityStatus;
675
+ displayName: string;
676
+ name?: string;
677
+ avatarUrl?: string;
678
+ lastSeenAt: string;
679
+ lastSeenProvider?: string;
680
+ messageable: boolean;
681
+ }
682
+ declare class IdentityApi extends ApiBase {
683
+ /**
684
+ * Returns the calling agent's own identity context — `{ agentId, tenantId }`
685
+ * decoded server-side from the agent API token. Used by the
686
+ * `@alfe.ai/openclaw-identity` plugin to bootstrap context when the
687
+ * OpenClaw daemon doesn't plumb `ctx.agentId` through to plugin hooks.
688
+ * Plugins should cache this for the daemon's lifetime (single-agent-per-
689
+ * process invariant). One HTTP round-trip per process activate; not for
690
+ * per-call use.
691
+ */
692
+ whoami(): Promise<{
693
+ agentId: string;
694
+ tenantId: string;
695
+ }>;
696
+ resolveIdentity(args: {
697
+ provider: string;
698
+ platformId: string;
699
+ kind?: "user" | "agent" | "service" | "bot" | "workspace";
700
+ displayName?: string;
701
+ }): Promise<{
702
+ identityId: string | null;
703
+ status: string;
704
+ created?: boolean;
705
+ reason?: string;
706
+ /**
707
+ * Flattened auriclabs permission strings for the resolved identity
708
+ * (scope-prefixed where applicable). Empty array on miss / org service
709
+ * outage — the runtime gate fails closed in that case.
710
+ */
711
+ permissions: string[];
712
+ }>;
713
+ searchIdentities(args?: {
714
+ q?: string;
715
+ status?: string;
716
+ limit?: number;
717
+ }): Promise<{
718
+ identities: unknown[];
719
+ }>;
720
+ listIdentities(args?: {
721
+ status?: IdentityStatus;
722
+ limit?: number;
723
+ cursor?: string;
724
+ }): Promise<{
725
+ identities: IdentityDirectoryEntry[];
726
+ cursor: string | null;
727
+ }>;
728
+ getIdentityContext(identityId: string): Promise<{
729
+ context: unknown;
730
+ }>;
731
+ mergeIdentities(survivorId: string, args: {
732
+ mergedId: string;
733
+ }): Promise<{
734
+ ok: boolean;
735
+ error?: string;
736
+ }>;
737
+ unmergeIdentity(identityId: string): Promise<{
738
+ ok: boolean;
739
+ error?: string;
740
+ }>;
741
+ addIdentityNote(identityId: string, args: {
742
+ content: string;
743
+ category?: string;
744
+ }): Promise<{
745
+ noteId: string | null;
746
+ }>;
747
+ tagIdentity(identityId: string, args: {
748
+ tag: string;
749
+ action: "add" | "remove";
750
+ }): Promise<{
751
+ ok: boolean;
752
+ }>;
753
+ getIdentityChangelog(identityId: string, args?: {
754
+ limit?: number;
755
+ cursor?: string;
756
+ }): Promise<{
757
+ entries: unknown[];
758
+ cursor: string | null;
759
+ }>;
760
+ rollbackIdentity(identityId: string, args: {
761
+ targetVersion: number;
762
+ }): Promise<{
763
+ ok: boolean;
764
+ entry?: unknown;
765
+ }>;
766
+ requestIdentityVerification(args: {
767
+ claimedIdentityId: string;
768
+ requestingIdentityId: string;
769
+ requestingProvider: string;
770
+ requestingPlatformId: string;
771
+ preferredChannel?: "mobile" | "email";
772
+ /**
773
+ * Phase 2: agent-supplied contact endpoint. When provided, the top-level
774
+ * `preferredChannel` is ignored — the contact's channel wins.
775
+ */
776
+ contact?: {
777
+ channel: "email" | "mobile";
778
+ value: string;
779
+ };
780
+ }): Promise<{
781
+ verificationId: string;
782
+ channel: string;
783
+ deliveredTo: string;
784
+ expiresAt: string;
785
+ availableChannels: {
786
+ channel: string;
787
+ deliveredTo: string;
788
+ }[];
789
+ } | {
790
+ error: string;
791
+ }>;
792
+ confirmIdentityVerification(args: {
793
+ claimedIdentityId: string;
794
+ verificationId: string;
795
+ phrase: string;
796
+ }): Promise<{
797
+ verified: boolean;
798
+ identityId?: string;
799
+ /** Phase 2: how the confirm resolved — Scenario A vs B. */
800
+ action?: "merged" | "contact_verified" | "already_confirmed";
801
+ error?: string;
802
+ }>;
803
+ /**
804
+ * Update display-shape fields on an Identity. Body excludes `email` /
805
+ * `phone` / `title` / `company` / `metadata` per Section D4 — contacts go
806
+ * via the verify flow, title/company live on OrgMembership, metadata is
807
+ * not agent-writable.
808
+ */
809
+ updateIdentity(identityId: string, args: {
810
+ name?: string;
811
+ avatarUrl?: string;
812
+ timezone?: string;
813
+ locale?: string;
814
+ }): Promise<{
815
+ ok: boolean;
816
+ }>;
817
+ /**
818
+ * Phase 2 (Section H): server-side verification of a Google Chat sender via
819
+ * the agent's existing Google OAuth credentials. Returns the resolved
820
+ * identity (created or matched via Scenario-B email enrichment).
821
+ */
822
+ resolveGoogleChatSender(args: {
823
+ senderUserId: string;
824
+ spaceId?: string;
825
+ }): Promise<{
826
+ identityId: string | null;
827
+ status: string;
828
+ }>;
829
+ }
830
+ //# sourceMappingURL=identity.d.ts.map
831
+ //#endregion
670
832
  //#region src/domains/search.d.ts
671
833
  /**
672
834
  * The broad-news providers behind the metered `services/news` Lambda. The
@@ -778,6 +940,14 @@ declare class WebhooksApi extends ApiBase {
778
940
  //#endregion
779
941
  //#region src/domains/chat.d.ts
780
942
  declare class ChatApi extends ApiBase {
943
+ ensureDirectConversation(identityId: string): Promise<{
944
+ conversationId: string;
945
+ identityId: string;
946
+ tenantId: string;
947
+ userId: string;
948
+ displayName: string;
949
+ created: boolean;
950
+ }>;
781
951
  presignAttachments(files: {
782
952
  filename: string;
783
953
  mimeType: string;
@@ -1430,149 +1600,6 @@ declare class DatabaseApi extends ApiBase {
1430
1600
  }
1431
1601
  //# sourceMappingURL=database.d.ts.map
1432
1602
  //#endregion
1433
- //#region src/domains/identity.d.ts
1434
- declare class IdentityApi extends ApiBase {
1435
- /**
1436
- * Returns the calling agent's own identity context — `{ agentId, tenantId }`
1437
- * decoded server-side from the agent API token. Used by the
1438
- * `@alfe.ai/openclaw-identity` plugin to bootstrap context when the
1439
- * OpenClaw daemon doesn't plumb `ctx.agentId` through to plugin hooks.
1440
- * Plugins should cache this for the daemon's lifetime (single-agent-per-
1441
- * process invariant). One HTTP round-trip per process activate; not for
1442
- * per-call use.
1443
- */
1444
- whoami(): Promise<{
1445
- agentId: string;
1446
- tenantId: string;
1447
- }>;
1448
- resolveIdentity(args: {
1449
- provider: string;
1450
- platformId: string;
1451
- kind?: "user" | "agent" | "service" | "bot" | "workspace";
1452
- displayName?: string;
1453
- }): Promise<{
1454
- identityId: string | null;
1455
- status: string;
1456
- created?: boolean;
1457
- reason?: string;
1458
- /**
1459
- * Flattened auriclabs permission strings for the resolved identity
1460
- * (scope-prefixed where applicable). Empty array on miss / org service
1461
- * outage — the runtime gate fails closed in that case.
1462
- */
1463
- permissions: string[];
1464
- }>;
1465
- searchIdentities(args?: {
1466
- q?: string;
1467
- status?: string;
1468
- limit?: number;
1469
- }): Promise<{
1470
- identities: unknown[];
1471
- }>;
1472
- getIdentityContext(identityId: string): Promise<{
1473
- context: unknown;
1474
- }>;
1475
- mergeIdentities(survivorId: string, args: {
1476
- mergedId: string;
1477
- }): Promise<{
1478
- ok: boolean;
1479
- error?: string;
1480
- }>;
1481
- unmergeIdentity(identityId: string): Promise<{
1482
- ok: boolean;
1483
- error?: string;
1484
- }>;
1485
- addIdentityNote(identityId: string, args: {
1486
- content: string;
1487
- category?: string;
1488
- }): Promise<{
1489
- noteId: string | null;
1490
- }>;
1491
- tagIdentity(identityId: string, args: {
1492
- tag: string;
1493
- action: "add" | "remove";
1494
- }): Promise<{
1495
- ok: boolean;
1496
- }>;
1497
- getIdentityChangelog(identityId: string, args?: {
1498
- limit?: number;
1499
- cursor?: string;
1500
- }): Promise<{
1501
- entries: unknown[];
1502
- cursor: string | null;
1503
- }>;
1504
- rollbackIdentity(identityId: string, args: {
1505
- targetVersion: number;
1506
- }): Promise<{
1507
- ok: boolean;
1508
- entry?: unknown;
1509
- }>;
1510
- requestIdentityVerification(args: {
1511
- claimedIdentityId: string;
1512
- requestingIdentityId: string;
1513
- requestingProvider: string;
1514
- requestingPlatformId: string;
1515
- preferredChannel?: "mobile" | "email";
1516
- /**
1517
- * Phase 2: agent-supplied contact endpoint. When provided, the top-level
1518
- * `preferredChannel` is ignored — the contact's channel wins.
1519
- */
1520
- contact?: {
1521
- channel: "email" | "mobile";
1522
- value: string;
1523
- };
1524
- }): Promise<{
1525
- verificationId: string;
1526
- channel: string;
1527
- deliveredTo: string;
1528
- expiresAt: string;
1529
- availableChannels: {
1530
- channel: string;
1531
- deliveredTo: string;
1532
- }[];
1533
- } | {
1534
- error: string;
1535
- }>;
1536
- confirmIdentityVerification(args: {
1537
- claimedIdentityId: string;
1538
- verificationId: string;
1539
- phrase: string;
1540
- }): Promise<{
1541
- verified: boolean;
1542
- identityId?: string;
1543
- /** Phase 2: how the confirm resolved — Scenario A vs B. */
1544
- action?: "merged" | "contact_verified" | "already_confirmed";
1545
- error?: string;
1546
- }>;
1547
- /**
1548
- * Update display-shape fields on an Identity. Body excludes `email` /
1549
- * `phone` / `title` / `company` / `metadata` per Section D4 — contacts go
1550
- * via the verify flow, title/company live on OrgMembership, metadata is
1551
- * not agent-writable.
1552
- */
1553
- updateIdentity(identityId: string, args: {
1554
- name?: string;
1555
- avatarUrl?: string;
1556
- timezone?: string;
1557
- locale?: string;
1558
- }): Promise<{
1559
- ok: boolean;
1560
- }>;
1561
- /**
1562
- * Phase 2 (Section H): server-side verification of a Google Chat sender via
1563
- * the agent's existing Google OAuth credentials. Returns the resolved
1564
- * identity (created or matched via Scenario-B email enrichment).
1565
- */
1566
- resolveGoogleChatSender(args: {
1567
- senderUserId: string;
1568
- spaceId?: string;
1569
- }): Promise<{
1570
- identityId: string | null;
1571
- status: string;
1572
- }>;
1573
- }
1574
- //# sourceMappingURL=identity.d.ts.map
1575
- //#endregion
1576
1603
  //#region src/domains/images.d.ts
1577
1604
  declare class ImagesApi extends ApiBase {
1578
1605
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alfe.ai/microsoft-mcp",
3
- "version": "0.1.11",
3
+ "version": "0.1.12",
4
4
  "description": "Microsoft 365 MCP server — multi-account Microsoft Graph access using Alfe OAuth credentials with server-mediated token refresh",
5
5
  "type": "module",
6
6
  "main": "./dist/server.js",
@@ -22,7 +22,7 @@
22
22
  "@modelcontextprotocol/sdk": "^1.29.0",
23
23
  "zod": "^4.0.5",
24
24
  "@alfe.ai/config": "0.4.1",
25
- "@alfe.ai/agent-api-client": "0.17.0"
25
+ "@alfe.ai/agent-api-client": "0.17.1"
26
26
  },
27
27
  "license": "UNLICENSED",
28
28
  "homepage": "https://alfe.ai",