// MCPProfilesService + MCPCatalogService -- the IA-parity public CRUD
// surface for fraser's MCP feature set.
//
// Two services live in the same package because they share the MCP
// resource family:
//   - MCPProfilesService manages MCP server registrations scoped to
//     (user_id, customer_id, project_id) in mcp_profiles. A profile is
//     what an end user adds when they want their data plane to call out
//     to a remote MCP server they own, with API-key or OAuth credentials
//     attached.
//   - MCPCatalogService manages the platform-curated "official" MCP
//     server catalog (mcp_catalog_servers table). Operators publish a
//     server here; end users see it in the dashboard and CLI when they
//     pick what to add.
//
// Data access is delegated to the existing Drizzle-owned tables
// (`mcp_profiles`, `mcp_catalog_servers`); handlers in svc/internal/mcpsvc
// are a thin REST/CLI facade over those rows -- no parallel schema
// lives here.
//
// Profiles are scoped per (user_id, customer_id, project_id). A profile
// owned by user A in (customer X, project P) is invisible to user A in
// (customer X, project Q) and to any other user. The CLI surface uses
// --user-id together with --customer-id and --project-id to identify the
// owning scope, matching how aikeys.v1 surfaces per-customer/per-project
// scoping today.
//
// The data-plane lookup path (tars.lookup.v1.GetMCPProfileByURL) is
// the read surface ext_authz uses with aggressive caching; this service
// is the slower CRUD path for customer/operator use.

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.36.10
// 	protoc        (unknown)
// source: tars/mcp/v1/mcp.proto

package mcpv1

import (
	_ "github.com/tetrateio/agentrouter-go/genapi/api/tars/auth/v1"
	_ "github.com/tetrateio/agentrouter-go/genapi/api/tars/cli/v1"
	v1 "github.com/tetrateio/agentrouter-go/genapi/api/tars/common/v1"
	_ "github.com/tetrateio/agentrouter-go/genapi/api/tars/docs/v1"
	_ "google.golang.org/genproto/googleapis/api/annotations"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	emptypb "google.golang.org/protobuf/types/known/emptypb"
	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
	reflect "reflect"
	sync "sync"
	unsafe "unsafe"
)

const (
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)

// MCPProfile is a user-registered MCP server: a remote URL the data
// plane proxies for the owner, optionally guarded by an API key or an
// OAuth resource policy.
type MCPProfile struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Server-assigned uuid row id. Output-only.
	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	// Owning user id (authn.user.id). Defaults to the caller's session
	// user when empty; immutable once set.
	UserId string `protobuf:"bytes,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
	// Owning customer scope. Defaults to the caller's session customer
	// when empty; immutable once set. A profile is only visible to
	// (user_id, customer_id, project_id) tuples that match.
	CustomerId string `protobuf:"bytes,10,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
	// Owning project scope. Defaults to the caller's session project when
	// empty; immutable once set.
	ProjectId string `protobuf:"bytes,11,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
	// Human-friendly display name. Unique per user.
	Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
	// Optional freeform description.
	Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"`
	// URL path the data plane exposes for this profile, e.g.
	// "/mcp/<user-hash>-<profile-hash>". Server-assigned on create.
	Url string `protobuf:"bytes,5,opt,name=url,proto3" json:"url,omitempty"`
	// Lifecycle status: "active" | "pending" | "error".
	Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"`
	// Last error from the reconciler when status is "error".
	ErrorMessage string `protobuf:"bytes,7,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"`
	// Security policy type: "oauth" | "api_key" | "none".
	SecurityPolicyType string `protobuf:"bytes,8,opt,name=security_policy_type,json=securityPolicyType,proto3" json:"security_policy_type,omitempty"`
	// JSON-encoded security policy value. Shape depends on
	// security_policy_type -- see schema docs on the mcp_profiles table.
	// Sensitive material (raw api keys, oauth issuer secrets) is stored
	// server-side; responses redact secret bytes.
	SecurityPolicyValue string `protobuf:"bytes,9,opt,name=security_policy_value,json=securityPolicyValue,proto3" json:"security_policy_value,omitempty"`
	// Row creation time. Output-only.
	CreatedAt *timestamppb.Timestamp `protobuf:"bytes,50,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"`
	// Last mutation time. Output-only.
	UpdatedAt     *timestamppb.Timestamp `protobuf:"bytes,51,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *MCPProfile) Reset() {
	*x = MCPProfile{}
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[0]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *MCPProfile) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*MCPProfile) ProtoMessage() {}

func (x *MCPProfile) ProtoReflect() protoreflect.Message {
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[0]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use MCPProfile.ProtoReflect.Descriptor instead.
func (*MCPProfile) Descriptor() ([]byte, []int) {
	return file_tars_mcp_v1_mcp_proto_rawDescGZIP(), []int{0}
}

func (x *MCPProfile) GetId() string {
	if x != nil {
		return x.Id
	}
	return ""
}

func (x *MCPProfile) GetUserId() string {
	if x != nil {
		return x.UserId
	}
	return ""
}

func (x *MCPProfile) GetCustomerId() string {
	if x != nil {
		return x.CustomerId
	}
	return ""
}

func (x *MCPProfile) GetProjectId() string {
	if x != nil {
		return x.ProjectId
	}
	return ""
}

func (x *MCPProfile) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *MCPProfile) GetDescription() string {
	if x != nil {
		return x.Description
	}
	return ""
}

func (x *MCPProfile) GetUrl() string {
	if x != nil {
		return x.Url
	}
	return ""
}

func (x *MCPProfile) GetStatus() string {
	if x != nil {
		return x.Status
	}
	return ""
}

func (x *MCPProfile) GetErrorMessage() string {
	if x != nil {
		return x.ErrorMessage
	}
	return ""
}

func (x *MCPProfile) GetSecurityPolicyType() string {
	if x != nil {
		return x.SecurityPolicyType
	}
	return ""
}

func (x *MCPProfile) GetSecurityPolicyValue() string {
	if x != nil {
		return x.SecurityPolicyValue
	}
	return ""
}

func (x *MCPProfile) GetCreatedAt() *timestamppb.Timestamp {
	if x != nil {
		return x.CreatedAt
	}
	return nil
}

func (x *MCPProfile) GetUpdatedAt() *timestamppb.Timestamp {
	if x != nil {
		return x.UpdatedAt
	}
	return nil
}

// MCPCatalogServer is a platform-curated MCP server registration.
// Mirrors the mcp_catalog_servers row 1:1.
type MCPCatalogServer struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Stable string id (e.g. "github", "jira"). Required on upsert.
	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	// Display name shown in the dashboard catalog.
	Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
	// Description text shown in the dashboard catalog.
	Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
	// Customer-facing MCP server URL.
	Url string `protobuf:"bytes,4,opt,name=url,proto3" json:"url,omitempty"`
	// Optional icon URL displayed in the dashboard catalog.
	IconUrl string `protobuf:"bytes,6,opt,name=icon_url,json=iconUrl,proto3" json:"icon_url,omitempty"`
	// Category tags ("git", "issue-tracker", ...). Empty list permitted.
	Categories []string `protobuf:"bytes,7,rep,name=categories,proto3" json:"categories,omitempty"`
	// Optional free-form note shown alongside the catalog entry.
	Note string `protobuf:"bytes,8,opt,name=note,proto3" json:"note,omitempty"`
	// Authentication kind label ("oauth", "api_key", "none"). Free-form
	// string -- the catalog renderer interprets it.
	Authentication string `protobuf:"bytes,9,opt,name=authentication,proto3" json:"authentication,omitempty"`
	// True when this catalog entry requires a credential from the user
	// (used by the dashboard "Add" flow to pre-populate credential UI).
	RequiresAuth bool `protobuf:"varint,10,opt,name=requires_auth,json=requiresAuth,proto3" json:"requires_auth,omitempty"`
	// True when the user must register a profile before using this
	// catalog entry (rather than just adding a backend selector).
	RequiresProfile bool `protobuf:"varint,11,opt,name=requires_profile,json=requiresProfile,proto3" json:"requires_profile,omitempty"`
	// Operator-controlled visibility toggle. Disabled servers stay in
	// the table but are hidden from the customer-facing list.
	IsEnabled bool `protobuf:"varint,12,opt,name=is_enabled,json=isEnabled,proto3" json:"is_enabled,omitempty"`
	// Row creation time. Output-only.
	CreatedAt *timestamppb.Timestamp `protobuf:"bytes,50,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"`
	// Last mutation time. Output-only.
	UpdatedAt     *timestamppb.Timestamp `protobuf:"bytes,51,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *MCPCatalogServer) Reset() {
	*x = MCPCatalogServer{}
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[1]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *MCPCatalogServer) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*MCPCatalogServer) ProtoMessage() {}

