This commit is contained in:
Jaideep Rao 2025-12-03 01:04:11 +00:00 committed by GitHub
commit 214e296e62
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
25 changed files with 2550 additions and 153 deletions

View file

@ -3893,6 +3893,219 @@ paths:
schema: schema:
$ref: '#/components/schemas/SupervisedFineTuneRequest' $ref: '#/components/schemas/SupervisedFineTuneRequest'
required: true required: true
/v1alpha/connectors/{connector_id}:
get:
responses:
'200':
description: A Connector.
content:
application/json:
schema:
$ref: '#/components/schemas/Connector'
'400':
$ref: '#/components/responses/BadRequest400'
description: Bad Request
'429':
$ref: '#/components/responses/TooManyRequests429'
description: Too Many Requests
'500':
$ref: '#/components/responses/InternalServerError500'
description: Internal Server Error
default:
$ref: '#/components/responses/DefaultError'
description: Default Response
tags:
- Connectors
summary: Get Connector
description: Get a connector by its ID.
operationId: get_connector_v1alpha_connectors__connector_id__get
parameters:
- name: include_tools
in: query
required: false
schema:
type: boolean
default: false
title: Include Tools
- name: connector_id
in: path
required: true
schema:
type: string
description: 'Path parameter: connector_id'
/v1alpha/connectors/{connector_id}/tools/{tool_name}:
get:
responses:
'200':
description: A ToolDef.
content:
application/json:
schema:
$ref: '#/components/schemas/ToolDef'
'400':
description: Bad Request
$ref: '#/components/responses/BadRequest400'
'429':
description: Too Many Requests
$ref: '#/components/responses/TooManyRequests429'
'500':
description: Internal Server Error
$ref: '#/components/responses/InternalServerError500'
default:
description: Default Response
$ref: '#/components/responses/DefaultError'
tags:
- Connectors
summary: Get Connector Tool
description: Get a tool definition by its name from a connector.
operationId: get_connector_tool_v1alpha_connectors__connector_id__tools__tool_name__get
parameters:
- name: connector_id
in: path
required: true
schema:
type: string
description: 'Path parameter: connector_id'
- name: tool_name
in: path
required: true
schema:
type: string
description: 'Path parameter: tool_name'
/v1alpha/connectors/registries/{registry_id}:
get:
responses:
'200':
description: A Registry.
content:
application/json:
schema:
$ref: '#/components/schemas/Registry'
'400':
description: Bad Request
$ref: '#/components/responses/BadRequest400'
'429':
description: Too Many Requests
$ref: '#/components/responses/TooManyRequests429'
'500':
description: Internal Server Error
$ref: '#/components/responses/InternalServerError500'
default:
description: Default Response
$ref: '#/components/responses/DefaultError'
tags:
- Connectors
summary: Get Registry
description: Get a registry by its ID.
operationId: get_registry_v1alpha_connectors_registries__registry_id__get
parameters:
- name: registry_id
in: path
required: true
schema:
type: string
description: 'Path parameter: registry_id'
/v1alpha/connectors/{connector_id}/tools:
get:
responses:
'200':
description: A ListToolsResponse.
content:
application/json:
schema:
$ref: '#/components/schemas/ListToolsResponse'
'400':
description: Bad Request
$ref: '#/components/responses/BadRequest400'
'429':
description: Too Many Requests
$ref: '#/components/responses/TooManyRequests429'
'500':
description: Internal Server Error
$ref: '#/components/responses/InternalServerError500'
default:
description: Default Response
$ref: '#/components/responses/DefaultError'
tags:
- Connectors
summary: List Connector Tools
description: List tools available from a connector.
operationId: list_connector_tools_v1alpha_connectors__connector_id__tools_get
parameters:
- name: connector_id
in: path
required: true
schema:
type: string
description: 'Path parameter: connector_id'
/v1alpha/connectors:
get:
responses:
'200':
description: A ListConnectorsResponse.
content:
application/json:
schema:
$ref: '#/components/schemas/ListConnectorsResponse'
'400':
$ref: '#/components/responses/BadRequest400'
description: Bad Request
'429':
$ref: '#/components/responses/TooManyRequests429'
description: Too Many Requests
'500':
$ref: '#/components/responses/InternalServerError500'
description: Internal Server Error
default:
$ref: '#/components/responses/DefaultError'
description: Default Response
tags:
- Connectors
summary: List Connectors
description: List all configured connectors.
operationId: list_connectors_v1alpha_connectors_get
parameters:
- name: include_tools
in: query
required: false
schema:
type: boolean
default: false
title: Include Tools
- name: registry_id
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Registry Id
/v1alpha/connectors/registries:
get:
responses:
'200':
description: A ListRegistriesResponse.
content:
application/json:
schema:
$ref: '#/components/schemas/ListRegistriesResponse'
'400':
description: Bad Request
$ref: '#/components/responses/BadRequest400'
'429':
description: Too Many Requests
$ref: '#/components/responses/TooManyRequests429'
'500':
description: Internal Server Error
$ref: '#/components/responses/InternalServerError500'
default:
description: Default Response
$ref: '#/components/responses/DefaultError'
tags:
- Connectors
summary: List Registries
description: List all registries.
operationId: list_registries_v1alpha_connectors_registries_get
components: components:
schemas: schemas:
Error: Error:
@ -7045,8 +7258,13 @@ components:
type: string type: string
title: Server Label title: Server Label
server_url: server_url:
type: string anyOf:
title: Server Url - type: string
- type: 'null'
connector_id:
anyOf:
- type: string
- type: 'null'
headers: headers:
anyOf: anyOf:
- additionalProperties: true - additionalProperties: true
@ -7079,7 +7297,6 @@ components:
type: object type: object
required: required:
- server_label - server_label
- server_url
title: OpenAIResponseInputToolMCP title: OpenAIResponseInputToolMCP
description: Model Context Protocol (MCP) tool configuration for OpenAI response inputs. description: Model Context Protocol (MCP) tool configuration for OpenAI response inputs.
CreateOpenaiResponseRequest: CreateOpenaiResponseRequest:
@ -11618,6 +11835,90 @@ components:
- chunk_id - chunk_id
title: Chunk title: Chunk
description: A chunk of content that can be inserted into a vector database. description: A chunk of content that can be inserted into a vector database.
Connector:
properties:
identifier:
type: string
title: Identifier
description: Unique identifier for this resource in llama stack
provider_resource_id:
anyOf:
- type: string
- type: 'null'
description: Unique identifier for this resource in the provider
provider_id:
type: string
title: Provider Id
description: ID of the provider that owns this resource
type:
type: string
const: connector
title: Type
default: connector
connector_type:
$ref: '#/components/schemas/ConnectorType'
default: mcp
connector_id:
anyOf:
- type: string
- type: 'null'
description: User-specified identifier for the connector
url:
type: string
title: Url
description: URL of the connector
created_at:
type: string
format: date-time
title: Created At
description: Timestamp of creation
updated_at:
type: string
format: date-time
title: Updated At
description: Timestamp of last update
server_name:
anyOf:
- type: string
- type: 'null'
description: Name of the server
server_label:
anyOf:
- type: string
- type: 'null'
description: Label of the server
server_description:
anyOf:
- type: string
- type: 'null'
description: Description of the server
tools:
anyOf:
- items:
$ref: '#/components/schemas/ToolDef'
type: array
- type: 'null'
description: List of tools available from the connector
registry_id:
anyOf:
- type: string
- type: 'null'
description: ID of the registry this connector belongs to
type: object
required:
- identifier
- provider_id
- url
- created_at
- updated_at
title: Connector
description: A connector resource representing a connector registered in Llama Stack.
ConnectorType:
type: string
enum:
- mcp
title: ConnectorType
description: Type of connector.
ConversationItemInclude: ConversationItemInclude:
type: string type: string
enum: enum:
@ -11708,6 +12009,42 @@ components:
- cancelled - cancelled
title: JobStatus title: JobStatus
description: Status of a job execution. description: Status of a job execution.
ListConnectorsResponse:
properties:
data:
items:
$ref: '#/components/schemas/Connector'
type: array
title: Data
type: object
required:
- data
title: ListConnectorsResponse
description: Response containing a list of connectors.
ListRegistriesResponse:
properties:
data:
items:
$ref: '#/components/schemas/Registry'
type: array
title: Data
type: object
required:
- data
title: ListRegistriesResponse
description: Response containing a list of registries.
ListToolsResponse:
properties:
data:
items:
$ref: '#/components/schemas/ToolDef'
type: array
title: Data
type: object
required:
- data
title: ListToolsResponse
description: Response containing a list of tools.
MCPListToolsTool: MCPListToolsTool:
properties: properties:
input_schema: input_schema:
@ -12100,6 +12437,63 @@ components:
required: required:
- reasoning_tokens - reasoning_tokens
title: OutputTokensDetails title: OutputTokensDetails
Registry:
properties:
identifier:
type: string
title: Identifier
description: Unique identifier for this resource in llama stack
provider_resource_id:
anyOf:
- type: string
- type: 'null'
description: Unique identifier for this resource in the provider
provider_id:
type: string
title: Provider Id
description: ID of the provider that owns this resource
type:
type: string
const: registry
title: Type
default: registry
registry_type:
$ref: '#/components/schemas/RegistryType'
default: mcp
user_registry_id:
anyOf:
- type: string
- type: 'null'
description: User-specified identifier for the registry
url:
type: string
title: Url
description: URL of the registry
created_at:
type: string
format: date-time
title: Created At
description: Timestamp of creation
updated_at:
type: string
format: date-time
title: Updated At
description: Timestamp of last update
type: object
required:
- identifier
- provider_id
- url
- created_at
- updated_at
title: Registry
description: A registry resource representing a registry of connectors.
RegistryType:
type: string
enum:
- mcp
title: RegistryType
description: Type of registry.
SearchRankingOptions: SearchRankingOptions:
properties: properties:
ranker: ranker:
@ -12573,6 +12967,85 @@ components:
type: string type: string
title: DialogType title: DialogType
type: object type: object
RegistryInput:
description: Input for creating a registry.
properties:
url:
title: Url
type: string
user_registry_id:
anyOf:
- type: string
- type: 'null'
description: User-specified identifier for the registry
nullable: true
registry_type:
$ref: '#/components/schemas/RegistryType'
default: mcp
required:
- url
title: RegistryInput
type: object
ToolGroupInput:
description: Input data for registering a tool group.
properties:
toolgroup_id:
title: Toolgroup Id
type: string
provider_id:
title: Provider Id
type: string
args:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
nullable: true
mcp_endpoint:
anyOf:
- $ref: '#/components/schemas/URL'
title: URL
- type: 'null'
nullable: true
title: URL
required:
- toolgroup_id
- provider_id
title: ToolGroupInput
type: object
ConnectorInput:
description: Input for creating a connector.
properties:
connector_type:
$ref: '#/components/schemas/ConnectorType'
default: mcp
connector_id:
anyOf:
- type: string
- type: 'null'
description: Unique identifier for the connector
nullable: true
url:
description: URL of the connector
title: Url
type: string
headers:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
description: HTTP headers to include when connecting
nullable: true
authorization:
anyOf:
- type: string
- type: 'null'
description: OAuth access token for authentication
nullable: true
required:
- url
title: ConnectorInput
type: object
ConversationMessage: ConversationMessage:
description: OpenAI-compatible message item for conversations. description: OpenAI-compatible message item for conversations.
properties: properties:
@ -12657,33 +13130,6 @@ components:
- items - items
title: ConversationItemCreateRequest title: ConversationItemCreateRequest
type: object type: object
ToolGroupInput:
description: Input data for registering a tool group.
properties:
toolgroup_id:
title: Toolgroup Id
type: string
provider_id:
title: Provider Id
type: string
args:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
nullable: true
mcp_endpoint:
anyOf:
- $ref: '#/components/schemas/URL'
title: URL
- type: 'null'
nullable: true
title: URL
required:
- toolgroup_id
- provider_id
title: ToolGroupInput
type: object
Api: Api:
description: Enumeration of all available APIs in the Llama Stack system. description: Enumeration of all available APIs in the Llama Stack system.
enum: enum:
@ -12708,6 +13154,7 @@ components:
- files - files
- prompts - prompts
- conversations - conversations
- connectors
- inspect - inspect
title: Api title: Api
type: string type: string

View file

@ -4039,8 +4039,13 @@ components:
type: string type: string
title: Server Label title: Server Label
server_url: server_url:
type: string anyOf:
title: Server Url - type: string
- type: 'null'
connector_id:
anyOf:
- type: string
- type: 'null'
headers: headers:
anyOf: anyOf:
- additionalProperties: true - additionalProperties: true
@ -4073,7 +4078,6 @@ components:
type: object type: object
required: required:
- server_label - server_label
- server_url
title: OpenAIResponseInputToolMCP title: OpenAIResponseInputToolMCP
description: Model Context Protocol (MCP) tool configuration for OpenAI response inputs. description: Model Context Protocol (MCP) tool configuration for OpenAI response inputs.
CreateOpenaiResponseRequest: CreateOpenaiResponseRequest:
@ -8612,6 +8616,90 @@ components:
- chunk_id - chunk_id
title: Chunk title: Chunk
description: A chunk of content that can be inserted into a vector database. description: A chunk of content that can be inserted into a vector database.
Connector:
properties:
identifier:
type: string
title: Identifier
description: Unique identifier for this resource in llama stack
provider_resource_id:
anyOf:
- type: string
- type: 'null'
description: Unique identifier for this resource in the provider
provider_id:
type: string
title: Provider Id
description: ID of the provider that owns this resource
type:
type: string
const: connector
title: Type
default: connector
connector_type:
$ref: '#/components/schemas/ConnectorType'
default: mcp
connector_id:
anyOf:
- type: string
- type: 'null'
description: User-specified identifier for the connector
url:
type: string
title: Url
description: URL of the connector
created_at:
type: string
format: date-time
title: Created At
description: Timestamp of creation
updated_at:
type: string
format: date-time
title: Updated At
description: Timestamp of last update
server_name:
anyOf:
- type: string
- type: 'null'
description: Name of the server
server_label:
anyOf:
- type: string
- type: 'null'
description: Label of the server
server_description:
anyOf:
- type: string
- type: 'null'
description: Description of the server
tools:
anyOf:
- items:
$ref: '#/components/schemas/ToolDef'
type: array
- type: 'null'
description: List of tools available from the connector
registry_id:
anyOf:
- type: string
- type: 'null'
description: ID of the registry this connector belongs to
type: object
required:
- identifier
- provider_id
- url
- created_at
- updated_at
title: Connector
description: A connector resource representing a connector registered in Llama Stack.
ConnectorType:
type: string
enum:
- mcp
title: ConnectorType
description: Type of connector.
ConversationItemInclude: ConversationItemInclude:
type: string type: string
enum: enum:
@ -8702,6 +8790,42 @@ components:
- cancelled - cancelled
title: JobStatus title: JobStatus
description: Status of a job execution. description: Status of a job execution.
ListConnectorsResponse:
properties:
data:
items:
$ref: '#/components/schemas/Connector'
type: array
title: Data
type: object
required:
- data
title: ListConnectorsResponse
description: Response containing a list of connectors.
ListRegistriesResponse:
properties:
data:
items:
$ref: '#/components/schemas/Registry'
type: array
title: Data
type: object
required:
- data
title: ListRegistriesResponse
description: Response containing a list of registries.
ListToolsResponse:
properties:
data:
items:
$ref: '#/components/schemas/ToolDef'
type: array
title: Data
type: object
required:
- data
title: ListToolsResponse
description: Response containing a list of tools.
MCPListToolsTool: MCPListToolsTool:
properties: properties:
input_schema: input_schema:
@ -9094,6 +9218,63 @@ components:
required: required:
- reasoning_tokens - reasoning_tokens
title: OutputTokensDetails title: OutputTokensDetails
Registry:
properties:
identifier:
type: string
title: Identifier
description: Unique identifier for this resource in llama stack
provider_resource_id:
anyOf:
- type: string
- type: 'null'
description: Unique identifier for this resource in the provider
provider_id:
type: string
title: Provider Id
description: ID of the provider that owns this resource
type:
type: string
const: registry
title: Type
default: registry
registry_type:
$ref: '#/components/schemas/RegistryType'
default: mcp
user_registry_id:
anyOf:
- type: string
- type: 'null'
description: User-specified identifier for the registry
url:
type: string
title: Url
description: URL of the registry
created_at:
type: string
format: date-time
title: Created At
description: Timestamp of creation
updated_at:
type: string
format: date-time
title: Updated At
description: Timestamp of last update
type: object
required:
- identifier
- provider_id
- url
- created_at
- updated_at
title: Registry
description: A registry resource representing a registry of connectors.
RegistryType:
type: string
enum:
- mcp
title: RegistryType
description: Type of registry.
SearchRankingOptions: SearchRankingOptions:
properties: properties:
ranker: ranker:
@ -9567,6 +9748,85 @@ components:
type: string type: string
title: DialogType title: DialogType
type: object type: object
RegistryInput:
description: Input for creating a registry.
properties:
url:
title: Url
type: string
user_registry_id:
anyOf:
- type: string
- type: 'null'
description: User-specified identifier for the registry
nullable: true
registry_type:
$ref: '#/components/schemas/RegistryType'
default: mcp
required:
- url
title: RegistryInput
type: object
ToolGroupInput:
description: Input data for registering a tool group.
properties:
toolgroup_id:
title: Toolgroup Id
type: string
provider_id:
title: Provider Id
type: string
args:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
nullable: true
mcp_endpoint:
anyOf:
- $ref: '#/components/schemas/URL'
title: URL
- type: 'null'
nullable: true
title: URL
required:
- toolgroup_id
- provider_id
title: ToolGroupInput
type: object
ConnectorInput:
description: Input for creating a connector.
properties:
connector_type:
$ref: '#/components/schemas/ConnectorType'
default: mcp
connector_id:
anyOf:
- type: string
- type: 'null'
description: Unique identifier for the connector
nullable: true
url:
description: URL of the connector
title: Url
type: string
headers:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
description: HTTP headers to include when connecting
nullable: true
authorization:
anyOf:
- type: string
- type: 'null'
description: OAuth access token for authentication
nullable: true
required:
- url
title: ConnectorInput
type: object
ConversationMessage: ConversationMessage:
description: OpenAI-compatible message item for conversations. description: OpenAI-compatible message item for conversations.
properties: properties:
@ -9651,33 +9911,6 @@ components:
- items - items
title: ConversationItemCreateRequest title: ConversationItemCreateRequest
type: object type: object
ToolGroupInput:
description: Input data for registering a tool group.
properties:
toolgroup_id:
title: Toolgroup Id
type: string
provider_id:
title: Provider Id
type: string
args:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
nullable: true
mcp_endpoint:
anyOf:
- $ref: '#/components/schemas/URL'
title: URL
- type: 'null'
nullable: true
title: URL
required:
- toolgroup_id
- provider_id
title: ToolGroupInput
type: object
Api: Api:
description: Enumeration of all available APIs in the Llama Stack system. description: Enumeration of all available APIs in the Llama Stack system.
enum: enum:
@ -9702,6 +9935,7 @@ components:
- files - files
- prompts - prompts
- conversations - conversations
- connectors
- inspect - inspect
title: Api title: Api
type: string type: string

View file

@ -630,6 +630,219 @@ paths:
schema: schema:
$ref: '#/components/schemas/SupervisedFineTuneRequest' $ref: '#/components/schemas/SupervisedFineTuneRequest'
required: true required: true
/v1alpha/connectors/{connector_id}:
get:
responses:
'200':
description: A Connector.
content:
application/json:
schema:
$ref: '#/components/schemas/Connector'
'400':
$ref: '#/components/responses/BadRequest400'
description: Bad Request
'429':
$ref: '#/components/responses/TooManyRequests429'
description: Too Many Requests
'500':
$ref: '#/components/responses/InternalServerError500'
description: Internal Server Error
default:
$ref: '#/components/responses/DefaultError'
description: Default Response
tags:
- Connectors
summary: Get Connector
description: Get a connector by its ID.
operationId: get_connector_v1alpha_connectors__connector_id__get
parameters:
- name: include_tools
in: query
required: false
schema:
type: boolean
default: false
title: Include Tools
- name: connector_id
in: path
required: true
schema:
type: string
description: 'Path parameter: connector_id'
/v1alpha/connectors/{connector_id}/tools/{tool_name}:
get:
responses:
'200':
description: A ToolDef.
content:
application/json:
schema:
$ref: '#/components/schemas/ToolDef'
'400':
description: Bad Request
$ref: '#/components/responses/BadRequest400'
'429':
description: Too Many Requests
$ref: '#/components/responses/TooManyRequests429'
'500':
description: Internal Server Error
$ref: '#/components/responses/InternalServerError500'
default:
description: Default Response
$ref: '#/components/responses/DefaultError'
tags:
- Connectors
summary: Get Connector Tool
description: Get a tool definition by its name from a connector.
operationId: get_connector_tool_v1alpha_connectors__connector_id__tools__tool_name__get
parameters:
- name: connector_id
in: path
required: true
schema:
type: string
description: 'Path parameter: connector_id'
- name: tool_name
in: path
required: true
schema:
type: string
description: 'Path parameter: tool_name'
/v1alpha/connectors/registries/{registry_id}:
get:
responses:
'200':
description: A Registry.
content:
application/json:
schema:
$ref: '#/components/schemas/Registry'
'400':
description: Bad Request
$ref: '#/components/responses/BadRequest400'
'429':
description: Too Many Requests
$ref: '#/components/responses/TooManyRequests429'
'500':
description: Internal Server Error
$ref: '#/components/responses/InternalServerError500'
default:
description: Default Response
$ref: '#/components/responses/DefaultError'
tags:
- Connectors
summary: Get Registry
description: Get a registry by its ID.
operationId: get_registry_v1alpha_connectors_registries__registry_id__get
parameters:
- name: registry_id
in: path
required: true
schema:
type: string
description: 'Path parameter: registry_id'
/v1alpha/connectors/{connector_id}/tools:
get:
responses:
'200':
description: A ListToolsResponse.
content:
application/json:
schema:
$ref: '#/components/schemas/ListToolsResponse'
'400':
description: Bad Request
$ref: '#/components/responses/BadRequest400'
'429':
description: Too Many Requests
$ref: '#/components/responses/TooManyRequests429'
'500':
description: Internal Server Error
$ref: '#/components/responses/InternalServerError500'
default:
description: Default Response
$ref: '#/components/responses/DefaultError'
tags:
- Connectors
summary: List Connector Tools
description: List tools available from a connector.
operationId: list_connector_tools_v1alpha_connectors__connector_id__tools_get
parameters:
- name: connector_id
in: path
required: true
schema:
type: string
description: 'Path parameter: connector_id'
/v1alpha/connectors:
get:
responses:
'200':
description: A ListConnectorsResponse.
content:
application/json:
schema:
$ref: '#/components/schemas/ListConnectorsResponse'
'400':
$ref: '#/components/responses/BadRequest400'
description: Bad Request
'429':
$ref: '#/components/responses/TooManyRequests429'
description: Too Many Requests
'500':
$ref: '#/components/responses/InternalServerError500'
description: Internal Server Error
default:
$ref: '#/components/responses/DefaultError'
description: Default Response
tags:
- Connectors
summary: List Connectors
description: List all configured connectors.
operationId: list_connectors_v1alpha_connectors_get
parameters:
- name: include_tools
in: query
required: false
schema:
type: boolean
default: false
title: Include Tools
- name: registry_id
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Registry Id
/v1alpha/connectors/registries:
get:
responses:
'200':
description: A ListRegistriesResponse.
content:
application/json:
schema:
$ref: '#/components/schemas/ListRegistriesResponse'
'400':
description: Bad Request
$ref: '#/components/responses/BadRequest400'
'429':
description: Too Many Requests
$ref: '#/components/responses/TooManyRequests429'
'500':
description: Internal Server Error
$ref: '#/components/responses/InternalServerError500'
default:
description: Default Response
$ref: '#/components/responses/DefaultError'
tags:
- Connectors
summary: List Registries
description: List all registries.
operationId: list_registries_v1alpha_connectors_registries_get
components: components:
schemas: schemas:
Error: Error:
@ -3579,8 +3792,13 @@ components:
type: string type: string
title: Server Label title: Server Label
server_url: server_url:
type: string anyOf:
title: Server Url - type: string
- type: 'null'
connector_id:
anyOf:
- type: string
- type: 'null'
headers: headers:
anyOf: anyOf:
- additionalProperties: true - additionalProperties: true
@ -3613,7 +3831,6 @@ components:
type: object type: object
required: required:
- server_label - server_label
- server_url
title: OpenAIResponseInputToolMCP title: OpenAIResponseInputToolMCP
description: Model Context Protocol (MCP) tool configuration for OpenAI response inputs. description: Model Context Protocol (MCP) tool configuration for OpenAI response inputs.
OpenAIResponseObject: OpenAIResponseObject:
@ -7459,6 +7676,90 @@ components:
- chunk_id - chunk_id
title: Chunk title: Chunk
description: A chunk of content that can be inserted into a vector database. description: A chunk of content that can be inserted into a vector database.
Connector:
properties:
identifier:
type: string
title: Identifier
description: Unique identifier for this resource in llama stack
provider_resource_id:
anyOf:
- type: string
- type: 'null'
description: Unique identifier for this resource in the provider
provider_id:
type: string
title: Provider Id
description: ID of the provider that owns this resource
type:
type: string
const: connector
title: Type
default: connector
connector_type:
$ref: '#/components/schemas/ConnectorType'
default: mcp
connector_id:
anyOf:
- type: string
- type: 'null'
description: User-specified identifier for the connector
url:
type: string
title: Url
description: URL of the connector
created_at:
type: string
format: date-time
title: Created At
description: Timestamp of creation
updated_at:
type: string
format: date-time
title: Updated At
description: Timestamp of last update
server_name:
anyOf:
- type: string
- type: 'null'
description: Name of the server
server_label:
anyOf:
- type: string
- type: 'null'
description: Label of the server
server_description:
anyOf:
- type: string
- type: 'null'
description: Description of the server
tools:
anyOf:
- items:
$ref: '#/components/schemas/ToolDef'
type: array
- type: 'null'
description: List of tools available from the connector
registry_id:
anyOf:
- type: string
- type: 'null'
description: ID of the registry this connector belongs to
type: object
required:
- identifier
- provider_id
- url
- created_at
- updated_at
title: Connector
description: A connector resource representing a connector registered in Llama Stack.
ConnectorType:
type: string
enum:
- mcp
title: ConnectorType
description: Type of connector.
DatasetPurpose: DatasetPurpose:
type: string type: string
enum: enum:
@ -7537,6 +7838,42 @@ components:
- cancelled - cancelled
title: JobStatus title: JobStatus
description: Status of a job execution. description: Status of a job execution.
ListConnectorsResponse:
properties:
data:
items:
$ref: '#/components/schemas/Connector'
type: array
title: Data
type: object
required:
- data
title: ListConnectorsResponse
description: Response containing a list of connectors.
ListRegistriesResponse:
properties:
data:
items:
$ref: '#/components/schemas/Registry'
type: array
title: Data
type: object
required:
- data
title: ListRegistriesResponse
description: Response containing a list of registries.
ListToolsResponse:
properties:
data:
items:
$ref: '#/components/schemas/ToolDef'
type: array
title: Data
type: object
required:
- data
title: ListToolsResponse
description: Response containing a list of tools.
MCPListToolsTool: MCPListToolsTool:
properties: properties:
input_schema: input_schema:
@ -7860,6 +8197,63 @@ components:
required: required:
- reasoning_tokens - reasoning_tokens
title: OutputTokensDetails title: OutputTokensDetails
Registry:
properties:
identifier:
type: string
title: Identifier
description: Unique identifier for this resource in llama stack
provider_resource_id:
anyOf:
- type: string
- type: 'null'
description: Unique identifier for this resource in the provider
provider_id:
type: string
title: Provider Id
description: ID of the provider that owns this resource
type:
type: string
const: registry
title: Type
default: registry
registry_type:
$ref: '#/components/schemas/RegistryType'
default: mcp
user_registry_id:
anyOf:
- type: string
- type: 'null'
description: User-specified identifier for the registry
url:
type: string
title: Url
description: URL of the registry
created_at:
type: string
format: date-time
title: Created At
description: Timestamp of creation
updated_at:
type: string
format: date-time
title: Updated At
description: Timestamp of last update
type: object
required:
- identifier
- provider_id
- url
- created_at
- updated_at
title: Registry
description: A registry resource representing a registry of connectors.
RegistryType:
type: string
enum:
- mcp
title: RegistryType
description: Type of registry.
SearchRankingOptions: SearchRankingOptions:
properties: properties:
ranker: ranker:
@ -8333,6 +8727,85 @@ components:
type: string type: string
title: DialogType title: DialogType
type: object type: object
RegistryInput:
description: Input for creating a registry.
properties:
url:
title: Url
type: string
user_registry_id:
anyOf:
- type: string
- type: 'null'
description: User-specified identifier for the registry
nullable: true
registry_type:
$ref: '#/components/schemas/RegistryType'
default: mcp
required:
- url
title: RegistryInput
type: object
ToolGroupInput:
description: Input data for registering a tool group.
properties:
toolgroup_id:
title: Toolgroup Id
type: string
provider_id:
title: Provider Id
type: string
args:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
nullable: true
mcp_endpoint:
anyOf:
- $ref: '#/components/schemas/URL'
title: URL
- type: 'null'
nullable: true
title: URL
required:
- toolgroup_id
- provider_id
title: ToolGroupInput
type: object
ConnectorInput:
description: Input for creating a connector.
properties:
connector_type:
$ref: '#/components/schemas/ConnectorType'
default: mcp
connector_id:
anyOf:
- type: string
- type: 'null'
description: Unique identifier for the connector
nullable: true
url:
description: URL of the connector
title: Url
type: string
headers:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
description: HTTP headers to include when connecting
nullable: true
authorization:
anyOf:
- type: string
- type: 'null'
description: OAuth access token for authentication
nullable: true
required:
- url
title: ConnectorInput
type: object
ConversationMessage: ConversationMessage:
description: OpenAI-compatible message item for conversations. description: OpenAI-compatible message item for conversations.
properties: properties:
@ -8417,33 +8890,6 @@ components:
- items - items
title: ConversationItemCreateRequest title: ConversationItemCreateRequest
type: object type: object
ToolGroupInput:
description: Input data for registering a tool group.
properties:
toolgroup_id:
title: Toolgroup Id
type: string
provider_id:
title: Provider Id
type: string
args:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
nullable: true
mcp_endpoint:
anyOf:
- $ref: '#/components/schemas/URL'
title: URL
- type: 'null'
nullable: true
title: URL
required:
- toolgroup_id
- provider_id
title: ToolGroupInput
type: object
Api: Api:
description: Enumeration of all available APIs in the Llama Stack system. description: Enumeration of all available APIs in the Llama Stack system.
enum: enum:
@ -8468,6 +8914,7 @@ components:
- files - files
- prompts - prompts
- conversations - conversations
- connectors
- inspect - inspect
title: Api title: Api
type: string type: string

