Skip to content
v0.1.3MIT

Microsoft Teams connector — list teams/channels and post channel messages via Microsoft Graph

What this package declares

The file a client reads when it loads this plugin, exactly as this revision carries it.

plugin.json
{
	"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
	"name": "teams",
	"version": "0.1.3",
	"description": "Microsoft Teams connector — list teams/channels and post channel messages via Microsoft Graph",
	"author": {
		"name": "Dimension"
	},
	"license": "MIT",
	"keywords": [
		"microsoft",
		"teams",
		"graph",
		"azure",
		"channel",
		"connector"
	],
	"extensions": {
		"ai.insodimension.dimension": {
			"contractVersion": 1,
			"title": "Microsoft Teams",
			"icon": "assets/icon.svg",
			"category": "connector",
			"defaultEnabled": false,
			"examples": [
				"Post the release notes to the #general channel in the Engineering team",
				"List my Microsoft Teams",
				"Which channels does the Marketing team have?"
			],
			"connect": {
				"kind": [
					"form"
				],
				"setup": [
					{
						"title": "Register an app in Microsoft Entra (Azure AD)",
						"detail": "Azure Portal → App registrations → New registration. Name it \"Dimension Teams\", leave the default single-tenant option, and register — no redirect URI is needed for app-only access.",
						"url": "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade",
						"urlLabel": "Open App registrations"
					},
					{
						"title": "Copy the tenant and client IDs",
						"detail": "On the app's Overview page, copy the Directory (tenant) ID and the Application (client) ID — you'll paste both into the form below."
					},
					{
						"title": "Create a client secret",
						"detail": "Certificates & secrets → New client secret → set an expiry → Add. Copy the secret VALUE immediately — Azure shows it only once and it disappears after you leave the page."
					},
					{
						"title": "Grant Graph application permissions + admin consent",
						"detail": "API permissions → Add a permission → Microsoft Graph → Application permissions. Add Group.Read.All, Channel.ReadBasic.All, and ChannelMessage.Send, then click \"Grant admin consent for <tenant>\" (requires a tenant admin). Without admin consent every tool call fails with a 401.",
						"url": "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade",
						"urlLabel": "Open App registrations"
					},
					{
						"title": "Paste your credentials below",
						"detail": "Enter the Directory (tenant) ID, Application (client) ID, and the client secret value. They stay on this machine."
					}
				],
				"form": [
					{
						"id": "tenantId",
						"label": "Directory (tenant) ID",
						"help": "From your app registration's Overview page in the Azure Portal — a GUID like 00000000-0000-0000-0000-000000000000.",
						"helpUrl": "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade",
						"helpUrlLabel": "Open App registrations"
					},
					{
						"id": "clientId",
						"label": "Application (client) ID",
						"help": "Also on the app's Overview page — identifies your Azure AD application.",
						"helpUrl": "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade",
						"helpUrlLabel": "Open App registrations"
					},
					{
						"id": "clientSecret",
						"label": "Client secret value",
						"secret": true,
						"help": "The VALUE (not the Secret ID) created under Certificates & secrets. Azure shows it once — if you lost it, create a new client secret. Stored only on this machine.",
						"helpUrl": "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade",
						"helpUrlLabel": "Open App registrations"
					}
				],
				"configTemplate": "connect/token.template.json",
				"configTarget": "~/.config/dimension-teams/token.json"
			},
			"toolRenderer": [
				{
					"match": "teams_list_teams",
					"use": "summary",
					"icon": "teams",
					"title": "Teams"
				},
				{
					"match": "teams_list_channels",
					"use": "summary",
					"icon": "teams",
					"title": "Channels"
				},
				{
					"match": "teams_send_channel_message",
					"use": "summary",
					"icon": "teams",
					"title": "Post to channel"
				},
				{
					"match": "teams_read_channel_messages",
					"use": "summary",
					"icon": "teams",
					"title": "Read messages"
				},
				{
					"match": "teams_reply_channel_message",
					"use": "summary",
					"icon": "teams",
					"title": "Reply"
				},
				{
					"match": "teams_list_members",
					"use": "summary",
					"icon": "teams",
					"title": "Members"
				}
			],
			"tools": [
				{
					"name": "teams_list_teams",
					"description": "List the Microsoft Teams in the connected Azure AD tenant. Returns id/name/description per line."
				},
				{
					"name": "teams_list_channels",
					"description": "List the channels of a Microsoft Team (by team id). Returns id/displayName per line."
				},
				{
					"name": "teams_send_channel_message",
					"description": "Post a message to a Teams channel. DESTRUCTIVE — confirm team, channel, and text first. App-only sending needs ChannelMessage.Send with admin consent and may be tenant-restricted."
				},
				{
					"name": "teams_read_channel_messages",
					"description": "Read recent messages in a Teams channel. Returns sender · timestamp · text (HTML stripped, truncated) per message. App-only reading needs ChannelMessage.Read.All with admin consent (else 403)."
				},
				{
					"name": "teams_reply_channel_message",
					"description": "Reply to a message in a Teams channel. DESTRUCTIVE — confirm team, channel, target message, and text first. App-only sending needs ChannelMessage.Send with admin consent and may be tenant-restricted."
				},
				{
					"name": "teams_list_members",
					"description": "List the members of a Microsoft Team. Returns displayName · roles per line. Needs TeamMember.Read.All with admin consent (else 403)."
				}
			]
		}
	}
}

Client extensions

Data this package carries for particular clients. The directory lists the clients named and never reads what is addressed to them.

  • ai.insodimension.dimension