func (x *MCPCatalogServer) ProtoReflect() protoreflect.Message {
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[1]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use MCPCatalogServer.ProtoReflect.Descriptor instead.
func (*MCPCatalogServer) Descriptor() ([]byte, []int) {
	return file_tars_mcp_v1_mcp_proto_rawDescGZIP(), []int{1}
}

func (x *MCPCatalogServer) GetId() string {
	if x != nil {
		return x.Id
	}
	return ""
}

func (x *MCPCatalogServer) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *MCPCatalogServer) GetDescription() string {
	if x != nil {
		return x.Description
	}
	return ""
}

func (x *MCPCatalogServer) GetUrl() string {
	if x != nil {
		return x.Url
	}
	return ""
}

func (x *MCPCatalogServer) GetIconUrl() string {
	if x != nil {
		return x.IconUrl
	}
	return ""
}

func (x *MCPCatalogServer) GetCategories() []string {
	if x != nil {
		return x.Categories
	}
	return nil
}

func (x *MCPCatalogServer) GetNote() string {
	if x != nil {
		return x.Note
	}
	return ""
}

func (x *MCPCatalogServer) GetAuthentication() string {
	if x != nil {
		return x.Authentication
	}
	return ""
}

func (x *MCPCatalogServer) GetRequiresAuth() bool {
	if x != nil {
		return x.RequiresAuth
	}
	return false
}

func (x *MCPCatalogServer) GetRequiresProfile() bool {
	if x != nil {
		return x.RequiresProfile
	}
	return false
}

func (x *MCPCatalogServer) GetIsEnabled() bool {
	if x != nil {
		return x.IsEnabled
	}
	return false
}

func (x *MCPCatalogServer) GetCreatedAt() *timestamppb.Timestamp {
	if x != nil {
		return x.CreatedAt
	}
	return nil
}

func (x *MCPCatalogServer) GetUpdatedAt() *timestamppb.Timestamp {
	if x != nil {
		return x.UpdatedAt
	}
	return nil
}

type CreateMCPProfileRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Defaults to the caller's session user when empty.
	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
	// Required: human-friendly profile name.
	Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
	// Optional description.
	Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
	// Required: security policy type ("oauth" | "api_key" | "none").
	SecurityPolicyType string `protobuf:"bytes,4,opt,name=security_policy_type,json=securityPolicyType,proto3" json:"security_policy_type,omitempty"`
	// Optional: JSON-encoded security policy value. Empty for "none".
	SecurityPolicyValue string `protobuf:"bytes,5,opt,name=security_policy_value,json=securityPolicyValue,proto3" json:"security_policy_value,omitempty"`
	// Defaults to the caller's session customer when empty.
	CustomerId string `protobuf:"bytes,6,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
	// Defaults to the caller's session project when empty.
	ProjectId     string `protobuf:"bytes,7,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *CreateMCPProfileRequest) Reset() {
	*x = CreateMCPProfileRequest{}
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[2]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *CreateMCPProfileRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*CreateMCPProfileRequest) ProtoMessage() {}

func (x *CreateMCPProfileRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[2]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use CreateMCPProfileRequest.ProtoReflect.Descriptor instead.
func (*CreateMCPProfileRequest) Descriptor() ([]byte, []int) {
	return file_tars_mcp_v1_mcp_proto_rawDescGZIP(), []int{2}
}

func (x *CreateMCPProfileRequest) GetUserId() string {
	if x != nil {
		return x.UserId
	}
	return ""
}

func (x *CreateMCPProfileRequest) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *CreateMCPProfileRequest) GetDescription() string {
	if x != nil {
		return x.Description
	}
	return ""
}

func (x *CreateMCPProfileRequest) GetSecurityPolicyType() string {
	if x != nil {
		return x.SecurityPolicyType
	}
	return ""
}

func (x *CreateMCPProfileRequest) GetSecurityPolicyValue() string {
	if x != nil {
		return x.SecurityPolicyValue
	}
	return ""
}

func (x *CreateMCPProfileRequest) GetCustomerId() string {
	if x != nil {
		return x.CustomerId
	}
	return ""
}

func (x *CreateMCPProfileRequest) GetProjectId() string {
	if x != nil {
		return x.ProjectId
	}
	return ""
}

type GetMCPProfileRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Defaults to the caller's session user when empty.
	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
	// Required: uuid of the profile to fetch (MCPProfile.id).
	ProfileId string `protobuf:"bytes,2,opt,name=profile_id,json=profileId,proto3" json:"profile_id,omitempty"`
	// Defaults to the caller's session customer when empty.
	CustomerId string `protobuf:"bytes,3,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
	// Defaults to the caller's session project when empty.
	ProjectId     string `protobuf:"bytes,4,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *GetMCPProfileRequest) Reset() {
	*x = GetMCPProfileRequest{}
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[3]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *GetMCPProfileRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetMCPProfileRequest) ProtoMessage() {}

func (x *GetMCPProfileRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[3]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GetMCPProfileRequest.ProtoReflect.Descriptor instead.
func (*GetMCPProfileRequest) Descriptor() ([]byte, []int) {
	return file_tars_mcp_v1_mcp_proto_rawDescGZIP(), []int{3}
}

func (x *GetMCPProfileRequest) GetUserId() string {
	if x != nil {
		return x.UserId
	}
	return ""
}

func (x *GetMCPProfileRequest) GetProfileId() string {
	if x != nil {
		return x.ProfileId
	}
	return ""
}

func (x *GetMCPProfileRequest) GetCustomerId() string {
	if x != nil {
		return x.CustomerId
	}
	return ""
}

func (x *GetMCPProfileRequest) GetProjectId() string {
	if x != nil {
		return x.ProjectId
	}
	return ""
}

type ListMCPProfilesRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Defaults to the caller's session user when empty.
	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
	// Cursor-pagination inputs (page size + continuation token).
	Page *v1.PageRequest `protobuf:"bytes,2,opt,name=page,proto3" json:"page,omitempty"`
	// Defaults to the caller's session customer when empty.
	CustomerId string `protobuf:"bytes,3,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
	// Defaults to the caller's session project when empty.
	ProjectId     string `protobuf:"bytes,4,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListMCPProfilesRequest) Reset() {
	*x = ListMCPProfilesRequest{}
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[4]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListMCPProfilesRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListMCPProfilesRequest) ProtoMessage() {}

func (x *ListMCPProfilesRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[4]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListMCPProfilesRequest.ProtoReflect.Descriptor instead.
func (*ListMCPProfilesRequest) Descriptor() ([]byte, []int) {
	return file_tars_mcp_v1_mcp_proto_rawDescGZIP(), []int{4}
}

func (x *ListMCPProfilesRequest) GetUserId() string {
	if x != nil {
		return x.UserId
	}
	return ""
}

func (x *ListMCPProfilesRequest) GetPage() *v1.PageRequest {
	if x != nil {
		return x.Page
	}
	return nil
}

func (x *ListMCPProfilesRequest) GetCustomerId() string {
	if x != nil {
		return x.CustomerId
	}
	return ""
}

func (x *ListMCPProfilesRequest) GetProjectId() string {
	if x != nil {
		return x.ProjectId
	}
	return ""
}

type ListMCPProfilesResponse struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Profiles owned by the requested scope, one page's worth.
	Profiles []*MCPProfile `protobuf:"bytes,1,rep,name=profiles,proto3" json:"profiles,omitempty"`
	// Cursor-pagination outputs (next-page token).
	Page          *v1.PageResponse `protobuf:"bytes,2,opt,name=page,proto3" json:"page,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListMCPProfilesResponse) Reset() {
	*x = ListMCPProfilesResponse{}
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[5]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListMCPProfilesResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListMCPProfilesResponse) ProtoMessage() {}

func (x *ListMCPProfilesResponse) ProtoReflect() protoreflect.Message {
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[5]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListMCPProfilesResponse.ProtoReflect.Descriptor instead.
func (*ListMCPProfilesResponse) Descriptor() ([]byte, []int) {
	return file_tars_mcp_v1_mcp_proto_rawDescGZIP(), []int{5}
}

func (x *ListMCPProfilesResponse) GetProfiles() []*MCPProfile {
	if x != nil {
		return x.Profiles
	}
	return nil
}

func (x *ListMCPProfilesResponse) GetPage() *v1.PageResponse {
	if x != nil {
		return x.Page
	}
	return nil
}

type UpdateMCPProfileRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Defaults to the caller's session user when empty.
	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
	// Required: uuid of the profile to update (MCPProfile.id).
	ProfileId string `protobuf:"bytes,2,opt,name=profile_id,json=profileId,proto3" json:"profile_id,omitempty"`
	// Mutable scalar fields. Empty string leaves the existing value
	// untouched -- callers explicitly pass " " when they want to clear
	// a free-form description (the server trims that to "").
	Name                string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
	Description         string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"`
	SecurityPolicyType  string `protobuf:"bytes,5,opt,name=security_policy_type,json=securityPolicyType,proto3" json:"security_policy_type,omitempty"`
	SecurityPolicyValue string `protobuf:"bytes,6,opt,name=security_policy_value,json=securityPolicyValue,proto3" json:"security_policy_value,omitempty"`
	// Defaults to the caller's session customer when empty.
	CustomerId string `protobuf:"bytes,7,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
	// Defaults to the caller's session project when empty.
	ProjectId     string `protobuf:"bytes,8,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *UpdateMCPProfileRequest) Reset() {
	*x = UpdateMCPProfileRequest{}
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[6]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *UpdateMCPProfileRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*UpdateMCPProfileRequest) ProtoMessage() {}

func (x *UpdateMCPProfileRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[6]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use UpdateMCPProfileRequest.ProtoReflect.Descriptor instead.
func (*UpdateMCPProfileRequest) Descriptor() ([]byte, []int) {
	return file_tars_mcp_v1_mcp_proto_rawDescGZIP(), []int{6}
}

func (x *UpdateMCPProfileRequest) GetUserId() string {
	if x != nil {
		return x.UserId
	}
	return ""
}

func (x *UpdateMCPProfileRequest) GetProfileId() string {
	if x != nil {
		return x.ProfileId
	}
	return ""
}

func (x *UpdateMCPProfileRequest) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *UpdateMCPProfileRequest) GetDescription() string {
	if x != nil {
		return x.Description
	}
	return ""
}

func (x *UpdateMCPProfileRequest) GetSecurityPolicyType() string {
	if x != nil {
		return x.SecurityPolicyType
	}
	return ""
}

func (x *UpdateMCPProfileRequest) GetSecurityPolicyValue() string {
	if x != nil {
		return x.SecurityPolicyValue
	}
	return ""
}

func (x *UpdateMCPProfileRequest) GetCustomerId() string {
	if x != nil {
		return x.CustomerId
	}
	return ""
}

func (x *UpdateMCPProfileRequest) GetProjectId() string {
	if x != nil {
		return x.ProjectId
	}
	return ""
}

type DeleteMCPProfileRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Defaults to the caller's session user when empty.
	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
	// Required: uuid of the profile to soft-delete (MCPProfile.id).
	ProfileId string `protobuf:"bytes,2,opt,name=profile_id,json=profileId,proto3" json:"profile_id,omitempty"`
	// Defaults to the caller's session customer when empty.
	CustomerId string `protobuf:"bytes,3,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
	// Defaults to the caller's session project when empty.
	ProjectId     string `protobuf:"bytes,4,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *DeleteMCPProfileRequest) Reset() {
	*x = DeleteMCPProfileRequest{}
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[7]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *DeleteMCPProfileRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*DeleteMCPProfileRequest) ProtoMessage() {}