View file

@ -5850,8 +5850,13 @@ components:
type: string type: string
title: Server Label title: Server Label
server_url: server_url:
type: string anyOf:
title: Server Url - type: string
- type: 'null'
connector_id:
anyOf:
- type: string
- type: 'null'
headers: headers:
anyOf: anyOf:
- additionalProperties: true - additionalProperties: true
@ -5884,7 +5889,6 @@ components:
type: object type: object
required: required:
- server_label - server_label
- server_url
title: OpenAIResponseInputToolMCP title: OpenAIResponseInputToolMCP
description: Model Context Protocol (MCP) tool configuration for OpenAI response inputs. description: Model Context Protocol (MCP) tool configuration for OpenAI response inputs.
CreateOpenaiResponseRequest: CreateOpenaiResponseRequest:
@ -10054,6 +10058,90 @@ components:
- chunk_id - chunk_id
title: Chunk title: Chunk
description: A chunk of content that can be inserted into a vector database. description: A chunk of content that can be inserted into a vector database.
Connector:
properties:
identifier:
type: string
title: Identifier
description: Unique identifier for this resource in llama stack
provider_resource_id:
anyOf:
- type: string
- type: 'null'
description: Unique identifier for this resource in the provider
provider_id:
type: string
title: Provider Id
description: ID of the provider that owns this resource
type:
type: string
const: connector
title: Type
default: connector
connector_type:
$ref: '#/components/schemas/ConnectorType'
default: mcp
connector_id:
anyOf:
- type: string
- type: 'null'
description: User-specified identifier for the connector
url:
type: string
title: Url
description: URL of the connector
created_at:
type: string
format: date-time
title: Created At
description: Timestamp of creation
updated_at:
type: string
format: date-time
title: Updated At
description: Timestamp of last update
server_name:
anyOf:
- type: string
- type: 'null'
description: Name of the server
server_label:
anyOf:
- type: string
- type: 'null'
description: Label of the server
server_description:
anyOf:
- type: string
- type: 'null'
description: Description of the server
tools:
anyOf:
- items:
$ref: '#/components/schemas/ToolDef'
type: array
- type: 'null'
description: List of tools available from the connector
registry_id:
anyOf:
- type: string
- type: 'null'
description: ID of the registry this connector belongs to
type: object
required:
- identifier
- provider_id
- url
- created_at
- updated_at
title: Connector
description: A connector resource representing a connector registered in Llama Stack.
ConnectorType:
type: string
enum:
- mcp
title: ConnectorType
description: Type of connector.
ConversationItemInclude: ConversationItemInclude:
type: string type: string
enum: enum:
@ -10144,6 +10232,42 @@ components:
- cancelled - cancelled
title: JobStatus title: JobStatus
description: Status of a job execution. description: Status of a job execution.
ListConnectorsResponse:
properties:
data:
items:
$ref: '#/components/schemas/Connector'
type: array
title: Data
type: object
required:
- data
title: ListConnectorsResponse
description: Response containing a list of connectors.
ListRegistriesResponse:
properties:
data:
items:
$ref: '#/components/schemas/Registry'
type: array
title: Data
type: object
required:
- data
title: ListRegistriesResponse
description: Response containing a list of registries.
ListToolsResponse:
properties:
data:
items:
$ref: '#/components/schemas/ToolDef'
type: array
title: Data
type: object
required:
- data
title: ListToolsResponse
description: Response containing a list of tools.
MCPListToolsTool: MCPListToolsTool:
properties: properties:
input_schema: input_schema:
@ -10536,6 +10660,63 @@ components:
required: required:
- reasoning_tokens - reasoning_tokens
title: OutputTokensDetails title: OutputTokensDetails
Registry:
properties:
identifier:
type: string
title: Identifier
description: Unique identifier for this resource in llama stack
provider_resource_id:
anyOf:
- type: string
- type: 'null'
description: Unique identifier for this resource in the provider
provider_id:
type: string
title: Provider Id
description: ID of the provider that owns this resource
type:
type: string
const: registry
title: Type
default: registry
registry_type:
$ref: '#/components/schemas/RegistryType'
default: mcp
user_registry_id:
anyOf:
- type: string
- type: 'null'
description: User-specified identifier for the registry
url:
type: string
title: Url
description: URL of the registry
created_at:
type: string
format: date-time
title: Created At
description: Timestamp of creation
updated_at:
type: string
format: date-time
title: Updated At
description: Timestamp of last update
type: object
required:
- identifier
- provider_id
- url
- created_at
- updated_at
title: Registry
description: A registry resource representing a registry of connectors.
RegistryType:
type: string
enum:
- mcp
title: RegistryType
description: Type of registry.
SearchRankingOptions: SearchRankingOptions:
properties: properties:
ranker: ranker:
@ -11009,6 +11190,85 @@ components:
type: string type: string
title: DialogType title: DialogType
type: object type: object
RegistryInput:
description: Input for creating a registry.
properties:
url:
title: Url
type: string
user_registry_id:
anyOf:
- type: string
- type: 'null'
description: User-specified identifier for the registry
nullable: true
registry_type:
$ref: '#/components/schemas/RegistryType'
default: mcp
required:
- url
title: RegistryInput
type: object
ToolGroupInput:
description: Input data for registering a tool group.
properties:
toolgroup_id:
title: Toolgroup Id
type: string
provider_id:
title: Provider Id
type: string
args:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
nullable: true
mcp_endpoint:
anyOf:
- $ref: '#/components/schemas/URL'
title: URL
- type: 'null'
nullable: true
title: URL
required:
- toolgroup_id
- provider_id
title: ToolGroupInput
type: object
ConnectorInput:
description: Input for creating a connector.
properties:
connector_type:
$ref: '#/components/schemas/ConnectorType'
default: mcp
connector_id:
anyOf:
- type: string
- type: 'null'
description: Unique identifier for the connector
nullable: true
url:
description: URL of the connector
title: Url
type: string
headers:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
description: HTTP headers to include when connecting
nullable: true
authorization:
anyOf:
- type: string
- type: 'null'
description: OAuth access token for authentication
nullable: true
required:
- url
title: ConnectorInput
type: object
ConversationMessage: ConversationMessage:
description: OpenAI-compatible message item for conversations. description: OpenAI-compatible message item for conversations.
properties: properties:
@ -11093,33 +11353,6 @@ components:
- items - items
title: ConversationItemCreateRequest title: ConversationItemCreateRequest
type: object type: object
ToolGroupInput:
description: Input data for registering a tool group.
properties:
toolgroup_id:
title: Toolgroup Id
type: string
provider_id:
title: Provider Id
type: string
args:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
nullable: true
mcp_endpoint:
anyOf:
- $ref: '#/components/schemas/URL'
title: URL
- type: 'null'
nullable: true
title: URL
required:
- toolgroup_id
- provider_id
title: ToolGroupInput
type: object
Api: Api:
description: Enumeration of all available APIs in the Llama Stack system. description: Enumeration of all available APIs in the Llama Stack system.
enum: enum:
@ -11144,6 +11377,7 @@ components:
- files - files
- prompts - prompts
- conversations - conversations
- connectors
- inspect - inspect
title: Api title: Api
type: string type: string

View file

