Skip to content

Conversation

@DhashS
Copy link
Collaborator

@DhashS DhashS commented Jan 29, 2026

The MCP tool install page has this button in it.

image

Users wish to customize the text slug away from "View Docs"

Here's a rough plan of implementation.

  • edit HTML go template to include an optional docs url title slug
  • Pass additional variable into template interpolation
  • Fetch docs title slug from DB and populate interpolation structure
  • Create migration to populate db column
  • Edit form to include optional title slug and insert into DB

Open with Devin

@DhashS DhashS requested a review from a team as a code owner January 29, 2026 18:45
@changeset-bot
Copy link

changeset-bot bot commented Jan 29, 2026

⚠️ No Changeset found

Latest commit: 387ef8a

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@vercel
Copy link

vercel bot commented Jan 29, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
gram Ready Ready Preview, Comment Feb 1, 2026 8:28pm
gram-docs-redirect Ready Ready Preview, Comment Feb 1, 2026 8:28pm

Request Review

@github-actions
Copy link
Contributor

github-actions bot commented Jan 29, 2026


Thank you for your submission, we really appreciate it. Like many open-source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution. You can sign the CLA by just posting a Pull Request Comment same as the below format.


I have read the CLA Document and I hereby sign the CLA


1 out of 2 committers have signed the CLA.
✅ (tgmendes)[https://github.com/tgmendes]
@DhashS
You can retrigger this bot by commenting recheck in this Pull Request. Posted by the CLA Assistant Lite bot.

Copy link

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 2 additional flags.

Open in Devin Review

disintegrator
disintegrator previously approved these changes Jan 29, 2026
@disintegrator disintegrator dismissed their stale review January 29, 2026 18:49

seems to be in progress PR

@github-actions github-actions bot added the preview Spawn a preview environment label Jan 29, 2026
@speakeasybot
Copy link
Collaborator

speakeasybot commented Jan 29, 2026

Preview Environment (PR #1405)

Preview environment scaled down after 12h of inactivity.
Re-add the preview label to restart.

@simplesagar simplesagar changed the title Allow customization of "View Docs" in the MCP server install page feat: allow customization of "View Docs" in the MCP server install page Jan 29, 2026
@speakeasybot speakeasybot removed the preview Spawn a preview environment label Jan 30, 2026
Copy link

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 3 new potential issues.

🔴 1 issue in files not directly in the diff

🔴 UpsertMetadata SQL query doesn't include external_documentation_text column, preventing persistence (server/internal/mcpmetadata/queries.sql:8-22)

The UpsertMetadata SQL query in queries.sql doesn't include the external_documentation_text column in either the INSERT or UPDATE clauses, so the custom button text can never be saved to the database.

Click to expand

Current query (queries.sql:8-22)

INSERT INTO mcp_metadata (
    toolset_id,
    project_id,
    external_documentation_url,
    logo_id,
    instructions
    -- external_documentation_text is MISSING
) VALUES (...)
ON CONFLICT (toolset_id)
DO UPDATE SET project_id = EXCLUDED.project_id,
              external_documentation_url = EXCLUDED.external_documentation_url,
              logo_id = EXCLUDED.logo_id,
              instructions = EXCLUDED.instructions,
              -- external_documentation_text is MISSING from UPDATE
              updated_at = clock_timestamp()

Impact

Even though the API design (design/mcpmetadata/design.go:79) accepts external_documentation_text as a payload attribute, and the database schema has the column, the value will never be persisted because the SQL query doesn't include it.

Recommendation: Update the UpsertMetadata query to include external_documentation_text in both INSERT and UPDATE clauses:

INSERT INTO mcp_metadata (
    toolset_id,
    project_id,
    external_documentation_url,
    external_documentation_text,
    logo_id,
    instructions
) VALUES (@toolset_id, @project_id, @external_documentation_url, @external_documentation_text, @logo_id, @instructions)
ON CONFLICT (toolset_id)
DO UPDATE SET ...
              external_documentation_text = EXCLUDED.external_documentation_text,
              ...

Then regenerate the sqlc code with mise gen:sqlc-server.

View issues and 6 additional flags in Devin Review.

Open in Devin Review

Copy link

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 new potential issue.

🔴 1 issue in files not directly in the diff

🔴 UpsertMetadata SQL query doesn't include external_documentation_text column, preventing persistence (server/internal/mcpmetadata/queries.sql:8-22)

The UpsertMetadata SQL query in queries.sql doesn't include the external_documentation_text column in either the INSERT or UPDATE clauses, so the custom button text can never be saved to the database.

Click to expand

Current query (queries.sql:8-22)

INSERT INTO mcp_metadata (
    toolset_id,
    project_id,
    external_documentation_url,
    logo_id,
    instructions
    -- external_documentation_text is MISSING
) VALUES (...)
ON CONFLICT (toolset_id)
DO UPDATE SET project_id = EXCLUDED.project_id,
              external_documentation_url = EXCLUDED.external_documentation_url,
              logo_id = EXCLUDED.logo_id,
              instructions = EXCLUDED.instructions,
              -- external_documentation_text is MISSING from UPDATE
              updated_at = clock_timestamp()

Impact

Even though the API design (design/mcpmetadata/design.go:79) accepts external_documentation_text as a payload attribute, and the database schema has the column, the value will never be persisted because the SQL query doesn't include it.

Recommendation: Update the UpsertMetadata query to include external_documentation_text in both INSERT and UPDATE clauses:

INSERT INTO mcp_metadata (
    toolset_id,
    project_id,
    external_documentation_url,
    external_documentation_text,
    logo_id,
    instructions
) VALUES (@toolset_id, @project_id, @external_documentation_url, @external_documentation_text, @logo_id, @instructions)
ON CONFLICT (toolset_id)
DO UPDATE SET ...
              external_documentation_text = EXCLUDED.external_documentation_text,
              ...

Then regenerate the sqlc code with mise gen:sqlc-server.

View issue and 7 additional flags in Devin Review.

Open in Devin Review

Copy link

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 new potential issue.

🔴 1 issue in files not directly in the diff

🔴 UpsertMetadata SQL query doesn't include external_documentation_text column, preventing persistence (server/internal/mcpmetadata/queries.sql:8-22)

The UpsertMetadata SQL query in queries.sql doesn't include the external_documentation_text column in either the INSERT or UPDATE clauses, so the custom button text can never be saved to the database.

Click to expand

Current query (queries.sql:8-22)

INSERT INTO mcp_metadata (
    toolset_id,
    project_id,
    external_documentation_url,
    logo_id,
    instructions
    -- external_documentation_text is MISSING
) VALUES (...)
ON CONFLICT (toolset_id)
DO UPDATE SET project_id = EXCLUDED.project_id,
              external_documentation_url = EXCLUDED.external_documentation_url,
              logo_id = EXCLUDED.logo_id,
              instructions = EXCLUDED.instructions,
              -- external_documentation_text is MISSING from UPDATE
              updated_at = clock_timestamp()

Impact

Even though the API design (design/mcpmetadata/design.go:79) accepts external_documentation_text as a payload attribute, and the database schema has the column, the value will never be persisted because the SQL query doesn't include it.

Recommendation: Update the UpsertMetadata query to include external_documentation_text in both INSERT and UPDATE clauses:

INSERT INTO mcp_metadata (
    toolset_id,
    project_id,
    external_documentation_url,
    external_documentation_text,
    logo_id,
    instructions
) VALUES (@toolset_id, @project_id, @external_documentation_url, @external_documentation_text, @logo_id, @instructions)
ON CONFLICT (toolset_id)
DO UPDATE SET ...
              external_documentation_text = EXCLUDED.external_documentation_text,
              ...

Then regenerate the sqlc code with mise gen:sqlc-server.

View issue and 6 additional flags in Devin Review.

Open in Devin Review

@github-actions
Copy link
Contributor

atlas migrate lint on server/migrations

Status Step Result
1 new migration file detected atlas.sum
ERD and visual diff generated View Visualization
Migration Integrity Check
File atlas.sum is invalid
checksum mismatch
Read the full linting report on Atlas Cloud

Copy link

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 3 new potential issues.

🔴 2 issues in files not directly in the diff

🔴 SQL query missing external_documentation_text column in SELECT (server/internal/mcpmetadata/queries.sql:1-16)

The GetMetadataForToolset SQL query doesn't select the new external_documentation_text column, so the field will never be populated when reading from the database.

Click to expand

Impact

The code at server/internal/mcpmetadata/impl.go:669 tries to read metadataRecord.ExternalDocumentationText:

if docs := conv.FromPGText[string](metadataRecord.ExternalDocumentationText); docs != nil {
    docsBtnText = strings.TrimSpace(*docs)
}

But the SQL query in queries.sql only selects these columns:

SELECT id, toolset_id, project_id, external_documentation_url, logo_id,
       instructions, header_display_names, default_environment_id,
       installation_override_url, created_at, updated_at
FROM mcp_metadata

The external_documentation_text column is missing from the SELECT list. The generated GetMetadataForToolsetRow type in queries.sql.go:72-84 doesn't have this field.

Expected behavior

The query should include external_documentation_text in the SELECT list.


🔴 UpsertMetadata SQL query doesn't include external_documentation_text column, preventing persistence (server/internal/mcpmetadata/queries.sql:8-22)

The UpsertMetadata SQL query in queries.sql doesn't include the external_documentation_text column in either the INSERT or UPDATE clauses, so the custom button text can never be saved to the database.

Click to expand

Current query (queries.sql:8-22)

INSERT INTO mcp_metadata (
    toolset_id,
    project_id,
    external_documentation_url,
    logo_id,
    instructions
    -- external_documentation_text is MISSING
) VALUES (...)
ON CONFLICT (toolset_id)
DO UPDATE SET project_id = EXCLUDED.project_id,
              external_documentation_url = EXCLUDED.external_documentation_url,
              logo_id = EXCLUDED.logo_id,
              instructions = EXCLUDED.instructions,
              -- external_documentation_text is MISSING from UPDATE
              updated_at = clock_timestamp()

Impact

Even though the API design (design/mcpmetadata/design.go:79) accepts external_documentation_text as a payload attribute, and the database schema has the column, the value will never be persisted because the SQL query doesn't include it.

Recommendation: Update the UpsertMetadata query to include external_documentation_text in both INSERT and UPDATE clauses:

INSERT INTO mcp_metadata (
    toolset_id,
    project_id,
    external_documentation_url,
    external_documentation_text,
    logo_id,
    instructions
) VALUES (@toolset_id, @project_id, @external_documentation_url, @external_documentation_text, @logo_id, @instructions)
ON CONFLICT (toolset_id)
DO UPDATE SET ...
              external_documentation_text = EXCLUDED.external_documentation_text,
              ...

Then regenerate the sqlc code with mise gen:sqlc-server.

View issues and 7 additional flags in Devin Review.

Open in Devin Review

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 SetMcpMetadata doesn't handle ExternalDocumentationText payload field

The SetMcpMetadata function doesn't process the payload.ExternalDocumentationText field and doesn't pass it to the UpsertMetadataParams.

Click to expand

Impact

The API design at server/design/mcpmetadata/design.go:178 defines the payload attribute:

Attribute("external_documentation_text", String, "Custom text for the external documentation link button")

But SetMcpMetadata in impl.go only handles these fields from the payload:

  • ExternalDocumentationURL (line 211-214)
  • Instructions (line 216-219)
  • LogoAssetID, DefaultEnvironmentID, InstallationOverrideURL, etc.

The ExternalDocumentationText field is never read from the payload and never passed to UpsertMetadataParams at lines 235-243.

Expected behavior

The function should extract payload.ExternalDocumentationText and include it in the UpsertMetadataParams struct passed to s.repo.UpsertMetadata().

(Refers to lines 235-243)

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Copy link

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 2 new potential issues.

View issues and 7 additional flags in Devin Review.

Open in Devin Review

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 SQL query missing external_documentation_text column in SELECT

The GetMetadataForToolset SQL query doesn't select the new external_documentation_text column, so the field will never be populated when reading from the database.

Click to expand

Impact

The code at server/internal/mcpmetadata/impl.go:669 tries to read metadataRecord.ExternalDocumentationText:

if docs := conv.FromPGText[string](metadataRecord.ExternalDocumentationText); docs != nil {
    docsBtnText = strings.TrimSpace(*docs)
}

But the SQL query in queries.sql only selects these columns:

SELECT id, toolset_id, project_id, external_documentation_url, logo_id,
       instructions, header_display_names, default_environment_id,
       installation_override_url, created_at, updated_at
FROM mcp_metadata

The external_documentation_text column is missing from the SELECT list. The generated GetMetadataForToolsetRow type in queries.sql.go:72-84 doesn't have this field.

Expected behavior

The query should include external_documentation_text in the SELECT list.

(Refers to lines 1-16)

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Comment on lines +1 to +2
-- Modify "mcp_metadata" table
ALTER TABLE "mcp_metadata" ADD COLUMN "external_documentation_text" text NULL;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 Duplicate migrations will fail: both add the same column

Two migration files attempt to add the same column external_documentation_text to the mcp_metadata table. When the second migration runs, it will fail with a "column already exists" error.

Click to expand

Duplicate migrations

  • 20260129185604_add-mcp-metadata-title-slug.sql adds external_documentation_text
  • 20260201200255_add-mcp-metadata-title-text.sql adds the same column again

Both contain:

ALTER TABLE "mcp_metadata" ADD COLUMN "external_documentation_text" text NULL;

Impact: Database migrations will fail in any environment where the first migration has already run, blocking deployments.

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants