---
title: "Create or update agent"
method: POST
path: "/v0/agents"
tags: ["agents"]
---

# Create or update agent

`POST /v0/agents`

Create a new Agentic agent in the registry or update an existing one. Resources are immediately visible after creation.

## Request body

- AgentJSON
  - `description` string, required
  - `framework` string, required
  - `image` string, required
  - `language` string, required
  - `mcpServers` McpServerType[]
    - `args` string[]
    - `build` string
    - `command` string
    - `env` string[]
    - `headers` object
    - `image` string
    - `name` string, required
    - `registryServerName` string
    - `registryServerPreferRemote` boolean
    - `registryServerVersion` string
    - `registryURL` string
    - `type` string, required
    - `url` string
  - `modelName` string, required
  - `modelProvider` string, required
  - `name` string, required
  - `packages` AgentPackageInfo[]
    - `identifier` string, required
    - `registryType` string, required
    - `transport` AgentPackageInfoTransportStruct, required
      - `type` string, required
    - `version` string, required
  - `remotes` Transport[]
    - `headers` KeyValueInput[] — HTTP headers for streamable-http or sse transports
      - `choices` string[] — A list of possible values for the input. If provided, the user must select one of these values.
      - `default` string — The default value for the input. This should be a valid value for the input. If you want to provide input examples or guidance, use the placeholder field instead.
      - `description` string — A description of the input, which clients can use to provide context to the user.
      - `format` 'string' | 'number' | 'boolean' | 'filepath' — Specifies the input format. Supported values include filepath, which should be interpreted as a file on the user's filesystem.
      - `isRequired` boolean — Whether the input is required
      - `isSecret` boolean — Indicates whether the input is a secret value (e.g., password, token). If true, clients should handle the value securely.
      - `name` string, required — Name of the header or environment variable.
      - `placeholder` string — A placeholder for the input to be displaying during configuration. This is used to provide examples or guidance about the expected form or content of the input.
      - `value` string — The value for the input. If this is not set, the user may be prompted to provide a value. Identifiers wrapped in {curly_braces} will be replaced with the corresponding properties from the input variables map.
      - `variables` object — A map of variable names to their values. Keys in the input value that are wrapped in {curly_braces} will be replaced with the corresponding variable values.
    - `type` string, required — Transport type (stdio, streamable-http, or sse)
    - `url` string — URL for streamable-http or sse transports
  - `repository` Repository
    - `id` string — Repository identifier from the hosting service (e.g., GitHub repo ID). Owned and determined by the source forge. Should remain stable across repository renames and may be used to detect repository resurrection attacks - if a repository is deleted and recreated, the ID should change. For GitHub, use: gh api repos/<owner>/<repo> --jq '.id'
    - `source` string — Repository hosting service identifier. Used by registries to determine validation and API access methods.
    - `subfolder` string — Optional relative path from repository root to the server location within a monorepo or nested package structure. Must be a clean relative path.
    - `url` string, uri — Repository URL for browsing source code. Should support both web browsing and git clone operations.
  - `skills` SkillRef[]
    - `image` string
    - `name` string, required
    - `registrySkillName` string
    - `registrySkillVersion` string
    - `registryURL` string
  - `status` string
  - `telemetryEndpoint` string
  - `title` string
  - `updatedAt` string, date-time
  - `version` string, required
  - `websiteUrl` string

## Response `200`

OK

- AgentResponse
  - `_meta` AgentResponseMeta, required
    - `aregistry.ai/deployments` ResourceDeploymentsMeta
      - `count` integer, required
      - `deployments` DeploymentSummary[], required
        - `deployedAt` string, date-time, required
        - `id` string, required
        - `origin` string, required
        - `providerId` string
        - `status` string, required
        - `updatedAt` string, date-time, required
        - `version` string
    - `aregistry.ai/semantic` AgentSemanticMeta
      - `score` number, double, required
    - `io.modelcontextprotocol.registry/official` AgentRegistryExtensions
      - `isLatest` boolean, required
      - `publishedAt` string, date-time, required
      - `status` string, required
      - `updatedAt` string, date-time, required
  - `agent` AgentJSON, required
    - `description` string, required
    - `framework` string, required
    - `image` string, required
    - `language` string, required
    - `mcpServers` McpServerType[]
      - `args` string[]
      - `build` string
      - `command` string
      - `env` string[]
      - `headers` object
      - `image` string
      - `name` string, required
      - `registryServerName` string
      - `registryServerPreferRemote` boolean
      - `registryServerVersion` string
      - `registryURL` string
      - `type` string, required
      - `url` string
    - `modelName` string, required
    - `modelProvider` string, required
    - `name` string, required
    - `packages` AgentPackageInfo[]
      - `identifier` string, required
      - `registryType` string, required
      - `transport` AgentPackageInfoTransportStruct, required
        - `type` string, required
      - `version` string, required
    - `remotes` Transport[]
      - `headers` KeyValueInput[] — HTTP headers for streamable-http or sse transports
        - `choices` string[] — A list of possible values for the input. If provided, the user must select one of these values.
        - `default` string — The default value for the input. This should be a valid value for the input. If you want to provide input examples or guidance, use the placeholder field instead.
        - `description` string — A description of the input, which clients can use to provide context to the user.
        - `format` 'string' | 'number' | 'boolean' | 'filepath' — Specifies the input format. Supported values include filepath, which should be interpreted as a file on the user's filesystem.
        - `isRequired` boolean — Whether the input is required
        - `isSecret` boolean — Indicates whether the input is a secret value (e.g., password, token). If true, clients should handle the value securely.
        - `name` string, required — Name of the header or environment variable.
        - `placeholder` string — A placeholder for the input to be displaying during configuration. This is used to provide examples or guidance about the expected form or content of the input.
        - `value` string — The value for the input. If this is not set, the user may be prompted to provide a value. Identifiers wrapped in {curly_braces} will be replaced with the corresponding properties from the input variables map.
        - `variables` object — A map of variable names to their values. Keys in the input value that are wrapped in {curly_braces} will be replaced with the corresponding variable values.
      - `type` string, required — Transport type (stdio, streamable-http, or sse)
      - `url` string — URL for streamable-http or sse transports
    - `repository` Repository
      - `id` string — Repository identifier from the hosting service (e.g., GitHub repo ID). Owned and determined by the source forge. Should remain stable across repository renames and may be used to detect repository resurrection attacks - if a repository is deleted and recreated, the ID should change. For GitHub, use: gh api repos/<owner>/<repo> --jq '.id'
      - `source` string — Repository hosting service identifier. Used by registries to determine validation and API access methods.
      - `subfolder` string — Optional relative path from repository root to the server location within a monorepo or nested package structure. Must be a clean relative path.
      - `url` string, uri — Repository URL for browsing source code. Should support both web browsing and git clone operations.
    - `skills` SkillRef[]
      - `image` string
      - `name` string, required
      - `registrySkillName` string
      - `registrySkillVersion` string
      - `registryURL` string
    - `status` string
    - `telemetryEndpoint` string
    - `title` string
    - `updatedAt` string, date-time
    - `version` string, required
    - `websiteUrl` string

## Other responses

- `default` — Error

## Changes

- **2026-03-02** `cd40eb4cf442` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/agentregistry-dev/apis/agentregistry/changes/v0/agents/post.md)

---

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