@ -3893,6 +3893,219 @@ paths:
schema: schema:
$ref: '#/components/schemas/SupervisedFineTuneRequest' $ref: '#/components/schemas/SupervisedFineTuneRequest'
required: true required: true
/v1alpha/connectors/{connector_id}:
get:
responses:
'200':
description: A Connector.
content:
application/json:
schema:
$ref: '#/components/schemas/Connector'
'400':
$ref: '#/components/responses/BadRequest400'
description: Bad Request
'429':
$ref: '#/components/responses/TooManyRequests429'
description: Too Many Requests
'500':
$ref: '#/components/responses/InternalServerError500'
description: Internal Server Error
default:
$ref: '#/components/responses/DefaultError'
description: Default Response
tags:
- Connectors
summary: Get Connector
description: Get a connector by its ID.
operationId: get_connector_v1alpha_connectors__connector_id__get
parameters:
- name: include_tools
in: query
required: false
schema:
type: boolean
default: false
title: Include Tools
- name: connector_id
in: path
required: true
schema:
type: string
description: 'Path parameter: connector_id'
/v1alpha/connectors/{connector_id}/tools/{tool_name}:
get:
responses:
'200':
description: A ToolDef.
content:
application/json:
schema:
$ref: '#/components/schemas/ToolDef'
'400':
description: Bad Request
$ref: '#/components/responses/BadRequest400'
'429':
description: Too Many Requests
$ref: '#/components/responses/TooManyRequests429'
'500':
description: Internal Server Error
$ref: '#/components/responses/InternalServerError500'
default:
description: Default Response
$ref: '#/components/responses/DefaultError'
tags:
- Connectors
summary: Get Connector Tool
description: Get a tool definition by its name from a connector.
operationId: get_connector_tool_v1alpha_connectors__connector_id__tools__tool_name__get
parameters:
- name: connector_id
in: path
required: true
schema:
type: string
description: 'Path parameter: connector_id'
- name: tool_name
in: path
required: true
schema:
type: string
description: 'Path parameter: tool_name'
/v1alpha/connectors/registries/{registry_id}:
get:
responses:
'200':
description: A Registry.
content:
application/json:
schema:
$ref: '#/components/schemas/Registry'
'400':
description: Bad Request
$ref: '#/components/responses/BadRequest400'
'429':
description: Too Many Requests
$ref: '#/components/responses/TooManyRequests429'
'500':
description: Internal Server Error
$ref: '#/components/responses/InternalServerError500'
default:
description: Default Response
$ref: '#/components/responses/DefaultError'
tags:
- Connectors
summary: Get Registry
description: Get a registry by its ID.
operationId: get_registry_v1alpha_connectors_registries__registry_id__get
parameters:
- name: registry_id
in: path
required: true
schema:
type: string
description: 'Path parameter: registry_id'
/v1alpha/connectors/{connector_id}/tools:
get:
responses:
'200':
description: A ListToolsResponse.
content:
application/json:
schema:
$ref: '#/components/schemas/ListToolsResponse'
'400':
description: Bad Request
$ref: '#/components/responses/BadRequest400'
'429':
description: Too Many Requests
$ref: '#/components/responses/TooManyRequests429'
'500':
description: Internal Server Error
$ref: '#/components/responses/InternalServerError500'
default:
description: Default Response
$ref: '#/components/responses/DefaultError'
tags:
- Connectors
summary: List Connector Tools
description: List tools available from a connector.
operationId: list_connector_tools_v1alpha_connectors__connector_id__tools_get
parameters:
- name: connector_id
in: path
required: true
schema:
type: string
description: 'Path parameter: connector_id'
/v1alpha/connectors:
get:
responses:
'200':
description: A ListConnectorsResponse.
content:
application/json:
schema:
$ref: '#/components/schemas/ListConnectorsResponse'
'400':
$ref: '#/components/responses/BadRequest400'
description: Bad Request
'429':
$ref: '#/components/responses/TooManyRequests429'
description: Too Many Requests
'500':
$ref: '#/components/responses/InternalServerError500'
description: Internal Server Error
default:
$ref: '#/components/responses/DefaultError'
description: Default Response
tags:
- Connectors
summary: List Connectors
description: List all configured connectors.
operationId: list_connectors_v1alpha_connectors_get
parameters:
- name: include_tools
in: query
required: false
schema:
type: boolean
default: false
title: Include Tools
- name: registry_id
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Registry Id
/v1alpha/connectors/registries:
get:
responses:
'200':
description: A ListRegistriesResponse.
content:
application/json:
schema:
$ref: '#/components/schemas/ListRegistriesResponse'
'400':
description: Bad Request
$ref: '#/components/responses/BadRequest400'
'429':
description: Too Many Requests
$ref: '#/components/responses/TooManyRequests429'
'500':
description: Internal Server Error
$ref: '#/components/responses/InternalServerError500'
default:
description: Default Response
$ref: '#/components/responses/DefaultError'
tags:
- Connectors
summary: List Registries
description: List all registries.
operationId: list_registries_v1alpha_connectors_registries_get
components: components:
schemas: schemas:
Error: Error:
@ -7045,8 +7258,13 @@ components:
type: string type: string
title: Server Label title: Server Label
server_url: server_url:
type: string anyOf:
title: Server Url - type: string
- type: 'null'
connector_id:
anyOf:
- type: string
- type: 'null'
headers: headers:
anyOf: anyOf:
- additionalProperties: true - additionalProperties: true
@ -7079,7 +7297,6 @@ components:
type: object type: object
required: required:
- server_label - server_label
- server_url
title: OpenAIResponseInputToolMCP title: OpenAIResponseInputToolMCP
description: Model Context Protocol (MCP) tool configuration for OpenAI response inputs. description: Model Context Protocol (MCP) tool configuration for OpenAI response inputs.
CreateOpenaiResponseRequest: CreateOpenaiResponseRequest:
@ -11618,6 +11835,90 @@ components:
- chunk_id - chunk_id
title: Chunk title: Chunk
description: A chunk of content that can be inserted into a vector database. description: A chunk of content that can be inserted into a vector database.
Connector:
properties:
identifier:
type: string
title: Identifier
description: Unique identifier for this resource in llama stack
provider_resource_id:
anyOf:
- type: string
- type: 'null'
description: Unique identifier for this resource in the provider
provider_id:
type: string
title: Provider Id
description: ID of the provider that owns this resource
type:
type: string
const: connector
title: Type
default: connector
connector_type:
$ref: '#/components/schemas/ConnectorType'
default: mcp
connector_id:
anyOf:
- type: string
- type: 'null'
description: User-specified identifier for the connector
url:
type: string
title: Url
description: URL of the connector
created_at:
type: string
format: date-time
title: Created At
description: Timestamp of creation
updated_at:
type: string
format: date-time
title: Updated At
description: Timestamp of last update
server_name:
anyOf:
- type: string
- type: 'null'
description: Name of the server
server_label:
anyOf:
- type: string
- type: 'null'
description: Label of the server
server_description:
anyOf:
- type: string
- type: 'null'
description: Description of the server
tools:
anyOf:
- items:
$ref: '#/components/schemas/ToolDef'
type: array
- type: 'null'
description: List of tools available from the connector
registry_id:
anyOf:
- type: string
- type: 'null'
description: ID of the registry this connector belongs to
type: object
required:
- identifier
- provider_id
- url
- created_at
- updated_at
title: Connector
description: A connector resource representing a connector registered in Llama Stack.
ConnectorType:
type: string
enum:
- mcp
title: ConnectorType
description: Type of connector.
ConversationItemInclude: ConversationItemInclude:
type: string type: string
enum: enum:
@ -11708,6 +12009,42 @@ components:
- cancelled - cancelled
title: JobStatus title: JobStatus
description: Status of a job execution. description: Status of a job execution.
ListConnectorsResponse:
properties:
data:
items:
$ref: '#/components/schemas/Connector'
type: array
title: Data
type: object
required:
- data
title: ListConnectorsResponse
description: Response containing a list of connectors.
ListRegistriesResponse:
properties:
data:
items:
$ref: '#/components/schemas/Registry'
type: array
title: Data
type: object
required:
- data
title: ListRegistriesResponse
description: Response containing a list of registries.
ListToolsResponse:
properties:
data:
items:
$ref: '#/components/schemas/ToolDef'
type: array
title: Data
type: object
required:
- data
title: ListToolsResponse
description: Response containing a list of tools.
MCPListToolsTool: MCPListToolsTool:
properties: properties:
input_schema: input_schema:
@ -12100,6 +12437,63 @@ components:
required: required:
- reasoning_tokens - reasoning_tokens
title: OutputTokensDetails title: OutputTokensDetails
Registry:
properties:
identifier:
type: string
title: Identifier
description: Unique identifier for this resource in llama stack
provider_resource_id:
anyOf:
- type: string
- type: 'null'
description: Unique identifier for this resource in the provider
provider_id:
type: string
title: Provider Id
description: ID of the provider that owns this resource
type:
type: string
const: registry
title: Type
default: registry
registry_type:
$ref: '#/components/schemas/RegistryType'
default: mcp
user_registry_id:
anyOf:
- type: string
- type: 'null'
description: User-specified identifier for the registry
url:
type: string
title: Url
description: URL of the registry
created_at:
type: string
format: date-time
title: Created At
description: Timestamp of creation
updated_at:
type: string
format: date-time
title: Updated At
description: Timestamp of last update
type: object
required:
- identifier
- provider_id
- url
- created_at
- updated_at
title: Registry
description: A registry resource representing a registry of connectors.
RegistryType:
type: string
enum:
- mcp
title: RegistryType
description: Type of registry.
SearchRankingOptions: SearchRankingOptions:
properties: properties:
ranker: ranker:
@ -12573,6 +12967,85 @@ components:
type: string type: string
title: DialogType title: DialogType
type: object type: object
RegistryInput:
description: Input for creating a registry.
properties:
url:
title: Url
type: string
user_registry_id:
anyOf:
- type: string
- type: 'null'
description: User-specified identifier for the registry
nullable: true
registry_type:
$ref: '#/components/schemas/RegistryType'
default: mcp
required:
- url
title: RegistryInput
type: object
ToolGroupInput:
description: Input data for registering a tool group.
properties:
toolgroup_id:
title: Toolgroup Id
type: string
provider_id:
title: Provider Id
type: string
args:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
nullable: true
mcp_endpoint:
anyOf:
- $ref: '#/components/schemas/URL'
title: URL
- type: 'null'
nullable: true
title: URL
required:
- toolgroup_id
- provider_id
title: ToolGroupInput
type: object
ConnectorInput:
description: Input for creating a connector.
properties:
connector_type:
$ref: '#/components/schemas/ConnectorType'
default: mcp
connector_id:
anyOf:
- type: string
- type: 'null'
description: Unique identifier for the connector
nullable: true
url:
description: URL of the connector
title: Url
type: string
headers:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
description: HTTP headers to include when connecting
nullable: true
authorization:
anyOf:
- type: string
- type: 'null'
description: OAuth access token for authentication
nullable: true
required:
- url
title: ConnectorInput
type: object
ConversationMessage: ConversationMessage:
description: OpenAI-compatible message item for conversations. description: OpenAI-compatible message item for conversations.
properties: properties:
@ -12657,33 +13130,6 @@ components:
- items - items
title: ConversationItemCreateRequest title: ConversationItemCreateRequest
type: object type: object
ToolGroupInput:
description: Input data for registering a tool group.
properties:
toolgroup_id:
title: Toolgroup Id
type: string
provider_id:
title: Provider Id
type: string
args:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
nullable: true
mcp_endpoint:
anyOf:
- $ref: '#/components/schemas/URL'
title: URL
- type: 'null'
nullable: true
title: URL
required:
- toolgroup_id
- provider_id
title: ToolGroupInput
type: object
Api: Api:
description: Enumeration of all available APIs in the Llama Stack system. description: Enumeration of all available APIs in the Llama Stack system.
enum: enum:
@ -12708,6 +13154,7 @@ components:
- files - files
- prompts - prompts
- conversations - conversations
- connectors
- inspect - inspect
title: Api title: Api
type: string type: string

View file

@ -0,0 +1,5 @@
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the terms described in the LICENSE file in
# the root directory of this source tree.

View file

