{"openapi":"3.1.0","info":{"title":"Microsoft Teams Admin (BYOK) API","version":"0.1.0","description":"Microsoft Teams Admin (BYOK) lets an AI assistant read your own Microsoft Teams Admin data through the Microsoft Teams Admin API with a key you supply (Microsoft Graph access token (an OAuth token valid for about an hour)). Read-only: 9 tools (list_teams, get_team, list_channels, list_all_channels, get_channel, list_channel_tabs, list_team_installed_apps, list_team_tags, list_catalog_apps). The...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-graph-teams.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-graph-teams/docs"},"termsOfService":"https://connectorbay.com/byok-graph-teams/terms"},"servers":[{"url":"https://byok-graph-teams.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-graph-teams/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_teams":{"post":{"operationId":"list_teams","summary":"List all teams in the tenant (Microsoft 365 groups provisioned as teams) with name, description, visibility and creation","description":"List all teams in the tenant (Microsoft 365 groups provisioned as teams) with name, description, visibility and creation time. Needs Group.Read.All. Only the first page is returned. Use for \"Which Microsoft Teams teams exist in our tenant\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"filter":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":"resourceProvisioningOptions/Any(x:x eq 'Team')","description":"OData $filter; the default keeps only groups that are teams. Change only to narrow further.","title":"Filter"},"select":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":"id,displayName,description,createdDateTime,visibility,mail","description":"Fields to request (leave the default).","title":"Select"},"top":{"anyOf":[{"maximum":999,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many teams to return (1 to 999).","title":"Top"}},"title":"list_teamsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_team":{"post":{"operationId":"get_team","summary":"Get one team's settings: name, description, visibility, archived flag, creation time, link, and member, guest, messaging","description":"Get one team's settings: name, description, visibility, archived flag, creation time, link, and member, guest, messaging and fun settings. Needs Team.ReadBasic.All or TeamSettings.Read.All. Use for \"What are the settings of Microsoft team 00000000-0000-0000-0000-000000000001\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"team_id":{"description":"Object id (GUID) of the team, from list_teams.","maxLength":200,"title":"Team Id","type":"string"}},"required":["team_id"],"title":"get_teamArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_channels":{"post":{"operationId":"list_channels","summary":"List a team's channels (standard, private and shared as listed for the caller) with type, description and creation time;","description":"List a team's channels (standard, private and shared as listed for the caller) with type, description and creation time; message content is not returned. Needs Channel.ReadBasic.All. Use for \"What channels does Microsoft team 00000000-0000-0000-0000-000000000001 have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"team_id":{"description":"Object id (GUID) of the team, from list_teams.","maxLength":200,"title":"Team Id","type":"string"},"filter":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Optional OData $filter expression, for example \"displayName eq 'General'\".","title":"Filter"}},"required":["team_id"],"title":"list_channelsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_all_channels":{"post":{"operationId":"list_all_channels","summary":"List all channels of a team including channels shared with it from other teams, with type and creation time. Needs Chann","description":"List all channels of a team including channels shared with it from other teams, with type and creation time. Needs Channel.ReadBasic.All. Use for \"Which channels, including shared ones, does Microsoft team 00000000-0000-0000-0000-000000000001 see\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"team_id":{"description":"Object id (GUID) of the team, from list_teams.","maxLength":200,"title":"Team Id","type":"string"},"filter":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Optional OData $filter expression, for example \"displayName eq 'General'\".","title":"Filter"}},"required":["team_id"],"title":"list_all_channelsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_channel":{"post":{"operationId":"get_channel","summary":"Get one channel: name, description, membership type, archive flag, creation time and link. Needs Channel.ReadBasic.All. ","description":"Get one channel: name, description, membership type, archive flag, creation time and link. Needs Channel.ReadBasic.All. Use for \"Describe channel General of Microsoft team 00000000-0000-0000-0000-000000000001\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"team_id":{"description":"Object id (GUID) of the team, from list_teams.","maxLength":200,"title":"Team Id","type":"string"},"channel_id":{"description":"Id of the channel, from list_channels (looks like 19:abc...@thread.tacv2).","maxLength":200,"title":"Channel Id","type":"string"}},"required":["team_id","channel_id"],"title":"get_channelArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_channel_tabs":{"post":{"operationId":"list_channel_tabs","summary":"List the tabs pinned in a channel with name and link (configuration details of the tab are not returned). Needs TeamsTab","description":"List the tabs pinned in a channel with name and link (configuration details of the tab are not returned). Needs TeamsTab.Read.All. Use for \"Which tabs are pinned in the General channel\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"team_id":{"description":"Object id (GUID) of the team, from list_teams.","maxLength":200,"title":"Team Id","type":"string"},"channel_id":{"description":"Id of the channel, from list_channels (looks like 19:abc...@thread.tacv2).","maxLength":200,"title":"Channel Id","type":"string"}},"required":["team_id","channel_id"],"title":"list_channel_tabsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_team_installed_apps":{"post":{"operationId":"list_team_installed_apps","summary":"List the apps installed in a team with the app name, distribution method and external id. Needs TeamsAppInstallation.Rea","description":"List the apps installed in a team with the app name, distribution method and external id. Needs TeamsAppInstallation.ReadForTeam. Use for \"Which apps are installed in Microsoft team 00000000-0000-0000-0000-000000000001\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"team_id":{"description":"Object id (GUID) of the team, from list_teams.","maxLength":200,"title":"Team Id","type":"string"},"expand":{"anyOf":[{"const":"teamsApp","type":"string"},{"type":"null"}],"default":"teamsApp","description":"Related object to include; keep 'teamsApp' to get app names.","title":"Expand"}},"required":["team_id"],"title":"list_team_installed_appsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_team_tags":{"post":{"operationId":"list_team_tags","summary":"List the tags defined in a team (name, description, number of members; member names are not returned). Needs TeamworkTag","description":"List the tags defined in a team (name, description, number of members; member names are not returned). Needs TeamworkTag.Read. Use for \"Which tags does Microsoft team 00000000-0000-0000-0000-000000000001 define\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"team_id":{"description":"Object id (GUID) of the team, from list_teams.","maxLength":200,"title":"Team Id","type":"string"}},"required":["team_id"],"title":"list_team_tagsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_catalog_apps":{"post":{"operationId":"list_catalog_apps","summary":"List apps in the Teams app catalog, optionally only your organization's custom apps (filter distributionMethod eq 'organ","description":"List apps in the Teams app catalog, optionally only your organization's custom apps (filter distributionMethod eq 'organization'). Needs AppCatalog.Read.All. Use for \"Which custom Teams apps has our organization published\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"filter":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Optional OData $filter expression, for example \"displayName eq 'General'\".","title":"Filter"},"expand":{"anyOf":[{"const":"appDefinitions","type":"string"},{"type":"null"}],"default":null,"description":"Related object to include; leave unset or use 'appDefinitions' for versions and publishing state.","title":"Expand"}},"title":"list_catalog_appsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}