---
title: "Create plugin"
method: POST
path: "/v1/plugins"
tags: ["Plugins"]
---

# Create plugin

`POST /v1/plugins`

Creates a plugin and can also create components, share org-wide, and publish to a marketplace in one request. An mcp component may carry the same connection setup as the Connections page (authentication, credential mode, API key, OAuth app), or instead reference an existing organization connection by connectionId, so its server is configured immediately; owners and admins only.

## Request body

- object
  - `name` string, required
  - `description` string, nullable
  - `sourceRepositoryUrl` string
  - `components` object[]
    - `type` 'skill' | 'agent' | 'command' | 'tool' | 'mcp' | 'hook' | 'context' | 'custom' | 'script' | 'workflow' | 'app', required
    - `input` object
      - `rawSourceText` string
      - `normalizedPayloadJson` object
      - `parserMode` string
      - `schemaVersion` string
      - `metadata` object
    - `connection` object
      - `authType` 'oauth' | 'apikey' | 'none'
      - `credentialMode` 'shared' | 'per_member'
      - `apiKey` string
      - `oauthClient` object
        - `clientId` string, required
        - `clientSecret` string
    - `connectionId` string
  - `orgWide` boolean
  - `marketplaceId` string, typeid — Den TypeID with 'mkt_' prefix and a 26-character base32 suffix.

## Response `201`

Plugin created successfully.

- PluginArchPluginMutationResponse
  - `ok` true, required
  - `item` PluginArchPlugin, required
    - `id` string, typeid, required — Den TypeID with 'plg_' prefix and a 26-character base32 suffix.
    - `organizationId` string, typeid, required — Den TypeID with 'org_' prefix and a 26-character base32 suffix.
    - `name` string, required
    - `description` string, nullable, required
    - `sourceRepositoryUrl` string, nullable, required
    - `sourceFormat` 'agent-plugin' | 'openwork-builtin' | 'openwork-extension-manifest' | 'claude-plugin' | 'opencode-plugin' | 'mcp-directory' | 'manual', nullable, required
    - `sourceSchemaVersion` string, nullable, required
    - `status` 'active' | 'inactive' | 'deleted' | 'archived', required
    - `createdByOrgMembershipId` string, typeid, required — Den TypeID with 'om_' prefix and a 26-character base32 suffix.
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required
    - `deletedAt` string, date-time, nullable, required
    - `memberCount` integer
    - `marketplaces` object[]
      - `id` string, typeid, required — Den TypeID with 'mkt_' prefix and a 26-character base32 suffix.
      - `name` string, required
    - `extension` PluginArchExtensionProjection
      - `id` string, typeid, required — Den TypeID with 'plg_' prefix and a 26-character base32 suffix.
      - `name` string, required
      - `description` string, nullable, required
      - `sourceFormat` 'agent-plugin' | 'openwork-builtin' | 'openwork-extension-manifest' | 'claude-plugin' | 'opencode-plugin' | 'mcp-directory' | 'manual', required
      - `manifest` OpenWorkExtensionManifest, required
        - `schemaVersion` 1, required
        - `id` string, required
        - `name` string, required
        - `description` string, required
        - `source` object, required
          - `format` 'agent-plugin' | 'openwork-builtin' | 'openwork-extension-manifest' | 'claude-plugin' | 'opencode-plugin' | 'mcp-directory' | 'manual', required
          - `trusted` boolean, required
          - `origin` 'builtin' | 'den' | 'workspace' | 'local'
          - `reference` string
        - `resources` object[], required
        - `contributions` object[]
        - `setup` object
        - `lifecycle` object

## Other responses

- `400` — The plugin creation request was invalid.
- `401` — The caller must be signed in to create plugins.
- `403` — The caller lacks permission to create plugins.
- `404` — The marketplace could not be found.

## Changes

- **2026-09-04** `d3984673ccd1` — 3 info
  - added the new optional request property `components/items/connectionId`
  - the request property `components/items/input` became optional
  - added the optional property `capability` to the response with the `400` status
- **2026-09-03** `e61f7fe33f02` — 1 info
  - added the new optional request property `components/items/connection`
- **2026-08-29** `fcbb34aa1702` — 2 warning, 2 info
  - added the new `agent-plugin` enum value to the `item/extension/anyOf[#/components/schemas/PluginArchExtensionProjection]/manifest/anyOf[#/components/schemas/OpenWorkExtensionManifest]/source/format` response property for the response status `201`
  - added the new `agent-plugin` enum value to the `item/extension/anyOf[#/components/schemas/PluginArchExtensionProjection]/sourceFormat` response property for the response status `201`
  - added the required property `item/sourceFormat` to the response with the `201` status
  - added the required property `item/sourceSchemaVersion` to the response with the `201` status
- …earlier changes not shown

[Full history](https://skmtc.dev/openworklabs/apis/den-api/changes/v1/plugins/post.md)

---

[API](https://skmtc.dev/openworklabs/apis/den-api.md) · [All operations](https://skmtc.dev/openworklabs/apis/den-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/openworklabs/den-api/revisions/d3984673ccd1/schema)