@ -0,0 +1,184 @@
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the terms described in the LICENSE file in
# the root directory of this source tree.
from datetime import UTC, datetime
from typing import Any
from pydantic import BaseModel
from llama_stack.core.datatypes import StackRunConfig
from llama_stack.log import get_logger
from llama_stack.providers.utils.tools.mcp import get_mcp_server_info, list_mcp_tools
from llama_stack_api import (
Connector,
ConnectorNotFoundError,
Connectors,
ConnectorToolNotFoundError,
ConnectorType,
ListConnectorsResponse,
ListRegistriesResponse,
ListToolsResponse,
Registry,
RegistryNotFoundError,
ToolDef,
)
logger = get_logger(name=__name__, category="connectors")
class ConnectorServiceConfig(BaseModel):
"""Configuration for the built-in connector service.
:param run_config: Stack run configuration for resolving persistence
"""
run_config: StackRunConfig
async def get_provider_impl(config: ConnectorServiceConfig):
"""Get the connector service implementation."""
impl = ConnectorServiceImpl(config)
return impl
class ConnectorServiceImpl(Connectors):
"""Built-in connector service implementation."""
def __init__(self, config: ConnectorServiceConfig):
self.config = config
# TODO: should these be stored in a kvstore?
self.connectors_map: dict[str, Connector] = {}
self.registries_map: dict[str, Registry] = {}
def get_connector_url(self, connector_id: str) -> str | None:
"""Get the URL of a connector by its ID.
:param connector_id: The ID of the connector to get the URL for.
:returns: The URL of the connector.
"""
connector = self.connectors_map.get(connector_id)
if connector is None:
return None
return connector.url
async def register_connector(
self,
url: str,
connector_id: str | None = None,
connector_type: ConnectorType = ConnectorType.MCP,
headers: dict[str, Any] | None = None,
authorization: str | None = None,
) -> Connector:
"""Register a new connector.
:param url: URL of the MCP server to connect to.
:param connector_id: (Optional) User-specified identifier for the connector.
:param connector_type: (Optional) Type of connector, defaults to MCP.
:param headers: (Optional) HTTP headers to include when connecting to the server.
:param authorization: (Optional) OAuth access token for authenticating with the MCP server.
:returns: The registered Connector.
"""
# Fetch server info and tools from the MCP server
# TODO: documentation item: users should be able to pass headers and authorization in the connector input as env variables.
server_info = await get_mcp_server_info(url, headers=headers, authorization=authorization)
tools_response = await list_mcp_tools(url, headers=headers, authorization=authorization)
connector = Connector(
identifier=server_info.name,
provider_id="builtin::connectors",
user_connector_id=connector_id,
connector_type=connector_type,
url=url,
created_at=datetime.now(UTC),
updated_at=datetime.now(UTC),
server_name=server_info.name,
server_label=server_info.title,
server_description=server_info.description,
tools=tools_response.data,
)
logger.info(f"Registered connector {connector.connector_id} with server name {connector.server_name}")
self.connectors_map[connector.connector_id] = connector
return connector
async def list_connectors(
self,
registry_id: str | None = None,
include_tools: bool = False,
) -> ListConnectorsResponse:
"""List all configured connectors.
:param registry_id: (Optional) The ID of a registry to filter connectors for.
:param include_tools: (Optional) Whether to include tools in the response.
:returns: A ListConnectorsResponse.
"""
connectors = [c for c in self.connectors_map.values() if registry_id is None or c.registry_id == registry_id]
if not include_tools:
return ListConnectorsResponse(data=[c.without_tools for c in connectors])
return ListConnectorsResponse(data=connectors)
async def get_connector(self, connector_id: str, include_tools: bool = False) -> Connector:
"""Get a connector by its ID.
:param connector_id: The ID of the connector to get.
:returns: A Connector.
:raises ConnectorNotFoundError: If the connector is not found.
"""
connector = self.connectors_map.get(connector_id)
if connector is None:
raise ConnectorNotFoundError(connector_id)
if not include_tools:
return connector.without_tools
return connector
async def list_connector_tools(self, connector_id: str) -> ListToolsResponse:
"""List tools available from a connector.
:param connector_id: The ID of the connector to list tools for.
:returns: A ListToolsResponse.
:raises ConnectorNotFoundError: If the connector is not found.
"""
connector = await self.get_connector(connector_id, include_tools=True)
# Return empty list if no tools, rather than raising
return ListToolsResponse(data=connector.tools or [])
async def get_connector_tool(self, connector_id: str, tool_name: str) -> ToolDef:
"""Get a tool definition by its name from a connector.
:param connector_id: The ID of the connector to get the tool from.
:param tool_name: The name of the tool to get.
:returns: A ToolDef.
:raises ConnectorNotFoundError: If the connector is not found.
:raises ConnectorToolNotFoundError: If the tool is not found in the connector.
"""
connector_tools = await self.list_connector_tools(connector_id)
for tool in connector_tools.data:
if tool.name == tool_name:
return tool
raise ConnectorToolNotFoundError(connector_id, tool_name)
async def list_registries(self) -> ListRegistriesResponse:
"""List all registries.
:returns: A ListRegistriesResponse.
"""
return ListRegistriesResponse(data=list(self.registries_map.values()))
async def get_registry(self, registry_id: str) -> Registry:
"""Get a registry by its ID.
:param registry_id: The ID of the registry to get.
:returns: A Registry.
:raises RegistryNotFoundError: If the registry is not found.
"""
registry = self.registries_map.get(registry_id)
if registry is None:
raise RegistryNotFoundError(registry_id)
return registry
async def shutdown(self) -> None:
self.connectors_map.clear()
self.registries_map.clear()

View file

@ -22,6 +22,7 @@ from llama_stack_api import (
Api, Api,
Benchmark, Benchmark,
BenchmarkInput, BenchmarkInput,
ConnectorInput,
Dataset, Dataset,
DatasetInput, DatasetInput,
DatasetIO, DatasetIO,
@ -429,6 +430,7 @@ class RegisteredResources(BaseModel):
scoring_fns: list[ScoringFnInput] = Field(default_factory=list) scoring_fns: list[ScoringFnInput] = Field(default_factory=list)
benchmarks: list[BenchmarkInput] = Field(default_factory=list) benchmarks: list[BenchmarkInput] = Field(default_factory=list)
tool_groups: list[ToolGroupInput] = Field(default_factory=list) tool_groups: list[ToolGroupInput] = Field(default_factory=list)
connectors: list[ConnectorInput] = Field(default_factory=list)
class ServerConfig(BaseModel): class ServerConfig(BaseModel):

View file

@ -28,6 +28,7 @@ from llama_stack_api import (
Batches, Batches,
Benchmarks, Benchmarks,
BenchmarksProtocolPrivate, BenchmarksProtocolPrivate,
Connectors,
Conversations, Conversations,
DatasetIO, DatasetIO,
Datasets, Datasets,
@ -100,6 +101,7 @@ def api_protocol_map(external_apis: dict[Api, ExternalApiSpec] | None = None) ->
Api.files: Files, Api.files: Files,
Api.prompts: Prompts, Api.prompts: Prompts,
Api.conversations: Conversations, Api.conversations: Conversations,
Api.connectors: Connectors,
} }
if external_apis: if external_apis:

View file

@ -454,6 +454,7 @@ def create_app() -> StackApp:
apis_to_serve.add("providers") apis_to_serve.add("providers")
apis_to_serve.add("prompts") apis_to_serve.add("prompts")
apis_to_serve.add("conversations") apis_to_serve.add("conversations")
apis_to_serve.add("connectors")
for api_str in apis_to_serve: for api_str in apis_to_serve:
api = Api(api_str) api = Api(api_str)

View file

@ -13,6 +13,7 @@ from typing import Any
import yaml import yaml
from llama_stack.core.connectors.connectors import ConnectorServiceConfig, ConnectorServiceImpl
from llama_stack.core.conversations.conversations import ConversationServiceConfig, ConversationServiceImpl from llama_stack.core.conversations.conversations import ConversationServiceConfig, ConversationServiceImpl
from llama_stack.core.datatypes import Provider, SafetyConfig, StackRunConfig, VectorStoresConfig from llama_stack.core.datatypes import Provider, SafetyConfig, StackRunConfig, VectorStoresConfig
from llama_stack.core.distribution import get_provider_registry from llama_stack.core.distribution import get_provider_registry
@ -39,6 +40,7 @@ from llama_stack_api import (
Api, Api,
Batches, Batches,
Benchmarks, Benchmarks,
Connectors,
Conversations, Conversations,
DatasetIO, DatasetIO,
Datasets, Datasets,
@ -64,6 +66,7 @@ logger = get_logger(name=__name__, category="core")
class LlamaStack( class LlamaStack(
Providers, Providers,
Connectors,
Inference, Inference,
Agents, Agents,
Batches, Batches,
@ -100,6 +103,7 @@ RESOURCES = [
), ),
("benchmarks", Api.benchmarks, "register_benchmark", "list_benchmarks"), ("benchmarks", Api.benchmarks, "register_benchmark", "list_benchmarks"),
("tool_groups", Api.tool_groups, "register_tool_group", "list_tool_groups"), ("tool_groups", Api.tool_groups, "register_tool_group", "list_tool_groups"),
("connectors", Api.connectors, "register_connector", "list_connectors"),
] ]
@ -372,6 +376,11 @@ def add_internal_implementations(impls: dict[Api, Any], run_config: StackRunConf
) )
impls[Api.conversations] = conversations_impl impls[Api.conversations] = conversations_impl
connectors_impl = ConnectorServiceImpl(
ConnectorServiceConfig(run_config=run_config),
)
impls[Api.connectors] = connectors_impl
def _initialize_storage(run_config: StackRunConfig): def _initialize_storage(run_config: StackRunConfig):
kv_backends: dict[str, StorageBackendConfig] = {} kv_backends: dict[str, StorageBackendConfig] = {}

View file

@ -50,6 +50,7 @@ CATEGORIES = [
"post_training", "post_training",
"scoring", "scoring",
"tests", "tests",
"connectors",
] ]
UNCATEGORIZED = "uncategorized" UNCATEGORIZED = "uncategorized"

View file

@ -28,6 +28,7 @@ async def get_provider_impl(
deps[Api.conversations], deps[Api.conversations],
deps[Api.prompts], deps[Api.prompts],
deps[Api.files], deps[Api.files],
deps[Api.connectors],
policy, policy,
) )
await impl.initialize() await impl.initialize()

View file

@ -11,6 +11,7 @@ from llama_stack.log import get_logger
from llama_stack.providers.utils.responses.responses_store import ResponsesStore from llama_stack.providers.utils.responses.responses_store import ResponsesStore
from llama_stack_api import ( from llama_stack_api import (
Agents, Agents,
Connectors,
Conversations, Conversations,
Files, Files,
Inference, Inference,
@ -49,6 +50,7 @@ class MetaReferenceAgentsImpl(Agents):
conversations_api: Conversations, conversations_api: Conversations,
prompts_api: Prompts, prompts_api: Prompts,
files_api: Files, files_api: Files,
connectors_api: Connectors,
policy: list[AccessRule], policy: list[AccessRule],
): ):
self.config = config self.config = config
@ -60,6 +62,7 @@ class MetaReferenceAgentsImpl(Agents):
self.conversations_api = conversations_api self.conversations_api = conversations_api
self.prompts_api = prompts_api self.prompts_api = prompts_api
self.files_api = files_api self.files_api = files_api
self.connectors_api = connectors_api
self.in_memory_store = InmemoryKVStoreImpl() self.in_memory_store = InmemoryKVStoreImpl()
self.openai_responses_impl: OpenAIResponsesImpl | None = None self.openai_responses_impl: OpenAIResponsesImpl | None = None
self.policy = policy self.policy = policy
@ -78,6 +81,7 @@ class MetaReferenceAgentsImpl(Agents):
conversations_api=self.conversations_api, conversations_api=self.conversations_api,
prompts_api=self.prompts_api, prompts_api=self.prompts_api,
files_api=self.files_api, files_api=self.files_api,
connectors_api=self.connectors_api,
) )
async def shutdown(self) -> None: async def shutdown(self) -> None:

View file

@ -17,6 +17,7 @@ from llama_stack.providers.utils.responses.responses_store import (
_OpenAIResponseObjectWithInputAndMessages, _OpenAIResponseObjectWithInputAndMessages,
) )
from llama_stack_api import ( from llama_stack_api import (
Connectors,
ConversationItem, ConversationItem,
Conversations, Conversations,
Files, Files,
@ -79,6 +80,7 @@ class OpenAIResponsesImpl:
conversations_api: Conversations, conversations_api: Conversations,
prompts_api: Prompts, prompts_api: Prompts,
files_api: Files, files_api: Files,
connectors_api: Connectors,
): ):
self.inference_api = inference_api self.inference_api = inference_api
self.tool_groups_api = tool_groups_api self.tool_groups_api = tool_groups_api
@ -94,6 +96,7 @@ class OpenAIResponsesImpl:
) )
self.prompts_api = prompts_api self.prompts_api = prompts_api
self.files_api = files_api self.files_api = files_api
self.connectors_api = connectors_api
async def _prepend_previous_response( async def _prepend_previous_response(
self, self,
@ -494,6 +497,7 @@ class OpenAIResponsesImpl:
instructions=instructions, instructions=instructions,
max_tool_calls=max_tool_calls, max_tool_calls=max_tool_calls,
metadata=metadata, metadata=metadata,
connectors_api=self.connectors_api,
) )
# Stream the response # Stream the response

View file

