Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions plugins/microsoft-managed-apps/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,15 +67,15 @@ This plugin uses a memory bank (`memory-bank.md`) to persist state across sessio
| `/add-onedrive` | OneDrive for Business files. |
| `/add-azuredevops` | Azure DevOps work items / pipelines. |
| `/add-mcscopilot` | Microsoft Copilot Studio agents. |
| `/add-connector` | Generic fallback for any other connector. |
| `/add-data-source` | Generic fallback for any other connector. |
| `/list-connectors` | Enumerate connectors / bound data sources for discovery. |

### Workflow

```
/create-app
└── /dev (default loop)
└── /add-connector (or specific /add-*)
└── /add-data-source (or specific /add-*)
└── /deploy (explicit, requires confirmation)
└── /share, /delete-app (explicit, require confirmation)
```
Expand Down
4 changes: 2 additions & 2 deletions plugins/microsoft-managed-apps/QUICKSTART.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,9 +79,9 @@ Your copilot will recommend data sources based on what your app needs to do. To
| Send Teams messages | `/add-teams` |
| Query Azure DevOps work items | `/add-azuredevops` |
| Invoke a Copilot Studio agent | `/add-mcscopilot` |
| Something else (any other connector) | `/add-connector` |
| Something else (any other connector) | `/add-data-source` |

Each command runs `ms app add connector --connector <api-id>` against the right connector, regenerates typed TypeScript services under `src/`, and verifies the build. Your local `ms app dev` hot-reloads the new services.
Each command runs `ms app add data-source --connector <api-id>` against the right connector, regenerates typed TypeScript services under `src/`, and verifies the build. Your local `ms app dev` hot-reloads the new services.

### Ship to the Cloud

Expand Down
2 changes: 1 addition & 1 deletion plugins/microsoft-managed-apps/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Microsoft Apps run locally against the App Player with hot reload (`ms app dev`)
| ---------------- | -------- |
| Scaffold | `/create-app` |
| Lifecycle | `/dev`, `/deploy`, `/play`, `/share`, `/share-link`, `/delete-app`, `/list-apps` |
| Data sources | `/add-connector`, `/add-dataverse`, `/add-sharepoint`, `/add-excel`, `/add-office365`, `/add-teams`, `/add-onedrive`, `/add-azuredevops`, `/add-mcscopilot`, `/list-connectors` |
| Data sources | `/add-data-source`, `/add-dataverse`, `/add-sharepoint`, `/add-excel`, `/add-office365`, `/add-teams`, `/add-onedrive`, `/add-azuredevops`, `/add-mcscopilot`, `/list-connectors` |

## Prerequisites

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,13 +67,13 @@ ms --version # Bin name has flipped between dev builds
| Read lists or manage documents in SharePoint | SharePoint (`/add-sharepoint`) | Direct list/document operations |
| Send emails, read inbox, manage calendar | Office 365 Outlook (`/add-office365`) | Native calendar API with CRUD |
| Invoke a Copilot Studio agent | MCS Copilot (`/add-mcscopilot`) | Agent invocation |
| Connect to any other service | Generic (`/add-connector`) | Fallback for unlisted connectors |
| Connect to any other service | Generic (`/add-data-source`) | Fallback for unlisted connectors |

**See** [Connector Decision Guide](../shared/connector-decision-guide.md) for decision trees, common app patterns, and scenario examples.

### Generated Code Pattern

`ms app add connector` (with `--as table` or `--as action`) writes generated TypeScript directly under `src/`. The exact subdirectory layout is owned by `@microsoft/apps-actions`; expect `*Model.ts` and `*Service.ts` files alongside your handwritten code. Always use these generated services for data access.
`ms app add data-source` (with `--as table` or `--as action`) writes generated TypeScript directly under `src/`. The exact subdirectory layout is owned by `@microsoft/apps-actions`; expect `*Model.ts` and `*Service.ts` files alongside your handwritten code. Always use these generated services for data access.

### Scaffolding

Expand Down
30 changes: 15 additions & 15 deletions plugins/microsoft-managed-apps/shared/connector-decision-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ ms connector list-actions --connector shared_office365 --search Mail

### **Via Plugin Skills**

- **`/add-connector`** — Generic connector skill. Ask for a keyword ("salesforce", "slack", "jira", "workiq") and it will search, present options, and add the connector.
- **`/list-connections`** — View connectors already bound to your app, or explore operations on a specific connector
- **`/add-data-source`** — Generic connector skill. Ask for a keyword ("salesforce", "slack", "jira", "workiq") and it will search, present options, and add the connector.
- **`/list-connectors`** — View available connectors and whether they are blocked or allowed by your organization

### **Via Specific Skills**

Expand All @@ -34,7 +34,7 @@ For common connectors, shortcuts exist:
- **`/add-sharepoint`** — SharePoint lists/documents
- **`/add-dataverse`** — Dataverse tables
- **`/add-mcscopilot`** — Copilot Studio agents
- (See full list in `/add-connector` help)
- (See full list in `/add-data-source` help)

### **Via Microsoft Docs**

Expand All @@ -61,7 +61,7 @@ The matrix shows which connectors can search, create/update, delete, and provide

```
Does the app need to search across M365 (email, files, calendar, contacts)?
├─ YES, semantic/conversational search → Use Work IQ (`/add-connector`)
├─ YES, semantic/conversational search → Use Work IQ (`/add-data-source`)
│ Example: "Find all meetings with client XYZ"
│ Example: "Show emails about project Alpha from last month"
Expand Down Expand Up @@ -102,7 +102,7 @@ What kind of AI capability?
│ Example: "Summarize this meeting transcript"
│ Example: "Generate action items from notes"
├─ Semantic search, Q&A with citations → Work IQ (`/add-connector`)
├─ Semantic search, Q&A with citations → Work IQ (`/add-data-source`)
│ Example: "What was decided about budget in past meetings?"
│ Example: "Show me all discussions about Q3 planning"
Expand All @@ -120,10 +120,10 @@ What kind of AI capability?
Example: "Meeting Insights" app
├─ List past meetings (action) → Office365 (`/add-office365`)
├─ Fetch transcript/recording details (action) → Teams (`/add-teams`)
├─ Allow "find meetings about topic X" (search) → Work IQ (`/add-connector`)
├─ Allow "find meetings about topic X" (search) → Work IQ (`/add-data-source`)
└─ Generate summary (AI) → Copilot Studio (`/add-mcscopilot`)

→ Invoke `/add-office365`, `/add-teams`, `/add-connector`, `/add-mcscopilot` in sequence
→ Invoke `/add-office365`, `/add-teams`, `/add-data-source`, `/add-mcscopilot` in sequence
```

**Rule:** When multiple connectors are needed, each handles one responsibility. Invoke in order of dependency (actions first, then searches/AI).
Expand Down Expand Up @@ -198,7 +198,7 @@ User Goal: "Build a dashboard showing my tasks and calendar"
Connectors Recommended:
1. Office 365 (`/add-office365`) — fetch calendar events
2. Azure DevOps (`/add-azuredevops`) — fetch work items
3. Optional: Work IQ (`/add-connector`) — allow search/drill-down
3. Optional: Work IQ (`/add-data-source`) — allow search/drill-down
```

### **Pattern 2: Meeting Insights App**
Expand All @@ -209,15 +209,15 @@ Connectors Recommended:
1. Office 365 (`/add-office365`) — fetch calendar + meeting metadata
2. Teams (`/add-teams`) — fetch transcripts/recordings
3. Copilot Studio (`/add-mcscopilot`) — generate summaries
4. Optional: Work IQ (`/add-connector`) — semantic meeting search
4. Optional: Work IQ (`/add-data-source`) — semantic meeting search
```