func (x *DeleteMCPProfileRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[7]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use DeleteMCPProfileRequest.ProtoReflect.Descriptor instead.
func (*DeleteMCPProfileRequest) Descriptor() ([]byte, []int) {
	return file_tars_mcp_v1_mcp_proto_rawDescGZIP(), []int{7}
}

func (x *DeleteMCPProfileRequest) GetUserId() string {
	if x != nil {
		return x.UserId
	}
	return ""
}

func (x *DeleteMCPProfileRequest) GetProfileId() string {
	if x != nil {
		return x.ProfileId
	}
	return ""
}

func (x *DeleteMCPProfileRequest) GetCustomerId() string {
	if x != nil {
		return x.CustomerId
	}
	return ""
}

func (x *DeleteMCPProfileRequest) GetProjectId() string {
	if x != nil {
		return x.ProjectId
	}
	return ""
}

type UpsertCatalogServerRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Required: stable catalog entry id (e.g. "github").
	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	// Required: display name.
	Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
	// Optional description.
	Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
	// Required: customer-facing URL. The flag is renamed to
	// --catalog-url to avoid colliding with the root command's
	// persistent --base-url override.
	Url string `protobuf:"bytes,4,opt,name=url,proto3" json:"url,omitempty"`
	// Optional icon URL.
	IconUrl string `protobuf:"bytes,6,opt,name=icon_url,json=iconUrl,proto3" json:"icon_url,omitempty"`
	// Optional category tags.
	Categories []string `protobuf:"bytes,7,rep,name=categories,proto3" json:"categories,omitempty"`
	// Optional free-form note.
	Note string `protobuf:"bytes,8,opt,name=note,proto3" json:"note,omitempty"`
	// Optional authentication kind label.
	Authentication string `protobuf:"bytes,9,opt,name=authentication,proto3" json:"authentication,omitempty"`
	// Whether this catalog entry requires a credential.
	RequiresAuth bool `protobuf:"varint,10,opt,name=requires_auth,json=requiresAuth,proto3" json:"requires_auth,omitempty"`
	// Whether the user must register a profile before using this entry.
	RequiresProfile bool `protobuf:"varint,11,opt,name=requires_profile,json=requiresProfile,proto3" json:"requires_profile,omitempty"`
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

func (x *UpsertCatalogServerRequest) Reset() {
	*x = UpsertCatalogServerRequest{}
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[8]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *UpsertCatalogServerRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*UpsertCatalogServerRequest) ProtoMessage() {}

func (x *UpsertCatalogServerRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[8]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use UpsertCatalogServerRequest.ProtoReflect.Descriptor instead.
func (*UpsertCatalogServerRequest) Descriptor() ([]byte, []int) {
	return file_tars_mcp_v1_mcp_proto_rawDescGZIP(), []int{8}
}

func (x *UpsertCatalogServerRequest) GetId() string {
	if x != nil {
		return x.Id
	}
	return ""
}

func (x *UpsertCatalogServerRequest) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *UpsertCatalogServerRequest) GetDescription() string {
	if x != nil {
		return x.Description
	}
	return ""
}

func (x *UpsertCatalogServerRequest) GetUrl() string {
	if x != nil {
		return x.Url
	}
	return ""
}

func (x *UpsertCatalogServerRequest) GetIconUrl() string {
	if x != nil {
		return x.IconUrl
	}
	return ""
}

func (x *UpsertCatalogServerRequest) GetCategories() []string {
	if x != nil {
		return x.Categories
	}
	return nil
}

func (x *UpsertCatalogServerRequest) GetNote() string {
	if x != nil {
		return x.Note
	}
	return ""
}

func (x *UpsertCatalogServerRequest) GetAuthentication() string {
	if x != nil {
		return x.Authentication
	}
	return ""
}

func (x *UpsertCatalogServerRequest) GetRequiresAuth() bool {
	if x != nil {
		return x.RequiresAuth
	}
	return false
}

func (x *UpsertCatalogServerRequest) GetRequiresProfile() bool {
	if x != nil {
		return x.RequiresProfile
	}
	return false
}

type GetCatalogServerRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Required: stable catalog entry id (e.g. "github").
	Id            string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *GetCatalogServerRequest) Reset() {
	*x = GetCatalogServerRequest{}
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[9]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *GetCatalogServerRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetCatalogServerRequest) ProtoMessage() {}

func (x *GetCatalogServerRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[9]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GetCatalogServerRequest.ProtoReflect.Descriptor instead.
func (*GetCatalogServerRequest) Descriptor() ([]byte, []int) {
	return file_tars_mcp_v1_mcp_proto_rawDescGZIP(), []int{9}
}

func (x *GetCatalogServerRequest) GetId() string {
	if x != nil {
		return x.Id
	}
	return ""
}

type ListCatalogServersRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// When true, include is_enabled=false entries. The dashboard sets
	// this false; the operator CLI defaults to true so disabled servers
	// are visible.
	IncludeDisabled bool `protobuf:"varint,1,opt,name=include_disabled,json=includeDisabled,proto3" json:"include_disabled,omitempty"`
	// Cursor-pagination inputs (page size + continuation token).
	Page          *v1.PageRequest `protobuf:"bytes,2,opt,name=page,proto3" json:"page,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListCatalogServersRequest) Reset() {
	*x = ListCatalogServersRequest{}
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[10]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListCatalogServersRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListCatalogServersRequest) ProtoMessage() {}

func (x *ListCatalogServersRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[10]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListCatalogServersRequest.ProtoReflect.Descriptor instead.
func (*ListCatalogServersRequest) Descriptor() ([]byte, []int) {
	return file_tars_mcp_v1_mcp_proto_rawDescGZIP(), []int{10}
}

func (x *ListCatalogServersRequest) GetIncludeDisabled() bool {
	if x != nil {
		return x.IncludeDisabled
	}
	return false
}

func (x *ListCatalogServersRequest) GetPage() *v1.PageRequest {
	if x != nil {
		return x.Page
	}
	return nil
}

type ListCatalogServersResponse struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Catalog entries for this page (disabled rows included per request).
	Servers []*MCPCatalogServer `protobuf:"bytes,1,rep,name=servers,proto3" json:"servers,omitempty"`
	// Cursor-pagination outputs (next-page token).
	Page          *v1.PageResponse `protobuf:"bytes,2,opt,name=page,proto3" json:"page,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListCatalogServersResponse) Reset() {
	*x = ListCatalogServersResponse{}
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[11]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListCatalogServersResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListCatalogServersResponse) ProtoMessage() {}

