Ms Graph
@dougschaefer/ms-graphv2026.06.29.1
01README
Broad Microsoft Graph v1.0 extension — seven model types over app-only client credentials: calendar (room/user calendarView, current/next meeting), places (room resources), users (Entra directory reads, manager, memberOf), groups, mail (Outlook messages), teams (chats/teams/channels/messages), and presence. Shared token-caching + paging client; credentials from the azure-asei vault. Supersedes the narrow ms-graph-calendar and absorbs azure-ad-user's lookup.
02Release Notes
Initial public publish (extension was catalog-only after the productization merge).
03Models
@dougschaefer/ms-graph-calendarv2026.06.29.1ms-graph/calendar.ts
fn listEvents(roomEmail: string, startDateTime: string, endDateTime: string, top: number)
GET /users/{roomEmail}/calendarView — return all meetings for a room or user mailbox within a caller-supplied time window, ordered by start time.
| Argument | Type | Description |
|---|---|---|
| roomEmail | string | Room or user mailbox address, e.g. conf-b@example.com |
| startDateTime | string | Window start in ISO-8601 format, e.g. 2026-06-29T00:00:00 |
| endDateTime | string | Window end in ISO-8601 format, e.g. 2026-06-29T23:59:59 |
| top | number | Max events per page (1-999). The method auto-follows @odata.nextLink. |
fn getEvent(roomEmail: string, eventId: string)
GET /users/{roomEmail}/events/{id} — fetch a single calendar event by its Graph event id, normalized to the standard meeting shape. (Permission: Calendars.Read)
| Argument | Type | Description |
|---|---|---|
| roomEmail | string | Room or user mailbox address that owns the event, e.g. conf-b@example.com |
| eventId | string | Graph event id |
fn getCurrentMeeting(roomEmail: string)
Convenience method: returns the meeting currently in progress for the room, or null if the room is free.
| Argument | Type | Description |
|---|---|---|
| roomEmail | string | Room mailbox address, e.g. conf-b@example.com |
fn getNextMeeting(roomEmail: string, lookAheadHours: number)
Convenience method: returns the next upcoming meeting for the room — the first meeting that starts after now (within the look-ahead window).
| Argument | Type | Description |
|---|---|---|
| roomEmail | string | Room mailbox address, e.g. conf-b@example.com |
| lookAheadHours | number | How many hours ahead to search for the next meeting (default 8 — remainder of the workday) |
Resources
calendarView(5m)— Ordered list of meetings for a mailbox within a time window (from /users/{mailbox}/calendarView). Normalized to {subject, start, end, organizer, attendees, attendeeCount}.
event(5m)— A single calendar event fetched by id from /users/{mailbox}/events/{id}, normalized to the standard meeting shape.
currentMeeting(2m)— The meeting in progress right now for the mailbox, or null if none. Derived from a narrow calendarView window centered on the current time. The IARS meeting-agent's primary calendar signal.
nextMeeting(2m)— The next upcoming meeting for the mailbox (the first meeting starting after now). Null if nothing is on the calendar in the look-ahead window. Used by the IARS meeting-agent to prepare the room ahead of time.
@dougschaefer/ms-graph-placesv2026.06.29.1ms-graph/places.ts
fn listRooms(top: number)
GET /places/microsoft.graph.room — list all room resources in the tenant. Returns displayName + emailAddress for each room. Use the emailAddress as the roomEmail input for the calendar model. The method auto-follows @odata.nextLink. (Permission: Place.Read.All)
| Argument | Type | Description |
|---|---|---|
| top | number | Max rooms to return per page (1-100). Paging is handled automatically. |
fn getRoom(idOrEmail: string)
GET /places/{idOrEmail} — fetch detail for a single room resource: capacity, building, floor, A/V device names, accessibility, and tags. Pass the room's emailAddress or object ID. (Permission: Place.Read.All)
| Argument | Type | Description |
|---|---|---|
| idOrEmail | string | Room emailAddress (e.g. conf-b@example.com) or Graph object ID |
Resources
roomList(1d)— Snapshot of all room resources in the tenant from /places/microsoft.graph.room. Each entry includes displayName and emailAddress.
roomDetail(7d)— Detail for a single room resource from GET /places/{id-or-email}: displayName, emailAddress, capacity, building, floor, and A/V capabilities.
@dougschaefer/ms-graph-usersv2026.06.29.1ms-graph/users.ts
fn get(idOrUpn: string)
GET /users/{idOrUpn} — resolve one user by Entra object id or userPrincipalName, selected to the standard profile fields (displayName, department, jobTitle, officeLocation, mail, etc.). Writes the user under a slug of the object id. This is the IARS reverse-lookup signal — pass the object id. (Permission: User.Read.All)
| Argument | Type | Description |
|---|---|---|
| idOrUpn | string | Entra object id (GUID) or userPrincipalName (user@example.com) |
fn list(filter?: string, maxItems: number)
GET /users — enumerate directory users, selected to the standard profile fields. Optionally narrow with an OData $filter and cap the total with maxItems. Auto-follows @odata.nextLink. (Permission: User.Read.All)
| Argument | Type | Description |
|---|---|---|
| filter? | string | OData $filter, e.g. "startswith(displayName,\ |
| maxItems | number | Hard cap on total users collected across pages (default 200). |
fn getManager(idOrUpn: string)
GET /users/{idOrUpn}/manager — return a user's manager as a user record. Throws if the user has no manager assigned. (Permission: User.Read.All)
| Argument | Type | Description |
|---|---|---|
| idOrUpn | string | Entra object id (GUID) or userPrincipalName of the user whose manager to fetch |
fn memberOf(idOrUpn: string)
GET /users/{idOrUpn}/memberOf — list the groups and directory roles a user is a member of, for access review. Auto-follows @odata.nextLink. (Permission: User.Read.All)
| Argument | Type | Description |
|---|---|---|
| idOrUpn | string | Entra object id (GUID) or userPrincipalName of the user |
Resources
user(infinite)— An Entra ID user from GET /users/{id}, selected to the standard profile fields. Written under a slug of the object id; the user fields land under the data instance's content.
membership(infinite)— A directory object (group or directory role) a user is a member of, from /users/{id}/memberOf.
@dougschaefer/ms-graph-groupsv2026.06.29.1ms-graph/groups.ts
fn list(filter?: string, maxItems: number)
GET /groups — enumerate directory groups, selected to the standard fields. Optionally narrow with an OData $filter and cap the total with maxItems. Auto-follows @odata.nextLink. (Permission: Group.Read.All)
| Argument | Type | Description |
|---|---|---|
| filter? | string | OData $filter, e.g. "securityEnabled eq true" or "startswith(displayName,\ |
| maxItems | number | Hard cap on total groups collected across pages (default 200). |
fn get(id: string)
GET /groups/{id} — resolve one group by Entra object id, selected to the standard fields. (Permission: Group.Read.All)
| Argument | Type | Description |
|---|---|---|
| id | string | Entra group object id (GUID) |
fn listMembers(id: string, maxItems: number)
GET /groups/{id}/members — list the members of a group (users, devices, nested groups). Auto-follows @odata.nextLink. (Permission: Group.Read.All)
| Argument | Type | Description |
|---|---|---|
| id | string | Entra group object id (GUID) |
| maxItems | number | Hard cap on total members collected across pages (default 500). |
Resources
group(infinite)— An Entra ID group from GET /groups/{id}, selected to the standard fields (displayName, mail, securityEnabled, groupTypes, membershipRule, etc.).
member(infinite)— A member of a group (user, device, or nested group) from /groups/{id}/members.
@dougschaefer/ms-graph-mailv2026.06.29.1ms-graph/mail.ts
fn listMessages(userId: string, filter?: string, maxItems: number)
GET /users/{userId}/messages — list a mailbox's messages, ordered newest first, with metadata and bodyPreview. Optionally narrow with an OData $filter and cap with maxItems. Auto-follows @odata.nextLink. (Permission: Mail.Read)
| Argument | Type | Description |
|---|---|---|
| userId | string | Mailbox userPrincipalName or object id, e.g. user@example.com |
| filter? | string | OData $filter, e.g. "isRead eq false" or "importance eq \ |
| maxItems | number | Hard cap on total messages collected across pages (default 50). |
fn getMessage(userId: string, messageId: string)
GET /users/{userId}/messages/{id} — fetch one message including its full body. (Permission: Mail.Read)
| Argument | Type | Description |
|---|---|---|
| userId | string | Mailbox userPrincipalName or object id that owns the message |
| messageId | string | Graph message id |
Resources
messageList(5m)— Snapshot of a mailbox's messages from GET /users/{userId}/messages, newest first, with metadata and bodyPreview.
message(5m)— A single Outlook message from GET /users/{userId}/messages/{id}, including the full body.
@dougschaefer/ms-graph-teamsv2026.06.29.1ms-graph/teams.ts
fn listChats(userId: string, maxItems: number)
GET /users/{userId}/chats — list a user's Teams chats. Auto-follows @odata.nextLink. (Permission: Chat.Read.All)
| Argument | Type | Description |
|---|---|---|
| userId | string | User userPrincipalName or object id, e.g. user@example.com |
| maxItems | number | Hard cap on total chats collected across pages (default 100). |
fn listJoinedTeams(userId: string)
GET /users/{userId}/joinedTeams — list the teams a user has joined. Auto-follows @odata.nextLink. (Permission: Team.ReadBasic.All)
| Argument | Type | Description |
|---|---|---|
| userId | string | User userPrincipalName or object id, e.g. user@example.com |
fn listChannels(teamId: string)
GET /teams/{teamId}/channels — list a team's channels. Auto-follows @odata.nextLink. (Permission: Channel.ReadBasic.All)
| Argument | Type | Description |
|---|---|---|
| teamId | string | Team (group) object id |
fn listMessages(chatId?: string, teamId?: string, channelId?: string, maxItems: number)
List messages from a chat (pass chatId) or a channel (pass teamId + channelId). Auto-follows @odata.nextLink.
| Argument | Type | Description |
|---|---|---|
| chatId? | string | Chat id — provide for chat messages (mutually exclusive with teamId/channelId) |
| teamId? | string | Team id — provide with channelId for channel messages |
| channelId? | string | Channel id — provide with teamId for channel messages |
| maxItems | number | Hard cap on total messages collected across pages (default 50). |
Resources
chat(1h)— A Teams chat from /users/{userId}/chats.
team(1d)— A team the user has joined, from /users/{userId}/joinedTeams.
channel(1d)— A channel of a team, from /teams/{teamId}/channels.
messageList(5m)— Snapshot of messages from a chat or channel, from /chats/{id}/messages or /teams/{teamId}/channels/{channelId}/messages.
@dougschaefer/ms-graph-presencev2026.06.29.1ms-graph/presence.ts
fn getPresence(userId: string)
GET /users/{userId}/presence — return a user's current Teams presence (availability + activity). (Permission: Presence.Read.All)
| Argument | Type | Description |
|---|---|---|
| userId | string | User object id or userPrincipalName, e.g. user@example.com |
Resources
presence(2m)— A user's Teams presence from GET /users/{userId}/presence: availability and activity at capture time.
04Stats
A
100 / 100
Downloads
0
Archive size
29.6 KB
- Has README or module doc2/2earned
- README has a code example1/1earned
- README is substantive1/1earned
- Most symbols documented1/1earned
- No slow types (deprecated)1/1earned
- Dependencies pass trust audit2/2earned
- Has description1/1earned
- Platform support declared (or universal)2/2earned
- License declared1/1earned
- Verified public repository2/2earned
05Platforms
06Labels