### **Pattern 3: Document Search & Management App**
```
User Goal: "Search company documents and allow downloads"

Connectors Recommended:
1. Work IQ (`/add-connector`) — semantic document search
1. Work IQ (`/add-data-source`) — semantic document search
2. SharePoint (`/add-sharepoint`) — manage documents
3. OneDrive (`/add-onedrive`) — if including personal files
```
Expand All @@ -239,7 +239,7 @@ User Goal: "Store customer data, fetch emails, track interactions"
Connectors Recommended:
1. Dataverse (`/add-dataverse`) — customer records
2. Office 365 (`/add-office365`) — fetch emails by customer
3. Optional: Work IQ (`/add-connector`) — search customer conversations
3. Optional: Work IQ (`/add-data-source`) — search customer conversations
```

---
Expand All @@ -255,7 +255,7 @@ When the user describes their app goal or data need:
4. Explain why each is chosen (reference the rules above)
5. Invoke the appropriate `/add-*` skills in order

### **For `/add-connector` (Canonical Skill)**
### **For `/add-data-source` (Canonical Skill)**

This skill handles ANY connector, including those not listed in this guide. When called:

Expand All @@ -270,9 +270,9 @@ This skill handles ANY connector, including those not listed in this guide. When

3. **If uncertain about availability**:
- Check Microsoft connectors documentation: https://learn.microsoft.com/en-us/connectors/
- Use `/list-connections` skill to browse available connectors
- Use `/list-connectors` skill to browse available connectors

**This guide covers the most common cases, but `/add-connector` works with any Microsoft connector — not just the 10 listed above.**
**This guide covers the most common cases, but `/add-data-source` works with any Microsoft connector — not just the 10 listed above.**

### **For Microsoft Apps Architect Agent**

Expand Down Expand Up @@ -308,7 +308,7 @@ Decision Process:
3. Action needed? → NO (search-only)
4. AI needed? → NO

→ Recommend: `/add-connector` (then optionally `/add-sharepoint` if file management needed)
→ Recommend: `/add-data-source` (then optionally `/add-sharepoint` if file management needed)
```

### **Example 3: User says "I need to build a system to store customer records and generate AI summaries of their interactions"**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,16 @@ Applies to all `/add-*` skills.
## Connections — created inline by the CLI

There is **no separate "create connection" command**. Connections are created and resolved
inline by `ms app add connector` (the single add command — there is no `ms app add action` /
inline by `ms app add data-source` (the single add command — there is no `ms app add action` /
`ms app add table` / `ms app add procedure`):

```bash
ms app add connector --connector <api-id> [--as table|action] [--connection-id <id> | -c <id>]
ms app add data-source --connector <api-id> [--as table|action] [--connection-id <id> | -c <id>]
```

> **Deprecated alias:** `ms app add connector` is the former name of this command. It still works
> but is **deprecated** — prefer `ms app add data-source` (same handler and flags).

When you run it, the CLI resolves a connection for `<api-id>` as follows:

**Interactive (default, a TTY is attached):**
Expand Down Expand Up @@ -39,7 +42,7 @@ need it to bypass the picker or to script a non-interactive run.
### Dataverse is different

The tabular Dataverse connector (`--connector dataverse`) doesn't use the connection-id model —
`ms app add connector --connector dataverse --as table --table <name>` resolves the active
`ms app add data-source --connector dataverse --as table --table <name>` resolves the active
environment's Dataverse automatically. No `--connection-id` is required (or accepted). (The
separate `shared_commondataserviceforapps` connector instead pairs `--table` with
`--dataverse-environment-id`.)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: add-azuredevops
description: Adds Azure DevOps by delegating to `/add-connector` with `api-id=shared_visualstudioteamservices` and action mode. Use when adding Azure DevOps integration.
description: Adds Azure DevOps by delegating to `/add-data-source` with `api-id=shared_visualstudioteamservices` and action mode. Use when adding Azure DevOps integration.
user-invocable: true
allowed-tools: Read, AskUserQuestion, Skill
model: sonnet
Expand All @@ -10,11 +10,11 @@ model: sonnet