func (x *ListCatalogServersResponse) ProtoReflect() protoreflect.Message {
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[11]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListCatalogServersResponse.ProtoReflect.Descriptor instead.
func (*ListCatalogServersResponse) Descriptor() ([]byte, []int) {
	return file_tars_mcp_v1_mcp_proto_rawDescGZIP(), []int{11}
}

func (x *ListCatalogServersResponse) GetServers() []*MCPCatalogServer {
	if x != nil {
		return x.Servers
	}
	return nil
}

func (x *ListCatalogServersResponse) GetPage() *v1.PageResponse {
	if x != nil {
		return x.Page
	}
	return nil
}

type DeleteCatalogServerRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Required: stable id of the catalog entry to delete (e.g. "github").
	Id            string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *DeleteCatalogServerRequest) Reset() {
	*x = DeleteCatalogServerRequest{}
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[12]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *DeleteCatalogServerRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*DeleteCatalogServerRequest) ProtoMessage() {}

func (x *DeleteCatalogServerRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[12]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use DeleteCatalogServerRequest.ProtoReflect.Descriptor instead.
func (*DeleteCatalogServerRequest) Descriptor() ([]byte, []int) {
	return file_tars_mcp_v1_mcp_proto_rawDescGZIP(), []int{12}
}

func (x *DeleteCatalogServerRequest) GetId() string {
	if x != nil {
		return x.Id
	}
	return ""
}

type SetCatalogServerEnabledRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Stable catalog entry id, e.g. "github".
	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	// Target visibility. true -> entry is visible to the customer-facing
	// list; false -> hidden (row kept, is_enabled set to false).
	Enabled       bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *SetCatalogServerEnabledRequest) Reset() {
	*x = SetCatalogServerEnabledRequest{}
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[13]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *SetCatalogServerEnabledRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SetCatalogServerEnabledRequest) ProtoMessage() {}

func (x *SetCatalogServerEnabledRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_mcp_v1_mcp_proto_msgTypes[13]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use SetCatalogServerEnabledRequest.ProtoReflect.Descriptor instead.
func (*SetCatalogServerEnabledRequest) Descriptor() ([]byte, []int) {
	return file_tars_mcp_v1_mcp_proto_rawDescGZIP(), []int{13}
}

func (x *SetCatalogServerEnabledRequest) GetId() string {
	if x != nil {
		return x.Id
	}
	return ""
}

func (x *SetCatalogServerEnabledRequest) GetEnabled() bool {
	if x != nil {
		return x.Enabled
	}
	return false
}

var File_tars_mcp_v1_mcp_proto protoreflect.FileDescriptor

const file_tars_mcp_v1_mcp_proto_rawDesc = "" +
	"\n" +
	"\x15tars/mcp/v1/mcp.proto\x12\vtars.mcp.v1\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1ftars/auth/v1/auth_options.proto\x1a\x15tars/cli/v1/cli.proto\x1a\x1atars/common/v1/types.proto\x1a\x17tars/docs/v1/docs.proto\"\xfe\x03\n" +
	"\n" +
	"MCPProfile\x12\x13\n" +
	"\x02id\x18\x01 \x01(\tB\x03\xe0A\x03R\x02id\x12\x17\n" +
	"\auser_id\x18\x02 \x01(\tR\x06userId\x12\x1f\n" +
	"\vcustomer_id\x18\n" +
	" \x01(\tR\n" +
	"customerId\x12\x1d\n" +
	"\n" +
	"project_id\x18\v \x01(\tR\tprojectId\x12\x17\n" +
	"\x04name\x18\x03 \x01(\tB\x03\xe0A\x02R\x04name\x12 \n" +
	"\vdescription\x18\x04 \x01(\tR\vdescription\x12\x15\n" +
	"\x03url\x18\x05 \x01(\tB\x03\xe0A\x03R\x03url\x12\x1b\n" +
	"\x06status\x18\x06 \x01(\tB\x03\xe0A\x03R\x06status\x12(\n" +
	"\rerror_message\x18\a \x01(\tB\x03\xe0A\x03R\ferrorMessage\x125\n" +
	"\x14security_policy_type\x18\b \x01(\tB\x03\xe0A\x02R\x12securityPolicyType\x122\n" +
	"\x15security_policy_value\x18\t \x01(\tR\x13securityPolicyValue\x12>\n" +
	"\n" +
	"created_at\x182 \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x03R\tcreatedAt\x12>\n" +
	"\n" +
	"updated_at\x183 \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x03R\tupdatedAt\"\xef\x03\n" +
	"\x10MCPCatalogServer\x12\x13\n" +
	"\x02id\x18\x01 \x01(\tB\x03\xe0A\x02R\x02id\x12\x17\n" +
	"\x04name\x18\x02 \x01(\tB\x03\xe0A\x02R\x04name\x12 \n" +
	"\vdescription\x18\x03 \x01(\tR\vdescription\x12\x15\n" +
	"\x03url\x18\x04 \x01(\tB\x03\xe0A\x02R\x03url\x12\x19\n" +
	"\bicon_url\x18\x06 \x01(\tR\aiconUrl\x12\x1e\n" +
	"\n" +
	"categories\x18\a \x03(\tR\n" +
	"categories\x12\x12\n" +
	"\x04note\x18\b \x01(\tR\x04note\x12&\n" +
	"\x0eauthentication\x18\t \x01(\tR\x0eauthentication\x12#\n" +
	"\rrequires_auth\x18\n" +
	" \x01(\bR\frequiresAuth\x12)\n" +
	"\x10requires_profile\x18\v \x01(\bR\x0frequiresProfile\x12\x1d\n" +
	"\n" +
	"is_enabled\x18\f \x01(\bR\tisEnabled\x12>\n" +
	"\n" +
	"created_at\x182 \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x03R\tcreatedAt\x12>\n" +
	"\n" +
	"updated_at\x183 \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x03R\tupdatedAtJ\x04\b\x05\x10\x06R\btars_url\"\x98\x02\n" +
	"\x17CreateMCPProfileRequest\x12\x17\n" +
	"\auser_id\x18\x01 \x01(\tR\x06userId\x12\x17\n" +
	"\x04name\x18\x02 \x01(\tB\x03\xe0A\x02R\x04name\x12 \n" +
	"\vdescription\x18\x03 \x01(\tR\vdescription\x125\n" +
	"\x14security_policy_type\x18\x04 \x01(\tB\x03\xe0A\x02R\x12securityPolicyType\x122\n" +
	"\x15security_policy_value\x18\x05 \x01(\tR\x13securityPolicyValue\x12\x1f\n" +
	"\vcustomer_id\x18\x06 \x01(\tR\n" +
	"customerId\x12\x1d\n" +
	"\n" +
	"project_id\x18\a \x01(\tR\tprojectId\"\x93\x01\n" +
	"\x14GetMCPProfileRequest\x12\x17\n" +
	"\auser_id\x18\x01 \x01(\tR\x06userId\x12\"\n" +
	"\n" +
	"profile_id\x18\x02 \x01(\tB\x03\xe0A\x02R\tprofileId\x12\x1f\n" +
	"\vcustomer_id\x18\x03 \x01(\tR\n" +
	"customerId\x12\x1d\n" +
	"\n" +
	"project_id\x18\x04 \x01(\tR\tprojectId\"\xa2\x01\n" +
	"\x16ListMCPProfilesRequest\x12\x17\n" +
	"\auser_id\x18\x01 \x01(\tR\x06userId\x12/\n" +
	"\x04page\x18\x02 \x01(\v2\x1b.tars.common.v1.PageRequestR\x04page\x12\x1f\n" +
	"\vcustomer_id\x18\x03 \x01(\tR\n" +
	"customerId\x12\x1d\n" +
	"\n" +
	"project_id\x18\x04 \x01(\tR\tprojectId\"\x80\x01\n" +
	"\x17ListMCPProfilesResponse\x123\n" +
	"\bprofiles\x18\x01 \x03(\v2\x17.tars.mcp.v1.MCPProfileR\bprofiles\x120\n" +
	"\x04page\x18\x02 \x01(\v2\x1c.tars.common.v1.PageResponseR\x04page\"\xb2\x02\n" +
	"\x17UpdateMCPProfileRequest\x12\x17\n" +
	"\auser_id\x18\x01 \x01(\tR\x06userId\x12\"\n" +
	"\n" +
	"profile_id\x18\x02 \x01(\tB\x03\xe0A\x02R\tprofileId\x12\x12\n" +
	"\x04name\x18\x03 \x01(\tR\x04name\x12 \n" +
	"\vdescription\x18\x04 \x01(\tR\vdescription\x120\n" +
	"\x14security_policy_type\x18\x05 \x01(\tR\x12securityPolicyType\x122\n" +
	"\x15security_policy_value\x18\x06 \x01(\tR\x13securityPolicyValue\x12\x1f\n" +
	"\vcustomer_id\x18\a \x01(\tR\n" +
	"customerId\x12\x1d\n" +
	"\n" +
	"project_id\x18\b \x01(\tR\tprojectId\"\x96\x01\n" +
	"\x17DeleteMCPProfileRequest\x12\x17\n" +
	"\auser_id\x18\x01 \x01(\tR\x06userId\x12\"\n" +
	"\n" +
	"profile_id\x18\x02 \x01(\tB\x03\xe0A\x02R\tprofileId\x12\x1f\n" +
	"\vcustomer_id\x18\x03 \x01(\tR\n" +
	"customerId\x12\x1d\n" +
	"\n" +
	"project_id\x18\x04 \x01(\tR\tprojectId\"\xfb\x02\n" +
	"\x1aUpsertCatalogServerRequest\x12\x13\n" +
	"\x02id\x18\x01 \x01(\tB\x03\xe0A\x02R\x02id\x12\x17\n" +
	"\x04name\x18\x02 \x01(\tB\x03\xe0A\x02R\x04name\x12 \n" +
	"\vdescription\x18\x03 \x01(\tR\vdescription\x12&\n" +
	"\x03url\x18\x04 \x01(\tB\x14\xe0A\x02\x9a\xb5\x18\r\n" +
	"\vcatalog-urlR\x03url\x12\x19\n" +
	"\bicon_url\x18\x06 \x01(\tR\aiconUrl\x12\x1e\n" +
	"\n" +
	"categories\x18\a \x03(\tR\n" +
	"categories\x12\x12\n" +
	"\x04note\x18\b \x01(\tR\x04note\x12&\n" +
	"\x0eauthentication\x18\t \x01(\tR\x0eauthentication\x12#\n" +
	"\rrequires_auth\x18\n" +
	" \x01(\bR\frequiresAuth\x12)\n" +
	"\x10requires_profile\x18\v \x01(\bR\x0frequiresProfileJ\x04\b\x05\x10\x06J\x04\b\f\x10\rR\btars_urlR\bdisabled\".\n" +
	"\x17GetCatalogServerRequest\x12\x13\n" +
	"\x02id\x18\x01 \x01(\tB\x03\xe0A\x02R\x02id\"w\n" +
	"\x19ListCatalogServersRequest\x12)\n" +
	"\x10include_disabled\x18\x01 \x01(\bR\x0fincludeDisabled\x12/\n" +
	"\x04page\x18\x02 \x01(\v2\x1b.tars.common.v1.PageRequestR\x04page\"\x87\x01\n" +
	"\x1aListCatalogServersResponse\x127\n" +
	"\aservers\x18\x01 \x03(\v2\x1d.tars.mcp.v1.MCPCatalogServerR\aservers\x120\n" +
	"\x04page\x18\x02 \x01(\v2\x1c.tars.common.v1.PageResponseR\x04page\"1\n" +
	"\x1aDeleteCatalogServerRequest\x12\x13\n" +
	"\x02id\x18\x01 \x01(\tB\x03\xe0A\x02R\x02id\"T\n" +
	"\x1eSetCatalogServerEnabledRequest\x12\x13\n" +
	"\x02id\x18\x01 \x01(\tB\x03\xe0A\x02R\x02id\x12\x1d\n" +
	"\aenabled\x18\x02 \x01(\bB\x03\xe0A\x02R\aenabled2\x9c\n" +
	"\n" +
	"\x12MCPProfilesService\x12\xf9\x01\n" +
	"\x10CreateMCPProfile\x12$.tars.mcp.v1.CreateMCPProfileRequest\x1a\x17.tars.mcp.v1.MCPProfile\"\xa5\x01\x8a\xb5\x18\x04\n" +
	"\x02\x03\x01\x92\xb5\x18\x17:\x03mcp:\bprofiles:\x06create\xa2\xb5\x18\x15Create an MCP profile\xaa\xb5\x18\fMCP Profiles\x82\xd3\xe4\x93\x02S:\x01*\"N/v1/customers/{customer_id}/projects/{project_id}/users/{user_id}/mcp-profiles\x12\xfa\x01\n" +
	"\rGetMCPProfile\x12!.tars.mcp.v1.GetMCPProfileRequest\x1a\x17.tars.mcp.v1.MCPProfile\"\xac\x01\x8a\xb5\x18\x04\n" +
	"\x02\x03\x01\x92\xb5\x18\x14:\x03mcp:\bprofiles:\x03get\xa2\xb5\x18\x12Get an MCP profile\xaa\xb5\x18\fMCP Profiles\x82\xd3\xe4\x93\x02]\x12[/v1/customers/{customer_id}/projects/{project_id}/users/{user_id}/mcp-profiles/{profile_id}\x90\x02\x01\x12\xfe\x01\n" +
	"\x0fListMCPProfiles\x12#.tars.mcp.v1.ListMCPProfilesRequest\x1a$.tars.mcp.v1.ListMCPProfilesResponse\"\x9f\x01\x8a\xb5\x18\x04\n" +
	"\x02\x03\x01\x92\xb5\x18\x15:\x03mcp:\bprofiles:\x04list\xa2\xb5\x18\x11List MCP profiles\xaa\xb5\x18\fMCP Profiles\x82\xd3\xe4\x93\x02P\x12N/v1/customers/{customer_id}/projects/{project_id}/users/{user_id}/mcp-profiles\x90\x02\x01\x12\x86\x02\n" +
	"\x10UpdateMCPProfile\x12$.tars.mcp.v1.UpdateMCPProfileRequest\x1a\x17.tars.mcp.v1.MCPProfile\"\xb2\x01\x8a\xb5\x18\x04\n" +
	"\x02\x03\x01\x92\xb5\x18\x17:\x03mcp:\bprofiles:\x06update\xa2\xb5\x18\x15Update an MCP profile\xaa\xb5\x18\fMCP Profiles\x82\xd3\xe4\x93\x02`:\x01*2[/v1/customers/{customer_id}/projects/{project_id}/users/{user_id}/mcp-profiles/{profile_id}\x12\x82\x02\n" +
	"\x10DeleteMCPProfile\x12$.tars.mcp.v1.DeleteMCPProfileRequest\x1a\x16.google.protobuf.Empty\"\xaf\x01\x8a\xb5\x18\x04\n" +
	"\x02\x03\x01\x92\xb5\x18\x17:\x03mcp:\bprofiles:\x06delete\xa2\xb5\x18\x15Delete an MCP profile\xaa\xb5\x18\fMCP Profiles\x82\xd3\xe4\x93\x02]*[/v1/customers/{customer_id}/projects/{project_id}/users/{user_id}/mcp-profiles/{profile_id}2\x8c\t\n" +
	"\x11MCPCatalogService\x12\xe4\x01\n" +
	"\x13UpsertCatalogServer\x12'.tars.mcp.v1.UpsertCatalogServerRequest\x1a\x1d.tars.mcp.v1.MCPCatalogServer\"\x84\x01\x8a\xb5\x18\v\n" +
	"\x02\x03\x01\x12\x05admin\x92\xb5\x18\x16:\x03mcp:\acatalog:\x06upsert\xa2\xb5\x18&Create or update an MCP catalog server\xaa\xb5\x18\vMCP Catalog\x82\xd3\xe4\x93\x02\x1c:\x01*\"\x17/v1/mcp/catalog/servers\x12\xd6\x01\n" +
	"\x10GetCatalogServer\x12$.tars.mcp.v1.GetCatalogServerRequest\x1a\x1d.tars.mcp.v1.MCPCatalogServer\"}\x8a\xb5\x18\v\n" +
	"\x02\x03\x01\x12\x05admin\x92\xb5\x18\x17\x1a\x02id:\x03mcp:\acatalog:\x03get\xa2\xb5\x18\x19Get an MCP catalog server\xaa\xb5\x18\vMCP Catalog\x82\xd3\xe4\x93\x02\x1e\x12\x1c/v1/mcp/catalog/servers/{id}\x90\x02\x01\x12\xdb\x01\n" +
	"\x12ListCatalogServers\x12&.tars.mcp.v1.ListCatalogServersRequest\x1a'.tars.mcp.v1.ListCatalogServersResponse\"t\x8a\xb5\x18\v\n" +
	"\x02\x03\x01\x12\x05admin\x92\xb5\x18\x14:\x03mcp:\acatalog:\x04list\xa2\xb5\x18\x18List MCP catalog servers\xaa\xb5\x18\vMCP Catalog\x82\xd3\xe4\x93\x02\x19\x12\x17/v1/mcp/catalog/servers\x90\x02\x01\x12\xfc\x01\n" +
	"\x17SetCatalogServerEnabled\x12+.tars.mcp.v1.SetCatalogServerEnabledRequest\x1a\x1d.tars.mcp.v1.MCPCatalogServer\"\x94\x01\x8a\xb5\x18\v\n" +
	"\x02\x03\x01\x12\x05admin\x92\xb5\x18\x1b:\x03mcp:\acatalog:\vset-enabled\xa2\xb5\x18$Toggle MCP catalog server visibility\xaa\xb5\x18\vMCP Catalog\x82\xd3\xe4\x93\x02):\x01*\"$/v1/mcp/catalog/servers/{id}/enabled\x12\xd9\x01\n" +
	"\x13DeleteCatalogServer\x12'.tars.mcp.v1.DeleteCatalogServerRequest\x1a\x16.google.protobuf.Empty\"\x80\x01\x8a\xb5\x18\v\n" +
	"\x02\x03\x01\x12\x05admin\x92\xb5\x18\x1a\x1a\x02id:\x03mcp:\acatalog:\x06delete\xa2\xb5\x18\x1cDelete an MCP catalog server\xaa\xb5\x18\vMCP Catalog\x82\xd3\xe4\x93\x02\x1e*\x1c/v1/mcp/catalog/servers/{id}B\x9c\x01\n" +
	"\x0fcom.tars.mcp.v1B\bMcpProtoP\x01Z1github.com/tetrateio/fraser/api/tars/mcp/v1;mcpv1\xa2\x02\x03TMX\xaa\x02\vTars.Mcp.V1\xca\x02\vTars\\Mcp\\V1\xe2\x02\x17Tars\\Mcp\\V1\\GPBMetadata\xea\x02\rTars::Mcp::V1b\x06proto3"

var (
	file_tars_mcp_v1_mcp_proto_rawDescOnce sync.Once
	file_tars_mcp_v1_mcp_proto_rawDescData []byte
)

func file_tars_mcp_v1_mcp_proto_rawDescGZIP() []byte {
	file_tars_mcp_v1_mcp_proto_rawDescOnce.Do(func() {
		file_tars_mcp_v1_mcp_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_tars_mcp_v1_mcp_proto_rawDesc), len(file_tars_mcp_v1_mcp_proto_rawDesc)))
	})
	return file_tars_mcp_v1_mcp_proto_rawDescData
}

