Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions server/database/schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ CREATE TABLE IF NOT EXISTS deployments_packages (

CREATE TABLE IF NOT EXISTS http_tool_definitions (
id uuid NOT NULL DEFAULT generate_uuidv7(),
tool_urn TEXT,
tool_urn TEXT NOT NULL,

project_id uuid NOT NULL,
deployment_id uuid NOT NULL,
Expand Down Expand Up @@ -516,7 +516,6 @@ CREATE TABLE IF NOT EXISTS toolsets (
slug TEXT NOT NULL CHECK (slug <> '' AND CHAR_LENGTH(slug) <= 60),
description TEXT CHECK (description <> '' AND CHAR_LENGTH(description) <= 250),
default_environment_slug TEXT CHECK (default_environment_slug <> '' AND CHAR_LENGTH(default_environment_slug) <= 60),
http_tool_names TEXT[] DEFAULT ARRAY[]::TEXT[] CHECK (array_length(http_tool_names, 1) <= 5000),
mcp_slug TEXT CHECK (
mcp_slug IS NULL OR (mcp_slug <> '' AND CHAR_LENGTH(mcp_slug) <= 60)
),
Expand Down Expand Up @@ -743,7 +742,7 @@ WHERE deleted IS FALSE;

CREATE TABLE IF NOT EXISTS prompt_templates (
id uuid NOT NULL DEFAULT generate_uuidv7(),
tool_urn TEXT,
tool_urn TEXT NOT NULL,
project_id uuid NOT NULL,

history_id uuid NOT NULL,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,11 +76,16 @@ func (s *GetSlackProjectContext) Do(ctx context.Context, event types.SlackEvent)

toolsetSummaries := make([]SlackToolsetSummary, len(toolsets))
for i, toolset := range toolsets {
toolsetVersion, err := s.toolsetRepo.GetLatestToolsetVersion(ctx, toolset.ID)
if err != nil {
return nil, oops.E(oops.CodeUnexpected, err, "error getting toolset version").Log(ctx, s.logger)
}

toolsetSummaries[i] = SlackToolsetSummary{
ID: toolset.ID,
Slug: toolset.Slug,
Description: conv.FromPGText[string](toolset.Description),
NumberOfTools: len(toolset.HttpToolNames),
NumberOfTools: len(toolsetVersion.ToolUrns),
CreatedAt: toolset.CreatedAt.Time.Format(time.RFC3339),
UpdatedAt: toolset.UpdatedAt.Time.Format(time.RFC3339),
}
Expand Down
1 change: 0 additions & 1 deletion server/internal/database/models.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 1 addition & 3 deletions server/internal/mv/toolset.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ func DescribeToolsetEntry(
}

// Get tool URNs from latest toolset version
// TODO: use this to power everything below rather than the http_tool_names field
var toolUrns []string
latestVersion, err := toolsetRepo.GetLatestToolsetVersion(ctx, toolset.ID)
if err == nil {
Expand Down Expand Up @@ -268,7 +267,6 @@ func DescribeToolset(
}

// Get tool URNs from latest toolset version
// TODO: use this to power everything below rather than the http_tool_names field
var toolUrns []string
var toolsetVersion int64
latestVersion, err := toolsetRepo.GetLatestToolsetVersion(ctx, toolset.ID)
Expand Down Expand Up @@ -307,7 +305,7 @@ func DescribeToolset(

promptTemplates = append(promptTemplates, &types.PromptTemplate{
ID: pt.ID.String(),
ToolUrn: pt.ToolUrn.String,
ToolUrn: pt.ToolUrn,
HistoryID: pt.HistoryID.String(),
PredecessorID: conv.FromNullableUUID(pt.PredecessorID),
Name: pt.Name,
Expand Down
50 changes: 0 additions & 50 deletions server/internal/toolsets/impl.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,20 +110,13 @@ func (s *Service) CreateToolset(ctx context.Context, payload *gen.CreateToolsetP
s.logger.ErrorContext(ctx, "error getting enabled server count", attr.SlogError(err), attr.SlogOrganizationID(authCtx.ActiveOrganizationID))
}

// Process tool URNs and split them by type, so that we still persist HTTP tool names for legacy read purposes
httpToolNames, err := s.extractToolNamesFromUrns(payload.ToolUrns, urn.ToolKindHTTP)
if err != nil {
return nil, oops.E(oops.CodeBadRequest, err, "invalid tool URNs").Log(ctx, s.logger)
}

createToolParams := repo.CreateToolsetParams{
OrganizationID: authCtx.ActiveOrganizationID,
ProjectID: *authCtx.ProjectID,
Name: payload.Name,
Slug: conv.ToSlug(payload.Name),
Description: conv.PtrToPGText(payload.Description),
DefaultEnvironmentSlug: conv.PtrToPGText(nil),
HttpToolNames: httpToolNames,
McpSlug: conv.ToPGText(mcpSlug),
McpEnabled: enabledServerCount == 0, // we automatically enable the first available toolset in an organization as an MCP server
}
Expand Down Expand Up @@ -231,7 +224,6 @@ func (s *Service) UpdateToolset(ctx context.Context, payload *gen.UpdateToolsetP
Name: existingToolset.Name,
DefaultEnvironmentSlug: existingToolset.DefaultEnvironmentSlug,
ProjectID: *authCtx.ProjectID,
HttpToolNames: existingToolset.HttpToolNames,
McpSlug: existingToolset.McpSlug,
McpEnabled: existingToolset.McpEnabled,
CustomDomainID: existingToolset.CustomDomainID,
Expand Down Expand Up @@ -332,26 +324,6 @@ func (s *Service) UpdateToolset(ctx context.Context, payload *gen.UpdateToolsetP
}
}

// BELOW: Legacy logic to continue keeping the http_tool_definitions field up to date
// Process tool URNs and split them by type when ToolUrns are provided
if payload.ToolUrns != nil {
httpToolNames, err := s.extractToolNamesFromUrns(payload.ToolUrns, urn.ToolKindHTTP)
if err != nil {
return nil, oops.E(oops.CodeBadRequest, err, "invalid tool URNs").Log(ctx, logger)
}

// Update only the http_tool_names field
// This is done separately from the updateToolset call above because that call can't distinguish between setting the field to an empty array and not setting it at all
updatedToolset, err = tr.UpdateToolsetHttpToolNames(ctx, repo.UpdateToolsetHttpToolNamesParams{
Slug: conv.ToLower(payload.Slug),
ProjectID: *authCtx.ProjectID,
HttpToolNames: httpToolNames,
})
if err != nil {
return nil, oops.E(oops.CodeUnexpected, err, "error updating toolset http tool names").Log(ctx, logger)
}
}

if err := dbtx.Commit(ctx); err != nil {
return nil, oops.E(oops.CodeUnexpected, err, "error saving updated toolset").Log(ctx, logger)
}
Expand Down Expand Up @@ -428,7 +400,6 @@ func (s *Service) CloneToolset(ctx context.Context, payload *gen.CloneToolsetPay
ProjectID: *authCtx.ProjectID,
Description: originalToolset.Description,
DefaultEnvironmentSlug: originalToolset.DefaultEnvironmentSlug,
HttpToolNames: originalToolset.HttpToolNames,
McpSlug: conv.ToPGText(mcpSlug),
McpEnabled: false, // Don't auto-enable MCP for cloned toolsets
}
Expand Down Expand Up @@ -717,27 +688,6 @@ func (s *Service) createToolsetVersion(ctx context.Context, urnStrings []string,
return nil
}

// extractToolNamesFromUrns extracts tool names of a specific kind from URN strings,
func (s *Service) extractToolNamesFromUrns(toolUrns []string, kind urn.ToolKind) ([]string, error) {
if toolUrns == nil {
return nil, nil
}

var toolNames []string
for _, urnStr := range toolUrns {
var toolUrn urn.Tool
if err := toolUrn.UnmarshalText([]byte(urnStr)); err != nil {
return nil, fmt.Errorf("invalid tool URN %q: %w", urnStr, err)
}

if toolUrn.Kind == kind {
toolNames = append(toolNames, toolUrn.Name)
}
}

return toolNames, nil
}

// updatePromptTemplates updates the prompt templates for a toolset. NOTE: promptTemplates are NOT tools! These correspond to actual "prompts" in MCP
func (s *Service) updatePromptTemplates(ctx context.Context, dbtx pgx.Tx, projectID uuid.UUID, toolsetID uuid.UUID, promptTemplateNames []string, logger *slog.Logger) error {
tr := repo.New(dbtx)
Expand Down
11 changes: 0 additions & 11 deletions server/internal/toolsets/queries.sql
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ INSERT INTO toolsets (
, name
, slug
, description
, http_tool_names
, default_environment_slug
, mcp_slug
, mcp_enabled
Expand All @@ -20,7 +19,6 @@ INSERT INTO toolsets (
, @name
, @slug
, @description
, COALESCE(@http_tool_names::text[], '{}'::text[])
, @default_environment_slug
, @mcp_slug
, @mcp_enabled
Expand All @@ -39,7 +37,6 @@ UPDATE toolsets
SET
name = COALESCE(@name, name)
, description = COALESCE(@description, description)
, http_tool_names = COALESCE(@http_tool_names::text[], http_tool_names)
, default_environment_slug = COALESCE(@default_environment_slug, default_environment_slug)
, mcp_slug = COALESCE(@mcp_slug, mcp_slug)
, mcp_is_public = COALESCE(@mcp_is_public, mcp_is_public)
Expand Down Expand Up @@ -181,11 +178,3 @@ FROM toolset_prompts tp
WHERE tp.toolset_id = @toolset_id
AND tp.project_id = @project_id
ORDER BY tp.prompt_name;

-- name: UpdateToolsetHttpToolNames :one
UPDATE toolsets
SET
http_tool_names = @http_tool_names::text[]
, updated_at = clock_timestamp()
WHERE slug = @slug AND project_id = @project_id
RETURNING *;
1 change: 0 additions & 1 deletion server/internal/toolsets/repo/models.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading