typespec-create-api-plugin — GitHub Copilot skill: setup
Generates a TypeSpec plugin for Microsoft 365 Copilot that calls external REST APIs. Use it when you need API operations, authentication, or Adaptive Cards.
npx skills add github/awesome-copilot --skill typespec-create-api-pluginWhat typespec-create-api-plugin does
The skill asks for the API base URL and purpose, required CRUD operations, authentication method, confirmation needs, and Adaptive Card output. It then creates main.tsp for the agent definition and actions.tsp for routes, HTTP methods, parameters, and response models.
It supports public APIs, API key authentication, OAuth2, and registered auth references. You can add confirmation dialogs for destructive actions and produce card-based results through cards/card.json. Install it for TypeSpec-based Microsoft 365 Copilot API plugins; it is unnecessary for an API with no Copilot plugin planned.
What it helps with
- define REST operations in
actions.tsp - generate
main.tspagent definitions - configure API key or OAuth2 authentication
- request confirmation before destructive actions
- render list results with Adaptive Cards
Example prompts for the agent
- Create a TypeSpec plugin for my API with a base URL and CRUD operations.
- Add OAuth2 to `actions.tsp` and define `listProjects` and `createTicket`.
- Create an Adaptive Card in `cards/card.json` for a list response.
How to install typespec-create-api-plugin
1Skills CLI (Vercel)
npx skills add github/awesome-copilot --skill typespec-create-api-plugin2GitHub CLI
gh skill install github/awesome-copilot typespec-create-api-plugin3Manually: put the files in place
.github/skills/typespec-create-api-plugin/SKILL.md1Skills CLI (Vercel)
npx skills add github/awesome-copilot --skill typespec-create-api-plugin -a claude-code2Manually: put the files in place
~/.claude/skills/typespec-create-api-plugin/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/typespec-create-api-plugin/
Manually: put the files in place
.agents/skills/typespec-create-api-plugin/SKILL.mdFor all projects use ~/.agents/skills/
Manually: put the files in place
.cursor/skills/typespec-create-api-plugin/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
Platform CLI
gemini skills install https://github.com/github/awesome-copilot --path skills/typespec-create-api-pluginManually: put the files in place
.devin/skills/typespec-create-api-plugin/SKILL.mdThe legacy .windsurf/skills/ path still works
Claude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
From the same set554
The whole set →Similar
Questions about typespec-create-api-plugin
How do I install typespec-create-api-plugin in GitHub Copilot?
Run npx skills add github/awesome-copilot --skill typespec-create-api-plugin. You can also use gh skill install github/awesome-copilot typespec-create-api-plugin.
What does typespec-create-api-plugin do?
It generates TypeSpec files for a Microsoft 365 Copilot plugin connected to an external REST API. The output includes an agent definition, API operations, and data models.
Which authentication methods does the skill support?
It can generate public API access, API key authentication, OAuth2, or a registered auth reference. Choose the option required by the connected API.
Source text
SKILL.md · MIT
---
name: typespec-create-api-plugin
description: 'Generate a TypeSpec API plugin with REST operations, authentication, and Adaptive Cards for Microsoft 365 Copilot'
---
# Create TypeSpec API Plugin
Create a complete TypeSpec API plugin for Microsoft 365 Copilot that integrates with external REST APIs.
## Requirements
Generate TypeSpec files with:
### main.tsp - Agent Definition
```typescript
import "@typespec/http";
import "@typespec/openapi3";
import "@microsoft/typespec-m365-copilot";
import "./actions.tsp";
using TypeSpec.Http;
using TypeSpec.M365.Copilot.Agents;
using TypeSpec.M365.Copilot.Actions;
@agent({
name: "[Agent Name]",
description: "[Description]"
})
@instructions("""
[Instructions for using the API operations]
""")
namespace [AgentName] {
// Reference operations from actions.tsp
op operation1 is [APINamespace].operationName;
}
```
### actions.tsp - API Operations
```typescript
import "@typespec/http";
import "@microsoft/typespec-m365-copilot";
using TypeSpec.Http;
using TypeSpec.M365.Copilot.Actions;
@service
@actions(#{
nameForHuman: "[API Display Name]",
descriptionForModel: "[Model description]",
descriptionForHuman: "[User description]"
})
@server("[API_BASE_URL]", "[API Name]")
@useAuth([AuthType]) // Optional
namespace [APINamespace] {
@route("[/path]")
@get
@action
op operationName(
@path param1: string,
@query param2?: string
): ResponseModel;
model ResponseModel {
// Response structure
}
}
```
## Authentication Options
Choose based on API requirements:
1. **No Authentication** (Public APIs)
```typescript
// No @useAuth decorator needed
```
2. **API Key**
```typescript
@useAuth(ApiKeyAuth<ApiKeyLocation.header, "X-API-Key">)
```
3. **OAuth2**
```typescript
@useAuth(OAuth2Auth<[{
type: OAuth2FlowType.authorizationCode;
authorizationUrl: "https://oauth.example.com/authorize";
tokenUrl: "https://oauth.example.com/token";
refreshUrl: "https://oauth.example.com/token";
scopes: ["read", "write"];
}]>)
```
4. **Registered Auth Reference**
```typescript
@useAuth(Auth)
@authReferenceId("registration-id-here")
model Auth is ApiKeyAuth<ApiKeyLocation.header, "X-API-Key">
```
## Function Capabilities
### Confirmation Dialog
```typescript
@capabilities(#{
confirmation: #{
type: "AdaptiveCard",
title: "Confirm Action",
body: """
Are you sure you want to perform this action?
* **Parameter**: {{ function.parameters.paramName }}
"""
}
})
```
### Adaptive Card Response
```typescript
@card(#{
dataPath: "$.items",
title: "$.title",
url: "$.link",
file: "cards/card.json"
})
```
### Reasoning & Response Instructions
```typescript
@reasoning("""
Consider user's context when calling this operation.
Prioritize recent items over older ones.
""")
@responding("""
Present results in a clear table format with columns: ID, Title, Status.
Include a summary count at the end.
""")
```
## Best Practices
1. **Operation Names**: Use clear, action-oriented names (listProjects, createTicket)
2. **Models**: Define TypeScript-like models for requests and responses
3. **HTTP Methods**: Use appropriate verbs (@get, @post, @patch, @delete)
4. **Paths**: Use RESTful path conventions with @route
5. **Parameters**: Use @path, @query, @header, @body appropriately
6. **Descriptions**: Provide clear descriptions for model understanding
7. **Confirmations**: Add for destructive operations (delete, update critical data)
8. **Cards**: Use for rich visual responses with multiple data items
## Workflow
Ask the user:
1. What is the API base URL and purpose?
2. What operations are needed (CRUD operations)?
3. What authentication method does the API use?
4. Should confirmations be required for any operations?
5. Do responses need Adaptive Cards?
Then generate:
- Complete `main.tsp` with agent definition
- Complete `actions.tsp` with API operations and models
- Optional `cards/card.json` if Adaptive Cards are needed
© github · MIT · github/awesome-copilot