# Add Azure DevOps (Wrapper)

This skill is a thin wrapper. Use `/add-connector` as the single implementation path.
This skill is a thin wrapper. Use `/add-data-source` as the single implementation path.

## Delegation contract

Invoke `/add-connector` with:
Invoke `/add-data-source` with:

- `api-id`: `shared_visualstudioteamservices`
- `mode`: `action`
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: add-connector
description: Canonical add flow for Microsoft Managed Apps. Use when adding any connector through `ms app add connector` (with `--as table` or `--as action`), or when the user wants help discovering which connector / api-id to use.
name: add-data-source
description: Canonical add flow for Microsoft Managed Apps. Use when adding any data source through `ms app add data-source` (with `--as table` or `--as action`), or when the user wants help discovering which connector / api-id to use.
user-invocable: true
allowed-tools: Read, Edit, Write, Grep, Glob, Bash, AskUserQuestion, Skill
model: sonnet
Expand All @@ -10,7 +10,7 @@ model: sonnet

**Reference:** [connector-reference.md](${CLAUDE_PLUGIN_ROOT}/shared/connector-reference.md) — Inline connection creation, Grep-first for large generated files.

# Add Connector (Canonical)
# Add Data Source (Canonical)

This is the **single implementation** for all connector-binding skills.

Expand Down Expand Up @@ -47,8 +47,8 @@ Additional by mode:

- `table`: `dataset`, `table`

> **SQL stored procedures:** the CLI has no `ms app add procedure` command and `ms app add connector`
> does not accept `--sql-stored-procedure`. You can still add the SQL connector as a table
> **SQL stored procedures:** the CLI has no `ms app add procedure` command and `ms app add data-source`
> does not accept `--sql-stored-procedure`. You can still add the SQL data source as a table
> (`--connector shared_sql --as table --dataset <db> --table <tbl>`), but binding a specific
> stored procedure is not currently supported.

Expand Down Expand Up @@ -89,19 +89,22 @@ If the caller is a wrapper skill, use wrapper presets as defaults and only ask f

### Step 3: Execute Add Command

All modes use the single `ms app add connector` command; `--as` chooses table vs action. The
All modes use the single `ms app add data-source` command; `--as` chooses table vs action. The
connector is passed via `--connector` (there is **no** `--api-id` flag).

> **Deprecated alias:** `ms app add connector` still works but is **deprecated** — prefer
> `ms app add data-source`. Both share the same handler and flags.

**Action mode**

```bash
$BIN app add connector --connector <api-id> --as action
$BIN app add data-source --connector <api-id> --as action
```

**Table mode**

```bash
$BIN app add connector --connector <api-id> --as table --dataset "<dataset>" --table "<table>"
$BIN app add data-source --connector <api-id> --as table --dataset "<dataset>" --table "<table>"
```

The CLI resolves a connection inline (interactive picker, or `--connection-id <id>` / `-c <id>`
Expand All @@ -110,7 +113,7 @@ available connections and then errors. Dataverse (`--connector dataverse --as ta
`--connection-id`. See [connector-reference.md](${CLAUDE_PLUGIN_ROOT}/shared/connector-reference.md).

> **SQL stored procedures** have no `ms app add procedure` command and `--sql-stored-procedure` is not
> accepted by `ms app add connector`; binding a specific stored procedure is not currently supported.
> accepted by `ms app add data-source`; binding a specific stored procedure is not currently supported.

### Step 4: Build

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: add-dataverse
description: Adds Dataverse by delegating to `/add-connector` with `api-id=dataverse` and table mode. Use when binding Dataverse tables.
description: Adds Dataverse by delegating to `/add-data-source` with `api-id=dataverse` and table mode. Use when binding Dataverse tables.
user-invocable: true
allowed-tools: Read, AskUserQuestion, Skill
model: opus
Expand All @@ -10,11 +10,11 @@ model: opus

# Add Dataverse (Wrapper)

This skill is a thin wrapper. Use `/add-connector` as the single implementation path.
This skill is a thin wrapper. Use `/add-data-source` as the single implementation path.

## Delegation contract

Invoke `/add-connector` with:
Invoke `/add-data-source` with:

- `api-id`: `dataverse`
- `mode`: `table`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Direct Dataverse Web API access for table / schema management. Uses Azure CLI authentication (`az account get-access-token`).

The `ms app add connector --connector dataverse --as table --table <name>` flow does NOT use this — Dataverse table *binding* goes through the CLI and the active `ms` auth context. This reference is for the schema-management path (`add-dataverse` Step 3) where the skill talks to the Dataverse Web API directly to create / extend tables before binding them.
The `ms app add data-source --connector dataverse --as table --table <name>` flow does NOT use this — Dataverse table *binding* goes through the CLI and the active `ms` auth context. This reference is for the schema-management path (`add-dataverse` Step 3) where the skill talks to the Dataverse Web API directly to create / extend tables before binding them.

## Prerequisites

Expand Down
6 changes: 3 additions & 3 deletions plugins/microsoft-managed-apps/skills/add-excel/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: add-excel
description: Adds Excel Online (Business) by delegating to `/add-connector` with `api-id=shared_excelonlinebusiness` and table mode. Use when binding Excel tables.
description: Adds Excel Online (Business) by delegating to `/add-data-source` with `api-id=shared_excelonlinebusiness` and table mode. Use when binding Excel tables.
user-invocable: true
allowed-tools: Read, AskUserQuestion, Skill
model: sonnet
Expand All @@ -10,11 +10,11 @@ model: sonnet

# Add Excel Online (Business) (Wrapper)

This skill is a thin wrapper. Use `/add-connector` as the single implementation path.
This skill is a thin wrapper. Use `/add-data-source` as the single implementation path.

## Delegation contract

Invoke `/add-connector` with:
Invoke `/add-data-source` with:

- `api-id`: `shared_excelonlinebusiness`
- `mode`: `table`
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: add-mcscopilot
description: Adds Microsoft Copilot Studio by delegating to `/add-connector` with `api-id=microsoftcopilotstudio` and action mode. Use when integrating Copilot Studio agents.
description: Adds Microsoft Copilot Studio by delegating to `/add-data-source` with `api-id=microsoftcopilotstudio` and action mode. Use when integrating Copilot Studio agents.
user-invocable: true
allowed-tools: Read, AskUserQuestion, Skill
model: sonnet
Expand All @@ -10,11 +10,11 @@ model: sonnet

# Add Microsoft Copilot Studio (Wrapper)

This skill is a thin wrapper. Use `/add-connector` as the single implementation path.
This skill is a thin wrapper. Use `/add-data-source` as the single implementation path.

## Delegation contract

Invoke `/add-connector` with:
Invoke `/add-data-source` with:

- `api-id`: `microsoftcopilotstudio`
- `mode`: `action`
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: add-office365
description: Adds Office 365 Outlook by delegating to `/add-connector` with `api-id=shared_office365` and action mode. Use when integrating Outlook mail/calendar.
description: Adds Office 365 Outlook by delegating to `/add-data-source` with `api-id=shared_office365` and action mode. Use when integrating Outlook mail/calendar.
user-invocable: true
allowed-tools: Read, AskUserQuestion, Skill
model: sonnet
Expand All @@ -10,11 +10,11 @@ model: sonnet

# Add Office 365 Outlook (Wrapper)

This skill is a thin wrapper. Use `/add-connector` as the single implementation path.
This skill is a thin wrapper. Use `/add-data-source` as the single implementation path.

## Delegation contract

Invoke `/add-connector` with:
Invoke `/add-data-source` with:

- `api-id`: `shared_office365`
- `mode`: `action`
Loading