var file_tars_mcp_v1_mcp_proto_msgTypes = make([]protoimpl.MessageInfo, 14)
var file_tars_mcp_v1_mcp_proto_goTypes = []any{
	(*MCPProfile)(nil),                     // 0: tars.mcp.v1.MCPProfile
	(*MCPCatalogServer)(nil),               // 1: tars.mcp.v1.MCPCatalogServer
	(*CreateMCPProfileRequest)(nil),        // 2: tars.mcp.v1.CreateMCPProfileRequest
	(*GetMCPProfileRequest)(nil),           // 3: tars.mcp.v1.GetMCPProfileRequest
	(*ListMCPProfilesRequest)(nil),         // 4: tars.mcp.v1.ListMCPProfilesRequest
	(*ListMCPProfilesResponse)(nil),        // 5: tars.mcp.v1.ListMCPProfilesResponse
	(*UpdateMCPProfileRequest)(nil),        // 6: tars.mcp.v1.UpdateMCPProfileRequest
	(*DeleteMCPProfileRequest)(nil),        // 7: tars.mcp.v1.DeleteMCPProfileRequest
	(*UpsertCatalogServerRequest)(nil),     // 8: tars.mcp.v1.UpsertCatalogServerRequest
	(*GetCatalogServerRequest)(nil),        // 9: tars.mcp.v1.GetCatalogServerRequest
	(*ListCatalogServersRequest)(nil),      // 10: tars.mcp.v1.ListCatalogServersRequest
	(*ListCatalogServersResponse)(nil),     // 11: tars.mcp.v1.ListCatalogServersResponse
	(*DeleteCatalogServerRequest)(nil),     // 12: tars.mcp.v1.DeleteCatalogServerRequest
	(*SetCatalogServerEnabledRequest)(nil), // 13: tars.mcp.v1.SetCatalogServerEnabledRequest
	(*timestamppb.Timestamp)(nil),          // 14: google.protobuf.Timestamp
	(*v1.PageRequest)(nil),                 // 15: tars.common.v1.PageRequest
	(*v1.PageResponse)(nil),                // 16: tars.common.v1.PageResponse
	(*emptypb.Empty)(nil),                  // 17: google.protobuf.Empty
}
var file_tars_mcp_v1_mcp_proto_depIdxs = []int32{
	14, // 0: tars.mcp.v1.MCPProfile.created_at:type_name -> google.protobuf.Timestamp
	14, // 1: tars.mcp.v1.MCPProfile.updated_at:type_name -> google.protobuf.Timestamp
	14, // 2: tars.mcp.v1.MCPCatalogServer.created_at:type_name -> google.protobuf.Timestamp
	14, // 3: tars.mcp.v1.MCPCatalogServer.updated_at:type_name -> google.protobuf.Timestamp
	15, // 4: tars.mcp.v1.ListMCPProfilesRequest.page:type_name -> tars.common.v1.PageRequest
	0,  // 5: tars.mcp.v1.ListMCPProfilesResponse.profiles:type_name -> tars.mcp.v1.MCPProfile
	16, // 6: tars.mcp.v1.ListMCPProfilesResponse.page:type_name -> tars.common.v1.PageResponse
	15, // 7: tars.mcp.v1.ListCatalogServersRequest.page:type_name -> tars.common.v1.PageRequest
	1,  // 8: tars.mcp.v1.ListCatalogServersResponse.servers:type_name -> tars.mcp.v1.MCPCatalogServer
	16, // 9: tars.mcp.v1.ListCatalogServersResponse.page:type_name -> tars.common.v1.PageResponse
	2,  // 10: tars.mcp.v1.MCPProfilesService.CreateMCPProfile:input_type -> tars.mcp.v1.CreateMCPProfileRequest
	3,  // 11: tars.mcp.v1.MCPProfilesService.GetMCPProfile:input_type -> tars.mcp.v1.GetMCPProfileRequest
	4,  // 12: tars.mcp.v1.MCPProfilesService.ListMCPProfiles:input_type -> tars.mcp.v1.ListMCPProfilesRequest
	6,  // 13: tars.mcp.v1.MCPProfilesService.UpdateMCPProfile:input_type -> tars.mcp.v1.UpdateMCPProfileRequest
	7,  // 14: tars.mcp.v1.MCPProfilesService.DeleteMCPProfile:input_type -> tars.mcp.v1.DeleteMCPProfileRequest
	8,  // 15: tars.mcp.v1.MCPCatalogService.UpsertCatalogServer:input_type -> tars.mcp.v1.UpsertCatalogServerRequest
	9,  // 16: tars.mcp.v1.MCPCatalogService.GetCatalogServer:input_type -> tars.mcp.v1.GetCatalogServerRequest
	10, // 17: tars.mcp.v1.MCPCatalogService.ListCatalogServers:input_type -> tars.mcp.v1.ListCatalogServersRequest
	13, // 18: tars.mcp.v1.MCPCatalogService.SetCatalogServerEnabled:input_type -> tars.mcp.v1.SetCatalogServerEnabledRequest
	12, // 19: tars.mcp.v1.MCPCatalogService.DeleteCatalogServer:input_type -> tars.mcp.v1.DeleteCatalogServerRequest
	0,  // 20: tars.mcp.v1.MCPProfilesService.CreateMCPProfile:output_type -> tars.mcp.v1.MCPProfile
	0,  // 21: tars.mcp.v1.MCPProfilesService.GetMCPProfile:output_type -> tars.mcp.v1.MCPProfile
	5,  // 22: tars.mcp.v1.MCPProfilesService.ListMCPProfiles:output_type -> tars.mcp.v1.ListMCPProfilesResponse
	0,  // 23: tars.mcp.v1.MCPProfilesService.UpdateMCPProfile:output_type -> tars.mcp.v1.MCPProfile
	17, // 24: tars.mcp.v1.MCPProfilesService.DeleteMCPProfile:output_type -> google.protobuf.Empty
	1,  // 25: tars.mcp.v1.MCPCatalogService.UpsertCatalogServer:output_type -> tars.mcp.v1.MCPCatalogServer
	1,  // 26: tars.mcp.v1.MCPCatalogService.GetCatalogServer:output_type -> tars.mcp.v1.MCPCatalogServer
	11, // 27: tars.mcp.v1.MCPCatalogService.ListCatalogServers:output_type -> tars.mcp.v1.ListCatalogServersResponse
	1,  // 28: tars.mcp.v1.MCPCatalogService.SetCatalogServerEnabled:output_type -> tars.mcp.v1.MCPCatalogServer
	17, // 29: tars.mcp.v1.MCPCatalogService.DeleteCatalogServer:output_type -> google.protobuf.Empty
	20, // [20:30] is the sub-list for method output_type
	10, // [10:20] is the sub-list for method input_type
	10, // [10:10] is the sub-list for extension type_name
	10, // [10:10] is the sub-list for extension extendee
	0,  // [0:10] is the sub-list for field type_name
}

func init() { file_tars_mcp_v1_mcp_proto_init() }
func file_tars_mcp_v1_mcp_proto_init() {
	if File_tars_mcp_v1_mcp_proto != nil {
		return
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: unsafe.Slice(unsafe.StringData(file_tars_mcp_v1_mcp_proto_rawDesc), len(file_tars_mcp_v1_mcp_proto_rawDesc)),
			NumEnums:      0,
			NumMessages:   14,
			NumExtensions: 0,
			NumServices:   2,
		},
		GoTypes:           file_tars_mcp_v1_mcp_proto_goTypes,
		DependencyIndexes: file_tars_mcp_v1_mcp_proto_depIdxs,
		MessageInfos:      file_tars_mcp_v1_mcp_proto_msgTypes,
	}.Build()
	File_tars_mcp_v1_mcp_proto = out.File
	file_tars_mcp_v1_mcp_proto_goTypes = nil
	file_tars_mcp_v1_mcp_proto_depIdxs = nil
}