@ -15,6 +15,7 @@ from llama_stack.providers.utils.inference.prompt_adapter import interleaved_con
from llama_stack_api import ( from llama_stack_api import (
AllowedToolsFilter, AllowedToolsFilter,
ApprovalFilter, ApprovalFilter,
Connectors,
Inference, Inference,
MCPListToolsTool, MCPListToolsTool,
ModelNotFoundError, ModelNotFoundError,
@ -121,8 +122,10 @@ class StreamingResponseOrchestrator:
parallel_tool_calls: bool | None = None, parallel_tool_calls: bool | None = None,
max_tool_calls: int | None = None, max_tool_calls: int | None = None,
metadata: dict[str, str] | None = None, metadata: dict[str, str] | None = None,
connectors_api: Connectors | None = None,
): ):
self.inference_api = inference_api self.inference_api = inference_api
self.connectors_api = connectors_api
self.ctx = ctx self.ctx = ctx
self.response_id = response_id self.response_id = response_id
self.created_at = created_at self.created_at = created_at
@ -1088,6 +1091,15 @@ class StreamingResponseOrchestrator:
"""Process an MCP tool configuration and emit appropriate streaming events.""" """Process an MCP tool configuration and emit appropriate streaming events."""
from llama_stack.providers.utils.tools.mcp import list_mcp_tools from llama_stack.providers.utils.tools.mcp import list_mcp_tools
# Resolve connector_id to server_url if provided
if mcp_tool.connector_id and not mcp_tool.server_url:
if self.connectors_api is None:
raise ValueError("Connectors API not available to resolve connector_id")
server_url = self.connectors_api.get_connector_url(mcp_tool.connector_id)
if not server_url:
raise ValueError(f"Connector {mcp_tool.connector_id} not found")
mcp_tool = mcp_tool.model_copy(update={"server_url": server_url})
# Emit mcp_list_tools.in_progress # Emit mcp_list_tools.in_progress
self.sequence_number += 1 self.sequence_number += 1
yield OpenAIResponseObjectStreamResponseMcpListToolsInProgress( yield OpenAIResponseObjectStreamResponseMcpListToolsInProgress(

View file

@ -36,6 +36,7 @@ def available_providers() -> list[ProviderSpec]:
Api.conversations, Api.conversations,
Api.prompts, Api.prompts,
Api.files, Api.files,
Api.connectors,
], ],
optional_api_dependencies=[ optional_api_dependencies=[
Api.safety, Api.safety,

View file

@ -228,3 +228,44 @@ async def invoke_mcp_tool(
content=content, content=content,
error_code=1 if result.isError else 0, error_code=1 if result.isError else 0,
) )
from dataclasses import dataclass
@dataclass
class MCPServerInfo:
"""Server information from an MCP server."""
name: str
version: str
title: str | None = None
description: str | None = None
async def get_mcp_server_info(
endpoint: str,
headers: dict[str, str] | None = None,
authorization: str | None = None,
) -> MCPServerInfo:
"""Get server info from an MCP server.
Args:
endpoint: MCP server endpoint URL
headers: Optional base headers to include
authorization: Optional OAuth access token (just the token, not "Bearer <token>")
Returns:
MCPServerInfo containing name, version, title, and description
"""
final_headers = prepare_mcp_headers(headers, authorization)
async with client_wrapper(endpoint, final_headers) as session:
init_result = await session.initialize()
return MCPServerInfo(
name=init_result.serverInfo.name,
version=init_result.serverInfo.version,
title=init_result.serverInfo.title,
description=init_result.instructions,
)

View file

@ -46,10 +46,13 @@ from .common.content_types import (
) )
from .common.errors import ( from .common.errors import (
ConflictError, ConflictError,
ConnectorNotFoundError,
ConnectorToolNotFoundError,
DatasetNotFoundError, DatasetNotFoundError,
InvalidConversationIdError, InvalidConversationIdError,
ModelNotFoundError, ModelNotFoundError,
ModelTypeError, ModelTypeError,
RegistryNotFoundError,
ResourceNotFoundError, ResourceNotFoundError,
TokenValidationError, TokenValidationError,
ToolGroupNotFoundError, ToolGroupNotFoundError,
@ -66,6 +69,14 @@ from .common.type_system import (
ParamType, ParamType,
StringType, StringType,
) )
from .connectors import (
Connector,
ConnectorInput,
Connectors,
ConnectorType,
ListConnectorsResponse,
ListToolsResponse,
)
from .conversations import ( from .conversations import (
Conversation, Conversation,
ConversationDeletedResource, ConversationDeletedResource,
@ -340,6 +351,12 @@ from .rag_tool import (
RRFRanker, RRFRanker,
WeightedRanker, WeightedRanker,
) )
from .registries import (
ListRegistriesResponse,
Registry,
RegistryInput,
RegistryType,
)
from .resource import Resource, ResourceType from .resource import Resource, ResourceType
from .safety import ( from .safety import (
ModerationObject, ModerationObject,
@ -482,6 +499,12 @@ __all__ = [
"CommonShieldFields", "CommonShieldFields",
"CompletionInputType", "CompletionInputType",
"CompletionRequest", "CompletionRequest",
"Connector",
"ConnectorInput",
"Connectors",
"ConnectorType",
"ConnectorNotFoundError",
"ConnectorToolNotFoundError",
"Conversation", "Conversation",
"ConversationDeletedResource", "ConversationDeletedResource",
"ConversationItem", "ConversationItem",
@ -556,6 +579,7 @@ __all__ = [
"LLMRAGQueryGeneratorConfig", "LLMRAGQueryGeneratorConfig",
"ListBatchesResponse", "ListBatchesResponse",
"ListBenchmarksResponse", "ListBenchmarksResponse",
"ListConnectorsResponse",
"ListDatasetsResponse", "ListDatasetsResponse",
"ListModelsResponse", "ListModelsResponse",
"ListOpenAIChatCompletionResponse", "ListOpenAIChatCompletionResponse",
@ -565,11 +589,13 @@ __all__ = [
"ListPostTrainingJobsResponse", "ListPostTrainingJobsResponse",
"ListPromptsResponse", "ListPromptsResponse",
"ListProvidersResponse", "ListProvidersResponse",
"ListRegistriesResponse",
"ListRoutesResponse", "ListRoutesResponse",
"ListScoringFunctionsResponse", "ListScoringFunctionsResponse",
"ListShieldsResponse", "ListShieldsResponse",
"ListToolDefsResponse", "ListToolDefsResponse",
"ListToolGroupsResponse", "ListToolGroupsResponse",
"ListToolsResponse",
"LogProbConfig", "LogProbConfig",
"LoraFinetuningConfig", "LoraFinetuningConfig",
"MCPListToolsTool", "MCPListToolsTool",
@ -753,6 +779,10 @@ __all__ = [
"RRFRanker", "RRFRanker",
"Ranker", "Ranker",
"RegexParserScoringFnParams", "RegexParserScoringFnParams",
"Registry",
"RegistryNotFoundError",
"RegistryType",
"RegistryInput",
"RemoteProviderConfig", "RemoteProviderConfig",
"RemoteProviderSpec", "RemoteProviderSpec",
"RerankData", "RerankData",

View file

@ -80,6 +80,28 @@ class TokenValidationError(ValueError):
super().__init__(message) super().__init__(message)
class ConnectorNotFoundError(ResourceNotFoundError):
"""raised when Llama Stack cannot find a referenced connector"""
def __init__(self, connector_id: str) -> None:
super().__init__(connector_id, "Connector", "client.connectors.list()")
class ConnectorToolNotFoundError(ValueError):
"""raised when Llama Stack cannot find a referenced tool in a connector"""
def __init__(self, connector_id: str, tool_name: str) -> None:
message = f"Tool '{tool_name}' not found in connector '{connector_id}'. Use 'client.connectors.list_tools(\"{connector_id}\")' to list available tools."
super().__init__(message)
class RegistryNotFoundError(ResourceNotFoundError):
"""raised when Llama Stack cannot find a referenced registry"""
def __init__(self, registry_id: str) -> None:
super().__init__(registry_id, "Registry", "client.connectors.list_registries()")
class ConversationNotFoundError(ResourceNotFoundError): class ConversationNotFoundError(ResourceNotFoundError):
"""raised when Llama Stack cannot find a referenced conversation""" """raised when Llama Stack cannot find a referenced conversation"""

View file

@ -0,0 +1,189 @@
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the terms described in the LICENSE file in
# the root directory of this source tree.
from datetime import datetime
from enum import StrEnum
from typing import Any, Literal, Protocol
from pydantic import BaseModel, Field
from typing_extensions import runtime_checkable
from llama_stack_api.registries import ListRegistriesResponse, Registry
from llama_stack_api.resource import Resource, ResourceType
from llama_stack_api.schema_utils import json_schema_type, webmethod
from llama_stack_api.tools import ToolDef
from llama_stack_api.version import LLAMA_STACK_API_V1ALPHA
@json_schema_type
class ConnectorType(StrEnum):
"""Type of connector."""
MCP = "mcp"
@json_schema_type
class Connector(Resource):
"""A connector resource representing a connector registered in Llama Stack.
:param type: Type of resource, always 'connector' for connectors
:param connector_type: Type of connector (e.g., MCP)
:param connector_id: User-specified identifier for the connector
:param url: URL of the connector
:param created_at: Timestamp of creation
:param updated_at: Timestamp of last update
:param server_label: (Optional) Label of the server
:param server_description: (Optional) Description of the server
:param tools: (Optional) List of tools available from the connector
:param registry_id: (Optional) ID of the registry this connector belongs to
"""
model_config = {"populate_by_name": True}
type: Literal[ResourceType.connector] = ResourceType.connector
connector_type: ConnectorType = Field(default=ConnectorType.MCP)
user_connector_id: str | None = Field(
default=None, alias="connector_id", description="User-specified identifier for the connector"
)
url: str = Field(..., description="URL of the connector")
created_at: datetime = Field(..., description="Timestamp of creation")
updated_at: datetime = Field(..., description="Timestamp of last update")
server_name: str | None = Field(default=None, description="Name of the server")
server_label: str | None = Field(default=None, description="Label of the server")
server_description: str | None = Field(default=None, description="Description of the server")
# TODO: using ToolDef for now, but MCPListToolsTool should probably be updated and used instead
# once toolgroups are removed completely
tools: list[ToolDef] | None = Field(default=None, description="List of tools available from the connector")
registry_id: str | None = Field(default=None, description="ID of the registry this connector belongs to")
def _generate_connector_id(self) -> str:
name = self.server_name if self.server_name is not None else self.identifier
if self.registry_id is not None:
return f"{self.connector_type.value}::{self.registry_id}::{name}"
return f"{self.connector_type.value}::{name}"
@property
def connector_id(self) -> str:
return self.user_connector_id if self.user_connector_id is not None else self._generate_connector_id()
@property
def without_tools(self) -> "Connector":
"""Return a copy of this connector with tools removed."""
return self.model_copy(update={"tools": None})
@json_schema_type
class ConnectorInput(BaseModel):
"""Input for creating a connector.
:param connector_type: Type of connector
:param connector_id: Unique identifier for the connector
:param url: URL of the connector
:param headers: (Optional) HTTP headers to include when connecting to the server
:param authorization: (Optional) OAuth access token for authenticating with the MCP server
"""
connector_type: ConnectorType = Field(default=ConnectorType.MCP)
connector_id: str | None = Field(default=None, description="Unique identifier for the connector")
url: str = Field(..., description="URL of the connector")
headers: dict[str, Any] | None = Field(default=None, description="HTTP headers to include when connecting")
authorization: str | None = Field(default=None, description="OAuth access token for authentication")
@json_schema_type
class ListConnectorsResponse(BaseModel):
"""Response containing a list of connectors.
:param data: List of connectors
"""
data: list[Connector]
@json_schema_type
class ListToolsResponse(BaseModel):
"""Response containing a list of tools.
:param data: List of tools
"""
data: list[ToolDef]
@runtime_checkable
class Connectors(Protocol):
# NOTE: Route order matters! More specific routes must come before less specific ones.
# Routes with {param:path} are greedy and will match everything including slashes.
@webmethod(route="/connectors", method="GET", level=LLAMA_STACK_API_V1ALPHA)
async def list_connectors(
self,
registry_id: str | None = None,
include_tools: bool = False,
) -> ListConnectorsResponse:
"""List all configured connectors.
:param registry_id: (Optional) The ID of a registry to filter connectors for.
:param include_tools: (Optional) Whether to include tools in the response.
:returns: A ListConnectorsResponse.
"""
...
@webmethod(route="/connectors/registries", method="GET", level=LLAMA_STACK_API_V1ALPHA)
async def list_registries(self) -> ListRegistriesResponse:
"""List all registries.
:returns: A ListRegistriesResponse.
"""
...
@webmethod(route="/connectors/registries/{registry_id}", method="GET", level=LLAMA_STACK_API_V1ALPHA)
async def get_registry(self, registry_id: str) -> Registry:
"""Get a registry by its ID.
:param registry_id: The ID of the registry to get.
:returns: A Registry.
"""
...
@webmethod(route="/connectors/{connector_id}/tools/{tool_name}", method="GET", level=LLAMA_STACK_API_V1ALPHA)
async def get_connector_tool(
self,
connector_id: str,
tool_name: str,
) -> ToolDef:
"""Get a tool definition by its name from a connector.
:param connector_id: The ID of the connector to get the tool from.
:param tool_name: The name of the tool to get.
:returns: A ToolDef.
"""
...
@webmethod(route="/connectors/{connector_id}/tools", method="GET", level=LLAMA_STACK_API_V1ALPHA)
async def list_connector_tools(
self,
connector_id: str,
) -> ListToolsResponse:
"""List tools available from a connector.
:param connector_id: The ID of the connector to list tools for.
:returns: A ListToolsResponse.
"""
...
@webmethod(route="/connectors/{connector_id}", method="GET", level=LLAMA_STACK_API_V1ALPHA)
async def get_connector(
self,
connector_id: str,
include_tools: bool = False,
) -> Connector:
"""Get a connector by its ID.
:param connector_id: The ID of the connector to get.
:returns: A Connector.
"""
...

View file

@ -111,6 +111,7 @@ class Api(Enum, metaclass=DynamicApiMeta):
:cvar tool_groups: Tool group organization :cvar tool_groups: Tool group organization
:cvar files: File storage and management :cvar files: File storage and management
:cvar prompts: Prompt versions and management :cvar prompts: Prompt versions and management
:cvar connectors: External connector management (e.g., MCP servers)
:cvar inspect: Built-in system inspection and introspection :cvar inspect: Built-in system inspection and introspection
""" """
@ -136,6 +137,7 @@ class Api(Enum, metaclass=DynamicApiMeta):
files = "files" files = "files"
prompts = "prompts" prompts = "prompts"
conversations = "conversations" conversations = "conversations"
connectors = "connectors"
# built-in API # built-in API
inspect = "inspect" inspect = "inspect"

View file

@ -5,7 +5,7 @@
# the root directory of this source tree. # the root directory of this source tree.
from collections.abc import Sequence from collections.abc import Sequence
from typing import Annotated, Any, Literal from typing import Annotated, Any, Literal, Self
from pydantic import BaseModel, Field, model_validator from pydantic import BaseModel, Field, model_validator
from typing_extensions import TypedDict from typing_extensions import TypedDict
@ -488,7 +488,8 @@ class OpenAIResponseInputToolMCP(BaseModel):
:param type: Tool type identifier, always "mcp" :param type: Tool type identifier, always "mcp"
:param server_label: Label to identify this MCP server :param server_label: Label to identify this MCP server
:param server_url: URL endpoint of the MCP server :param server_url: (Optional) URL endpoint of the MCP server
:param connector_id: (Optional) ID of the connector to use for this MCP server
:param headers: (Optional) HTTP headers to include when connecting to the server :param headers: (Optional) HTTP headers to include when connecting to the server
:param authorization: (Optional) OAuth access token for authenticating with the MCP server :param authorization: (Optional) OAuth access token for authenticating with the MCP server
:param require_approval: Approval requirement for tool calls ("always", "never", or filter) :param require_approval: Approval requirement for tool calls ("always", "never", or filter)
@ -497,13 +498,20 @@ class OpenAIResponseInputToolMCP(BaseModel):
type: Literal["mcp"] = "mcp" type: Literal["mcp"] = "mcp"
server_label: str server_label: str
server_url: str server_url: str | None = None
connector_id: str | None = None
headers: dict[str, Any] | None = None headers: dict[str, Any] | None = None
authorization: str | None = Field(default=None, exclude=True) authorization: str | None = Field(default=None, exclude=True)
require_approval: Literal["always"] | Literal["never"] | ApprovalFilter = "never" require_approval: Literal["always"] | Literal["never"] | ApprovalFilter = "never"
allowed_tools: list[str] | AllowedToolsFilter | None = None allowed_tools: list[str] | AllowedToolsFilter | None = None
@model_validator(mode="after")
def validate_server_or_connector(self) -> Self:
if not self.server_url and not self.connector_id:
raise ValueError("Either 'server_url' or 'connector_id' must be provided for MCP tool")
return self
OpenAIResponseInputTool = Annotated[ OpenAIResponseInputTool = Annotated[
OpenAIResponseInputToolWebSearch OpenAIResponseInputToolWebSearch

View file

@ -0,0 +1,68 @@
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the terms described in the LICENSE file in
# the root directory of this source tree.
from datetime import datetime
from enum import StrEnum
from typing import Literal
from pydantic import BaseModel, Field
from llama_stack_api.resource import Resource, ResourceType
from llama_stack_api.schema_utils import json_schema_type
@json_schema_type
class RegistryType(StrEnum):
"""Type of registry."""
MCP = "mcp"
@json_schema_type
class Registry(Resource):
"""A registry resource representing a registry of connectors.
:param type: Type of resource, always 'registry' for registries
:param identifier: Unique identifier for this resource in llama stack
:param provider_resource_id: Unique identifier for this resource in the provider
:param provider_id: ID of the provider that owns this resource
:param type: Type of resource (e.g. 'model', 'shield', 'vector_store', etc.)
"""
type: Literal[ResourceType.registry] = ResourceType.registry
registry_type: RegistryType = Field(default=RegistryType.MCP)
user_registry_id: str | None = Field(default=None, description="User-specified identifier for the registry")
url: str = Field(..., description="URL of the registry")
created_at: datetime = Field(..., description="Timestamp of creation")
updated_at: datetime = Field(..., description="Timestamp of last update")
@property
def registry_id(self) -> str:
return self.user_registry_id if self.user_registry_id is not None else self.identifier
@json_schema_type
class ListRegistriesResponse(BaseModel):
"""Response containing a list of registries.
:param data: List of registries
"""
data: list[Registry]
@json_schema_type
class RegistryInput(BaseModel):
"""Input for creating a registry.
:param url: URL of the registry
:param user_registry_id: User-specified identifier for the registry
"""
url: str
user_registry_id: str | None = Field(default=None, description="User-specified identifier for the registry")
registry_type: RegistryType = Field(default=RegistryType.MCP)

View file

@ -20,6 +20,8 @@ class ResourceType(StrEnum):
tool = "tool" tool = "tool"
tool_group = "tool_group" tool_group = "tool_group"
prompt = "prompt" prompt = "prompt"
connector = "connector"
registry = "registry"
class Resource(BaseModel): class Resource(BaseModel):